sourcecode 5.9.28__tar.gz → 5.9.29__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.28 → sourcecode-5.9.29}/CHANGELOG.md +77 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/PKG-INFO +3 -3
- {sourcecode-5.9.28 → sourcecode-5.9.29}/README.md +2 -2
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +2 -2
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md +3 -3
- sourcecode-5.9.29/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md +174 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/DEFECT-LEDGER.md +104 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/DEVELOPMENT-ROADMAP.md +72 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/EXECUTIVE-ROADMAP.md +63 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/USER_GUIDE.md +1 -1
- {sourcecode-5.9.28 → sourcecode-5.9.29}/pyproject.toml +1 -1
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/audit_recipe.py +6 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/cli.py +78 -3
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/concurrency.py +37 -6
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/dependency_analyzer.py +25 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/empty_answer_diagnostics.py +11 -0
- sourcecode-5.9.29/src/sourcecode/inflight.py +287 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/manifest_cache.py +11 -9
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/progress.py +34 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/risk.py +99 -19
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/rule_pass.py +18 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_findings.py +8 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_security_audit.py +15 -2
- {sourcecode-5.9.28 → sourcecode-5.9.29}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/.github/workflows/windows-battery.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/.github/workflows/windows-regression.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/.gitignore +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/.ruff.toml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/CLAUDE.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/CONTRIBUTING.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/LICENSE +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/NOTICE +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/SECURITY.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.26.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/CACHE.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/RELEASE-VERIFICATION.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/overview.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/contracts.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/licensing-schema.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/migrate-check.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/README.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/posture.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/privacy.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/schema.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/hatch_build.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/context_cost_harness.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/perf_gate.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/perf_harness.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/test_fast.sh +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/scripts/windows_reliability_matrix.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/access_drift.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/audit_verify.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/baseline_attestation.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/c4_render.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/click_runtime.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/cve_feed.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/cve_reachability.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/findings_baseline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/intent_router.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/jvm_inventory.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/license.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/packs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/pr_risk.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/regulatory_pack.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/remediation_flow.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/remediation_report.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/self_audit.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/vex.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/watch_loop.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/supabase/functions/README.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.29}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,82 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.9.29] — 2026-09-02
|
|
4
|
+
|
|
5
|
+
*The 5.9.28 field round's two P0s and its P1, plus the suite's first green run
|
|
6
|
+
in several releases. Where 5.9.28 answered a question about the worker pool,
|
|
7
|
+
this release answers the one about where a run stops when it stops.*
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **An in-flight marker for runs that never finish (`R-01-INFLIGHT`).** The
|
|
12
|
+
field measured four `spring-audit` hangs and could say nothing about any of
|
|
13
|
+
them: every diagnostic this product had — the envelope, the forensic sidecar
|
|
14
|
+
— lives on a path a hung run never reaches. A marker is now written when a
|
|
15
|
+
hang-prone command starts, rewritten at each phase and stage change the
|
|
16
|
+
heartbeat already reports, and deleted on the way out. A run killed
|
|
17
|
+
externally leaves `inflight/<pid>.json` naming its argv, its start time, the
|
|
18
|
+
phase and the stage it stopped in. Abandoned markers are published by a
|
|
19
|
+
later run in `_meta.incomplete_runs`, because the run that stops cannot
|
|
20
|
+
report anything itself; each row states whether it is a measurement (the
|
|
21
|
+
process is gone) or an inference (no refresh, on a platform that cannot
|
|
22
|
+
probe liveness safely). Covers the audit family plus `onboard` and
|
|
23
|
+
`remediate`, the two commands the field reports hanging outside it.
|
|
24
|
+
`ASK_NO_INFLIGHT_MARKER=1` disables it.
|
|
25
|
+
- **`timings.rule_families`** — wall time per rule family, highest first, with
|
|
26
|
+
a basis stating that it ranks cost and not complexity. The phase split could
|
|
27
|
+
say `security_rules: 12,617 ms` and never which of six families spent it.
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **The most expensive rule family is between 3 and 24 times faster, with a
|
|
32
|
+
byte-identical answer (P1).** `SEC-010` was 85 % of the rule phase and 35 %
|
|
33
|
+
of a whole audit; profiling found the walk under it re-reading every
|
|
34
|
+
remaining source, from disk, once per callee name it resolved — 96,399 reads
|
|
35
|
+
for 28 lookups. It indexes declarable names in the pass that already reads
|
|
36
|
+
each file once. Measured warm: `SEC-010` 10,830 → 3,246 ms on a 3,860-file
|
|
37
|
+
repository (audit 15.5 → 12.2 s) and 64,391 → 2,628 ms on an 878-file one
|
|
38
|
+
(audit 71.1 → 8.4 s), unchanged where a repository has no HTTP-input seeds.
|
|
39
|
+
`content_id` identical on all three.
|
|
40
|
+
- **That family reports while it runs, and a deadline can stop it inside.** It
|
|
41
|
+
owned the longest stretch of an audit and left one heartbeat line unchanged
|
|
42
|
+
for the whole of it, which from outside is what the field calls a hang. A
|
|
43
|
+
budget cut returns what it measured instead of surfacing as an analysis
|
|
44
|
+
error.
|
|
45
|
+
- **`manifest_cache` keyed its entries on a list that omitted every
|
|
46
|
+
lockfile.** Two repositories with identical manifests and different resolved
|
|
47
|
+
dependencies hashed the same, and the second was served the first's answer.
|
|
48
|
+
The key now reads the analyzer's own `INPUT_FILENAMES`, and a battery reads
|
|
49
|
+
that module's source and fails if it opens a file the set does not name.
|
|
50
|
+
- **`SpringAuditResult.merge()` dropped `spring_footprint`**, which switched
|
|
51
|
+
BUG-03's marginal-detection disclosure back off on every `--scope all` run —
|
|
52
|
+
the default.
|
|
53
|
+
- Machine-census leases are refreshed while a run is alive, so a killed run no
|
|
54
|
+
longer makes every later run on that machine halve its worker pool for an
|
|
55
|
+
hour; the lease directory is capped.
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
|
|
59
|
+
- The suite is green: 13,748 tests, 0 failures. It had carried twenty-one
|
|
60
|
+
standing reds for several releases, which is how a real regression becomes
|
|
61
|
+
indistinguishable from the background. Two were the product defects above;
|
|
62
|
+
the rest were assertions that had fallen behind the code they pin, each
|
|
63
|
+
fixed or opted out with the reason stated.
|
|
64
|
+
|
|
65
|
+
### Known Limitations
|
|
66
|
+
|
|
67
|
+
- `ALT-01`/`ALT-03` remain open. The bisection the field asked for ran over two
|
|
68
|
+
corpora — 250 to 4,772 files on one, 9,195 on another — and found no size at
|
|
69
|
+
which `spring-audit` stops answering: 5.8 s to 39.6 s, sublinear, `rc=0`
|
|
70
|
+
throughout. File count alone is exonerated on this platform at up to 2.75x
|
|
71
|
+
the field repository's size. This release makes the stretch the failing runs
|
|
72
|
+
sat in several times shorter and, for the first time, visible while it
|
|
73
|
+
happens; it does not claim to have fixed the hang.
|
|
74
|
+
- The next field round should send `inflight/` and `entry-trace.jsonl`
|
|
75
|
+
together after a hang. A marker still stuck in `SEC-010` says the family is
|
|
76
|
+
not the cause; a marker in another stage moves the search there; no marker
|
|
77
|
+
at all keeps it upstream of `main_entry`.
|
|
78
|
+
- `BUG-02` and `BUG-12` still need the field's own large repository.
|
|
79
|
+
|
|
3
80
|
## [5.9.28] — 2026-09-02
|
|
4
81
|
|
|
5
82
|
*Remediation batch on the 5.9.27 audit queue: nine rows, one commit each. The
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.9.
|
|
3
|
+
Version: 5.9.29
|
|
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
|
|
@@ -290,7 +290,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
290
290
|
# pip / pipx
|
|
291
291
|
pipx install sourcecode # or: pip install sourcecode
|
|
292
292
|
|
|
293
|
-
ask version # ask 5.9.
|
|
293
|
+
ask version # ask 5.9.29 — and, on a build that has aged,
|
|
294
294
|
# how many releases have probably shipped since
|
|
295
295
|
```
|
|
296
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
|
|
@@ -241,7 +241,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
241
241
|
# pip / pipx
|
|
242
242
|
pipx install sourcecode # or: pip install sourcecode
|
|
243
243
|
|
|
244
|
-
ask version # ask 5.9.
|
|
244
|
+
ask version # ask 5.9.29 — and, on a build that has aged,
|
|
245
245
|
# how many releases have probably shipped since
|
|
246
246
|
```
|
|
247
247
|
|
|
@@ -12,7 +12,7 @@ a regression assertion exist.
|
|
|
12
12
|
|
|
13
13
|
## Executive Result
|
|
14
14
|
|
|
15
|
-
The audit rates ASK Engine **6.6/10** on the large
|
|
15
|
+
The audit rates ASK Engine **6.6/10** on the large native-Windows corpus and **7.5/10** on
|
|
16
16
|
the smaller nine-axis assessment. The measurements agree on the main risk:
|
|
17
17
|
source analysis is accurate and unusually explicit about uncertainty, but large
|
|
18
18
|
repository execution and several output contracts are not yet reliable enough
|
|
@@ -52,7 +52,7 @@ SQL-injection recall, memory, and inconsistent CLI contracts.
|
|
|
52
52
|
## Performance Evidence
|
|
53
53
|
|
|
54
54
|
The audit measured `--agent` on ThingsBoard at **182.6 s / 2,088 MB RSS** and
|
|
55
|
-
`spring-audit` at **164.2 s cold**. On the larger
|
|
55
|
+
`spring-audit` at **164.2 s cold**. On the larger native-Windows corpus it reports
|
|
56
56
|
`ask . --agent` at **447 s**, `contract-diff` at **329 s**, `delta` at **187 s**,
|
|
57
57
|
and `validation --compact` at **91 s**. Warm root compact analysis can be below
|
|
58
58
|
one second; these are cold/deep-path costs.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Scope And Verdict
|
|
4
4
|
|
|
5
|
-
Native-Windows re-audit on the same
|
|
5
|
+
Native-Windows re-audit on the same audited repository (3,342 Java files) used
|
|
6
6
|
in every prior round. Score **4.6/10**, the first uptick in four rounds (5.9.22
|
|
7
7
|
6.6, 5.9.23 4.9, 5.9.25 4.3, 5.9.26 3.8). The uptick carries a large
|
|
8
8
|
qualification discovered mid-session: this audit's own machine was shared
|
|
@@ -40,7 +40,7 @@ pass ... 0/35 ... 3.8/10"). This auditor states plainly that the first pass
|
|
|
40
40
|
and its 7.4/10 score do not correspond to anything they ran or reported. Given
|
|
41
41
|
the newly confirmed shared-machine contention, the likely explanation is that
|
|
42
42
|
5.9.26's report mixed observations from two concurrent, independent audit
|
|
43
|
-
sessions on the same machine (the
|
|
43
|
+
sessions on the same machine (the native-Windows lineage and a
|
|
44
44
|
multi-repository "testing/" corpus lineage matching the five OSS repos found
|
|
45
45
|
in the trace this round) rather than one evaluator's two passes. Recorded as
|
|
46
46
|
an open provenance question, not resolved either way — see
|
|
@@ -97,6 +97,6 @@ concurrent `ask` test harness during at least part of the observation window.
|
|
|
97
97
|
Reliability figures in this round should be read as measured under
|
|
98
98
|
uncontrolled, real contention, not as an isolated single-process baseline.
|
|
99
99
|
The auditor's own recommendation: repeat `spring-audit . --compact` x3 on
|
|
100
|
-
both a reference repo and
|
|
100
|
+
both a reference repo and the audited repository in the same clean window, nothing else
|
|
101
101
|
running, to separate "the repository" from "the shared machine" as the
|
|
102
102
|
variable.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Alternative External Audit - 5.9.28
|
|
2
|
+
|
|
3
|
+
*The audited repository is referred to neutrally throughout (3,342 Java files,
|
|
4
|
+
`repo_id 7fced5c877cacfc5`, dirty working tree) — it is the same subject as
|
|
5
|
+
every prior round in this lineage.*
|
|
6
|
+
|
|
7
|
+
## Scope And Verdict
|
|
8
|
+
|
|
9
|
+
Native-Windows re-audit, sixth round in this lineage. Score **6.2/10** (5.9.22
|
|
10
|
+
6.6, 5.9.23 4.9, 5.9.25 4.3, 5.9.26 3.8, 5.9.27 4.6, 5.9.28 6.2) — the first
|
|
11
|
+
substantial rise in five versions, and the first with a root cause identified
|
|
12
|
+
in code rather than a symptom patched. **No regression against 5.9.27 was
|
|
13
|
+
found.** Windows 11 Pro 10.0.26200, Python 3.10.0, pipx, `ask.EXE`, build
|
|
14
|
+
`adbbf9ca7652e2ad2dfdb2db911c12e1793dded5`.
|
|
15
|
+
|
|
16
|
+
| Axis | 5.9.27 | 5.9.28 | Basis |
|
|
17
|
+
|---|---:|---:|---|
|
|
18
|
+
| Analysis accuracy | 9.0 | 9.5 | Overload anchoring exact and cross-checked against the real source |
|
|
19
|
+
| Honesty of figures | 9.0 | 9.3 | `audit_time_ms` null instead of a false `0.0`; every cache store publishes its eviction contract |
|
|
20
|
+
| Diagnostic instrumentation | partial progress | real step, known limit | `_meta.concurrency` is precise and actionable — and absent from exactly the runs that fail |
|
|
21
|
+
| CLI ergonomics | 6.5 | 7.5 | Nested-workspace `selftest` refusal; `retrieve --target` explains and redirects |
|
|
22
|
+
| Audit-family reliability | 2/12 | 2/8, cause bounded | `migrate-check`/`migrate-apply` clean; `spring-audit` 0/4, `verify` 0/1, `risk` 0/1, `audit-report` 0/1 |
|
|
23
|
+
| Light-path performance | 6.5 | 6.5 | `impact-chain` 11.3 s, `review-pr` 29.4 s — within range under residual contention |
|
|
24
|
+
|
|
25
|
+
## Priority Finding — The Hang Reproduces With Contention Ruled Down
|
|
26
|
+
|
|
27
|
+
The most important measurement of this round. The auditor isolated the
|
|
28
|
+
contention variable to its lowest observable level across six sessions, and
|
|
29
|
+
the failure persisted at 100%:
|
|
30
|
+
|
|
31
|
+
1. `entry-trace.jsonl` was monitored for 120 s with nothing launched, waiting
|
|
32
|
+
for a quiet window.
|
|
33
|
+
2. 100 s of total calm confirmed — no new lines.
|
|
34
|
+
3. `timeout -k 5 150 ask spring-audit . --compact` launched into that window.
|
|
35
|
+
4. Result: `rc=124`, 150,176 ms, **0 bytes of stdout**.
|
|
36
|
+
5. The trace grew by two lines over the whole 150 s window: the auditor's own
|
|
37
|
+
invocation, and one light foreign invocation (`risk thingsboard --limit
|
|
38
|
+
20`) — against the *dozens* of concurrent foreign invocations measured in
|
|
39
|
+
the 5.9.27 session.
|
|
40
|
+
|
|
41
|
+
Session total: **4/4 hangs** of `spring-audit . --compact`, the last of them
|
|
42
|
+
under the lowest contention load obtainable in six audits.
|
|
43
|
+
|
|
44
|
+
The 5.9.28 release note states: *"one hang was observed with nothing else
|
|
45
|
+
running, and that is unexplained."* This round supplies four repetitions of
|
|
46
|
+
that case rather than one, which turns "unexplained" into "unexplained and
|
|
47
|
+
reproducible" — a better-defined problem, still unsolved. Contention is a
|
|
48
|
+
real, now precisely measured factor; it is **not the sole cause**. Something
|
|
49
|
+
specific to this repository still breaks `spring-audit` on a near-idle
|
|
50
|
+
machine.
|
|
51
|
+
|
|
52
|
+
The auditor's recommendation: profile the `applying all rules over 3342 Java
|
|
53
|
+
files` phase (the one the stderr heartbeat names) against a growing subset of
|
|
54
|
+
the repository — 250, 500, 1,000, 2,000, 3,342 files — to find where the
|
|
55
|
+
behaviour changes from "answers" to "hangs indefinitely". If the command
|
|
56
|
+
exhausts memory or time deterministically on some code pattern in this tree,
|
|
57
|
+
contention would be worsening a failure that already exists in isolation
|
|
58
|
+
rather than causing one.
|
|
59
|
+
|
|
60
|
+
## Instrumentation Gap — The Blind Spot `_meta.concurrency` Cannot Cover
|
|
61
|
+
|
|
62
|
+
`_meta.concurrency` is described as the best instrumentation to appear in six
|
|
63
|
+
sessions. On a successful `endpoints --output` run it read
|
|
64
|
+
`{"peer_invocations_at_start": 17, "worker_budget_shared": true, "jobs": 1,
|
|
65
|
+
"jobs_unshared": 4}` — exact, actionable, and enough for any consumer to tell
|
|
66
|
+
a contaminated timing from an isolated one without doing process archaeology.
|
|
67
|
+
|
|
68
|
+
It never appears on a hung or empty run: stderr across the four `spring-audit`
|
|
69
|
+
hangs contains zero mentions of `concurrency`, because those processes die
|
|
70
|
+
before assembling any payload. This is the same blind spot `R-01` identified
|
|
71
|
+
in the 5.9.26 round (the process does not reach the output guard); what has
|
|
72
|
+
changed is that we now know it *would* publish something useful if it got
|
|
73
|
+
there.
|
|
74
|
+
|
|
75
|
+
Concrete suggestion from the auditor: write an in-flight marker
|
|
76
|
+
(`inflight/<pid>.json` carrying `{argv, started_at, last_phase}`, updated at
|
|
77
|
+
each phase change the heartbeat already reports) when an audit-family command
|
|
78
|
+
starts, and delete it on completion. A process that hangs or dies leaves that
|
|
79
|
+
file orphaned — which is precisely the forensic evidence the next field
|
|
80
|
+
session needs, without depending on an external observer correlating
|
|
81
|
+
timestamps in a trace file shared with an unknown number of other processes.
|
|
82
|
+
|
|
83
|
+
## Measured Reliability — Six Versions, Same Invocation, Same Repository
|
|
84
|
+
|
|
85
|
+
| Invocation | 5.9.23 | 5.9.25 | 5.9.26 | 5.9.27 | 5.9.28 |
|
|
86
|
+
|---|---:|---:|---:|---:|---|
|
|
87
|
+
| `spring-audit . --compact` | 0/24 | 0/18 | 0/8 | 0/5 | 0/4 (3 under verified-minimal contention) |
|
|
88
|
+
| `verify .` | 0/24 | 0/18 | 0/5 | 0/1 | 0/1 |
|
|
89
|
+
| `migrate-check . --compact` | 7/12 | 4/26 | 0/5 | 1/1 | 1/1 ✓ |
|
|
90
|
+
| `migrate-apply .` | 14/24 | 0/26 | 0/5 | 1/1 | 1/1 ✓ |
|
|
91
|
+
| `risk . --limit 20` | 0/13 | 0/7 | 0/4 | 0/1 | 0/1 |
|
|
92
|
+
| `audit-report . --format markdown` | 0/7 | 0/7 | 0/4 | 0/1 | 0/1 |
|
|
93
|
+
|
|
94
|
+
`migrate-check` and `migrate-apply` have now answered reliably in two
|
|
95
|
+
consecutive sessions (38–39 s, correct payloads) — a trend rather than luck.
|
|
96
|
+
The other four remain at zero.
|
|
97
|
+
|
|
98
|
+
## Verified Fixes — Checked With The Auditor's Own Data
|
|
99
|
+
|
|
100
|
+
- **`NEW-02`/`BUG-05` (overload anchoring) — closed, cross-checked against the
|
|
101
|
+
real source.** `ask endpoints . --output`: the four endpoints of one
|
|
102
|
+
overloaded handler pair now publish `anchor_ambiguity: true`,
|
|
103
|
+
`overload_count: 2`, `anchor_candidate_lines: [134, 145]`, and those two
|
|
104
|
+
line numbers match the two real annotations the auditor had verified by hand
|
|
105
|
+
three sessions earlier. First defect tracked since the 5.9.22 round that is
|
|
106
|
+
genuinely resolved rather than "not reproduced this time".
|
|
107
|
+
- **`BUG-13` (nested-workspace `selftest`) — closed, verified against a
|
|
108
|
+
purpose-built fixture.** The auditor built a workspace holding two real
|
|
109
|
+
nested Git repositories: refusal in **373 ms**, `{"code": "INVALID_USAGE",
|
|
110
|
+
..., "nested_repositories": 2}`, with `--allow-nested` documented. Against
|
|
111
|
+
1/12 rows passing in 120 s before.
|
|
112
|
+
- **`BUG-16` (cache eviction contract) — closed.** `ask cache status` now
|
|
113
|
+
prints, per store, when and how entries are evicted — information absent for
|
|
114
|
+
four versions.
|
|
115
|
+
- **`ALT-25` (`impact-chain.audit_time_ms`) — closed.** `null` with
|
|
116
|
+
`findings_status: "not_computed"` and the rule stated, replacing the
|
|
117
|
+
misleading `0.0`.
|
|
118
|
+
- **`retrieve security-surface --target` — closed, high quality.** The refusal
|
|
119
|
+
now says the intent is repository-wide and names
|
|
120
|
+
`ask retrieve security-chain --target <symbol>`, after four sessions of
|
|
121
|
+
"No such option: --target".
|
|
122
|
+
- **`R-01`'s mechanism — confirmed real and quantified** (see above), with the
|
|
123
|
+
reservation that the disclosure cannot reach the failing runs.
|
|
124
|
+
|
|
125
|
+
## Not Verified This Round
|
|
126
|
+
|
|
127
|
+
- **`ALT-08` — the auditor ran the wrong command and says so.**
|
|
128
|
+
`ask review-pr . --files -` (119,979 bytes, above the declared 100,000-byte
|
|
129
|
+
ceiling) carries no `_truncation_summary` at all: that field belongs to
|
|
130
|
+
`ask prepare-context review-pr`, a different command sharing the task name.
|
|
131
|
+
Neither claimed nor refuted; pending a repeat with the correct command.
|
|
132
|
+
- `BUG-22`/`REG-02` (`--agent` not relaunched), `BUG-10` (needs a repository
|
|
133
|
+
with the routing styles it detects, absent here), `ALT-07`, `ALT-10`,
|
|
134
|
+
`BUG-02`, `BUG-12`, `BUG-09`, `BUG-23`: not relaunched for time budget, no
|
|
135
|
+
regression signal against any of them.
|
|
136
|
+
- `ask --help`: 12.3 s cold, 2.9 s on immediate repetition. Still high on the
|
|
137
|
+
audit machine, consistent with residual contention rather than a defect in
|
|
138
|
+
the command.
|
|
139
|
+
|
|
140
|
+
## Verified And Defect-Free In 5.9.28
|
|
141
|
+
|
|
142
|
+
`endpoints` (3,763, exact), `impact-chain` (37,445 bytes), `posture`,
|
|
143
|
+
`verify-edit`, `explain`, `impact`, `drift`, `trend`, `chunk-file`, `intent`,
|
|
144
|
+
`pr-risk`, `review-pr` (119,979 bytes, coherent), `migrate-check` (38,081
|
|
145
|
+
bytes), `migrate-apply` (10,142 bytes), `selftest` with an explicit path
|
|
146
|
+
(`rc=75`, 9,910 bytes) and with nesting detection (`rc=2`). `--jobs`
|
|
147
|
+
out-of-range rejection confirmed for the sixth consecutive session.
|
|
148
|
+
|
|
149
|
+
## Commercial Position
|
|
150
|
+
|
|
151
|
+
The reliable subset grew for real this round — `migrate-check`,
|
|
152
|
+
`migrate-apply`, `endpoints`, `posture`, `impact-chain`, `pr-risk`,
|
|
153
|
+
`review-pr`, `selftest` with an explicit path, now with correct overload
|
|
154
|
+
anchors — and is valued at **18–20 €/dev/month**, up from prior rounds. The
|
|
155
|
+
central security-audit family (`spring-audit`, `verify`, `risk`,
|
|
156
|
+
`audit-report`) remains unusable on this repository for the sixth consecutive
|
|
157
|
+
version.
|
|
158
|
+
|
|
159
|
+
**Upgrade recommendation: yes, unconditionally** — no regression against
|
|
160
|
+
5.9.27, and four corrections verified with the auditor's own data rather than
|
|
161
|
+
accepted on the changelog's word. For anyone who needs the audit family on
|
|
162
|
+
this repository specifically: still not the moment, but for the first time the
|
|
163
|
+
team has a concrete, reproducible lead instead of a diffuse symptom.
|
|
164
|
+
|
|
165
|
+
## Attack Order Requested By The Auditor
|
|
166
|
+
|
|
167
|
+
1. `R-01` — bisect the `applying all rules` phase over a growing file subset
|
|
168
|
+
(250 → 3,342) to find where the behaviour changes; the trigger may not be
|
|
169
|
+
purely concurrency.
|
|
170
|
+
2. Extend `R-01`'s instrumentation to runs that never complete — the in-flight
|
|
171
|
+
marker above.
|
|
172
|
+
3. `R-02` — repeat the `ALT-08` verification with `ask prepare-context
|
|
173
|
+
review-pr`.
|
|
174
|
+
4. Remaining rows unchanged in priority from the 5.9.27 report.
|
|
@@ -14,6 +14,110 @@ 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 — Release `5.9.29`, hardening pass and a green suite (2026-09-02)
|
|
18
|
+
|
|
19
|
+
**The suite is green — 13 748 tests, 0 failures — for the first time in
|
|
20
|
+
several releases.** It had carried twenty-one standing reds, which is how a
|
|
21
|
+
real regression becomes indistinguishable from the background. Two of them
|
|
22
|
+
were product defects, not stale assertions.
|
|
23
|
+
|
|
24
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
25
|
+
|---|---:|---|---|
|
|
26
|
+
| `manifest-cache-key` (new) | High | **fixed** | `manifest_cache` keyed its entries on a hand-kept copy of the manifest names that omitted **every lockfile** — `poetry.lock`, `Cargo.lock`, `Gemfile.lock`, `pnpm-lock.yaml`, `yarn.lock`, `composer.lock`, `uv.lock`, `Pipfile.lock`. Two repositories with identical manifests and different *resolved* dependencies hashed the same, so the second was served the first's answer: a stale result with nothing in it to say so. The key now reads `dependency_analyzer.INPUT_FILENAMES`, and a battery reads that module's own source and fails if it opens a file the declared set does not name. |
|
|
27
|
+
| `BUG-03` (merge half) | High | **fixed** | `SpringAuditResult.merge()` dropped `spring_footprint`, so the marginal-detection disclosure closed in 5.9.26 was switched back off on every `--scope all` run — the default. Fixing a producer and leaving a consumer unbound is the exact failure this ledger's maintenance rule exists for, found here by the battery that pins every dataclass field through the merge. |
|
|
28
|
+
| `R-01` (lease liveness) | — | **hardened before shipping** | A lease outlived its process by up to an hour, and the field's harness kills runs with `timeout` constantly — on Windows, where liveness cannot be probed, every later run would have believed it was sharing the machine with a corpse and halved its pool for the whole TTL. Live runs refresh the lease at each phase change; the TTL drops to 900 s, which only has to outlast the longest single phase; the directory is capped. |
|
|
29
|
+
| `R-01-INFLIGHT` (coverage) | — | **widened** | The marker covered the audit family only. `ALT-10` (`onboard`, 904 ms to a 200-second kill in one session) and `ALT-07` (`remediate`, 23,6 s to hangs past 400 s) are the field's other unexplained hangs, and a marker is the only evidence either row can leave behind. Both are covered now; `--help` and the light path still pay nothing. |
|
|
30
|
+
| Suite hygiene | — | **closed** | Nineteen further rows were assertions that had fallen behind: a missing import and a missing fixture parameter, a `--jobs` bound stated twice (one `JOBS_MAX` now feeds the range and the help), a budget block that gained a field, a deadline modelled as a count of consultations rather than a state of the run, a no-context emulation importing a Typer module this version does not ship, `SEC-010` declaring neither a repair recipe nor a reason it cannot be mechanised, and the budget-authority battery holding external audit records to a rule meant for documents that instruct. |
|
|
31
|
+
|
|
32
|
+
## Current Synchronization — P1 closed: the expensive family, profiled and fixed (2026-09-02)
|
|
33
|
+
|
|
34
|
+
**The row asked for two things and both are done: `SEC-010` now reports while
|
|
35
|
+
it runs, and the walk underneath it is between 3 and 24 times faster with a
|
|
36
|
+
byte-identical answer.** Profiling `risk._http_input_query_sinks` on a
|
|
37
|
+
3 860-file repository found the mechanism in one line of the profile: `get()`
|
|
38
|
+
re-read every remaining source, from disk, **once per callee name it
|
|
39
|
+
resolved** — 96 399 `_text_of` calls for 28 lookups, six seconds of pure I/O
|
|
40
|
+
inside an 18,3-second walk, with the parse it triggers accounting for the
|
|
41
|
+
rest.
|
|
42
|
+
|
|
43
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
44
|
+
|---|---:|---|---|
|
|
45
|
+
| `SEC-010` cost | Medium | **fixed** | `seeds()` already reads every source once, so it now indexes, per file, the names that could be *declared* there. The predicate is unchanged where it matters — a Java declaration is never preceded by a dot, so `helper.lookup(` cannot declare `lookup`, while every file that could declare a name stays a candidate — which preserves the walk's own claim that reading fewer files cannot change the answer. Measured warm, serialized, `spring-audit --compact`: `SEC-010` 10 830 → 3 246 ms and the audit 15,5 → 12,2 s on a 3 860-file repository; **64 391 → 2 628 ms** and the audit **71,1 → 8,4 s** on an 878-file one where the family had been 90 % of the clock; unchanged on a repository with no HTTP-input seeds. `content_id` byte-identical on all three. |
|
|
46
|
+
| `SEC-010` silence | Medium | **fixed** | The family owned the most expensive stretch of an audit and reported nothing while it ran — one heartbeat line, unchanged, which from outside is exactly what the field calls a hang. It ticks through `FamilyBudget` now (`SEC-010: parsing callees 129/772 files`), which also makes the family that spends the most time the one a deadline can stop *inside*: a cut returns what it measured, and is recorded as a cut rather than surfacing as an analysis error. |
|
|
47
|
+
| `ALT-01` / `ALT-03` | Critical maximum | **open, one contributing factor removed** | The field's failing runs sat in `SEC-010` and this release makes that stretch several times shorter and, for the first time, visible while it happens. That is not a claim the hang is fixed: an 878-file repository spending 71 s on one family is a plausible contributor to a 150-second timeout, not a proven cause of one, and the field's own repository was never available here. What the next round can do that no previous one could: read `inflight/<pid>.json` after a hang and see whether the stage is still `SEC-010`. |
|
|
48
|
+
|
|
49
|
+
## Current Synchronization — The two 5.9.28 P0s, worked (2026-09-02)
|
|
50
|
+
|
|
51
|
+
**The bisection ran, and its headline result is negative: there is no knee.**
|
|
52
|
+
`spring-audit --compact` over deterministic subsets of a 4 772-file repository
|
|
53
|
+
took 5,8 s (250 files), 6,0 s (500), 9,2 s (1 000), 10,4 s (2 000), 16,9 s
|
|
54
|
+
(3 342 — the field's own file count) and 24,1 s (4 772); a second corpus of
|
|
55
|
+
9 195 files finished in 39,6 s. Sublinear per file, `rc=0` everywhere, no hang
|
|
56
|
+
at any size. **File count alone does not explain the field's failure on this
|
|
57
|
+
platform**, and the auditor's hypothesis — a costly loop that trips at a
|
|
58
|
+
certain size — is not reproducible here at up to 2,75× their repository.
|
|
59
|
+
|
|
60
|
+
What the bisection did find is where the time goes, and why the heartbeat
|
|
61
|
+
looks stuck: **one family dominates**. On the 4 772-file repository, `SEC-010`
|
|
62
|
+
measured **10 670 ms of a 30 099 ms run — 85 % of the rule phase** — and its
|
|
63
|
+
heartbeat line stops changing for the last 10,6 s of it. That is precisely the
|
|
64
|
+
shape the field reports as a hang, and `timings.phases` could say
|
|
65
|
+
`security_rules: 12 617 ms` while never naming which of the six families spent
|
|
66
|
+
it. `SEC-010` delegates to `risk._http_input_query_sinks`, already recorded as
|
|
67
|
+
the CLI's single most expensive walk on two corpora in the 5.8.5 round.
|
|
68
|
+
|
|
69
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
70
|
+
|---|---:|---|---|
|
|
71
|
+
| `R-01-INFLIGHT` | Critical maximum | **shipped** | `inflight/<pid>.json` is written when an audit-family command starts, rewritten at each phase and stage change the heartbeat already reports, and deleted on the way out. A run killed externally leaves it behind carrying argv, start time, the phase, the stage (the rule family) and how long it had been in each. Abandoned markers are published by a later run in `_meta.incomplete_runs` and attached to the forensic snapshot when a guard fires — the run that stops cannot report anything itself. Each row states its basis: a dead pid is a measurement, an old timestamp is an inference, and Windows offers only the second. `ASK_NO_INFLIGHT_MARKER=1` disables it. Field closure: the next hang should leave a marker naming its stage. |
|
|
72
|
+
| `ALT-03` (bisection) | High | **measured, hypothesis not reproduced** | Six sizes on one corpus, three on a second, serialized on a quiet machine: no size at which the behaviour changes from *answers* to *hangs*. The remaining differences with the field are the platform (native Windows, four-worker cap), that repository's own content, and a dirty working tree. The bisection is not repeatable from outside without the repository, so the instruments below move the next attempt inside the product. |
|
|
73
|
+
| `ALT-03` (attribution) | High | **instrumented** | `timings.rule_families` publishes wall time per family, highest first, with a basis stating that it ranks cost and not complexity (the families are not comparable units). Two `perf_counter` reads per family. A family the budget cut stays absent and is named in `_partial.rules_not_run`, so a missing entry is never read as a free family. |
|
|
74
|
+
| `SEC-010` cost | Medium | **open, new, measured** | 85 % of the rule phase and 35 % of the whole audit on a 4 772-file repository; growth measured at roughly `n^1.2` between 1 553 and 3 860 analysed files (3,6 s → 10,6 s of unchanged heartbeat). Its own sub-progress is not reported, so a slow run and a stopped one look identical from outside for the whole stretch. Two separable pieces of work: report progress *inside* the family, and profile `risk._http_input_query_sinks`, which the 5.8.5 round already measured as this CLI's most expensive walk on two corpora. |
|
|
75
|
+
|
|
76
|
+
## Current Synchronization — Alternative External Audit `5.9.28`, the hang reproduces on a near-idle machine (2026-09-02)
|
|
77
|
+
|
|
78
|
+
**First substantial score rise in five rounds (4.6 → 6.2/10), with no
|
|
79
|
+
regression found — and the sharpest evidence yet that contention was never the
|
|
80
|
+
whole story.** The auditor isolated the contention variable to its lowest
|
|
81
|
+
observable level in six sessions (120 s of monitoring, 100 s of confirmed calm
|
|
82
|
+
before launch, one light foreign invocation across the whole 150 s window,
|
|
83
|
+
against dozens in the 5.9.27 round) and `spring-audit . --compact` still hung
|
|
84
|
+
**4 of 4 times**, `rc=124`, 0 bytes. The 5.9.28 release note said "one hang was
|
|
85
|
+
observed with nothing else running, and that is unexplained"; this round turns
|
|
86
|
+
that into *unexplained and reproducible*, which is a better-defined problem and
|
|
87
|
+
still an open one. Full evidence:
|
|
88
|
+
[`AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md).
|
|
89
|
+
|
|
90
|
+
**Five rows are confirmed closed with the auditor's own data, not on the
|
|
91
|
+
changelog's word:** `NEW-02`/`BUG-05` (cross-checked against the real source —
|
|
92
|
+
`anchor_candidate_lines: [134, 145]` matches two annotations the auditor had
|
|
93
|
+
verified by hand three sessions earlier, and it is the first defect tracked
|
|
94
|
+
since 5.9.22 that is genuinely resolved rather than "not reproduced this
|
|
95
|
+
time"), `BUG-13` (373 ms refusal against a purpose-built two-repository
|
|
96
|
+
workspace), `BUG-16`, `ALT-25`, and the `retrieve security-surface --target`
|
|
97
|
+
refusal. `_meta.concurrency` is described as the best instrumentation to appear
|
|
98
|
+
in six sessions.
|
|
99
|
+
|
|
100
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
101
|
+
|---|---:|---|---|
|
|
102
|
+
| `R-01` (contention) | Critical maximum | **mechanism confirmed real and quantified; no longer sufficient as an explanation** | Measured on a successful run: `{"peer_invocations_at_start": 17, "worker_budget_shared": true, "jobs": 1, "jobs_unshared": 4}` — exact and actionable, and it settles from the outside what the 5.9.27 round could only infer from timestamps. But `spring-audit` hung 4/4 with third-party contention verified at its lowest in six sessions, so the division of the worker budget is a real fix for a real defect that is **not** the whole cause. Closure now needs the bisection below, not another contention measurement. |
|
|
103
|
+
| `R-01-INFLIGHT` (new) | Critical maximum | **open, instrumentation gap named precisely** | `_meta.concurrency` never appears on a hung or empty run — zero mentions of `concurrency` across the four hangs' stderr — because those processes die before assembling any payload. Same blind spot as the 5.9.26 `R-01` (the run does not reach the output guard), now with the knowledge that the disclosure would be useful if it got there. The auditor's proposal, adopted as the row's required work: write `inflight/<pid>.json` with `{argv, started_at, last_phase}` when an audit-family command starts, update it at each phase change the heartbeat already reports, delete it on completion. An orphaned file is the forensic record no external observer can reconstruct by correlating a shared trace. |
|
|
104
|
+
| `ALT-01` / `ALT-03` | Critical maximum | **open, now systematic and reproducible for this repository** | `spring-audit . --compact` 0/4 this round (0/5, 0/8, 0/18, 0/24 in the four before it); `verify` 0/1, `risk` 0/1, `audit-report` 0/1. The bisection the row has asked for since 5.9.25 now has a specific target: profile the `applying all rules over 3342 Java files` phase — the one the stderr heartbeat names — over a growing subset (250, 500, 1 000, 2 000, 3 342 files) and find where the behaviour changes from *answers* to *hangs indefinitely*. If it is deterministic on this tree, contention worsens a failure that already exists in isolation rather than causing one. |
|
|
105
|
+
| `NEW-02` / `BUG-05` | High | **closed 5.9.28, confirmed in the field** | `anchor_ambiguity: true`, `overload_count: 2`, `anchor_candidate_lines: [134, 145]`, cross-checked against the two real annotations on the overloaded handler pair. Correct, not merely present. |
|
|
106
|
+
| `BUG-13` | High | **closed 5.9.28, confirmed against an independent fixture** | Two real nested Git repositories, refusal in 373 ms with `nested_repositories: 2` and `--allow-nested` documented — against 1 of 12 rows passing in 120 s before. |
|
|
107
|
+
| `BUG-16` | High | **closed 5.9.28, confirmed** | `cache status` prints each store's eviction contract; the auditor notes the information had been absent for four versions. |
|
|
108
|
+
| `ALT-25` | Low | **closed 5.9.28, confirmed** | `audit_time_ms: null` with `findings_status: "not_computed"` and the rule stated beside it. |
|
|
109
|
+
| `retrieve security-surface --target` | Low | **closed 5.9.28, confirmed** | The refusal states the intent is repository-wide and names `ask retrieve security-chain --target <symbol>`. |
|
|
110
|
+
| `ALT-08` (arithmetic half) | Low | **fixed, field verification still owed** | Not verified this round and the auditor says so plainly: they exercised `ask review-pr`, which carries no `_truncation_summary` at all, instead of `ask prepare-context review-pr`, the command the field owns. Neither claimed nor refuted. Re-verify with the correct command before treating the field evidence as either way. |
|
|
111
|
+
| `migrate-check` / `migrate-apply` | — | **reliable two sessions running** | 1/1 and 1/1 again (38–39 s, correct payloads). Two consecutive clean sessions after 0/5 in 5.9.26 — a trend rather than luck, and the shape of what a fixed audit-family command should look like. |
|
|
112
|
+
| `ask --help` latency | Low | **open, still not a command-level defect** | 12.3 s cold, 2.9 s on immediate repetition on the audit machine, against 0.41–0.44 s on the engineering host. Consistent with residual contention; not reproduced as a defect of the command in either place. |
|
|
113
|
+
| `BUG-22`/`REG-02`, `BUG-10`, `ALT-07`, `ALT-10`, `BUG-02`, `BUG-12`, `BUG-09`, `BUG-23` | — | **open/unchanged, not relaunched** | Time budget, and no regression signal. `BUG-10` in particular cannot be exercised on this repository — it has none of the routing styles that fix detects. |
|
|
114
|
+
|
|
115
|
+
**No regression was found against 5.9.27, and the upgrade is recommended
|
|
116
|
+
unconditionally** — the first round in six where the auditor reports a net,
|
|
117
|
+
verified improvement with nothing new broken. The release gate is unchanged:
|
|
118
|
+
the audit-command family is still not usable for unattended CI on this
|
|
119
|
+
repository.
|
|
120
|
+
|
|
17
121
|
## Current Synchronization — Release `5.9.28`, nine rows closed on the 5.9.27 queue (2026-09-02)
|
|
18
122
|
|
|
19
123
|
**`R-01`'s architectural question is answered in source, and the answer was
|
|
@@ -1,5 +1,77 @@
|
|
|
1
1
|
# ASK — Development Roadmap
|
|
2
2
|
|
|
3
|
+
### Release 5.9.29 — hardening pass, green suite
|
|
4
|
+
|
|
5
|
+
The suite is green (13 748 / 0) for the first time in several releases. Two of
|
|
6
|
+
the twenty-one standing reds were product defects — a cache key that omitted
|
|
7
|
+
every lockfile, and a merge that dropped the field BUG-03's fix depends on —
|
|
8
|
+
and the rest were assertions that had fallen behind the code they pin.
|
|
9
|
+
|
|
10
|
+
| Priority | Required work and closure boundary |
|
|
11
|
+
|---|---|
|
|
12
|
+
| P0 | Unchanged and now fully instrumented: ask the next field round for `inflight/` and `entry-trace.jsonl` after a hang. The marker covers `onboard` and `remediate` too, so `ALT-07` and `ALT-10` can finally leave evidence. |
|
|
13
|
+
| P1 | Keep the suite green. A red set that survives a release is what made this session's two real defects invisible for as long as they were; the value of the battery is the signal, and twenty-one permanent reds is no signal. |
|
|
14
|
+
| P2 | One order-dependent flake was observed once under `-n auto` and did not reproduce in two further full runs (`test_qualified_target_resolution_e17`). Recorded rather than chased — if it returns, it is a CliRunner/stream-capture interaction, not an analysis defect. |
|
|
15
|
+
|
|
16
|
+
### P1 closed — the expensive rule family profiled, fixed and made visible
|
|
17
|
+
|
|
18
|
+
`SEC-010` was 85 % of the rule phase and reported nothing while it ran. Both
|
|
19
|
+
halves are closed. The profile named the mechanism immediately: the walk
|
|
20
|
+
re-read the whole remaining corpus, from disk, once per callee name — 96 399
|
|
21
|
+
reads for 28 lookups. It now indexes declarable names in the pass that already
|
|
22
|
+
reads every file once.
|
|
23
|
+
|
|
24
|
+
| Priority | Required work and closure boundary |
|
|
25
|
+
|---|---|
|
|
26
|
+
| P0 | Unchanged: get `inflight/` and `entry-trace.jsonl` from the next field round after a hang. With `SEC-010` several times cheaper *and* reporting counted progress, a marker still stuck in that stage says the family is not the cause; a marker in a different stage moves the search there; no marker at all keeps it upstream of `main_entry`. |
|
|
27
|
+
| P1 | **Closed.** `SEC-010` 10 830 → 3 246 ms on a 3 860-file repository and 64 391 → 2 628 ms on an 878-file one (audit 71,1 → 8,4 s), `content_id` byte-identical on three corpora. The family ticks through `FamilyBudget`, so its line now counts, and a deadline can stop it mid-walk instead of only between families. |
|
|
28
|
+
| P2 | The remaining cost in that walk is `_methods_in_text` over the files a name lookup admits — 11,4 s of the original 18,3 s profile, now the dominant term. Worth a look only if the field's next round still points here; the answer must stay byte-identical, which is the constraint that shaped this fix. |
|
|
29
|
+
|
|
30
|
+
### The two 5.9.28 P0s, worked — bisection measured, in-flight marker shipped
|
|
31
|
+
|
|
32
|
+
Both P0s from the round below are done. `R-01-INFLIGHT` shipped: an
|
|
33
|
+
audit-family run now leaves `inflight/<pid>.json` naming its argv, phase,
|
|
34
|
+
stage and how long it had been in each, deleted on a normal exit, published by
|
|
35
|
+
a later run as `_meta.incomplete_runs`. The bisection ran over two corpora and
|
|
36
|
+
**did not reproduce the failure**: 5,8 s at 250 files rising sublinearly to
|
|
37
|
+
24,1 s at 4 772, and 39,6 s at 9 195 files, `rc=0` throughout.
|
|
38
|
+
|
|
39
|
+
| Priority | Required work and closure boundary |
|
|
40
|
+
|---|---|
|
|
41
|
+
| P0 | The field's next hang is now supposed to leave a marker. Ask for `inflight/` and `entry-trace.jsonl` together in the next round: a marker naming `security rules (SEC-010)` would close the mechanism question that six sessions could not, and no marker at all would prove the process dies before `main_entry` returns, which is a different search entirely. |
|
|
42
|
+
| P1 | `SEC-010` is 85 % of the rule phase and 35 % of a 4 772-file audit, with no sub-progress of its own — a slow run and a stopped one are indistinguishable from outside for that whole stretch. Report progress inside the family (it walks a countable population), then profile `risk._http_input_query_sinks`, which the 5.8.5 round already measured as the CLI's most expensive walk on two corpora. Cost, not correctness: the answer must not move. |
|
|
43
|
+
| P2 | The bisection exonerated file count on this platform up to 2,75× the field's repository. The variables left are the platform (native Windows, four-worker cap), that repository's own content, and its dirty working tree. Do not spend another round re-measuring size; the marker moves the question inside the product. |
|
|
44
|
+
|
|
45
|
+
Method note, for repeatability: subsets were built deterministically (first N
|
|
46
|
+
`.java` files in sorted order plus every build manifest on their ancestor
|
|
47
|
+
paths), runs were serialized, and the heartbeat was redirected with
|
|
48
|
+
`ASK_PROGRESS=file:<path>` so a run that never answered would still say which
|
|
49
|
+
phase and stage it stopped in.
|
|
50
|
+
|
|
51
|
+
### Alternative Audit Intake — release 5.9.28, the hang reproduces on a near-idle machine
|
|
52
|
+
|
|
53
|
+
Score 6.2/10 (4.6 in 5.9.27) — the first substantial rise in five rounds, with
|
|
54
|
+
**no regression found** and five rows confirmed closed against the auditor's
|
|
55
|
+
own data rather than the changelog's word. The round's decisive measurement is
|
|
56
|
+
negative, though: with third-party contention isolated to its lowest observable
|
|
57
|
+
level in six sessions (100 s of confirmed calm before launch; one light foreign
|
|
58
|
+
invocation across the whole 150 s window, against dozens the round before),
|
|
59
|
+
`spring-audit . --compact` still hung **4 of 4 times**, `rc=124`, 0 bytes. The
|
|
60
|
+
worker-budget division shipped in 5.9.28 fixed a real defect that is not the
|
|
61
|
+
whole cause.
|
|
62
|
+
|
|
63
|
+
| Priority | Required work and closure boundary |
|
|
64
|
+
|---|---|
|
|
65
|
+
| P0 | Bisect the `applying all rules over 3342 Java files` phase — the one the stderr heartbeat already names — over a growing subset of a large repository (250, 500, 1 000, 2 000, 3 342 files) and find the point where the behaviour changes from *answers* to *hangs indefinitely*. This is the bisection `ALT-03` has asked for since 5.9.25, now with the added constraint that the trigger is not purely concurrency: it reproduces on a near-idle machine. |
|
|
66
|
+
| P0 | `R-01-INFLIGHT`: extend the diagnostic to runs that never assemble a payload. `_meta.concurrency` is exact and actionable on successful runs (`peer_invocations_at_start: 17`, `jobs_unshared: 4` → `jobs: 1`) and absent from every hang — zero mentions across four of them. Write `inflight/<pid>.json` with `{argv, started_at, last_phase}` at the start of each audit-family command, update it at each phase change the heartbeat already reports, delete it on completion; an orphaned file is the forensic record an external observer cannot reconstruct from a shared trace. |
|
|
67
|
+
| P1 | `R-02`: re-verify `ALT-08` with `ask prepare-context review-pr`. The auditor exercised `ask review-pr`, which carries no `_truncation_summary` at all, and neither claims nor refutes the row. Add a battery assertion that pins which command owns the field, so the next round cannot spend a session on the wrong one. |
|
|
68
|
+
| P2 | `ask --help` measured 12.3 s cold and 2.9 s on immediate repetition on the audit machine, against 0.41–0.44 s on the engineering host. Consistent with residual contention in both readings; do not profile it as a command-level defect until a round measures it with `peer_invocations_at_start: 0`. |
|
|
69
|
+
| — | `migrate-check`/`migrate-apply` have answered reliably for two consecutive sessions (1/1 and 1/1, 38–39 s). Treat their path as the reference shape when bisecting the four commands that stay at zero. |
|
|
70
|
+
|
|
71
|
+
Full evidence, including the isolation methodology and the trace line counts,
|
|
72
|
+
is in
|
|
73
|
+
[`AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md).
|
|
74
|
+
|
|
3
75
|
### Release 5.9.28 — remediation batch on the 5.9.27 queue, the pool question answered in source
|
|
4
76
|
|
|
5
77
|
The P0 below it asked whether the shared worker pool tolerates concurrent
|
|
@@ -5,6 +5,69 @@
|
|
|
5
5
|
> `pack assessment` and `pack gate`, and make evidence and safe change the
|
|
6
6
|
> product surface. This roadmap must not introduce a competing product thesis.
|
|
7
7
|
|
|
8
|
+
> **RELEASE 5.9.29 — the regression battery is fully green again, and it
|
|
9
|
+
> caught two real defects on the way.** The test suite had carried twenty-one
|
|
10
|
+
> permanent failures for several releases; a permanent failure is background
|
|
11
|
+
> noise, and background noise is where a genuine regression hides. Clearing it
|
|
12
|
+
> surfaced two product defects that had been invisible: a dependency cache
|
|
13
|
+
> that ignored lockfiles, so two projects with the same manifests and
|
|
14
|
+
> different resolved versions were given each other's answer, and a merge step
|
|
15
|
+
> that silently switched off a disclosure fixed three releases ago on the
|
|
16
|
+
> default code path. Both are fixed, both are pinned by assertions that fail
|
|
17
|
+
> if the vocabulary drifts again. The release also hardens what shipped in the
|
|
18
|
+
> last one against the customer's own machine, where runs are killed by
|
|
19
|
+
> timeouts constantly, and extends the new forensic record to the two further
|
|
20
|
+
> commands the customer reports hanging.
|
|
21
|
+
|
|
22
|
+
> **THE EXPENSIVE PART OF A SECURITY AUDIT IS NOW BETWEEN 3 AND 24 TIMES
|
|
23
|
+
> FASTER, WITH THE SAME ANSWER.** The rule that dominated audit time was
|
|
24
|
+
> re-reading the whole repository from disk once for every method name it had
|
|
25
|
+
> to resolve. It reads each file once now. On a mid-size customer-shaped
|
|
26
|
+
> repository the whole audit went from 71 seconds to 8; on a larger one, from
|
|
27
|
+
> 15.5 to 12.2. The answers are byte-identical on every repository tested —
|
|
28
|
+
> that was the constraint the work was done under, and it is checked rather
|
|
29
|
+
> than asserted. The same rule also reports progress while it runs for the
|
|
30
|
+
> first time, so the stretch that used to look like a hang now shows a moving
|
|
31
|
+
> count, and a time budget can stop inside it instead of only between rules.
|
|
32
|
+
|
|
33
|
+
> **BOTH 5.9.28 P0s WORKED — the product now records where a run stopped, and
|
|
34
|
+
> the bisection came back negative.** A run that is killed or hangs leaves a
|
|
35
|
+
> small file naming what it was doing and for how long, deleted the moment it
|
|
36
|
+
> finishes normally; the next successful run reports that an earlier one
|
|
37
|
+
> stopped without being able to say so. That closes, from the inside, the gap
|
|
38
|
+
> an external auditor has been filling by hand for three rounds. The bisection
|
|
39
|
+
> the same auditor asked for ran over two large repositories and found no size
|
|
40
|
+
> at which the audit stops answering — up to 2,75× the file count of the
|
|
41
|
+
> repository that fails in the field — which removes "the repository is simply
|
|
42
|
+
> too big" from the table and leaves the platform and that repository's own
|
|
43
|
+
> content as the open variables. It also produced the first hard attribution:
|
|
44
|
+
> a single rule family accounts for 85 % of the rule phase, and it is the one
|
|
45
|
+
> the failing runs were last seen in. The payload now names it, so the next
|
|
46
|
+
> field session reads that fact instead of inferring it.
|
|
47
|
+
|
|
48
|
+
> **5.9.28 RE-AUDIT — first substantial score rise in five rounds (4.6 →
|
|
49
|
+
> 6.2/10), no regression found, and the upgrade recommended without
|
|
50
|
+
> conditions.** Five corrections were verified by the auditor with their own
|
|
51
|
+
> data rather than accepted on the changelog's word: the overload-anchoring
|
|
52
|
+
> defect tracked since the first round of this lineage is genuinely closed
|
|
53
|
+
> (the published candidate lines match annotations they had verified by hand
|
|
54
|
+
> three sessions earlier), the nested-workspace refusal answers in 373 ms
|
|
55
|
+
> where the command used to degrade for two minutes, the cache eviction
|
|
56
|
+
> contract is published for the first time in four versions, a misleading zero
|
|
57
|
+
> became an honest null, and a four-round CLI complaint now explains itself and
|
|
58
|
+
> names the right command. The concurrency telemetry is called the best
|
|
59
|
+
> instrumentation to appear in six sessions.
|
|
60
|
+
>
|
|
61
|
+
> The round's decisive measurement is the negative one, and it changes where
|
|
62
|
+
> the remaining work sits: with contention isolated to its lowest observable
|
|
63
|
+
> level in six sessions, the audit family's core command still failed every
|
|
64
|
+
> time. Machine contention was a real defect and is fixed; it was not the
|
|
65
|
+
> whole cause. The reliable subset — migration checks, endpoints, posture,
|
|
66
|
+
> impact and the PR-review path — grew and is valued by the auditor at 18–20
|
|
67
|
+
> €/dev/month, while the security-audit family stays unusable on that
|
|
68
|
+
> repository for a sixth version. The release gate is unchanged. See
|
|
69
|
+
> [`AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md).
|
|
70
|
+
|
|
8
71
|
> **RELEASE 5.9.28 — the pool question is answered, and the answer was
|
|
9
72
|
> "exclusive use".** The audit asked engineering a direct question
|
|
10
73
|
> instead of reporting another symptom, and reading the source settled it: the
|