sourcecode 5.8.32__tar.gz → 5.9.0__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.0/.github/workflows/windows-battery.yml +46 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/CHANGELOG.md +63 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/PKG-INFO +61 -14
- {sourcecode-5.8.32 → sourcecode-5.9.0}/README.md +60 -13
- sourcecode-5.9.0/docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md +271 -0
- sourcecode-5.9.0/docs/AUDIT-2026-08-26-MONETIZATION.md +86 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/CACHE.md +7 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/DEFECT-LEDGER.md +70 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/DEMO-5MIN.md +16 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/DEVELOPMENT-ROADMAP.md +50 -19
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/EXECUTIVE-ROADMAP.md +51 -13
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/MANUAL-USUARIO.md +135 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/PRODUCT-ROUTE.md +30 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +12 -2
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/USER_GUIDE.md +58 -5
- {sourcecode-5.8.32 → sourcecode-5.9.0}/pyproject.toml +1 -1
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/__init__.py +1 -1
- sourcecode-5.9.0/src/sourcecode/access_drift.py +232 -0
- sourcecode-5.9.0/src/sourcecode/c4_render.py +245 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/cache_model.py +28 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/cli.py +1153 -4
- sourcecode-5.9.0/src/sourcecode/cve_feed.py +290 -0
- sourcecode-5.9.0/src/sourcecode/cve_reachability.py +497 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/explain.py +25 -6
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/file_chunker.py +15 -4
- sourcecode-5.9.0/src/sourcecode/findings_baseline.py +270 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/format_contract.py +7 -0
- sourcecode-5.9.0/src/sourcecode/intent_router.py +402 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/non_coverage.py +15 -7
- sourcecode-5.9.0/src/sourcecode/pr_risk.py +281 -0
- sourcecode-5.9.0/src/sourcecode/remediation_flow.py +259 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schema_registry.py +16 -0
- sourcecode-5.9.0/src/sourcecode/schemas/cve-reachability-v1.schema.json +130 -0
- sourcecode-5.9.0/src/sourcecode/self_audit.py +289 -0
- sourcecode-5.9.0/src/sourcecode/watch_loop.py +214 -0
- sourcecode-5.8.32/.github/workflows/windows-battery.yml +0 -60
- {sourcecode-5.8.32 → sourcecode-5.9.0}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/.gitignore +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/.ruff.toml +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/CLAUDE.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/CONTRIBUTING.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/LICENSE +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/NOTICE +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/SECURITY.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/overview.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/contracts.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/licensing-schema.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/migrate-check.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/README.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/posture.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/privacy.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/schema.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/hatch_build.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/scripts/perf_gate.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/scripts/perf_harness.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/scripts/test_fast.sh +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/license.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/packs.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/supabase/functions/README.md +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.8.32 → sourcecode-5.9.0}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: Windows battery
|
|
2
|
+
|
|
3
|
+
# AUD-601-X01 / S-10. Windows remains a release-evidence battery, but a full
|
|
4
|
+
# 20+ minute suite on every worktree commit exhausted the Actions allowance
|
|
5
|
+
# without providing a usable signal. Run it deliberately before a release or
|
|
6
|
+
# while investigating a Windows-specific regression.
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: windows-battery-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
battery:
|
|
17
|
+
runs-on: windows-latest
|
|
18
|
+
timeout-minutes: 35
|
|
19
|
+
env:
|
|
20
|
+
# CLI payloads and diagnostics are UTF-8 contracts. Without this Windows
|
|
21
|
+
# decodes child-process output with the active code page, turning a valid
|
|
22
|
+
# JSON answer containing source text into an empty/failed test response.
|
|
23
|
+
PYTHONUTF8: "1"
|
|
24
|
+
PYTHONIOENCODING: "utf-8"
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
with:
|
|
28
|
+
fetch-depth: 0
|
|
29
|
+
|
|
30
|
+
- uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: "3.11"
|
|
33
|
+
|
|
34
|
+
- name: Install
|
|
35
|
+
run: |
|
|
36
|
+
python -m pip install --upgrade pip
|
|
37
|
+
pip install -e .
|
|
38
|
+
pip install pytest pytest-xdist
|
|
39
|
+
|
|
40
|
+
- name: Suite
|
|
41
|
+
run: pytest
|
|
42
|
+
# `runner.*` is valid at step scope. Both stores stay outside the
|
|
43
|
+
# checkout so their files never become untracked input to an analysis.
|
|
44
|
+
env:
|
|
45
|
+
SOURCECODE_CACHE_DIR: ${{ runner.temp }}/ask-cache
|
|
46
|
+
SOURCECODE_CONTEXT_CACHE_DIR: ${{ runner.temp }}/ask-context-cache
|
|
@@ -1,5 +1,68 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.9.0] — 2026-08-26
|
|
4
|
+
|
|
5
|
+
*The `AUD-607` external round, closed: three defects fixed and the whole feature
|
|
6
|
+
intake built, one commit per row. Seven new commands (`cve`, `intent`,
|
|
7
|
+
`remediate`, `pr-risk`, `drift`, `watch`, `self-audit`) and two extended ones
|
|
8
|
+
(`baseline --kind findings`, `export --c4 --render`) make this the largest
|
|
9
|
+
addition to the command surface since 5.0, so the minor version moves.*
|
|
10
|
+
|
|
11
|
+
**Fixed**
|
|
12
|
+
|
|
13
|
+
- `chunk-file` emitted chunk content that did not match its own declared
|
|
14
|
+
`start_line`/`end_line`: the boundary path serialised the untruncated buffer
|
|
15
|
+
while declaring a truncated end line, so a chunk ran past its own range and
|
|
16
|
+
those lines repeated at the head of the next one. A second, separate defect
|
|
17
|
+
made the annotation buffer's clearing guard unreachable, so a field's
|
|
18
|
+
`@Autowired` was carried onto the following method while the field's own
|
|
19
|
+
declaration dropped out of that chunk. The reported "deliberate overlap" is
|
|
20
|
+
refuted; the declared range is now exact and asserted against file content.
|
|
21
|
+
- `explain` answered *"No stereotype detected"* under **Purpose** while listing
|
|
22
|
+
that same class's routes under **REST Endpoints**. Fixed by reading the
|
|
23
|
+
endpoint evidence the answer already computed — not by adding JAX-RS to a
|
|
24
|
+
Spring annotation list, which is the branching this project does not do.
|
|
25
|
+
- `--files -` claimed *"stdin is a terminal"* for a Git Bash/MSYS redirect it
|
|
26
|
+
cannot verify. The message now names the outcome and states both routes into
|
|
27
|
+
it (the C3-106 rule, already applied to `_confirm`).
|
|
28
|
+
|
|
29
|
+
**Added**
|
|
30
|
+
|
|
31
|
+
- `ask cve --feed <osv>` — dependency advisories gated on whether a route can
|
|
32
|
+
**reach** the vulnerable package. Takes no network at analysis time; an
|
|
33
|
+
unreadable feed is a refusal, never a clean scan; nothing answers *"not
|
|
34
|
+
reachable"*, and an unresolvable Maven version is `unknown`, never
|
|
35
|
+
`not_affected`. Schema `cve-reachability-v1`, published as a document.
|
|
36
|
+
- `ask intent "<question>"` — a plain-language question resolved to one of
|
|
37
|
+
`retrieve`'s typed queries. A scored lexical match against a declared
|
|
38
|
+
vocabulary: no model, no generation. Ambiguous or unanchored questions are
|
|
39
|
+
refused with the closest intents named.
|
|
40
|
+
- `ask remediate` — finding → recipe → apply in a dedicated worktree →
|
|
41
|
+
`verify-edit`. Dry by default; an apply that could not be verified reports
|
|
42
|
+
`unverified`, never `applied`. Schema `remediation-plan-v1`.
|
|
43
|
+
- `ask pr-risk` — one verdict for one diff, distinct from `pack gate`'s verdict
|
|
44
|
+
about the repository. `UNKNOWN` outranks `PASS` and fails every gate. Schema
|
|
45
|
+
`pr-risk-v1`.
|
|
46
|
+
- `ask drift` — what changed in the effective access, across time or across two
|
|
47
|
+
profile sets, with one arithmetic for both axes. Schema `access-drift-v1`.
|
|
48
|
+
- `ask watch` — one answer per save against a warm index; `--once` is the
|
|
49
|
+
pre-commit shape. Schema `watch-event-v1`.
|
|
50
|
+
- `ask self-audit` — whether the **installed** build's registries agree with each
|
|
51
|
+
other, and an explicit statement of what it cannot check. Schema
|
|
52
|
+
`self-audit-v1`.
|
|
53
|
+
- `ask baseline capture|diff|trend --kind findings` — the defect population as a
|
|
54
|
+
persisted series, so "how long has this been open?" has an answer. Schema
|
|
55
|
+
`findings-baseline-v1`.
|
|
56
|
+
- `ask export --c4 --render mermaid|svg` — draws the C4 model instead of only
|
|
57
|
+
emitting it, with the node cap written on the canvas.
|
|
58
|
+
|
|
59
|
+
**Note.** Building the features surfaced three defects no audit round had
|
|
60
|
+
reported: the C4 renderer's first version drew report metadata (`summary`,
|
|
61
|
+
`coverage_note`) as system architecture; the watch loop stat-ed
|
|
62
|
+
repository-relative paths against the process CWD and so reported "nothing
|
|
63
|
+
changed" on every tick; and `self-audit` found its own schema identifier
|
|
64
|
+
unregistered on its first run. Each is now held by an assertion.
|
|
65
|
+
|
|
3
66
|
## [5.8.32] — 2026-08-26
|
|
4
67
|
|
|
5
68
|
*MCP and documentation alignment release. MCP assessment packs now support
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.9.0
|
|
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
|
|
@@ -188,7 +188,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
188
188
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
189
189
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
190
190
|
|
|
191
|
-
**Current performance status.** Release 5.
|
|
191
|
+
**Current performance status.** Release 5.9.0 retains the shared Canonical IR
|
|
192
192
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
193
193
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
194
194
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -222,7 +222,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
222
222
|
# pip / pipx
|
|
223
223
|
pipx install sourcecode # or: pip install sourcecode
|
|
224
224
|
|
|
225
|
-
ask version # ask 5.
|
|
225
|
+
ask version # ask 5.9.0 — and, on a build that has aged,
|
|
226
226
|
# how many releases have probably shipped since
|
|
227
227
|
```
|
|
228
228
|
|
|
@@ -332,6 +332,41 @@ ask verify /path/to/repo --capture-baseline # accept today's debt, once
|
|
|
332
332
|
ask verify /path/to/repo # then: only new violations block
|
|
333
333
|
```
|
|
334
334
|
|
|
335
|
+
**And the loop that closes.** Finding, question and change each had a command; what they
|
|
336
|
+
did not have was a way through. These are the joins, and each refuses rather than guess:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# Which advisories a route can actually REACH — not which are on the classpath.
|
|
340
|
+
# Reads a LOCAL feed; no network is taken, so a CI gate can never pass because a
|
|
341
|
+
# fetch timed out. Nothing answers "not reachable": absence of a resolved edge is
|
|
342
|
+
# not absence of use, and the payload says so.
|
|
343
|
+
ask cve /path/to/repo --feed ./osv-maven.json --reachable-only
|
|
344
|
+
|
|
345
|
+
# Ask in your own words. It SELECTS one of retrieve's 29 typed queries and prints
|
|
346
|
+
# it (--run executes it); it never invents an answer, and a question that fits two
|
|
347
|
+
# intents too closely is refused with both named.
|
|
348
|
+
ask intent "what breaks if I change OrderService?"
|
|
349
|
+
|
|
350
|
+
# Finding → recipe → apply in a dedicated worktree → verify. Dry by default. Most
|
|
351
|
+
# findings are not mechanical, and the plan says which and why.
|
|
352
|
+
ask remediate /path/to/repo
|
|
353
|
+
|
|
354
|
+
# One verdict for THIS diff, not for the repository. A changed file that maps to no
|
|
355
|
+
# class caps the verdict at UNKNOWN — a partial blast radius is not a small one —
|
|
356
|
+
# and UNKNOWN fails every gate.
|
|
357
|
+
git diff --name-only main | ask pr-risk /path/to/repo --files - --fail-on block
|
|
358
|
+
|
|
359
|
+
# What opened up since the last capture, on the axis posture --diff does not have.
|
|
360
|
+
ask drift /path/to/repo --profile prod --capture # record today
|
|
361
|
+
ask drift /path/to/repo --profile prod # then: what moved
|
|
362
|
+
|
|
363
|
+
# While you edit: one answer per save, against the warm index.
|
|
364
|
+
ask watch /path/to/repo --once
|
|
365
|
+
|
|
366
|
+
# Show me the architecture, don't hand me JSON to render.
|
|
367
|
+
ask export /path/to/repo --c4 --render mermaid
|
|
368
|
+
```
|
|
369
|
+
|
|
335
370
|
> **Adopting a gate on a real codebase.** Nobody hand-writes contracts for a 3 000-file
|
|
336
371
|
> monolith, so `ask verify --init` derives the ones the repository satisfies **today** and
|
|
337
372
|
> executes each before writing it — init followed by verify passes by construction.
|
|
@@ -360,27 +395,27 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
|
|
|
360
395
|
|
|
361
396
|
### 2 · Impact Analysis
|
|
362
397
|
Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
|
|
363
|
-
`ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact`
|
|
398
|
+
`ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact` · `ask pr-risk` (one verdict for the diff — `UNKNOWN` when the blast radius has a hole, and `UNKNOWN` fails the gate)
|
|
364
399
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
365
400
|
|
|
366
401
|
### 3 · Architecture Intelligence
|
|
367
402
|
The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
|
|
368
|
-
`ask export` · `ask repo-ir` · `ask endpoints` · `ask explain` · `ask timeline` (*experimental* — the same views over the commit series: when a number moved, and in which window)
|
|
403
|
+
`ask export` (`--c4 --render mermaid|svg` draws it) · `ask repo-ir` · `ask endpoints` · `ask explain` · `ask timeline` (*experimental* — the same views over the commit series: when a number moved, and in which window)
|
|
369
404
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
370
405
|
|
|
371
406
|
### 4 · Migration & Modernization
|
|
372
407
|
Is this codebase ready to upgrade? Per-dimension readiness (Jakarta / Spring Boot / JDK / Hibernate), located blockers, an effort estimate, and — with `--blast-radius` — the endpoints whose call path runs through each blocker, so the re-test plan is ordered by regression scope.
|
|
373
|
-
`ask migrate-check` · `ask modernize`
|
|
408
|
+
`ask migrate-check` · `ask modernize` · `ask remediate` (finding → recipe → apply → **verify**; dry by default, and an apply it could not verify is never reported as applied)
|
|
374
409
|
→ [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
|
|
375
410
|
|
|
376
411
|
### 5 · Spring Analysis
|
|
377
412
|
Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
|
|
378
|
-
`ask spring-audit` · `ask validation`
|
|
413
|
+
`ask spring-audit` · `ask validation` · `ask cve` (dependency advisories gated on whether a route can **reach** the vulnerable package — from a local feed, with no network taken)
|
|
379
414
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
380
415
|
|
|
381
416
|
### 5b · Runtime Posture *(experimental — and the most differentiated thing here)*
|
|
382
417
|
What a profile set **actually wires**: which conditional beans register, which do not, and which conditions could not be decided at all — then the effective endpoint access that follows from the filter chain. `--diff` answers the question nobody else answers in one command: *what changes between `dev` and `prod`, across every endpoint at once.*
|
|
383
|
-
`ask posture` · `ask posture --diff dev:prod` · `ask posture --property k=v`
|
|
418
|
+
`ask posture` · `ask posture --diff dev:prod` · `ask posture --property k=v` · `ask drift` (the same comparison across **time** — what opened up since the last capture)
|
|
384
419
|
→ [posture.md](docs/posture.md)
|
|
385
420
|
|
|
386
421
|
**`--diff-ref` makes it a gate instead of a report.** `--diff` moves the profile set; `--diff-ref origin/main:HEAD` (or `--since origin/main`, which compares a ref with the working tree) moves the *tree* under one profile set and answers *did this branch open an endpoint*. `--fail-on opened` exits 1 when it did. Both refs are read with `git archive` — nothing is written to the repository. The comparison is keyed on the request (`METHOD path`), counts requests only one side serves, and never reports a rule that disappeared as protection gained.
|
|
@@ -432,11 +467,11 @@ remains `NC-001` and is published in the payload's own `non_coverage` block.
|
|
|
432
467
|
|
|
433
468
|
### 6 · Developer Workflows
|
|
434
469
|
The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
|
|
435
|
-
`ask review-pr` · `ask fix-bug` · `ask prepare-context`
|
|
470
|
+
`ask review-pr` · `ask fix-bug` · `ask prepare-context` · `ask watch` (one answer per save, against a warm index) · `ask intent "<question>"` (a plain-language question resolved to a typed query — it selects one, it never invents an answer)
|
|
436
471
|
→ [reference](docs/USER_GUIDE.md#typical-workflows)
|
|
437
472
|
|
|
438
473
|
### 7 · Utilities
|
|
439
|
-
`ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / model / clear / freshness)
|
|
474
|
+
`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?)
|
|
440
475
|
→ [reference](docs/USER_GUIDE.md)
|
|
441
476
|
|
|
442
477
|
---
|
|
@@ -485,12 +520,19 @@ from it.
|
|
|
485
520
|
| `verify-edit` | supported | did the working-tree edits change runtime behaviour | semantic diff gate for the edit loop |
|
|
486
521
|
| `--compact` / `--agent` | — | bounded structural context for an agent | flags of the root command, not commands: not tiered |
|
|
487
522
|
| `onboard` / `explain` / `cold-start` | supported | orientation in an unfamiliar repo; per-class summary; bootstrap snapshot | `onboard` publishes `population`, `population_unit` and `population_total` for its source-file universe |
|
|
488
|
-
| `export` / `repo-ir` / `schema` | supported | tool-agnostic views (C4, module graph, integrations); symbol-level IR; published JSON Schemas | |
|
|
523
|
+
| `export` / `repo-ir` / `schema` | supported | tool-agnostic views (C4, module graph, integrations); symbol-level IR; published JSON Schemas | `export --c4 --render mermaid\|svg` **draws** the model instead of only emitting it — presentation over the same payload, with the node cap written on the canvas |
|
|
489
524
|
| `modernize` | supported | coupling hubs, cycles, dead zones, refactor candidates | |
|
|
490
525
|
| `review-pr` / `fix-bug` / `prepare-context` | supported | diff review, symptom triage, task-shaped context | |
|
|
491
526
|
| `plan` / `compare` / `delta` / `contract-diff` | supported | what to review for a change; candidates by measured cost; outcome of a change; public-contract break | no verdicts, measured cost only |
|
|
492
527
|
| `validation` | supported | request-body validation coverage and gaps | |
|
|
493
|
-
| `baseline capture\|diff` · `trend` | supported | versioned architectural metrics over time; `ask trend .` reads the series (a repository path or a baselines directory), `ask baseline diff .` compares the tree against its newest point | trend reporting, not gating. Baselines land in `.ask/baselines` **inside the repository** — the history travels with the code, not with a vendor; an audit that must not write passes `--dir`. `capture --auto` is the unattended form (one baseline per commit, never rewrites one, never fails the build) — automate it: [baseline-ci.yml](docs/baseline-ci.yml) |
|
|
528
|
+
| `baseline capture\|diff` · `trend` | supported | versioned architectural metrics over time — and, with `--kind findings`, the **defect population** as a series, so "open since 5.8.28" is answerable without anybody keeping the tally (`first_seen` is the earliest STORED capture, and the payload says so); `ask trend .` reads the series (a repository path or a baselines directory), `ask baseline diff .` compares the tree against its newest point | trend reporting, not gating. Baselines land in `.ask/baselines` **inside the repository** — the history travels with the code, not with a vendor; an audit that must not write passes `--dir`. `capture --auto` is the unattended form (one baseline per commit, never rewrites one, never fails the build) — automate it: [baseline-ci.yml](docs/baseline-ci.yml) |
|
|
529
|
+
| `cve` | supported | which dependency advisories a route can actually **reach** — not which are on the classpath | reads a **local** OSV feed (`--feed`); takes no network at analysis time, so a CI gate can never pass because a fetch timed out. Four verdicts: `reachable` (with the routes), `imported_not_exposed`, `not_observed` and `unknown`. Nothing answers *"not reachable"* — reflection, SPI loading and container wiring reach code no source edge names — and an unresolved Maven version is `unknown`, never `not_affected`. Feed staleness is read off the feed's own dates |
|
|
530
|
+
| `intent` | supported | a plain-language question, resolved to the typed `retrieve` query that answers it | `ask intent "what breaks if I change OrderService?"`. A scored lexical match against a declared vocabulary — **no model, no generation** — so it resolves identically on every machine. It selects a query and prints it; `--run` executes it. A question fitting two intents too closely is refused with both named, because a well-formed answer to a question you did not ask is invisible once printed |
|
|
531
|
+
| `remediate` | supported | the loop from a finding to a **verified** change | audit → recipe → apply in a dedicated worktree → `verify-edit`. Dry by default. Most findings are not mechanical and the plan says which and why; an apply that could not be verified reports `unverified`, never `applied` |
|
|
532
|
+
| `pr-risk` | supported | one verdict for **this diff** — does the change make things worse? | `pack gate` answers about the repository; this answers about the change. Joins `pr-impact` reach, endpoint access, the shared risk model and CODEOWNERS. `--since` differences route inventories so `new_endpoints` is a fact rather than a guess. A changed file that maps to no class caps the verdict at `UNKNOWN`, which fails every gate — a partial blast radius is not a small one |
|
|
533
|
+
| `drift` | supported | what changed in the **effective access**, and when | `--capture` records; the default compares against the last record; `--against` compares two profile sets. One arithmetic for both axes, so the time answer and the environment answer cannot disagree. `newly_unmatched` and `newly_matched` are separate buckets, and a `removed` route is never reported as having become safe |
|
|
534
|
+
| `watch` | supported | what each save affected, against a warm index | one JSON line per tick. `--once` is the pre-commit shape; `--ticks`/`--for` bound the loop. A failed analysis is an `error` tick, never an empty change list; a file added since the warm is `unresolved`, not `unreachable` |
|
|
535
|
+
| `self-audit` | supported | whether the **installed build's** own registries agree with each other | a battery proves the source tree consistent while a user runs a wheel. Checks the cache model, format contract, schema registry and output affordances. Says plainly what it cannot check: the semantic engine analyses Java and this build is Python, so those figures are declared absent rather than reported as zeros |
|
|
494
536
|
| `retrieve` | parked | typed knowledge queries over the model | symbol-oriented queries accept `--target/-t`; domain aliases such as `--module/-m`, `--subsystem/-s` and `--endpoint/-e` remain supported |
|
|
495
537
|
| `timeline` | experimental | since when a number moved, and in which commit window | walks the commit series and re-runs the shipped analyses (`posture`, `data-exposure`, `endpoints`, `spring-audit`) on a read-only materialisation of each sampled tree; publishes transitions, not a per-commit dump. A sample that could not be analysed is `null` with a reason, never 0, and a transition under sampling carries the window it could have happened in |
|
|
496
538
|
| `regress` | supported | what moved between two payloads of the same command, and which declaration accounts for it | attributes each delta to a declaration the answers carry (`test_source_excluded`, `symbols_excluded`, `coverage.gaps`, `*_cap`, `waivers`); a delta nothing explains is `unattributed`. Refuses the comparison when `cache_layers`, `base_env` or the analyzer fingerprint differ |
|
|
@@ -543,7 +585,7 @@ reading JSON sees the same boundary a buyer reads here.
|
|
|
543
585
|
| **General request-input-to-sink taint analysis.** | `ask risk` includes two bounded slices for annotated HTTP parameters and positional calls in repository Java sources: known query sinks, and MyBatis statements that splice a value into their SQL. “Known” is a published list — `risk` prints it as `query_sink_vocabulary`, with the calls it deliberately leaves out and why — so a concatenation into a call outside that list is not a miss to be discovered, it is a stated boundary. Anything broader needs value flow through a program, which is a different analysis with a different failure mode: an unsound one produces confident findings that are wrong, and every claim here is meant to be checkable against the line that produced it. | A dataflow scanner (Semgrep, CodeQL) for complete taint. What this product adds on top is reachability and, for the two bounded slices, whether an annotated HTTP input reaches a known concatenated query sink or a spliced SQL statement — the latter with a three-state verdict that says `undecidable` rather than clearing a route it could not follow. |
|
|
544
586
|
| **Secrets outside Java, Spring configuration and the deployment descriptors — a Helm value, a CI variable file, a shell script.** | The file population this analyzer reads is the Java source, the Spring configuration convention and the descriptors it already parses to resolve an environment. A secret elsewhere is not missed by a weak rule; it is outside the set of files anything here opens. Narrowed by CL-10: a credential stored in `web.xml` or a Spring XML context IS reported (SEC-007), because those files were already being read. | A dedicated secret scanner over the whole tree (gitleaks, trufflehog). |
|
|
545
587
|
| **Filter-chain order and per-filter URL patterns — the presence of a custom filter is structural only.** | Which filter runs first is decided by bean ordering this analyzer does not resolve. Where two active configurations both match a request, the answer published is `undecided` rather than a guess. | `ask posture --profile <set>` states per endpoint what the readable rules decide and what they leave undecided. |
|
|
546
|
-
| **
|
|
588
|
+
| **Discovering vulnerabilities, and shipping the database that lists them — no embedded CVE feed, no network lookup at analysis time.** | Maintaining a vulnerability feed is a different product with a different update cadence, and a stale embedded database is worse than no database because it reads as a clean bill of health. That boundary is unchanged. What IS built is the half this project can be responsible for: `ask cve --feed <osv.json>` takes a feed you supply and pin, and answers whether a route can actually REACH the vulnerable package, using the same blast radius as `impact-chain`. The feed's own staleness travels with the answer, an unreadable feed is a refusal rather than a clean scan, and nothing there answers "not reachable". | A dependency scanner (Trivy, OWASP Dependency-Check, an OSV export) supplies the advisories; `ask cve` says which of them anything actually reaches. |
|
|
547
589
|
|
|
548
590
|
Two more boundaries worth stating in the same voice:
|
|
549
591
|
|
|
@@ -643,6 +685,10 @@ power on Free for small and mid-size repos; you upgrade when the work gets bigge
|
|
|
643
685
|
ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
|
|
644
686
|
Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
|
|
645
687
|
|
|
688
|
+
The future commercial direction is staged rather than an immediate product
|
|
689
|
+
restriction: free adoption, self-serve scale, B2B infrastructure licensing and
|
|
690
|
+
a generated public trust projection. See the [monetization review](docs/AUDIT-2026-08-26-MONETIZATION.md).
|
|
691
|
+
|
|
646
692
|
---
|
|
647
693
|
|
|
648
694
|
## Configuration & privacy
|
|
@@ -717,4 +763,5 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
|
|
|
717
763
|
| [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
|
|
718
764
|
| [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
|
|
719
765
|
| [DEFECT-LEDGER.md](docs/DEFECT-LEDGER.md) | Every defect found in the field, its class, and which release closed it — published on purpose |
|
|
766
|
+
| [AUDIT-2026-08-26-EXTERNAL-5.8.32.md](docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md) | The most recent external review, its reproduced and **unreproduced** findings, and the feature intake it opened |
|
|
720
767
|
| [spec/envelope-v1.md](docs/spec/envelope-v1.md) | The output format as an **open specification** — provenance, a named unit, a stated basis, declared non-coverage. Implementable by tools that are not this one; the field table is generated from the schema `ask schema envelope-v1` prints |
|
|
@@ -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
|
|
@@ -139,7 +139,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
139
139
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
140
140
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
141
141
|
|
|
142
|
-
**Current performance status.** Release 5.
|
|
142
|
+
**Current performance status.** Release 5.9.0 retains the shared Canonical IR
|
|
143
143
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
144
144
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
145
145
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
@@ -173,7 +173,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
173
173
|
# pip / pipx
|
|
174
174
|
pipx install sourcecode # or: pip install sourcecode
|
|
175
175
|
|
|
176
|
-
ask version # ask 5.
|
|
176
|
+
ask version # ask 5.9.0 — and, on a build that has aged,
|
|
177
177
|
# how many releases have probably shipped since
|
|
178
178
|
```
|
|
179
179
|
|
|
@@ -283,6 +283,41 @@ ask verify /path/to/repo --capture-baseline # accept today's debt, once
|
|
|
283
283
|
ask verify /path/to/repo # then: only new violations block
|
|
284
284
|
```
|
|
285
285
|
|
|
286
|
+
**And the loop that closes.** Finding, question and change each had a command; what they
|
|
287
|
+
did not have was a way through. These are the joins, and each refuses rather than guess:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
# Which advisories a route can actually REACH — not which are on the classpath.
|
|
291
|
+
# Reads a LOCAL feed; no network is taken, so a CI gate can never pass because a
|
|
292
|
+
# fetch timed out. Nothing answers "not reachable": absence of a resolved edge is
|
|
293
|
+
# not absence of use, and the payload says so.
|
|
294
|
+
ask cve /path/to/repo --feed ./osv-maven.json --reachable-only
|
|
295
|
+
|
|
296
|
+
# Ask in your own words. It SELECTS one of retrieve's 29 typed queries and prints
|
|
297
|
+
# it (--run executes it); it never invents an answer, and a question that fits two
|
|
298
|
+
# intents too closely is refused with both named.
|
|
299
|
+
ask intent "what breaks if I change OrderService?"
|
|
300
|
+
|
|
301
|
+
# Finding → recipe → apply in a dedicated worktree → verify. Dry by default. Most
|
|
302
|
+
# findings are not mechanical, and the plan says which and why.
|
|
303
|
+
ask remediate /path/to/repo
|
|
304
|
+
|
|
305
|
+
# One verdict for THIS diff, not for the repository. A changed file that maps to no
|
|
306
|
+
# class caps the verdict at UNKNOWN — a partial blast radius is not a small one —
|
|
307
|
+
# and UNKNOWN fails every gate.
|
|
308
|
+
git diff --name-only main | ask pr-risk /path/to/repo --files - --fail-on block
|
|
309
|
+
|
|
310
|
+
# What opened up since the last capture, on the axis posture --diff does not have.
|
|
311
|
+
ask drift /path/to/repo --profile prod --capture # record today
|
|
312
|
+
ask drift /path/to/repo --profile prod # then: what moved
|
|
313
|
+
|
|
314
|
+
# While you edit: one answer per save, against the warm index.
|
|
315
|
+
ask watch /path/to/repo --once
|
|
316
|
+
|
|
317
|
+
# Show me the architecture, don't hand me JSON to render.
|
|
318
|
+
ask export /path/to/repo --c4 --render mermaid
|
|
319
|
+
```
|
|
320
|
+
|
|
286
321
|
> **Adopting a gate on a real codebase.** Nobody hand-writes contracts for a 3 000-file
|
|
287
322
|
> monolith, so `ask verify --init` derives the ones the repository satisfies **today** and
|
|
288
323
|
> executes each before writing it — init followed by verify passes by construction.
|
|
@@ -311,27 +346,27 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
|
|
|
311
346
|
|
|
312
347
|
### 2 · Impact Analysis
|
|
313
348
|
Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
|
|
314
|
-
`ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact`
|
|
349
|
+
`ask impact` · `ask impact-chain` (blast radius; `--with-findings` for TX/SEC audit findings) · `ask pr-impact` · `ask pr-risk` (one verdict for the diff — `UNKNOWN` when the blast radius has a hole, and `UNKNOWN` fails the gate)
|
|
315
350
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
316
351
|
|
|
317
352
|
### 3 · Architecture Intelligence
|
|
318
353
|
The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
|
|
319
|
-
`ask export` · `ask repo-ir` · `ask endpoints` · `ask explain` · `ask timeline` (*experimental* — the same views over the commit series: when a number moved, and in which window)
|
|
354
|
+
`ask export` (`--c4 --render mermaid|svg` draws it) · `ask repo-ir` · `ask endpoints` · `ask explain` · `ask timeline` (*experimental* — the same views over the commit series: when a number moved, and in which window)
|
|
320
355
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
321
356
|
|
|
322
357
|
### 4 · Migration & Modernization
|
|
323
358
|
Is this codebase ready to upgrade? Per-dimension readiness (Jakarta / Spring Boot / JDK / Hibernate), located blockers, an effort estimate, and — with `--blast-radius` — the endpoints whose call path runs through each blocker, so the re-test plan is ordered by regression scope.
|
|
324
|
-
`ask migrate-check` · `ask modernize`
|
|
359
|
+
`ask migrate-check` · `ask modernize` · `ask remediate` (finding → recipe → apply → **verify**; dry by default, and an apply it could not verify is never reported as applied)
|
|
325
360
|
→ [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
|
|
326
361
|
|
|
327
362
|
### 5 · Spring Analysis
|
|
328
363
|
Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
|
|
329
|
-
`ask spring-audit` · `ask validation`
|
|
364
|
+
`ask spring-audit` · `ask validation` · `ask cve` (dependency advisories gated on whether a route can **reach** the vulnerable package — from a local feed, with no network taken)
|
|
330
365
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
331
366
|
|
|
332
367
|
### 5b · Runtime Posture *(experimental — and the most differentiated thing here)*
|
|
333
368
|
What a profile set **actually wires**: which conditional beans register, which do not, and which conditions could not be decided at all — then the effective endpoint access that follows from the filter chain. `--diff` answers the question nobody else answers in one command: *what changes between `dev` and `prod`, across every endpoint at once.*
|
|
334
|
-
`ask posture` · `ask posture --diff dev:prod` · `ask posture --property k=v`
|
|
369
|
+
`ask posture` · `ask posture --diff dev:prod` · `ask posture --property k=v` · `ask drift` (the same comparison across **time** — what opened up since the last capture)
|
|
335
370
|
→ [posture.md](docs/posture.md)
|
|
336
371
|
|
|
337
372
|
**`--diff-ref` makes it a gate instead of a report.** `--diff` moves the profile set; `--diff-ref origin/main:HEAD` (or `--since origin/main`, which compares a ref with the working tree) moves the *tree* under one profile set and answers *did this branch open an endpoint*. `--fail-on opened` exits 1 when it did. Both refs are read with `git archive` — nothing is written to the repository. The comparison is keyed on the request (`METHOD path`), counts requests only one side serves, and never reports a rule that disappeared as protection gained.
|
|
@@ -383,11 +418,11 @@ remains `NC-001` and is published in the payload's own `non_coverage` block.
|
|
|
383
418
|
|
|
384
419
|
### 6 · Developer Workflows
|
|
385
420
|
The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
|
|
386
|
-
`ask review-pr` · `ask fix-bug` · `ask prepare-context`
|
|
421
|
+
`ask review-pr` · `ask fix-bug` · `ask prepare-context` · `ask watch` (one answer per save, against a warm index) · `ask intent "<question>"` (a plain-language question resolved to a typed query — it selects one, it never invents an answer)
|
|
387
422
|
→ [reference](docs/USER_GUIDE.md#typical-workflows)
|
|
388
423
|
|
|
389
424
|
### 7 · Utilities
|
|
390
|
-
`ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / model / clear / freshness)
|
|
425
|
+
`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?)
|
|
391
426
|
→ [reference](docs/USER_GUIDE.md)
|
|
392
427
|
|
|
393
428
|
---
|
|
@@ -436,12 +471,19 @@ from it.
|
|
|
436
471
|
| `verify-edit` | supported | did the working-tree edits change runtime behaviour | semantic diff gate for the edit loop |
|
|
437
472
|
| `--compact` / `--agent` | — | bounded structural context for an agent | flags of the root command, not commands: not tiered |
|
|
438
473
|
| `onboard` / `explain` / `cold-start` | supported | orientation in an unfamiliar repo; per-class summary; bootstrap snapshot | `onboard` publishes `population`, `population_unit` and `population_total` for its source-file universe |
|
|
439
|
-
| `export` / `repo-ir` / `schema` | supported | tool-agnostic views (C4, module graph, integrations); symbol-level IR; published JSON Schemas | |
|
|
474
|
+
| `export` / `repo-ir` / `schema` | supported | tool-agnostic views (C4, module graph, integrations); symbol-level IR; published JSON Schemas | `export --c4 --render mermaid\|svg` **draws** the model instead of only emitting it — presentation over the same payload, with the node cap written on the canvas |
|
|
440
475
|
| `modernize` | supported | coupling hubs, cycles, dead zones, refactor candidates | |
|
|
441
476
|
| `review-pr` / `fix-bug` / `prepare-context` | supported | diff review, symptom triage, task-shaped context | |
|
|
442
477
|
| `plan` / `compare` / `delta` / `contract-diff` | supported | what to review for a change; candidates by measured cost; outcome of a change; public-contract break | no verdicts, measured cost only |
|
|
443
478
|
| `validation` | supported | request-body validation coverage and gaps | |
|
|
444
|
-
| `baseline capture\|diff` · `trend` | supported | versioned architectural metrics over time; `ask trend .` reads the series (a repository path or a baselines directory), `ask baseline diff .` compares the tree against its newest point | trend reporting, not gating. Baselines land in `.ask/baselines` **inside the repository** — the history travels with the code, not with a vendor; an audit that must not write passes `--dir`. `capture --auto` is the unattended form (one baseline per commit, never rewrites one, never fails the build) — automate it: [baseline-ci.yml](docs/baseline-ci.yml) |
|
|
479
|
+
| `baseline capture\|diff` · `trend` | supported | versioned architectural metrics over time — and, with `--kind findings`, the **defect population** as a series, so "open since 5.8.28" is answerable without anybody keeping the tally (`first_seen` is the earliest STORED capture, and the payload says so); `ask trend .` reads the series (a repository path or a baselines directory), `ask baseline diff .` compares the tree against its newest point | trend reporting, not gating. Baselines land in `.ask/baselines` **inside the repository** — the history travels with the code, not with a vendor; an audit that must not write passes `--dir`. `capture --auto` is the unattended form (one baseline per commit, never rewrites one, never fails the build) — automate it: [baseline-ci.yml](docs/baseline-ci.yml) |
|
|
480
|
+
| `cve` | supported | which dependency advisories a route can actually **reach** — not which are on the classpath | reads a **local** OSV feed (`--feed`); takes no network at analysis time, so a CI gate can never pass because a fetch timed out. Four verdicts: `reachable` (with the routes), `imported_not_exposed`, `not_observed` and `unknown`. Nothing answers *"not reachable"* — reflection, SPI loading and container wiring reach code no source edge names — and an unresolved Maven version is `unknown`, never `not_affected`. Feed staleness is read off the feed's own dates |
|
|
481
|
+
| `intent` | supported | a plain-language question, resolved to the typed `retrieve` query that answers it | `ask intent "what breaks if I change OrderService?"`. A scored lexical match against a declared vocabulary — **no model, no generation** — so it resolves identically on every machine. It selects a query and prints it; `--run` executes it. A question fitting two intents too closely is refused with both named, because a well-formed answer to a question you did not ask is invisible once printed |
|
|
482
|
+
| `remediate` | supported | the loop from a finding to a **verified** change | audit → recipe → apply in a dedicated worktree → `verify-edit`. Dry by default. Most findings are not mechanical and the plan says which and why; an apply that could not be verified reports `unverified`, never `applied` |
|
|
483
|
+
| `pr-risk` | supported | one verdict for **this diff** — does the change make things worse? | `pack gate` answers about the repository; this answers about the change. Joins `pr-impact` reach, endpoint access, the shared risk model and CODEOWNERS. `--since` differences route inventories so `new_endpoints` is a fact rather than a guess. A changed file that maps to no class caps the verdict at `UNKNOWN`, which fails every gate — a partial blast radius is not a small one |
|
|
484
|
+
| `drift` | supported | what changed in the **effective access**, and when | `--capture` records; the default compares against the last record; `--against` compares two profile sets. One arithmetic for both axes, so the time answer and the environment answer cannot disagree. `newly_unmatched` and `newly_matched` are separate buckets, and a `removed` route is never reported as having become safe |
|
|
485
|
+
| `watch` | supported | what each save affected, against a warm index | one JSON line per tick. `--once` is the pre-commit shape; `--ticks`/`--for` bound the loop. A failed analysis is an `error` tick, never an empty change list; a file added since the warm is `unresolved`, not `unreachable` |
|
|
486
|
+
| `self-audit` | supported | whether the **installed build's** own registries agree with each other | a battery proves the source tree consistent while a user runs a wheel. Checks the cache model, format contract, schema registry and output affordances. Says plainly what it cannot check: the semantic engine analyses Java and this build is Python, so those figures are declared absent rather than reported as zeros |
|
|
445
487
|
| `retrieve` | parked | typed knowledge queries over the model | symbol-oriented queries accept `--target/-t`; domain aliases such as `--module/-m`, `--subsystem/-s` and `--endpoint/-e` remain supported |
|
|
446
488
|
| `timeline` | experimental | since when a number moved, and in which commit window | walks the commit series and re-runs the shipped analyses (`posture`, `data-exposure`, `endpoints`, `spring-audit`) on a read-only materialisation of each sampled tree; publishes transitions, not a per-commit dump. A sample that could not be analysed is `null` with a reason, never 0, and a transition under sampling carries the window it could have happened in |
|
|
447
489
|
| `regress` | supported | what moved between two payloads of the same command, and which declaration accounts for it | attributes each delta to a declaration the answers carry (`test_source_excluded`, `symbols_excluded`, `coverage.gaps`, `*_cap`, `waivers`); a delta nothing explains is `unattributed`. Refuses the comparison when `cache_layers`, `base_env` or the analyzer fingerprint differ |
|
|
@@ -494,7 +536,7 @@ reading JSON sees the same boundary a buyer reads here.
|
|
|
494
536
|
| **General request-input-to-sink taint analysis.** | `ask risk` includes two bounded slices for annotated HTTP parameters and positional calls in repository Java sources: known query sinks, and MyBatis statements that splice a value into their SQL. “Known” is a published list — `risk` prints it as `query_sink_vocabulary`, with the calls it deliberately leaves out and why — so a concatenation into a call outside that list is not a miss to be discovered, it is a stated boundary. Anything broader needs value flow through a program, which is a different analysis with a different failure mode: an unsound one produces confident findings that are wrong, and every claim here is meant to be checkable against the line that produced it. | A dataflow scanner (Semgrep, CodeQL) for complete taint. What this product adds on top is reachability and, for the two bounded slices, whether an annotated HTTP input reaches a known concatenated query sink or a spliced SQL statement — the latter with a three-state verdict that says `undecidable` rather than clearing a route it could not follow. |
|
|
495
537
|
| **Secrets outside Java, Spring configuration and the deployment descriptors — a Helm value, a CI variable file, a shell script.** | The file population this analyzer reads is the Java source, the Spring configuration convention and the descriptors it already parses to resolve an environment. A secret elsewhere is not missed by a weak rule; it is outside the set of files anything here opens. Narrowed by CL-10: a credential stored in `web.xml` or a Spring XML context IS reported (SEC-007), because those files were already being read. | A dedicated secret scanner over the whole tree (gitleaks, trufflehog). |
|
|
496
538
|
| **Filter-chain order and per-filter URL patterns — the presence of a custom filter is structural only.** | Which filter runs first is decided by bean ordering this analyzer does not resolve. Where two active configurations both match a request, the answer published is `undecided` rather than a guess. | `ask posture --profile <set>` states per endpoint what the readable rules decide and what they leave undecided. |
|
|
497
|
-
| **
|
|
539
|
+
| **Discovering vulnerabilities, and shipping the database that lists them — no embedded CVE feed, no network lookup at analysis time.** | Maintaining a vulnerability feed is a different product with a different update cadence, and a stale embedded database is worse than no database because it reads as a clean bill of health. That boundary is unchanged. What IS built is the half this project can be responsible for: `ask cve --feed <osv.json>` takes a feed you supply and pin, and answers whether a route can actually REACH the vulnerable package, using the same blast radius as `impact-chain`. The feed's own staleness travels with the answer, an unreadable feed is a refusal rather than a clean scan, and nothing there answers "not reachable". | A dependency scanner (Trivy, OWASP Dependency-Check, an OSV export) supplies the advisories; `ask cve` says which of them anything actually reaches. |
|
|
498
540
|
|
|
499
541
|
Two more boundaries worth stating in the same voice:
|
|
500
542
|
|
|
@@ -594,6 +636,10 @@ power on Free for small and mid-size repos; you upgrade when the work gets bigge
|
|
|
594
636
|
ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
|
|
595
637
|
Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
|
|
596
638
|
|
|
639
|
+
The future commercial direction is staged rather than an immediate product
|
|
640
|
+
restriction: free adoption, self-serve scale, B2B infrastructure licensing and
|
|
641
|
+
a generated public trust projection. See the [monetization review](docs/AUDIT-2026-08-26-MONETIZATION.md).
|
|
642
|
+
|
|
597
643
|
---
|
|
598
644
|
|
|
599
645
|
## Configuration & privacy
|
|
@@ -668,4 +714,5 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
|
|
|
668
714
|
| [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
|
|
669
715
|
| [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
|
|
670
716
|
| [DEFECT-LEDGER.md](docs/DEFECT-LEDGER.md) | Every defect found in the field, its class, and which release closed it — published on purpose |
|
|
717
|
+
| [AUDIT-2026-08-26-EXTERNAL-5.8.32.md](docs/AUDIT-2026-08-26-EXTERNAL-5.8.32.md) | The most recent external review, its reproduced and **unreproduced** findings, and the feature intake it opened |
|
|
671
718
|
| [spec/envelope-v1.md](docs/spec/envelope-v1.md) | The output format as an **open specification** — provenance, a named unit, a stated basis, declared non-coverage. Implementable by tools that are not this one; the field table is generated from the schema `ask schema envelope-v1` prints |
|