sourcecode 5.4.1__tar.gz → 5.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sourcecode-5.4.1 → sourcecode-5.4.2}/CHANGELOG.md +24 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/PKG-INFO +3 -3
- {sourcecode-5.4.1 → sourcecode-5.4.2}/README.md +2 -2
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/DEFECT-LEDGER.md +3 -3
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/USER_GUIDE.md +1 -1
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/semantic-ir-roadmap.md +40 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/pyproject.toml +1 -1
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/cli.py +6 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/repository_ir.py +7 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/risk.py +2 -1
- {sourcecode-5.4.1 → sourcecode-5.4.2}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/.gitignore +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/.ruff.toml +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/CLAUDE.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/CONTRIBUTING.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/LICENSE +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/SECURITY.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/CACHE.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/DEVELOPMENT-ROADMAP.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/EXECUTIVE-ROADMAP.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/overview.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/contracts.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/licensing-schema.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/migrate-check.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/README.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/posture.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/privacy.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/schema.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/raw +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/scripts/perf_gate.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/scripts/perf_harness.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/license.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/supabase/functions/README.md +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.4.1 → sourcecode-5.4.2}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [5.4.2] — 2026-08-12
|
|
6
|
+
|
|
7
|
+
**External audit fixes and roadmap alignment.**
|
|
8
|
+
This release preserves bounded SQL interpolation evidence in composed risk
|
|
9
|
+
payloads, declares the population of existing test counts, and removes routes
|
|
10
|
+
declared only by abstract controller classes. The external audit queue and
|
|
11
|
+
defect ledger are synchronized with the shipped behavior.
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- **Bounded SQL interpolations remain auditable in `risk` and `enrich`.** The
|
|
15
|
+
`sql_taint.bounded_interpolations` rows now survive composition serialization
|
|
16
|
+
beside `sinks_total`.
|
|
17
|
+
- **`existing_test_count` declares its population.** The payload now identifies
|
|
18
|
+
the all-path, multi-language `prepare-context` population and distinguishes it
|
|
19
|
+
from the Java IR test-gap population.
|
|
20
|
+
- **Abstract controller declarations no longer emit phantom routes.** Their
|
|
21
|
+
endpoints remain available for projection onto concrete subtypes, but the
|
|
22
|
+
abstract class itself is not treated as a registered handler bean.
|
|
23
|
+
|
|
24
|
+
### Documentation
|
|
25
|
+
- Added the external 5.4.2 audit queue and recommended capability work to the
|
|
26
|
+
semantic IR roadmap.
|
|
27
|
+
- Synchronized the distributed defect ledger with the 5.4.1/5.4.2 build state.
|
|
28
|
+
|
|
5
29
|
## [5.4.1] — 2026-08-12
|
|
6
30
|
|
|
7
31
|
**Two correctness fixes and a release bump.**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.4.
|
|
3
|
+
Version: 5.4.2
|
|
4
4
|
Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Keywords: agents,ai,codebase,context,developer-tools,llm
|
|
@@ -42,7 +42,7 @@ Description-Content-Type: text/markdown
|
|
|
42
42
|
|
|
43
43
|
**Context · Impact · Migration · Architecture · Review — everything from one structural model.**
|
|
44
44
|
|
|
45
|
-

|
|
46
46
|

