sourcecode 5.9.28__tar.gz → 5.9.30__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.30}/CHANGELOG.md +144 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/PKG-INFO +3 -3
- {sourcecode-5.9.28 → sourcecode-5.9.30}/README.md +2 -2
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +2 -2
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md +3 -3
- sourcecode-5.9.30/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md +174 -0
- sourcecode-5.9.30/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.29.md +143 -0
- sourcecode-5.9.30/docs/AUDIT-2026-09-02-EXTERNAL-5.9.29.md +112 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/DEFECT-LEDGER.md +174 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/DEVELOPMENT-ROADMAP.md +114 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/EXECUTIVE-ROADMAP.md +109 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/USER_GUIDE.md +1 -1
- {sourcecode-5.9.28 → sourcecode-5.9.30}/pyproject.toml +1 -1
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_recipe.py +6 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cli.py +239 -20
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/concurrency.py +37 -6
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/dependency_analyzer.py +25 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detach.py +21 -1
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/empty_answer_diagnostics.py +11 -0
- sourcecode-5.9.30/src/sourcecode/inflight.py +287 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/manifest_cache.py +11 -9
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/non_coverage.py +14 -3
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/progress.py +34 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/repository_ir.py +148 -62
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/risk.py +99 -19
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/rule_pass.py +18 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_findings.py +8 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_security_audit.py +15 -2
- {sourcecode-5.9.28 → sourcecode-5.9.30}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/.github/workflows/windows-battery.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/.github/workflows/windows-regression.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/.gitignore +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/.ruff.toml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/CLAUDE.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/CONTRIBUTING.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/LICENSE +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/NOTICE +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/SECURITY.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.26.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/CACHE.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/RELEASE-VERIFICATION.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/overview.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/contracts.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/licensing-schema.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/migrate-check.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/README.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/posture.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/privacy.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/schema.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/hatch_build.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/context_cost_harness.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/perf_gate.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/perf_harness.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/test_fast.sh +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/scripts/windows_reliability_matrix.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/access_drift.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/audit_verify.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/baseline_attestation.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/c4_render.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/click_runtime.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cve_feed.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/cve_reachability.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/findings_baseline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/intent_router.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/jvm_inventory.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/license.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/packs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/pr_risk.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/regulatory_pack.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/remediation_flow.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/remediation_report.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/self_audit.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/vex.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/watch_loop.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/functions/README.md +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.9.28 → sourcecode-5.9.30}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,149 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.9.30] — 2026-09-02
|
|
4
|
+
|
|
5
|
+
*A full pass over the open queue from the two 5.9.29 field audits. Nine rows
|
|
6
|
+
closed or materially narrowed, one commit each, every change carrying its own
|
|
7
|
+
test.*
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **A run nobody is watching now leaves the same forensic trail a watched
|
|
12
|
+
one does.** The in-flight marker's stage field went blank in exactly the
|
|
13
|
+
environment it exists to observe -- off a TTY, in CI, under `NO_COLOR`,
|
|
14
|
+
piped through `timeout` -- because the code path that records a stage was
|
|
15
|
+
only ever built when the visible progress line was displayed. It no longer
|
|
16
|
+
is: the forensic write and the visible display are now independent, and the
|
|
17
|
+
auditor's own captured hang is the regression test.
|
|
18
|
+
- **`ask endpoints` names a file it could not fully parse, at any answer
|
|
19
|
+
size.** A file whose extracted symbols were not trustworthy -- a type
|
|
20
|
+
declaration that produced none, or a syntax error the extractor's
|
|
21
|
+
brace/paren check catches -- was already disclosed by `spring-audit`/`risk`
|
|
22
|
+
and silently dropped by `endpoints`, because the two commands parse the
|
|
23
|
+
same sources through two independent code paths and only one of them ran
|
|
24
|
+
the check. One shared authority now backs both.
|
|
25
|
+
- **`ask plan` refuses an unscoped run over a workspace before doing any
|
|
26
|
+
work**, the same guard `selftest` shipped last release, applied to the
|
|
27
|
+
same class of defect: a lone positional argument silently left the
|
|
28
|
+
repository path at its default `.`, and an implicit `.` covering nested Git
|
|
29
|
+
repositories used to drive a full, unvalidated analysis.
|
|
30
|
+
- **Every command that names "the repository" accepts every spelling of the
|
|
31
|
+
flag**, including the ones that declare it as an option rather than a
|
|
32
|
+
positional argument -- `compare A B --repo <path>` now works, where it used
|
|
33
|
+
to demand `--path` specifically.
|
|
34
|
+
- **The Spring-density statement names the actual number.** A repository
|
|
35
|
+
where Spring is present but marginal already got a correctly bounded
|
|
36
|
+
answer; the sentence explaining why now states the measured percentage
|
|
37
|
+
instead of leaving the reader to divide two raw counts themselves.
|
|
38
|
+
- **`--detach`'s envelope reports an absolute output path.** A relative
|
|
39
|
+
`--output` used to come back exactly as typed, unusable from outside the
|
|
40
|
+
invocation's own working directory.
|
|
41
|
+
- **Vert.x's fluent router chain is recognized as unmodeled routing
|
|
42
|
+
evidence**, closing the one framework of eleven surveyed that fell through
|
|
43
|
+
to a generic disclaimer with no file named -- `router.get("/x").handler(...)`
|
|
44
|
+
carries no annotation for the existing detection rule to match, so a second,
|
|
45
|
+
equally vendor-neutral rule was added for the call-chain shape specifically.
|
|
46
|
+
- The root `ask` command's asynchronous cache write no longer re-joins its own
|
|
47
|
+
daemon thread at process exit, which could delay returning control to the
|
|
48
|
+
caller for up to 30 seconds after the answer had already been delivered.
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
|
|
52
|
+
- `tests/test_new01_silent_empty_success_regime.py`: an automated, real-CLI
|
|
53
|
+
battery over every command that must never report success with nothing to
|
|
54
|
+
show, closing the standing request behind four consecutive rounds of
|
|
55
|
+
103-for-103 external verification.
|
|
56
|
+
|
|
57
|
+
### Investigated, Left Unchanged
|
|
58
|
+
|
|
59
|
+
- The specific mechanism behind a `verify` invocation that produced a
|
|
60
|
+
complete answer and was still killed by an external timeout remains
|
|
61
|
+
unconfirmed; one independently-discovered instance of the same failure
|
|
62
|
+
shape elsewhere in the codebase is fixed above, but `verify` does not share
|
|
63
|
+
that code path.
|
|
64
|
+
- `pack assessment`'s unbounded default output was reproduced and understood,
|
|
65
|
+
not changed: `--compact` already bounds it correctly (a prior round's own
|
|
66
|
+
fix), and the unbounded default is a deliberate, tested, opt-in answer
|
|
67
|
+
rather than an oversight. Flipping it would be a product decision affecting
|
|
68
|
+
every existing caller, not a bug fix.
|
|
69
|
+
|
|
70
|
+
## [5.9.29] — 2026-09-02
|
|
71
|
+
|
|
72
|
+
*The 5.9.28 field round's two P0s and its P1, plus the suite's first green run
|
|
73
|
+
in several releases. Where 5.9.28 answered a question about the worker pool,
|
|
74
|
+
this release answers the one about where a run stops when it stops.*
|
|
75
|
+
|
|
76
|
+
### Added
|
|
77
|
+
|
|
78
|
+
- **An in-flight marker for runs that never finish (`R-01-INFLIGHT`).** The
|
|
79
|
+
field measured four `spring-audit` hangs and could say nothing about any of
|
|
80
|
+
them: every diagnostic this product had — the envelope, the forensic sidecar
|
|
81
|
+
— lives on a path a hung run never reaches. A marker is now written when a
|
|
82
|
+
hang-prone command starts, rewritten at each phase and stage change the
|
|
83
|
+
heartbeat already reports, and deleted on the way out. A run killed
|
|
84
|
+
externally leaves `inflight/<pid>.json` naming its argv, its start time, the
|
|
85
|
+
phase and the stage it stopped in. Abandoned markers are published by a
|
|
86
|
+
later run in `_meta.incomplete_runs`, because the run that stops cannot
|
|
87
|
+
report anything itself; each row states whether it is a measurement (the
|
|
88
|
+
process is gone) or an inference (no refresh, on a platform that cannot
|
|
89
|
+
probe liveness safely). Covers the audit family plus `onboard` and
|
|
90
|
+
`remediate`, the two commands the field reports hanging outside it.
|
|
91
|
+
`ASK_NO_INFLIGHT_MARKER=1` disables it.
|
|
92
|
+
- **`timings.rule_families`** — wall time per rule family, highest first, with
|
|
93
|
+
a basis stating that it ranks cost and not complexity. The phase split could
|
|
94
|
+
say `security_rules: 12,617 ms` and never which of six families spent it.
|
|
95
|
+
|
|
96
|
+
### Fixed
|
|
97
|
+
|
|
98
|
+
- **The most expensive rule family is between 3 and 24 times faster, with a
|
|
99
|
+
byte-identical answer (P1).** `SEC-010` was 85 % of the rule phase and 35 %
|
|
100
|
+
of a whole audit; profiling found the walk under it re-reading every
|
|
101
|
+
remaining source, from disk, once per callee name it resolved — 96,399 reads
|
|
102
|
+
for 28 lookups. It indexes declarable names in the pass that already reads
|
|
103
|
+
each file once. Measured warm: `SEC-010` 10,830 → 3,246 ms on a 3,860-file
|
|
104
|
+
repository (audit 15.5 → 12.2 s) and 64,391 → 2,628 ms on an 878-file one
|
|
105
|
+
(audit 71.1 → 8.4 s), unchanged where a repository has no HTTP-input seeds.
|
|
106
|
+
`content_id` identical on all three.
|
|
107
|
+
- **That family reports while it runs, and a deadline can stop it inside.** It
|
|
108
|
+
owned the longest stretch of an audit and left one heartbeat line unchanged
|
|
109
|
+
for the whole of it, which from outside is what the field calls a hang. A
|
|
110
|
+
budget cut returns what it measured instead of surfacing as an analysis
|
|
111
|
+
error.
|
|
112
|
+
- **`manifest_cache` keyed its entries on a list that omitted every
|
|
113
|
+
lockfile.** Two repositories with identical manifests and different resolved
|
|
114
|
+
dependencies hashed the same, and the second was served the first's answer.
|
|
115
|
+
The key now reads the analyzer's own `INPUT_FILENAMES`, and a battery reads
|
|
116
|
+
that module's source and fails if it opens a file the set does not name.
|
|
117
|
+
- **`SpringAuditResult.merge()` dropped `spring_footprint`**, which switched
|
|
118
|
+
BUG-03's marginal-detection disclosure back off on every `--scope all` run —
|
|
119
|
+
the default.
|
|
120
|
+
- Machine-census leases are refreshed while a run is alive, so a killed run no
|
|
121
|
+
longer makes every later run on that machine halve its worker pool for an
|
|
122
|
+
hour; the lease directory is capped.
|
|
123
|
+
|
|
124
|
+
### Changed
|
|
125
|
+
|
|
126
|
+
- The suite is green: 13,748 tests, 0 failures. It had carried twenty-one
|
|
127
|
+
standing reds for several releases, which is how a real regression becomes
|
|
128
|
+
indistinguishable from the background. Two were the product defects above;
|
|
129
|
+
the rest were assertions that had fallen behind the code they pin, each
|
|
130
|
+
fixed or opted out with the reason stated.
|
|
131
|
+
|
|
132
|
+
### Known Limitations
|
|
133
|
+
|
|
134
|
+
- `ALT-01`/`ALT-03` remain open. The bisection the field asked for ran over two
|
|
135
|
+
corpora — 250 to 4,772 files on one, 9,195 on another — and found no size at
|
|
136
|
+
which `spring-audit` stops answering: 5.8 s to 39.6 s, sublinear, `rc=0`
|
|
137
|
+
throughout. File count alone is exonerated on this platform at up to 2.75x
|
|
138
|
+
the field repository's size. This release makes the stretch the failing runs
|
|
139
|
+
sat in several times shorter and, for the first time, visible while it
|
|
140
|
+
happens; it does not claim to have fixed the hang.
|
|
141
|
+
- The next field round should send `inflight/` and `entry-trace.jsonl`
|
|
142
|
+
together after a hang. A marker still stuck in `SEC-010` says the family is
|
|
143
|
+
not the cause; a marker in another stage moves the search there; no marker
|
|
144
|
+
at all keeps it upstream of `main_entry`.
|
|
145
|
+
- `BUG-02` and `BUG-12` still need the field's own large repository.
|
|
146
|
+
|
|
3
147
|
## [5.9.28] — 2026-09-02
|
|
4
148
|
|
|
5
149
|
*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.30
|
|
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.30 — 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.30 — 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.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Alternative External Audit - 5.9.29
|
|
2
|
+
|
|
3
|
+
*The audited repository is referred to neutrally (3,342 Java files, `repo_id
|
|
4
|
+
7fced5c877cacfc5`, dirty working tree) — the same subject as every prior round
|
|
5
|
+
in this lineage.*
|
|
6
|
+
|
|
7
|
+
## Scope And Verdict
|
|
8
|
+
|
|
9
|
+
Native-Windows re-audit, seventh round. Score **7.8/10** (5.9.22 6.6, 5.9.23
|
|
10
|
+
4.9, 5.9.25 4.3, 5.9.26 3.8, 5.9.27 4.6, 5.9.28 6.2, 5.9.29 7.8) — the largest
|
|
11
|
+
jump of the seven, and the first with a root cause found and fixed rather than
|
|
12
|
+
mitigated. Build `6df1bd2436f8b562ee173fbaf7ba499ee783f0f8`, Windows 11 Pro
|
|
13
|
+
10.0.26200, Python 3.10.0, pipx, `ask.EXE`.
|
|
14
|
+
|
|
15
|
+
**All six audit-family commands answered in this session.** The auditor's own
|
|
16
|
+
sentence: *the first time in seven rounds I can write that.*
|
|
17
|
+
|
|
18
|
+
| Invocation | 5.9.23 | 5.9.25 | 5.9.26 | 5.9.27 | 5.9.28 | 5.9.29 |
|
|
19
|
+
|---|---:|---:|---:|---:|---:|---|
|
|
20
|
+
| `spring-audit . --compact` | 0/24 | 0/18 | 0/8 | 0/5 | 0/4 | **3/4** |
|
|
21
|
+
| `verify .` | 0/24 | 0/18 | 0/5 | 0/1 | 0/1 | **2/2** (one killed at 200 s despite a complete answer — see `R-02`) |
|
|
22
|
+
| `migrate-check . --compact` | 7/12 | 4/26 | 0/5 | 1/1 | 1/1 | 1/1 |
|
|
23
|
+
| `migrate-apply .` | 14/24 | 0/26 | 0/5 | 1/1 | 1/1 | 1/1 |
|
|
24
|
+
| `risk . --limit 20` | 0/13 | 0/7 | 0/4 | 0/1 | 0/1 | **1/1**, first in six sessions |
|
|
25
|
+
| `audit-report . --format markdown` | 0/7 | 0/7 | 0/4 | 0/1 | 0/1 | **1/1**, first in six sessions |
|
|
26
|
+
| `remediate .` | — | — | hung | hung | — | **1/1**, 74.8 s, first ever |
|
|
27
|
+
|
|
28
|
+
`onboard` answered in 691 ms. `selftest` with an explicit path rose from 1/12
|
|
29
|
+
to **6/12** passing rows, which the auditor attributes to the `SEC-010` work:
|
|
30
|
+
the `ASK-16` row — does `spring-audit` publish its own timings — now passes
|
|
31
|
+
clean.
|
|
32
|
+
|
|
33
|
+
## Confirmed With The Auditor's Own Data
|
|
34
|
+
|
|
35
|
+
- **The `SEC-010` fix is real and measured.** Three successive `spring-audit`
|
|
36
|
+
runs, identical `content_id` (`4a0429c7784da360`), 385 findings each, with
|
|
37
|
+
the family's own time falling as the cache warmed: **42.8 s → 25.4 s →
|
|
38
|
+
20.0 s**. The whole command went 73.9 s → 46.9 s → 35.9 s. This is the
|
|
39
|
+
warm-cache benefit the product had promised and no session had been able to
|
|
40
|
+
observe.
|
|
41
|
+
- **`ALT-08` closed, byte-exact, with the right command this time.**
|
|
42
|
+
`ask prepare-context review-pr` — not `ask review-pr`, the confusion that
|
|
43
|
+
left the row unverified last round — gives `final_size_bytes: 93,462`,
|
|
44
|
+
matching `len(json.dumps(payload without _meta))` exactly.
|
|
45
|
+
- **The in-flight marker works, and works on the case it was built for.** It
|
|
46
|
+
captured the auditor's own hung process with phase and timestamps. It had
|
|
47
|
+
also preserved a genuine *foreign* orphan from an earlier session
|
|
48
|
+
(`audit-report thingsboard`, phase `packaging audit evidence`) that predated
|
|
49
|
+
their run — the mechanism persists orphans exactly as documented.
|
|
50
|
+
- `migrate-check`/`migrate-apply` reliable for a third consecutive session
|
|
51
|
+
(15.9 s and 14.7 s, faster than either previous round).
|
|
52
|
+
|
|
53
|
+
## `R-01` — New, Precise Evidence: The Hang Happened Before The Rules Phase
|
|
54
|
+
|
|
55
|
+
One of four `spring-audit` runs hung (200 s, 0 bytes). For the first time the
|
|
56
|
+
process left a record:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{"argv": ["spring-audit", ".", "--compact"],
|
|
60
|
+
"started_at": 1788411595.5325525,
|
|
61
|
+
"last_phase": "applying all rules over 3342 Java files [population=production_java_sources]",
|
|
62
|
+
"phase_entered_at": 1788411734.8912373,
|
|
63
|
+
"last_stage": null, "stage_entered_at": null}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`1788411734.89 − 1788411595.53 = 139.36 s` spent **before** the run entered
|
|
67
|
+
the phase that holds the rules — roughly 70 % of the time it lived. The stderr
|
|
68
|
+
heartbeat agrees: two warnings naming `auditing 3342 Java files` at one and
|
|
69
|
+
two minutes, then `applying all rules … for 41.4s` at three. On the successful
|
|
70
|
+
runs of the same session the same stretch took ~72.7 s in total, so this was
|
|
71
|
+
not a slow phase, it was an outlier by a factor the bisection never saw.
|
|
72
|
+
|
|
73
|
+
Two readings follow, and they belong to different owners:
|
|
74
|
+
|
|
75
|
+
**The auditor's inference is refutable in source.** They suspected the new
|
|
76
|
+
`seeds()` pre-index shipped for `SEC-010` had moved the cost earlier.
|
|
77
|
+
It cannot have: `_http_input_query_sinks` is called from `SEC-010`'s
|
|
78
|
+
`analyze`, which runs inside the `security_rules` phase — that is, *inside*
|
|
79
|
+
"applying all rules", after the point their marker recorded. What lives in the
|
|
80
|
+
139 s is the phase before it: the CIR build, the XML security-configuration
|
|
81
|
+
scan and the start of the semantic model, all published under one heartbeat
|
|
82
|
+
label.
|
|
83
|
+
|
|
84
|
+
**Their evidence exposes a real defect in the marker.** `last_stage: null`
|
|
85
|
+
should not have happened: the run was in a phase whose stages the heartbeat
|
|
86
|
+
does name (`parsing`, `linking`, `assembling the IR`, `scanning XML security
|
|
87
|
+
configuration`). It is null because stage capture rides on `Progress.work`,
|
|
88
|
+
and the sink that calls it is created only when the heartbeat is *enabled* —
|
|
89
|
+
which it is not off a TTY, in CI, under `NO_COLOR`, or piped through
|
|
90
|
+
`timeout`, which is the field's configuration in every one of these seven
|
|
91
|
+
sessions. The marker's most useful field is therefore blank in exactly the
|
|
92
|
+
environment it was built for. That is ours, and it is the first thing to fix.
|
|
93
|
+
|
|
94
|
+
The auditor's three instrumentation requests stand and are adopted: split the
|
|
95
|
+
`auditing N Java files` phase into visible sub-stages, publish the pre-index
|
|
96
|
+
as its own timing entry, and repeat the bisection measuring that phase
|
|
97
|
+
separately from the rules phase rather than only the total.
|
|
98
|
+
|
|
99
|
+
## `R-02` — New: A Complete Answer From A Process That Did Not Exit
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
timeout -k 5 200 ask verify .
|
|
103
|
+
# rc=124 · 200,183 ms · 5,333 bytes of stdout
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Unlike every hang in six previous sessions, this one **produced a full,
|
|
107
|
+
valid answer**: `verdict: "pass"`, `contract_count: 14`,
|
|
108
|
+
`content_id: ca00e3a40668e5bf`, `answer_bounds.complete: true`. The analysis
|
|
109
|
+
finished; the process did not leave. This is a different failure class from
|
|
110
|
+
"no answer": the work is done and the exit is late.
|
|
111
|
+
|
|
112
|
+
The auditor's own hypotheses — a non-daemon thread outliving the answer (the
|
|
113
|
+
parse worker pool, the heartbeat thread, or the concurrency lease) — are the
|
|
114
|
+
right place to look, and the last of those is this product's own recent
|
|
115
|
+
addition. Verifying that nothing this codebase starts can delay interpreter
|
|
116
|
+
shutdown after the answer is written belongs in the next round.
|
|
117
|
+
|
|
118
|
+
## Open, Unchanged
|
|
119
|
+
|
|
120
|
+
`REG-02` (`--agent` fails by default on large repositories: 1,623 MB and
|
|
121
|
+
2,572 MB observed, in the same range as three prior rounds — fourth
|
|
122
|
+
consecutive report with no functional change), `BUG-02`, `BUG-12`, `BUG-09`,
|
|
123
|
+
`BUG-23`. `pack gate --since` and `pack assessment` still do not complete
|
|
124
|
+
inside the auditor's budget, though `pack assessment` now shows granular
|
|
125
|
+
progress (`5/6 components`) where it used to fail with no sign of internal
|
|
126
|
+
movement.
|
|
127
|
+
|
|
128
|
+
## Verification Boundary
|
|
129
|
+
|
|
130
|
+
`3/4` and `1/1` are not the 25–30 repetitions per command this ledger's own
|
|
131
|
+
closure criterion requires for `ALT-01`/`ALT-03`. The auditor states plainly
|
|
132
|
+
that `R-01` leaves open the possibility that the bottleneck was moved rather
|
|
133
|
+
than removed. Their recommendation for the next round: repeat this battery at
|
|
134
|
+
that repetition count, and split the phase timings first so the answer is
|
|
135
|
+
attributable when it comes.
|
|
136
|
+
|
|
137
|
+
## Commercial Position
|
|
138
|
+
|
|
139
|
+
First report of seven where the auditor recommends *starting to evaluate*
|
|
140
|
+
`spring-audit`/`risk`/`audit-report`/`remediate` as part of a CI gate for this
|
|
141
|
+
repository, with the reservation above. Price raised to **25–30 €/dev/month**
|
|
142
|
+
for the full command set, conditional on the next session sustaining an
|
|
143
|
+
audit-family success rate above 80 %. Upgrade recommended without conditions.
|