sourcecode 5.9.23__tar.gz → 5.9.25__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sourcecode-5.9.23 → sourcecode-5.9.25}/CHANGELOG.md +54 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/PKG-INFO +16 -10
- {sourcecode-5.9.23 → sourcecode-5.9.25}/README.md +15 -9
- sourcecode-5.9.25/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +72 -0
- sourcecode-5.9.25/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +40 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/DEFECT-LEDGER.md +35 -9
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/DEVELOPMENT-ROADMAP.md +20 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/USER_GUIDE.md +1 -1
- {sourcecode-5.9.23 → sourcecode-5.9.25}/pyproject.toml +1 -1
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/answer_bounds.py +23 -10
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/cli.py +57 -4
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/envelope.py +4 -1
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/migrate_check.py +9 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/release_info.py +1 -1
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/rule_pass.py +9 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/security_posture.py +30 -4
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/selftest.py +20 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_security_audit.py +31 -5
- {sourcecode-5.9.23 → sourcecode-5.9.25}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/.github/workflows/windows-battery.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/.github/workflows/windows-regression.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/.gitignore +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/.ruff.toml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/CLAUDE.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/CONTRIBUTING.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/LICENSE +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/NOTICE +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/SECURITY.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/CACHE.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/EXECUTIVE-ROADMAP.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/RELEASE-VERIFICATION.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/overview.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/contracts.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/licensing-schema.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/migrate-check.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/README.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/posture.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/privacy.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/schema.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/hatch_build.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/context_cost_harness.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/perf_gate.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/perf_harness.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/test_fast.sh +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/scripts/windows_reliability_matrix.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/access_drift.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/audit_verify.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/baseline_attestation.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/c4_render.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/click_runtime.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/cve_feed.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/cve_reachability.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/findings_baseline.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/intent_router.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/jvm_inventory.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/license.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/packs.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/pr_risk.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/regulatory_pack.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/remediation_flow.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/remediation_report.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/self_audit.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/vex.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/watch_loop.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/supabase/functions/README.md +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.9.23 → sourcecode-5.9.25}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,59 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.9.25] — 2026-09-01
|
|
4
|
+
|
|
5
|
+
*Reliability remediation from the alternative 5.9.23 audit.*
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Hardened audit-family answer delivery: a successful exit now requires stdout
|
|
10
|
+
or a verified requested output artifact.
|
|
11
|
+
- Propagated deadline cuts through security posture, with omitted stages and
|
|
12
|
+
partial coverage disclosed in the result.
|
|
13
|
+
- Removed nested execution clocks from deterministic content identity.
|
|
14
|
+
- Reconciled compact migration findings with their full detected population.
|
|
15
|
+
- Made failed, unrun, unknown and task-gap self-checks invalidate envelope
|
|
16
|
+
completeness instead of reporting `complete: true`.
|
|
17
|
+
- Published the effective `prepare-context` stdout budget and full-artifact
|
|
18
|
+
path in every task response.
|
|
19
|
+
|
|
20
|
+
### Known Limitations
|
|
21
|
+
|
|
22
|
+
- The security-rules/remediation performance regression (`ALT-03`, `ALT-07`)
|
|
23
|
+
still requires reproduction and bisection on the affected large Windows tree.
|
|
24
|
+
- Native-Windows repetition remains required to close the original silent
|
|
25
|
+
success report conclusively.
|
|
26
|
+
|
|
27
|
+
## [5.9.24] — 2026-09-01
|
|
28
|
+
|
|
29
|
+
*Follow-up correction batch after the external 5.9.23 audit.*
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- Aggregated nested answer-cap contracts so compact output reports rows hidden
|
|
34
|
+
below nested payloads instead of publishing a misleading zero count.
|
|
35
|
+
- Bound `--jobs` to 128 workers, preventing accidental unbounded process-pool
|
|
36
|
+
requests while retaining automatic and explicit parallelism.
|
|
37
|
+
- Removed Rich markup from help output written to a pipe, so scripts and CI logs
|
|
38
|
+
receive plain, parseable text.
|
|
39
|
+
- Accepted an optional repository path on `remediation-report` for consistency
|
|
40
|
+
with repository-oriented command invocation.
|
|
41
|
+
|
|
42
|
+
### Known Limitations
|
|
43
|
+
|
|
44
|
+
- An alternative Windows audit of the 5.9.23 build measured a systemic silent
|
|
45
|
+
success regression across `spring-audit`, `verify`, `risk`, Markdown
|
|
46
|
+
`audit-report`, `migrate-check`, and `migrate-apply`: 55 of 84 observed runs
|
|
47
|
+
exited `0` with zero output, plus eight timeouts. This supersedes the earlier
|
|
48
|
+
characterization as rare. Do not use the audit-command family for unattended
|
|
49
|
+
CI until the global non-empty-answer and output-promise invariants are proven.
|
|
50
|
+
- `ASK_MAX_ANALYSIS_SECONDS` did not produce a partial result on the affected
|
|
51
|
+
paths, and could be ignored by `spring-audit`; it is not a safe recovery path
|
|
52
|
+
for this release.
|
|
53
|
+
- `--agent` can reject large repositories after expensive post-hoc RSS sampling,
|
|
54
|
+
and nested workspaces can make root help unacceptably slow. The prioritized
|
|
55
|
+
remediation queue is maintained in the defect ledger.
|
|
56
|
+
|
|
3
57
|
## [5.9.23] — 2026-09-01
|
|
4
58
|
|
|
5
59
|
*Regression hardening after the 5.9.22 audit and testing-repository battery.*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.9.
|
|
3
|
+
Version: 5.9.25
|
|
4
4
|
Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/HarounDominique/sourcecode
|
|
6
6
|
Project-URL: Repository, https://github.com/HarounDominique/sourcecode
|
|
@@ -59,7 +59,7 @@ Description-Content-Type: text/markdown
|
|
|
59
59
|
> question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
|
|
60
60
|
> before inspecting a repository whose telemetry policy you need to control.
|
|
61
61
|
|
|
62
|
-

