sourcecode 5.9.7__tar.gz → 5.9.8__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.7 → sourcecode-5.9.8}/CHANGELOG.md +18 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/PKG-INFO +9 -5
- {sourcecode-5.9.7 → sourcecode-5.9.8}/README.md +8 -4
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/DEFECT-LEDGER.md +29 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/DEVELOPMENT-ROADMAP.md +39 -1
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/EXECUTIVE-ROADMAP.md +12 -1
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/MANUAL-USUARIO.md +7 -2
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/USER_GUIDE.md +8 -4
- {sourcecode-5.9.7 → sourcecode-5.9.8}/pyproject.toml +1 -1
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/cli.py +150 -29
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/license.py +8 -6
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/packs.py +25 -4
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/progress.py +12 -10
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/selftest.py +2 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/.github/workflows/windows-battery.yml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/.gitignore +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/.ruff.toml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/CLAUDE.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/CONTRIBUTING.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/LICENSE +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/NOTICE +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/SECURITY.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-26-EXTERNAL-5.9.0.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-26-MONETIZATION.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.2.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-2026-08-27-EXTERNAL-5.9.3.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/CACHE.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/overview.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/contracts.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/licensing-schema.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/migrate-check.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/README.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/posture.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/privacy.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/schema.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/hatch_build.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/scripts/context_cost_harness.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/scripts/perf_gate.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/scripts/perf_harness.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/scripts/test_fast.sh +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/access_drift.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/audit_verify.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/baseline_attestation.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/c4_render.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/cache_model.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/cve_feed.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/cve_reachability.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/findings_baseline.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/intent_router.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/pr_risk.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/regulatory_pack.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/remediation_flow.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/remediation_report.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schema_registry.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schemas/cve-reachability-v1.schema.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/self_audit.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/vex.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/watch_loop.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/supabase/functions/README.md +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.9.7 → sourcecode-5.9.8}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.9.8] — 2026-08-27
|
|
4
|
+
|
|
5
|
+
*Audit correction and contract-alignment patch release.*
|
|
6
|
+
|
|
7
|
+
**Fixed**
|
|
8
|
+
|
|
9
|
+
- Standardizes `review-pr` and `activate` failures on structured stderr envelopes.
|
|
10
|
+
- Distinguishes command typos from implicit repository paths and suggests commands.
|
|
11
|
+
- Rejects raw unified diffs passed to `--files -`; the option now accepts path lists only.
|
|
12
|
+
- Streams child progress from `pack gate` without contaminating aggregate stdout.
|
|
13
|
+
- Adds per-row timeout control to `selftest` and removes the fixed-size `cold-start` warning.
|
|
14
|
+
|
|
15
|
+
**Documentation and validation**
|
|
16
|
+
|
|
17
|
+
- Reconciles CLI/MCP population documentation and `rename-class` migration guidance.
|
|
18
|
+
- Updates README, English and Spanish guides, roadmap, ledger and CLI version output.
|
|
19
|
+
- Validated with dedicated regressions against `/Users/user/Documents/workspace/testing/teavm`.
|
|
20
|
+
|
|
3
21
|
## [5.9.6] — 2026-08-27
|
|
4
22
|
|
|
5
23
|
*Roadmap correction and release-alignment patch release.*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.9.
|
|
3
|
+
Version: 5.9.8
|
|
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
|
|
@@ -196,7 +196,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
196
196
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
197
197
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
198
198
|
|
|
199
|
-
**Current performance status.** Release 5.9.
|
|
199
|
+
**Current performance status.** Release 5.9.8 retains the shared Canonical IR
|
|
200
200
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
201
201
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
202
202
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -218,7 +218,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
|
|
|
218
218
|
invalid input rather than treated as an empty repository. This prevents silent
|
|
219
219
|
entitlement errors in CI and does not change per-repository gates or billing.
|
|
220
220
|
|
|
221
|
-
Release 5.9.
|
|
221
|
+
Release 5.9.8 also hardens the boundary contracts: missing consumer repositories,
|
|
222
222
|
malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
|
|
223
223
|
input errors; duplicate same-commit baselines are never overwritten. `posture
|
|
224
224
|
--diff` validates unknown profiles when the repository declares profiles. In
|
|
@@ -251,7 +251,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
251
251
|
# pip / pipx
|
|
252
252
|
pipx install sourcecode # or: pip install sourcecode
|
|
253
253
|
|
|
254
|
-
ask version # ask 5.9.
|
|
254
|
+
ask version # ask 5.9.8 — and, on a build that has aged,
|
|
255
255
|
# how many releases have probably shipped since
|
|
256
256
|
```
|
|
257
257
|
|
|
@@ -501,6 +501,10 @@ The everyday loop: diff-based PR review, symptom-driven bug triage, and delta co
|
|
|
501
501
|
|
|
502
502
|
### 7 · Utilities
|
|
503
503
|
`ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / model / clear / freshness) · `ask self-audit` (does the installed build's own registry agree with itself?)
|
|
504
|
+
|
|
505
|
+
`rename-class` migration note: current releases require the explicit form
|
|
506
|
+
`ask rename-class <repo> --from OldName --to NewName`. Older positional forms are
|
|
507
|
+
not accepted; use `--dry-run` first when migrating scripts.
|
|
504
508
|
→ [reference](docs/USER_GUIDE.md)
|
|
505
509
|
|
|
506
510
|
---
|
|
@@ -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
|
|
@@ -147,7 +147,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
147
147
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
148
148
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
149
149
|
|
|
150
|
-
**Current performance status.** Release 5.9.
|
|
150
|
+
**Current performance status.** Release 5.9.8 retains the shared Canonical IR
|
|
151
151
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
152
152
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
153
153
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -169,7 +169,7 @@ in `overlapping_paths`; a missing or non-directory path is rejected as structure
|
|
|
169
169
|
invalid input rather than treated as an empty repository. This prevents silent
|
|
170
170
|
entitlement errors in CI and does not change per-repository gates or billing.
|
|
171
171
|
|
|
172
|
-
Release 5.9.
|
|
172
|
+
Release 5.9.8 also hardens the boundary contracts: missing consumer repositories,
|
|
173
173
|
malformed CVE feeds and unresolved `pack gate --since` refs fail as structured
|
|
174
174
|
input errors; duplicate same-commit baselines are never overwritten. `posture
|
|
175
175
|
--diff` validates unknown profiles when the repository declares profiles. In
|
|
@@ -202,7 +202,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
202
202
|
# pip / pipx
|
|
203
203
|
pipx install sourcecode # or: pip install sourcecode
|
|
204
204
|
|
|
205
|
-
ask version # ask 5.9.
|
|
205
|
+
ask version # ask 5.9.8 — and, on a build that has aged,
|
|
206
206
|
# how many releases have probably shipped since
|
|
207
207
|
```
|
|
208
208
|
|
|
@@ -452,6 +452,10 @@ The everyday loop: diff-based PR review, symptom-driven bug triage, and delta co
|
|
|
452
452
|
|
|
453
453
|
### 7 · Utilities
|
|
454
454
|
`ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / model / clear / freshness) · `ask self-audit` (does the installed build's own registry agree with itself?)
|
|
455
|
+
|
|
456
|
+
`rename-class` migration note: current releases require the explicit form
|
|
457
|
+
`ask rename-class <repo> --from OldName --to NewName`. Older positional forms are
|
|
458
|
+
not accepted; use `--dry-run` first when migrating scripts.
|
|
455
459
|
→ [reference](docs/USER_GUIDE.md)
|
|
456
460
|
|
|
457
461
|
---
|
|
@@ -71,6 +71,35 @@ Commercially, the audit supports normal repositories up to several thousand
|
|
|
71
71
|
files and keeps a provisional $35-50/developer/month range, but B01/B02 block
|
|
72
72
|
annual-grade reliability and enterprise-scale positioning until resolved.
|
|
73
73
|
|
|
74
|
+
**External audit intake `AUD-612`, re-audit of release 5.9.7 — 2026-08-27.**
|
|
75
|
+
The external scope covered roughly 130 new invocations across three forks and direct
|
|
76
|
+
retests of all AUD-611 items. It reports five clean forks, no target writes, commits
|
|
77
|
+
or task-kills, and a score of **7.8/10**. It confirms B05, B06, B08, B09, B10 and B11,
|
|
78
|
+
and reports B01 fixed in its own matrix; B01 remains release-artifact verification
|
|
79
|
+
because the prior external round reproduced it. The new queue is:
|
|
80
|
+
|
|
81
|
+
| ID | Severity | Status | Evidence / closure boundary |
|
|
82
|
+
|---|---:|---|---|
|
|
83
|
+
| AUD-612-B02 | Critical | open | `tutorials` root compact still timed out after 300-311s with zero stdout; warning proves activity, not completion. Define scale, deadline and partial-diagnostic contracts. |
|
|
84
|
+
| AUD-612-B03 | High | closed | YAML cache-hit delivery now publishes `_cache.cache_source` and `timing_ms.served_from_cache` consistently; TeaVM YAML smoke plus the direct cache-hit seam regression pass. A real L2 benchmark remains follow-up because this environment rebuilt both runs. |
|
|
85
|
+
| AUD-612-B04 | High | partial | Each `selftest` row now has configurable 120 s default timeout and structured timeout diagnostics/code 75; valid-row scale latency remains open for profiling. Dedicated TeaVM timeout contract regression passes. |
|
|
86
|
+
| AUD-612-B07 | Medium | closed | `pr-impact --since` now resolves refs through the shared authority and publishes `GIT_REF_NOT_FOUND`; dedicated TeaVM and existing Git-ref regressions pass. |
|
|
87
|
+
| AUD-612-B13 | Medium | closed/no-repro | Controlled TeaVM campaign: 30/30 `retrieve endpoint-security --endpoint /` executions completed with exit 0, valid JSON, no errors and stable content identity after cache warm-up. Reopen on a new correlated failure. |
|
|
88
|
+
| AUD-612-L | High | open | `audit-report --format markdown` timed out at 420s/500s, 2/2, after ~228s in 5.9.6. Performance regression remains open; the one-shot heartbeat sub-issue is mitigated by repeated warnings. |
|
|
89
|
+
| AUD-612-K | Medium | closed | Pack orchestration now streams child stderr, forwarding inherited `ASK_PROGRESS=1` progress while preserving aggregate stdout JSON. Dedicated TeaVM gate regression passes. |
|
|
90
|
+
| AUD-612-M | Medium | closed | `explain` missing-class failures now use structured `INVALID_INPUT` stderr and `exit 1`; dedicated TeaVM regression passes. |
|
|
91
|
+
| AUD-612-E | Medium | closed | The events branch now applies `_exit_on_unresolved_target`; missing event symbols return `not_found` with `exit 1`. TeaVM regression passes. |
|
|
92
|
+
| AUD-612-G | Medium | closed | `review-pr` runtime failures and `activate` failures now publish the shared `error.code` envelope on stderr; stdout remains reserved for valid results. `no_diff` remains the intentional successful `no_changes` result. Dedicated TeaVM and contract tests pass. |
|
|
93
|
+
| AUD-612-I | Medium | closed | Removed the residual `~10K` wording from the large-output warning; help, runtime warning and compact payload consistently describe a snapshot-dependent subset with explicit `full_available` metadata. Dedicated TeaVM regression passes. |
|
|
94
|
+
| AUD-612-07 | Low | closed | Missing single tokens close to a registered command now use command admission with a nearest-command suggestion; existing paths retain implicit root-scan behavior. Dedicated TeaVM regression passes. |
|
|
95
|
+
| AUD-612-09 | Medium | closed | `--files -` is documented and enforced as a newline-delimited changed-path list; raw unified diffs fail with an `--name-only` conversion hint. Dedicated TeaVM regressions pass. |
|
|
96
|
+
| AUD-612-14 | Medium | closed | The current population is 104 CLI leaves versus 110 MCP tools, explicitly decomposed as 101 runtime-derived plus 9 native orchestration tools; `mcp list-tools --json` matches and the relationship is published. Existing TeaVM-backed population regression passes. |
|
|
97
|
+
| AUD-612-R | Medium | closed | README, English guide and Spanish manual document that `rename-class` requires `--from/--to`, the old positional syntax is unsupported, and `--dry-run` is the migration safety step. TeaVM dry-run verification passes. |
|
|
98
|
+
|
|
99
|
+
Commercially, normal repositories up to about 4,000 files remain viable at a provisional
|
|
100
|
+
$40-55/developer/month. B02, B04 and L block annual CI-gating and extreme-monorepo claims;
|
|
101
|
+
B03, K, M and G weaken machine-consumable evidence.
|
|
102
|
+
|
|
74
103
|
**External audit intake `AUD-610`, release 5.9.3 — 2026-08-27.** The attached
|
|
75
104
|
report scored the build **7.2/10** after five parallel batches and approximately
|
|
76
105
|
120 invocations. It verified a clean target repository, no Java-file changes,
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
*Chief-engineer development record. This is the internal, dev-facing counterpart to the
|
|
4
4
|
customer-facing `docs/EXECUTIVE-ROADMAP.md`.*
|
|
5
5
|
|
|
6
|
-
> **CURRENT QUEUE — release `5.9.
|
|
6
|
+
> **CURRENT QUEUE — release `5.9.8`; external reconciliation `AUD-612` is partially closed, with scale blockers retained.**
|
|
7
|
+
> The latest re-audit confirms the main B05-B11 corrections but adds a confirmed
|
|
8
|
+
> `audit-report` performance regression, a YAML cache-hit disclosure defect and
|
|
9
|
+
> several contract-parity gaps. `AUD-611` remains the preceding audit record.
|
|
7
10
|
> The 2026-08-27 external review adds `AUD-610-B01` through `AUD-610-B10`, led by
|
|
8
11
|
> silent `selftest` nondeterminism, silent root/audit-report failures, a legal-zero
|
|
9
12
|
> `risk --limit 0` crash, an unvalidated consumer path and contradictory Spring
|
|
@@ -211,6 +214,41 @@ findings block an annual-grade reliability claim. Pricing and enterprise
|
|
|
211
214
|
positioning remain hypotheses until AUD-611-B01 and AUD-611-B02 are closed and
|
|
212
215
|
the latency contract is explicit.
|
|
213
216
|
|
|
217
|
+
### External Audit Intake — `AUD-612` re-audit, release 5.9.7
|
|
218
|
+
|
|
219
|
+
The external re-audit covered repositories under `Documents/workspace/testing/` and
|
|
220
|
+
ran approximately 130 new invocations across three forks, plus direct retests of all
|
|
221
|
+
13 `AUD-611` items. It reports five clean forks, no target-repository changes, no
|
|
222
|
+
commits and no task-kill intervention. The score is **7.8/10**, up from the recorded
|
|
223
|
+
`AUD-611` score of 7.4/10. It confirms complete closure of B05, B06, B08, B09, B10
|
|
224
|
+
and B11, confirms the endpoint compact disclosure improvement, and reports B01 as
|
|
225
|
+
fixed in its own 13-run matrix. Because the preceding external round reproduced B01,
|
|
226
|
+
that result remains release-artifact verification rather than erased history.
|
|
227
|
+
|
|
228
|
+
| ID | Severity | Finding | Required future closure |
|
|
229
|
+
|---|---:|---|---|
|
|
230
|
+
| AUD-612-B02 | Critical | Cold root `ask . --compact` on `tutorials` (24,073 Java files) still timed out after 300-311 seconds with zero stdout; the 60-second warning proves activity but does not deliver a result. | Define and enforce a scale contract, bound or accelerate the root scan, and preserve structured partial/deadline diagnostics. |
|
|
231
|
+
| AUD-612-B03 | High | **Closed in this fix.** The YAML cache-hit delivery branch now injects `_cache.cache_source` and refreshes `timing_ms.served_from_cache` from the same authoritative hit state as JSON. | Keep the YAML cache seam regression and a real cold/warm multi-process benchmark green; the current TeaVM environment did not generate an L2 hit spontaneously. |
|
|
232
|
+
| AUD-612-B04 | High | **Partially closed in this fix.** `selftest` now bounds every ledger child with configurable `--timeout` (120 s default) and preserves structured timeout diagnostics/code 75. Valid-row scale latency remains open for profiling. TeaVM timeout contract regression passes. | Add phase/correlation IDs and profile slow valid rows; do not raise the default without evidence. |
|
|
233
|
+
| AUD-612-B07 | Medium | **Closed in this fix.** `pr-impact --since` now resolves refs through the shared Git authority and publishes `GIT_REF_NOT_FOUND`, matching posture and timeline. | Keep the complete ref-consumer matrix green. |
|
|
234
|
+
| AUD-612-B13 | Medium / investigation | **Closed as not reproduced in this investigation.** A controlled 30-run TeaVM campaign with an isolated cache completed 30/30 with exit 0, valid JSON, 0 errors and one stable content identity after warm-up. Reopen on any new failure with per-run correlation data. | Keep repeated/concurrent retrieval coverage in release audits. |
|
|
235
|
+
| AUD-612-L | High / regression | `audit-report . --format markdown` timed out at 420s with contention and 500s in isolation, 2/2, after completing in about 228s in 5.9.6. The heartbeat-only sub-issue is now mitigated: warnings repeat at the configured interval. | Reproduce with a 900s diagnostic window, identify the performance regression and add a bounded failure envelope. |
|
|
236
|
+
| AUD-612-K | Medium | **Closed in this fix.** Pack orchestration now forwards child stderr while each component runs, so inherited `ASK_PROGRESS=1` heartbeats reach the operator without contaminating the aggregate stdout JSON. TeaVM gate regression passes. | Keep nested progress and stdout purity tests green. |
|
|
237
|
+
| AUD-612-M | Medium | **Closed in this fix.** `explain <nonexistent-class>` now emits `INVALID_INPUT` as structured stderr with `exit 1`; the internal explanation API remains unchanged. | Keep class-not-found and no-diff contract tests green for the remaining public commands. |
|
|
238
|
+
| AUD-612-E | Medium | **Closed in this fix.** `impact-chain --type events` now applies the shared not-found exit policy after emitting its result, returning `exit 1` for unresolved symbols. | Keep every impact type on the shared CLI exit-policy test. |
|
|
239
|
+
| AUD-612-G | Medium | **Closed in this fix.** `review-pr` runtime failures and `activate` failures now publish the shared `error.code` envelope on stderr, with stdout reserved for valid results. The intentional `review-pr` `no_diff` result remains `exit 0` / `no_changes`. TeaVM and contract regressions pass. | Keep public failure paths on the shared envelope and preserve the no-diff success semantics. |
|
|
240
|
+
| AUD-612-I | Medium | **Closed in this fix.** The remaining `~10K` promise in the large-output warning is removed; help, runtime warning and compact payload now consistently describe a snapshot-dependent orientation subset with explicit `full_available` metadata. TeaVM compact regression passes. | Keep compact-size wording derived from the actual snapshot contract. |
|
|
241
|
+
| AUD-612-07 | Low / UX | **Closed in this fix.** A missing single token close to a registered command is now rejected as an unknown command with nearest-command suggestions; existing paths retain implicit root-scan behavior. TeaVM path and typo regressions pass. | Keep command admission and implicit-path differential tests green. |
|
|
242
|
+
| AUD-612-09 | Medium / docs | **Closed in this fix.** Help now describes `--files -` as a newline-delimited changed-path list. Raw unified diffs are rejected early with an `--name-only` conversion hint instead of being interpreted as file paths. TeaVM list and rejection regressions pass. | Keep the stdin grammar and raw-diff rejection tests green. |
|
|
243
|
+
| AUD-612-14 | Medium / governance | **Closed in this reconciliation.** Current `self-audit` publishes 104 registered CLI leaves and 110 served MCP tools, decomposed as 101 runtime-derived plus 9 native orchestration tools; `mcp list-tools --json` matches 110. The payload states that the populations are intentionally different and gives the formula. Existing TeaVM-backed population regression passes. | Keep the population formula and parity regression generated from the live registries. |
|
|
244
|
+
| AUD-612-R | Medium / migration | **Closed in this fix.** The explicit `--from/--to` contract is now documented in README, English guide and Spanish manual; the old positional syntax is explicitly marked unsupported and `--dry-run` is recommended for script migration. TeaVM dry-run verification passes. | Keep migration guidance aligned with the live command signature. |
|
|
245
|
+
|
|
246
|
+
**Commercial interpretation.** Normal repositories up to roughly 4,000 files remain a
|
|
247
|
+
credible adoption target, with the external estimate at **$40-55/developer/month**.
|
|
248
|
+
The product is not yet suitable for annual CI-gating commitments or extreme monorepos:
|
|
249
|
+
B02, B04 and regression L leave the system without a reliable completion contract,
|
|
250
|
+
while K and the remaining performance rows weaken machine-consumable evidence and completion confidence.
|
|
251
|
+
|
|
214
252
|
### External Audit Intake — `AUD-610` detail, release 5.9.3
|
|
215
253
|
|
|
216
254
|
The attached external report audited ASK `5.9.3` in five parallel batches
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
> `pack assessment` and `pack gate`, and make evidence and safe change the
|
|
6
6
|
> product surface. This roadmap must not introduce a competing product thesis.
|
|
7
7
|
|
|
8
|
-
> **CURRENT UPDATE — release `5.9.
|
|
8
|
+
> **CURRENT UPDATE — release `5.9.8`, following the external `5.9.3` reconciliation.**
|
|
9
9
|
> The commercial increment adds stateless context budgets, a reproducible context-cost harness,
|
|
10
10
|
> source-level migration SARIF and an opt-in workspace entitlement pilot. Advisory behaviour remains
|
|
11
11
|
> the default; named-buyer validation is still required before broad enforcement.
|
|
@@ -19,6 +19,17 @@
|
|
|
19
19
|
> non-reproduction did not cover the payload shape now identified. Details are
|
|
20
20
|
> in [`AUDIT-2026-08-26-EXTERNAL-5.9.0.md`](AUDIT-2026-08-26-EXTERNAL-5.9.0.md).
|
|
21
21
|
|
|
22
|
+
> **RE-AUDIT — 5.9.7, received 2026-08-27.** Three independent forks added roughly
|
|
23
|
+
> 130 invocations and retested the AUD-611 queue. The score rose to **7.8/10** and
|
|
24
|
+
> confirmed the help, stdin, Git-ref, intent, impact-score and progress corrections.
|
|
25
|
+
> It also found a high-severity `audit-report --format markdown` performance regression
|
|
26
|
+
> (420-500s without completion), a YAML cache-hit disclosure defect, missing progress
|
|
27
|
+
> propagation in `pack gate`, and inconsistent error envelopes in `explain`, `review-pr`
|
|
28
|
+
> and `activate`. B02/B04 and the new regression remain blockers for annual CI-gating
|
|
29
|
+
> or extreme-monorepo positioning. Normal repositories around 4,000 files remain the
|
|
30
|
+
> viable commercial segment at a provisional `$40-55/developer/month`. Full detail is
|
|
31
|
+
> recorded as `AUD-612` in the development roadmap and defect ledger.
|
|
32
|
+
|
|
22
33
|
> **RE-AUDIT — 5.9.6, received 2026-08-27.** Seven independent forks exercised
|
|
23
34
|
> approximately 250 invocations across the testing corpus with no target-repository
|
|
24
35
|
> mutation or regression in the three latest fixes. The final score is **7.4/10**.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Manual de usuario — ASK Engine
|
|
2
2
|
|
|
3
|
-
> Versión de la herramienta: **5.9.
|
|
3
|
+
> Versión de la herramienta: **5.9.8** · El comando que se ejecuta es `ask`.
|
|
4
4
|
> (`sourcecode` sigue funcionando como alias en desactivación y reenvía a `ask`.)
|
|
5
5
|
> Público: personas que van a usar `ask` por primera vez, sin conocimiento previo.
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## 1. ¿Qué es ASK Engine?
|
|
10
10
|
|
|
11
|
-
### Contratos de fiabilidad de la versión 5.9.
|
|
11
|
+
### Contratos de fiabilidad de la versión 5.9.8
|
|
12
12
|
|
|
13
13
|
Las entradas inválidas se rechazan antes del análisis costoso mediante el
|
|
14
14
|
envelope estructurado `INVALID_INPUT`: un `--consumer` inexistente, un feed CVE
|
|
@@ -955,6 +955,11 @@ ask rename-class . --from OldName --to NewName --output rename-audit.json
|
|
|
955
955
|
**Opciones:**
|
|
956
956
|
- `--from` (**obligatorio**): nombre actual de la clase (PascalCase, p. ej. `ServiceA`).
|
|
957
957
|
- `--to` / `-t` (**obligatorio**): nombre nuevo (PascalCase, p. ej. `ServiceB`).
|
|
958
|
+
|
|
959
|
+
**Nota de migracion:** las versiones actuales exigen la forma explicita
|
|
960
|
+
`ask rename-class <repo> --from NombreAntiguo --to NombreNuevo`. La sintaxis
|
|
961
|
+
posicional antigua ya no se acepta. Al actualizar scripts, anade `--dry-run`
|
|
962
|
+
para revisar primero el plan de cambios.
|
|
958
963
|
- `--dry-run`: calcula los cambios pero **no escribe ni renombra** nada en disco.
|
|
959
964
|
- `--no-tests`: excluye los ficheros de test del rename (solo `src/main`).
|
|
960
965
|
- `--format`: `json` (por defecto) o `yaml`.
|
|
@@ -46,16 +46,16 @@ CLI commands — impact, endpoints, spring-audit, explain, … each a pro
|
|
|
46
46
|
The key idea: the extraction is **content-addressed**. Commands reuse the parse cache and,
|
|
47
47
|
where their analysed scope matches, the shared Canonical IR; `ask cache model` names what a
|
|
48
48
|
warm buys for each command rather than implying that every projection costs the same. In
|
|
49
|
-
5.9.
|
|
49
|
+
5.9.8, `validation` enters through that shared CIR and `data-exposure` reuses one semantic
|
|
50
50
|
model across all declared label seeds. (The extraction and consumption contract is fixed in
|
|
51
51
|
the architecture ADRs 0001–0004 under `docs/architecture/`.)
|
|
52
52
|
|
|
53
53
|
The current external pack audit intake is tracked in
|
|
54
54
|
[`AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md`](AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md);
|
|
55
|
-
the two pack fixes are included in release 5.9.
|
|
55
|
+
the two pack fixes are included in release 5.9.8, with release-artifact verification
|
|
56
56
|
remaining for detached execution and pack evidence.
|
|
57
57
|
|
|
58
|
-
### Reliability contracts in 5.9.
|
|
58
|
+
### Reliability contracts in 5.9.8
|
|
59
59
|
|
|
60
60
|
Invalid analysis inputs fail before expensive work and use the structured
|
|
61
61
|
`INVALID_INPUT` envelope: a missing `--consumer` repository, a malformed CVE
|
|
@@ -236,7 +236,7 @@ pipx install sourcecode # isolated install, no venv needed
|
|
|
236
236
|
|
|
237
237
|
# Verify
|
|
238
238
|
ask version
|
|
239
|
-
# ask 5.9.
|
|
239
|
+
# ask 5.9.8
|
|
240
240
|
```
|
|
241
241
|
|
|
242
242
|
Requires Python 3.9+.
|
|
@@ -1381,6 +1381,10 @@ explaining. The rest do one thing; `ask <command> --help` is the whole story.
|
|
|
1381
1381
|
| `ask chunk-file <file>` | supported | Split a large Java file into semantic chunks an agent can consume |
|
|
1382
1382
|
| `ask intent "<question>"` | supported | Resolve a plain-language question to the typed `retrieve` query that answers it (scored lexical match against a declared vocabulary — no model, no generation). Prints the query; `--run` executes it. A question fitting two intents too closely is refused with both named. |
|
|
1383
1383
|
| `ask rename-class` | supported | Word-boundary Java rename across the repository |
|
|
1384
|
+
|
|
1385
|
+
**Migration note:** `rename-class` requires the explicit `--from OldName --to NewName`
|
|
1386
|
+
options. Older positional name syntax is no longer accepted. Add `--dry-run` when
|
|
1387
|
+
updating an existing script so the planned file changes can be reviewed first.
|
|
1384
1388
|
| `ask schema <name>` | supported | Print a published JSON Schema for this tool's output |
|
|
1385
1389
|
| `ask self-audit` | supported | Check the SHIPPED build's own coherence — cache model, format contract, schema registry and output affordances. Declares explicitly that the semantic engine does not apply to this product's own source (ASK analyses Java; this build is Python), rather than reporting zeros. `ask selftest` is the different question: the defect ledger run against a real repository. |
|
|
1386
1390
|
| `ask auth workspace <repo>...` | supported | Aggregate workspace entitlement preview. `--enforce` opts into the named-buyer pilot that reuses the existing Pro gate when the organization-sized threshold is crossed; advisory mode remains the default and the CLI does not bill. |
|
|
@@ -900,8 +900,8 @@ scope matches; `ask cache model` says exactly what a warm buys per command.
|
|
|
900
900
|
[bold]Change and risk:[/bold]
|
|
901
901
|
impact-chain <Class> . [dim]# blast radius; TX/SEC findings opt-in[/dim]
|
|
902
902
|
impact <Class> . [dim]# reverse deps → endpoints reached[/dim]
|
|
903
|
-
pr-impact . --files - [dim]#
|
|
904
|
-
pr-risk . --files - [dim]#
|
|
903
|
+
pr-impact . --files - [dim]# changed-file list on stdin; gating codes[/dim]
|
|
904
|
+
pr-risk . --files - [dim]# changed-file list on stdin; UNKNOWN fails the gate[/dim]
|
|
905
905
|
posture . --since main [dim]# did this branch open an endpoint? (exp.)[/dim]
|
|
906
906
|
drift . --profile prod [dim]# what opened up since the last capture[/dim]
|
|
907
907
|
audit-report . --format markdown [dim]# signed human evidence bundle (exp.)[/dim]
|
|
@@ -1299,6 +1299,15 @@ def _preprocess_args(args: list[str]) -> list[str]:
|
|
|
1299
1299
|
# got wrong instead of swallowing it and erroring on the next one.
|
|
1300
1300
|
if _has_trailing_nonsubcommand_positional(result, i):
|
|
1301
1301
|
_reject_unknown_command(arg)
|
|
1302
|
+
# A single missing token that is very close to a command is a command
|
|
1303
|
+
# typo, not a repository path. Existing directories retain the implicit
|
|
1304
|
+
# `ask <path>` grammar, including names that resemble commands.
|
|
1305
|
+
if not Path(arg).exists():
|
|
1306
|
+
_command_matches = difflib.get_close_matches(
|
|
1307
|
+
arg, sorted(_SUBCOMMANDS), n=3, cutoff=0.6
|
|
1308
|
+
)
|
|
1309
|
+
if _command_matches:
|
|
1310
|
+
_reject_unknown_command(arg)
|
|
1302
1311
|
_set_detected_path(arg)
|
|
1303
1312
|
_path_index = i
|
|
1304
1313
|
if _path_index >= 0:
|
|
@@ -1455,6 +1464,56 @@ def _inject_cache_meta(raw: str, meta: dict) -> str:
|
|
|
1455
1464
|
return raw
|
|
1456
1465
|
|
|
1457
1466
|
|
|
1467
|
+
def _inject_cache_meta_yaml(raw: str, meta: dict) -> str:
|
|
1468
|
+
"""Inject the same cache provenance into a YAML answer as into JSON."""
|
|
1469
|
+
try:
|
|
1470
|
+
from io import StringIO
|
|
1471
|
+
from ruamel.yaml import YAML as _YAML
|
|
1472
|
+
|
|
1473
|
+
yaml = _YAML()
|
|
1474
|
+
obj = yaml.load(raw)
|
|
1475
|
+
if isinstance(obj, dict):
|
|
1476
|
+
obj["_cache"] = meta
|
|
1477
|
+
if "cache_source" in meta:
|
|
1478
|
+
obj["cache_source"] = meta["cache_source"]
|
|
1479
|
+
out = StringIO()
|
|
1480
|
+
yaml.dump(obj, out)
|
|
1481
|
+
return out.getvalue()
|
|
1482
|
+
except Exception:
|
|
1483
|
+
pass
|
|
1484
|
+
return raw
|
|
1485
|
+
|
|
1486
|
+
|
|
1487
|
+
def _refresh_delivery_timing_yaml(raw: str, *, served_from_cache: bool, elapsed_ms: float) -> str:
|
|
1488
|
+
"""Refresh cache timing in YAML without routing the machine answer through JSON."""
|
|
1489
|
+
try:
|
|
1490
|
+
from io import StringIO
|
|
1491
|
+
from ruamel.yaml import YAML as _YAML
|
|
1492
|
+
|
|
1493
|
+
yaml = _YAML()
|
|
1494
|
+
obj = yaml.load(raw)
|
|
1495
|
+
if not isinstance(obj, dict):
|
|
1496
|
+
return raw
|
|
1497
|
+
meta = obj.setdefault("_meta", {})
|
|
1498
|
+
if not isinstance(meta, dict):
|
|
1499
|
+
return raw
|
|
1500
|
+
timing = meta.setdefault("timing_ms", {})
|
|
1501
|
+
if not isinstance(timing, dict):
|
|
1502
|
+
timing = {}
|
|
1503
|
+
meta["timing_ms"] = timing
|
|
1504
|
+
timing["total_ms"] = round(elapsed_ms, 2)
|
|
1505
|
+
timing["served_from_cache"] = served_from_cache
|
|
1506
|
+
timing["timing_basis"] = "served_from_snapshot" if served_from_cache else "computed"
|
|
1507
|
+
if served_from_cache:
|
|
1508
|
+
timing["phase_timing_basis"] = "snapshot_build"
|
|
1509
|
+
out = StringIO()
|
|
1510
|
+
yaml.dump(obj, out)
|
|
1511
|
+
return out.getvalue()
|
|
1512
|
+
except Exception:
|
|
1513
|
+
pass
|
|
1514
|
+
return raw
|
|
1515
|
+
|
|
1516
|
+
|
|
1458
1517
|
def _refresh_delivery_timing(
|
|
1459
1518
|
raw: str,
|
|
1460
1519
|
*,
|
|
@@ -3557,7 +3616,17 @@ def _resolve_files_option(
|
|
|
3557
3616
|
),
|
|
3558
3617
|
)
|
|
3559
3618
|
raise typer.Exit(code=1)
|
|
3560
|
-
|
|
3619
|
+
stdin_text = _text_input.read_stdin_text()
|
|
3620
|
+
if "diff --git " in stdin_text or "\n@@ " in stdin_text:
|
|
3621
|
+
_emit_error_json(
|
|
3622
|
+
INVALID_INPUT_CODE,
|
|
3623
|
+
"--files - expects a list of changed paths, not a raw unified diff.",
|
|
3624
|
+
hint=f"Pipe paths with: git diff --name-only REF | ask {command} . --files -",
|
|
3625
|
+
expected="One repository-relative file path per line.",
|
|
3626
|
+
reason="raw_diff_on_stdin",
|
|
3627
|
+
)
|
|
3628
|
+
raise typer.Exit(code=1)
|
|
3629
|
+
return _text_input.parse_path_lines(stdin_text), "stdin"
|
|
3561
3630
|
as_path = Path(raw)
|
|
3562
3631
|
if as_path.is_file():
|
|
3563
3632
|
return (
|
|
@@ -3587,6 +3656,20 @@ def _resolve_files_option(
|
|
|
3587
3656
|
def _git_changed_files(root: Path, since: Optional[str]) -> "tuple[list[str], str]":
|
|
3588
3657
|
"""Resolve a local Git diff without network access or repository mutation."""
|
|
3589
3658
|
if since:
|
|
3659
|
+
# Resolve the ref through the shared authority before asking Git for the
|
|
3660
|
+
# diff, so every consumer publishes the canonical ref error code.
|
|
3661
|
+
from sourcecode.git_checkout import RefError, resolve_ref
|
|
3662
|
+
|
|
3663
|
+
try:
|
|
3664
|
+
resolve_ref(root, since)
|
|
3665
|
+
except RefError as exc:
|
|
3666
|
+
_emit_error_json(
|
|
3667
|
+
exc.code,
|
|
3668
|
+
exc.message,
|
|
3669
|
+
hint="Check the repository and ref, or pass --files explicitly.",
|
|
3670
|
+
ref=since,
|
|
3671
|
+
)
|
|
3672
|
+
raise typer.Exit(code=1)
|
|
3590
3673
|
command = ["git", "diff", "--name-only", since, "HEAD"]
|
|
3591
3674
|
description = f"git diff {since} HEAD"
|
|
3592
3675
|
else:
|
|
@@ -6054,6 +6137,26 @@ def main(
|
|
|
6054
6137
|
)
|
|
6055
6138
|
except Exception:
|
|
6056
6139
|
pass # stale value better than crash
|
|
6140
|
+
else:
|
|
6141
|
+
_cache_hit_content = _inject_cache_meta_yaml(
|
|
6142
|
+
_cache_hit_content,
|
|
6143
|
+
_cache_meta_block(
|
|
6144
|
+
cache_source=_hit_source,
|
|
6145
|
+
git_head_at_generation=_git_sha,
|
|
6146
|
+
current_git_head=_git_sha,
|
|
6147
|
+
has_uncommitted_changes=False,
|
|
6148
|
+
has_uncommitted_changes_basis="YAML cache delivery",
|
|
6149
|
+
generated_at=None,
|
|
6150
|
+
data_scope=("COMPACT" if compact else ("AGENT" if agent else "FULL")),
|
|
6151
|
+
target=target,
|
|
6152
|
+
with_ris_fact=True,
|
|
6153
|
+
),
|
|
6154
|
+
)
|
|
6155
|
+
_cache_hit_content = _refresh_delivery_timing_yaml(
|
|
6156
|
+
_cache_hit_content,
|
|
6157
|
+
served_from_cache=True,
|
|
6158
|
+
elapsed_ms=(time.monotonic() - _t0) * 1000,
|
|
6159
|
+
)
|
|
6057
6160
|
# C1: token economy on the agent-facing views (cache-hit path).
|
|
6058
6161
|
if format == "json" and (compact or agent):
|
|
6059
6162
|
from sourcecode.token_estimate import inject_token_economy as _inj_te
|
|
@@ -7828,31 +7931,33 @@ def prepare_context_cmd(
|
|
|
7828
7931
|
# review-pr specific fields
|
|
7829
7932
|
if task == "review-pr":
|
|
7830
7933
|
if output.error_code:
|
|
7831
|
-
|
|
7832
|
-
|
|
7833
|
-
|
|
7834
|
-
|
|
7835
|
-
|
|
7836
|
-
|
|
7837
|
-
|
|
7838
|
-
|
|
7839
|
-
|
|
7840
|
-
|
|
7841
|
-
|
|
7842
|
-
|
|
7843
|
-
|
|
7844
|
-
|
|
7934
|
+
if output.error_code == "no_diff":
|
|
7935
|
+
_no_diff_out = {
|
|
7936
|
+
"task": output.task,
|
|
7937
|
+
"ci_decision": "no_changes",
|
|
7938
|
+
"summary": "No changes detected",
|
|
7939
|
+
}
|
|
7940
|
+
_no_diff_json = _stamp_envelope(
|
|
7941
|
+
json.dumps(_no_diff_out, indent=2, ensure_ascii=_json_ensure_ascii())
|
|
7942
|
+
)
|
|
7943
|
+
if output_path is not None:
|
|
7944
|
+
_safe_write_file(output_path, _no_diff_json)
|
|
7945
|
+
else:
|
|
7946
|
+
sys.stdout.buffer.write(_no_diff_json.encode("utf-8"))
|
|
7947
|
+
sys.stdout.buffer.write(b"\n")
|
|
7948
|
+
sys.stdout.buffer.flush()
|
|
7949
|
+
raise typer.Exit()
|
|
7950
|
+
_error_hint = " ".join(str(h) for h in (output.error_hints or []))
|
|
7951
|
+
_emit_error_json(
|
|
7952
|
+
output.error_code,
|
|
7953
|
+
output.error_message or "review-pr could not complete.",
|
|
7954
|
+
command="review-pr",
|
|
7955
|
+
ci_decision=output.ci_decision or "error",
|
|
7956
|
+
since=output.since or None,
|
|
7957
|
+
hint=_error_hint or None,
|
|
7958
|
+
hints=output.error_hints or None,
|
|
7845
7959
|
)
|
|
7846
|
-
|
|
7847
|
-
_safe_write_file(output_path, _err_json)
|
|
7848
|
-
else:
|
|
7849
|
-
sys.stdout.buffer.write(_err_json.encode("utf-8"))
|
|
7850
|
-
sys.stdout.buffer.write(b"\n")
|
|
7851
|
-
sys.stdout.buffer.flush()
|
|
7852
|
-
# FIX: no_diff (no PR changes) is not an error — exit 0, consistent
|
|
7853
|
-
# with delta's no_changes handling. Only true errors exit non-zero.
|
|
7854
|
-
_review_pr_exit = 0 if output.error_code == "no_diff" else 1
|
|
7855
|
-
raise typer.Exit(code=_review_pr_exit)
|
|
7960
|
+
raise typer.Exit(code=1)
|
|
7856
7961
|
out["review_type"] = "pull_request"
|
|
7857
7962
|
if output.ci_decision:
|
|
7858
7963
|
out["ci_decision"] = output.ci_decision
|
|
@@ -15675,6 +15780,7 @@ def impact_chain_cmd(
|
|
|
15675
15780
|
f"{evt_result.metadata.get('consumer_count', 0)} consumers)"
|
|
15676
15781
|
),
|
|
15677
15782
|
)
|
|
15783
|
+
_exit_on_unresolved_target(evt_result.resolution)
|
|
15678
15784
|
return
|
|
15679
15785
|
|
|
15680
15786
|
result = run_impact_chain(
|
|
@@ -16051,6 +16157,15 @@ def explain_cmd(
|
|
|
16051
16157
|
else:
|
|
16052
16158
|
output = explanation.render_text()
|
|
16053
16159
|
|
|
16160
|
+
if not explanation.found:
|
|
16161
|
+
_emit_error_json(
|
|
16162
|
+
INVALID_INPUT_CODE,
|
|
16163
|
+
f"Class '{class_name}' was not found in repository symbols.",
|
|
16164
|
+
hint="Pass an existing class name or FQN; use `ask repo-ir` for the symbol list.",
|
|
16165
|
+
expected="A class present in the analyzed repository.",
|
|
16166
|
+
)
|
|
16167
|
+
raise typer.Exit(code=1)
|
|
16168
|
+
|
|
16054
16169
|
_emit_command_output(output, output_path, copy,
|
|
16055
16170
|
success_msg=f"Explanation written to {output_path}")
|
|
16056
16171
|
|
|
@@ -18059,6 +18174,10 @@ def selftest_cmd(
|
|
|
18059
18174
|
"checkout's runner). Published with every verdict — the difference "
|
|
18060
18175
|
"ASK-09 hid in was the entry point, not the repository.",
|
|
18061
18176
|
),
|
|
18177
|
+
timeout: int = typer.Option(
|
|
18178
|
+
120, "--timeout", min=1,
|
|
18179
|
+
help="Maximum seconds allowed for each ledger row (default: 120).",
|
|
18180
|
+
),
|
|
18062
18181
|
output_path: Optional[Path] = typer.Option(
|
|
18063
18182
|
None, "--output", "-o", help="Write the verdicts to a file instead of stdout.",
|
|
18064
18183
|
),
|
|
@@ -18111,7 +18230,9 @@ def selftest_cmd(
|
|
|
18111
18230
|
_prog = Progress()
|
|
18112
18231
|
_prog.start("running the ledger against this repository")
|
|
18113
18232
|
try:
|
|
18114
|
-
data = run_selftest(
|
|
18233
|
+
data = run_selftest(
|
|
18234
|
+
target, rows=selected, entry_point=entry_point, timeout=timeout
|
|
18235
|
+
)
|
|
18115
18236
|
finally:
|
|
18116
18237
|
_prog.stop()
|
|
18117
18238
|
|
|
@@ -19413,7 +19534,7 @@ def cold_start_cmd(
|
|
|
19413
19534
|
_notice(
|
|
19414
19535
|
f"WARNING: Output is ~{_tokens // 1000}K tokens. This exceeds the context window of "
|
|
19415
19536
|
"most LLMs (GPT-4o: 128K, Claude Sonnet: 200K). "
|
|
19416
|
-
"Use --compact for a
|
|
19537
|
+
"Use --compact for a snapshot-dependent orientation subset, or --output FILE to save."
|
|
19417
19538
|
)
|
|
19418
19539
|
# AUD-596-D01: this payload builds its own `_meta` above (estimated tokens,
|
|
19419
19540
|
# token economy) and used to skip the envelope for that reason — so the one
|
|
@@ -715,8 +715,8 @@ def require_pro(feature_name: str) -> None:
|
|
|
715
715
|
def activate_license(license_key: str) -> None:
|
|
716
716
|
"""Validate license_key via Edge Function, write ~/.sourcecode/license.json.
|
|
717
717
|
|
|
718
|
-
Outputs JSON to stdout; exits 0 on success, 1 on any failure.
|
|
719
|
-
|
|
718
|
+
Outputs JSON to stdout on success; exits 0 on success, 1 on any failure.
|
|
719
|
+
Errors use the CLI JSON envelope on stderr so stdout remains machine-safe.
|
|
720
720
|
"""
|
|
721
721
|
if not _LICENSE_KEY_RE.match(license_key):
|
|
722
722
|
_fail("invalid_license", "License key format is invalid.")
|
|
@@ -760,8 +760,10 @@ def activate_license(license_key: str) -> None:
|
|
|
760
760
|
# ---------------------------------------------------------------------------
|
|
761
761
|
|
|
762
762
|
def _fail(error: str, message: str) -> None:
|
|
763
|
-
"""Emit
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
763
|
+
"""Emit the shared structured error envelope to stderr and exit 1."""
|
|
764
|
+
from sourcecode.error_schema import build_error_envelope
|
|
765
|
+
|
|
766
|
+
payload = build_error_envelope(error, message, command="activate")
|
|
767
|
+
sys.stderr.write(json.dumps(payload, ensure_ascii=False) + "\n")
|
|
768
|
+
sys.stderr.flush()
|
|
767
769
|
sys.exit(1)
|