sourcecode 5.8.31__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.31 → sourcecode-5.9.0}/CHANGELOG.md +71 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/PKG-INFO +77 -18
- {sourcecode-5.8.31 → sourcecode-5.9.0}/README.md +76 -17
- sourcecode-5.9.0/docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md +87 -0
- 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.31 → sourcecode-5.9.0}/docs/CACHE.md +7 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/DEFECT-LEDGER.md +89 -1
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/DEMO-5MIN.md +16 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/DEVELOPMENT-ROADMAP.md +58 -15
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/EXECUTIVE-ROADMAP.md +62 -9
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/MANUAL-USUARIO.md +157 -2
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/PRODUCT-ROUTE.md +49 -1
- sourcecode-5.9.0/docs/STRATEGY-2026-08-26-AGENT-CONTEXT.md +93 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/USER_GUIDE.md +92 -6
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-gate-ci.md +14 -5
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-mcp-api.md +12 -2
- {sourcecode-5.8.31 → sourcecode-5.9.0}/pyproject.toml +1 -1
- {sourcecode-5.8.31 → 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.31 → sourcecode-5.9.0}/src/sourcecode/cache_model.py +28 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cli.py +1168 -9
- 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.31 → sourcecode-5.9.0}/src/sourcecode/explain.py +25 -6
- {sourcecode-5.8.31 → 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.31 → 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.31 → sourcecode-5.9.0}/src/sourcecode/mcp/server.py +66 -8
- {sourcecode-5.8.31 → 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.31 → 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.31/.github/workflows/windows-battery.yml +0 -60
- {sourcecode-5.8.31 → sourcecode-5.9.0}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/.gitignore +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/.ruff.toml +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/CLAUDE.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/CODE_OF_CONDUCT.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/CONTRIBUTING.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/LICENSE +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/NOTICE +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/SECURITY.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.26.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.27.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28-PACK.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-2026-08-26-EXTERNAL-5.8.28.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/DOCUMENTATION-HYGIENE-2026-08-23.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/overview.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/contracts.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/licensing-schema.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/migrate-check.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/README.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/posture.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/privacy.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/schema.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/hatch_build.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/perf_gate.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/perf_harness.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/scripts/test_fast.sh +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/__main__.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/audit_report.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/envelope.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/license.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/packs.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/path_display.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/product_info.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/sarif_emit.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/functions/README.md +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.8.31 → sourcecode-5.9.0}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.8.31 → 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,76 @@
|
|
|
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
|
+
|
|
66
|
+
## [5.8.32] — 2026-08-26
|
|
67
|
+
|
|
68
|
+
*MCP and documentation alignment release. MCP assessment packs now support
|
|
69
|
+
validated selective component execution through `only`, with omitted coverage
|
|
70
|
+
and a reproducible CLI command recorded in the projection. MCP pull-request
|
|
71
|
+
gates, pack guidance and the public roadmap are synchronized with the current
|
|
72
|
+
release state.*
|
|
73
|
+
|
|
3
74
|
## [5.8.31] — 2026-08-26
|
|
4
75
|
|
|
5
76
|
*Windows portability and release-evidence remediation. Cache and licensing test
|
|
@@ -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
|
|
@@ -88,6 +88,8 @@ workflow-shaped packs for users who want one consumable result:
|
|
|
88
88
|
ask pack assessment . --profile prod --output-dir .ask/packs/assessment
|
|
89
89
|
ask pack gate . --since origin/main --output-dir .ask/packs/gate
|
|
90
90
|
ask pack assessment . --format markdown -o assessment.md
|
|
91
|
+
ask pack assessment . --only risk,posture --output-dir .ask/packs/assessment
|
|
92
|
+
ask pack gate . --pr 123 --output-dir .ask/packs/gate
|
|
91
93
|
```
|
|
92
94
|
|
|
93
95
|
For deployment-aware posture evidence, pass the artefacts that describe the
|
|
@@ -104,8 +106,17 @@ contract:
|
|
|
104
106
|
```bash
|
|
105
107
|
ask pack gate . --since origin/main --format github-actions
|
|
106
108
|
ask pack gate . --since origin/main --format gitlab
|
|
109
|
+
ask pack gate . --since origin/main --format sarif -o gate.sarif
|
|
107
110
|
```
|
|
108
111
|
|
|
112
|
+
`pack gate --pr NUMBER` uses the local `gh` CLI to resolve changed files and
|
|
113
|
+
the exact base commit; the base SHA must already exist locally. It does not
|
|
114
|
+
fetch or modify the repository. `pack assessment --only` runs named assessment
|
|
115
|
+
components and records omissions in the manifest. MCP's
|
|
116
|
+
`get_assessment_pack` accepts the same selection as `only: list[str]` and
|
|
117
|
+
returns the reproducible CLI command in its `mcp` projection. SARIF is a bounded
|
|
118
|
+
export of ASK-owned gate decisions, not a re-emission of third-party findings.
|
|
119
|
+
|
|
109
120
|
`PASS`, `BLOCK` and `UNVERIFIED` are data decisions. The process exit code is
|
|
110
121
|
the CI signal; `--allow-unverified` can change only that exit code, never the
|
|
111
122
|
reported verdict. Every pack carries a manifest with component invocations,
|
|
@@ -177,18 +188,19 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
177
188
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
178
189
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
179
190
|
|
|
180
|
-
**Current performance status.** Release 5.
|
|
191
|
+
**Current performance status.** Release 5.9.0 retains the shared Canonical IR
|
|
181
192
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
182
193
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
183
194
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
184
195
|
and bounded-output regressions for this release; use `ask cache model <repo>` and
|
|
185
196
|
`--progress stderr` for supervised runs, and consult the
|
|
186
|
-
[
|
|
197
|
+
[latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md) before
|
|
187
198
|
treating a historical timing or bounded flag as a current guarantee.
|
|
188
199
|
|
|
189
|
-
**What a warm actually covers.** `ask cache warm`
|
|
200
|
+
**What a warm actually covers.** `ask cache warm` rebuilds the declared root views and their
|
|
190
201
|
shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
|
|
191
|
-
IR)
|
|
202
|
+
IR). Pass `--views compact` or `--views compact,agent` to warm only selected views; without
|
|
203
|
+
`--views`, all declared views are warmed. Deeper projections
|
|
192
204
|
are separate keys and are *not* covered by either — `--full`, `--env-map` and a raised `--depth`
|
|
193
205
|
recompute on first use, as do most `prepare-context` tasks. Measured on a 3,342-file Spring
|
|
194
206
|
monolith: `cache warm` 103s → `--compact --git-context` 1s (hit), but `--agent --full --env-map
|
|
@@ -210,7 +222,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
210
222
|
# pip / pipx
|
|
211
223
|
pipx install sourcecode # or: pip install sourcecode
|
|
212
224
|
|
|
213
|
-
ask version # ask 5.
|
|
225
|
+
ask version # ask 5.9.0 — and, on a build that has aged,
|
|
214
226
|
# how many releases have probably shipped since
|
|
215
227
|
```
|
|
216
228
|
|
|
@@ -320,6 +332,41 @@ ask verify /path/to/repo --capture-baseline # accept today's debt, once
|
|
|
320
332
|
ask verify /path/to/repo # then: only new violations block
|
|
321
333
|
```
|
|
322
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
|
+
|
|
323
370
|
> **Adopting a gate on a real codebase.** Nobody hand-writes contracts for a 3 000-file
|
|
324
371
|
> monolith, so `ask verify --init` derives the ones the repository satisfies **today** and
|
|
325
372
|
> executes each before writing it — init followed by verify passes by construction.
|
|
@@ -348,27 +395,27 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
|
|
|
348
395
|
|
|
349
396
|
### 2 · Impact Analysis
|
|
350
397
|
Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
|
|
351
|
-
`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)
|
|
352
399
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
353
400
|
|
|
354
401
|
### 3 · Architecture Intelligence
|
|
355
402
|
The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
|
|
356
|
-
`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)
|
|
357
404
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
358
405
|
|
|
359
406
|
### 4 · Migration & Modernization
|
|
360
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.
|
|
361
|
-
`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)
|
|
362
409
|
→ [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
|
|
363
410
|
|
|
364
411
|
### 5 · Spring Analysis
|
|
365
412
|
Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
|
|
366
|
-
`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)
|
|
367
414
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
368
415
|
|
|
369
416
|
### 5b · Runtime Posture *(experimental — and the most differentiated thing here)*
|
|
370
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.*
|
|
371
|
-
`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)
|
|
372
419
|
→ [posture.md](docs/posture.md)
|
|
373
420
|
|
|
374
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.
|
|
@@ -420,11 +467,11 @@ remains `NC-001` and is published in the payload's own `non_coverage` block.
|
|
|
420
467
|
|
|
421
468
|
### 6 · Developer Workflows
|
|
422
469
|
The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
|
|
423
|
-
`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)
|
|
424
471
|
→ [reference](docs/USER_GUIDE.md#typical-workflows)
|
|
425
472
|
|
|
426
473
|
### 7 · Utilities
|
|
427
|
-
`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?)
|
|
428
475
|
→ [reference](docs/USER_GUIDE.md)
|
|
429
476
|
|
|
430
477
|
---
|
|
@@ -473,13 +520,20 @@ from it.
|
|
|
473
520
|
| `verify-edit` | supported | did the working-tree edits change runtime behaviour | semantic diff gate for the edit loop |
|
|
474
521
|
| `--compact` / `--agent` | — | bounded structural context for an agent | flags of the root command, not commands: not tiered |
|
|
475
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 |
|
|
476
|
-
| `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 |
|
|
477
524
|
| `modernize` | supported | coupling hubs, cycles, dead zones, refactor candidates | |
|
|
478
525
|
| `review-pr` / `fix-bug` / `prepare-context` | supported | diff review, symptom triage, task-shaped context | |
|
|
479
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 |
|
|
480
527
|
| `validation` | supported | request-body validation coverage and gaps | |
|
|
481
|
-
| `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) |
|
|
482
|
-
| `
|
|
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 |
|
|
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 |
|
|
483
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 |
|
|
484
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 |
|
|
485
539
|
| `explain-endpoint` | supported | the derivation behind one route's verdict | six steps — match, declaration, handler, chain, profiles, verdict — each naming the authority that produced it and the file it can be checked against; a step that could not be derived is `undetermined` with the reason, never absent |
|
|
@@ -531,7 +585,7 @@ reading JSON sees the same boundary a buyer reads here.
|
|
|
531
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. |
|
|
532
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). |
|
|
533
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. |
|
|
534
|
-
| **
|
|
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. |
|
|
535
589
|
|
|
536
590
|
Two more boundaries worth stating in the same voice:
|
|
537
591
|
|
|
@@ -631,6 +685,10 @@ power on Free for small and mid-size repos; you upgrade when the work gets bigge
|
|
|
631
685
|
ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
|
|
632
686
|
Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
|
|
633
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
|
+
|
|
634
692
|
---
|
|
635
693
|
|
|
636
694
|
## Configuration & privacy
|
|
@@ -705,4 +763,5 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
|
|
|
705
763
|
| [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
|
|
706
764
|
| [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
|
|
707
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 |
|
|
708
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
|
|
@@ -39,6 +39,8 @@ workflow-shaped packs for users who want one consumable result:
|
|
|
39
39
|
ask pack assessment . --profile prod --output-dir .ask/packs/assessment
|
|
40
40
|
ask pack gate . --since origin/main --output-dir .ask/packs/gate
|
|
41
41
|
ask pack assessment . --format markdown -o assessment.md
|
|
42
|
+
ask pack assessment . --only risk,posture --output-dir .ask/packs/assessment
|
|
43
|
+
ask pack gate . --pr 123 --output-dir .ask/packs/gate
|
|
42
44
|
```
|
|
43
45
|
|
|
44
46
|
For deployment-aware posture evidence, pass the artefacts that describe the
|
|
@@ -55,8 +57,17 @@ contract:
|
|
|
55
57
|
```bash
|
|
56
58
|
ask pack gate . --since origin/main --format github-actions
|
|
57
59
|
ask pack gate . --since origin/main --format gitlab
|
|
60
|
+
ask pack gate . --since origin/main --format sarif -o gate.sarif
|
|
58
61
|
```
|
|
59
62
|
|
|
63
|
+
`pack gate --pr NUMBER` uses the local `gh` CLI to resolve changed files and
|
|
64
|
+
the exact base commit; the base SHA must already exist locally. It does not
|
|
65
|
+
fetch or modify the repository. `pack assessment --only` runs named assessment
|
|
66
|
+
components and records omissions in the manifest. MCP's
|
|
67
|
+
`get_assessment_pack` accepts the same selection as `only: list[str]` and
|
|
68
|
+
returns the reproducible CLI command in its `mcp` projection. SARIF is a bounded
|
|
69
|
+
export of ASK-owned gate decisions, not a re-emission of third-party findings.
|
|
70
|
+
|
|
60
71
|
`PASS`, `BLOCK` and `UNVERIFIED` are data decisions. The process exit code is
|
|
61
72
|
the CI signal; `--allow-unverified` can change only that exit code, never the
|
|
62
73
|
reported verdict. Every pack carries a manifest with component invocations,
|
|
@@ -128,18 +139,19 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
128
139
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
129
140
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
130
141
|
|
|
131
|
-
**Current performance status.** Release 5.
|
|
142
|
+
**Current performance status.** Release 5.9.0 retains the shared Canonical IR
|
|
132
143
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
133
144
|
runs; the no-label path remains parse-free. These are implementation properties,
|
|
134
145
|
not duration promises. A controlled external warm-path audit has opened performance
|
|
135
146
|
and bounded-output regressions for this release; use `ask cache model <repo>` and
|
|
136
147
|
`--progress stderr` for supervised runs, and consult the
|
|
137
|
-
[
|
|
148
|
+
[latest external audit intake](docs/AUDIT-2026-08-26-EXTERNAL-5.8.31.md) before
|
|
138
149
|
treating a historical timing or bounded flag as a current guarantee.
|
|
139
150
|
|
|
140
|
-
**What a warm actually covers.** `ask cache warm`
|
|
151
|
+
**What a warm actually covers.** `ask cache warm` rebuilds the declared root views and their
|
|
141
152
|
shared structural layers (L1/L2 + the Repository Intelligence Snapshot + the shared Canonical
|
|
142
|
-
IR)
|
|
153
|
+
IR). Pass `--views compact` or `--views compact,agent` to warm only selected views; without
|
|
154
|
+
`--views`, all declared views are warmed. Deeper projections
|
|
143
155
|
are separate keys and are *not* covered by either — `--full`, `--env-map` and a raised `--depth`
|
|
144
156
|
recompute on first use, as do most `prepare-context` tasks. Measured on a 3,342-file Spring
|
|
145
157
|
monolith: `cache warm` 103s → `--compact --git-context` 1s (hit), but `--agent --full --env-map
|
|
@@ -161,7 +173,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
161
173
|
# pip / pipx
|
|
162
174
|
pipx install sourcecode # or: pip install sourcecode
|
|
163
175
|
|
|
164
|
-
ask version # ask 5.
|
|
176
|
+
ask version # ask 5.9.0 — and, on a build that has aged,
|
|
165
177
|
# how many releases have probably shipped since
|
|
166
178
|
```
|
|
167
179
|
|
|
@@ -271,6 +283,41 @@ ask verify /path/to/repo --capture-baseline # accept today's debt, once
|
|
|
271
283
|
ask verify /path/to/repo # then: only new violations block
|
|
272
284
|
```
|
|
273
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
|
+
|
|
274
321
|
> **Adopting a gate on a real codebase.** Nobody hand-writes contracts for a 3 000-file
|
|
275
322
|
> monolith, so `ask verify --init` derives the ones the repository satisfies **today** and
|
|
276
323
|
> executes each before writing it — init followed by verify passes by construction.
|
|
@@ -299,27 +346,27 @@ Bounded, noise-free repo context designed to drop straight into an agent's conte
|
|
|
299
346
|
|
|
300
347
|
### 2 · Impact Analysis
|
|
301
348
|
Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
|
|
302
|
-
`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)
|
|
303
350
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
304
351
|
|
|
305
352
|
### 3 · Architecture Intelligence
|
|
306
353
|
The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
|
|
307
|
-
`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)
|
|
308
355
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
309
356
|
|
|
310
357
|
### 4 · Migration & Modernization
|
|
311
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.
|
|
312
|
-
`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)
|
|
313
360
|
→ [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
|
|
314
361
|
|
|
315
362
|
### 5 · Spring Analysis
|
|
316
363
|
Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
|
|
317
|
-
`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)
|
|
318
365
|
→ [reference](docs/USER_GUIDE.md#core-commands)
|
|
319
366
|
|
|
320
367
|
### 5b · Runtime Posture *(experimental — and the most differentiated thing here)*
|
|
321
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.*
|
|
322
|
-
`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)
|
|
323
370
|
→ [posture.md](docs/posture.md)
|
|
324
371
|
|
|
325
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.
|
|
@@ -371,11 +418,11 @@ remains `NC-001` and is published in the payload's own `non_coverage` block.
|
|
|
371
418
|
|
|
372
419
|
### 6 · Developer Workflows
|
|
373
420
|
The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
|
|
374
|
-
`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)
|
|
375
422
|
→ [reference](docs/USER_GUIDE.md#typical-workflows)
|
|
376
423
|
|
|
377
424
|
### 7 · Utilities
|
|
378
|
-
`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?)
|
|
379
426
|
→ [reference](docs/USER_GUIDE.md)
|
|
380
427
|
|
|
381
428
|
---
|
|
@@ -424,13 +471,20 @@ from it.
|
|
|
424
471
|
| `verify-edit` | supported | did the working-tree edits change runtime behaviour | semantic diff gate for the edit loop |
|
|
425
472
|
| `--compact` / `--agent` | — | bounded structural context for an agent | flags of the root command, not commands: not tiered |
|
|
426
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 |
|
|
427
|
-
| `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 |
|
|
428
475
|
| `modernize` | supported | coupling hubs, cycles, dead zones, refactor candidates | |
|
|
429
476
|
| `review-pr` / `fix-bug` / `prepare-context` | supported | diff review, symptom triage, task-shaped context | |
|
|
430
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 |
|
|
431
478
|
| `validation` | supported | request-body validation coverage and gaps | |
|
|
432
|
-
| `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) |
|
|
433
|
-
| `
|
|
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 |
|
|
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 |
|
|
434
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 |
|
|
435
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 |
|
|
436
490
|
| `explain-endpoint` | supported | the derivation behind one route's verdict | six steps — match, declaration, handler, chain, profiles, verdict — each naming the authority that produced it and the file it can be checked against; a step that could not be derived is `undetermined` with the reason, never absent |
|
|
@@ -482,7 +536,7 @@ reading JSON sees the same boundary a buyer reads here.
|
|
|
482
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. |
|
|
483
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). |
|
|
484
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. |
|
|
485
|
-
| **
|
|
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. |
|
|
486
540
|
|
|
487
541
|
Two more boundaries worth stating in the same voice:
|
|
488
542
|
|
|
@@ -582,6 +636,10 @@ power on Free for small and mid-size repos; you upgrade when the work gets bigge
|
|
|
582
636
|
ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
|
|
583
637
|
Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
|
|
584
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
|
+
|
|
585
643
|
---
|
|
586
644
|
|
|
587
645
|
## Configuration & privacy
|
|
@@ -656,4 +714,5 @@ Matching endpoints report `policy: "custom"` and drop out of the `no_security_si
|
|
|
656
714
|
| [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
|
|
657
715
|
| [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
|
|
658
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 |
|
|
659
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 |
|