|
|
63
63
|

|
|
64
64
|
|
|
65
65
|
Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
|
|
@@ -212,13 +212,19 @@ exit 75 (`--allow-partial` accepts one deliberately). The long-run progress
|
|
|
212
212
|
message names the phase it is in and whether that phase has changed, so a slow run
|
|
213
213
|
is distinguishable from a blocked one.
|
|
214
214
|
|
|
215
|
-
**External audit boundary (2026-09-01).**
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
215
|
+
**External audit boundary (2026-09-01).** An alternative native-Windows audit
|
|
216
|
+
rates the 5.9.23 audit-command family **4.9/10**, versus 6.6 for 5.9.22. It
|
|
217
|
+
measured 55 zero-byte `exit 0` answers and eight timeouts in 84 runs across
|
|
218
|
+
`spring-audit`, `verify`, `risk`, Markdown `audit-report`, `migrate-check`, and
|
|
219
|
+
`migrate-apply`. The release must not be used to gate unattended CI through
|
|
220
|
+
those commands, nor should `ASK_MAX_ANALYSIS_SECONDS` be relied on as a recovery
|
|
221
|
+
path, until native repetition proves the global output and partial-result
|
|
222
|
+
invariants. The unaffected lightweight CI commands are useful evidence, but do
|
|
223
|
+
not close this release-wide reliability failure. Findings are tracked in the
|
|
224
|
+
[alternative audit](docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md), the earlier
|
|
225
|
+
[external audit](docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md), and the
|
|
226
|
+
[defect ledger](docs/DEFECT-LEDGER.md); engineering-host measurements cannot
|
|
227
|
+
close native-Windows observations.
|
|
222
228
|
|
|
223
229
|
The current external audit still records two open availability limits, and they
|
|
224
230
|
are held open deliberately: `audit-report --format markdown` under contention, and
|
|
@@ -284,7 +290,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
284
290
|
# pip / pipx
|
|
285
291
|
pipx install sourcecode # or: pip install sourcecode
|
|
286
292
|
|
|
287
|
-
ask version # ask 5.9.
|
|
293
|
+
ask version # ask 5.9.25 — and, on a build that has aged,
|
|
288
294
|
# how many releases have probably shipped since
|
|
289
295
|
```
|
|
290
296
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
> question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
|
|
11
11
|
> before inspecting a repository whose telemetry policy you need to control.
|
|
12
12
|
|
|
13
|
-

|
|
14
14
|

|
|
15
15
|
|
|
16
16
|
Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
|
|
@@ -163,13 +163,19 @@ exit 75 (`--allow-partial` accepts one deliberately). The long-run progress
|
|
|
163
163
|
message names the phase it is in and whether that phase has changed, so a slow run
|
|
164
164
|
is distinguishable from a blocked one.
|
|
165
165
|
|
|
166
|
-
**External audit boundary (2026-09-01).**
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
166
|
+
**External audit boundary (2026-09-01).** An alternative native-Windows audit
|
|
167
|
+
rates the 5.9.23 audit-command family **4.9/10**, versus 6.6 for 5.9.22. It
|
|
168
|
+
measured 55 zero-byte `exit 0` answers and eight timeouts in 84 runs across
|
|
169
|
+
`spring-audit`, `verify`, `risk`, Markdown `audit-report`, `migrate-check`, and
|
|
170
|
+
`migrate-apply`. The release must not be used to gate unattended CI through
|
|
171
|
+
those commands, nor should `ASK_MAX_ANALYSIS_SECONDS` be relied on as a recovery
|
|
172
|
+
path, until native repetition proves the global output and partial-result
|
|
173
|
+
invariants. The unaffected lightweight CI commands are useful evidence, but do
|
|
174
|
+
not close this release-wide reliability failure. Findings are tracked in the
|
|
175
|
+
[alternative audit](docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md), the earlier
|
|
176
|
+
[external audit](docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md), and the
|
|
177
|
+
[defect ledger](docs/DEFECT-LEDGER.md); engineering-host measurements cannot
|
|
178
|
+
close native-Windows observations.
|
|
173
179
|
|
|
174
180
|
The current external audit still records two open availability limits, and they
|
|
175
181
|
are held open deliberately: `audit-report --format markdown` under contention, and
|
|
@@ -235,7 +241,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
235
241
|
# pip / pipx
|
|
236
242
|
pipx install sourcecode # or: pip install sourcecode
|
|
237
243
|
|
|
238
|
-
ask version # ask 5.9.
|
|
244
|
+
ask version # ask 5.9.25 — and, on a build that has aged,
|
|
239
245
|
# how many releases have probably shipped since
|
|
240
246
|
```
|
|
241
247
|
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Alternative External Audit - 5.9.23
|
|
2
|
+
|
|
3
|
+
## Scope And Verdict
|
|
4
|
+
|
|
5
|
+
This native-Windows audit evaluated the 5.9.23 build on a dirty 3,342-Java-file
|
|
6
|
+
repository under Python 3.10. It rates the release **4.9/10**, down from 6.6 for
|
|
7
|
+
5.9.22. Analysis precision remains strong and several context paths are faster,
|
|
8
|
+
but the audit-command family is not reliable enough for unattended CI.
|
|
9
|
+
|
|
10
|
+
This is an external measurement. It is evidence of a release-blocking failure,
|
|
11
|
+
not proof of a single root cause. Engineering-host results do not close it.
|
|
12
|
+
|
|
13
|
+
## Execution Matrix
|
|
14
|
+
|
|
15
|
+
| Invocation | Runs | Answers | Empty `exit 0` | Timeouts |
|
|
16
|
+
|---|---:|---:|---:|---:|
|
|
17
|
+
| `spring-audit . --compact` | 17 | 0 | 14 | 3 |
|
|
18
|
+
| `verify .` | 17 | 0 | 16 | 1 |
|
|
19
|
+
| `risk . --limit 20` | 13 | 0 | 11 | 2 |
|
|
20
|
+
| `audit-report . --format markdown` | 7 | 0 | 5 | 2 |
|
|
21
|
+
| `migrate-check . --compact` | 12 | 7 | 5 | 0 |
|
|
22
|
+
| `migrate-apply .` | 17 | 14 | 3 | 0 |
|
|
23
|
+
| `verify . --init --dry-run` | 1 | 0 | 1 | 0 |
|
|
24
|
+
| **Total** | **84** | **21** | **55** | **8** |
|
|
25
|
+
|
|
26
|
+
The observed failures were serialized, foreground runs. Clearing cache, varying
|
|
27
|
+
`ASK_JOBS` and `--jobs`, changing output format, using `--no-cache`, and using
|
|
28
|
+
`--output` did not make the main audit failure reliable. `endpoints --output`
|
|
29
|
+
did create its artifact, showing that the output invariant exists on a separate
|
|
30
|
+
path but does not cover the affected family.
|
|
31
|
+
|
|
32
|
+
## Release Blockers
|
|
33
|
+
|
|
34
|
+
1. `ALT-01`: No command may return `exit 0` with zero stdout unless a requested
|
|
35
|
+
output artifact was created and verified. A failed worker or absent phase
|
|
36
|
+
result is not an empty finding set and must return structured non-zero failure.
|
|
37
|
+
2. `ALT-02`: Applicable `ASK_MAX_ANALYSIS_SECONDS` deadlines must publish a
|
|
38
|
+
partial answer with `complete:false`; `risk` and `audit-report` returned empty
|
|
39
|
+
success, while `spring-audit` exceeded the external 200-second kill.
|
|
40
|
+
3. `ALT-03`: The security-rules phase is the primary investigation target.
|
|
41
|
+
Security retrieve queries timed out, `remediate` stalled in auditing, and the
|
|
42
|
+
known small subtree completed while the 3,342-file root did not. This is a
|
|
43
|
+
bisection hypothesis, not a confirmed causal claim.
|
|
44
|
+
|
|
45
|
+
Closure requires at least 30 native repetitions for every affected command, with
|
|
46
|
+
byte counts, exit code, timeout status, and requested output-file existence.
|
|
47
|
+
|
|
48
|
+
## Additional Regressions
|
|
49
|
+
|
|
50
|
+
- `impact-chain` content IDs changed every execution because clock fields under
|
|
51
|
+
`metadata` were hashed. All execution clocks must be excluded independent of
|
|
52
|
+
their nesting location.
|
|
53
|
+
- `migrate-check` exposed incompatible findings totals: `summary.total_findings`
|
|
54
|
+
was 1,526 while `findings_cap.total` was 593, without an exclusion contract.
|
|
55
|
+
- `selftest` emitted `complete:true` and no gaps despite one fail and one error.
|
|
56
|
+
- `remediate` stalled beyond 400 seconds in `auditing for repairable findings`.
|
|
57
|
+
- `prepare-context review-pr` emitted roughly 30K tokens without a compact mode
|
|
58
|
+
or omission contract.
|
|
59
|
+
- Existing argument hints and retrieve-anchor discoverability remain ergonomic
|
|
60
|
+
follow-ups, not release blockers.
|
|
61
|
+
|
|
62
|
+
## Preserved Evidence
|
|
63
|
+
|
|
64
|
+
- Endpoint analysis remained exact: 3,763 endpoints with matching paths and
|
|
65
|
+
double-base-path expansion.
|
|
66
|
+
- `migrate-check --compact` improved from 86.8 KB to 36.7 KB and publishes cap
|
|
67
|
+
contracts; the nested-cap aggregation correction in 5.9.24 remains valid.
|
|
68
|
+
- Several deterministic payloads were byte-identical between releases, and the
|
|
69
|
+
lightweight CI paths `pr-risk`, `verify-edit`, and `pr-impact` were reliable.
|
|
70
|
+
|
|
71
|
+
These controls must remain in the regression battery while the P0 recovery work
|
|
72
|
+
proceeds; they do not compensate for silent audit-family failures.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# External Audit - 5.9.23
|
|
2
|
+
|
|
3
|
+
## Release Status
|
|
4
|
+
|
|
5
|
+
The 5.9.23 re-audit rates ASK Engine at **6.9/10**, down from 7.5. Precision
|
|
6
|
+
remains strong and SEC-010 closes the previously reported concatenated-SQLi
|
|
7
|
+
coverage gap. The release is **not recommended for unattended CI gating** until
|
|
8
|
+
the empty-success invariant is implemented.
|
|
9
|
+
|
|
10
|
+
## Priority Regressions
|
|
11
|
+
|
|
12
|
+
1. `NEW-01` P0: `risk` and Markdown `audit-report` were observed exiting 0 with
|
|
13
|
+
zero stdout and stderr. The audit measured 3 occurrences in 47 runs with
|
|
14
|
+
byte counting. Its later controls did not reproduce warm-cache or contention
|
|
15
|
+
causality, so those are not asserted as the root cause.
|
|
16
|
+
2. `REG-02` Critical: the default 1,536 MB agent ceiling rejects valid large
|
|
17
|
+
repositories only after expensive work; the effective default ceiling is not
|
|
18
|
+
visible in successful-agent metadata.
|
|
19
|
+
3. `BUG-01` P0: malformed Java can disappear without file-specific disclosure.
|
|
20
|
+
4. `REG-03` High: warm Spring audit runs were 2.1-3.8x slower despite full CIR
|
|
21
|
+
reuse.
|
|
22
|
+
5. `NEW-02` High: overloaded endpoint handlers can publish the wrong declaration
|
|
23
|
+
line while claiming a handler-declaration anchor.
|
|
24
|
+
|
|
25
|
+
## Verified Improvements
|
|
26
|
+
|
|
27
|
+
- SEC-010 emits a dedicated high-severity finding for HTTP input reaching a
|
|
28
|
+
concatenated SQL query sink, with no observed false positives on three clean
|
|
29
|
+
repositories.
|
|
30
|
+
- Compact migration inventory is materially bounded and publishes per-framework
|
|
31
|
+
omission contracts.
|
|
32
|
+
- Help recommendations use repository profile evidence and route aliases were
|
|
33
|
+
restored across the sampled command surface.
|
|
34
|
+
|
|
35
|
+
## Verification Boundary
|
|
36
|
+
|
|
37
|
+
The audit was performed on Windows 11 / Python 3.10 across 21 repositories and
|
|
38
|
+
about 180 invocations. Reported timings are platform-specific evidence, not
|
|
39
|
+
portable performance guarantees. Its zero-output finding is operationally
|
|
40
|
+
critical even though its precise trigger remains unproven.
|
|
@@ -14,22 +14,48 @@ Status values: `open` · `in-progress` · `closed <version>` · `by-design` (wit
|
|
|
14
14
|
The facts these rows are keyed to are published: `ask schema facts-v1` prints the registry
|
|
15
15
|
(authority, definition, consumers, parity test) that the release battery enforces.
|
|
16
16
|
|
|
17
|
-
## Current Synchronization — External Audit `5.9.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
## Current Synchronization — Alternative External Audit `5.9.23`, carried into `5.9.25` (2026-09-01)
|
|
18
|
+
|
|
19
|
+
**Release gate: do not use 5.9.25 to gate unattended CI through the audit-command
|
|
20
|
+
family.** A native-Windows alternative audit of the 5.9.23 build measured 55
|
|
21
|
+
`rc=0`, zero-byte answers and eight timeouts in 84 runs. The failures include
|
|
22
|
+
`spring-audit`, `verify`, `risk`, Markdown `audit-report`, `migrate-check`, and
|
|
23
|
+
`migrate-apply`; the prior 3/47 observation was materially incomplete. The
|
|
24
|
+
cause remains unproven. A security-rules phase is a supported hypothesis, not a
|
|
25
|
+
closure claim. `exit 0` is valid only for a non-empty stdout answer or a verified
|
|
26
|
+
`--output` artifact; a missing phase result must be structured failure, never an
|
|
27
|
+
empty finding set.
|
|
28
|
+
|
|
29
|
+
Priority order is: `ALT-01` silent success and unkept output promises;
|
|
30
|
+
`ALT-02` budget/partial-result failure; `ALT-03` security-rules phase bisection;
|
|
31
|
+
`ALT-04` content-id instability; `ALT-05` contradictory migration totals;
|
|
32
|
+
`ALT-06` false-complete selftest; then remediation, context bounds and CLI
|
|
33
|
+
ergonomics. Full evidence: [`AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md`](AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md)
|
|
34
|
+
and [`AUDIT-2026-09-01-EXTERNAL-5.9.23.md`](AUDIT-2026-09-01-EXTERNAL-5.9.23.md).
|
|
23
35
|
|
|
24
36
|
| ID | Severity | Status | Evidence and required closure |
|
|
25
37
|
|---|---:|---|---|
|
|
26
|
-
| `
|
|
38
|
+
| `ALT-01` | Critical maximum | **fixed, pending native-Windows repetition** | `a7ad44b` hardens the required-answer and output-artifact guards: `exit 0` now requires delivered stdout or a verified requested artifact. Native 30-run repetition remains the release closure evidence. |
|
|
39
|
+
| `ALT-02` | Critical maximum | **fixed, bounded-phase follow-up** | `aab1e8b` propagates deadline checks into security posture and publishes omitted stages and partial coverage. A small-repository budget can still finish its coarse earlier phases before the deadline is observed; `ALT-03` owns reducing that phase granularity. |
|
|
40
|
+
| `ALT-03` | High | **open, investigation** | The security-rules phase is the common evidence-backed suspect: all affected audit flows consume security findings, security `retrieve` queries timed out, and `remediate` stalled in the same phase. Bisect the known working small subtree against the 3,342-file root; do not assert causality before reproducing it. |
|
|
41
|
+
| `ALT-04` | High | **fixed** | `36e3893` excludes every nested `*_time_ms` execution clock from `content_id`; parametric tests retain semantic-field sensitivity. |
|
|
42
|
+
| `ALT-05` | High | **fixed** | `b12c8f1` publishes `population_total` and `excluded_before_cap` beside the compact findings cap, reconciling it with the summary population. |
|
|
43
|
+
| `ALT-06` | High | **fixed** | `6d0889e` publishes structured limitations for failed, unrun and unknown ledger rows; `5620864` also makes generic task `gaps` invalidate envelope completeness. |
|
|
44
|
+
| `ALT-07` | Medium | **open** | `remediate` regressed from a 23.6-second answer to hangs beyond 400 seconds in `auditing for repairable findings`; it shares the `ALT-03` investigation until separated by evidence. |
|
|
45
|
+
| `ALT-08` | Medium | **fixed** | `15d77d2` publishes the effective per-task stdout budget and the full-artifact path; bounded output remains skipped only for explicit `--output` artifacts. |
|
|
46
|
+
| `NEW-01` | Critical maximum | **superseded by ALT-01** | The earlier 3/47 `risk` and Markdown `audit-report` observation undercounted the native-Windows audit-family failure. |
|
|
47
|
+
| `REG-02` | Critical | **open, regression** | The 1,536 MB default `--agent` ceiling rejects valid large repositories only after spending minutes; it is not published in successful default-agent metadata. Bound projection during construction, sample RSS periodically, and publish the effective ceiling. |
|
|
48
|
+
| `REG-03` | High | **open, regression** | Warm `spring-audit` was measured 2.1–3.8x slower despite a fully reused CIR. Attribute the warm pass before claiming cache benefit. |
|
|
49
|
+
| `REG-01` | High | **open, regression** | Root `ask --help` took 83–86 seconds in a workspace with nested repositories. Help must not perform unbounded repository/profile analysis. |
|
|
50
|
+
| `REG-04` | Medium | **closed 5.9.24** | `_meta.answer_bounds.capped` now aggregates nested cap contracts, so compact answers disclose rows omitted below nested payloads. Regression coverage includes nested dictionaries and lists. |
|
|
51
|
+
| `NEW-02` | High | **open** | Overloaded endpoint handlers can all inherit the final overload's `declaration_line`. Resolve by mapping annotation/signature or publish ambiguity. |
|
|
52
|
+
| `BUG-01` | Critical maximum | **open, P0** | A malformed Java file can disappear without a file-specific declaration. Publish parse failure/recovery in the answer bounds and preserve any affected endpoint gap. |
|
|
27
53
|
| `BUG-02` | Critical maximum | **open, P0** | Large `risk` ended `rc=127` with no output or structured failure. Add fail-fast resource/process handling and durable partial checkpoints. |
|
|
28
54
|
| `BUG-12` | Critical maximum | **open, P0** | Deep `--agent` output construction reaches multi-gigabyte RSS before a small answer. Bound projection while building. |
|
|
29
|
-
| `BUG-03` | High | **open, P1** |
|
|
55
|
+
| `BUG-03` | High | **open, P1** | Marginal Spring detection can overstate what a zero-finding result covers. Publish Spring footprint/coverage with the stack-fit claim. |
|
|
30
56
|
| `BUG-04` | High | **open, P1** | `selftest` publishes `complete=true` with five error rows. Derive bounds from actual results. |
|
|
31
57
|
| `BUG-05` | High | **open, P1** | Overloaded endpoint handlers can receive the wrong declaration line. Resolve by mapping annotation or publish ambiguity. |
|
|
32
|
-
| `BUG-07` |
|
|
58
|
+
| `BUG-07` | Closed 5.9.23, verification gap | Compact JVM inventory is bounded, but the audit notes no selftest row protects the correction. Add release-battery coverage before treating it as durable closure. |
|
|
33
59
|
| `BUG-10` | High | **open, P1** | Unsupported routing styles can produce empty coverage gaps. Publish detected-but-unmodeled routing gaps. |
|
|
34
60
|
| `BUG-11` | High | **open, P1** | Default `pack assessment` can fail on a small Spring repository. Use a bounded default or explicit full mode. |
|
|
35
61
|
| `BUG-13` | High | **open, P1** | Unscoped `selftest` starts over nested repositories after warning. Refuse and require an explicit path. |
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# ASK — Development Roadmap
|
|
2
2
|
|
|
3
|
+
### Alternative Audit Intake — release 5.9.23 reliability regression
|
|
4
|
+
|
|
5
|
+
An alternative native-Windows audit found the audit-command family unreliable:
|
|
6
|
+
55 zero-byte `exit 0` answers and eight timeouts in 84 executions. `spring-audit`
|
|
7
|
+
and `verify` answered 0/34; `risk`, Markdown `audit-report`, `migrate-check`, and
|
|
8
|
+
`migrate-apply` also failed silently. This overrides the earlier characterization
|
|
9
|
+
as a rare output anomaly. No feature work should be treated as release-ready
|
|
10
|
+
until the following recovery sequence has native evidence.
|
|
11
|
+
|
|
12
|
+
| Priority | Required work and closure boundary |
|
|
13
|
+
|---|---|
|
|
14
|
+
| P0 | Enforce `exit 0 => non-empty stdout OR verified --output artifact` across the command registry. A missing auditing-phase result or worker failure must emit structured non-zero failure. Run at least 30 native repetitions per affected command. |
|
|
15
|
+
| P0 | Restore the budget contract: applicable `ASK_MAX_ANALYSIS_SECONDS` deadlines publish `partial:true` and `complete:false`; non-applicable commands disclose that fact. Verify `risk`, `audit-report`, and `spring-audit` natively. |
|
|
16
|
+
| P1 | Bisect the security-rules phase using the working small subtree and the 3,342-file failing root. It is a hypothesis supported by affected command overlap, not an established root cause. |
|
|
17
|
+
| P1 | Restore `content_id` stability by excluding `metadata.*_time_ms` execution clocks, and make selftest completion/gaps derive from failures and errors. |
|
|
18
|
+
| P1 | Reconcile `migrate-check` findings populations and bound `prepare-context review-pr`; then address remediation hangs and remaining CLI ergonomics. |
|
|
19
|
+
|
|
20
|
+
The full measurement matrix and non-regression controls are in
|
|
21
|
+
[`AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md`](AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md).
|
|
22
|
+
|
|
3
23
|
### Release 5.9.20 — JVM evidence inventory
|
|
4
24
|
|
|
5
25
|
The accepted JVM R&D scope is implemented in `migrate-check`: local framework,
|
|
@@ -88,6 +88,12 @@ def _summarise(value: Any) -> Any:
|
|
|
88
88
|
|
|
89
89
|
def _gaps(payload: "dict[str, Any]") -> "list[dict[str, Any]]":
|
|
90
90
|
found: "list[dict[str, Any]]" = []
|
|
91
|
+
# `prepare-context` and related task answers publish their unanswered
|
|
92
|
+
# analysis as a top-level list, rather than under the route-specific
|
|
93
|
+
# `coverage` block. It is still a declared gap in the answer.
|
|
94
|
+
for gap in _as_list(payload.get("gaps")):
|
|
95
|
+
if gap:
|
|
96
|
+
found.append({"field": "gaps", "what": _summarise(gap)})
|
|
91
97
|
coverage = payload.get("coverage")
|
|
92
98
|
if isinstance(coverage, dict):
|
|
93
99
|
for gap in _as_list(coverage.get("gaps")):
|
|
@@ -170,17 +176,24 @@ def _exclusions(payload: "dict[str, Any]") -> "list[dict[str, Any]]":
|
|
|
170
176
|
|
|
171
177
|
def _caps(payload: "dict[str, Any]") -> "list[dict[str, Any]]":
|
|
172
178
|
found: "list[dict[str, Any]]" = []
|
|
179
|
+
def walk(value: Any, prefix: str) -> None:
|
|
180
|
+
if isinstance(value, dict):
|
|
181
|
+
for key, child in value.items():
|
|
182
|
+
path = f"{prefix}{key}"
|
|
183
|
+
if key.endswith(_CAP_SUFFIX) and isinstance(child, dict):
|
|
184
|
+
omitted = child.get("omitted")
|
|
185
|
+
if omitted not in (None, 0):
|
|
186
|
+
found.append({"field": path, **{
|
|
187
|
+
axis: child[axis] for axis in ("total", "shown", "omitted")
|
|
188
|
+
if axis in child
|
|
189
|
+
}})
|
|
190
|
+
walk(child, f"{path}.")
|
|
191
|
+
elif isinstance(value, list):
|
|
192
|
+
for index, child in enumerate(value):
|
|
193
|
+
walk(child, f"{prefix}{index}.")
|
|
194
|
+
|
|
173
195
|
for prefix, block in _blocks(payload):
|
|
174
|
-
|
|
175
|
-
if not key.endswith(_CAP_SUFFIX) or not isinstance(value, dict):
|
|
176
|
-
continue
|
|
177
|
-
omitted = value.get("omitted")
|
|
178
|
-
if omitted in (None, 0):
|
|
179
|
-
continue
|
|
180
|
-
found.append({"field": f"{prefix}{key}", **{
|
|
181
|
-
axis: value[axis] for axis in ("total", "shown", "omitted")
|
|
182
|
-
if axis in value
|
|
183
|
-
}})
|
|
196
|
+
walk(block, prefix)
|
|
184
197
|
return found
|
|
185
198
|
|
|
186
199
|
|
|
@@ -993,6 +993,9 @@ scope matches; `ask cache model` says exactly what a warm buys per command.
|
|
|
993
993
|
[dim cyan]→ ask activate <key>[/dim cyan]
|
|
994
994
|
"""
|
|
995
995
|
|
|
996
|
+
if not getattr(sys.stdout, "isatty", lambda: False)():
|
|
997
|
+
# Rich markup is useful interactively but corrupts piped help output.
|
|
998
|
+
return re.sub(r"\[/?(?:bold(?: green)?|dim(?: bold)?|yellow|cyan)\]", "", text)
|
|
996
999
|
return text
|
|
997
1000
|
|
|
998
1001
|
|
|
@@ -2997,6 +3000,19 @@ _OUTPUT_PROMISED: "Optional[str]" = None
|
|
|
2997
3000
|
_OUTPUT_DELIVERED: bool = False
|
|
2998
3001
|
_ANSWER_REQUIRED_BY: "Optional[str]" = None
|
|
2999
3002
|
|
|
3003
|
+
# ALT-01. These commands publish repository-analysis answers. A successful
|
|
3004
|
+
# process with neither stdout nor a verified output artifact is never valid.
|
|
3005
|
+
# Kept as one authority so the entry point can arm the guard before Click enters
|
|
3006
|
+
# a callback; a callback that returns early is the failure this protects.
|
|
3007
|
+
REQUIRED_ANSWER_COMMANDS: "frozenset[str]" = frozenset({
|
|
3008
|
+
"audit-report",
|
|
3009
|
+
"migrate-apply",
|
|
3010
|
+
"migrate-check",
|
|
3011
|
+
"risk",
|
|
3012
|
+
"spring-audit",
|
|
3013
|
+
"verify",
|
|
3014
|
+
})
|
|
3015
|
+
|
|
3000
3016
|
|
|
3001
3017
|
def _record_output_promise(argv: "list[str]") -> None:
|
|
3002
3018
|
"""Note that this invocation asked for a file, before anything is parsed.
|
|
@@ -3044,6 +3060,16 @@ def _require_answer_delivery(command: str) -> None:
|
|
|
3044
3060
|
_ANSWER_REQUIRED_BY = command
|
|
3045
3061
|
|
|
3046
3062
|
|
|
3063
|
+
def _require_answer_from_argv(argv: "list[str]") -> None:
|
|
3064
|
+
"""Arm the process guard before an affected command callback can return."""
|
|
3065
|
+
if any(token in ("--help", "-h", "--version") for token in argv):
|
|
3066
|
+
return
|
|
3067
|
+
for token in argv:
|
|
3068
|
+
if token in REQUIRED_ANSWER_COMMANDS:
|
|
3069
|
+
_require_answer_delivery(token)
|
|
3070
|
+
return
|
|
3071
|
+
|
|
3072
|
+
|
|
3047
3073
|
def _analysis_failed(command: str, phase: str, exc: Exception) -> NoReturn:
|
|
3048
3074
|
"""Fail a costly command with evidence instead of an empty successful exit.
|
|
3049
3075
|
|
|
@@ -3131,7 +3157,7 @@ def _unkept_output_promise() -> "Optional[str]":
|
|
|
3131
3157
|
the run wrote it by some route this module does not know about, and a
|
|
3132
3158
|
discard sink was never a promise of a file.
|
|
3133
3159
|
"""
|
|
3134
|
-
if
|
|
3160
|
+
if not _OUTPUT_PROMISED:
|
|
3135
3161
|
return None
|
|
3136
3162
|
try:
|
|
3137
3163
|
from sourcecode.output_sink import is_null_device
|
|
@@ -3140,7 +3166,9 @@ def _unkept_output_promise() -> "Optional[str]":
|
|
|
3140
3166
|
if is_null_device(path) or (path.is_file() and path.stat().st_size > 0):
|
|
3141
3167
|
return None
|
|
3142
3168
|
except Exception:
|
|
3143
|
-
|
|
3169
|
+
# A destination that cannot be inspected cannot prove delivery. This is
|
|
3170
|
+
# a release gate, so uncertainty fails closed with the promised path.
|
|
3171
|
+
return _OUTPUT_PROMISED
|
|
3144
3172
|
return _OUTPUT_PROMISED
|
|
3145
3173
|
|
|
3146
3174
|
|
|
@@ -4136,7 +4164,14 @@ def _jobs_option() -> Any:
|
|
|
4136
4164
|
capability that makes the rule pass parallel is F-AT, and no help text is a
|
|
4137
4165
|
substitute for it.
|
|
4138
4166
|
"""
|
|
4139
|
-
return typer.Option(
|
|
4167
|
+
return typer.Option(
|
|
4168
|
+
None,
|
|
4169
|
+
"--jobs",
|
|
4170
|
+
"-j",
|
|
4171
|
+
min=1,
|
|
4172
|
+
max=128,
|
|
4173
|
+
help=JOBS_OPTION_HELP + " Maximum accepted value: 128.",
|
|
4174
|
+
)
|
|
4140
4175
|
|
|
4141
4176
|
|
|
4142
4177
|
def _invoke_command(ctx: typer.Context, command: Any, **named: Any) -> Any:
|
|
@@ -8367,6 +8402,11 @@ def prepare_context_cmd(
|
|
|
8367
8402
|
|
|
8368
8403
|
# P0-1: Apply output budget per task — safety net for large repos.
|
|
8369
8404
|
_pc_budget = _prepare_context_budget(task)
|
|
8405
|
+
out["output_budget"] = {
|
|
8406
|
+
"stdout_max_bytes": _pc_budget,
|
|
8407
|
+
"applies_to": "stdout only",
|
|
8408
|
+
"full_output": "Use --output <file> to retain the complete artifact.",
|
|
8409
|
+
}
|
|
8370
8410
|
|
|
8371
8411
|
# Size-gated preview: on enterprise-scale monoliths free users get a capped
|
|
8372
8412
|
# preview (top-5 / lightweight) + upgrade note. Small/mid repos get the full
|
|
@@ -12708,6 +12748,7 @@ def spring_audit_cmd(
|
|
|
12708
12748
|
_phases_cut: list[str] = []
|
|
12709
12749
|
# C3-79: families the budget stopped *inside*, with how far each got.
|
|
12710
12750
|
_rules_partial: list[dict] = []
|
|
12751
|
+
_projection_stages_cut: list[str] = []
|
|
12711
12752
|
if scope in ("all", "tx"):
|
|
12712
12753
|
if _run.exhausted():
|
|
12713
12754
|
_stopped_early = _WHY_BUDGET
|
|
@@ -12752,7 +12793,11 @@ def spring_audit_cmd(
|
|
|
12752
12793
|
getattr(_sec_watch, "partially_run", []) or []
|
|
12753
12794
|
)
|
|
12754
12795
|
_rules_partial.extend(_partial_families)
|
|
12755
|
-
|
|
12796
|
+
_stage_cut = list(
|
|
12797
|
+
getattr(_sec_watch, "stages_not_run", []) or []
|
|
12798
|
+
)
|
|
12799
|
+
_projection_stages_cut.extend(_stage_cut)
|
|
12800
|
+
if _cut or _partial_families or _stage_cut:
|
|
12756
12801
|
_stopped_early = _WHY_BUDGET
|
|
12757
12802
|
_phases_cut.append("security_audit")
|
|
12758
12803
|
else:
|
|
@@ -12942,6 +12987,7 @@ def spring_audit_cmd(
|
|
|
12942
12987
|
rules_partially_run=_rules_partial,
|
|
12943
12988
|
rules_not_run=_rules_cut,
|
|
12944
12989
|
phases_stopped_inside=_phases_cut,
|
|
12990
|
+
composition_walks_not_run=_projection_stages_cut,
|
|
12945
12991
|
)
|
|
12946
12992
|
# AUD-595-A03: the declaration said what did not run and never
|
|
12947
12993
|
# what the process would do about it. Same rule as the exits
|
|
@@ -14719,6 +14765,7 @@ def migrate_apply_cmd(
|
|
|
14719
14765
|
and worktree. The resulting worktree is retained for review; ASK never commits
|
|
14720
14766
|
or merges the generated changes.
|
|
14721
14767
|
"""
|
|
14768
|
+
_require_answer_delivery("migrate-apply")
|
|
14722
14769
|
from sourcecode.migrate_check import run_migrate_check
|
|
14723
14770
|
from sourcecode.openrewrite_recipe import build_plan
|
|
14724
14771
|
from sourcecode.repository_ir import find_java_files
|
|
@@ -17325,6 +17372,10 @@ def _audit_population_for(root: "Path", *, progress: "Any" = None):
|
|
|
17325
17372
|
|
|
17326
17373
|
@app.command("remediation-report")
|
|
17327
17374
|
def remediation_report_cmd(
|
|
17375
|
+
path: Optional[Path] = typer.Argument(
|
|
17376
|
+
None,
|
|
17377
|
+
help="Optional repository path accepted for CLI consistency; the bundled ledger is used.",
|
|
17378
|
+
),
|
|
17328
17379
|
output_path: Optional[Path] = typer.Option(
|
|
17329
17380
|
None, "--output", "-o", help="Write output to a file instead of stdout.",
|
|
17330
17381
|
),
|
|
@@ -17332,6 +17383,7 @@ def remediation_report_cmd(
|
|
|
17332
17383
|
copy: bool = _copy_option(),
|
|
17333
17384
|
) -> None:
|
|
17334
17385
|
"""Publish a redacted remediation record for this ASK build."""
|
|
17386
|
+
del path
|
|
17335
17387
|
_enforce_format("remediation-report", format)
|
|
17336
17388
|
from sourcecode import bundled_docs
|
|
17337
17389
|
|
|
@@ -21557,6 +21609,7 @@ def main_entry() -> None:
|
|
|
21557
21609
|
# parser is about to read, so the guard at the end covers every command —
|
|
21558
21610
|
# including one that returns before it reaches its emit seam.
|
|
21559
21611
|
_record_output_promise(sys.argv[1:])
|
|
21612
|
+
_require_answer_from_argv(sys.argv[1:])
|
|
21560
21613
|
# ASK-09: give the output ceiling a way to resolve the running command that
|
|
21561
21614
|
# does not go through Click's thread-local context. Registered as a provider,
|
|
21562
21615
|
# so the Typer→Click conversion is only paid by a run that is actually over
|
|
@@ -295,7 +295,10 @@ def _stable_projection(value: "Any", volatile: "frozenset[str]") -> "Any":
|
|
|
295
295
|
return {
|
|
296
296
|
key: _stable_projection(value[key], volatile)
|
|
297
297
|
for key in sorted(value)
|
|
298
|
-
|
|
298
|
+
# Execution producers consistently publish elapsed clocks as
|
|
299
|
+
# `*_time_ms`, including command-specific names that cannot be
|
|
300
|
+
# exhaustively catalogued. Match the convention at every depth.
|
|
301
|
+
if key not in volatile and not key.endswith("_time_ms")
|
|
299
302
|
}
|
|
300
303
|
if isinstance(value, (list, tuple)):
|
|
301
304
|
return [_stable_projection(item, volatile) for item in value]
|
|
@@ -2618,6 +2618,15 @@ class MigrationReport:
|
|
|
2618
2618
|
compact, "findings", top_n,
|
|
2619
2619
|
key=lambda f: SEVERITY_ORDER.get(f.get("severity"), 3),
|
|
2620
2620
|
)
|
|
2621
|
+
findings_cap = compact.get("findings_cap")
|
|
2622
|
+
if isinstance(findings_cap, dict):
|
|
2623
|
+
# `summary.total_findings` covers all detected findings, whereas the
|
|
2624
|
+
# display population may exclude advisory hygiene by default.
|
|
2625
|
+
# Publish both counts at the cap boundary so consumers need not
|
|
2626
|
+
# infer the relationship from a separate floor block.
|
|
2627
|
+
population_total = int(full.get("summary", {}).get("total_findings", 0))
|
|
2628
|
+
findings_cap["population_total"] = population_total
|
|
2629
|
+
findings_cap["excluded_before_cap"] = population_total - findings_cap["total"]
|
|
2621
2630
|
# Keep invariant rule prose once; each finding carries only location and
|
|
2622
2631
|
# rule identity. Full prose remains available in the non-compact report.
|
|
2623
2632
|
_rule_catalog: dict[str, dict] = {}
|
|
@@ -27,7 +27,7 @@ from typing import Any, Optional
|
|
|
27
27
|
#: The date `__version__` was released, from that version's CHANGELOG entry.
|
|
28
28
|
#: `tests/test_release_info.py` fails the build if the two disagree, so this is
|
|
29
29
|
#: a copy of a fact rather than a second authority for it.
|
|
30
|
-
RELEASE_DATE = "2026-
|
|
30
|
+
RELEASE_DATE = "2026-09-01"
|
|
31
31
|
|
|
32
32
|
#: Releases per day, measured over the latest 30 CHANGELOG releases (the same
|
|
33
33
|
#: computation the test re-runs). The nine-day interval before 5.9.0 lowers
|