sourcecode 5.9.29__tar.gz → 5.9.31__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.29 → sourcecode-5.9.31}/CHANGELOG.md +78 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/PKG-INFO +3 -3
- {sourcecode-5.9.29 → sourcecode-5.9.31}/README.md +2 -2
- sourcecode-5.9.31/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.29.md +143 -0
- sourcecode-5.9.31/docs/AUDIT-2026-09-02-EXTERNAL-5.9.29.md +112 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/DEFECT-LEDGER.md +70 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/DEVELOPMENT-ROADMAP.md +42 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/EXECUTIVE-ROADMAP.md +46 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/USER_GUIDE.md +1 -1
- sourcecode-5.9.31/docs/investigations/2026-09-11-ask-mcp-telemetry.md +117 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/privacy.md +13 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/pyproject.toml +1 -1
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/cli.py +172 -18
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detach.py +21 -1
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/non_coverage.py +14 -3
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/release_info.py +1 -1
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/repository_ir.py +148 -62
- {sourcecode-5.9.29 → sourcecode-5.9.31}/supabase/sql/telemetry_events.sql +2 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/.github/workflows/windows-battery.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/.github/workflows/windows-regression.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/.gitignore +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/.ruff.toml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/CLAUDE.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/CONTRIBUTING.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/LICENSE +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/NOTICE +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/SECURITY.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.28.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.26.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/CACHE.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/RELEASE-VERIFICATION.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/overview.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/contracts.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/licensing-schema.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/migrate-check.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/README.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/posture.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/schema.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/hatch_build.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/context_cost_harness.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/perf_gate.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/perf_harness.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/test_fast.sh +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/scripts/windows_reliability_matrix.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/access_drift.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/audit_verify.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/baseline_attestation.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/c4_render.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/click_runtime.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/concurrency.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/cve_feed.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/cve_reachability.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/empty_answer_diagnostics.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/findings_baseline.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/inflight.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/intent_router.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/jvm_inventory.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/license.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/packs.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/pr_risk.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/regulatory_pack.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/remediation_flow.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/remediation_report.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/self_audit.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/vex.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/watch_loop.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/supabase/functions/README.md +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.9.29 → sourcecode-5.9.31}/supabase/sql/licensing_schema.sql +0 -0
|
@@ -1,5 +1,83 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.9.31] — 2026-09-12
|
|
4
|
+
|
|
5
|
+
*Patch release correcting MCP/CLI telemetry outcomes and the telemetry schema.*
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Successful Click exits no longer appear as failed `execution_completed` events.
|
|
10
|
+
Nonzero exits and unhandled exceptions retain `success=false` and emit only
|
|
11
|
+
the exception class as `error_kind`.
|
|
12
|
+
- The telemetry schema now declares the MCP `tool` column used by the collector.
|
|
13
|
+
|
|
14
|
+
## [5.9.30] — 2026-09-02
|
|
15
|
+
|
|
16
|
+
*A full pass over the open queue from the two 5.9.29 field audits. Nine rows
|
|
17
|
+
closed or materially narrowed, one commit each, every change carrying its own
|
|
18
|
+
test.*
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- **A run nobody is watching now leaves the same forensic trail a watched
|
|
23
|
+
one does.** The in-flight marker's stage field went blank in exactly the
|
|
24
|
+
environment it exists to observe -- off a TTY, in CI, under `NO_COLOR`,
|
|
25
|
+
piped through `timeout` -- because the code path that records a stage was
|
|
26
|
+
only ever built when the visible progress line was displayed. It no longer
|
|
27
|
+
is: the forensic write and the visible display are now independent, and the
|
|
28
|
+
auditor's own captured hang is the regression test.
|
|
29
|
+
- **`ask endpoints` names a file it could not fully parse, at any answer
|
|
30
|
+
size.** A file whose extracted symbols were not trustworthy -- a type
|
|
31
|
+
declaration that produced none, or a syntax error the extractor's
|
|
32
|
+
brace/paren check catches -- was already disclosed by `spring-audit`/`risk`
|
|
33
|
+
and silently dropped by `endpoints`, because the two commands parse the
|
|
34
|
+
same sources through two independent code paths and only one of them ran
|
|
35
|
+
the check. One shared authority now backs both.
|
|
36
|
+
- **`ask plan` refuses an unscoped run over a workspace before doing any
|
|
37
|
+
work**, the same guard `selftest` shipped last release, applied to the
|
|
38
|
+
same class of defect: a lone positional argument silently left the
|
|
39
|
+
repository path at its default `.`, and an implicit `.` covering nested Git
|
|
40
|
+
repositories used to drive a full, unvalidated analysis.
|
|
41
|
+
- **Every command that names "the repository" accepts every spelling of the
|
|
42
|
+
flag**, including the ones that declare it as an option rather than a
|
|
43
|
+
positional argument -- `compare A B --repo <path>` now works, where it used
|
|
44
|
+
to demand `--path` specifically.
|
|
45
|
+
- **The Spring-density statement names the actual number.** A repository
|
|
46
|
+
where Spring is present but marginal already got a correctly bounded
|
|
47
|
+
answer; the sentence explaining why now states the measured percentage
|
|
48
|
+
instead of leaving the reader to divide two raw counts themselves.
|
|
49
|
+
- **`--detach`'s envelope reports an absolute output path.** A relative
|
|
50
|
+
`--output` used to come back exactly as typed, unusable from outside the
|
|
51
|
+
invocation's own working directory.
|
|
52
|
+
- **Vert.x's fluent router chain is recognized as unmodeled routing
|
|
53
|
+
evidence**, closing the one framework of eleven surveyed that fell through
|
|
54
|
+
to a generic disclaimer with no file named -- `router.get("/x").handler(...)`
|
|
55
|
+
carries no annotation for the existing detection rule to match, so a second,
|
|
56
|
+
equally vendor-neutral rule was added for the call-chain shape specifically.
|
|
57
|
+
- The root `ask` command's asynchronous cache write no longer re-joins its own
|
|
58
|
+
daemon thread at process exit, which could delay returning control to the
|
|
59
|
+
caller for up to 30 seconds after the answer had already been delivered.
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
|
|
63
|
+
- `tests/test_new01_silent_empty_success_regime.py`: an automated, real-CLI
|
|
64
|
+
battery over every command that must never report success with nothing to
|
|
65
|
+
show, closing the standing request behind four consecutive rounds of
|
|
66
|
+
103-for-103 external verification.
|
|
67
|
+
|
|
68
|
+
### Investigated, Left Unchanged
|
|
69
|
+
|
|
70
|
+
- The specific mechanism behind a `verify` invocation that produced a
|
|
71
|
+
complete answer and was still killed by an external timeout remains
|
|
72
|
+
unconfirmed; one independently-discovered instance of the same failure
|
|
73
|
+
shape elsewhere in the codebase is fixed above, but `verify` does not share
|
|
74
|
+
that code path.
|
|
75
|
+
- `pack assessment`'s unbounded default output was reproduced and understood,
|
|
76
|
+
not changed: `--compact` already bounds it correctly (a prior round's own
|
|
77
|
+
fix), and the unbounded default is a deliberate, tested, opt-in answer
|
|
78
|
+
rather than an oversight. Flipping it would be a product decision affecting
|
|
79
|
+
every existing caller, not a bug fix.
|
|
80
|
+
|
|
3
81
|
## [5.9.29] — 2026-09-02
|
|
4
82
|
|
|
5
83
|
*The 5.9.28 field round's two P0s and its P1, plus the suite's first green run
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.9.
|
|
3
|
+
Version: 5.9.31
|
|
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.31 — 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.31 — and, on a build that has aged,
|
|
245
245
|
# how many releases have probably shipped since
|
|
246
246
|
```
|
|
247
247
|
|
|
@@ -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.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# External Audit - 5.9.28 and 5.9.29
|
|
2
|
+
|
|
3
|
+
*The multi-repository lineage: 57 commands, no additions or removals, 127
|
|
4
|
+
recorded invocations plus a full flag/alias sweep, 21 repositories. Two rounds
|
|
5
|
+
arrived together and are recorded together.*
|
|
6
|
+
|
|
7
|
+
## Verdicts
|
|
8
|
+
|
|
9
|
+
| Round | Score | Character |
|
|
10
|
+
|---|---:|---|
|
|
11
|
+
| 5.9.28 | **8.4/10** (from 8.1) | One bug closed, one structural correction |
|
|
12
|
+
| 5.9.29 | **8.5/10** | Consolidation — nothing closed, nothing regressed |
|
|
13
|
+
|
|
14
|
+
Weighted axes for 5.9.29: precision 9.5, recall 7.5, epistemic honesty 9.5,
|
|
15
|
+
determinism 9.5, robustness 9.5, performance 7.0, CLI ergonomics 7.0,
|
|
16
|
+
CI/agent integration 8.5, functional breadth 9.0.
|
|
17
|
+
|
|
18
|
+
## 5.9.28 — Two Closures Worth Recording
|
|
19
|
+
|
|
20
|
+
**`BUG-13` closed, and the auditor names it the pattern to replicate.**
|
|
21
|
+
`ask selftest` in a workspace of 31 nested repositories went from `rc=124`
|
|
22
|
+
after 45 s of unvalidated work to `rc=2` in 41 ms with `INVALID_USAGE`, the
|
|
23
|
+
nested count, and `--allow-nested` as the stated escape. Their words: *exactly
|
|
24
|
+
the correction I asked for in the 5.9.22 report — validate before starting,
|
|
25
|
+
count the nested repositories, offer a conscious way through.*
|
|
26
|
+
|
|
27
|
+
**`BUG-10`/`BUG-23` received the most substantial structural correction of the
|
|
28
|
+
five audited versions.** `zero_result_reason` and `unmodeled_routing_evidence`
|
|
29
|
+
were verified across 11 heterogeneous repositories: 198 files of Micronaut
|
|
30
|
+
annotations in one, 52 of Servlets in another (with a third prose `warnings`
|
|
31
|
+
field), 6 of `@Route`/`@WebSocket` in a third; `null` where a repository has
|
|
32
|
+
endpoints, confirmed explicitly. The auditor's summary: *you cannot promise
|
|
33
|
+
detection of a framework you have not implemented, but you can stop pretending
|
|
34
|
+
absence of detection is absence of surface.*
|
|
35
|
+
|
|
36
|
+
**The residual they name:** a fluent router DSL (`router.get(...).handler(...)`)
|
|
37
|
+
carries no annotation and no path literal, so it produces neither evidence nor
|
|
38
|
+
a declared gap — one repository of the eleven is left with the generic
|
|
39
|
+
disclaimer alone. `BUG-10` moves from *open, dangerous silence* to *partially
|
|
40
|
+
closed, with a known and now explicitly flagged residual case*.
|
|
41
|
+
|
|
42
|
+
## 5.9.29 — A Consolidation Round
|
|
43
|
+
|
|
44
|
+
Nothing from the ledger closed, nothing regressed. The auditor calls this out
|
|
45
|
+
as a different kind of good news: everything corrected in 5.9.26–5.9.28
|
|
46
|
+
(`BUG-13`, `BUG-15`, `BUG-17`, `BUG-21`, `BUG-10`/`BUG-23`) holds under
|
|
47
|
+
repetition, and the coverage sweep's figures are **byte-identical** to the
|
|
48
|
+
previous session across the eleven repositories — evidence the corrections are
|
|
49
|
+
stable rather than one-build accidents.
|
|
50
|
+
|
|
51
|
+
`NEW-01` (silent empty success): fourth consecutive clean version, **103/103
|
|
52
|
+
cumulative** since 5.9.26, this time with both `--agent` runs in parallel and
|
|
53
|
+
another session working the same directory. The standing request is unchanged
|
|
54
|
+
and is not about more measurement: *publish the regime row in the ledger — the
|
|
55
|
+
explanation of what fixed it and an automated assertion — so closure does not
|
|
56
|
+
depend on a recurring external audit.*
|
|
57
|
+
|
|
58
|
+
## Performance, And A Retraction The Auditor Makes Themselves
|
|
59
|
+
|
|
60
|
+
A general speed-up across the critical battery: `risk` on a 4,772-file
|
|
61
|
+
repository 110.7 s → 45.4 s (−59 %), `spring-audit` on a mid-size one
|
|
62
|
+
99.6/95.0/102.4 s → 19.7/17.9/19.1 s (−80 %), `audit-report` 99.6/95.0/102.4 s
|
|
63
|
+
→ 89.9/63.0/35.8 s.
|
|
64
|
+
|
|
65
|
+
`REG-03` — the warm-path measurement — moved the other way on the same pair of
|
|
66
|
+
consecutive invocations: −22.4 % (5.9.27), −9.2 % (5.9.28), **+24.0 %**
|
|
67
|
+
(5.9.29), while the absolute cold time fell 69.1 s → 21.9 s. Their conclusion,
|
|
68
|
+
stated as a correction of their own earlier report: *the variable that
|
|
69
|
+
dominates `spring-audit` time on this machine is system load at the moment of
|
|
70
|
+
measurement, not ASK's cache state.* They withdraw their 5.9.27 claim of *the
|
|
71
|
+
first real warm-cache gain ever observed* to **possible, not confirmed**, and
|
|
72
|
+
recommend the team not treat external performance measurements on this metric
|
|
73
|
+
as benchmarks without load control.
|
|
74
|
+
|
|
75
|
+
## Open, With Their Priority Order
|
|
76
|
+
|
|
77
|
+
| # | Row | State |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| 1 | `NEW-01` regime row | 103/103 is extremely strong evidence; the product's own systematic guarantee is what is missing |
|
|
80
|
+
| 2 | `REG-02` | `--agent` fails by default, fourth consecutive version |
|
|
81
|
+
| 3 | `BUG-14` | `ask plan <repo>` still hangs 45 s with no validation and an empty stderr — the same class as `BUG-13`, documented for four rounds, and the fix pattern now exists in the product |
|
|
82
|
+
| 4 | `BUG-01` | A file with a parse error disappears with no signal (`total: 1`, only `/ok`). `zero_result_reason` only fires at `total: 0`, so the honesty pattern needs extending to per-file parse failures at any total |
|
|
83
|
+
| 5 | `BUG-03` | `spring_detected: true` and 0 defects over 2,340 files at 5 % Spring density |
|
|
84
|
+
| 6 | Vert.x / Ktor evidence | The one residual case of `BUG-10` with no evidence at all |
|
|
85
|
+
| 7 | `BUG-11` | `pack assessment` returns `OUTPUT_TOO_LARGE` by default |
|
|
86
|
+
| 8 | Remainder | `BUG-09` flag vocabulary, `BUG-20` unresolved POSIX path under `--detach`, polish |
|
|
87
|
+
|
|
88
|
+
`BUG-16`: `~/.sourcecode/` measured at 2.4 GB (context cache 1.8 GB). The
|
|
89
|
+
eviction contracts published in 5.9.29 are confirmed present via `cache
|
|
90
|
+
status`; what the auditor still records as open is the size itself, not the
|
|
91
|
+
disclosure. `diagnostics/` grew to 30 KB across three consecutive releases of
|
|
92
|
+
internal instrumentation (`entry-trace.jsonl`, `live/`, `inflight/`) — noted
|
|
93
|
+
explicitly as observability, not a problem.
|
|
94
|
+
|
|
95
|
+
## What Held
|
|
96
|
+
|
|
97
|
+
Exact endpoints (17/17 on a reference repository), the security chain 3/3, the
|
|
98
|
+
`verify` gate through pass → injected regression → fail without a miss in six
|
|
99
|
+
audits, `SEC-010` stable for a sixth consecutive version with no false
|
|
100
|
+
positives, byte-identical determinism apart from `peak_rss_mb`, benign
|
|
101
|
+
concurrency 6/6, and 91 command/variant combinations in the surface sweep with
|
|
102
|
+
no empty answer and no correctness regression.
|
|
103
|
+
|
|
104
|
+
## Commercial Position
|
|
105
|
+
|
|
106
|
+
**$750 / developer / year**, raised from $650 in 5.9.28 and unchanged in
|
|
107
|
+
5.9.29 — no new correction to justify a rise, no regression to justify a fall.
|
|
108
|
+
Held below the $900 ceiling by `REG-02` and the routing-DSL gap. Worth buying,
|
|
109
|
+
*with the highest confidence of the five audits*. `spring-audit`/`risk`/
|
|
110
|
+
`audit-report` are considered reasonable CI-gate candidates keeping
|
|
111
|
+
`len(stdout) > 0` as a cheap safety net; `--agent` on large repositories still
|
|
112
|
+
needs `ASK_MAX_RSS_MB=0` or `≥3072`.
|
|
@@ -14,6 +14,76 @@ 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.30`, nine rows worked on the 5.9.29 queue (2026-09-02)
|
|
18
|
+
|
|
19
|
+
**A full pass over the open queue from the two 5.9.29 audits, one commit per
|
|
20
|
+
row, batteries run against every change.** Nine rows closed or materially
|
|
21
|
+
narrowed; two — `R-02` and the `pack assessment` default — investigated and
|
|
22
|
+
left open with the reasoning recorded, rather than guessed at.
|
|
23
|
+
|
|
24
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
25
|
+
|---|---:|---|---|
|
|
26
|
+
| `R-01-INFLIGHT` (stage capture) | High | **closed** | `Progress.work()`'s sink was built only when the visible heartbeat was *enabled* — false off a TTY, in CI, under `NO_COLOR`, and piped through `timeout`, the field's configuration in all seven sessions. `_work_sink`/`_rule_pass_progress` now build the sink whenever a `Progress`/deadline object exists at all: `Progress.work()` is cheap regardless of whether it prints (a lock, a tuple compare, `_beat()`'s own internal `enabled` check), so an unwatched run's hang now records its stage exactly as a watched one does. Two invariant tests that pinned the old contract are updated to the corrected one; two new tests assert the unwatched case directly. |
|
|
27
|
+
| `R-02` (the process does not exit) | High | **one confirmed instance fixed, not proven to be the field's exact mechanism** | Auditing every background thread and process pool in this codebase found one genuine defect of this shape: the root `ask` command's async cache write started a `daemon=True` thread — specifically so an unfinished write could not hold up exit — and then registered `atexit.register(_cache_write_thread.join, 30.0)`, re-joining it anyway. Removed. `verify` itself does not go through this code path, so this is not asserted to be the auditor's exact mechanism; it is a real, independently confirmed instance of the same failure class, fixed on the same principle the codebase already states elsewhere (`parse_cache._delete_behind`): a daemon thread's unfinished work costs the next run a cache miss, not the caller a wait after their answer already arrived. |
|
|
28
|
+
| `BUG-14` | High | **closed** | Same class as `BUG-13`, the pattern named by request: `plan TARGET [PATH]` read a lone positional as the change target, leaving `path` at its default `.` — over a workspace of nested repositories, that drove a full IR build with no validation. The same nested-repository guard now refuses before any build starts, naming the count, with `--allow-nested`, and the hint explicitly names the grammar confusion (`plan` reads a lone argument as the target, not the repository). |
|
|
29
|
+
| `BUG-01` | Critical maximum | **widened, closed for `endpoints`** | `build_repo_ir` already detected a file whose extracted symbols are not trustworthy and published it as `parse_failures`; `extract_java_endpoints` parses the same sources through its own independent loop and never ran that check. The exact field shape (`total: 1`, one file silently missing) had no honesty pattern to catch it — `zero_result_reason` only fires when the whole answer is empty. `_parse_health_row` is now the one authority both extractors call (`build_repo_ir`'s own behaviour verified byte-identical against its existing battery); `endpoints` publishes `parse_failures`/`parse_failures_basis` whenever non-empty, at any total. |
|
|
30
|
+
| `NEW-01` (regime row) | High | **closed** | 103/103 across four consecutive external rounds was never going to be closed by a fifth measurement — the ask was the product's own guarantee. `tests/test_new01_silent_empty_success_regime.py` runs the real CLI dispatch (not the guard functions mocked in isolation, which a separate existing file already covers) across the whole `REQUIRED_ANSWER_COMMANDS` population against a real fixture repository, and fails if any of them ever reports success with nothing behind it — verified non-vacuous before committing (5 of 6 commands exit 0 with 10-27 KB real payloads on the fixture; `verify` exits its own documented 2 for no contracts declared). |
|
|
31
|
+
| `BUG-03` (statement half) | High | **closed** | The merge-half fix (previous round) already made every audit-family surface correctly classify a majority non-Spring stack as `fit: "partial"` — verified end to end on struts (1,488 Java files, 5 beans) across `spring-audit`, `risk`, `posture` and `audit-report` (inherits it via the other two). What the audit's "mismo stack_fit.statement sin proporción" still named: the statement said only "marginal" in prose, with the raw counts published beside it but not divided for the reader. It now states the density directly — "5 of 1488 Java files carry a Spring bean (0.34%)" — and a `spring_density_pct` field carries the same number for a machine reader, published only on the partial branch. |
|
|
32
|
+
| `BUG-20` | Low | **closed** | The `--detach` envelope's `output` field carried whatever string the operator typed, with nothing saying which directory it was relative to — unusable from outside that invocation's shell. `_resolved_output_path` joins a relative path against the invocation's own root with `.absolute()`, not `.resolve()`: it states where the path points without canonicalising symlinks nobody asked to have normalised away, which is also what keeps the existing detach battery's exact-path assertions passing on macOS (`/var/...` vs `/private/var/...`). |
|
|
33
|
+
| `BUG-09` | Medium | **closed** | AUD-597-D06 unified three repository-flag spellings across the catalogue, but its mechanism only ever moved an alias into an empty *positional* slot. `compare`'s repository is the declared option `--path`, not a positional, so `compare A B --repo <r>` was never recognised — four rounds hit this exact repro. `_normalise_repository_option_flag` covers the second shape: where a command declares its repository as an option named `path`/`repo`/`dir`, any other alias is rewritten to the declared one, in place, with the same duplicate-spelling guard the positional case already has. |
|
|
34
|
+
| `BUG-10` (Vert.x residual) | Medium | **closed for Vert.x; Ktor stays out of scope** | The one repository of eleven left with only the generic disclaimer: Vert.x's Router is a fluent call chain (`router.get("/x").handler(...)`) with no `@` anywhere, structurally invisible to the annotation-shaped evidence rule. A second, equally vendor-neutral rule now catches it — an HTTP-verb method called with one path-like literal, chained into a handler-attachment call — guarded against firing on unrelated code (`Map.get("/key")` with no handler chain, a bare `.route().handler()` with no path). Ktor's routing DSL lives in `.kt` files, which this extractor never reads; extending file discovery to a second language is a different, larger change than this row. |
|
|
35
|
+
| `pack assessment` default | — | **investigated, left unchanged, reasoning recorded** | Reproduced on spring-petclinic: the unbounded default is 68.5K estimated tokens (over the 50K ceiling), `--compact` brings it to 35KB (well under). `--compact` genuinely bounds it — this was AUD-600-B02's own fix, verified still holding. The unbounded default measuring 2.29M tokens on a larger repository (that round's own number) makes clear the full report is a deliberately unbounded, opt-in answer, not an oversight: flipping the default would need a `--compact/--no-compact` toggle pair (today only `--compact` is declared) and would change behaviour for every existing caller who relies on the current default producing the full report on a repository small enough not to hit the ceiling. Left as a product-default question rather than changed unilaterally. |
|
|
36
|
+
|
|
37
|
+
Suite: run in full after the batch, same population as the last recorded
|
|
38
|
+
green run — see the commit history for the exact count. One vacuous
|
|
39
|
+
assertion introduced earlier in the session by this same battery (`or True`
|
|
40
|
+
in a stage-capture test) was caught by the suite's own mutation-testing
|
|
41
|
+
battery and fixed in the same pass, not left for an eighth round to find.
|
|
42
|
+
|
|
43
|
+
## Current Synchronization — Two audits of `5.9.29`: the audit family answers, and the marker's own gap (2026-09-02)
|
|
44
|
+
|
|
45
|
+
**Both lineages report the release positively and neither found a regression.**
|
|
46
|
+
The multi-repository round scores **8.5/10** (8.4 for 5.9.28, from 8.1) and
|
|
47
|
+
calls 5.9.29 a consolidation: nothing closed, nothing regressed, and the
|
|
48
|
+
coverage sweep byte-identical to the previous session across eleven
|
|
49
|
+
repositories — the 5.9.26–5.9.28 corrections hold under repetition rather than
|
|
50
|
+
being one-build accidents. The native-Windows round scores **7.8/10**, its
|
|
51
|
+
largest jump in seven, and reports the sentence six sessions could not
|
|
52
|
+
produce: **all six audit-family commands answered.** `spring-audit` 3/4,
|
|
53
|
+
`verify` 2/2, `risk` 1/1 and `audit-report` 1/1 (both firsts in six sessions),
|
|
54
|
+
`migrate-check`/`migrate-apply` 1/1 each, `remediate` 1/1 at 74,8 s after two
|
|
55
|
+
rounds of hanging. Full evidence:
|
|
56
|
+
[`AUDIT-2026-09-02-ALTERNATIVE-5.9.29.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.29.md)
|
|
57
|
+
and [`AUDIT-2026-09-02-EXTERNAL-5.9.29.md`](AUDIT-2026-09-02-EXTERNAL-5.9.29.md).
|
|
58
|
+
|
|
59
|
+
**The `SEC-010` work is confirmed from the field, with their numbers:** three
|
|
60
|
+
successive runs, one `content_id` (`4a0429c7784da360`), 385 findings each, and
|
|
61
|
+
the family's own clock falling 42,8 → 25,4 → 20,0 s as the cache warmed. The
|
|
62
|
+
command went 73,9 → 46,9 → 35,9 s. `selftest` rose from 1/12 to 6/12 passing
|
|
63
|
+
rows on the same deadline.
|
|
64
|
+
|
|
65
|
+
**And the in-flight marker did its job on the first try — including against
|
|
66
|
+
us.** It captured a hang, and what it captured contradicts part of what this
|
|
67
|
+
ledger assumed. See `R-01` below.
|
|
68
|
+
|
|
69
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
70
|
+
|---|---:|---|---|
|
|
71
|
+
| `R-01` (phase attribution) | Critical maximum | **open, sharpest evidence in seven rounds** | The marker on the one hung run: `started_at` 1788411595,53 and `phase_entered_at` 1788411734,89 — **139,36 s spent before the run reached "applying all rules"**, about 70 % of the time it lived, with the stderr heartbeat agreeing (two warnings naming `auditing 3342 Java files`, then the rules phase for 41,4 s). The successful runs of the same session covered that whole stretch in ~72,7 s. The auditor's inference that the new `seeds()` pre-index moved the cost earlier is **refutable in source**: `_http_input_query_sinks` is called from `SEC-010`'s `analyze`, inside the `security_rules` phase — after the point their marker recorded. What sits in those 139 s is the CIR build, the XML security-configuration scan and the start of the semantic model, all published under one heartbeat label. Required work, adopted from their three requests: split that phase into visible sub-stages, publish the pre-index as its own timing entry, and repeat the bisection measuring that phase separately from the rules phase rather than only the total. |
|
|
72
|
+
| `R-01-INFLIGHT` (stage capture) | High | **open, defect in what 5.9.29 shipped, found by their evidence** | Their capture reads `last_stage: null` for the ~60 s the run spent in the rules phase, and null through the 139 s before it — in a phase whose stages the heartbeat does name. The cause is ours: stage capture rides on `Progress.work`, and the sink that calls it is built only when the heartbeat is **enabled**, which it is not off a TTY, in CI, under `NO_COLOR`, or piped through `timeout` — the field's configuration in all seven sessions. The marker's most useful field is therefore blank in exactly the environment it was built for. Closure: record the stage regardless of whether anything is watching. |
|
|
73
|
+
| `R-02` (the process does not exit) | High | **open, new failure class** | `timeout -k 5 200 ask verify .` returned `rc=124` with **5 333 bytes of a complete, valid answer** — `verdict: pass`, `contract_count: 14`, `content_id: ca00e3a40668e5bf`, `answer_bounds.complete: true`. Six sessions of hangs produced 0 bytes; this one finished the work and did not leave. Distinct from `ALT-01`/`ALT-03` and to be tracked apart: the analysis is not the problem here, the exit is. Candidates, one of them this product's own recent addition: a non-daemon thread outliving the answer — the parse worker pool, the heartbeat thread, or the concurrency lease. Closure: prove nothing this codebase starts can delay interpreter shutdown after the answer is written. |
|
|
74
|
+
| `SEC-010` cost | Medium | **closed 5.9.29, confirmed in the field** | Three runs, identical `content_id`, 42,8 → 25,4 → 20,0 s with the cache warming. The warm-path benefit the product promised and no session had observed. |
|
|
75
|
+
| `ALT-08` (arithmetic half) | Low | **closed, field verification received** | `ask prepare-context review-pr` — the correct command this time — gives `final_size_bytes: 93 462`, matching `len(json.dumps(payload without _meta))` byte for byte. |
|
|
76
|
+
| `ALT-01` / `ALT-03` | Critical maximum | **open, materially narrowed** | 3/4 and six families answering is the best measurement of seven rounds and is not the 25–30 repetitions per command this ledger requires. `R-01` above leaves open that the bottleneck was moved rather than removed, and this ledger does not close a row on a hypothesis it has just been given evidence against. |
|
|
77
|
+
| `NEW-01` (regime row) | High | **open, and the request is not for more measurement** | 103/103 across four consecutive versions in the multi-repository lineage. What is asked for is the product's own guarantee: the explanation of what fixed it, published in this ledger, plus an automated regime assertion, so closure stops depending on a recurring external audit. |
|
|
78
|
+
| `BUG-14` | High | **open, fourth round, fix pattern already exists here** | `ask plan <repo>` still hangs to an external kill at 45 s with an empty stderr, because a repository path is accepted where the signature reads `TARGET [PATH]`. Same class as `BUG-13`, which 5.9.28 closed by validating before starting, counting what it found and offering `--allow-nested`. The auditor asks for that pattern, by name, on this row. |
|
|
79
|
+
| `BUG-01` | Critical maximum | **open, and the honesty pattern needs widening** | A file with a parse error still disappears with no signal (`total: 1`, only `/ok`). `zero_result_reason` fires only at `total: 0`, so the disclosure that closed `BUG-10` does not reach this shape. Required: name files excluded by a parse failure at **any** total, not only when the answer is empty. |
|
|
80
|
+
| `BUG-10` (routing DSL residual) | Medium | **partially closed, residual named** | `unmodeled_routing_evidence` verified across 11 repositories (198 files of Micronaut annotations, 52 of Servlets, 6 of `@Route`/`@WebSocket`) and `null` where a repository has endpoints. A fluent router DSL carries no annotation and no path literal, so it yields neither evidence nor a declared gap — one repository of eleven is left with the generic disclaimer alone. |
|
|
81
|
+
| `REG-03` | Medium | **the auditor retracts their own claim** | The warm-path delta went −22,4 % → −9,2 % → **+24,0 %** on the same pair of consecutive invocations while absolute cold time fell 69,1 → 21,9 s. Their conclusion: system load at the moment of measurement dominates this metric, not ASK's cache state, and their 5.9.27 report of *the first real warm-cache gain ever observed* is withdrawn to "possible, not confirmed". Recorded here because a retraction by the party who made the claim is evidence, and because this product must not quote that figure as a benchmark either. |
|
|
82
|
+
| `REG-02` | Critical | **open, fourth consecutive round** | `--agent` fails by default on large repositories (1 623 MB and 2 572 MB observed, same range as three prior rounds, no trend either way). |
|
|
83
|
+
| `BUG-16` | Medium | **disclosure closed, size open** | The eviction contracts shipped in 5.9.29 are confirmed present through `cache status`. What the auditor still records is the size: 2,4 GB total, 1,8 GB of it the context cache. The contract this product publishes for that store is entry count and age, not bytes — which is honest and is also why the store can be this large. Whether it should have a byte budget is the open half. |
|
|
84
|
+
| `BUG-13`, `BUG-15`, `BUG-17`, `BUG-21`, `BUG-08`, `BUG-10`/`BUG-23` | — | **closed, stable under repetition** | Re-verified across four to five consecutive versions with no sign of relapse, and byte-identical coverage figures between the last two sessions. |
|
|
85
|
+
| `BUG-09`, `BUG-11`, `BUG-20`, `BUG-02`, `BUG-12`, `BUG-03` | — | **open, unchanged** | Flag vocabulary, `pack assessment` returning `OUTPUT_TOO_LARGE` by default (now with granular progress where it used to fail silently), an unresolved POSIX path under `--detach`, and the three rows that need the field's own large repository. |
|
|
86
|
+
|
|
17
87
|
## Current Synchronization — Release `5.9.29`, hardening pass and a green suite (2026-09-02)
|
|
18
88
|
|
|
19
89
|
**The suite is green — 13 748 tests, 0 failures — for the first time in
|
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# ASK — Development Roadmap
|
|
2
2
|
|
|
3
|
+
### Release 5.9.30 — remediation batch on the 5.9.29 queue, nine rows worked
|
|
4
|
+
|
|
5
|
+
Full pass over the two 5.9.29 audits' open queue. Closed or materially
|
|
6
|
+
narrowed: `R-01-INFLIGHT` stage capture, `BUG-14`, `BUG-01` (widened to
|
|
7
|
+
`endpoints`), the `NEW-01` regime battery, `BUG-03`'s statement half,
|
|
8
|
+
`BUG-20`, `BUG-09`, and `BUG-10`'s Vert.x residual. Investigated and left
|
|
9
|
+
open with the reasoning recorded: one confirmed-but-unproven `R-02` instance
|
|
10
|
+
(a defeated daemon-thread join in the root command, fixed; not shown to be
|
|
11
|
+
`verify`'s own mechanism), and `pack assessment`'s unbounded default (a
|
|
12
|
+
deliberate, tested design per `AUD-600-B02`, not an oversight).
|
|
13
|
+
|
|
14
|
+
| Priority | Required work and closure boundary |
|
|
15
|
+
|---|---|
|
|
16
|
+
| P0 | **Split the `auditing N Java files` phase into visible sub-stages, and publish the `seeds()` pre-index as its own timing entry.** Unchanged from last round — the stage-capture fix means this phase's *sub-stages* (`parsing`, `linking`, `assembling the IR`, `scanning XML security configuration`) now reach the marker, but the phase itself is still one `timings.phases` entry (`cir_build`) with no further breakdown published in the JSON payload. Worth doing only if a field round's marker still points at this stretch specifically. |
|
|
17
|
+
| P1 | **`R-02`, still open.** The confirmed instance (root command's cache-write thread) is fixed; `verify` itself never went through that code path, so the field's exact mechanism is unproven. If a future round reproduces a complete-answer-but-no-exit shape again, get a thread dump or `py-spy dump` at the hang, not another timing measurement — this class of bug is invisible to anything that only reads stdout/exit code. |
|
|
18
|
+
| P2 | `BUG-16`'s remaining half: the context cache's disclosed contract is entry-count-and-age, not bytes, and that is honest about what bounds *one repository's* directory — but the field measured `~/.sourcecode/` at 2.4 GB total across a whole audit campaign's worth of repositories, which no per-repo cap reaches. A cross-repository byte budget is a real feature (enumerate every per-repo cache directory under the context-cache root, evict globally by LRU) and deserves its own design pass, not a quick patch alongside nine other rows. |
|
|
19
|
+
| — | `REG-02` unchanged: `--agent`'s 1,536 MB default ceiling refuses on repositories the field considers "large" (1.6-2.6 GB peaks measured). `BUG-22` (5.9.28) already made the ceiling's *enforcement* correct at any repository size; whether 1,536 MB is the right *default* for this product's target repository sizes is a product-policy question, not a code defect — raising it unilaterally was not done here. |
|
|
20
|
+
|
|
21
|
+
### Audit Intake — two rounds on 5.9.29: the family answers, the marker exposes us
|
|
22
|
+
|
|
23
|
+
Both lineages report positively and neither found a regression. The
|
|
24
|
+
multi-repository round scores 8.5/10 and calls the release a consolidation —
|
|
25
|
+
its coverage sweep is byte-identical to the previous session across eleven
|
|
26
|
+
repositories. The native-Windows round scores 7.8/10, its largest jump in
|
|
27
|
+
seven, with all six audit-family commands answering and the `SEC-010` work
|
|
28
|
+
confirmed from the field (three runs, one `content_id`, 42,8 → 25,4 → 20,0 s
|
|
29
|
+
as the cache warmed).
|
|
30
|
+
|
|
31
|
+
The most valuable thing either round produced is the first captured hang, and
|
|
32
|
+
it points at us twice.
|
|
33
|
+
|
|
34
|
+
| Priority | Required work and closure boundary |
|
|
35
|
+
|---|---|
|
|
36
|
+
| P0 | **Record the stage regardless of who is watching.** The captured marker reads `last_stage: null` because stage capture rides on `Progress.work`, and that sink is built only when the heartbeat is *enabled* — false off a TTY, in CI, under `NO_COLOR`, and piped through `timeout`, which is the field's configuration in all seven sessions. The marker's most useful field is blank in exactly the environment it was built for. |
|
|
37
|
+
| P0 | **Split the `auditing N Java files` phase into visible sub-stages, and publish the `seeds()` pre-index as its own timing entry.** The captured hang spent 139,36 s — ~70 % of its life — before reaching the rules phase, against ~72,7 s for that whole stretch on the session's successful runs. The auditor's guess that the new pre-index moved the cost there is refutable in source (it runs inside `security_rules`), but the phase they are pointing at is genuinely one label over the CIR build, the XML scan and the semantic model, and nothing published tells those apart. Then repeat the bisection measuring that phase separately from the rules phase. |
|
|
38
|
+
| P0 | **`R-02`: a complete answer from a process that did not exit.** `verify` wrote 5 333 bytes — `verdict: pass`, `content_id`, `answer_bounds.complete: true` — and was still killed at 200 s. Prove nothing this codebase starts can delay interpreter shutdown after the answer is written: the parse worker pool, the heartbeat thread, and the concurrency lease, the last of which is ours from 5.9.28. |
|
|
39
|
+
| P1 | **`BUG-14`, asked for by name for the fourth round.** `ask plan <repo>` hangs to an external kill with an empty stderr. `BUG-13` closed this exact class in 5.9.28 — validate before starting, count what was found, offer the conscious way through. Apply that pattern here. |
|
|
40
|
+
| P1 | **`BUG-01`: widen the honesty pattern past `total: 0`.** A file with a parse error still vanishes with no signal at `total: 1`, because `zero_result_reason` only fires on an empty answer. Name files excluded by a parse failure at any total. |
|
|
41
|
+
| P1 | **`NEW-01`: publish the regime row.** 103/103 over four versions is the strongest evidence an external audit can produce, and it is still external. What is owed is this product's own guarantee — the mechanism written into the ledger plus an automated assertion. |
|
|
42
|
+
| P2 | `REG-02` (fourth consecutive round), the routing-DSL residual of `BUG-10` (a fluent router carries neither annotation nor path literal, so the evidence rule cannot see it), `BUG-11`, `BUG-09`, `BUG-20`. |
|
|
43
|
+
| — | **Do not quote `REG-03` as a benchmark.** The auditor withdrew their own "first real warm-cache gain" claim after the same measurement inverted (−22,4 % → −9,2 % → +24,0 %) while absolute cold time fell 69,1 → 21,9 s. System load dominates that metric on their machine; this product should not cite it either. |
|
|
44
|
+
|
|
3
45
|
### Release 5.9.29 — hardening pass, green suite
|
|
4
46
|
|
|
5
47
|
The suite is green (13 748 / 0) for the first time in several releases. Two of
|
|
@@ -5,6 +5,52 @@
|
|
|
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.30 — nine rows from the 5.9.29 audit queue worked in one
|
|
9
|
+
> batch, each with its own commit and its own test.** The field's exact repro for a file that
|
|
10
|
+
> silently vanishes from an endpoint count now names the file, at any answer
|
|
11
|
+
> size, not only when the whole answer was empty. A four-round-old CLI
|
|
12
|
+
> ergonomics complaint (`compare A B --repo <r>` refused, demanded `--path`
|
|
13
|
+
> instead) is fixed the same way the product already fixed its sibling case.
|
|
14
|
+
> A command asked for by name for the fourth straight round now refuses an
|
|
15
|
+
> unscoped run over a workspace before doing any expensive work, instead of
|
|
16
|
+
> hanging for 45 seconds with nothing on the screen. And the forensic marker
|
|
17
|
+
> shipped last release — which a field auditor used to catch its first real
|
|
18
|
+
> hang — had a blind spot of its own: it went silent in exactly the
|
|
19
|
+
> environment it exists to observe. Fixed, with the auditor's own capture as
|
|
20
|
+
> the regression test.
|
|
21
|
+
>
|
|
22
|
+
> Two items were investigated and deliberately left alone, with the reasoning
|
|
23
|
+
> written down rather than guessed at: a process that finishes its work but
|
|
24
|
+
> is slow to exit (one confirmed, related defect fixed elsewhere; the
|
|
25
|
+
> specific command reported is not proven to share it), and a command whose
|
|
26
|
+
> default output is large by design, per an earlier round's own testing —
|
|
27
|
+
> changing that default would be a product decision, not a bug fix, and was
|
|
28
|
+
> left to be made deliberately rather than as a side effect of this pass.
|
|
29
|
+
|
|
30
|
+
> **TWO INDEPENDENT AUDITS OF 5.9.29 — the audit commands answer, and the
|
|
31
|
+
> forensic record we shipped paid for itself immediately.** The
|
|
32
|
+
> multi-repository reviewer scores the release 8.5/10 and calls it a
|
|
33
|
+
> consolidation: nothing regressed, and the coverage figures across eleven
|
|
34
|
+
> repositories are byte-identical to the previous session, which is the
|
|
35
|
+
> evidence that the last three releases' corrections hold rather than being
|
|
36
|
+
> lucky builds. The native-Windows reviewer — the one whose repository has
|
|
37
|
+
> failed for seven rounds — scores it 7.8/10, their largest jump, and reports
|
|
38
|
+
> for the first time that **every command in the security-audit family
|
|
39
|
+
> answered**. The performance fix from last release is confirmed with their own
|
|
40
|
+
> numbers, three runs producing an identical answer while the cost fell by half
|
|
41
|
+
> as the cache warmed.
|
|
42
|
+
>
|
|
43
|
+
> The instrument added last release captured its first real hang, and what it
|
|
44
|
+
> captured argues against part of our own diagnosis: most of that run's life
|
|
45
|
+
> was spent before the phase we had profiled. It also exposed a defect in the
|
|
46
|
+
> instrument itself — the field it was built for is blank in precisely the
|
|
47
|
+
> environment it was built for, because it only fills in when a progress
|
|
48
|
+
> display is switched on, and in the customer's setup it never is. Both are now
|
|
49
|
+
> the top of the work queue, along with a new and narrower failure the same
|
|
50
|
+
> session found: a command that produced a complete, correct answer and then
|
|
51
|
+
> failed to exit. That is a better problem than the one this product started
|
|
52
|
+
> the month with.
|
|
53
|
+
|
|
8
54
|
> **RELEASE 5.9.29 — the regression battery is fully green again, and it
|
|
9
55
|
> caught two real defects on the way.** The test suite had carried twenty-one
|
|
10
56
|
> permanent failures for several releases; a permanent failure is background
|