sourcecode 5.9.4__tar.gz → 5.9.6__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.9.4 → sourcecode-5.9.6}/CHANGELOG.md +17 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/PKG-INFO +5 -5
- {sourcecode-5.9.4 → sourcecode-5.9.6}/README.md +4 -4
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/DEFECT-LEDGER.md +64 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/DEVELOPMENT-ROADMAP.md +89 -3
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/EXECUTIVE-ROADMAP.md +2 -2
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/MANUAL-USUARIO.md +2 -2
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/USER_GUIDE.md +4 -4
- {sourcecode-5.9.4 → sourcecode-5.9.6}/pyproject.toml +1 -1
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/cli.py +62 -30
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/self_audit.py +25 -1
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_model.py +41 -1
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/summarizer.py +4 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/.github/workflows/windows-battery.yml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/.gitignore +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/.ruff.toml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/CLAUDE.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/CONTRIBUTING.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/LICENSE +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/NOTICE +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/SECURITY.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/CACHE.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/overview.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/contracts.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/licensing-schema.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/migrate-check.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/README.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/posture.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/privacy.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/schema.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/hatch_build.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/scripts/context_cost_harness.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/scripts/perf_gate.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/scripts/perf_harness.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/scripts/test_fast.sh +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/access_drift.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/audit_verify.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/baseline_attestation.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/c4_render.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/cve_feed.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/cve_reachability.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/findings_baseline.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/intent_router.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/license.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/packs.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/pr_risk.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/regulatory_pack.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/remediation_flow.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/remediation_report.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/vex.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/watch_loop.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/supabase/functions/README.md +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.9.4 → sourcecode-5.9.6}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.9.6] — 2026-08-27
|
|
4
|
+
|
|
5
|
+
*Roadmap correction and release-alignment patch release.*
|
|
6
|
+
|
|
7
|
+
**Fixed**
|
|
8
|
+
|
|
9
|
+
- Makes explicit cache warming durable across processes.
|
|
10
|
+
- Reconciles Spring presence detection for foreign member annotations.
|
|
11
|
+
- Removes split Markdown badge fragments from README-derived summaries.
|
|
12
|
+
- Makes empty baseline history an explicit `no_history` result.
|
|
13
|
+
- Explains the intentional CLI/MCP population difference in `self-audit`.
|
|
14
|
+
|
|
15
|
+
**Validation**
|
|
16
|
+
|
|
17
|
+
- Added dedicated regression coverage using `/Users/user/Documents/workspace/testing/teavm`.
|
|
18
|
+
- Updated README, English and Spanish guides, roadmap, ledger and CLI version output.
|
|
19
|
+
|
|
3
20
|
## [5.9.4] — 2026-08-27
|
|
4
21
|
|
|
5
22
|
*External-audit reliability and contract-alignment release.*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.9.
|
|
3
|
+
Version: 5.9.6
|
|
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
|
|
@@ -196,7 +196,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
196
196
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
197
197
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
198
198
|
|
|
199
|
-
**Current performance status.** Release 5.9.
|
|
199
|
+
**Current performance status.** Release 5.9.6 retains the shared Canonical IR
|
|
200
200
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
201
201
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
202
202
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -218,7 +218,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
|
|
|
218
218
|
invalid input rather than treated as an empty repository. This prevents silent
|
|
219
219
|
entitlement errors in CI and does not change per-repository gates or billing.
|
|
220
220
|
|
|
221
|
-
Release 5.9.
|
|
221
|
+
Release 5.9.6 also hardens the boundary contracts: missing consumer repositories,
|
|
222
222
|
malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
|
|
223
223
|
input errors; duplicate same-commit baselines are never overwritten. `posture
|
|
224
224
|
--diff` validates unknown profiles when the repository declares profiles. In
|
|
@@ -251,7 +251,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
251
251
|
# pip / pipx
|
|
252
252
|
pipx install sourcecode # or: pip install sourcecode
|
|
253
253
|
|
|
254
|
-
ask version # ask 5.9.
|
|
254
|
+
ask version # ask 5.9.6 — and, on a build that has aged,
|
|
255
255
|
# how many releases have probably shipped since
|
|
256
256
|
```
|
|
257
257
|
|
|
@@ -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
|
|
@@ -147,7 +147,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
147
147
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
148
148
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
149
149
|
|
|
150
|
-
**Current performance status.** Release 5.9.
|
|
150
|
+
**Current performance status.** Release 5.9.6 retains the shared Canonical IR
|
|
151
151
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
152
152
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
153
153
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -169,7 +169,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
|
|
|
169
169
|
invalid input rather than treated as an empty repository. This prevents silent
|
|
170
170
|
entitlement errors in CI and does not change per-repository gates or billing.
|
|
171
171
|
|
|
172
|
-
Release 5.9.
|
|
172
|
+
Release 5.9.6 also hardens the boundary contracts: missing consumer repositories,
|
|
173
173
|
malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
|
|
174
174
|
input errors; duplicate same-commit baselines are never overwritten. `posture
|
|
175
175
|
--diff` validates unknown profiles when the repository declares profiles. In
|
|
@@ -202,7 +202,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
202
202
|
# pip / pipx
|
|
203
203
|
pipx install sourcecode # or: pip install sourcecode
|
|
204
204
|
|
|
205
|
-
ask version # ask 5.9.
|
|
205
|
+
ask version # ask 5.9.6 — and, on a build that has aged,
|
|
206
206
|
# how many releases have probably shipped since
|
|
207
207
|
```
|
|
208
208
|
|
|
@@ -16,6 +16,70 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
|
|
|
16
16
|
|
|
17
17
|
## Current Synchronization
|
|
18
18
|
|
|
19
|
+
**Field simulation on TeaVM, 2026-08-27 — `ASK-FIELD`.** A deep, non-destructive
|
|
20
|
+
run of ASK `5.9.5` against `/Users/user/Documents/workspace/testing/teavm`
|
|
21
|
+
(4,024 files; 3,539 Java files) exercised the main analysis commands, packs,
|
|
22
|
+
baseline lifecycle, contracts and cache lifecycle. The checkout stayed clean
|
|
23
|
+
and the prior release closure set showed no regression. Three behaviours were
|
|
24
|
+
reproduced and are now closed below: cache warming was not visible to subsequent
|
|
25
|
+
processes, root README summary extraction emitted a Markdown-link fragment, and
|
|
26
|
+
Spring presence disagreed between `spring-audit` and `migrate-check`. The run
|
|
27
|
+
also confirmed that endpoint zero-result disclosure, legal input refusals,
|
|
28
|
+
baseline collision protection, pack `UNVERIFIED` semantics and target
|
|
29
|
+
non-mutation remain intact. This is field evidence, not an external audit; it
|
|
30
|
+
must not be represented as a release certification.
|
|
31
|
+
|
|
32
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
33
|
+
|---|---:|---|---|
|
|
34
|
+
| `ASK-FIELD-01` | P1 | **closed 5.9.6 (`829f9fa`)** | Explicit warm persists synchronously in its declared namespace; the fresh-process TeaVM lifecycle battery passes. |
|
|
35
|
+
| `ASK-FIELD-02` | P1 | **closed 5.9.6 (`6a659fa`)** | Member annotation imports resolve from the declaring class and confirmed Spring evidence drives presence; TeaVM and Spring control parity passes. |
|
|
36
|
+
| `ASK-FIELD-03` | P2 | **closed 5.9.6 (`55b0d51`)** | Split Markdown badge continuations are discarded without changing normal inline-link unwrapping; the real TeaVM summary regression passes. |
|
|
37
|
+
|
|
38
|
+
The simulation did not open the Kotlin/Java/Node classification as a defect:
|
|
39
|
+
the signals were explicitly confidence-scored and may represent a legitimate
|
|
40
|
+
polyglot repository. It also did not open zero endpoints, minimum token-budget
|
|
41
|
+
refusal, unsupported `explain --compact`, or contractless `verify`: each matched
|
|
42
|
+
the declared contract and non-coverage in the observed run.
|
|
43
|
+
|
|
44
|
+
**External audit intake `AUD-610`, release 5.9.3 — 2026-08-27.** The attached
|
|
45
|
+
report scored the build **7.2/10** after five parallel batches and approximately
|
|
46
|
+
120 invocations. It verified a clean target repository, no Java-file changes,
|
|
47
|
+
no commits and no unauthorized persistence. The report praised structured errors,
|
|
48
|
+
output bounding for agents and dry-run safety, but identified 17 defects or
|
|
49
|
+
follow-ups. The full future closure criteria are maintained in
|
|
50
|
+
[`DEVELOPMENT-ROADMAP.md`](DEVELOPMENT-ROADMAP.md); the ledger records their
|
|
51
|
+
status boundary here so a later fix cannot silently close only one consumer.
|
|
52
|
+
|
|
53
|
+
The report's P1 reliability cluster was `AUD-610-B01` (root YAML compact/agent
|
|
54
|
+
zero-byte failure), `AUD-610-B02` (all `audit-report` formats zero-byte failure),
|
|
55
|
+
`AUD-610-B03` (`risk --limit 0` legal-boundary crash) and `AUD-610-B04`
|
|
56
|
+
(`timeline --since` pays for work then fails silently). None reproduced in the
|
|
57
|
+
TeaVM `5.9.5` simulation; they are held as release-artifact verification items,
|
|
58
|
+
not open deterministic defects.
|
|
59
|
+
|
|
60
|
+
The remaining rows are: `AUD-610-B05` consumer-path admission (**closed
|
|
61
|
+
5.9.4**, `86ed0a3`); `AUD-610-B06` invalid-input exit parity (**closed**,
|
|
62
|
+
`ae2e8b1`, `f4b4f77`); `AUD-610-B07` command/path typo disambiguation
|
|
63
|
+
(**closed**, `178aa6d`); `AUD-610-B08` pack
|
|
64
|
+
gate ref admission (**closed 5.9.4**, `6690a7f`); `AUD-610-B09` inaccurate
|
|
65
|
+
root help for `--files -` (**closed**, `f66cd28`, `52bcc36`); `AUD-610-B10`
|
|
66
|
+
not-found envelope parity (**closed**, `c07581a`);
|
|
67
|
+
`AUD-610-B11` malformed CVE feed status (**closed 5.9.4**, `abc6319`);
|
|
68
|
+
`AUD-610-B12` unknown posture profiles (**closed 5.9.4**, `f7335b1`, `6e75646`);
|
|
69
|
+
`AUD-610-B13` baseline overwrite (**closed 5.9.4**, `cbe4da9`);
|
|
70
|
+
`AUD-610-B14` CLI/MCP population explanation (**closed**, `7c9b23e`);
|
|
71
|
+
`AUD-610-B15` no-history contract parity (**closed**, `a130637`);
|
|
72
|
+
`AUD-610-B16` UTF-8 replacement character (**platform verification hold**);
|
|
73
|
+
and `AUD-610-B17` one-off retrieve silent failure (**investigation hold, not
|
|
74
|
+
reproduced**).
|
|
75
|
+
|
|
76
|
+
Commercially, the report recommends conditional pilot/adoption and a provisional
|
|
77
|
+
`$35-50/developer/month` band, requiring closure of the flagship zero-byte paths
|
|
78
|
+
before an annual commitment. This is recorded as external market evidence, not
|
|
79
|
+
as a pricing approval or a product claim. The destructive commands excluded by
|
|
80
|
+
the auditor remain outside the evidence set because only their dry-run paths were
|
|
81
|
+
executed.
|
|
82
|
+
|
|
19
83
|
**External `5.9.0` audit received, 2026-08-26 - `AUD-608`; corrections shipped in `5.9.1`.** The audited
|
|
20
84
|
revision is the released `5.9.0` commit. The three confirmed corrections are
|
|
21
85
|
closed: `AUD-608-C01` (P1, `cve` now declares its static inventory scope,
|
|
@@ -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.9.
|
|
6
|
+
> **CURRENT QUEUE — release `5.9.6`; external reconciliation `AUD-610` is triaged and the reproducible fixes are implemented.**
|
|
7
7
|
> The 2026-08-27 external review adds `AUD-610-B01` through `AUD-610-B10`, led by
|
|
8
8
|
> silent `selftest` nondeterminism, silent root/audit-report failures, a legal-zero
|
|
9
9
|
> `risk --limit 0` crash, an unvalidated consumer path and contradictory Spring
|
|
@@ -11,14 +11,29 @@ customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
|
|
|
11
11
|
> admission (`86ed0a3`), CVE feed integrity (`abc6319`), gate ref admission
|
|
12
12
|
> (`6690a7f`), posture profile admission (`f7335b1`, `6e75646`), baseline
|
|
13
13
|
> collision protection (`cbe4da9`), compact endpoint disclosure (`8a1936f`)
|
|
14
|
-
> and unresolved impact exits (`c07581a`). The
|
|
15
|
-
>
|
|
14
|
+
> and unresolved impact exits (`c07581a`). The remaining external-only reliability
|
|
15
|
+
> observations are held for release-artifact verification and must not be presented
|
|
16
|
+
> as product defects. Full triage is in
|
|
16
17
|
> [`AUDIT-2026-08-27-EXTERNAL-5.9.3.md`](AUDIT-2026-08-27-EXTERNAL-5.9.3.md).
|
|
17
18
|
> The 2026-08-27 external review adds `AUD-609-B01` (overlapping workspace paths
|
|
18
19
|
> double-count Java files) and `AUD-609-B02` (missing workspace paths accepted as
|
|
19
20
|
> empty repositories); both are fixed in `5.9.3`. It reports no regression in the
|
|
20
21
|
> prior closure set. Evidence and the commercial interpretation are in
|
|
21
22
|
> [`AUDIT-2026-08-27-EXTERNAL-5.9.2.md`](AUDIT-2026-08-27-EXTERNAL-5.9.2.md).
|
|
23
|
+
|
|
24
|
+
> **FIELD SIMULATION — TeaVM, 2026-08-27.** A deep real-use simulation of the
|
|
25
|
+
> released `5.9.6` build was run against
|
|
26
|
+
> `/Users/user/Documents/workspace/testing/teavm` (4,024 files, 3,539 Java
|
|
27
|
+
> files, clean checkout before and after, 96 persisted artefacts). It exercised
|
|
28
|
+
> root JSON/YAML, `spring-audit`, `migrate-check`, `endpoints`, `risk`, `impact`,
|
|
29
|
+
> `impact-chain`, `posture --diff`, audit reports, self-audit, packs, contracts,
|
|
30
|
+
> baselines, attestation and cache lifecycle. No regression was found in the
|
|
31
|
+
> previously closed contract fixes, and the target repository was not modified.
|
|
32
|
+
> It did, however, confirm three follow-up defects: cache persistence across
|
|
33
|
+
> processes, a split Markdown badge fragment in the README summary, and divergent
|
|
34
|
+
> Spring-presence signals. All three are now closed below as `ASK-FIELD-01` through
|
|
35
|
+
> `ASK-FIELD-03`; the fix evidence does not imply that TeaVM is a supported Spring
|
|
36
|
+
> target.
|
|
22
37
|
> `AUD-608-C01` is closed in `fe1f624`: `cve` declares static
|
|
23
38
|
> dependency-inventory coverage and non-coverage. `AUD-608-P01` is closed in
|
|
24
39
|
> `b479465`: `pr-risk --since` constructs its base context and surfaces failures
|
|
@@ -129,6 +144,77 @@ triage is in [`AUDIT-2026-08-27-EXTERNAL-5.9.2.md`](AUDIT-2026-08-27-EXTERNAL-5.
|
|
|
129
144
|
| `AUD-609-C01` | P2 | Signed evidence and historical attestation use different integrity contracts. | Decide whether `baseline attest` gains the existing signing mechanism or clearly publishes that it is unsigned; document the choice in help, schema and buyer-facing material. Do not call unsigned output a certificate or compliance proof. | **Queued, commercial validation.** No implementation claim until the signing boundary and key model are explicit. |
|
|
130
145
|
| `AUD-609-C02` | P3 | Translate technical evidence into concrete ENS/CRA controls. | Define a named control mapping with source evidence, missing evidence and `legal_claim: false`; validate it with a named compliance buyer or auditor before presenting it as a market capability. | **Queued, buyer-gated.** `audit-report --pack ens` remains evidence mapping only. |
|
|
131
146
|
|
|
147
|
+
### Field Follow-up — TeaVM simulation, 2026-08-27
|
|
148
|
+
|
|
149
|
+
These rows are engineering follow-ups from a controlled real-repository
|
|
150
|
+
simulation, not findings from an external auditor. They are intentionally
|
|
151
|
+
separate from `AUD-610`: the earlier release audit's non-reproduced observations
|
|
152
|
+
remain non-reproduced, while these three behaviours were reproduced directly on
|
|
153
|
+
the TeaVM checkout. The simulation also confirms that the normal structured-error
|
|
154
|
+
paths, pack verdicts, baseline collision protection, output bounds and target
|
|
155
|
+
repository cleanliness continue to behave as documented.
|
|
156
|
+
|
|
157
|
+
| ID | Priority | Finding | Acceptance criteria | Status/order |
|
|
158
|
+
|---|---:|---|---|---|
|
|
159
|
+
| `ASK-FIELD-01` | P1 | `cache warm` failed to make the next process observe persisted cache state. | Use one canonical cache namespace and target identity; a fresh process must observe the declared warm state and persisted entries. | **Closed in `5.9.6` (`829f9fa`).** Explicit warm persistence is synchronous and the TeaVM lifecycle battery passes. |
|
|
160
|
+
| `ASK-FIELD-02` | P1 | TeaVM exposed divergent Spring-presence signals between `spring-audit` and `migrate-check`. | Resolve member annotation imports and require confirmed Spring evidence for cross-command presence. | **Closed in `5.9.6` (`6a659fa`).** TeaVM and a Spring control repository now agree; no heuristic broadening was added. |
|
|
161
|
+
| `ASK-FIELD-03` | P2 | Root compact summary leaked a split Markdown Discord badge continuation. | README summaries must never emit URL delimiters or badge fragments while preserving normal inline links. | **Closed in `5.9.6` (`55b0d51`).** The TeaVM README regression and summarizer battery pass. |
|
|
162
|
+
|
|
163
|
+
**Observed but not opened as defects:** TeaVM was classified as Kotlin
|
|
164
|
+
full-stack with Java as a low-confidence secondary signal and Node.js from a
|
|
165
|
+
manifest; this may be expected multi-language evidence but needs corpus review
|
|
166
|
+
before changing classification. `endpoints` returning zero was accompanied by
|
|
167
|
+
the declared zero-result/non-coverage explanation. `repo-ir --budget-tokens`
|
|
168
|
+
refusing a budget below its minimum estimate, `explain --compact` rejecting an
|
|
169
|
+
unsupported flag, and `verify` returning `UNVERIFIED` without contracts all
|
|
170
|
+
matched their documented contracts. These behaviours must remain in regression
|
|
171
|
+
coverage, but are not roadmap bugs from this run.
|
|
172
|
+
|
|
173
|
+
### External Audit Intake — `AUD-610` detail, release 5.9.3
|
|
174
|
+
|
|
175
|
+
The attached external report audited ASK `5.9.3` in five parallel batches
|
|
176
|
+
(approximately 120 invocations), scored it **7.2/10**, and found the audited
|
|
177
|
+
repository clean: no Java files, commits or unauthorized persisted files were
|
|
178
|
+
changed. Its strongest positive evidence was structured error quality (9.0),
|
|
179
|
+
agent-oriented output bounding (9.5) and default non-destructiveness (9.0).
|
|
180
|
+
Its commercial conclusion was **conditional adoption/pilot**, with a suggested
|
|
181
|
+
price band of `$35-50/developer/month`, contingent on closing the flagship
|
|
182
|
+
silent-failure paths before an annual commitment. That price is an external
|
|
183
|
+
hypothesis, not an ASK pricing decision.
|
|
184
|
+
|
|
185
|
+
The detailed intake below preserves every reported error and its future closure
|
|
186
|
+
boundary. Status is evaluated against the current `5.9.6` documentation and the
|
|
187
|
+
TeaVM simulation above, not blindly copied from the audited `5.9.3` build.
|
|
188
|
+
|
|
189
|
+
| ID | Severity | Reported issue | Roadmap disposition and future closure |
|
|
190
|
+
|---|---:|---|---|
|
|
191
|
+
| `AUD-610-B01` | P1 | Root YAML compact/agent reportedly returned zero bytes and progress reportedly exited 127. | **Not reproduced in `5.9.5` TeaVM; held as release-artifact verification, not an open product defect.** Current usage/error batteries require structured stderr on failure. |
|
|
192
|
+
| `AUD-610-B02` | P1 | `audit-report` reportedly returned zero bytes across formats and output modes. | **Not reproduced in `5.9.5` TeaVM; held as release-artifact verification.** JSON, YAML, Markdown and file-output paths completed with evidence. |
|
|
193
|
+
| `AUD-610-B03` | P1 | `risk --limit 0` reportedly crashed silently. | **Not reproduced in `5.9.5` TeaVM; held as release-artifact verification.** TeaVM accepted zero as a legal empty-list bound and the boundary battery passes. |
|
|
194
|
+
| `AUD-610-B04` | P1 | `timeline --since HEAD~5` reportedly paid for work and then returned empty output. | **Not reproduced in `5.9.5` TeaVM; held as release-artifact verification.** Timeline failures publish structured diagnostics and sampled failures retain per-sample reasons. |
|
|
195
|
+
| `AUD-610-B05` | P1 | `endpoints --consumer <missing-path>` reportedly behaved like a valid consumer path and produced the same oversized result. | **Closed in `5.9.4` (`86ed0a3`).** Consumer paths now have explicit admission and fail closed; retain the missing-path and valid-path differential battery. |
|
|
196
|
+
| `AUD-610-B06` | P2 | Semantic input errors reportedly had inconsistent process exits. | **Closed by the shared error contract (`ae2e8b1`, `f4b4f77`).** `INVALID_INPUT` is exit 1 and parser/grammar failures are exit 2; usage and subprocess parity batteries pass. |
|
|
197
|
+
| `AUD-610-B07` | P2 | Unknown subcommands were reportedly swallowed as repository paths. | **Closed (`178aa6d`).** Registry-derived dispatch rejects the typo before path fallback and preserves valid lone path arguments. |
|
|
198
|
+
| `AUD-610-B08` | P2 | `pack gate --since <missing-ref>` reportedly collapsed the actionable Git ref error into generic `UNVERIFIED`, unlike direct `pr-impact`. | **Closed in `5.9.4` (`6690a7f`).** Unresolved refs are rejected at admission with structured input evidence; preserve direct-vs-pack parity coverage. |
|
|
199
|
+
| `AUD-610-B09` | P2 | Root help reportedly described `--files -` ambiguously. | **Closed (`f66cd28`, `52bcc36`).** Root and subcommand help state path-list stdin, file and comma-separated shapes; real unified diffs are rejected as invalid input. |
|
|
200
|
+
| `AUD-610-B10` | P2 | Missing symbols reportedly produced divergent impact risk/score semantics. | **Closed (`c07581a` plus `tests/test_direct_callers_unit.py`).** Unresolved paths use the shared `not_found` vocabulary, unknown risk, null score where arithmetic is not applicable and consistent non-zero exit. |
|
|
201
|
+
| `AUD-610-B11` | P2 | Malformed CVE feed reportedly yielded `status: ok` with the parse problem buried in `limitations`. | **Closed in `5.9.4` (`abc6319`).** Feed integrity is fail-closed and statically scoped; preserve malformed, empty and mixed-validity feed tests so a security feed cannot silently degrade to “clean”. |
|
|
202
|
+
| `AUD-610-B12` | P2 | Invented posture profile names were accepted and returned a normal-looking result. | **Closed in `5.9.4` (`f7335b1`, `6e75646`).** Unknown declared populations are rejected; retain profile-admission and cross-command tests. |
|
|
203
|
+
| `AUD-610-B13` | P2 | Repeated baseline capture at the same commit reportedly overwrote the prior evidence without warning or `--force`. | **Closed in `5.9.4` (`cbe4da9`).** Same-commit collisions are rejected; retain duplicate, explicit overwrite and cross-kind tests. |
|
|
204
|
+
| `AUD-610-B14` | P2 | `self-audit` reported a different CLI/MCP count without explaining the populations. | **Closed in `5.9.6` (`7c9b23e`).** `self-audit` publishes both populations, native MCP additions and the relationship formula; TeaVM process regression passes. |
|
|
205
|
+
| `AUD-610-B15` | P3 | `baseline diff`/`trend` failed on no history while `baseline attest` returned `no_history`. | **Closed in `5.9.6` (`a130637`).** Diff, trend and attest now return `status: no_history`, exit 0 and explicit `non_coverage` for empty history. |
|
|
206
|
+
| `AUD-610-B16` | P3 | A replacement character (`�`) reportedly appeared in production JSON around a UTF-8 boundary in posture non-coverage text. | **Open reproduction follow-up.** Run byte-level UTF-8 tests on the exact payload and supported platforms, including em dash/arrow boundaries. If confirmed, fix serialization/truncation at code-point boundaries; if not, record the platform cause and keep the claim withdrawn. |
|
|
207
|
+
| `AUD-610-B17` | P3 | One `retrieve endpoint-security` invocation reportedly failed silently, then succeeded immediately on retry; no second reproduction was obtained. | **Investigation only.** Add correlation IDs, phase-level failure capture and a repeated/concurrent cache-control test. Do not classify a transient single sample as a deterministic defect until reproduced. |
|
|
208
|
+
|
|
209
|
+
**Audit exclusions and interpretation:** destructive `rename-class` without
|
|
210
|
+
`--dry-run` and `migrate-apply --write` were not executed for safety; the latter
|
|
211
|
+
was additionally blocked by the auditor's sandbox heuristic, not by an ASK
|
|
212
|
+
failure. The report found no regression in the previously closed surfaces and
|
|
213
|
+
confirmed dry-run/non-destructive behaviour. Until `AUD-610-B01` through
|
|
214
|
+
`AUD-610-B04` and the remaining consistency rows are independently closed, ASK
|
|
215
|
+
must retain conditional-pilot positioning and must not promise silent-failure
|
|
216
|
+
freedom or annual-grade reliability.
|
|
217
|
+
|
|
132
218
|
### Explicitly Rejected
|
|
133
219
|
|
|
134
220
|
These are not roadmap work: `--format` and `--compact` remain separate contracts;
|
|
@@ -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 UPDATE — release `5.9.
|
|
8
|
+
> **CURRENT UPDATE — release `5.9.6`, following the external `5.9.3` reconciliation.**
|
|
9
9
|
> The commercial increment adds stateless context budgets, a reproducible context-cost harness,
|
|
10
10
|
> source-level migration SARIF and an opt-in workspace entitlement pilot. Advisory behaviour remains
|
|
11
11
|
> the default; named-buyer validation is still required before broad enforcement.
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
> posture is conditional pilot until the flagship failures are fixed and re-tested.
|
|
46
46
|
> Full triage: [`AUDIT-2026-08-27-EXTERNAL-5.9.3.md`](AUDIT-2026-08-27-EXTERNAL-5.9.3.md).
|
|
47
47
|
|
|
48
|
-
> **5.9.
|
|
48
|
+
> **5.9.6 reliability correction.** The reproducible contract defects from the
|
|
49
49
|
> latest review are closed: missing consumer paths and malformed CVE feeds now
|
|
50
50
|
> fail closed; `pack gate` rejects unresolved refs; posture profile diffs reject
|
|
51
51
|
> unknown declared-population names; baselines refuse same-commit overwrite;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Manual de usuario — ASK Engine
|
|
2
2
|
|
|
3
|
-
> Versión de la herramienta: **5.9.
|
|
3
|
+
> Versión de la herramienta: **5.9.6** · El comando que se ejecuta es `ask`.
|
|
4
4
|
> (`sourcecode` sigue funcionando como alias en desactivación y reenvía a `ask`.)
|
|
5
5
|
> Público: personas que van a usar `ask` por primera vez, sin conocimiento previo.
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## 1. ¿Qué es ASK Engine?
|
|
10
10
|
|
|
11
|
-
### Contratos de fiabilidad de la versión 5.9.
|
|
11
|
+
### Contratos de fiabilidad de la versión 5.9.6
|
|
12
12
|
|
|
13
13
|
Las entradas inválidas se rechazan antes del análisis costoso mediante el
|
|
14
14
|
envelope estructurado `INVALID_INPUT`: un `--consumer` inexistente, un feed CVE
|
|
@@ -46,16 +46,16 @@ 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.9.
|
|
49
|
+
5.9.6, `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.9.
|
|
55
|
+
the two pack fixes are included in release 5.9.6, with release-artifact verification
|
|
56
56
|
remaining for detached execution and pack evidence.
|
|
57
57
|
|
|
58
|
-
### Reliability contracts in 5.9.
|
|
58
|
+
### Reliability contracts in 5.9.6
|
|
59
59
|
|
|
60
60
|
Invalid analysis inputs fail before expensive work and use the structured
|
|
61
61
|
`INVALID_INPUT` envelope: a missing `--consumer` repository, a malformed CVE
|
|
@@ -236,7 +236,7 @@ pipx install sourcecode # isolated install, no venv needed
|
|
|
236
236
|
|
|
237
237
|
# Verify
|
|
238
238
|
ask version
|
|
239
|
-
# ask 5.9.
|
|
239
|
+
# ask 5.9.6
|
|
240
240
|
```
|
|
241
241
|
|
|
242
242
|
Requires Python 3.9+.
|
|
@@ -6987,7 +6987,6 @@ def main(
|
|
|
6987
6987
|
return _core_dict_for_writers
|
|
6988
6988
|
|
|
6989
6989
|
if not no_cache and _core_key and not _pipeline_error and not changed_only:
|
|
6990
|
-
import atexit as _atexit
|
|
6991
6990
|
import threading as _threading
|
|
6992
6991
|
|
|
6993
6992
|
# Pre-compute core dict in the main thread — avoids the 5-second atexit
|
|
@@ -7028,9 +7027,18 @@ def main(
|
|
|
7028
7027
|
except Exception:
|
|
7029
7028
|
pass
|
|
7030
7029
|
|
|
7031
|
-
|
|
7032
|
-
|
|
7033
|
-
|
|
7030
|
+
# `cache warm` is an explicit persistence command. A daemon writer
|
|
7031
|
+
# may still be serialising a large core when the child exits, so a
|
|
7032
|
+
# successful warm could leave no entry for the next process to read.
|
|
7033
|
+
# Keep the low-latency asynchronous path for ordinary analysis, but
|
|
7034
|
+
# make the explicit warm contract synchronous and fail closed.
|
|
7035
|
+
if os.environ.get("SOURCECODE_CACHE_SYNC") in ("1", "true", "yes"):
|
|
7036
|
+
_write_cache_async()
|
|
7037
|
+
else:
|
|
7038
|
+
import atexit as _atexit
|
|
7039
|
+
_cache_write_thread = _threading.Thread(target=_write_cache_async, daemon=True)
|
|
7040
|
+
_cache_write_thread.start()
|
|
7041
|
+
_atexit.register(_cache_write_thread.join, 30.0)
|
|
7034
7042
|
|
|
7035
7043
|
# Update RIS with aggregated snapshot data (non-fatal side-effect).
|
|
7036
7044
|
# Update RIS whenever git is available, even when L1/L2 cache is skipped
|
|
@@ -10893,16 +10901,26 @@ def baseline_diff_cmd(
|
|
|
10893
10901
|
_history = _resolve_history_dir((history_dir or target_dir).resolve())
|
|
10894
10902
|
_series = load_series(_history)
|
|
10895
10903
|
if not _series:
|
|
10896
|
-
#
|
|
10897
|
-
#
|
|
10898
|
-
|
|
10899
|
-
|
|
10900
|
-
|
|
10901
|
-
|
|
10902
|
-
|
|
10903
|
-
|
|
10904
|
+
# Empty history is an honest query result, not invalid input. Keep
|
|
10905
|
+
# diff/trend/attest interchangeable so automation can branch on one
|
|
10906
|
+
# status instead of treating the same state as success in one command
|
|
10907
|
+
# and a failure in another.
|
|
10908
|
+
_emit_command_output(
|
|
10909
|
+
_serialize_dict({
|
|
10910
|
+
"schema": "findings-delta-v1",
|
|
10911
|
+
"status": "no_history",
|
|
10912
|
+
"history_dir": str(_history),
|
|
10913
|
+
"message": "No findings baseline is stored; no delta was computed.",
|
|
10914
|
+
"non_coverage": [
|
|
10915
|
+
"Capture one first: ask baseline capture <path> --kind findings."
|
|
10916
|
+
],
|
|
10917
|
+
"counts": {"new": 0, "resolved": 0, "unchanged": 0},
|
|
10918
|
+
}, format),
|
|
10919
|
+
output_path, copy,
|
|
10920
|
+
success_msg=f"Findings delta written to {output_path} (no history)",
|
|
10921
|
+
fmt=format,
|
|
10904
10922
|
)
|
|
10905
|
-
|
|
10923
|
+
return
|
|
10906
10924
|
|
|
10907
10925
|
_prog = Progress()
|
|
10908
10926
|
_prog.start("auditing the working tree")
|
|
@@ -10933,15 +10951,18 @@ def baseline_diff_cmd(
|
|
|
10933
10951
|
history = _resolve_history_dir((history_dir or target_dir).resolve())
|
|
10934
10952
|
latest = latest_baseline_path(history)
|
|
10935
10953
|
if latest is None:
|
|
10936
|
-
|
|
10937
|
-
|
|
10938
|
-
|
|
10939
|
-
|
|
10940
|
-
|
|
10941
|
-
|
|
10942
|
-
|
|
10954
|
+
_emit_command_output(
|
|
10955
|
+
_serialize_dict({
|
|
10956
|
+
"schema": "architectural-delta-v1",
|
|
10957
|
+
"status": "no_history",
|
|
10958
|
+
"history_dir": str(history),
|
|
10959
|
+
"message": "No captured baseline was found; no delta was computed.",
|
|
10960
|
+
"non_coverage": [_BASELINE_HISTORY_HINT],
|
|
10961
|
+
}, format),
|
|
10962
|
+
output_path, copy,
|
|
10963
|
+
success_msg=f"Baseline diff written to {output_path} (no history)",
|
|
10943
10964
|
)
|
|
10944
|
-
|
|
10965
|
+
return
|
|
10945
10966
|
baseline_file = latest
|
|
10946
10967
|
|
|
10947
10968
|
if not baseline_file.exists():
|
|
@@ -11069,15 +11090,19 @@ def baseline_trend_cmd(
|
|
|
11069
11090
|
|
|
11070
11091
|
baselines = load_baselines_dir(trend_dir)
|
|
11071
11092
|
if not baselines:
|
|
11072
|
-
|
|
11073
|
-
|
|
11074
|
-
|
|
11075
|
-
|
|
11076
|
-
|
|
11077
|
-
|
|
11078
|
-
|
|
11093
|
+
_emit_command_output(
|
|
11094
|
+
_serialize_dict({
|
|
11095
|
+
"schema": "architectural-trend-v1",
|
|
11096
|
+
"status": "no_history",
|
|
11097
|
+
"baseline_count": 0,
|
|
11098
|
+
"points": [],
|
|
11099
|
+
"hotspot_trends": [],
|
|
11100
|
+
"non_coverage": [_BASELINE_HISTORY_HINT],
|
|
11101
|
+
}, format),
|
|
11102
|
+
output_path, copy,
|
|
11103
|
+
success_msg=f"Trend written to {output_path} (no history)",
|
|
11079
11104
|
)
|
|
11080
|
-
|
|
11105
|
+
return
|
|
11081
11106
|
|
|
11082
11107
|
data = build_trend(baselines)
|
|
11083
11108
|
output = _serialize_dict(data, format)
|
|
@@ -20373,6 +20398,11 @@ def cache_warm_cmd(
|
|
|
20373
20398
|
# console script from PATH. A stale global script can otherwise warm one
|
|
20374
20399
|
# package installation while the caller reads another one, leaving a view
|
|
20375
20400
|
# apparently fresh even though its cache entry was never written.
|
|
20401
|
+
# The warm's child must finish its cache writes before reporting success.
|
|
20402
|
+
# This is scoped to the child so ordinary root analyses retain their async
|
|
20403
|
+
# write latency while `cache warm` has a durable cross-process contract.
|
|
20404
|
+
_sc_env = os.environ.copy()
|
|
20405
|
+
_sc_env["SOURCECODE_CACHE_SYNC"] = "1"
|
|
20376
20406
|
_sc_bin = [sys.executable, "-m", "sourcecode"]
|
|
20377
20407
|
|
|
20378
20408
|
# AUD-600-R01: which views a warm builds is `cache_model`'s fact, not a pair
|
|
@@ -20430,7 +20460,9 @@ def cache_warm_cmd(
|
|
|
20430
20460
|
# none of it — only the exit code and, on failure, stderr. Capturing it
|
|
20431
20461
|
# held a whole repository's answer in memory for nothing; on a 24 074-file
|
|
20432
20462
|
# repository that is megabytes the parent buffers and drops.
|
|
20433
|
-
result = _sub.run(
|
|
20463
|
+
result = _sub.run(
|
|
20464
|
+
cmd, stdout=_sub.DEVNULL, stderr=_sub.PIPE, text=True, env=_sc_env
|
|
20465
|
+
)
|
|
20434
20466
|
finally:
|
|
20435
20467
|
_prog.stop()
|
|
20436
20468
|
if result.returncode != 0:
|
|
@@ -246,6 +246,15 @@ def run_self_audit() -> dict:
|
|
|
246
246
|
from sourcecode import __version__
|
|
247
247
|
|
|
248
248
|
commands = _registered_commands()
|
|
249
|
+
# CLI leaves and MCP tools are related populations, not aliases of one
|
|
250
|
+
# another: MCP also serves native orchestration tools with no CLI command.
|
|
251
|
+
from sourcecode.mcp.registry import build_mcp_tool_specs
|
|
252
|
+
from sourcecode.mcp.server import _NATIVE_MCP_TOOLS
|
|
253
|
+
|
|
254
|
+
cli_command_count = len(commands)
|
|
255
|
+
mcp_registry_count = len(build_mcp_tool_specs())
|
|
256
|
+
native_mcp_count = len(_NATIVE_MCP_TOOLS)
|
|
257
|
+
mcp_tool_count = mcp_registry_count + native_mcp_count
|
|
249
258
|
checks = [
|
|
250
259
|
_check_cache_model(commands),
|
|
251
260
|
_check_format_contract(commands),
|
|
@@ -268,7 +277,22 @@ def run_self_audit() -> dict:
|
|
|
268
277
|
"schema": SCHEMA_ID,
|
|
269
278
|
"verdict": verdict,
|
|
270
279
|
"tool_version": __version__,
|
|
271
|
-
"commands_registered":
|
|
280
|
+
"commands_registered": cli_command_count,
|
|
281
|
+
"mcp_tools_served": mcp_tool_count,
|
|
282
|
+
"tool_populations": {
|
|
283
|
+
"cli_commands": {
|
|
284
|
+
"count": cli_command_count,
|
|
285
|
+
"definition": "registered CLI leaf commands, including commands hidden from MCP",
|
|
286
|
+
},
|
|
287
|
+
"mcp_tools": {
|
|
288
|
+
"count": mcp_tool_count,
|
|
289
|
+
"definition": "runtime-derived MCP tools plus native orchestration tools",
|
|
290
|
+
"runtime_derived": mcp_registry_count,
|
|
291
|
+
"native_orchestration": native_mcp_count,
|
|
292
|
+
},
|
|
293
|
+
"relationship": "mcp_tools = runtime_derived_mcp_tools + native_orchestration_tools; "
|
|
294
|
+
"CLI command count is not expected to equal MCP tool count",
|
|
295
|
+
},
|
|
272
296
|
"counts": {
|
|
273
297
|
"checks": len(checks),
|
|
274
298
|
"passed": sum(1 for c in checks if c.status == STATUS_PASS),
|
|
@@ -130,6 +130,21 @@ def _resolve_bean_annotation(
|
|
|
130
130
|
"""
|
|
131
131
|
simple = ann.lstrip("@")
|
|
132
132
|
imports = imports_by_class.get(owner_fqn) or {}
|
|
133
|
+
if not imports:
|
|
134
|
+
# Field and method nodes carry a member suffix, while imports belong to
|
|
135
|
+
# their declaring class. Missing this join turns a foreign annotation
|
|
136
|
+
# such as Maven's `@Component` into an unresolved one and can falsely
|
|
137
|
+
# advertise a non-Spring repository as Spring. Member nodes have used
|
|
138
|
+
# both `Class#member` and `Class.member` identities over time.
|
|
139
|
+
owner_class = owner_fqn.split("#", 1)[0]
|
|
140
|
+
imports = imports_by_class.get(owner_class) or {}
|
|
141
|
+
if not imports:
|
|
142
|
+
declaring = max(
|
|
143
|
+
(name for name in imports_by_class if owner_fqn.startswith(name + ".")),
|
|
144
|
+
key=len,
|
|
145
|
+
default="",
|
|
146
|
+
)
|
|
147
|
+
imports = imports_by_class.get(declaring) or {}
|
|
133
148
|
|
|
134
149
|
exact = imports.get(simple)
|
|
135
150
|
if exact:
|
|
@@ -387,6 +402,22 @@ class BeanGraph:
|
|
|
387
402
|
for b in self.beans.values()
|
|
388
403
|
)
|
|
389
404
|
|
|
405
|
+
def has_confirmed_spring_beans(self) -> bool:
|
|
406
|
+
"""True only when a bean annotation resolves to ``org.springframework``.
|
|
407
|
+
|
|
408
|
+
An unresolved simple annotation remains admissible for model consumers:
|
|
409
|
+
the missing import is not proof that the annotation is foreign. It is,
|
|
410
|
+
however, insufficient evidence for the cross-command product fact
|
|
411
|
+
``spring_detected``. Otherwise a repository such as TeaVM, which uses
|
|
412
|
+
Maven's ``@Component`` spelling without Spring, is advertised as Spring.
|
|
413
|
+
"""
|
|
414
|
+
return any(
|
|
415
|
+
b.spring
|
|
416
|
+
and b.annotation_fqn.startswith(_SPRING_PACKAGE_PREFIX)
|
|
417
|
+
and b.stereotype not in _JPA_ONLY_STEREOTYPES
|
|
418
|
+
for b in self.beans.values()
|
|
419
|
+
)
|
|
420
|
+
|
|
390
421
|
def spring_beans(self) -> dict[str, BeanNode]:
|
|
391
422
|
"""The Spring IoC bean-definition population, keyed by symbol.
|
|
392
423
|
|
|
@@ -652,4 +683,13 @@ def spring_detected(
|
|
|
652
683
|
can still ask.
|
|
653
684
|
"""
|
|
654
685
|
graph = model.bean_graph if model is not None else BeanGraph.build(cir)
|
|
655
|
-
|
|
686
|
+
if graph.has_confirmed_spring_beans() or int(tx_total or 0) > 0:
|
|
687
|
+
return True
|
|
688
|
+
# Preserve the conservative model behaviour for a genuinely unresolved
|
|
689
|
+
# annotation, but never let a resolved foreign annotation trigger presence.
|
|
690
|
+
return any(
|
|
691
|
+
b.spring
|
|
692
|
+
and not b.annotation_fqn
|
|
693
|
+
and b.stereotype not in _JPA_ONLY_STEREOTYPES
|
|
694
|
+
for b in graph.beans.values()
|
|
695
|
+
)
|
|
@@ -458,6 +458,10 @@ class ProjectSummarizer:
|
|
|
458
458
|
if (
|
|
459
459
|
_BADGE_RE.match(line)
|
|
460
460
|
or _LINK_ONLY_RE.match(line)
|
|
461
|
+
# A Markdown badge may wrap before its closing `](url)`. The
|
|
462
|
+
# first line is discarded above, but the continuation must not
|
|
463
|
+
# become a standalone project description.
|
|
464
|
+
or _re.match(r"^\s*\)?\]\([^)]*\)\s*$", line)
|
|
461
465
|
or ("<" in line and ">" in line and not _html_stripped)
|
|
462
466
|
):
|
|
463
467
|
# AUD-596-B07: a bar written on one line never becomes a
|
|
File without changes
|