sourcecode 5.8.9__tar.gz → 5.8.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sourcecode-5.8.9 → sourcecode-5.8.11}/CHANGELOG.md +31 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/PKG-INFO +3 -3
- {sourcecode-5.8.9 → sourcecode-5.8.11}/README.md +2 -2
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/DEFECT-LEDGER.md +41 -5
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/DEVELOPMENT-ROADMAP.md +50 -8
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/EXECUTIVE-ROADMAP.md +33 -3
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/USER_GUIDE.md +1 -1
- {sourcecode-5.8.9 → sourcecode-5.8.11}/pyproject.toml +1 -1
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/change_plan.py +3 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/cli.py +17 -2
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/compare.py +1 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/data_exposure.py +7 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/pr_impact.py +17 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/rule_catalog.py +1 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/security_config_scan.py +22 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/selftest.py +7 -3
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_impact.py +4 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_security_audit.py +40 -8
- {sourcecode-5.8.9 → sourcecode-5.8.11}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/.gitignore +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/.ruff.toml +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/CLAUDE.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/CONTRIBUTING.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/LICENSE +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/NOTICE +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/SECURITY.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/CACHE.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/overview.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/contracts.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/licensing-schema.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/migrate-check.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/README.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/posture.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/privacy.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/schema.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/scripts/perf_gate.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/scripts/perf_harness.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/license.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/supabase/functions/README.md +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.8.9 → sourcecode-5.8.11}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.8.11] — 2026-08-19
|
|
4
|
+
|
|
5
|
+
*Packaging re-release after the failed PyPI upload of 5.8.10. No functional or
|
|
6
|
+
schema changes relative to 5.8.10.*
|
|
7
|
+
|
|
8
|
+
## [5.8.10] — 2026-08-19
|
|
9
|
+
|
|
10
|
+
*Audit-remediation release: the 5.8.9 re-audit defects that were reproducible in
|
|
11
|
+
the repository now have one authority, a regression test and an atomic fix.*
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- A failed `--output` write can no longer be marked delivered by the common
|
|
15
|
+
progress seam; the global promise guard now returns `EXECUTION_FAILED` rather
|
|
16
|
+
than allowing exit 0 without the requested artifact.
|
|
17
|
+
- `selftest` ASK-09 reads `error.code`, `error.hint` and `hint_basis` from both
|
|
18
|
+
supported output-envelope shapes, so a valid ceiling refusal passes its own
|
|
19
|
+
gate.
|
|
20
|
+
- `spring-audit` emits `SEC-009` for active request-chain `permitAll()` rules,
|
|
21
|
+
including static `@Profile` evidence; `permit_all_rules` replaces the ambiguous
|
|
22
|
+
aggregate metadata name.
|
|
23
|
+
- `data-exposure`, `pr-impact`, `plan` and `compare` retain their relevant chain
|
|
24
|
+
decision or container-wiring floor instead of presenting the uncovered surface
|
|
25
|
+
as unaffected.
|
|
26
|
+
- `impact` discloses its independent 50,000-byte stdout budget, and
|
|
27
|
+
`impact-chain` names the population counted by `security_surfaces`.
|
|
28
|
+
|
|
29
|
+
### Remaining audit work
|
|
30
|
+
- Provider-specific migration disclosure, the residual answer-contract parity
|
|
31
|
+
items, and cost/progress calibration remain tracked in the roadmaps; EclipseLink
|
|
32
|
+
support itself remains a deferred product feature.
|
|
33
|
+
|
|
3
34
|
## [5.8.9] — 2026-08-19
|
|
4
35
|
|
|
5
36
|
*Feature reconciliation release: the ASK 5.8.8 audit recommendations were
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.8.
|
|
3
|
+
Version: 5.8.11
|
|
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.11 — 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.11 — and, on a build that has aged,
|
|
98
98
|
# how many releases have probably shipped since
|
|
99
99
|
```
|
|
100
100
|
|
|
@@ -16,6 +16,21 @@ 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, the `5.8.11` release commit:** this is the current status of
|
|
20
|
+
the 5.8.9 re-audit queue. The audit observations below remain historical evidence;
|
|
21
|
+
only the table here declares present state.
|
|
22
|
+
|
|
23
|
+
| Rows | Current status | Evidence |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `AUD-588-B01`, `AUD-589-B01`, `C3-122` | **closed** | `20596c8`; failed writes cannot suppress the global output-promise guard, covering both `risk` and `audit-report` emit paths. |
|
|
26
|
+
| `AUD-588-B03` | **closed** | `16a52cc`; `SEC-009`, static `@Profile` evidence and `permit_all_rules` are emitted with regressions. |
|
|
27
|
+
| `AUD-588-B04` | **closed** | `fd34eb1`; `data-exposure` preserves the chain decision for every route. |
|
|
28
|
+
| `AUD-588-B05` | **closed** | `c15f5b6`; changed container-wired components block a false `unaffected` disposition. |
|
|
29
|
+
| `AUD-588-B07` | **closed** | `5cc6ba7`; ASK-09 reads the envelope error contract and covers the wrapped shape. |
|
|
30
|
+
| `AUD-588-B08` | **closed** | `c084555`; `impact` publishes its independent stdout-byte budget. |
|
|
31
|
+
| `AUD-588-B11` (container/units subset) | **closed** | `ca72b61`, `a49cf6a`; plan/compare publish container wiring and impact-chain names security-surface units. |
|
|
32
|
+
| `AUD-588-B02`, `B06`, B11 residuals, `B12` | **open** | Require provider non-coverage verification, remaining contract parity and controlled cost calibration; no closure is inferred from the release. |
|
|
33
|
+
|
|
19
34
|
**As of 2026-08-19, the `5.8.9` release commit:** the latest audit queue was implemented in
|
|
20
35
|
committed post-5.8.7 fixes. This table is
|
|
21
36
|
the authoritative status for round 11; detailed rows retain their original findings and
|
|
@@ -60,15 +75,36 @@ to the closed round-11 queue and are not marked closed until reproduced and cove
|
|
|
60
75
|
| `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
76
|
| `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
77
|
|
|
78
|
+
### Re-audit Intake: 5.8.9
|
|
79
|
+
|
|
80
|
+
The same external auditor re-ran the same `saint-server` snapshot under the same
|
|
81
|
+
read-only protocol against 5.8.9. Score: **80/100** (75 previously), still **53/61
|
|
82
|
+
invocables (87%)**. The CIR remained byte-identical. This reopens false closures and
|
|
83
|
+
adds one newly observable zero-output path; it does not duplicate the rows above.
|
|
84
|
+
|
|
85
|
+
| ID / lineage | Status | Evidence and next action |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `AUD-588-B01` / `C3-122` | **reopened, critical** | `risk` exits 0 with empty stdout and can omit a promised `-o` file. Fix early/partial composition and enforce a typed failure or parseable answer through the real entry point. |
|
|
88
|
+
| `AUD-588-B02` + `B06` | **open, critical** | EclipseLink still receives a Hibernate axis and `non_coverage` is null. Make `not_applicable_reason` authoritative for applicability, effort and aggregate; publish provider non-coverage. |
|
|
89
|
+
| `AUD-588-B03` | **partial** | `permitAll` evidence and profiles are present, but no rule or per-finding activation state exists; rename `active_permit_all` to an honest per-entry contract. |
|
|
90
|
+
| `AUD-588-B04` | **partial** | `explain-endpoint` is fixed; `data-exposure` still reports `coverage_unknown` for chain-permitted routes. |
|
|
91
|
+
| `AUD-588-B05` | **regression** | `unaffected_basis` claims no blocker while container-wired changes are present. Demote routes or publish a blocker/caveat; preserve `affected + unknown + unaffected = total`. |
|
|
92
|
+
| `AUD-588-B07` | **partial** | Selftest publishes provenance but reads `error.code` at the wrong envelope level, producing a false `error` instead of `pass`. |
|
|
93
|
+
| `AUD-588-B08` | **partial** | `impact` still trims stdout at 50,000 bytes after the token ceiling is raised without naming that second budget. |
|
|
94
|
+
| `AUD-588-B11` | **open, six residuals** | `plan`/`compare` miss container reach; units, build discovery, populations and risk tier still diverge. |
|
|
95
|
+
| `AUD-588-B12` | **partial** | Timeline completes, but cost anchors are stale and long foreground commands remain silent by default. |
|
|
96
|
+
| `AUD-589-B01` | **new, high** | `audit-report` can exit 0 with empty stdout; its `-o` path diverges and leaves partial evidence when killed. Reuse the working `_partial` and output-promise contracts. |
|
|
97
|
+
| `AUD-589-B02` | **unconfirmed performance suspicion** | `data-exposure --config` was measured 2.76x slower with identical output; require convergent controlled measurements before code changes. |
|
|
98
|
+
|
|
63
99
|
### Recommended Features From This Audit
|
|
64
100
|
|
|
65
101
|
| ID | Recommendation | Classification |
|
|
66
102
|
|---|---|---|
|
|
67
|
-
| `AUD-588-F01` | Explicit EclipseLink/JPA-provider migration axis, including namespace and coordinate changes. | **Deferred**; `non_coverage` is
|
|
68
|
-
| `AUD-588-F02` | Shared answer-contract layer for units, populations, caveats and container-wired reach. | **
|
|
69
|
-
| `AUD-588-F03` | Versioned cost-model calibration by repository size and cache state. | **
|
|
70
|
-
| `AUD-588-F04` | Default progress/heartbeat for long foreground commands without contaminating machine-readable stdout. | **
|
|
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. | **
|
|
103
|
+
| `AUD-588-F01` | Explicit EclipseLink/JPA-provider migration axis, including namespace and coordinate changes. | **Deferred**; its prerequisite provider `non_coverage` disclosure is still open. |
|
|
104
|
+
| `AUD-588-F02` | Shared answer-contract layer for units, populations, caveats and container-wired reach. | **Partially covered**; six consumers remain disconnected according to the re-audit. |
|
|
105
|
+
| `AUD-588-F03` | Versioned cost-model calibration by repository size and cache state. | **Partially covered**; schema and dimensions exist, but 5.1.0-era anchors are stale. |
|
|
106
|
+
| `AUD-588-F04` | Default progress/heartbeat for long foreground commands without contaminating machine-readable stdout. | **Explicit opt-in by decision**, not default coverage; update cost advice accordingly. |
|
|
107
|
+
| `AUD-588-F05` | Controlled audit-coverage expansion from 87% to 90% via safe `auth logout`, reversible `telemetry disable` and dirty-tree `verify-edit` checks. | **Locally verified only**; external audit remains at 87% with eight blocked invocables. |
|
|
72
108
|
|
|
73
109
|
**Recommended fix order:** `B01`, `B02`, `B04`, `B03`, `B05/B11`, `B08/B09`, `B07`,
|
|
74
110
|
then `B06/B10/B12`. The dirty-tree `verify-edit` path remains unverified, not confirmed
|
|
@@ -3,6 +3,20 @@
|
|
|
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.11 release**
|
|
7
|
+
>
|
|
8
|
+
> The 5.8.9 re-audit battery closed the reproducible output, envelope, security-chain
|
|
9
|
+
> and container-reach defects in atomic commits. `20596c8` fixes the output-promise
|
|
10
|
+
> seam; `16a52cc` adds `SEC-009` and profile evidence; `fd34eb1`, `c15f5b6`,
|
|
11
|
+
> `5cc6ba7`, `c084555`, `ca72b61` and `a49cf6a` close the independent consumer
|
|
12
|
+
> regressions. Targeted cross-command regression suites pass.
|
|
13
|
+
>
|
|
14
|
+
> Remaining work is explicit: provider-specific migration non-coverage (`B02/B06`),
|
|
15
|
+
> the unresolved portions of answer-contract parity (`B11`), controlled cost-model
|
|
16
|
+
> recalibration and the opt-in progress decision (`B12`). EclipseLink migration support
|
|
17
|
+
> remains a deferred feature, not a bug fix. Historical 5.8.9 intake tables below are
|
|
18
|
+
> superseded by this block where their statuses differ.
|
|
19
|
+
|
|
6
20
|
> **CURRENT STATE — 2026-08-19 — 5.8.9 working tree**
|
|
7
21
|
>
|
|
8
22
|
> The tagged baseline is `5.8.7` (`9aa9852`); the working version is `5.8.9`. The
|
|
@@ -67,10 +81,39 @@ customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
|
|
|
67
81
|
> | ID | Feature | Decision |
|
|
68
82
|
> |---|---|---|
|
|
69
83
|
> | `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. | **
|
|
71
|
-
> | `AUD-588-F03` | Versioned cost-model calibration with repository-size and cache-state dimensions. | **
|
|
72
|
-
> | `AUD-588-F04` | Default progress/heartbeat for long foreground commands such as `audit-report` and `timeline`. | **
|
|
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`. | **
|
|
84
|
+
> | `AUD-588-F02` | Shared answer-contract layer for units, population names, `non_coverage`, container-wired reach and caveats. | **Partial**; six consumers remain disconnected according to the re-audit. |
|
|
85
|
+
> | `AUD-588-F03` | Versioned cost-model calibration with repository-size and cache-state dimensions. | **Partial**; schema/dimensions exist but anchors are stale. |
|
|
86
|
+
> | `AUD-588-F04` | Default progress/heartbeat for long foreground commands such as `audit-report` and `timeline`. | **Explicit opt-in by decision**, not default coverage. |
|
|
87
|
+
> | `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`. | **Locally verified only**; the external audit remains at 87%. |
|
|
88
|
+
|
|
89
|
+
> **RE-AUDIT INTAKE — 2026-08-19 — ASK 5.8.9 on the same `saint-server` snapshot**
|
|
90
|
+
>
|
|
91
|
+
> The external re-audit scored **80/100** (up from 75), with the same 53/61 invocables
|
|
92
|
+
> and the same read-only protocol. It confirms the cheap CLI fixes, but reopens the
|
|
93
|
+
> two priority defects that were incorrectly treated as closed and identifies one
|
|
94
|
+
> correction regression. The CIR is byte-identical across 5.8.8/5.8.9, so these are
|
|
95
|
+
> emission, contract or consumer issues rather than parser drift.
|
|
96
|
+
>
|
|
97
|
+
> | ID / lineage | Status after re-audit | Required action |
|
|
98
|
+
> |---|---|---|
|
|
99
|
+
> | `AUD-588-B01` / `C3-122` | **REOPENED, critical** — `risk` exits 0 with empty stdout and can miss a promised `-o` file. | Fix the early/partial composition path; enforce parseable output or typed non-zero failure through the real entry point. |
|
|
100
|
+
> | `AUD-588-B02` + `B06` | **OPEN, critical** — EclipseLink still receives a Hibernate axis and `non_coverage: null`. | Make `not_applicable_reason` authoritative for applicability, effort and aggregate; publish provider non-coverage. |
|
|
101
|
+
> | `AUD-588-B03` | **PARTIAL** — profile/permit evidence exists, but no security rule or activation state reaches findings. | Add the active-chain rule, per-finding profile condition and honest `permit_all_rules` naming. |
|
|
102
|
+
> | `AUD-588-B04` | **PARTIAL** — `explain-endpoint` is fixed; `data-exposure` still emits `coverage_unknown`. | Bind the independent data-exposure consumer to the chain authority. |
|
|
103
|
+
> | `AUD-588-B05` | **REGRESSION** — `unaffected_basis` says exclusions are safe while container-wired changes are present. | Demote routes or publish a non-empty blocker/caveat; preserve the partition invariant. |
|
|
104
|
+
> | `AUD-588-B07` | **PARTIAL** — provenance is present, but `selftest` reads `error.code` at the wrong envelope level. | Read the nested error contract and gate the four ASK-09 branches. |
|
|
105
|
+
> | `AUD-588-B08` | **PARTIAL** — token hint is fixed; `impact` still has a 50,000-byte stdout trim not named alongside the token budget. | Publish both budgets and make the hint disclose token vs byte behavior. |
|
|
106
|
+
> | `AUD-588-B11` | **OPEN, six residuals** — `plan`/`compare` miss container reach; units, build discovery, populations and risk tier still diverge. | Connect all consumers to shared authorities and add parity tests. |
|
|
107
|
+
> | `AUD-588-B12` | **PARTIAL** — timeline completes, but cost anchors are stale and long commands remain silent by default. | Recalibrate from 5.8.9 measurements; decide default heartbeat and foreground classification. |
|
|
108
|
+
> | `AUD-589-B01` | **NEW, high** — `audit-report` can exit 0 with empty stdout; `-o` follows a different/long partial path. | Reuse the working `_partial` contract and shared output-promise guard with `risk`. |
|
|
109
|
+
> | `AUD-589-B02` | **UNCONFIRMED performance suspicion** — `data-exposure --config` measured 2.76x slower with identical output. | Reproduce with a convergent, controlled multi-run measurement before changing code. |
|
|
110
|
+
|
|
111
|
+
> **Feature status correction:** `F02` is not fully covered while six cross-command
|
|
112
|
+
> consumers remain disconnected; `F03` is not covered by schema versioning alone while
|
|
113
|
+
> its anchors are stale; `F04` remains an explicit opt-in decision and must be reflected
|
|
114
|
+
> in foreground cost advice; `F05` is verified only in controlled local tests, not on the
|
|
115
|
+
> auditor's 8 blocked invocables. `F01` remains deferred, but its `non_coverage` prerequisite
|
|
116
|
+
> is now a confirmed open defect rather than a completed contract.
|
|
74
117
|
>
|
|
75
118
|
> The audit also confirms that inheritance, commented-annotation filtering, profile posture,
|
|
76
119
|
> read-only dry-run flows, endpoint caps, non-coverage and typed errors are working. New work
|
|
@@ -79,10 +122,9 @@ customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
|
|
|
79
122
|
> **FEATURE BATTERY UPDATE — 2026-08-19 — 5.8.9**
|
|
80
123
|
>
|
|
81
124
|
> `AUD-588-F01` remains deliberately deferred: EclipseLink is a product axis, not a
|
|
82
|
-
> safe alias for Hibernate. `F02`
|
|
83
|
-
> `
|
|
84
|
-
>
|
|
85
|
-
> feature battery passed its targeted suite; no duplicate implementation was added.
|
|
125
|
+
> safe alias for Hibernate. `F02` and `F03` are partial, `F04` remains opt-in, and
|
|
126
|
+
> `F05` is locally verified but not externally complete. The feature battery passed
|
|
127
|
+
> its targeted suite; no duplicate implementation was added.
|
|
86
128
|
|
|
87
129
|
> **PHASE UPDATE 2026-08-19 — auditoría externa de `5.8.7` sobre `saint-server`
|
|
88
130
|
> (ronda 11), la primera ejecutada entera bajo `ASK_READONLY=1` y con prueba de
|
|
@@ -5,9 +5,10 @@ director; no internal implementation knowledge assumed.*
|
|
|
5
5
|
|
|
6
6
|
> **DOCUMENT STATUS — 2026-08-19**
|
|
7
7
|
>
|
|
8
|
-
> The
|
|
9
|
-
>
|
|
10
|
-
> below
|
|
8
|
+
> The current release is **5.8.11**. It closes the reproducible output-delivery,
|
|
9
|
+
> security-chain, selftest-envelope and container-reach defects from the 5.8.9
|
|
10
|
+
> re-audit. The 5.8.7 and 5.8.9 findings below are historical evidence and must be
|
|
11
|
+
> read with this status block.
|
|
11
12
|
>
|
|
12
13
|
> **Closed in the current working tree:** `B23`, `B24`, `B25`, `B26`, `B27`, `B28`, the
|
|
13
14
|
> `C4-25` residual, `C4-27`, `C4-28`, additive `C1-49`, and `C3-130` for `plan`/`cold-start`,
|
|
@@ -18,6 +19,18 @@ director; no internal implementation knowledge assumed.*
|
|
|
18
19
|
> profiling, compatibility-window or host-specific CI work, not an unresolved bug from that
|
|
19
20
|
> audit. Historical scores and release claims below remain historical; this block is current.
|
|
20
21
|
|
|
22
|
+
> **5.8.11 AUDIT REMEDIATION**
|
|
23
|
+
>
|
|
24
|
+
> A requested output file now either exists or the command returns a typed failure;
|
|
25
|
+
> `selftest` can validate a genuine output-ceiling refusal; security exceptions and
|
|
26
|
+
> their static profile conditions are visible as findings; and change-planning views
|
|
27
|
+
> retain container-driven reach instead of treating it as an empty call cone. The
|
|
28
|
+
> release also distinguishes the token ceiling from `impact`'s independent byte cap.
|
|
29
|
+
>
|
|
30
|
+
> The open roadmap is narrower: provider-specific EclipseLink migration disclosure,
|
|
31
|
+
> residual cross-command parity and controlled cost calibration. EclipseLink migration
|
|
32
|
+
> automation remains a future product capability rather than a claim of this release.
|
|
33
|
+
|
|
21
34
|
> **NEW AUDIT INTAKE — ASK 5.8.8 / `saint-server` — 2026-08-19**
|
|
22
35
|
>
|
|
23
36
|
> A fresh external audit scored the tool **75/100** with **53/61 invocables exercised (87%)**.
|
|
@@ -37,6 +50,23 @@ director; no internal implementation knowledge assumed.*
|
|
|
37
50
|
> calibration, explicit progress controls and the safe audit-coverage candidates are already
|
|
38
51
|
> covered and regression-tested. No duplicate heuristics were added.
|
|
39
52
|
|
|
53
|
+
> **RE-AUDIT UPDATE — ASK 5.8.9 / `saint-server` — 2026-08-19**
|
|
54
|
+
>
|
|
55
|
+
> The same external audit scored **80/100**, up from 75, with unchanged coverage at
|
|
56
|
+
> **53/61 invocables (87%)** and a byte-identical CIR. The release improved CLI ergonomics
|
|
57
|
+
> and timeline completion, but the two highest-priority issues remain open: `risk` can
|
|
58
|
+
> exit 0 with no answer or promised file, and `migrate-check` still bills Hibernate work
|
|
59
|
+
> to an EclipseLink repository. A new high-priority sibling is `audit-report` returning
|
|
60
|
+
> exit 0 with empty stdout. `pr-impact` also introduced a correction regression by saying
|
|
61
|
+
> exclusions are safe while container-wired changes are present.
|
|
62
|
+
>
|
|
63
|
+
> **Roadmap correction:** `B01`/`C3-122` is reopened first, followed by the shared silent-
|
|
64
|
+
> composition path (`risk` and `audit-report`), `B02` plus provider non-coverage, the
|
|
65
|
+
> `pr-impact` regression, `data-exposure` chain binding, Spring security activation
|
|
66
|
+
> findings, then the remaining cross-command parity and cost calibration. `F02` and `F03`
|
|
67
|
+
> are partial rather than complete; `F04` is an explicit opt-in product decision; `F05`
|
|
68
|
+
> is locally verified but not externally covered. EclipseLink remains deferred.
|
|
69
|
+
|
|
40
70
|
---
|
|
41
71
|
|
|
42
72
|
## What ASK Engine is
|
|
@@ -28,6 +28,7 @@ from typing import TYPE_CHECKING
|
|
|
28
28
|
|
|
29
29
|
from sourcecode import non_coverage as _non_coverage
|
|
30
30
|
from sourcecode.canonical_ir import project_blast_radius
|
|
31
|
+
from sourcecode.container_wiring import detect_classes
|
|
31
32
|
from sourcecode.repository_ir import _all_callers_from_rg
|
|
32
33
|
from sourcecode.security_posture import _graph_nodes
|
|
33
34
|
from sourcecode.path_filters import is_test_path
|
|
@@ -139,6 +140,7 @@ def build_change_plan(
|
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
seeds = list(blast["matched_fqns"])
|
|
143
|
+
container_wired = [w.to_dict() for w in detect_classes(cir, seeds)]
|
|
142
144
|
meta = _node_meta(cir)
|
|
143
145
|
affected = _dependents_closure(cir.reverse_graph or {}, seeds, max_depth, _NODE_CAP)
|
|
144
146
|
|
|
@@ -221,6 +223,7 @@ def build_change_plan(
|
|
|
221
223
|
"count": len(prod),
|
|
222
224
|
"components": prod[:_LIST_CAP],
|
|
223
225
|
},
|
|
226
|
+
"container_wired": container_wired,
|
|
224
227
|
"covering_tests": (
|
|
225
228
|
{
|
|
226
229
|
"count": len(tests),
|
|
@@ -2112,12 +2112,14 @@ def _emit_command_output(
|
|
|
2112
2112
|
raise typer.Exit(1)
|
|
2113
2113
|
if output_path is not None:
|
|
2114
2114
|
_receipt = _safe_write_file(output_path, content)
|
|
2115
|
-
_mark_output_delivered()
|
|
2116
2115
|
if not _receipt.get("written"):
|
|
2117
2116
|
# B15: the answer was produced and thrown away, on request. Saying
|
|
2118
2117
|
# "written to nul" would be the one thing worse than the error this
|
|
2119
2118
|
# used to raise.
|
|
2120
2119
|
typer.echo(_receipt.get("note") or f"Discarded to {output_path}")
|
|
2120
|
+
# A failed write is never delivery. The guard separately exempts
|
|
2121
|
+
# discard sinks and existing files by path, so no state flag is
|
|
2122
|
+
# needed here.
|
|
2121
2123
|
elif success_msg:
|
|
2122
2124
|
# C3-26/C3-18: the payload went to the file, so stdout is free and
|
|
2123
2125
|
# this confirmation is the run's whole answer — `cache warm` and
|
|
@@ -2126,12 +2128,14 @@ def _emit_command_output(
|
|
|
2126
2128
|
# stderr battery listed its commands by hand. Measured before the
|
|
2127
2129
|
# fix on spring-petclinic: stdout 0 bytes, stderr 155.
|
|
2128
2130
|
typer.echo(success_msg)
|
|
2131
|
+
_mark_output_delivered()
|
|
2129
2132
|
else:
|
|
2130
2133
|
# C3-122: a command whose emit seam carries no sentence of its own
|
|
2131
2134
|
# confirmed a 444-second run with total silence. The receipt is a
|
|
2132
2135
|
# notice, so a pipeline and a PowerShell capture stay exactly as
|
|
2133
2136
|
# they were (C3-26) and a person at a terminal is told.
|
|
2134
2137
|
_notice(f"✓ {_receipt.get('bytes', 0)} bytes written to {output_path}")
|
|
2138
|
+
_mark_output_delivered()
|
|
2135
2139
|
else:
|
|
2136
2140
|
try:
|
|
2137
2141
|
sys.stdout.buffer.write(content.encode("utf-8"))
|
|
@@ -2154,7 +2158,8 @@ def _emit_command_output(
|
|
|
2154
2158
|
_notice("✓ copied to clipboard")
|
|
2155
2159
|
# The answer has been handed over. Any `done (Xs)` a command deferred is now
|
|
2156
2160
|
# a true claim and prints here — never before this line (C3-54).
|
|
2157
|
-
|
|
2161
|
+
if _OUTPUT_DELIVERED:
|
|
2162
|
+
_progress_output_emitted()
|
|
2158
2163
|
|
|
2159
2164
|
|
|
2160
2165
|
def _emit_text_output(
|
|
@@ -6983,6 +6988,16 @@ def impact_cmd(
|
|
|
6983
6988
|
cir._raw_ir, target, max_depth=depth, list_limit=0 if _to_file else None,
|
|
6984
6989
|
root=root, covered_types=_covered_types,
|
|
6985
6990
|
)
|
|
6991
|
+
# Token ceilings and this command's byte budget are independent controls.
|
|
6992
|
+
# Publish both at the point where the impact answer is shaped so raising
|
|
6993
|
+
# ASK_MAX_OUTPUT_TOKENS cannot be mistaken for disabling stdout trimming.
|
|
6994
|
+
result["stdout_byte_budget"] = BUDGET_IMPACT if not _to_file else None
|
|
6995
|
+
result["stdout_byte_budget_basis"] = (
|
|
6996
|
+
"impact stdout rendering is capped independently at 50,000 UTF-8 bytes; "
|
|
6997
|
+
"ASK_MAX_OUTPUT_TOKENS does not disable this byte budget"
|
|
6998
|
+
if not _to_file else
|
|
6999
|
+
"No stdout byte budget applies when --output writes the complete answer."
|
|
7000
|
+
)
|
|
6986
7001
|
result = _apply_budget(result, BUDGET_IMPACT, label="impact", output_path=output_path)
|
|
6987
7002
|
if _misread and result.get("resolution") == "not_found":
|
|
6988
7003
|
result["analysis_warnings"] = [*(result.get("analysis_warnings") or []), _misread]
|
|
@@ -262,6 +262,7 @@ def build_comparison(
|
|
|
262
262
|
"resolution": resolution,
|
|
263
263
|
"resolved": resolved,
|
|
264
264
|
"cost": cost,
|
|
265
|
+
"container_wired": plan.get("container_wired") if resolved else None,
|
|
265
266
|
"why": _evidence_trail(cost, blast, resolved, plan),
|
|
266
267
|
}
|
|
267
268
|
# C1-13/C2-1: when the walk was capped, some magnitudes are floors. The
|
|
@@ -83,6 +83,7 @@ class ExposedRoute:
|
|
|
83
83
|
verdict: str
|
|
84
84
|
access: Optional[str] = None
|
|
85
85
|
access_decision: Optional[str] = None
|
|
86
|
+
chain_decision: Optional[str] = None
|
|
86
87
|
|
|
87
88
|
def to_dict(self) -> dict:
|
|
88
89
|
out = {
|
|
@@ -100,6 +101,8 @@ class ExposedRoute:
|
|
|
100
101
|
if self.access is not None:
|
|
101
102
|
out["access_under_profile"] = self.access
|
|
102
103
|
out["access_decision"] = self.access_decision
|
|
104
|
+
if self.chain_decision is not None:
|
|
105
|
+
out["chain_decision"] = self.chain_decision
|
|
103
106
|
return out
|
|
104
107
|
|
|
105
108
|
|
|
@@ -375,6 +378,10 @@ def _finish_route(
|
|
|
375
378
|
verdict=verdict,
|
|
376
379
|
access=access,
|
|
377
380
|
access_decision=decision,
|
|
381
|
+
chain_decision=(
|
|
382
|
+
str(bound["chain_decision"])
|
|
383
|
+
if bound.get("chain_decision") is not None else None
|
|
384
|
+
),
|
|
378
385
|
)
|
|
379
386
|
|
|
380
387
|
|
|
@@ -786,6 +786,23 @@ def _run_pr_impact_internal(
|
|
|
786
786
|
# `ProductHandlerMapping → blCatalogService → ProductDaoImpl` chain, caught
|
|
787
787
|
# structurally rather than by recognising a name.
|
|
788
788
|
disposition_blockers: list[_disposition.Blocker] = []
|
|
789
|
+
changed_wired = [
|
|
790
|
+
item for item in wired
|
|
791
|
+
if set(getattr(item, "kinds", ()) or ())
|
|
792
|
+
& {"container_configuration", "interception_point"}
|
|
793
|
+
]
|
|
794
|
+
if changed_wired:
|
|
795
|
+
_named = ", ".join(item.symbol for item in changed_wired[:3])
|
|
796
|
+
disposition_blockers.append(_disposition.Blocker(
|
|
797
|
+
reason=_disposition.REASON_CONTAINER_DISPATCH,
|
|
798
|
+
detail=(
|
|
799
|
+
f"{len(changed_wired)} changed container-wired component(s) "
|
|
800
|
+
f"({_named}{', …' if len(changed_wired) > 3 else ''}) are framework "
|
|
801
|
+
"dispatch points. Their route reach is not represented by the call "
|
|
802
|
+
"cone, so routes with no modeled path are unknown rather than "
|
|
803
|
+
"unaffected (NC-010)."
|
|
804
|
+
),
|
|
805
|
+
))
|
|
789
806
|
wired_in_cone = detect_container_wired_classes(
|
|
790
807
|
cir, sorted(cone_classes - class_fqns_set)
|
|
791
808
|
)
|
|
@@ -56,6 +56,7 @@ RULES: tuple[Rule, ...] = (
|
|
|
56
56
|
Rule("SEC-006", "SEC", "Cookie created without the Secure attribute"),
|
|
57
57
|
Rule("SEC-007", "SEC", "Credential stored in a deployment descriptor"),
|
|
58
58
|
Rule("SEC-008", "SEC", "SQL built by MyBatis string interpolation"),
|
|
59
|
+
Rule("SEC-009", "SEC", "Anonymous request-chain exception"),
|
|
59
60
|
Rule("DEAD-001", "DEAD", "Security control present but disabled"),
|
|
60
61
|
Rule("GATE-001", "GATE", "Custom AOP/security gate can be bypassed by proxy limits"),
|
|
61
62
|
Rule("GATE-002", "GATE", "Custom gate advice appears to fail open"),
|
|
@@ -258,6 +258,28 @@ def _enclosing_type(source: str, offset: int, fallback: str) -> str:
|
|
|
258
258
|
def _scan_java(source: str, rel: str) -> "list[SecurityConfigObservation]":
|
|
259
259
|
out: "list[SecurityConfigObservation]" = []
|
|
260
260
|
|
|
261
|
+
# SEC-009 — an anonymous request-chain exception is a finding in its own
|
|
262
|
+
# right. Keep the matcher context requirement narrow so unrelated method
|
|
263
|
+
# names containing `permitAll()` do not become security findings.
|
|
264
|
+
permit = re.search(r"\bpermitAll\s*\(\s*\)", source)
|
|
265
|
+
if permit and re.search(
|
|
266
|
+
r"SecurityFilterChain|authorizeHttpRequests|authorizeRequests|"
|
|
267
|
+
r"requestMatchers|anyRequest",
|
|
268
|
+
source,
|
|
269
|
+
):
|
|
270
|
+
out.append(SecurityConfigObservation(
|
|
271
|
+
rule="SEC-009",
|
|
272
|
+
file=rel,
|
|
273
|
+
line=_line_of(source, permit.start()),
|
|
274
|
+
symbol=_enclosing_type(source, permit.start(), Path(rel).stem),
|
|
275
|
+
evidence=permit.group(0),
|
|
276
|
+
detail=(
|
|
277
|
+
"The active source contains a request-chain rule that permits "
|
|
278
|
+
"anonymous access. Verify its matcher and profile condition; this "
|
|
279
|
+
"exception does not prove that the whole chain is public."
|
|
280
|
+
),
|
|
281
|
+
))
|
|
282
|
+
|
|
261
283
|
# SEC-004 — a password stored under a fast unsalted digest.
|
|
262
284
|
if any(tok in source for tok in _ENCODER_CONTEXT):
|
|
263
285
|
for token in _WEAK_DIGESTS:
|
|
@@ -144,7 +144,8 @@ def _check_ask09(subject: Subject) -> "dict[str, Any]":
|
|
|
144
144
|
"probe_command": probe_command,
|
|
145
145
|
"observed_payload_excerpt": observed_excerpt,
|
|
146
146
|
}
|
|
147
|
-
|
|
147
|
+
document = payload if isinstance(payload, dict) else {}
|
|
148
|
+
body = _payload_of(document)
|
|
148
149
|
if code == 0:
|
|
149
150
|
return _result(
|
|
150
151
|
NOT_APPLICABLE,
|
|
@@ -153,7 +154,10 @@ def _check_ask09(subject: Subject) -> "dict[str, Any]":
|
|
|
153
154
|
"needed to exercise it here",
|
|
154
155
|
**evidence,
|
|
155
156
|
)
|
|
156
|
-
|
|
157
|
+
# The output seam may wrap the command payload and keep the envelope error
|
|
158
|
+
# beside it. Read both shapes; dropping the envelope first turns a real
|
|
159
|
+
# OUTPUT_TOO_LARGE refusal into a false ERROR with code=None.
|
|
160
|
+
error = document.get("error") or body.get("error")
|
|
157
161
|
error_body = error if isinstance(error, dict) else body
|
|
158
162
|
if error_body.get("code") != "OUTPUT_TOO_LARGE":
|
|
159
163
|
return _result(
|
|
@@ -163,7 +167,7 @@ def _check_ask09(subject: Subject) -> "dict[str, Any]":
|
|
|
163
167
|
**evidence,
|
|
164
168
|
)
|
|
165
169
|
hint = str(error_body.get("hint") or "")
|
|
166
|
-
basis = body.get("hint_basis") or {}
|
|
170
|
+
basis = document.get("hint_basis") or body.get("hint_basis") or {}
|
|
167
171
|
declared = list(basis.get("declared_flags") or [])
|
|
168
172
|
if "No smaller inline variant is available" in hint and declared:
|
|
169
173
|
return _result(
|
|
@@ -1588,6 +1588,10 @@ class ImpactOrchestrator:
|
|
|
1588
1588
|
"indirect_caller_symbol_count_unit": "indirect caller list entries",
|
|
1589
1589
|
"caller_metric_note": CALLER_METRIC_RECONCILIATION,
|
|
1590
1590
|
"endpoints_total": len(endpoints_affected),
|
|
1591
|
+
"security_surfaces_unit": (
|
|
1592
|
+
"endpoint rows in the impact chain; each row is one affected "
|
|
1593
|
+
"endpoint and carries its security posture verdict"
|
|
1594
|
+
),
|
|
1591
1595
|
"findings_in_chain": len(impact_findings),
|
|
1592
1596
|
"findings_status": findings_status,
|
|
1593
1597
|
"findings_status_note": (
|