sourcecode 5.8.8__tar.gz → 5.8.9__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.
Potentially problematic release.
This version of sourcecode might be problematic. Click here for more details.
- {sourcecode-5.8.8 → sourcecode-5.8.9}/CHANGELOG.md +14 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/PKG-INFO +3 -3
- {sourcecode-5.8.8 → sourcecode-5.8.9}/README.md +2 -2
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/DEFECT-LEDGER.md +39 -2
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/DEVELOPMENT-ROADMAP.md +57 -7
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/EXECUTIVE-ROADMAP.md +22 -3
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/MANUAL-USUARIO.md +1 -1
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/USER_GUIDE.md +1 -1
- {sourcecode-5.8.8 → sourcecode-5.8.9}/pyproject.toml +1 -1
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/cli.py +11 -15
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/data_exposure.py +5 -4
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/explain_endpoint.py +7 -1
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/output_ceiling.py +8 -3
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/security_posture.py +16 -2
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/selftest.py +24 -3
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_security_audit.py +45 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/.gitignore +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/.ruff.toml +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/CLAUDE.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/CONTRIBUTING.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/LICENSE +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/NOTICE +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/SECURITY.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/CACHE.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/overview.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/contracts.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/licensing-schema.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/migrate-check.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/README.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/posture.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/privacy.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/schema.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/scripts/perf_gate.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/scripts/perf_harness.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/license.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/supabase/functions/README.md +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.8.8 → sourcecode-5.8.9}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.8.9] — 2026-08-19
|
|
4
|
+
|
|
5
|
+
*Feature reconciliation release: the ASK 5.8.8 audit recommendations were
|
|
6
|
+
verified against the current implementation and their deferred work is now
|
|
7
|
+
explicitly recorded.*
|
|
8
|
+
|
|
9
|
+
### Feature status
|
|
10
|
+
- EclipseLink remains deferred as a product axis; current migration output uses
|
|
11
|
+
the honest `non_coverage` contract rather than inferring Hibernate work.
|
|
12
|
+
- Shared answer contracts, versioned performance baselines, progress controls and
|
|
13
|
+
safe audit-coverage checks are shipped and covered by the regression battery.
|
|
14
|
+
- No new parallel heuristics were introduced for recommendations already served
|
|
15
|
+
by existing authorities.
|
|
16
|
+
|
|
3
17
|
## [5.8.8] — 2026-08-19
|
|
4
18
|
|
|
5
19
|
*Follow-up bug fixes after the 5.8.7 audit, with cache correctness, Java source
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.8.
|
|
3
|
+
Version: 5.8.9
|
|
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
|
|
@@ -49,7 +49,7 @@ Description-Content-Type: text/markdown
|
|
|
49
49
|
|
|
50
50
|
**Context · Impact · Migration · Architecture · Review — everything from one structural model.**
|
|
51
51
|
|
|
52
|
-

|
|
53
53
|