|
|
47
47
|
|
|
48
48
|
> **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
|
|
@@ -126,7 +126,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
126
126
|
# pip / pipx
|
|
127
127
|
pipx install sourcecode # or: pip install sourcecode
|
|
128
128
|
|
|
129
|
-
ask version # ask 5.4.
|
|
129
|
+
ask version # ask 5.4.2 — and, on a build that has aged,
|
|
130
130
|
# how many releases have probably shipped since
|
|
131
131
|
```
|
|
132
132
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**Context · Impact · Migration · Architecture · Review — everything from one structural model.**
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|

|
|
9
9
|
|
|
10
10
|
> **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
|
|
@@ -88,7 +88,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
88
88
|
# pip / pipx
|
|
89
89
|
pipx install sourcecode # or: pip install sourcecode
|
|
90
90
|
|
|
91
|
-
ask version # ask 5.4.
|
|
91
|
+
ask version # ask 5.4.2 — and, on a build that has aged,
|
|
92
92
|
# how many releases have probably shipped since
|
|
93
93
|
```
|
|
94
94
|
|
|
@@ -59,7 +59,7 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
|
|
|
59
59
|
| C1-40 | **`cache model` promises `onboard` an answer-level cache hit and the second run recomputes.** `ask cache model .` publishes `onboard` → *"the answer (repeat cached)"* `[task, ris]`. Measured: first run 56 s (cold, expected), **second run on a warm cache 23,5 s** — not an answer hit, a partial recomputation. Corroborated by `cache context-stats .`: `Contexts: 1 · Hits: 1 · Misses: 1 · Hit ratio: 0.5 · Avg lookup 1029,1 ms (p95 1955,2 ms) · Avg build 18332,5 ms · Bytes stored 9 969 057`. A **full second to decide whether there is a hit**, over a single 10 MB entry, is the signature of deserialising the whole payload to read its key | 4.10.4 (eval #14) | **Medium** — `cache model` exists so a user can plan instead of guess; a row that overstates what a warm buys is the one defect that command cannot afford. The lookup half is the second field measurement of C3-47 | **closed (4.10.6), and the claim was the false half.** Reproduced at home on keycloak (5 486 sources): **with** a `cache warm`, `onboard` costs 0,7 s — the row's promise holds. **Without** one, a second identical run costs 9,4 s against 10,2 s cold: the warm is what stores the answer, and the command does not store its own. The row said `repeat cached`, the field ran it twice with no warm, and got 56 s → 23,5 s. `repeat` is now `false` for `onboard` and the measured figures are published at two scales, with and without a warm, so the reader can tell which run they are about to make. Half (b) shipped too: the validity keys (`ev`/`kl`/`sig`) live in an uncompressed sidecar beside the blob, so deciding *is this entry still valid?* is a small file read instead of decompressing and parsing a 10 MB envelope — the case that matters most, an entry invalidated by a changed signature, used to pay all of it and then discard the result. A genuine hit still pays for the payload it returns; that is the answer, not overhead. Entries written before the sidecar existed fall back to the old full read. Original remedy note: two halves. (a) Reconcile the claim: either `onboard` really caches its answer, or its row says `shared work`, not `the answer`. (b) Split key metadata (hash + validity) from the payload into a sidecar index so a hit is decided without deserialising the blob; target < 5 ms against the ~1 029 ms measured. Related F-AA |
|
|
60
60
|
| C1-43 | **"Does this repository configure a request filter chain?" has two authorities, and the one that decides whether a `high` finding family runs is the older, weaker one.** `posture._security_config_types` reads the question off the IR's own edges — a type that `extends`/`implements` a chain SPI type, **or a member that `returns` one**, i.e. the `@Bean SecurityFilterChain` shape — and the docstring beside it records why: *"a repository that wires its chain with a `@Bean SecurityFilterChain` and no `@EnableWebSecurity` reported `security.active: 0` — a false zero on the axis this command exists for."* `repository_ir._filter_based`, which decides `security_model` and therefore whether **SEC-001 runs at all**, still tests only `@EnableWebSecurity` (`_FILTER_SECURITY_ANNOTATIONS`, deliberately one entry) and `extends WebSecurityConfigurerAdapter`. A Spring Security 6 repository that declares its chain as a bean is therefore classified `annotation_based`, and SEC-001 then asserts, per unannotated handler, *"In an annotation_based security model there is no centralized filter — any caller can reach this endpoint without authentication"* | 4.18.0 (eval #24) | **High** — a confident falsehood on the strongest axis, and the only one of the series: measured on a greenfield Boot 3 module, the single SEC-001 finding is `POST /api/v1/auth/login`, which the repository's `SecurityConfig` lists in `PUBLIC_ENDPOINTS` with `permitAll()` under a closing `anyRequest().authenticated()` — the chain the model says does not exist both admits that route *and* protects the other 24. The evaluator adjudicated it by reading the source: *"la herramienta lo marca `high` porque solo lee la anotación del método, no la cadena de filtros"* | **in-progress** — the premise half shipped on `fix/sec-001-chain-authority`. One authority, `security_chain`, holds the request-chain SPI vocabulary, the member rule (*a member returning the SPI type makes its declaring class the configuration*) and the name normalisation; `posture` and both `repository_ir` sites read it, so the mechanism can no longer differ. **Two questions are named apart there rather than merged, because only one of them may silence a finding:** `declares_request_chain` (is there a chain at all — the annotation, the pre-5.7 adapter, or a member producing a `SecurityFilterChain`) is SEC-001's premise and is deliberately narrow, while `chain_participant_types` (what takes part in configuring it, filters included) is `posture`'s question. Widening the first to the second would silence SEC-001 on repositories with no centralized authorization — the P1-A failure mode, and the one with no symptom. Measured end-to-end on a fixture of the reported shape: `security_model` `annotation_based` → `mixed`, and the SEC-001 finding on `POST /api/v1/auth/login` disappears; recall asserted in the same battery (no chain → still reported; `@EnableMethodSecurity` alone → still reported). Fleet A/B over 5 repositories × 3 commands: 15/15 payloads identical in content, which is the expected result and the point of running it — no fleet repository declares a chain in either shape, so nothing could move. **Open: the verdict half.** Where the chain resolves, the per-endpoint answer should come from the resolved chain rather than from the model classification (C1-8's `matched_path` machinery already exists), and where it does not resolve, SEC-001 abstains — never *"any caller can reach this endpoint"* over a chain the run did not read |
|
|
61
61
|
| C1-44 | **`has_uncommitted_changes: false` sits in the same document as `git_context.uncommitted_files: 1`, and it is the field cache freshness is decided on.** `ask <repo> --compact --git-context` publishes both, one run, one payload: `git_context.uncommitted_files` counts the file, `_cache.has_uncommitted_changes` says there is none, and `git status --porcelain` on the same tree prints `?? .claude/settings.json`. The third authority in the build agrees with the first — `--changed-only` reports `changed_files_count: 1` for that file and its `--help` defines the set it counts as *"staged, unstaged, untracked"* — so two of three surfaces admit the file and the one a consumer trusts for staleness does not. Under that published definition the boolean is simply false | 5.3.1 (audit #28) | Medium | **closed 5.4.0** — one predicate (`baseline_autocapture.counts_as_dirty`), extracted from `worktree_dirty` and read by the count in both the fresh path and the cache-hit patch, so the boolean cannot drift from the function that defines it. What it excludes is published (`uncommitted_files_not_read`, `uncommitted_files_basis`) rather than subtracted in silence, and only when something was actually excluded. Original remedy note: one predicate over one definition of *the working set*, read by both fields; the boolean is derived from the count rather than measured a second time, and where the two cannot be derived from one another the document may not publish both |
|
|
62
|
-
| C1-46 | **`existing_test_count: 6` sits beside `test_files: 0` and `has_test_sources: false` in one `prepare-context generate-tests` payload, and the 6 are five production files in a business package.** C3-115 closed the half that was reported — `test_gaps` now declares its population — and left a second authority for *"how many tests are there"* answering a different number in the same document. Re-measured in the field: 0 Java tests, 1 `.spec.ts`, 3 karma/jest configs; no population is worth 6. Root cause is in `test_sources.declared_test_root`: `_TEST_DIR_NAMES` carries the bare segment `it`, the final loop accepts it **at any depth**, and the only disarm — `_under_main_root` — knows `src/main` alone, which is a Maven layout. An Angular app lives under `src/app`, so `saint-client/src/app/shared/akita/it/` — *Incapacidad Temporal*, a business entity whose `it.model.ts` declares `ENFERMEDAD COMÚN` and `ACCIDENTE DE TRABAJO` — is read as a test source root and contributes 5 files; the 6th is the one real `.spec.ts`, and the reconciliation is exact. **It generalizes off this repository:** `it` is also the ISO 639-1 code for Italian, so `web/src/assets/i18n/it/messages.json` and `app/locales/it/common.ts` both answer `is_test_path: true` on the shipped build. Sibling of C1-28, in the direction C1-28 was written to prevent | 5.4.0 (audit #29) | **Medium** — the
|
|
62
|
+
| C1-46 | **`existing_test_count: 6` sits beside `test_files: 0` and `has_test_sources: false` in one `prepare-context generate-tests` payload, and the 6 are five production files in a business package.** C3-115 closed the half that was reported — `test_gaps` now declares its population — and left a second authority for *"how many tests are there"* answering a different number in the same document. Re-measured in the field: 0 Java tests, 1 `.spec.ts`, 3 karma/jest configs; no population is worth 6. Root cause is in `test_sources.declared_test_root`: `_TEST_DIR_NAMES` carries the bare segment `it`, the final loop accepts it **at any depth**, and the only disarm — `_under_main_root` — knows `src/main` alone, which is a Maven layout. An Angular app lives under `src/app`, so `saint-client/src/app/shared/akita/it/` — *Incapacidad Temporal*, a business entity whose `it.model.ts` declares `ENFERMEDAD COMÚN` and `ACCIDENTE DE TRABAJO` — is read as a test source root and contributes 5 files; the 6th is the one real `.spec.ts`, and the reconciliation is exact. **It generalizes off this repository:** `it` is also the ISO 639-1 code for Italian, so `web/src/assets/i18n/it/messages.json` and `app/locales/it/common.ts` both answer `is_test_path: true` on the shipped build. Sibling of C1-28, in the direction C1-28 was written to prevent | 5.4.0 (audit #29) | **Medium** — the path-classification half is closed in 5.4.1; `existing_test_count_unit` now declares its all-path, multi-language task population in 5.4.2, distinct from the Java IR population | **closed 5.4.2** |
|
|
63
63
|
| C1-45 | **The SQL taint join keys a sink on a bare statement id, so a mapper method in one namespace is joined to a call site that resolves to another — and the result is published as the repository's #1 critical risk with a call trace that does not exist.** `risk`'s top row on a 3 342-file monolith is `severity_effective: 29.57` at `ProcesosGerenciaMapper.xml:74`, `factors.query_construction = http_input_reaches_sql_interpolation`, with evidence naming `AutocoberturasRestController#actualizar(id, obj)` *calls* `actualizar(…)` in `ProcesosGerenciaMapper`. The controller calls its own service's `actualizar`; the join matched on the method name alone. **The correct key already exists in the code and is not used** — `sql_taint` line 76 returns `f"{self.namespace}#{self.statement_id}" if self.namespace else self.statement_id`, and `namespace` is captured (141, 151) and then spent only on an explanatory sentence (313-314), while the published basis claims the sinks are *"keyed by namespace and statement id"*. **Accompanying defect, same row:** the interpolated expression is stored (72, 144) and emitted (86) and never inspected, so `bloqueada = ${dto.bloqueada ? "'S'" : "'N'"}` — an OGNL ternary whose two branches are string literals, a closed allowlist by construction and precisely the mitigation SEC-008's own `fix_hint` recommends — is ranked as a text-controllable sink | 5.3.1 (audit #28) | **High** — F-BF's whole argument is that this axis fires on evidence rather than on multiplication by 1,0; a name-collision join inverts the first row of the ranking, which is the product | **closed 5.4.0** — both sides keyed on `namespace#statement_id`: a call carries the type its receiver resolves to and is that statement's only when the receiver resolves to the mapper it lives in; an unresolved receiver is not the same answer as any type name, so the sink stays `undecidable` rather than `reaches`. `does_not_reach` carries the same qualification, because it is a confident no. `splices_free_text` reads the interpolation at last — anything it cannot prove closed is free text, and what it closes leaves the population into a published `bounded_interpolations` list. The regression fixture this row specified is in the suite. Original remedy note: key both sides on `namespace#statement_id` (the property is already written, the call sites read the wrong half), and give the interpolation a three-state read: an expression whose reachable values are all literals is `does_not_reach`, an unresolvable one stays `undecidable`, never `reaches` by default. Regression fixture: two mappers in different namespaces sharing a `statement_id`, one reached by HTTP input and one not — expected one `reaches`, one `undecidable`; today, two `reaches` |
|
|
64
64
|
|
|
65
65
|
|
|
@@ -231,8 +231,8 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
|
|
|
231
231
|
| C3-120 | **The composition engine became unusable at 3 342 files, and one line of C1-45's fix is why.** Measured against 5.3.1 artefacts on the same subject: `risk` 38,37 s → **601,74 s** under a 300 s budget, returning `partial: true` with **0 of 98** defects composed; `risk` under a 3 000 s budget → 444 s complete (×11,6); `enrich` 36,30 s → **>600 s**, stopped without completing; `audit-report` not run at all after two hangs. Median ratio over 48 comparable pairs is **1,00x** — the regression is confined to this family. Root cause is `sql_taint._receiver_type`: `_RECEIVER_RE` is anchored `…\s*$` and is applied as `search(method.body[:body_index])`, which copies an O(body_index) prefix **and** makes the regex engine try every start position in it before concluding. `_called_names` pays that for **every call of every method in the repository**, unfiltered and unbounded, where 5.3.1 did `names.add(call.group(1))` at O(1); a service body of 1 650+ lines makes the pass quadratic. Auditor's microbenchmark on the shipped regex, results byte-identical to a windowed `search(body, start, endpos)`: 8,6 KB/200 calls **36,9×**, 43 KB/1 000 calls **186,9×**, 215 KB/5 000 calls **916,5×** — 5× the calls, 25× the time | 5.4.0 (audit #29) | **Critical** — three of the seven experimental commands, and the ones that carry the price premium, do not return on the repository this product is sold for | **closed 5.4.1** — the read is windowed (`search(body, start, body_index)`: the `$` still ends at the call, no prefix is copied and the engine is offered a bounded number of start positions), and the window start retreats over any identifier it lands inside so a receiver wider than 128 characters is resolved whole rather than by its suffix — `""` is *unresolved* here and must never be reached by truncation. Second half: `_called_names` takes the statement ids being decided as its scope, because the only question asked of that set is `(mapper, statement id) in called`, so a name no statement carries can change no verdict. Re-measured on the shipped regex: 5 000 calls over a 159 KB body, **18 079 ms → 28 ms**, results identical at every call site. Four regression assertions, including a wall-clock gate on the pass |
|
|
232
232
|
| C3-121 | **The budget does not bind in the composition family, and one invocation froze the process.** `ASK_MAX_ANALYSIS_SECONDS=300 ask risk .` ran **601,74 s** of wall clock and wrote `elapsed_seconds: 600.92` into its own `_partial`; `ASK_MAX_ANALYSIS_SECONDS=150 ask enrich . --sarif` passed 600 s and was stopped by hand; a third `risk` invocation stopped responding until the working session was killed. This is the failure mode C3-82/C3-118 closed for `generate-tests` — *the budget must be checked where the walk can be cut, not only between phases* — reappearing in another family, and the lesson did not travel. Second half, independent of the overrun: a **respected** budget yields no answer — at 300 s the payload is `phases_completed: ["audit"]`, `phases_pending: ["compose"]`, `composition_stopped_after.defects_composed: 0`, which in CI is an empty envelope after ten minutes. The degradation shape itself is exemplary and is not what this row is against: `_partial` names the completed and pending phases, `why_stopped`, the repo-wide walks it skipped and the axes left `unknown`. ⚠ Re-measure after C3-120 before investigating separately — same subsystem, same triage C3-114 got against E-3 | 5.4.0 (audit #29) | **High** — a budget that does not cut is worse than no budget: it sells CI a guarantee it does not keep, and a hard freeze consumes the runner | **closed 5.4.1** — the deadline is asked *inside* the two repository-wide walks that hold the wall time, not only at their doors: the method parse samples the clock every 16 files and the two propagation walks sample it on their own units. A walk cut while running raises rather than returning what it had — every verdict these walks publish below `reaches` is a statement about the **whole** repository, and a negative over a partial universe is a confident no built on an unfinished read — so the measurement is dropped, the axis reads `unknown`, and the walk is named in `_partial.composition_walks_not_run` exactly as a walk that never started is. Nothing partial is cached on the CIR, so a later caller cannot be served a repository with files missing. Two assertions, both non-vacuous: the walk cut inside, and the composer naming it. ⚠ The residue this row does not close: the walks that are still gated only at the door (`inferring the security posture`, `indexing the validation surface`, `resolving the conditional bean graph`) — none of them was measured holding the overrun, and giving each a sampling seam is its own increment |
|
|
233
233
|
| C3-122 | **`ask risk <repo> -o <path>` spent 444 s, exited 0, printed nothing and wrote no file.** One occurrence, from bash with a Windows path in forward slashes; a later recursive search found the file nowhere in the user tree. The same path shapes worked in the same session for `ask endpoints -o`, `ask config` and `ask baseline capture --dir`. Not reproduced — the auditor stopped invoking `risk` after the freeze in C3-121 — and recorded with that limitation. An analysis command that consumes 444 s and reports success without producing its output owes the reader a line on stderr at minimum | 5.4.0 (audit #29) | **Low** (unreproduced) — but it is a C5 shape: the exit code is the published fact and it is wrong | **open** |
|
|
234
|
-
| C3-123 | **A static asset reaches `broken_integrations`, the one verdict this command presents as unconditional.** C3-119 did the main work — 19 → 1, with 14 relocated to `partial_client_calls` and the `meaning` stating its condition. The survivor is `GET /assets/i18n/{}.json` from `transloco-root.module.ts:18`: a translation bundle served by the container, not a Spring route. True under the published definition and not a broken integration in any sense a reader means. Remedy: exclude paths under known asset roots (`/assets/`, `/static/`, `/public/`) or ending in a static file extension, and say so in the `meaning` | 5.4.0 (audit #29) | **Low** | **
|
|
235
|
-
| C3-124 | **`risk` renamed three published keys inside a minor with no alias.** 5.3.1 emitted `total_defects`, `total_findings` and `risks_cap`; 5.4.0 emits `total_defects_floor`, `total_findings_floor` (plus `counts_basis`, `counts_are_floor`, `partial`, `_partial`) and dropped `risks_cap`. Permitted by the command's own experimental tier — *shape may change in a minor* — and the new names are better; the payload still carries no notice, so a consumer bound to the old keys reads `None` with nothing telling it why. `auth status` already publishes a `deprecated_fields` block: the channel exists and this command did not use it | 5.4.0 (audit #29) | **Informative** | **
|
|
234
|
+
| C3-123 | **A static asset reaches `broken_integrations`, the one verdict this command presents as unconditional.** C3-119 did the main work — 19 → 1, with 14 relocated to `partial_client_calls` and the `meaning` stating its condition. The survivor is `GET /assets/i18n/{}.json` from `transloco-root.module.ts:18`: a translation bundle served by the container, not a Spring route. True under the published definition and not a broken integration in any sense a reader means. Remedy: exclude paths under known asset roots (`/assets/`, `/static/`, `/public/`) or ending in a static file extension, and say so in the `meaning` | 5.4.0 (audit #29) | **Low** | **closed 5.4.1** — static asset roots and file extensions are excluded and the meaning names the exclusion |
|
|
235
|
+
| C3-124 | **`risk` renamed three published keys inside a minor with no alias.** 5.3.1 emitted `total_defects`, `total_findings` and `risks_cap`; 5.4.0 emits `total_defects_floor`, `total_findings_floor` (plus `counts_basis`, `counts_are_floor`, `partial`, `_partial`) and dropped `risks_cap`. Permitted by the command's own experimental tier — *shape may change in a minor* — and the new names are better; the payload still carries no notice, so a consumer bound to the old keys reads `None` with nothing telling it why. `auth status` already publishes a `deprecated_fields` block: the channel exists and this command did not use it | 5.4.0 (audit #29) | **Informative** | **closed 5.4.1 as not a defect** — a complete 5.4.1 run retains the legacy keys; the renamed floor fields are emitted only for budget-cut payloads and are explicitly marked as floors |
|
|
236
236
|
|
|
237
237
|
## Class C4 — Discoverability (the ceiling as of 3.2.0)
|
|
238
238
|
|
|
@@ -297,3 +297,43 @@ milestone; hash-neutral; suite green.
|
|
|
297
297
|
> completion), then `integration_detector` migration (Move 3). Both are named here
|
|
298
298
|
> only to show the arc — neither is begun until P6.0's evidence is in hand and the
|
|
299
299
|
> user selects it.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Part V — External re-audit queue (5.4.1 → 5.4.2)
|
|
304
|
+
|
|
305
|
+
The latest external re-audit was run against the installed `5.4.1` build using
|
|
306
|
+
the same read-only harness and repository as the previous rounds. This section
|
|
307
|
+
records only findings that are not already represented elsewhere in this
|
|
308
|
+
roadmap; previously closed findings remain historical evidence, not duplicate
|
|
309
|
+
work items.
|
|
310
|
+
|
|
311
|
+
### Bugs to fix
|
|
312
|
+
|
|
313
|
+
| ID | Finding | Severity | Resolution / acceptance criterion |
|
|
314
|
+
|----|---------|----------|------------------------------------|
|
|
315
|
+
| D-01 | `risk` drops `bounded_interpolations` while serializing the `sql_taint` block, so `sinks_total` is not auditable. | Medium | Preserve the bounded rows in the published payload. A fixture with one bounded and one free interpolation must report `sinks_total == 1` and one `bounded_interpolations` entry in both `risk` and `enrich`. |
|
|
316
|
+
| D-02 | `existing_test_count` has no population/unit declaration and is confused with the IR's `test_gap_ranking.population.test_files`. | Medium | Publish an explicit unit naming the all-paths, multi-language task population, or remove the redundant field. The chosen authority must be covered end to end. |
|
|
317
|
+
| D-03 | Route projection emits endpoints declared by abstract controller classes, creating phantom routes and inflating the unprotected census. | Low | Carry class modifiers into route-surface metadata and exclude abstract declarers from emitted routes; concrete subtype projection remains unchanged. |
|
|
318
|
+
| D-04 | The distributed defect ledger can claim `C3-123` is open although the `5.4.1` build already excludes static assets. | Informational | Synchronize ledger status with the shipped build and close the stale row. Documentation artifacts must describe the wheel they accompany. |
|
|
319
|
+
| D-05 | `risk -o` once exited successfully without writing a file; the four current invocations did write correctly. | Unreproduced | Keep as an observation only. Do not implement or mark it closed without a reproducible fixture. |
|
|
320
|
+
|
|
321
|
+
The audit explicitly retracted the apparent `N-01` global performance regression
|
|
322
|
+
after cache-settled, consecutive measurements, and retracted `REG-07` schema
|
|
323
|
+
breakage after a complete run preserved the legacy keys. Neither is a bug queue
|
|
324
|
+
item. The already closed `REG-01` through `REG-06` findings are likewise not
|
|
325
|
+
reopened here.
|
|
326
|
+
|
|
327
|
+
### Recommended capabilities and engineering work
|
|
328
|
+
|
|
329
|
+
These are recommendations from the audit, not fixes to mix into the bug commits:
|
|
330
|
+
|
|
331
|
+
| Item | Recommendation | Product rationale |
|
|
332
|
+
|------|----------------|-------------------|
|
|
333
|
+
| Performance budget gate | Add a release-time assertion for IR construction and keep comparable cold/warm measurements. | Two consecutive releases had performance concerns before the cache-settled protocol separated real regressions from first-build cost. |
|
|
334
|
+
| Cache measurement protocol | Require an established cache and two concordant runs before publishing a performance claim; retain cold/warm values separately. | A single measurement inside a warming batch is not a stable comparison. |
|
|
335
|
+
| CLI grammar closure | Finish the unresolved CLI grammar/command-surface work tracked by `C4-25`. | The audit still identifies inconsistent or incomplete command syntax as an open usability risk. |
|
|
336
|
+
|
|
337
|
+
The existing P6.0 semantic-IR milestone is intentionally not repeated here;
|
|
338
|
+
its class-level type usage and semantic impact work remains the roadmap's
|
|
339
|
+
architectural feature track.
|
|
@@ -5461,6 +5461,12 @@ def prepare_context_cmd(
|
|
|
5461
5461
|
_et_count = getattr(output, "existing_test_count", None)
|
|
5462
5462
|
if _et_count is not None:
|
|
5463
5463
|
out["existing_test_count"] = _et_count
|
|
5464
|
+
out["existing_test_count_unit"] = (
|
|
5465
|
+
"test source files present in the complete prepare-context path "
|
|
5466
|
+
"universe, across all detected languages; this is a task-scope "
|
|
5467
|
+
"count and is not the Java IR population in "
|
|
5468
|
+
"`test_gap_ranking.population.test_files`"
|
|
5469
|
+
)
|
|
5464
5470
|
# C3-13: the basis of the ranked list travels with it — emitted even when the
|
|
5465
5471
|
# list is empty, because "no gaps" and "no measurement" are different answers.
|
|
5466
5472
|
if task == "generate-tests":
|
|
@@ -4959,6 +4959,7 @@ def _build_route_surface(
|
|
|
4959
4959
|
"fqn": sym.symbol,
|
|
4960
4960
|
"prefixes": prefixes,
|
|
4961
4961
|
"own_endpoints": [],
|
|
4962
|
+
"abstract": "abstract" in (sym.modifiers or []),
|
|
4962
4963
|
"has_path_ann": "@Path" in sym.annotations or "@RequestMapping" in sym.annotations,
|
|
4963
4964
|
}
|
|
4964
4965
|
|
|
@@ -5016,6 +5017,12 @@ def _build_route_surface(
|
|
|
5016
5017
|
(method, suffix, sym.symbol, sym.stable_id)
|
|
5017
5018
|
)
|
|
5018
5019
|
|
|
5020
|
+
# Abstract controllers contribute declarations for concrete subtype
|
|
5021
|
+
# projection, but Spring does not register the abstract class itself as
|
|
5022
|
+
# a handler bean.
|
|
5023
|
+
if class_info.get(cls_simple, {}).get("abstract"):
|
|
5024
|
+
continue
|
|
5025
|
+
|
|
5019
5026
|
# P1 FIX: extract security annotations (method-level first, class fallback)
|
|
5020
5027
|
_cls_sym_for_sec = class_sym_by_simple.get(cls_simple)
|
|
5021
5028
|
_sec = _route_security_from_sym(sym, _cls_sym_for_sec, custom_security)
|
|
@@ -1555,7 +1555,8 @@ def _assemble_payload(
|
|
|
1555
1555
|
payload["sql_taint"] = {
|
|
1556
1556
|
key: _taint[key]
|
|
1557
1557
|
for key in ("schema_version", "answered", "sinks_total", "summary",
|
|
1558
|
-
"statement", "verdict_lattice", "basis"
|
|
1558
|
+
"statement", "verdict_lattice", "basis",
|
|
1559
|
+
"bounded_interpolations")
|
|
1559
1560
|
if key in _taint
|
|
1560
1561
|
}
|
|
1561
1562
|
# F-AY: three of this command's six axes are Spring-shaped (access, the
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-knowledge-provider-integration.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-p6-semantic-integration-engine.md
RENAMED
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/DESIGN-robustness-security-inference.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md
RENAMED
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/REPORT-p6-integration-detector-comparison.md
RENAMED
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/REPORT-p8-flow-analyzer-migration.md
RENAMED
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/REPORT-p9-integration-detector-migration.md
RENAMED
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0002-source-evidence-boundary.md
RENAMED
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/architecture/adr/0003-architectural-characterization.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md
RENAMED
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md
RENAMED
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sourcecode-5.4.1 → sourcecode-5.4.2}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|