sourcecode 5.9.26__tar.gz → 5.9.28__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.26 → sourcecode-5.9.28}/CHANGELOG.md +116 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/PKG-INFO +3 -3
- {sourcecode-5.9.26 → sourcecode-5.9.28}/README.md +2 -2
- sourcecode-5.9.28/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md +102 -0
- sourcecode-5.9.28/docs/AUDIT-2026-09-02-EXTERNAL-5.9.26.md +70 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/DEFECT-LEDGER.md +175 -1
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/DEVELOPMENT-ROADMAP.md +72 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/EXECUTIVE-ROADMAP.md +57 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/USER_GUIDE.md +1 -1
- {sourcecode-5.9.26 → sourcecode-5.9.28}/pyproject.toml +1 -1
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/cache.py +81 -4
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/cli.py +190 -7
- sourcecode-5.9.28/src/sourcecode/concurrency.py +264 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/context_cache.py +43 -2
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/degradation.py +15 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/empty_answer_diagnostics.py +65 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/output_budget.py +49 -10
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/parallel.py +35 -2
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/remediation_report.py +3 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/repository_ir.py +149 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/resource_budget.py +106 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_impact.py +17 -3
- {sourcecode-5.9.26 → sourcecode-5.9.28}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/.github/workflows/windows-battery.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/.github/workflows/windows-regression.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/.gitignore +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/.ruff.toml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/CLAUDE.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/CONTRIBUTING.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/LICENSE +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/NOTICE +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/SECURITY.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-28-EXTERNAL-5.9.10.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.16.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-31-EXTERNAL-5.9.17.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-08-31-REMEDIATION-5.9.18.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-09-01-ALTERNATIVE-5.9.23.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.22.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-09-01-EXTERNAL-5.9.23.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-09-02-ALTERNATIVE-5.9.25.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-2026-09-02-EXTERNAL-5.9.25.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/CACHE.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/RD-JVM-ASK-TRIAGE-2026-08-31.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/RELEASE-VERIFICATION.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/overview.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/contracts.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/licensing-schema.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/migrate-check.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/README.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/5.9.22/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/5.9.22/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/posture.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/privacy.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/schema.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/hatch_build.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/context_cost_harness.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/perf_gate.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/perf_harness.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/test_fast.sh +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/scripts/windows_reliability_matrix.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/access_drift.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/audit_verify.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/baseline_attestation.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/c4_render.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/click_runtime.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/cve_feed.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/cve_reachability.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/findings_baseline.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/intent_router.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/jvm_inventory.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/license.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/packs.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/pr_risk.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/regulatory_pack.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/remediation_flow.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/self_audit.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/vex.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/watch_loop.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/supabase/functions/README.md +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.9.26 → sourcecode-5.9.28}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,121 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.9.28] — 2026-09-02
|
|
4
|
+
|
|
5
|
+
*Remediation batch on the 5.9.27 audit queue: nine rows, one commit each. The
|
|
6
|
+
round's own P0 — "does the shared worker pool tolerate concurrent `ask`
|
|
7
|
+
processes on one machine, or assume exclusive use?" — is answered here in
|
|
8
|
+
source, and the answer was exclusive use.*
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Concurrent invocations no longer size their worker pools as if each owned
|
|
13
|
+
the machine (`R-01`).** `parallel.default_jobs()` returned `cpu_count() - 1`
|
|
14
|
+
per process, so `k` concurrent runs started `k x (N-1)` parsing workers on
|
|
15
|
+
`N` cores and nothing in any payload said the machine had been shared. A
|
|
16
|
+
best-effort census of live invocations now divides that budget, and
|
|
17
|
+
`_meta.concurrency` publishes peers at start, whether the budget was shared,
|
|
18
|
+
and that a shared run is not an isolated-machine measurement. `cache._gc`
|
|
19
|
+
defers eviction while a peer is live, so a sweep cannot delete the working
|
|
20
|
+
set a concurrent run is reading. `ASK_NO_CONCURRENCY_CENSUS=1` restores the
|
|
21
|
+
previous behaviour.
|
|
22
|
+
- **The RSS ceiling stops a run where it is crossed (`BUG-22`, `REG-02`'s
|
|
23
|
+
enforcement half).** The check ran at phase boundaries only, so a phase
|
|
24
|
+
could allocate without bound and be refused after it finished — the field's
|
|
25
|
+
2,029.92 MB peak under a 1,536 MB ceiling that was genuinely in force. The
|
|
26
|
+
ceiling is now sampled inside the parse loop (throttled to one footprint
|
|
27
|
+
sample per 0.5 s) and raises a typed refusal rendered as the same
|
|
28
|
+
`MEMORY_TOO_LARGE` envelope, instead of `EXECUTION_FAILED`.
|
|
29
|
+
- **A routing style this model does not read is published rather than reported
|
|
30
|
+
as an absent surface (`BUG-10`).** `unmodeled_routing_evidence` names the
|
|
31
|
+
files declaring an annotation whose argument is a path-like string literal
|
|
32
|
+
that produced no endpoint — a rule that names no framework. Measured:
|
|
33
|
+
`struts` reports 4 files under `@Action`/`@Namespace` where the answer used
|
|
34
|
+
to say nothing was found.
|
|
35
|
+
- **Overloaded handlers publish their ambiguity (`NEW-02`/`BUG-05`).** The
|
|
36
|
+
symbol index is keyed `Class#method` without parameter types, so every
|
|
37
|
+
overload collapsed onto the last declaration scanned. Entries now carry
|
|
38
|
+
`overload_count`, `anchor_ambiguity` and `anchor_candidate_lines`; an
|
|
39
|
+
unambiguous anchor carries none of it.
|
|
40
|
+
- **`selftest` refuses an unscoped run over nested repositories (`BUG-13`).**
|
|
41
|
+
It warned and then ran the ledger against the whole workspace. The implicit
|
|
42
|
+
`.` now refuses with `INVALID_USAGE` before any row runs; `--allow-nested`
|
|
43
|
+
is there for a caller who means it.
|
|
44
|
+
- **Every cache store publishes what evicts it (`BUG-16`).** The context
|
|
45
|
+
cache's 30-day TTL and 256-entry cap lived inside `_gc`, so ~1.7 GB of
|
|
46
|
+
growth had no readable contract. `cache status` now prints each store's
|
|
47
|
+
eviction contract, read from the same authority the sweep uses.
|
|
48
|
+
- **`_truncation_summary` accounts for its own bytes (`ALT-08`).**
|
|
49
|
+
`final_size_bytes` was measured before the summary and note were attached;
|
|
50
|
+
it is now measured over the assembled payload, with `content_size_bytes`
|
|
51
|
+
keeping the trimmed-content figure under a name that says which it is.
|
|
52
|
+
- **`impact-chain` publishes a null audit share when no audit ran
|
|
53
|
+
(`ALT-25`).** `metadata.audit_time_ms` was always ~0.0 on the default path —
|
|
54
|
+
the elapsed time of *not* running an opt-in repository-wide audit, under a
|
|
55
|
+
name readers compare against `query_time_ms`.
|
|
56
|
+
- **`retrieve security-surface --target` says why it has no anchor.** Four
|
|
57
|
+
rounds were answered "No such option: --target". The refusal now states that
|
|
58
|
+
the intent is repository-wide and names `security-chain --target`, derived
|
|
59
|
+
from `intent_router.ANCHOR_KINDS`.
|
|
60
|
+
|
|
61
|
+
### Known Limitations
|
|
62
|
+
|
|
63
|
+
- `ALT-01`/`ALT-03` remain open. This release removes the contention mechanism
|
|
64
|
+
the 5.9.27 round evidenced; it does not explain the one hang observed with
|
|
65
|
+
nothing else running. The next field round should re-measure with
|
|
66
|
+
`_meta.concurrency` attached — `peer_invocations_at_start: 0` beside a
|
|
67
|
+
failure separates contention from whatever remains.
|
|
68
|
+
- `BUG-02` (`rc=127` with no output) and `BUG-12` (multi-gigabyte RSS while
|
|
69
|
+
building a small answer) still need the field's own large repository.
|
|
70
|
+
`BUG-22`'s in-phase sampler bounds the second one's damage without closing
|
|
71
|
+
it.
|
|
72
|
+
- `ask --help` measures 0.41-0.44 s on the engineering host against
|
|
73
|
+
14.4-14.7 s in the field under confirmed contention. Not a refutation — a
|
|
74
|
+
different machine — and a reason to re-measure before profiling it as a
|
|
75
|
+
standalone defect.
|
|
76
|
+
- The release gate is unchanged: do not use the audit-command family to gate
|
|
77
|
+
unattended CI until the field re-measures.
|
|
78
|
+
|
|
79
|
+
## [5.9.27] — 2026-09-02
|
|
80
|
+
|
|
81
|
+
*Follow-up from the 5.9.26 re-audit — a sharper instrumentation lead and a
|
|
82
|
+
CLI-ergonomics regression.*
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
|
|
86
|
+
- `remediation-report` still accepts any repository path for invocation
|
|
87
|
+
consistency, but now discloses `path_argument: {given, used: false}`
|
|
88
|
+
whenever one is passed, whether or not it exists — a real path, no path,
|
|
89
|
+
and a nonexistent path no longer produce byte-identical, silently
|
|
90
|
+
misleading output.
|
|
91
|
+
|
|
92
|
+
### Changed
|
|
93
|
+
|
|
94
|
+
- Added a bounded entry-point trace (`record_entry_reached`) as the literal
|
|
95
|
+
first statement of the CLI entry point, scoped to the six audit-family
|
|
96
|
+
commands the empty-`exit 0` defect affects. The follow-up audit's
|
|
97
|
+
forensic sidecar never fired across 32 observed empty answers; this
|
|
98
|
+
answers a narrower question directly — did the failing process reach
|
|
99
|
+
this product's own entry point at all — instead of leaving it inferable
|
|
100
|
+
only from an absent failure record.
|
|
101
|
+
|
|
102
|
+
### Known Limitations
|
|
103
|
+
|
|
104
|
+
- The empty-`exit 0` failure across `spring-audit`, `verify`, `risk`,
|
|
105
|
+
`audit-report`, `migrate-check` and `migrate-apply` (`ALT-01`/`ALT-03`)
|
|
106
|
+
remains open. The 5.9.26 re-audit found the diagnostic sidecar added to
|
|
107
|
+
instrument it never fired in 32 observed occurrences — evidence the
|
|
108
|
+
failure happens before this product's own entry-point wrapper runs, not
|
|
109
|
+
inside a caught exception. The new entry-point trace targets exactly that
|
|
110
|
+
question; the underlying mechanism is still unconfirmed.
|
|
111
|
+
- `--agent`'s RSS ceiling enforcement timing (`REG-02`) and `spring-audit`
|
|
112
|
+
warm-path performance (`REG-03`) are unchanged and need the field's own
|
|
113
|
+
large repository to validate safely.
|
|
114
|
+
- The re-audit's own report was internally inconsistent this round (an
|
|
115
|
+
initial pass found 0/23 empty answers, a later pass in the same session
|
|
116
|
+
found 0/35 successful answers); neither reading is treated as regime
|
|
117
|
+
evidence on its own.
|
|
118
|
+
|
|
3
119
|
## [5.9.26] — 2026-09-02
|
|
4
120
|
|
|
5
121
|
*Fix queue from the two 5.9.25 re-audits (multi-repository and native-Windows).*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.9.
|
|
3
|
+
Version: 5.9.28
|
|
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.28 — 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.28 — and, on a build that has aged,
|
|
245
245
|
# how many releases have probably shipped since
|
|
246
246
|
```
|
|
247
247
|
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Alternative External Audit - 5.9.27
|
|
2
|
+
|
|
3
|
+
## Scope And Verdict
|
|
4
|
+
|
|
5
|
+
Native-Windows re-audit on the same MSAS repository (3,342 Java files) used
|
|
6
|
+
in every prior round. Score **4.6/10**, the first uptick in four rounds (5.9.22
|
|
7
|
+
6.6, 5.9.23 4.9, 5.9.25 4.3, 5.9.26 3.8). The uptick carries a large
|
|
8
|
+
qualification discovered mid-session: this audit's own machine was shared
|
|
9
|
+
with a second, independent automated process, and that materially changes
|
|
10
|
+
how the four-round erratic-failure pattern should be read.
|
|
11
|
+
|
|
12
|
+
## Priority Finding — Confirmed Shared-Machine Contention
|
|
13
|
+
|
|
14
|
+
The auditor found the shared `entry-trace.jsonl` diagnostic file (added in
|
|
15
|
+
5.9.27 to answer whether audit-family commands reach `main_entry`) growing
|
|
16
|
+
with invocations they never launched, against five OSS reference
|
|
17
|
+
repositories (`thingsboard`, `mall`, `struts`, `spring-petclinic`,
|
|
18
|
+
`jhipster-sample-app`) under the same `timeout N ask ...` harness pattern the
|
|
19
|
+
auditor uses. `Get-CimInstance Win32_Process` confirmed a live process under
|
|
20
|
+
the same Windows user actively running `ask.exe risk mall --limit 20` at the
|
|
21
|
+
time of inspection — not background noise, a second real test harness on the
|
|
22
|
+
same machine, same user, same shared `~/.sourcecode` cache and diagnostics
|
|
23
|
+
directory. Two of the auditor's own `spring-audit . --compact` hangs
|
|
24
|
+
overlapped a 525-second window in which 34 foreign invocations were traced.
|
|
25
|
+
|
|
26
|
+
This reframes, but does not resolve, the standing question. If ASK's shared
|
|
27
|
+
worker pool and cache do not isolate concurrent `ask` processes on one
|
|
28
|
+
machine, contention could produce exactly the observed pattern — the same
|
|
29
|
+
command sometimes hanging, sometimes returning empty near-instantly, with no
|
|
30
|
+
per-process variable distinguishing the two. It does not explain everything
|
|
31
|
+
(one hang occurred right after the trace went quiet for 20 seconds with
|
|
32
|
+
nothing else running), so contention is documented as a real, evidenced
|
|
33
|
+
contributing factor, not a proven sole cause.
|
|
34
|
+
|
|
35
|
+
## Integrity Note
|
|
36
|
+
|
|
37
|
+
This round's ledger entry for 5.9.26 described a two-pass, self-contradictory
|
|
38
|
+
session ("an initial 129-invocation pass ... 0/23 ... 7.4/10, then a second
|
|
39
|
+
pass ... 0/35 ... 3.8/10"). This auditor states plainly that the first pass
|
|
40
|
+
and its 7.4/10 score do not correspond to anything they ran or reported. Given
|
|
41
|
+
the newly confirmed shared-machine contention, the likely explanation is that
|
|
42
|
+
5.9.26's report mixed observations from two concurrent, independent audit
|
|
43
|
+
sessions on the same machine (the MSAS/native-Windows lineage and a
|
|
44
|
+
multi-repository "testing/" corpus lineage matching the five OSS repos found
|
|
45
|
+
in the trace this round) rather than one evaluator's two passes. Recorded as
|
|
46
|
+
an open provenance question, not resolved either way — see
|
|
47
|
+
[`DEFECT-LEDGER.md`](DEFECT-LEDGER.md) for how this changes the 5.9.26 record.
|
|
48
|
+
|
|
49
|
+
## Priority Regressions
|
|
50
|
+
|
|
51
|
+
None newly introduced. The audit-command family remains the standing issue:
|
|
52
|
+
`spring-audit`, `verify`, `risk`, `audit-report` stayed at 0 successful
|
|
53
|
+
answers in this session's isolated (non-overlapping) invocations;
|
|
54
|
+
`migrate-check` and `migrate-apply` each answered once, both immediately
|
|
55
|
+
after the foreign trace activity appeared to quiet down — noted as a
|
|
56
|
+
correlation worth cross-referencing against `entry-trace.jsonl`, not asserted
|
|
57
|
+
as causal.
|
|
58
|
+
|
|
59
|
+
## Verified Improvements
|
|
60
|
+
|
|
61
|
+
- **The entry-point trace (5.9.27's response to last round's `R-01`) works as
|
|
62
|
+
designed**: the auditor's own invocations — `verify .`, `migrate-apply .`,
|
|
63
|
+
`risk . --limit 20`, `audit-report . --format markdown`, `risk . -o
|
|
64
|
+
promise.json` — now appear in `entry-trace.jsonl` even when they return
|
|
65
|
+
empty or hang. This confirms `main_entry` is reached on the failing runs,
|
|
66
|
+
closing the question the previous round's diagnostic gap left open. The
|
|
67
|
+
`empty_answer_diagnostics.record()` sidecar still never fires on any
|
|
68
|
+
observed failure, which narrows the search specifically to somewhere
|
|
69
|
+
between `main_entry` and the output-promise guard — a materially smaller
|
|
70
|
+
surface than "somewhere in the process" three rounds ago.
|
|
71
|
+
- `selftest`'s itemized gaps (last round's fix) confirmed: `"10 ledger row(s)
|
|
72
|
+
could not run: ASK-16, B6, E-37, ..."` replaces the prior generic slug.
|
|
73
|
+
- `ALT-09` (piped refusal on `cache clear`) reconfirmed a third consecutive
|
|
74
|
+
session.
|
|
75
|
+
- `BUG-15`/`BUG-21` (markup leak, `--jobs` range) reconfirmed.
|
|
76
|
+
- `migrate-check`/`migrate-apply` produced complete, reasonably sized
|
|
77
|
+
payloads (37.5 KB/41s and 9.5 KB/46s) on the runs that did answer.
|
|
78
|
+
|
|
79
|
+
## Open, Unchanged
|
|
80
|
+
|
|
81
|
+
- `onboard .` remains the single most erratic measurement across rounds:
|
|
82
|
+
904ms to a full 200-second external kill within the same session, same
|
|
83
|
+
invocation, same tree, no changes between runs.
|
|
84
|
+
- `ask --help` measured 14.4-14.7s this session, worse than the 3-4s the
|
|
85
|
+
5.9.26 ledger entry flagged as worth its own row "if it persists" — it has
|
|
86
|
+
persisted across two rounds now. May share `R-01`'s contention signature;
|
|
87
|
+
not verified in isolation this session.
|
|
88
|
+
- `watch`'s ~55s index-warm-before-first-tick is unchanged and correctly
|
|
89
|
+
understood as real cost, not a defect, per the prior round's correction.
|
|
90
|
+
- `retrieve security-surface --target` still rejects `--target` as an unknown
|
|
91
|
+
option, unchanged across four rounds.
|
|
92
|
+
|
|
93
|
+
## Verification Boundary
|
|
94
|
+
|
|
95
|
+
Session ran on a machine independently confirmed to be shared with a second,
|
|
96
|
+
concurrent `ask` test harness during at least part of the observation window.
|
|
97
|
+
Reliability figures in this round should be read as measured under
|
|
98
|
+
uncontrolled, real contention, not as an isolated single-process baseline.
|
|
99
|
+
The auditor's own recommendation: repeat `spring-audit . --compact` x3 on
|
|
100
|
+
both a reference repo and MSAS in the same clean window, nothing else
|
|
101
|
+
running, to separate "the repository" from "the shared machine" as the
|
|
102
|
+
variable.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# External Audit - 5.9.26
|
|
2
|
+
|
|
3
|
+
## Release Status
|
|
4
|
+
|
|
5
|
+
This session is internally contradictory, and both halves are published rather
|
|
6
|
+
than resolved into one number. An initial 129-invocation pass replicating the
|
|
7
|
+
exact 5.9.23/5.9.25 methodology found **zero** empty-`exit 0` answers (0/23 on
|
|
8
|
+
the precise invocations that gave 18.4% in 5.9.25), scoring the release
|
|
9
|
+
**7.4/10**. A second, larger pass in the same session — prompted by trying to
|
|
10
|
+
find the forensic sidecar `ALT-01`'s fix is supposed to write on every guard
|
|
11
|
+
trip — found **zero successful answers** across 35 further invocations of the
|
|
12
|
+
same command family, and revised the verdict down to **3.8/10**, the lowest of
|
|
13
|
+
four audited releases. The auditor's own final position is the second number;
|
|
14
|
+
the first is published as a retracted intermediate reading, not a competing
|
|
15
|
+
conclusion.
|
|
16
|
+
|
|
17
|
+
## Priority Finding — the diagnostic guard is not being reached
|
|
18
|
+
|
|
19
|
+
`empty_answer_diagnostics.record()` is documented to write a sidecar and stamp
|
|
20
|
+
`diagnostics_path` in the error envelope every time either exit guard fires.
|
|
21
|
+
Across 32 empty `exit 0` answers this session (stdout **and** stderr both at 0
|
|
22
|
+
bytes), no sidecar file exists anywhere on the audited machine, and no error
|
|
23
|
+
envelope was ever printed. This does not mean the guard is miscalibrated — it
|
|
24
|
+
means the failing runs are not reaching `main_entry`'s wrapper at all. A
|
|
25
|
+
one-line "reached the guard" debug log at that entry point would confirm this
|
|
26
|
+
directly and is the most actionable next step across four audit rounds.
|
|
27
|
+
|
|
28
|
+
## Priority Regressions
|
|
29
|
+
|
|
30
|
+
1. `NEW-01`/`ALT-01`/`ALT-03` (the audit-command family): 0 of 35 invocations
|
|
31
|
+
answered this session, the worst of four rounds, and for the first time a
|
|
32
|
+
single batch of identical `spring-audit . --compact` calls produced both
|
|
33
|
+
failure shapes — a 200s hang and a near-instant empty answer — without
|
|
34
|
+
changing anything between them.
|
|
35
|
+
2. `ALT-10`/onboard: a cold run hit the external 200s kill entirely (worse
|
|
36
|
+
than 5.9.25's 164.9s worst case); a second, untouched run answered in
|
|
37
|
+
83.5s — still roughly 120x the historical 681-780ms baseline.
|
|
38
|
+
3. `BUG-17` regression, reconfirmed: `remediation-report` with no path, a
|
|
39
|
+
real path, and a nonexistent path all return byte-identical output. This
|
|
40
|
+
is not a false claim about a repository (the command never claims to
|
|
41
|
+
have read one) but is CLI-ergonomics regression from an explicit
|
|
42
|
+
`INVALID_USAGE` in 5.9.22/23/25.
|
|
43
|
+
|
|
44
|
+
## Verified Improvements
|
|
45
|
+
|
|
46
|
+
- `ALT-09` (piped refusal on `cache clear`) confirmed working exactly as
|
|
47
|
+
fixed: `echo n | ask cache clear .` now aborts with `rc=1` and leaves the
|
|
48
|
+
cache untouched.
|
|
49
|
+
- `ALT-04`/`ALT-05` (content-id stability, findings reconciliation) both
|
|
50
|
+
reconfirmed with fresh measurements.
|
|
51
|
+
- `BUG-01` (unbalanced-parens parse-structure signal) verified with the
|
|
52
|
+
auditor's own constructed fixture, not just the shipped test suite.
|
|
53
|
+
- `BUG-15`/`BUG-21` (markup leak, `--jobs` range) both reconfirmed.
|
|
54
|
+
- `ALT-11` (`watch` startup event): confirmed working, with a measurement
|
|
55
|
+
correction — the auditor's own first attempt used too short an observation
|
|
56
|
+
window (8-20s) and nearly mis-reported this as broken. The index warm on
|
|
57
|
+
the 3,342-file audited repository takes 51.7s before the first NDJSON
|
|
58
|
+
line, which is real and not a defect, but is long enough to still read as
|
|
59
|
+
hung without foreknowledge.
|
|
60
|
+
|
|
61
|
+
## Verification Boundary
|
|
62
|
+
|
|
63
|
+
This session ran under heavier contention than any prior round: up to five
|
|
64
|
+
concurrent ASK processes on the same machine and cache directory (the
|
|
65
|
+
auditor's own batches plus a second, independent agent session exercising the
|
|
66
|
+
same corpus in parallel), with system free RAM as low as 3.4-4.6 GB of 32 GB.
|
|
67
|
+
The audit-family failure did not correlate cleanly with this contention in
|
|
68
|
+
either direction this session — it was both absent (first pass, under the
|
|
69
|
+
heaviest contention observed) and total (second pass). No stable trigger
|
|
70
|
+
variable has been isolated in four audit rounds.
|
|
@@ -14,6 +14,180 @@ 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.28`, nine rows closed on the 5.9.27 queue (2026-09-02)
|
|
18
|
+
|
|
19
|
+
**`R-01`'s architectural question is answered in source, and the answer was
|
|
20
|
+
"exclusive use".** `parallel.default_jobs()` returned `cpu_count() - 1` for
|
|
21
|
+
each process independently, so `k` concurrent `ask` invocations started
|
|
22
|
+
`k × (N-1)` parsing workers on `N` cores — and no field in any payload said the
|
|
23
|
+
run had been sharing the machine. That is what four rounds of "same command,
|
|
24
|
+
sometimes fast, sometimes hung, no per-process variable distinguishing the two"
|
|
25
|
+
looks like from outside. The cache was *not* the same kind of defect: writes
|
|
26
|
+
are unique-temp + `os.replace` with retry and every read is guarded, so a
|
|
27
|
+
concurrent writer degrades a peer to a cache miss; the one operation that hurt
|
|
28
|
+
a peer was eviction, which now defers while a peer is live.
|
|
29
|
+
|
|
30
|
+
Every row marked **fixed** below is closed in release `5.9.28`; the two
|
|
31
|
+
open rows say what closure still needs. This batch does not claim to close
|
|
32
|
+
the erratic-failure row — one hang was
|
|
33
|
+
observed with nothing else running, and that is unexplained. It removes the
|
|
34
|
+
mechanism the 5.9.27 round evidenced, and gives the next round the variable it
|
|
35
|
+
did not have: `_meta.concurrency` on every answer.
|
|
36
|
+
|
|
37
|
+
**Measured here, for the two latency rows:** `ask --help` is 0.41–0.44 s on
|
|
38
|
+
this machine over three consecutive runs (the audit measured 14.4–14.7 s under
|
|
39
|
+
confirmed contention). That is not a refutation of the field figure — it is a
|
|
40
|
+
different machine — but it does put the row behind `R-01` rather than beside
|
|
41
|
+
it, and the next round can separate them with the disclosure block above.
|
|
42
|
+
|
|
43
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
44
|
+
|---|---:|---|---|
|
|
45
|
+
| `R-01` (contention) | Critical maximum | **mechanism removed, row open pending field re-measure** | `concurrency.py` keeps a best-effort census of live invocations (one lease per process, swept by pid liveness on POSIX and lease age everywhere — never `os.kill(pid, 0)` on Windows, where CPython maps a non-console signal onto `TerminateProcess` and the POSIX idiom would kill the peer it was counting). `parallel.default_jobs()` divides the worker budget by that census; `cache._gc` defers eviction while a peer is live; `_meta.concurrency` publishes peers at start, whether the budget was shared, and that a shared run is not an isolated-machine measurement. `ASK_NO_CONCURRENCY_CENSUS=1` restores the previous behaviour. Closure needs a field round measuring the same commands with the block attached. |
|
|
46
|
+
| `BUG-22` / `REG-02` (enforcement half) | High | **fixed** | The ceiling was checked at phase boundaries only, so a phase could allocate without bound and be refused once it finished — the 2 029.92 MB peak under a 1 536 MB ceiling that was genuinely in force. `resource_budget` now arms a ceiling, samples it inside the parse loop (throttled to one footprint sample per 0.5 s; a per-file call costs one clock read) and raises a typed `CeilingExceeded` that the CLI renders as the same `MEMORY_TOO_LARGE` refusal the boundary check emits. Deliberately not a sampler thread: a thread can see the crossing but cannot unwind the main thread anywhere safe. `_meta.memory.enforcement` publishes when the ceiling is checked. |
|
|
47
|
+
| `BUG-10` | High | **fixed** | The zero-endpoint answer had four named detections and everything else fell through to "no recognized routing construct was found", which reads as *no HTTP surface*. `unmodeled_routing_evidence` now publishes files declaring an annotation whose argument is a path-like string literal that produced no endpoint — a rule that names no framework, per this repository's vendor-agnostic convention. Measured: `struts` reports 4 files under `@Action`/`@Namespace` where the answer used to say nothing was found; `spring-petclinic` reports none. |
|
|
48
|
+
| `NEW-02` / `BUG-05` | High | **fixed** | Overloaded handlers all inherited the final overload's line because the symbol index is keyed `Class#method` with no parameter types. The extractor has no signature to disambiguate with, so the row's other branch applies: `overload_count`, `anchor_ambiguity` and `anchor_candidate_lines` are published per entry, with `anchor_ambiguity_note` once beside the list, and an unambiguous anchor carries none of it. |
|
|
49
|
+
| `BUG-13` | High | **fixed** | `selftest .` over nested repositories warned and then ran the ledger against the workspace — the shape behind `selftest` falling from 9/12 to 1/12 rows inside one 120 s deadline. The implicit `.` now refuses with `INVALID_USAGE` before any row runs, naming the count, with `--allow-nested` for a caller who means the workspace. |
|
|
50
|
+
| `BUG-16` | High | **fixed** | The context cache's caps (30-day TTL, 256 entries) were real and lived inside `_gc`, so ~1.7 GB of growth had no readable contract. `cache.eviction_contract()` and `context_cache.eviction_contract()` are now the one authority each `_gc` reads, and `cache status` publishes them per store in JSON and text. The parse store already published its budget; its block projects those same figures rather than measuring them again. |
|
|
51
|
+
| `ALT-08` (arithmetic half) | Low | **fixed** | `_truncation_summary.final_size_bytes` was measured before the summary and `_budget_note` were attached, so the one part of the payload the accounting omitted was the accounting. It is now measured over the assembled object and republished to a fixed point, with `final_size_basis` written before the fixed point is sought and `content_size_bytes` keeping the trimmed-content figure under a name that says which it is. |
|
|
52
|
+
| `ALT-25` (`impact-chain` audit clock) | Low | **fixed** | `metadata.audit_time_ms` was always ~0.0 on the default path and the 5.9.25 round read it as a security phase skipped by `ALT-03`. It is not: `include_findings` is opt-in, so the clock measured the elapsed time of *not* running an audit. It is `null` when `findings_status` is `not_computed`, and `query_time_basis` states the rule. |
|
|
53
|
+
| `retrieve security-surface --target` | Low | **fixed** | Four rounds tried it and got "No such option: --target". The intent is repository-wide by construction, and the refusal now says so and names `security-chain --target`, derived from `intent_router.ANCHOR_KINDS` rather than a second list. |
|
|
54
|
+
| `ask --help` latency | Low | **open, not reproduced here** | 0.41–0.44 s over three runs on the engineering host against 14.4–14.7 s in the field under confirmed contention. Re-measure with `_meta.concurrency` attached before treating it as its own row. |
|
|
55
|
+
| `ALT-07` (`remediate` hang), `ALT-10` (`onboard`) | Medium | **open, unchanged** | Both share the erratic signature `R-01` now instruments. No separate mechanism found in source this round; neither reproduces on the engineering host. |
|
|
56
|
+
| `BUG-02`, `BUG-12` | Critical maximum | **open, unchanged** | Both need the field's own large repository to reproduce (`rc=127` with no output; multi-gigabyte RSS while building a small answer). `BUG-22`'s sampler bounds the second one's damage without closing it. |
|
|
57
|
+
|
|
58
|
+
## Current Synchronization — Alternative External Audit `5.9.27`, shared-machine contention confirmed (2026-09-02)
|
|
59
|
+
|
|
60
|
+
**First score uptick in four rounds (3.8 → 4.6/10), with a large
|
|
61
|
+
qualification found mid-session: the audit machine was shared with a second,
|
|
62
|
+
independent `ask` test harness.** The native-Windows auditor found
|
|
63
|
+
`entry-trace.jsonl` (this ledger's own diagnostic, added last round) growing
|
|
64
|
+
with invocations they never launched, against five OSS reference
|
|
65
|
+
repositories under the exact same `timeout N ask ...` harness pattern they
|
|
66
|
+
use, and confirmed a live foreign `ask.exe` process via `Get-CimInstance
|
|
67
|
+
Win32_Process` under their own Windows user. Two of their own `spring-audit`
|
|
68
|
+
hangs overlapped a 525-second window of 34 foreign invocations. Full
|
|
69
|
+
evidence:
|
|
70
|
+
[`AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md).
|
|
71
|
+
|
|
72
|
+
**`R-01` (new, highest priority):** if ASK's shared worker pool and cache do
|
|
73
|
+
not isolate concurrent `ask` processes on one machine, contention could
|
|
74
|
+
produce exactly the pattern reported since 5.9.23 — the same command
|
|
75
|
+
sometimes hanging, sometimes returning empty near-instantly, no per-process
|
|
76
|
+
variable distinguishing the two. This is a real, evidenced contributing
|
|
77
|
+
factor, not a proven sole cause (one hang occurred after 20 seconds of no
|
|
78
|
+
foreign activity at all). The open question for engineering: is ASK's worker
|
|
79
|
+
pool designed to tolerate concurrent `ask` invocations on one machine, or
|
|
80
|
+
does it assume exclusive use? If the latter, that is an architectural
|
|
81
|
+
constraint, not a series of unrelated command bugs, and changes where the
|
|
82
|
+
fix belongs.
|
|
83
|
+
|
|
84
|
+
**Entry-point trace progress, confirmed:** the auditor's own invocations —
|
|
85
|
+
including ones that returned empty or hung — now appear in `entry-trace.jsonl`
|
|
86
|
+
(the fix from last round's `R-01`). This confirms `main_entry` is reached on
|
|
87
|
+
the failing runs. `empty_answer_diagnostics.record()` still never fired on
|
|
88
|
+
any observed failure this session, which narrows the search specifically to
|
|
89
|
+
somewhere between `main_entry` and the output-promise guard — a materially
|
|
90
|
+
smaller surface than "somewhere in the process," three rounds ago.
|
|
91
|
+
|
|
92
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
93
|
+
|---|---:|---|---|
|
|
94
|
+
| `R-01` (contention) | Critical maximum | **open, new evidenced hypothesis** | Confirmed shared-machine contention during this audit session (foreign `ask` process, matching harness pattern, overlapping timing with 2 of the auditor's own hangs). Needs an internal answer, not more external symptom-chasing: does the worker pool serialize or isolate concurrent invocations, or assume exclusive use? If it assumes exclusive use, `ALT-01`/`ALT-03`/`NEW-01` may be one architectural defect, not several. |
|
|
95
|
+
| `R-01` (entry trace) | — | **confirmed working, narrows the search** | The auditor's own failing invocations now appear in `entry-trace.jsonl`. `main_entry` is reached; the gap is between there and `_fail_on_missing_required_answer`/`_fail_on_unkept_output_promise`, which still never fire. |
|
|
96
|
+
| `ALT-09` | Critical | **fixed, reconfirmed a third session** | Piped `n` to `cache clear` aborts correctly. |
|
|
97
|
+
| `BUG-15` / `BUG-21` | Low | **fixed, reconfirmed** | No markup leak; `--jobs` range validated. |
|
|
98
|
+
| `R-05` from last round (`selftest` itemization) | High | **fixed, reconfirmed** | `"10 ledger row(s) could not run: ASK-16, B6, E-37, ..."` replaces the prior generic slug. |
|
|
99
|
+
| `onboard` | Medium | **open, still the most erratic single measurement** | 904ms to a full 200s external kill, same invocation, same tree, within one session. Cross-reference against `entry-trace.jsonl` timing before assuming a cold/warm explanation. |
|
|
100
|
+
| `ask --help` latency | Low | **open, persisted a second round** | 14.4-14.7s this session (was 3-4s last round, flagged then as "worth its own row if it persists"). It has persisted. Not verified in isolation from `R-01`'s contention this session. |
|
|
101
|
+
|
|
102
|
+
The remaining rows (`BUG-01`, `BUG-03`, `BUG-06`, `BUG-08` through `BUG-23`,
|
|
103
|
+
`REG-02`, `REG-03`, `NEW-02`) were not relaunched this round for time budget;
|
|
104
|
+
no regression signal against them. `watch`'s ~55s warm-before-first-tick and
|
|
105
|
+
`retrieve security-surface --target` remain unchanged, correctly understood
|
|
106
|
+
as real cost and a known gap respectively, not new defects.
|
|
107
|
+
|
|
108
|
+
**Corroborating data point, unverified in detail:** a separate exchange the
|
|
109
|
+
same session referenced a distinct "External" lineage audit of 5.9.27 scoring
|
|
110
|
+
**8.1/10** on the five OSS reference repositories found in the trace above —
|
|
111
|
+
consistent with the shared-machine hypothesis (two lineages, two repo
|
|
112
|
+
populations, one machine) but not independently confirmed here; the
|
|
113
|
+
transcript fragment available was too corrupted to verify its table in
|
|
114
|
+
detail and is not published as a standalone audit document.
|
|
115
|
+
|
|
116
|
+
## Current Synchronization — External Audit `5.9.26`, self-contradictory session (2026-09-02)
|
|
117
|
+
|
|
118
|
+
> **Provenance correction, added during the 5.9.27 round.** The
|
|
119
|
+
> native-Windows auditor for 5.9.27 states plainly that the "initial
|
|
120
|
+
> 129-invocation pass ... 0/23 ... 7.4/10" described below does not
|
|
121
|
+
> correspond to anything they ran. The 5.9.27 round independently confirmed
|
|
122
|
+
> the audit machine was shared with a second, concurrent `ask` test harness
|
|
123
|
+
> exercising five OSS reference repositories (`thingsboard`, `mall`,
|
|
124
|
+
> `struts`, `spring-petclinic`, `jhipster-sample-app`) — a repo set and
|
|
125
|
+
> pattern that matches the "External" multi-repository lineage this ledger
|
|
126
|
+
> has tracked separately since 5.9.22 (`AUDIT-2026-09-02-EXTERNAL-5.9.26.md`
|
|
127
|
+
> below, and the 6.3→3.8 scores it reflects). The likely explanation is that
|
|
128
|
+
> the two-pass narrative below mixed observations from two independent,
|
|
129
|
+
> concurrent sessions on one shared machine rather than being one
|
|
130
|
+
> evaluator's self-revision. Left as written below rather than rewritten,
|
|
131
|
+
> with this correction attached, per this ledger's own discipline of
|
|
132
|
+
> recording when it got something wrong rather than quietly fixing the
|
|
133
|
+
> record. See
|
|
134
|
+
> [`AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md)
|
|
135
|
+
> for the evidence (`entry-trace.jsonl` cross-contamination, a live foreign
|
|
136
|
+
> process confirmed via `Get-CimInstance Win32_Process`).
|
|
137
|
+
|
|
138
|
+
**The 5.9.26 fix batch did not close the release gate, and new evidence
|
|
139
|
+
narrows the failure to before the guard rather than inside it.** This audit
|
|
140
|
+
round is internally contradictory and both halves are published rather than
|
|
141
|
+
resolved: an initial 129-invocation pass replicating the exact 5.9.25
|
|
142
|
+
methodology found zero empty answers (0/23) and scored 7.4/10; a second,
|
|
143
|
+
larger pass in the same session found zero *successful* answers across 35
|
|
144
|
+
further invocations of the same command family and revised the verdict to
|
|
145
|
+
**3.8/10**, the lowest of four rounds. The auditor's own final position is the
|
|
146
|
+
second number. Full evidence:
|
|
147
|
+
[`AUDIT-2026-09-02-EXTERNAL-5.9.26.md`](AUDIT-2026-09-02-EXTERNAL-5.9.26.md).
|
|
148
|
+
|
|
149
|
+
**New finding, most actionable in four rounds (`R-01`):** across 32 empty
|
|
150
|
+
`exit 0` answers this session, stdout **and** stderr were both empty and no
|
|
151
|
+
`empty_answer_diagnostics` sidecar file exists anywhere on the audited
|
|
152
|
+
machine — the guard that is supposed to write one on every trip did not fire.
|
|
153
|
+
This does not mean the guard added in 5.9.26 is miscalibrated; it means the
|
|
154
|
+
failing runs are not reaching `main_entry`'s wrapper at all, which rules out
|
|
155
|
+
"a caught exception inside command logic" as the mechanism and points instead
|
|
156
|
+
at something that terminates the process before Python's own `try`/`except`
|
|
157
|
+
around `app(prog_name="ask")` ever regains control — an external kill, a
|
|
158
|
+
native crash, or an `os._exit()`-shaped exit somewhere in a dependency. A
|
|
159
|
+
one-line "reached the guard" debug log at the top of `main_entry` would
|
|
160
|
+
confirm this directly without needing native Windows to interpret.
|
|
161
|
+
|
|
162
|
+
Other updates this round: `BUG-17` reconfirmed with a more precise repro
|
|
163
|
+
(no path, a real path, and a nonexistent path are all byte-identical, not
|
|
164
|
+
merely "an extra argument is now accepted"); `ALT-10`/`onboard` got worse (a
|
|
165
|
+
cold run hit the external 200s kill entirely, worse than 5.9.25's 164.9s
|
|
166
|
+
worst case); `ALT-11`/`watch` reconfirmed working, with a correction — the
|
|
167
|
+
3,342-file audited repository's index warm takes 51.7s before the first
|
|
168
|
+
NDJSON line, real and not a defect, but long enough to still read as hung
|
|
169
|
+
without foreknowledge; and `ask --help` costs 3-4s even warm, which `REG-01`
|
|
170
|
+
never claimed to fix (`REG-01` was specifically the 82-120s hang in a nested
|
|
171
|
+
workspace, now resolved) but is worth its own row if it persists.
|
|
172
|
+
|
|
173
|
+
| ID | Severity | Status | Evidence and required closure |
|
|
174
|
+
|---|---:|---|---|
|
|
175
|
+
| `NEW-01`/`ALT-01`/`ALT-03` | Critical maximum | **open, contradictory session, worst round measured** | 0 of 35 invocations answered in the second pass of this session (vs. 0 of 23 *empty* in the first pass of the same session) — do not average the two into a rate; neither is regime evidence. First round where a single batch of identical `spring-audit . --compact` calls produced both failure shapes (a 200s hang, then a near-instant empty answer) with nothing changed between them. `R-01` above is the actionable lead. |
|
|
176
|
+
| `R-01` | Critical maximum | **instrumented, not yet closed** | The `empty_answer_diagnostics` sidecar added for `ALT-01`/`ALT-03` did not fire in 32 observed empty answers this session — no file, no error envelope. `record_entry_reached` now appends one line to `entry-trace.jsonl` as the very first statement of `main_entry`, argv-gated to `REQUIRED_ANSWER_COMMANDS` so `--help` and other latency-sensitive commands are not charged for it. The next native occurrence answers directly whether the failing run reached this product's own entry point at all, rather than requiring inference from the absence of a failure record. This does not close the row — it is the instrumentation the row asked for, not a fix for whatever is upstream if the trace turns out empty too. |
|
|
177
|
+
| `ALT-10` | Medium | **open, worse** | A cold `onboard .` hit the external 200s kill entirely this session (5.9.25's worst case answered at 164.9s); a second, untouched run answered in 83.5s — still ~120x the 681-780ms historical baseline. Shares `R-01`'s erratic shape, not a simple cold/warm split. |
|
|
178
|
+
| `BUG-17` | Low | **fixed** | `remediation-report` still accepts any `path` value (5.9.24's deliberate CLI-consistency choice, kept — a caller that always passes a repository path needs no special case for the one command with none to say about it), but the payload now carries `path_argument: {given, used: false, note}` whenever one is given, in both JSON and Markdown, whether or not the path exists. `rows.pop("path_argument")` still equals the no-path payload exactly — nothing else changed. |
|
|
179
|
+
| `ALT-09` | Critical | **fixed, reconfirmed** | A piped `n` answer to `ask cache clear .` aborts with `rc=1`, `"Aborted."` on stderr, cache untouched. |
|
|
180
|
+
| `ALT-04` | High | **fixed, reconfirmed** | `impact-chain` gave the same `content_id` across 3 repeated runs again this session. |
|
|
181
|
+
| `BUG-01` | Critical maximum | **fixed, reconfirmed with an independent fixture** | The auditor built their own unbalanced-paren file (not the shipped test fixture) and got the expected `reason: "unbalanced_parens"` gap. The documented residual class (a syntax error that disturbs neither braces nor parens) is unchanged and expected. |
|
|
182
|
+
| `BUG-15` | Low | **fixed, reconfirmed** | 0 Rich-markup occurrences across 3 repeated non-TTY `--help` runs. |
|
|
183
|
+
| `BUG-21` | Low | **fixed, reconfirmed** | `--jobs 0` and `--jobs 999` both rejected with the stated `1<=x<=128` range. |
|
|
184
|
+
| `ALT-11` | Low | **fixed, reconfirmed with a measurement correction** | `watch` emits its `status: "watching"` line at 51.7s on the 3,342-file audited repository — real index-warm cost, not a defect, but long enough that a short observation window (the auditor's own first attempt, 8-20s) reads it as still broken. No further action required by this row; `ALT-10`/onboard shares the same warm-up path and is where the latency itself belongs. |
|
|
185
|
+
|
|
186
|
+
The remaining rows below this section (`BUG-03`, `BUG-09` through `BUG-23`,
|
|
187
|
+
`REG-02`, `REG-03`, `REG-04`, `NEW-02`) were reconfirmed unchanged this round
|
|
188
|
+
or not relaunched for time budget; none regressed. Full detail in the audit
|
|
189
|
+
document.
|
|
190
|
+
|
|
17
191
|
## Current Synchronization — Alternative External Audit `5.9.25`, and External Audit `5.9.25` (2026-09-02)
|
|
18
192
|
|
|
19
193
|
**Release `5.9.26` closes eight rows from this round with verified evidence**
|
|
@@ -75,7 +249,7 @@ and [`AUDIT-2026-09-02-EXTERNAL-5.9.25.md`](AUDIT-2026-09-02-EXTERNAL-5.9.25.md)
|
|
|
75
249
|
| `BUG-01` | Critical maximum | **fixed, mechanism narrowed, not eliminated** | Reproduced directly: a missing `;` or a missing `)` on a method signature both extract a clean class+method symbol pair with balanced braces, so the E-10 brace-only check (`unbalanced_braces`) never fired and the file passed as clean. `repository_ir.py` now also masks and checks paren balance (`unbalanced_parens`), publishing the same `parse_structure` gap for that shape. This is a heuristic extractor without a real Java grammar, so a syntax error that disturbs neither braces nor parens (for example a missing operand with balanced punctuation on both sides) remains undetectable by construction — the row stays open at lower severity for that residual class, not closed. |
|
|
76
250
|
| `BUG-02` | Critical maximum | **open, P0** | Large `risk` ended `rc=127` with no output or structured failure. Add fail-fast resource/process handling and durable partial checkpoints. |
|
|
77
251
|
| `BUG-12` | Critical maximum | **open, P0** | Deep `--agent` output construction reaches multi-gigabyte RSS before a small answer. Bound projection while building. |
|
|
78
|
-
| `BUG-03` | High | **fixed** | `non_coverage.stack_fit`'s marginal-detection disclosure (`fit: "partial"`, below 10% Spring-bean density) has existed since AUD-596-D13 but was unreachable from `risk` and `posture`: neither call site passed `spring_footprint`, so `java_files` stayed 0 and the branch that reads it could never fire regardless of the real ratio. Both now compute it the same way `spring-audit`'s own call already did (`sum(bean.spring for bean in graph.beans.values())` over `len(cir.files)`); verified end to end on a 1-bean/16-file fixture. |
|
|
252
|
+
| `BUG-03` | High | **fixed** | `non_coverage.stack_fit`'s marginal-detection disclosure (`fit: "partial"`, below 10% Spring-bean density) has existed since AUD-596-D13 but was unreachable from `risk` and `posture`: neither call site passed `spring_footprint`, so `java_files` stayed 0 and the branch that reads it could never fire regardless of the real ratio. Both now compute it the same way `spring-audit`'s own call already did (`sum(bean.spring for bean in graph.beans.values())` over `len(cir.files)`); verified end to end on a 1-bean/16-file fixture. The 5.9.26 re-audit's own index table still lists this row `abierto` for both 5.9.25 and 5.9.26 without naming which command was tested or a repro that contradicts the fixture above; the fix stands on the passing regression tests until a command-specific repro says otherwise. |
|
|
79
253
|
| `BUG-04` | High | **open, P1** | `selftest` publishes `complete=true` with five error rows. Derive bounds from actual results. |
|
|
80
254
|
| `BUG-05` | High | **open, P1** | Overloaded endpoint handlers can receive the wrong declaration line. Resolve by mapping annotation or publish ambiguity. |
|
|
81
255
|
| `BUG-07` | Closed 5.9.23, verification gap | Compact JVM inventory is bounded, but the audit notes no selftest row protects the correction. Add release-battery coverage before treating it as durable closure. |
|
|
@@ -1,5 +1,77 @@
|
|
|
1
1
|
# ASK — Development Roadmap
|
|
2
2
|
|
|
3
|
+
### Release 5.9.28 — remediation batch on the 5.9.27 queue, the pool question answered in source
|
|
4
|
+
|
|
5
|
+
The P0 below it asked whether the shared worker pool tolerates concurrent
|
|
6
|
+
`ask` processes on one machine or assumes exclusive use. Read from source, it
|
|
7
|
+
assumed exclusive use: `parallel.default_jobs()` returned `cpu_count() - 1`
|
|
8
|
+
**per process**, so `k` concurrent invocations started `k × (N-1)` parsing
|
|
9
|
+
workers on `N` cores, with no field in any payload saying the run had shared
|
|
10
|
+
the machine. The cache was not the same kind of defect — writes are
|
|
11
|
+
unique-temp + `os.replace` with retry and every read is guarded — except for
|
|
12
|
+
eviction, which deleted the working set a live peer was reading.
|
|
13
|
+
|
|
14
|
+
Nine rows closed in this batch, one commit each: `R-01` (census, divided
|
|
15
|
+
worker budget, `_meta.concurrency`, deferred eviction), `BUG-22`/`REG-02`'s
|
|
16
|
+
enforcement half (RSS sampled inside the phases, typed refusal), `BUG-10`
|
|
17
|
+
(routing evidence this model does not read), `NEW-02`/`BUG-05` (overload
|
|
18
|
+
anchor ambiguity), `BUG-13` (`selftest` refuses an unscoped workspace run),
|
|
19
|
+
`BUG-16` (every cache store publishes its eviction contract), `ALT-08`'s
|
|
20
|
+
arithmetic half, `ALT-25` (`audit_time_ms` null when the audit never ran) and
|
|
21
|
+
the four-round `retrieve security-surface --target` refusal.
|
|
22
|
+
|
|
23
|
+
| Priority | Required work and closure boundary |
|
|
24
|
+
|---|---|
|
|
25
|
+
| P0 | Re-measure the audit-command family in the field with `_meta.concurrency` attached. The census divides the pool and publishes whether the machine was shared; a round that still shows the erratic pattern with `peer_invocations_at_start: 0` separates contention from whatever else remains, which four rounds could not do. |
|
|
26
|
+
| P0 | `ALT-01`/`ALT-03` stay open: one hang was observed with nothing else running, and this batch removed a mechanism, not the symptom. Keep narrowing between `main_entry` and the output-promise guard. |
|
|
27
|
+
| P1 | `BUG-02` (`rc=127`, no output) and `BUG-12` (multi-gigabyte RSS for a small answer) need the field's own large repository. `BUG-22`'s in-phase sampler bounds the damage of the second without closing it. |
|
|
28
|
+
| P2 | `ask --help` measured 0.41–0.44 s on the engineering host against 14.4–14.7 s in the field under confirmed contention. Re-measure with the disclosure block before profiling it as a standalone defect. |
|
|
29
|
+
|
|
30
|
+
### Alternative Audit Intake — release 5.9.27, shared-machine contention confirmed
|
|
31
|
+
|
|
32
|
+
First score uptick in four rounds (3.8 → 4.6/10), found alongside evidence
|
|
33
|
+
that the audit machine was shared with a second, independent `ask` test
|
|
34
|
+
harness: `entry-trace.jsonl` (added last release) grew with invocations the
|
|
35
|
+
auditor never launched, against five OSS repositories, under the auditor's
|
|
36
|
+
own exact harness pattern, and `Get-CimInstance Win32_Process` confirmed a
|
|
37
|
+
live foreign `ask.exe` process under the same Windows user. This reframes,
|
|
38
|
+
without resolving, the four-round pattern of the same command sometimes
|
|
39
|
+
hanging and sometimes returning empty near-instantly with no per-process
|
|
40
|
+
variable to distinguish the two.
|
|
41
|
+
|
|
42
|
+
| Priority | Required work and closure boundary |
|
|
43
|
+
|---|---|
|
|
44
|
+
| P0 | Answer directly, with internal data (lock/semaphore metrics, not external inference): is ASK's shared worker pool and cache designed to tolerate concurrent `ask` processes on one machine, or does it assume exclusive use? If the latter, `ALT-01`/`ALT-03`/`NEW-01` may be one architectural defect — the shared pool not isolating or serializing concurrent access — rather than several unrelated command bugs, and the fix belongs at the pool/cache layer, not in each affected command. |
|
|
45
|
+
| P0 | Continue narrowing between `main_entry` (confirmed reached, per `entry-trace.jsonl` now showing failing invocations) and `_fail_on_missing_required_answer`/`_fail_on_unkept_output_promise` (still never fire). The search surface has gone from "somewhere in the process" to "between these two specific points" in one release; keep closing it rather than re-verifying the entry-point question again. |
|
|
46
|
+
| P1 | `onboard .` remains the most erratic single measurement across all rounds — 904ms to a full 200s external kill, same invocation, same tree, within one session. Cross-reference its timestamps against `entry-trace.jsonl` foreign-process activity before assuming a simple cold/warm split. |
|
|
47
|
+
| P2 | `ask --help` costs 14.4-14.7s this round, worse than the 3-4s flagged last round as "worth its own row if it persists" — it has persisted across two rounds. Re-verify in a session confirmed free of the contention `R-01` found, before profiling it as a standalone defect. |
|
|
48
|
+
|
|
49
|
+
Full evidence, including the entry-trace cross-contamination and process
|
|
50
|
+
confirmation, is in
|
|
51
|
+
[`AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md`](AUDIT-2026-09-02-ALTERNATIVE-5.9.27.md).
|
|
52
|
+
|
|
53
|
+
### External Audit Intake — release 5.9.26, the guard is not being reached
|
|
54
|
+
|
|
55
|
+
A self-contradictory session (0/23 empty on one pass, 0/35 successful on a
|
|
56
|
+
second, larger pass in the same session) produced the sharpest lead of four
|
|
57
|
+
rounds: the `empty_answer_diagnostics` sidecar shipped in 5.9.26 to
|
|
58
|
+
instrument `ALT-01`/`ALT-03` did not fire once across 32 observed empty
|
|
59
|
+
answers — no sidecar file, no error envelope, stdout and stderr both empty.
|
|
60
|
+
That rules out "an exception inside command logic reaches the guard and the
|
|
61
|
+
guard mishandles it" and points at the failing runs never reaching
|
|
62
|
+
`main_entry`'s wrapper at all.
|
|
63
|
+
|
|
64
|
+
| Priority | Required work and closure boundary | 5.9.27 |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| P0 | Add a debug-level log line at the very top of `main_entry`, before `app(prog_name="ask")` is called, and confirm it fires on every invocation including the empty-answer ones. If it does not, the failure is upstream of Python's own entry point (an external kill, a native crash, an `os._exit()`-shaped exit in a dependency) and the whole `ALT-01`/`ALT-03` investigation must move there. This is answerable in one native debugging session and has not been tried in four audit rounds. | **Done and confirmed on native Windows.** `record_entry_reached` traces every audit-family invocation; the 5.9.27 audit's own failing runs appear in it. `main_entry` is confirmed reached — the search moves to the section above. |
|
|
67
|
+
| P1 | `remediation-report` (`BUG-17`) now returns byte-identical output for no path, a real path, and a nonexistent path. Either declare and filter on `path`, or reject any positional explicitly with the `INVALID_USAGE` this command gave through 5.9.25 — "accept and silently ignore" is worse than either alternative. | **Done.** `path_argument: {given, used: false}` now discloses it in both formats; the path is still accepted, deliberately. |
|
|
68
|
+
| P1 | `onboard .` hit the external 200s kill entirely in one run this session (worse than 5.9.25's 164.9s worst case) and answered in 83.5s in another, untouched run seconds later — the same erratic shape as `ALT-01`/`ALT-03`, not a simple cold/warm split. Bisect with the same instrumentation once the P0 above lands. | Open — still the most erratic single measurement across all rounds (904ms to a full 200s kill in 5.9.27). See the contention hypothesis above. |
|
|
69
|
+
| P2 | `ask --help` costs 3-4s warm on the audited repository (14.4s cold), which `REG-01` did not claim to fix — that row closed the 82-120s nested-workspace hang specifically. Profile whether `--help`'s repository-profile hint line is re-scanning file counts that `cache status` already has cached. | Open, worse (14.4-14.7s in 5.9.27) — but measured on a machine confirmed to have contention this round; re-verify in isolation before profiling further. |
|
|
70
|
+
|
|
71
|
+
The full measurement matrix, including the retracted 7.4/10 intermediate
|
|
72
|
+
reading, is in
|
|
73
|
+
[`AUDIT-2026-09-02-EXTERNAL-5.9.26.md`](AUDIT-2026-09-02-EXTERNAL-5.9.26.md).
|
|
74
|
+
|
|
3
75
|
### Alternative Audit Intake — release 5.9.25, closed in 5.9.26 where marked
|
|
4
76
|
|
|
5
77
|
The 5.9.23 recovery sequence closed three rows with verified evidence
|