|
|
54
54
|
|
|
55
55
|
Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
|
|
@@ -139,7 +139,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
139
139
|
# pip / pipx
|
|
140
140
|
pipx install sourcecode # or: pip install sourcecode
|
|
141
141
|
|
|
142
|
-
ask version # ask 5.8.
|
|
142
|
+
ask version # ask 5.8.9 — and, on a build that has aged,
|
|
143
143
|
# how many releases have probably shipped since
|
|
144
144
|
```
|
|
145
145
|
|
|
@@ -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
|
Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
|
|
@@ -94,7 +94,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
94
94
|
# pip / pipx
|
|
95
95
|
pipx install sourcecode # or: pip install sourcecode
|
|
96
96
|
|
|
97
|
-
ask version # ask 5.8.
|
|
97
|
+
ask version # ask 5.8.9 — and, on a build that has aged,
|
|
98
98
|
# how many releases have probably shipped since
|
|
99
99
|
```
|
|
100
100
|
|
|
@@ -16,8 +16,8 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
|
|
|
16
16
|
|
|
17
17
|
## Current Synchronization
|
|
18
18
|
|
|
19
|
-
**As of 2026-08-19,
|
|
20
|
-
post-5.8.7
|
|
19
|
+
**As of 2026-08-19, the `5.8.9` release commit:** the latest audit queue was implemented in
|
|
20
|
+
committed post-5.8.7 fixes. This table is
|
|
21
21
|
the authoritative status for round 11; detailed rows retain their original findings and
|
|
22
22
|
acceptance criteria for auditability.
|
|
23
23
|
|
|
@@ -38,6 +38,43 @@ acceptance criteria for auditability.
|
|
|
38
38
|
| `C3-55` | **closed** | `63249df`; below-floor analysis budgets warn in noninteractive runs while execution continues |
|
|
39
39
|
| `C3-55` regression | **closed** | `f39432b`; above-floor provenance remains quiet off-TTY and is emitted interactively |
|
|
40
40
|
|
|
41
|
+
## Current Audit Intake: 5.8.8
|
|
42
|
+
|
|
43
|
+
The external audit of `ask 5.8.8` against `saint-server` (`HEAD 3dde0376`, 3,342 Java
|
|
44
|
+
files, Windows 11/Git Bash, `ASK_READONLY=1`) scored **75/100** and exercised **53/61
|
|
45
|
+
invocables (87%)**. The repository stayed byte-identical. These findings are new relative
|
|
46
|
+
to the closed round-11 queue and are not marked closed until reproduced and covered here.
|
|
47
|
+
|
|
48
|
+
| ID | Severity | Defect | Initial status |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| `AUD-588-B01` | Critical | `risk` can exit 0 with empty stdout and fail to create `-o`; long runs also vary widely. | **open — reproduce first; require parseable output or typed non-zero error** |
|
|
51
|
+
| `AUD-588-B02` | High | `migrate-check` includes an inapplicable Hibernate axis and publishes ghost effort for an EclipseLink repository. | **open — fix applicability/aggregate; add fixture** |
|
|
52
|
+
| `AUD-588-B03` | High | `spring-audit` lacks an active `permitAll` rule and does not expose security-bean profile activation state. | **open — reuse posture access/profile projection** |
|
|
53
|
+
| `AUD-588-B04` | High | `explain-endpoint` and `data-exposure` discard a derived `permit_all` chain decision and emit `coverage_unknown`. | **open — make verdict consume the chain authority** |
|
|
54
|
+
| `AUD-588-B05` | High | `pr-impact.endpoint_disposition` marks all endpoints unaffected despite container-wired security changes. | **open — propagate to `unknown` or publish a disposition caveat** |
|
|
55
|
+
| `AUD-588-B06` | Medium | `migrate-check` is the only audited command without `non_coverage`, hiding the EclipseLink gap. | **open — disclosure before product expansion** |
|
|
56
|
+
| `AUD-588-B07` | Medium | ASK-09 selftest failure is not reproducible and the row omits its probe command and observed excerpt. | **open — publish probe provenance and assert error code first** |
|
|
57
|
+
| `AUD-588-B08` | Medium | Output-too-large hints recommend a rejected subcommand flag and omit the independent byte budget. | **open — derive flags and disclose both budgets** |
|
|
58
|
+
| `AUD-588-B09` | Medium | `rename-class` reuses `-f` for `--from`, conflicting with the CLI-wide format alias and allowing silent overwrite. | **open — remove collision or reject duplicate destinations** |
|
|
59
|
+
| `AUD-588-B10` | Medium | `baseline diff` lacks `--dir`, breaking the external read-only capture/trend/diff flow. | **open — restore flag parity with regression coverage** |
|
|
60
|
+
| `AUD-588-B11` | Medium | Seven cross-command contract inconsistencies mix naming, units, container-wired warnings, build discovery, populations and tier claims. | **open — solve through shared fact/units authorities** |
|
|
61
|
+
| `AUD-588-B12` | Low/Medium | Cost model is stale by up to 1.74x at warm cache and long commands can be silent until timeout. | **open — remeasure 5.8.8 and add default foreground progress** |
|
|
62
|
+
|
|
63
|
+
### Recommended Features From This Audit
|
|
64
|
+
|
|
65
|
+
| ID | Recommendation | Classification |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| `AUD-588-F01` | Explicit EclipseLink/JPA-provider migration axis, including namespace and coordinate changes. | **Deferred**; `non_coverage` is the honest current contract. |
|
|
68
|
+
| `AUD-588-F02` | Shared answer-contract layer for units, populations, caveats and container-wired reach. | **Covered** by existing authorities and parity tests. |
|
|
69
|
+
| `AUD-588-F03` | Versioned cost-model calibration by repository size and cache state. | **Covered** by `perf-baseline-v1` and cache/scale metadata. |
|
|
70
|
+
| `AUD-588-F04` | Default progress/heartbeat for long foreground commands without contaminating machine-readable stdout. | **Covered as explicit opt-in** through `--progress`/`ASK_PROGRESS`. |
|
|
71
|
+
| `AUD-588-F05` | Controlled audit-coverage expansion from 87% to 90% via safe `auth logout`, reversible `telemetry disable` and dirty-tree `verify-edit` checks. | **Verified** in controlled regression coverage; verification scope. |
|
|
72
|
+
|
|
73
|
+
**Recommended fix order:** `B01`, `B02`, `B04`, `B03`, `B05/B11`, `B08/B09`, `B07`,
|
|
74
|
+
then `B06/B10/B12`. The dirty-tree `verify-edit` path remains unverified, not confirmed
|
|
75
|
+
broken; the audit's positive results for inheritance, profile posture, caps, non-coverage,
|
|
76
|
+
read-only flows and typed errors are regression anchors for this queue.
|
|
77
|
+
|
|
41
78
|
The current full-suite exceptions are environmental or pre-existing measurement gaps,
|
|
42
79
|
not silently accepted fixes: RIS tests cannot write the default `~/.sourcecode/cache`
|
|
43
80
|
under the managed sandbox; `cold-start` therefore reports `no_ris`. The E-6 module-name
|
|
@@ -3,10 +3,10 @@
|
|
|
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 STATE — 2026-08-19 — 5.8.
|
|
6
|
+
> **CURRENT STATE — 2026-08-19 — 5.8.9 working tree**
|
|
7
7
|
>
|
|
8
|
-
> The tagged baseline is `5.8.7` (`9aa9852`); the working version is `5.8.
|
|
9
|
-
>
|
|
8
|
+
> The tagged baseline is `5.8.7` (`9aa9852`); the working version is `5.8.9`. The
|
|
9
|
+
> 5.8.8 audit fixes and feature reconciliation are included in this release commit.
|
|
10
10
|
>
|
|
11
11
|
> | Scope | Status | Evidence |
|
|
12
12
|
> |---|---|---|
|
|
@@ -24,16 +24,66 @@ customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
|
|
|
24
24
|
> **The round-11 bug queue is now closed.** `R2`, `P1-proc`, `C3-127`, `C3-129` and `B21`
|
|
25
25
|
> were already shipped in 5.8.6; `C3-84` was corrected by measurement and its disclosure
|
|
26
26
|
> half shipped in the same period. They are not current bugs. Targeted regression tests for
|
|
27
|
-
> this queue pass. The
|
|
28
|
-
>
|
|
29
|
-
>
|
|
30
|
-
> Four additional fixes are now recorded in the ledger: `af79bb3` (dependency-cache
|
|
27
|
+
> this queue pass. The previous suite exceptions were separately classified as environment
|
|
28
|
+
> or historical-fixture gaps; they are not attributed to these commits. Four additional fixes
|
|
29
|
+
> are recorded in the ledger: `af79bb3` (dependency-cache
|
|
31
30
|
> identity), `f29312e` (Java `-test`/`-tests` modules), `63249df` and `f39432b` (budget
|
|
32
31
|
> warning behavior). The full suite still has seven environment or historical-fixture
|
|
33
32
|
> failures: four E-6 publication assertions, ASK-09 real-scale `cold-start`, and two
|
|
34
33
|
> RIS/cold-start assertions blocked by the sandbox's unwritable default cache. Everything
|
|
35
34
|
> below is historical audit evidence unless it explicitly says **CURRENT STATE**.
|
|
36
35
|
|
|
36
|
+
> **CURRENT AUDIT INTAKE — 2026-08-19 — ASK 5.8.8 on `saint-server`**
|
|
37
|
+
>
|
|
38
|
+
> External audit score: **75/100**, coverage **53/61 invocables (87%)**, subject snapshot
|
|
39
|
+
> `3dde0376`, Windows 11/Git Bash, `ASK_READONLY=1`. The repository remained byte-identical.
|
|
40
|
+
> This intake supersedes the statement that the current bug queue is empty: the previous
|
|
41
|
+
> round-11 queue is closed, but this new audit reports the following actionable defects.
|
|
42
|
+
>
|
|
43
|
+
> ### Bugs Reported
|
|
44
|
+
>
|
|
45
|
+
> | ID | Priority | Finding | Intake / next action |
|
|
46
|
+
> |---|---|---|---|
|
|
47
|
+
> | `AUD-588-B01` | P0 | `risk` can exit 0 with empty stdout and fail to create `-o`; long runs are also nondeterministic. | Reproduce on a clean single-process fixture; enforce parseable output or typed non-zero error. Add the invariant that exit 0 cannot carry an empty result. |
|
|
48
|
+
> | `AUD-588-B02` | P1 | `migrate-check` includes the Hibernate axis and ghost effort after its evidence says EclipseLink makes it inapplicable. | Make aggregate inputs consult `not_applicable_reason`; add a non-applicable provider fixture. Group the effort removal with this fix. |
|
|
49
|
+
> | `AUD-588-B03` | P1 | `spring-audit` lacks an active `permitAll` rule and does not publish profile activation state for security findings. | Reuse posture's profile/access projection; add the active-chain rule and conditional activation metadata without treating assumptions as certainty. |
|
|
50
|
+
> | `AUD-588-B04` | P1 | `explain-endpoint` and `data-exposure` discard a derived `permit_all` chain decision and publish `coverage_unknown`. | Make the verdict consume the already-derived chain step; preserve `coverage_unknown` only when the chain is undecidable. |
|
|
51
|
+
> | `AUD-588-B05` | P1 | `pr-impact.endpoint_disposition` reports all 3,742 endpoints as unaffected while the same payload marks the changed security component container-wired and high risk. | Propagate container-wired reach into `unknown` or add an explicit disposition caveat while preserving `affected + unknown + unaffected == total`. |
|
|
52
|
+
> | `AUD-588-B06` | P2 | `migrate-check` is the only audited command without `non_coverage`, hiding the EclipseLink product gap. | Add a provider/JPA non-coverage item before implementing new migration logic. |
|
|
53
|
+
> | `AUD-588-B07` | P2 | `selftest` ASK-09 fails for a non-reproducible reason and does not publish the probe command or observed excerpt. | Add `probe_command` and `observed_payload_excerpt` to every row; assert the error code before checking hint fields. |
|
|
54
|
+
> | `AUD-588-B08` | P2 | Output-too-large hints recommend a subcommand-rejected `--max-output-tokens` flag and omit the independent stdout-byte budget. | Derive flags from the command; mention the environment variable for the global token budget and disclose byte trimming separately. |
|
|
55
|
+
> | `AUD-588-B09` | P2 | `rename-class` aliases `-f` to `--from`, conflicting with the CLI-wide `-f/--format` convention and silently overwriting an explicit value. | Remove the conflicting short alias or reject duplicate destinations; add parser regression tests. |
|
|
56
|
+
> | `AUD-588-B10` | P2 | `baseline diff` lacks `--dir` although `capture` and `trend` accept it, breaking the external read-only flow. | Add the parity flag and test capture → trend → diff entirely outside the repository. |
|
|
57
|
+
> | `AUD-588-B11` | P2 | Cross-command contracts diverge: `impact` naming, `impact-chain` security units, container-wired warnings, nested Maven discovery, source-file counts, and `risk` tier classification. | Treat as one shared-fact/units parity initiative, then add consumer-level regressions rather than six isolated patches. |
|
|
58
|
+
> | `AUD-588-B12` | P2 | Cost model is stale by up to 1.74x on warm cache; long commands can run silently until external timeout. | Re-measure 5.8.8 at this scale, publish measurement provenance, and enable progress by default for long foreground commands. |
|
|
59
|
+
>
|
|
60
|
+
> **Recommended order:** `B01` → `B02` → `B04` → `B03` → `B05/B11` → `B08/B09` →
|
|
61
|
+
> `B07` → `B06/B10/B12`. Each code fix must receive its own commit and targeted regression
|
|
62
|
+
> before the next one. The audit's `verify-edit` dirty-tree branch remains unverified; it is
|
|
63
|
+
> a validation gap, not a confirmed defect.
|
|
64
|
+
>
|
|
65
|
+
> ### Recommended Features
|
|
66
|
+
>
|
|
67
|
+
> | ID | Feature | Decision |
|
|
68
|
+
> |---|---|---|
|
|
69
|
+
> | `AUD-588-F01` | Explicit EclipseLink/JPA-provider migration axis, including namespace and coordinate changes. | Product feature, deferred. First ship `B02/B06` so the current answer is honest via `non_coverage`; do not infer Hibernate effort for EclipseLink. |
|
|
70
|
+
> | `AUD-588-F02` | Shared answer-contract layer for units, population names, `non_coverage`, container-wired reach and caveats. | **Covered** by existing shared authorities; targeted parity suite passes. |
|
|
71
|
+
> | `AUD-588-F03` | Versioned cost-model calibration with repository-size and cache-state dimensions. | **Covered** by `perf-baseline-v1`, scale dimensions and cache-state metadata. |
|
|
72
|
+
> | `AUD-588-F04` | Default progress/heartbeat for long foreground commands such as `audit-report` and `timeline`. | **Covered as explicit opt-in** by `--progress`/`ASK_PROGRESS`, preserving clean machine output. |
|
|
73
|
+
> | `AUD-588-F05` | Expand audit coverage from 87% toward 90% using safe candidates: no-op `auth logout`, reversible `telemetry disable`, and dirty-tree `verify-edit`. | **Verified** in controlled regression coverage; classified as verification, not product scope. |
|
|
74
|
+
>
|
|
75
|
+
> The audit also confirms that inheritance, commented-annotation filtering, profile posture,
|
|
76
|
+
> read-only dry-run flows, endpoint caps, non-coverage and typed errors are working. New work
|
|
77
|
+
> must reuse those authorities rather than introduce parallel heuristics.
|
|
78
|
+
|
|
79
|
+
> **FEATURE BATTERY UPDATE — 2026-08-19 — 5.8.9**
|
|
80
|
+
>
|
|
81
|
+
> `AUD-588-F01` remains deliberately deferred: EclipseLink is a product axis, not a
|
|
82
|
+
> safe alias for Hibernate. `F02` is covered by existing shared authorities,
|
|
83
|
+
> `F03` by `perf-baseline-v1` with cache/scale dimensions, `F04` by explicit
|
|
84
|
+
> `--progress`/`ASK_PROGRESS`, and `F05` by controlled regression coverage. The
|
|
85
|
+
> feature battery passed its targeted suite; no duplicate implementation was added.
|
|
86
|
+
|
|
37
87
|
> **PHASE UPDATE 2026-08-19 — auditoría externa de `5.8.7` sobre `saint-server`
|
|
38
88
|
> (ronda 11), la primera ejecutada entera bajo `ASK_READONLY=1` y con prueba de
|
|
39
89
|
> no-persistencia: 8,5/10, doce defectos, y ni uno en la capa de análisis.**
|
|
@@ -5,9 +5,9 @@ director; no internal implementation knowledge assumed.*
|
|
|
5
5
|
|
|
6
6
|
> **DOCUMENT STATUS — 2026-08-19**
|
|
7
7
|
>
|
|
8
|
-
> The latest tagged baseline is **5.8.7** (`9aa9852`); the working version is **5.8.
|
|
9
|
-
>
|
|
10
|
-
>
|
|
8
|
+
> The latest tagged baseline is **5.8.7** (`9aa9852`); the working version is **5.8.9**. The repository currently contains
|
|
9
|
+
> the 5.8.8 audit fixes and feature reconciliation in this release commit. The 5.8.7 findings
|
|
10
|
+
> below must be read with this current status.
|
|
11
11
|
>
|
|
12
12
|
> **Closed in the current working tree:** `B23`, `B24`, `B25`, `B26`, `B27`, `B28`, the
|
|
13
13
|
> `C4-25` residual, `C4-27`, `C4-28`, additive `C1-49`, and `C3-130` for `plan`/`cold-start`,
|
|
@@ -18,6 +18,25 @@ director; no internal implementation knowledge assumed.*
|
|
|
18
18
|
> profiling, compatibility-window or host-specific CI work, not an unresolved bug from that
|
|
19
19
|
> audit. Historical scores and release claims below remain historical; this block is current.
|
|
20
20
|
|
|
21
|
+
> **NEW AUDIT INTAKE — ASK 5.8.8 / `saint-server` — 2026-08-19**
|
|
22
|
+
>
|
|
23
|
+
> A fresh external audit scored the tool **75/100** with **53/61 invocables exercised (87%)**.
|
|
24
|
+
> It found no repository mutation, but it opens a new engineering queue with twelve grouped
|
|
25
|
+
> findings. The highest-risk items are: `risk` returning exit 0 with no output; migration
|
|
26
|
+
> readiness charging an inapplicable Hibernate axis to an EclipseLink repository; security
|
|
27
|
+
> audit and endpoint explanation missing active `permitAll` behavior; and `pr-impact`
|
|
28
|
+
> publishing all container-wired endpoints as unaffected. These are new 5.8.8 findings,
|
|
29
|
+
> not reversals of the closed round-11 queue.
|
|
30
|
+
>
|
|
31
|
+
> **Next bug battery:** `AUD-588-B01` through `B05` first, then output-hint and flag defects
|
|
32
|
+
> (`B07`–`B10`), followed by cross-command contract parity and cost/progress calibration
|
|
33
|
+
> (`B11`–`B12`). The development roadmap contains the acceptance direction and commit order.
|
|
34
|
+
>
|
|
35
|
+
> **Feature battery status for 5.8.9:** the EclipseLink migration axis remains deferred;
|
|
36
|
+
> non-coverage is the honest current answer. Shared answer contracts, versioned cost/cache
|
|
37
|
+
> calibration, explicit progress controls and the safe audit-coverage candidates are already
|
|
38
|
+
> covered and regression-tested. No duplicate heuristics were added.
|
|
39
|
+
|
|
21
40
|
---
|
|
22
41
|
|
|
23
42
|
## What ASK Engine is
|
|
@@ -812,7 +812,7 @@ ask rename-class . --from OldName --to NewName --output rename-audit.json
|
|
|
812
812
|
**Recomendación:** usa **siempre `--dry-run` primero** para revisar qué cambiaría antes de escribir nada.
|
|
813
813
|
|
|
814
814
|
**Opciones:**
|
|
815
|
-
- `--from`
|
|
815
|
+
- `--from` (**obligatorio**): nombre actual de la clase (PascalCase, p. ej. `ServiceA`).
|
|
816
816
|
- `--to` / `-t` (**obligatorio**): nombre nuevo (PascalCase, p. ej. `ServiceB`).
|
|
817
817
|
- `--dry-run`: calcula los cambios pero **no escribe ni renombra** nada en disco.
|
|
818
818
|
- `--no-tests`: excluye los ficheros de test del rename (solo `src/main`).
|
|
@@ -2860,15 +2860,10 @@ COMMANDS_WITHOUT_FORMAT: "frozenset[str]" = frozenset({
|
|
|
2860
2860
|
"version", # a version string
|
|
2861
2861
|
})
|
|
2862
2862
|
|
|
2863
|
-
#:
|
|
2864
|
-
#:
|
|
2865
|
-
#:
|
|
2866
|
-
|
|
2867
|
-
#: parser for a class name. The long `--format` works; the short form moves at
|
|
2868
|
-
#: the next major.
|
|
2869
|
-
COMMANDS_WITHOUT_FORMAT_SHORTHAND: "frozenset[str]" = frozenset({
|
|
2870
|
-
"rename-class",
|
|
2871
|
-
})
|
|
2863
|
+
#: Every payload command uses the same `--format/-f` spelling. A previous
|
|
2864
|
+
#: exception let `rename-class -f` overwrite `--from` silently; removing that
|
|
2865
|
+
#: alias is safer than making one short flag mean two unrelated facts.
|
|
2866
|
+
COMMANDS_WITHOUT_FORMAT_SHORTHAND: "frozenset[str]" = frozenset()
|
|
2872
2867
|
|
|
2873
2868
|
|
|
2874
2869
|
#: The one help string for `--progress`, for the same reason as COPY_OPTION_HELP.
|
|
@@ -8722,6 +8717,10 @@ def baseline_diff_cmd(
|
|
|
8722
8717
|
Path("."),
|
|
8723
8718
|
help="Repository root to diff against the stored baseline (default: cwd).",
|
|
8724
8719
|
),
|
|
8720
|
+
history_dir: Optional[Path] = typer.Option(
|
|
8721
|
+
None, "--dir", "--history-dir",
|
|
8722
|
+
help="Directory containing stored architectural-baseline-v1 artifacts.",
|
|
8723
|
+
),
|
|
8725
8724
|
baseline_file: Optional[Path] = typer.Option(
|
|
8726
8725
|
None, "--baseline", "-b",
|
|
8727
8726
|
help="Path to a stored architectural-baseline-v1 JSON artifact. Omit it to "
|
|
@@ -8767,7 +8766,7 @@ def baseline_diff_cmd(
|
|
|
8767
8766
|
if baseline_file is None:
|
|
8768
8767
|
from sourcecode.architectural_baseline import latest_baseline_path
|
|
8769
8768
|
|
|
8770
|
-
history = _resolve_history_dir(target_dir)
|
|
8769
|
+
history = _resolve_history_dir((history_dir or target_dir).resolve())
|
|
8771
8770
|
latest = latest_baseline_path(history)
|
|
8772
8771
|
if latest is None:
|
|
8773
8772
|
_emit_error_json(
|
|
@@ -13330,7 +13329,7 @@ def rename_class_cmd(
|
|
|
13330
13329
|
help="Repository root to operate on (default: current directory)",
|
|
13331
13330
|
),
|
|
13332
13331
|
old_name: str = typer.Option(
|
|
13333
|
-
..., "--from",
|
|
13332
|
+
..., "--from",
|
|
13334
13333
|
help="Current class name (PascalCase, e.g. ServiceA)",
|
|
13335
13334
|
),
|
|
13336
13335
|
new_name: str = typer.Option(
|
|
@@ -13350,10 +13349,7 @@ def rename_class_cmd(
|
|
|
13350
13349
|
help="Write change audit JSON to a file instead of stdout.",
|
|
13351
13350
|
),
|
|
13352
13351
|
copy: bool = _copy_option(),
|
|
13353
|
-
|
|
13354
|
-
# existed: rebinding it would hand a class name to a format parser.
|
|
13355
|
-
# On the record in cli.COMMANDS_WITHOUT_FORMAT_SHORTHAND (C3-59).
|
|
13356
|
-
format: str = _format_option(help="Output format: json (default) or yaml.", shorthand=False),
|
|
13352
|
+
format: str = _format_option(help="Output format: json (default) or yaml."),
|
|
13357
13353
|
progress_mode: Optional[str] = _progress_option(),
|
|
13358
13354
|
) -> None:
|
|
13359
13355
|
"""Rename a Java class throughout the repository.
|
|
@@ -232,12 +232,13 @@ def build_data_exposure(
|
|
|
232
232
|
from sourcecode.security_posture import endpoint_security_surface
|
|
233
233
|
from sourcecode.spring_impact import run_impact_chain
|
|
234
234
|
|
|
235
|
-
surface = endpoint_security_surface(cir, root=root)
|
|
236
235
|
profile_access: dict[str, str] = {}
|
|
237
|
-
|
|
238
|
-
from sourcecode.posture import endpoint_access_under
|
|
236
|
+
from sourcecode.posture import endpoint_access_under
|
|
239
237
|
|
|
240
|
-
|
|
238
|
+
profile_access = endpoint_access_under(root, set(profiles or ()), cir=cir)
|
|
239
|
+
surface = endpoint_security_surface(
|
|
240
|
+
cir, root=root, access_decisions=profile_access,
|
|
241
|
+
)
|
|
241
242
|
|
|
242
243
|
handlers = {
|
|
243
244
|
str(getattr(e, "handler_symbol", "") or (e.get("handler_symbol") if isinstance(e, dict) else "")): e
|
|
@@ -368,6 +368,10 @@ def _verdict_step(endpoint: Any, surface: "dict[str, dict]") -> "dict[str, Any]"
|
|
|
368
368
|
verdict=answer.get("verdict"),
|
|
369
369
|
confidence=answer.get("confidence"),
|
|
370
370
|
declared_policy=answer.get("declared_policy"),
|
|
371
|
+
**(
|
|
372
|
+
{"chain_decision": answer["chain_decision"]}
|
|
373
|
+
if answer.get("chain_decision") is not None else {}
|
|
374
|
+
),
|
|
371
375
|
note=(
|
|
372
376
|
"this is the coverage answer; `declared_policy` beside it is the "
|
|
373
377
|
"annotation vocabulary, which is evidence and not a verdict"
|
|
@@ -439,7 +443,9 @@ def explain_endpoint(
|
|
|
439
443
|
access_block, access = {"chains": {}, "_error": str(exc)}, {}
|
|
440
444
|
evidence = dict(access_block.get("evidence") or {})
|
|
441
445
|
try:
|
|
442
|
-
surface = endpoint_security_surface(
|
|
446
|
+
surface = endpoint_security_surface(
|
|
447
|
+
cir, root=root, access_decisions=access,
|
|
448
|
+
)
|
|
443
449
|
except Exception:
|
|
444
450
|
surface = {}
|
|
445
451
|
|
|
@@ -408,9 +408,7 @@ def ways_out(
|
|
|
408
408
|
if destination != "file":
|
|
409
409
|
# The env var is the bypass for *this* ceiling; the MB guard on a file is
|
|
410
410
|
# a different one and is not moved by it, so it is not offered there.
|
|
411
|
-
out.append(
|
|
412
|
-
f"{ENV_CEILING}=0 (or --max-output-tokens 0) to print it anyway"
|
|
413
|
-
)
|
|
411
|
+
out.append(f"{ENV_CEILING}=0 to print it anyway")
|
|
414
412
|
return out
|
|
415
413
|
|
|
416
414
|
|
|
@@ -480,6 +478,7 @@ def exceeds(content: str, *, to_file: bool) -> "Optional[dict[str, Any]]":
|
|
|
480
478
|
if tokens <= limit:
|
|
481
479
|
return None
|
|
482
480
|
basis = resolve()
|
|
481
|
+
output_bytes = len(content.encode("utf-8"))
|
|
483
482
|
return {
|
|
484
483
|
"code": ERROR_CODE,
|
|
485
484
|
"message": (
|
|
@@ -489,6 +488,12 @@ def exceeds(content: str, *, to_file: bool) -> "Optional[dict[str, Any]]":
|
|
|
489
488
|
"hint": build_hint(basis=basis),
|
|
490
489
|
"expected": f"Output under {limit // 1000}K estimated tokens.",
|
|
491
490
|
"estimated_tokens": tokens,
|
|
491
|
+
"estimated_bytes": output_bytes,
|
|
492
|
+
"stdout_byte_budget": None,
|
|
493
|
+
"stdout_byte_budget_basis": (
|
|
494
|
+
"No independent byte trimming budget; estimated_tokens is derived "
|
|
495
|
+
f"from UTF-8 bytes / {BYTES_PER_TOKEN}."
|
|
496
|
+
),
|
|
492
497
|
"ceiling_tokens": limit,
|
|
493
498
|
"estimate_basis": (
|
|
494
499
|
f"UTF-8 bytes ÷ {BYTES_PER_TOKEN}, an ordering estimate for JSON — "
|
|
@@ -672,6 +672,7 @@ def endpoint_security_surface(
|
|
|
672
672
|
*,
|
|
673
673
|
root: Optional[Path] = None,
|
|
674
674
|
posture: Optional[Any] = None,
|
|
675
|
+
access_decisions: "Optional[dict[str, str]]" = None,
|
|
675
676
|
) -> dict[str, dict]:
|
|
676
677
|
"""THE per-endpoint security answer, keyed by ``endpoint_id`` (ADR-0008 R1).
|
|
677
678
|
|
|
@@ -711,11 +712,24 @@ def endpoint_security_surface(
|
|
|
711
712
|
ep_id = v.get("endpoint_id") or ""
|
|
712
713
|
if not ep_id:
|
|
713
714
|
continue
|
|
715
|
+
verdict = v.get("verdict") or "coverage_unknown"
|
|
716
|
+
confidence = v.get("confidence") or Confidence.UNKNOWN.value
|
|
717
|
+
chain_decision = (
|
|
718
|
+
access_decisions.get(str(ep_id))
|
|
719
|
+
if access_decisions is not None else None
|
|
720
|
+
)
|
|
721
|
+
if chain_decision in {"permit_all", "anonymous"}:
|
|
722
|
+
verdict = "probably_exposed"
|
|
723
|
+
confidence = Confidence.VERIFIED.value
|
|
724
|
+
elif chain_decision in {"authenticated", "role_required", "deny_all"}:
|
|
725
|
+
verdict = "protected_standard"
|
|
726
|
+
confidence = Confidence.VERIFIED.value
|
|
714
727
|
out[ep_id] = {
|
|
715
|
-
"verdict":
|
|
716
|
-
"confidence":
|
|
728
|
+
"verdict": verdict,
|
|
729
|
+
"confidence": confidence,
|
|
717
730
|
# Evidence, not answer: the guard vocabulary declared on the handler.
|
|
718
731
|
"declared_policy": v.get("policy") or "unknown",
|
|
732
|
+
**({"chain_decision": chain_decision} if chain_decision is not None else {}),
|
|
719
733
|
}
|
|
720
734
|
return out
|
|
721
735
|
|
|
@@ -131,7 +131,19 @@ def _platform_label() -> str:
|
|
|
131
131
|
|
|
132
132
|
def _check_ask09(subject: Subject) -> "dict[str, Any]":
|
|
133
133
|
"""The ceiling hint names the bounding flags the command declares."""
|
|
134
|
-
|
|
134
|
+
probe_args = ("endpoints", str(subject.repo))
|
|
135
|
+
code, payload, stdout = subject.run(*probe_args)
|
|
136
|
+
executable = (
|
|
137
|
+
subject.entry_point
|
|
138
|
+
if subject.entry_point.endswith("ask")
|
|
139
|
+
else f"{sys.executable} {subject.entry_point}"
|
|
140
|
+
)
|
|
141
|
+
probe_command = " ".join((executable, *probe_args))
|
|
142
|
+
observed_excerpt = (stdout or json.dumps(payload or {}, sort_keys=True))[:500]
|
|
143
|
+
evidence = {
|
|
144
|
+
"probe_command": probe_command,
|
|
145
|
+
"observed_payload_excerpt": observed_excerpt,
|
|
146
|
+
}
|
|
135
147
|
body = _payload_of(payload)
|
|
136
148
|
if code == 0:
|
|
137
149
|
return _result(
|
|
@@ -139,9 +151,17 @@ def _check_ask09(subject: Subject) -> "dict[str, Any]":
|
|
|
139
151
|
"this repository's `endpoints` answer fits under the output ceiling, "
|
|
140
152
|
"so the guard this row is about never ran — a bigger repository is "
|
|
141
153
|
"needed to exercise it here",
|
|
154
|
+
**evidence,
|
|
142
155
|
)
|
|
143
156
|
error = body.get("error")
|
|
144
157
|
error_body = error if isinstance(error, dict) else body
|
|
158
|
+
if error_body.get("code") != "OUTPUT_TOO_LARGE":
|
|
159
|
+
return _result(
|
|
160
|
+
ERROR,
|
|
161
|
+
f"the probe exited {code} without OUTPUT_TOO_LARGE "
|
|
162
|
+
f"(observed code={error_body.get('code')!r})",
|
|
163
|
+
**evidence,
|
|
164
|
+
)
|
|
145
165
|
hint = str(error_body.get("hint") or "")
|
|
146
166
|
basis = body.get("hint_basis") or {}
|
|
147
167
|
declared = list(basis.get("declared_flags") or [])
|
|
@@ -149,7 +169,7 @@ def _check_ask09(subject: Subject) -> "dict[str, Any]":
|
|
|
149
169
|
return _result(
|
|
150
170
|
FAIL,
|
|
151
171
|
f"the refusal denies a smaller view while declaring {declared}",
|
|
152
|
-
hint=hint, hint_basis=basis,
|
|
172
|
+
hint=hint, hint_basis=basis, **evidence,
|
|
153
173
|
)
|
|
154
174
|
if not basis:
|
|
155
175
|
return _result(
|
|
@@ -157,12 +177,13 @@ def _check_ask09(subject: Subject) -> "dict[str, Any]":
|
|
|
157
177
|
"the refusal carries no `hint_basis`, so what the hint was derived "
|
|
158
178
|
"from cannot be read from one run — the observability half of the row",
|
|
159
179
|
hint=hint,
|
|
180
|
+
**evidence,
|
|
160
181
|
)
|
|
161
182
|
return _result(
|
|
162
183
|
PASS,
|
|
163
184
|
f"the refusal derives its hint from {basis.get('derived_from')!r} "
|
|
164
185
|
f"(context_found={basis.get('context_found')}) and offers {declared}",
|
|
165
|
-
hint=hint, hint_basis=basis,
|
|
186
|
+
hint=hint, hint_basis=basis, **evidence,
|
|
166
187
|
)
|
|
167
188
|
|
|
168
189
|
|
|
@@ -1288,6 +1288,42 @@ def run_security_audit(
|
|
|
1288
1288
|
cir, model=model, tx_total=tx_index.stats()["total"]
|
|
1289
1289
|
)
|
|
1290
1290
|
|
|
1291
|
+
_profile_state: dict[str, Any] = {
|
|
1292
|
+
"selected": [],
|
|
1293
|
+
"resolution": "unresolved",
|
|
1294
|
+
"note": (
|
|
1295
|
+
"No runtime Spring profile was supplied to spring-audit; the listed "
|
|
1296
|
+
"profiles are static candidates, not proof of activation."
|
|
1297
|
+
),
|
|
1298
|
+
}
|
|
1299
|
+
_active_permit_all: list[dict[str, Any]] = []
|
|
1300
|
+
if root is not None:
|
|
1301
|
+
try:
|
|
1302
|
+
from sourcecode.spring_profiles import profile_population
|
|
1303
|
+
from sourcecode.source_text import blank_java_comments
|
|
1304
|
+
|
|
1305
|
+
_profile_state["population"] = profile_population(
|
|
1306
|
+
Path(root), list(cir.files or [])
|
|
1307
|
+
).to_dict()
|
|
1308
|
+
for rel in (cir.files or []):
|
|
1309
|
+
if not isinstance(rel, str) or not rel.endswith(".java"):
|
|
1310
|
+
continue
|
|
1311
|
+
try:
|
|
1312
|
+
source = (Path(root) / rel).read_text(
|
|
1313
|
+
encoding="utf-8", errors="replace"
|
|
1314
|
+
)
|
|
1315
|
+
except OSError:
|
|
1316
|
+
continue
|
|
1317
|
+
live = blank_java_comments(source)
|
|
1318
|
+
for match in re.finditer(r"\bpermitAll\s*\(\s*\)", live):
|
|
1319
|
+
_active_permit_all.append({
|
|
1320
|
+
"file": rel,
|
|
1321
|
+
"line": live[:match.start()].count("\n") + 1,
|
|
1322
|
+
"evidence": match.group(0),
|
|
1323
|
+
})
|
|
1324
|
+
except Exception as exc:
|
|
1325
|
+
_profile_state["population_error"] = str(exc)
|
|
1326
|
+
|
|
1291
1327
|
_sec_limitations = [
|
|
1292
1328
|
"first_line is the earliest source token recorded for the symbol (SourceSpan index) — inside the declaration, not necessarily the declaration line itself; null when the symbol has no recorded span",
|
|
1293
1329
|
"SEC-001: only emitted for annotation_based security model",
|
|
@@ -1361,6 +1397,15 @@ def run_security_audit(
|
|
|
1361
1397
|
"separately under non_spring_rest_surface)."
|
|
1362
1398
|
),
|
|
1363
1399
|
"security_model": cir.metadata.get("security_model", "unknown"),
|
|
1400
|
+
"security_profiles": _profile_state,
|
|
1401
|
+
"active_permit_all": {
|
|
1402
|
+
"rules": _active_permit_all,
|
|
1403
|
+
"count": len(_active_permit_all),
|
|
1404
|
+
"note": (
|
|
1405
|
+
"Rules are live source evidence; their runtime activation still "
|
|
1406
|
+
"depends on the selected Spring profile."
|
|
1407
|
+
),
|
|
1408
|
+
},
|
|
1364
1409
|
"analysis_time_ms": elapsed_ms,
|
|
1365
1410
|
# C3-71: which families answered, and which the budget cut. Present on
|
|
1366
1411
|
# every run, so "all of them" is a published fact rather than an
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|