sourcecode 5.8.25__tar.gz → 5.8.26__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.
Potentially problematic release.
This version of sourcecode might be problematic. Click here for more details.
- {sourcecode-5.8.25 → sourcecode-5.8.26}/.github/workflows/windows-battery.yml +19 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/CHANGELOG.md +8 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/PKG-INFO +4 -4
- {sourcecode-5.8.25 → sourcecode-5.8.26}/README.md +3 -3
- sourcecode-5.8.26/docs/AUDIT-2026-08-23-CORPUS-AMPLIADO.md +63 -0
- sourcecode-5.8.26/docs/AUDIT-2026-08-23-EXTERNAL-5.8.25.md +121 -0
- sourcecode-5.8.26/docs/AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md +173 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/DEFECT-LEDGER.md +69 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/DEVELOPMENT-ROADMAP.md +1 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/pyproject.toml +1 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/perf_harness.py +13 -3
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/audit_report.py +43 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/baseline_autocapture.py +9 -4
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cache_model.py +3 -4
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cli.py +114 -15
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/envelope.py +4 -2
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/explain.py +43 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/format_contract.py +3 -3
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/migrate_check.py +21 -2
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/non_coverage.py +46 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/packs.py +85 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/parse_cache.py +16 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/posture.py +17 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/product_info.py +25 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/repository_ir.py +118 -50
- sourcecode-5.8.26/src/sourcecode/sarif_emit.py +156 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schema_registry.py +5 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/security_posture.py +12 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/selftest.py +8 -2
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/serializer.py +21 -2
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_impact.py +101 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_tx_analyzer.py +8 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/workspace.py +1 -1
- {sourcecode-5.8.25 → sourcecode-5.8.26}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/.gitignore +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/.ruff.toml +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/CLAUDE.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/CONTRIBUTING.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/LICENSE +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/NOTICE +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/SECURITY.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/AUDIT-2026-08-23-5.8.24.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/AUDIT-2026-08-23-COMMERCIAL.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/CACHE.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/EXECUTION-PLAN-12MO.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/EXECUTIVE-ROADMAP.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/MANUAL-USUARIO.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/PRODUCT-ROUTE.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/USER_GUIDE.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/overview.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/architecture/semantic-ir-roadmap.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/contracts.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/licensing-schema.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/migrate-check.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/README.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/REGRESSION-GATE.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/posture.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/privacy.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/schema.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/hatch_build.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/perf_gate.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/scripts/test_fast.sh +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/analysis_budget.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/build_stamp.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cache.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cache_observation.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/context_cache.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/data_exposure.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/execution_plan.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/field_deprecations.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/license.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_bounds.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_ceiling.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/pack_manifest.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/perf.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/phased_run.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/readonly.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/regress.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/release_info.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/resource_budget.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/timeline_cache.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/verify_edit.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/functions/README.md +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.8.25 → sourcecode-5.8.26}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -16,6 +16,14 @@ on:
|
|
|
16
16
|
jobs:
|
|
17
17
|
battery:
|
|
18
18
|
runs-on: windows-latest
|
|
19
|
+
env:
|
|
20
|
+
NO_COLOR: "1"
|
|
21
|
+
TERM: "dumb"
|
|
22
|
+
# CLI payloads and diagnostics are UTF-8 contracts. Without this Windows
|
|
23
|
+
# decodes child-process output with the active code page, turning a valid
|
|
24
|
+
# JSON answer containing source text into an empty/failed test response.
|
|
25
|
+
PYTHONUTF8: "1"
|
|
26
|
+
PYTHONIOENCODING: "utf-8"
|
|
19
27
|
steps:
|
|
20
28
|
- uses: actions/checkout@v4
|
|
21
29
|
|
|
@@ -31,11 +39,22 @@ jobs:
|
|
|
31
39
|
|
|
32
40
|
- name: Suite
|
|
33
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
|
|
34
47
|
|
|
35
48
|
# Named separately so a Windows-only failure is legible in the job list
|
|
36
49
|
# rather than one dot in nine thousand.
|
|
37
50
|
- name: The envelope names its command on every entry path
|
|
38
51
|
run: pytest tests/test_the_envelope_names_its_command_on_every_entry_path_aud601_x01.py -v
|
|
52
|
+
env:
|
|
53
|
+
SOURCECODE_CACHE_DIR: ${{ runner.temp }}/ask-cache
|
|
54
|
+
SOURCECODE_CONTEXT_CACHE_DIR: ${{ runner.temp }}/ask-context-cache
|
|
39
55
|
|
|
40
56
|
- name: A footprint sample is a number or a stated null, never a zero
|
|
41
57
|
run: pytest tests/test_resource_budget_d10.py -v
|
|
58
|
+
env:
|
|
59
|
+
SOURCECODE_CACHE_DIR: ${{ runner.temp }}/ask-cache
|
|
60
|
+
SOURCECODE_CONTEXT_CACHE_DIR: ${{ runner.temp }}/ask-context-cache
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.8.26] — 2026-08-23
|
|
4
|
+
|
|
5
|
+
*Patch release for the expanded-corpus audit. It preserves endpoint declarations
|
|
6
|
+
whose FQN is reused by separate modules, pairs MyBatis XML against the analysed
|
|
7
|
+
tree rather than a compact display subset, and reports the runtime source commit
|
|
8
|
+
for editable installs. Route inheritance and JAX-RS locator composition were
|
|
9
|
+
revalidated after the module-identity change.*
|
|
10
|
+
|
|
3
11
|
## [5.8.25] — 2026-08-23
|
|
4
12
|
|
|
5
13
|
*Version and documentation synchronization release. The audited `5.8.24` tree is
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.8.
|
|
3
|
+
Version: 5.8.26
|
|
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
|
|
@@ -58,7 +58,7 @@ Description-Content-Type: text/markdown
|
|
|
58
58
|
> question. All analysis is local and deterministic; see [Privacy](#configuration--privacy)
|
|
59
59
|
> before inspecting a repository whose telemetry policy you need to control.
|
|
60
60
|
|
|
61
|
-

|
|
62
62
|

|
|
63
63
|
|
|
64
64
|
Copyright (c) 2026 Dominique Haroun. All rights reserved. ASK Engine 5.7.0 and
|
|
@@ -176,7 +176,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
176
176
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
177
177
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
178
178
|
|
|
179
|
-
**Current performance status.** Release 5.8.
|
|
179
|
+
**Current performance status.** Release 5.8.26 retains the shared Canonical IR
|
|
180
180
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
181
181
|
runs; the no-label path remains parse-free. The one-model-per-declared-label path is
|
|
182
182
|
also retained. These are implementation properties, not duration promises:
|
|
@@ -210,7 +210,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
210
210
|
# pip / pipx
|
|
211
211
|
pipx install sourcecode # or: pip install sourcecode
|
|
212
212
|
|
|
213
|
-
ask version # ask 5.8.
|
|
213
|
+
ask version # ask 5.8.26 — and, on a build that has aged,
|
|
214
214
|
# how many releases have probably shipped since
|
|
215
215
|
```
|
|
216
216
|
|
|
@@ -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
|
|
@@ -128,7 +128,7 @@ set `ASK_MAX_RSS_MB=<megabytes>`; if the process exceeds it, ASK refuses the
|
|
|
128
128
|
answer with `MEMORY_TOO_LARGE`, including the observed peak and limit. Leave it
|
|
129
129
|
unset, or set it to `0`, to disable the ceiling explicitly.
|
|
130
130
|
|
|
131
|
-
**Current performance status.** Release 5.8.
|
|
131
|
+
**Current performance status.** Release 5.8.26 retains the shared Canonical IR
|
|
132
132
|
path used by `validation` and now passes that same CIR into labelled `data-exposure`
|
|
133
133
|
runs; the no-label path remains parse-free. The one-model-per-declared-label path is
|
|
134
134
|
also retained. These are implementation properties, not duration promises:
|
|
@@ -162,7 +162,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
162
162
|
# pip / pipx
|
|
163
163
|
pipx install sourcecode # or: pip install sourcecode
|
|
164
164
|
|
|
165
|
-
ask version # ask 5.8.
|
|
165
|
+
ask version # ask 5.8.26 — and, on a build that has aged,
|
|
166
166
|
# how many releases have probably shipped since
|
|
167
167
|
```
|
|
168
168
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Intake de hallazgos — corpus ampliado ASK 5.8.25
|
|
2
|
+
|
|
3
|
+
**Fecha:** 2026-08-23
|
|
4
|
+
**Build externo:** `5.8.25`, `b6e0e0f`
|
|
5
|
+
**Fuente:** [`/Users/user/Documents/workspace/testing/ASK-FINDINGS-CORPUS-AMPLIADO-2026-08-23.md`](/Users/user/Documents/workspace/testing/ASK-FINDINGS-CORPUS-AMPLIADO-2026-08-23.md)
|
|
6
|
+
**Estado:** intake incorporado; sin correcciones de código en esta tarea.
|
|
7
|
+
|
|
8
|
+
## Criterio de triage
|
|
9
|
+
|
|
10
|
+
El corpus aporta reproducción exacta y contraste manual. Los hallazgos se registran como
|
|
11
|
+
**reportados externamente** hasta reproducirlos contra el checkout o wheel correspondiente.
|
|
12
|
+
No se convierten en vulnerabilidades del repositorio auditado: describen límites, falsos
|
|
13
|
+
negativos, falsos positivos o contratos ambiguos de ASK. Los cuatro P0 deben tener prioridad
|
|
14
|
+
antes de nuevas features comerciales.
|
|
15
|
+
|
|
16
|
+
## Bugs y regresiones
|
|
17
|
+
|
|
18
|
+
| Severidad | ID | Hallazgo | Acción requerida | Estado |
|
|
19
|
+
|---|---|---|---|---|
|
|
20
|
+
| P0 | `AUD-CA-001` | `posture.security` es Spring-Security-only, pero `stack_fit` trata Spring + Shiro como ausencia de control. | Separar `spring_detected` de `spring_security_detected`; publicar `unknown` y framework no modelado. | Corregido 5.8.25: Shiro queda declarado como no modelado y el acceso como `unknown` |
|
|
21
|
+
| P0 | `AUD-CA-002` | `@RequiresPermissionsDesc` descriptiva suprime un finding al retirar el gate real `@RequiresPermissions`. | Exigir evidencia de enforcement; no inferir gates por nombre; cualquier transición desde roles debe activar `security_delta`. | Reportado, reproducir |
|
|
22
|
+
| P0 | `AUD-CA-003` | Colisión de FQN entre módulos descarta rutas y seguridad sin declaración. | Identidad `(módulo, FQN)` o ruta; declarar descartes si se conserva una sola definición. | Reportado, reproducir |
|
|
23
|
+
| P0 | `AUD-CA-014` | 89 controladores Micronaut no aparecen en `endpoints` y el vocabulario no declara el framework. | Añadir `micronaut` como estilo detectado-no-soportado y gap cuantificado; después implementar soporte. | Parcial 5.8.25: superficie Micronaut declarada y cuantificada; soporte HTTP pendiente |
|
|
24
|
+
| P1 | `AUD-CA-004` | `none_detected` mezcla cadena no modelada con ruta pública por regla URL. | Modelar `ShiroFilterFactoryBean` o separar estados `chain_not_modelled` y `chain_public`. | Reportado, reproducir |
|
|
25
|
+
| P1 | `AUD-CA-005` | Regla por nombre de módulo excluye código real bajo `src/main`. | Basar exclusión en source sets (`src/test`, `src/it`), no en nombre de módulo. | Corregido 5.8.25: `src/main` prevalece; sólo quedan módulos fixture explícitos |
|
|
26
|
+
| P1 | `AUD-CA-006` | `entry_points` alterna objeto/array bajo `schema_version: 1.0`; además duplica `(path, kind)`. | Fijar un schema; separar poblaciones si procede y deduplicar por `(path, kind)`. | Reportado, reproducir |
|
|
27
|
+
| P1 | `AUD-CA-007` | Repositorio políglota sin build file en raíz deja inventario Java vacío pese a `primary: java`. | Descubrir manifests en el reactor; particionar dependencias por stack y declarar contradicciones. | Reportado, reproducir |
|
|
28
|
+
| P1 | `AUD-CA-008` | Índice MyBatis incompleto produce `mapper_interfaces: 0` y 100% de XML huérfanos falsos. | Resolver namespace contra índice completo; si el índice está incompleto, no emitir huérfanos. | Reportado, reproducir |
|
|
29
|
+
| P1 | `AUD-CA-009` | `migrate-check` omite dependencias directas incompatibles con Boot 3 y publica esfuerzo con confianza alta. | Añadir compatibilidad de dependencias declaradas; mientras tanto, publicar `non_coverage` y retirar `point_estimate/high`. | Reportado, reproducir |
|
|
30
|
+
| P1 | `AUD-CA-015` | Titular `7 endpoints` oculta 21.023 rutas excluidas. | Incluir proporción y exclusiones en el titular cuando superen el umbral; mantener detalle en `answer_bounds`. | Reportado, reproducir |
|
|
31
|
+
| P2 | `AUD-CA-010` | `ask --compact` y `endpoints` discrepan en el censo de controladores. | Unificar autoridad y población; publicar unidad y base del censo. | Reportado, reproducir |
|
|
32
|
+
| P2 | `AUD-CA-011` | SEC-008 no cualifica alcanzabilidad; 41% del volumen procede de boilerplate MyBatis Generator. | Filtrar por rutas HTTP alcanzables y agrupar por expresión + fichero. | Reportado, reproducir |
|
|
33
|
+
| P2 | `AUD-CA-012` | `verify-edit` publica `source_file: null` aunque `endpoints` sí tiene ancla `file:line`. | Reutilizar la autoridad de endpoints para anclar el diff. | Reportado, reproducir |
|
|
34
|
+
| P2 | `AUD-CA-016` | `zero_result_reason` termina en una conjunción (`and `) y espacio final. | Construir la enumeración sin elementos vacíos y probar el texto completo. | Reportado, reproducir |
|
|
35
|
+
| P3 | `AUD-CA-013` | `explain.public_methods` colapsa sobrecargas y carece de unidad/población/base. | Publicar firmas o identificadores de método y metadatos de población. | Corregido 5.8.25: `public_methods_detail` conserva firmas y anclas |
|
|
36
|
+
| P3 | `AUD-CA-017` | `excluded_by_module_name_rule.count` es `null` mientras la cifra sólo existe en prosa. | Publicar el contador numérico desde la misma autoridad que genera el gap. | Corregido 5.8.25: `count` y `unit` publicados |
|
|
37
|
+
|
|
38
|
+
## Prioridad de ejecución
|
|
39
|
+
|
|
40
|
+
1. Seguridad y superficie: `AUD-CA-001`, `AUD-CA-002`, `AUD-CA-003`, `AUD-CA-004` y
|
|
41
|
+
`AUD-CA-014`.
|
|
42
|
+
2. Integridad de inventario y contratos: `AUD-CA-005` a `AUD-CA-010` y `AUD-CA-012`.
|
|
43
|
+
3. Precisión comercial y legibilidad: `AUD-CA-011`, `AUD-CA-015`, `AUD-CA-016`,
|
|
44
|
+
`AUD-CA-013` y `AUD-CA-017`.
|
|
45
|
+
|
|
46
|
+
## Criterios de cierre
|
|
47
|
+
|
|
48
|
+
- Cada hallazgo reproducido debe tener test de regresión con el repositorio testigo o una
|
|
49
|
+
fixture mínima equivalente.
|
|
50
|
+
- Toda exclusión debe declarar población, motivo, contador y efecto sobre `answer_bounds`.
|
|
51
|
+
- Ningún `none`, `0`, `clean` o `point_estimate/high` puede publicarse cuando el eje o el
|
|
52
|
+
índice necesario no está modelado.
|
|
53
|
+
- Cambios de schema deben conservar una única forma por versión y actualizar consumidores,
|
|
54
|
+
schemas y fixtures.
|
|
55
|
+
- Los P0 no se cierran por texto o mitigación documental: requieren evidencia de código y
|
|
56
|
+
batería verde.
|
|
57
|
+
|
|
58
|
+
## No clasificado como bug
|
|
59
|
+
|
|
60
|
+
El corpus también confirma determinismo caliente, ausencia de escrituras en los checkouts,
|
|
61
|
+
separación correcta de fuentes de test, `declared_not_served`, varias coberturas Quarkus y
|
|
62
|
+
Micronaut a escala de ejecución. Es evidencia positiva que debe preservarse, no trabajo
|
|
63
|
+
pendiente.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Auditoría externa de regresión — ASK Engine 5.8.25
|
|
2
|
+
|
|
3
|
+
**Fecha de recepción:** 2026-08-23
|
|
4
|
+
**Artefacto auditado:** ASK Engine `5.8.25`, build `b6e0e0f157687a962ce66627afe2e9b388fb2f06`
|
|
5
|
+
**Entornos:** Windows 11 Pro y MSAS (`3dde0376`)
|
|
6
|
+
**Alcance:** aproximadamente 180 invocaciones, 0 tracebacks, 0 escrituras observadas.
|
|
7
|
+
|
|
8
|
+
## Estado posterior del checkout
|
|
9
|
+
|
|
10
|
+
**Verificado el 2026-08-23 contra `HEAD 3d56d11`**, posterior al artefacto auditado.
|
|
11
|
+
Este bloque es el estado operativo actual; la evidencia del informe externo que sigue se
|
|
12
|
+
conserva sin alterar.
|
|
13
|
+
|
|
14
|
+
- La versión del repositorio es `5.8.25`.
|
|
15
|
+
- `125e486` corrigió la serialización de rutas en Windows y la detección de `ask.exe` en
|
|
16
|
+
selftest.
|
|
17
|
+
- `735d766` corrigió el fallback de contexto de comando, el bounding de flags en variantes
|
|
18
|
+
Click/Typer, las rutas POSIX del workspace y la configuración de salida del job Windows.
|
|
19
|
+
- `434d0e2` excluyó `_cache` runtime del `content_id` y añadió la regresión frío/caliente.
|
|
20
|
+
- `cd3f8f1` añadió un sweep final del parse cache para no dejar el último intervalo sin
|
|
21
|
+
eviction al terminar una invocación.
|
|
22
|
+
- `e9f5861` definió `--ci` para migraciones como gate de `migration_blocking_count`, y
|
|
23
|
+
`49187f9` etiqueta explícitamente los benchmarks históricos antes de reutilizarlos.
|
|
24
|
+
- `3d56d11` reinició la observabilidad de caché por invocación, evitando que una ejecución
|
|
25
|
+
embebida contamine el tamaño o el estado de la siguiente.
|
|
26
|
+
- La batería completa pasa en verde usando directorios separados para
|
|
27
|
+
`SOURCECODE_CONTEXT_CACHE_DIR` y `SOURCECODE_CACHE_DIR`. Configurar sólo uno produce
|
|
28
|
+
falsos fallos de snapshots/RIS.
|
|
29
|
+
- `ASK-DET-002`, `B-26` y `ASK-GATE-001` tienen fix en el checkout y batería dirigida verde;
|
|
30
|
+
falta validar el wheel/CI Windows para cerrar la evidencia externa.
|
|
31
|
+
- `ASK-UX-001`, `ASK-UX-002` y `ASK-ENV-001` tienen corrección o mitigación en el checkout,
|
|
32
|
+
pero requieren verificación del wheel publicado y un job Windows verde antes de cerrarse.
|
|
33
|
+
- `B-11` tiene mitigación de comunicación en el checkout; la regeneración numérica de
|
|
34
|
+
anclas requiere una captura reproducible posterior. Siguen abiertos `ASK-PERF-003` y la
|
|
35
|
+
reconciliación `B-13`/`B-14`; las filas sin cita y `B-30` permanecen como deuda P3.
|
|
36
|
+
|
|
37
|
+
### Cola vigente después de `HEAD 3d56d11`
|
|
38
|
+
|
|
39
|
+
| Estado | IDs | Siguiente evidencia requerida |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Fix local / validación externa | `ASK-DET-002`, `B-26`, `ASK-GATE-001` | Confirmar wheel publicado y batería Windows/GitHub. |
|
|
42
|
+
| Mitigación local / dato pendiente | `B-11` | Capturar benchmarks con build, commit y protocolo actuales. |
|
|
43
|
+
| Validación | `ASK-UX-001`, `ASK-UX-002`, `ASK-ENV-001` | Repetir contra wheel exacto y confirmar batería Windows en CI. |
|
|
44
|
+
| Investigación | `ASK-PERF-003`, `B-13`/`B-14` | Medición aislada y reproducción con artefacto/par exactos. |
|
|
45
|
+
| Futuro | Gate PR, contexto acotado, migración Boot/Java, provenance HTTP, SARIF | Plan de producto posterior a los contratos de confianza. |
|
|
46
|
+
|
|
47
|
+
## Veredicto ejecutivo
|
|
48
|
+
|
|
49
|
+
El informe no demuestra una regresión funcional del analizador. Sí demuestra un defecto
|
|
50
|
+
de determinismo/procedencia en el payload raíz, varios contratos de producto incompletos y
|
|
51
|
+
una divergencia de entorno Windows que no puede darse por cerrada desde macOS/Linux.
|
|
52
|
+
|
|
53
|
+
La prioridad de la siguiente iteración no es optimizar todas las cifras de tiempo: es hacer
|
|
54
|
+
que una misma respuesta sea estable, explicable y utilizable en CI. Sin esa base, los
|
|
55
|
+
benchmarks y la procedencia pierden valor comercial.
|
|
56
|
+
|
|
57
|
+
## Bugs y regresiones prioritarios
|
|
58
|
+
|
|
59
|
+
| Prioridad | ID | Resultado de la auditoría | Decisión |
|
|
60
|
+
|---|---|---|---|
|
|
61
|
+
| P1 | `ASK-DET-002` | `ask . --output raw1.json` produjo dos `content_id` para el mismo árbol: `8e3a1cd54154e2eb` en frío y `f81481e0fea47e02` en caliente. Las 20 diferencias están en `_cache` (`cache_source`, `ris_exists`, `ris_git_head`, `ris_is_stale`). | **Bug confirmado.** El hash de contenido incluye estado de ejecución. Separar respuesta analítica de metadatos de ejecución, o excluir `_cache` del `content_id`; añadir prueba frío/caliente y estabilidad tras repetir. |
|
|
62
|
+
| P1 | `B-26` / `ASK-17` | En la flota de 16 repositorios el parse cache alcanzó aproximadamente 559.48 MB frente a un presupuesto de 512 MB, con 25.560 entradas. | **Problema de capacidad confirmado, no fallo aislado de análisis.** Publicar exceso, política de eviction y estado efectivo; decidir si el límite es por workspace, usuario o flota antes de prometer escala empresarial. |
|
|
63
|
+
| P1/P2 | `ASK-UX-001` / `N-01` | El bloque “Runs now” sigue presentando `posture . --diff dev:prod` y `endpoints .` sin una forma de acotar el resultado. | **Residuo confirmado en el artefacto auditado.** El generador ya se corrigió parcialmente en el checkout; falta verificar el wheel publicado y cubrir la población completa del bloque. |
|
|
64
|
+
| P1/P2 | `ASK-UX-002` | El sistema de sugerencias entra en ciclo: sin flags ofrece `--compact`/`--limit`; con uno ofrece el otro; ambas variantes producen exactamente 71.722 tokens. | **Bug confirmado.** Las sugerencias deben ser conscientes del comando, del camino de renderizado y de `flags_already_passed`; nunca recomendar una transformación que no reduzca el payload. |
|
|
65
|
+
| P1/P2 | `ASK-ENV-001` | En Windows, 9/9 payloads llegaron con `envelope_status=degraded`, `command=unknown` y razón “the running command could not be named”. | **Regresión ambiental pendiente de reproducir.** No contradice la prueba local, pero sí invalida declarar el caso cerrado. El pipeline Windows debe fallar si el contrato se degrada sin base explícita. |
|
|
66
|
+
| P2 | `ASK-GATE-001` | `spring-audit --ci` y `risk --ci` devuelven el contrato de gate; `migrate-check --ci` y `migrate-apply --ci` rechazan la opción. | **Contrato inconsistente confirmado.** Definir por comando si `--ci` es gate de completitud, gate de findings o no aplica; después alinear help, exit code, schema y pruebas. No añadir la bandera por simetría sin definir su semántica. |
|
|
67
|
+
| P2 | `B-11` | 16 de 19 anclas de coste siguen referenciando `5.1.0`; una referencia `5.8.23`. | **Deuda de credibilidad.** No rompe el análisis, pero debilita cualquier benchmark comercial. Regenerar anclas o marcarlas explícitamente como históricas y exigir versión/build en cada cifra. |
|
|
68
|
+
| P2 | `ASK-PERF-003` | Varios comandos parecen más lentos que en `5.8.24`, mientras `export --c4` mejora y `ask --compact` también. | **No es regresión confirmada.** El auditor identifica contaminación por ejecuciones concurrentes y estados de caché. Repetir en aislamiento, con protocolo frío/sembrado/caliente y al menos tres muestras antes de abrir un fix. |
|
|
69
|
+
| P3 | Cierre de auditoría | 25 filas cerradas permanecen sin cita (`uncited`). | **Higiene de procedencia.** Automatizar la cita o etiquetar la ausencia intencionada; no bloquear una release salvo que afecte a una afirmación comercial. |
|
|
70
|
+
| P3 | `B-30` | 20 contratos arquitectónicos aparecen como `forbid_finding` y no utilizan la población “17 endpoints / 39 tipos”. | **Oportunidad futura.** Convertirlo en producto sólo cuando existan contratos positivos, tipos útiles y una explicación de por qué una regla no aplica. |
|
|
71
|
+
| Reconciliación | `B-13` / `B-14` | El informe externo observa identidad ausente y una negativa byte-identical; el re-audit del checkout documenta identidad y no reproduce el caso `mall`/`nacos`. | **No reabrir automáticamente.** Reproducir contra el wheel exacto y el par exacto del informe. Si reproduce, prevalece el test de población; si no, registrar discrepancia de artefacto, no un bug nuevo. |
|
|
72
|
+
|
|
73
|
+
## Qué no se clasifica como regresión
|
|
74
|
+
|
|
75
|
+
- No hay regresión funcional demostrada, crash, traceback, escritura o mutación del repositorio auditado.
|
|
76
|
+
- Las diferencias de tiempos no son atribuibles todavía a una versión: faltan ejecuciones aisladas y control de caché.
|
|
77
|
+
- El resultado de “clean repo no encuentra riesgo” no es un bug; es el límite correcto del análisis. Debe expresarse como no-cobertura, no maquillarse como finding.
|
|
78
|
+
- `data-exposure` sin labels/configuración suficiente es una limitación de entrada y onboarding, no una vulnerabilidad del motor.
|
|
79
|
+
|
|
80
|
+
## Recomendaciones del auditor, validadas como CTO
|
|
81
|
+
|
|
82
|
+
| Recomendación | Validación | Acción de producto |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| Priorizar un gate semántico de PR | **Alta.** Es la demostración más directa de valor: cambio concreto, finding accionable, evidencia `file:line` y exit code. | Convertir `pack gate --since <ref>` en workflow de referencia y medir findings por PR, severidad y bugs evitados. |
|
|
85
|
+
| Entregar contexto acotado para agentes | **Alta.** Reduce tokens y tiempo de integración; ya hay evidencia de payloads bajo techo. | Consolidar `--compact`, `--agent` y `prepare-context` con límites verificables y KPI de tokens/call y éxito de tarea. |
|
|
86
|
+
| Inventario Boot 2→3 / Java LTS | **Alta.** Tiene comprador, urgencia y unidad de trabajo clara: archivo, línea, bloqueo y esfuerzo. | Hacer de `migrate-check` + recipe el segundo caso comercial, con blockers/lines/days como métricas. |
|
|
87
|
+
| HTTP exposure con provenance | **Alta.** Es defendible ante seguridad si cada ruta lleva fuente, declaración, postura y límites. | Completar `endpoints` + `posture` + `explain-endpoint`, incluyendo negativas y población. |
|
|
88
|
+
| Enriquecimiento SARIF de Semgrep/CodeQL | **Media-alta, después de lo anterior.** Amplía distribución sin competir construyendo otro SAST. | Mantenerlo como integración: anclar, componer y explicar findings externos; medir porcentaje alcanzable por request no autenticada. |
|
|
89
|
+
| Mejorar hints, CI y envelope | **Imprescindible, aunque no sea una feature vendible por sí sola.** Son prerequisitos de confianza y adopción. | Tratar `ASK-DET-002`, UX-001/002, ENV-001 y GATE-001 como condición de calidad de la siguiente iteración. |
|
|
90
|
+
| Resolver primero el cache de flota | **Válida con matiz.** Es capacidad y coste operativo, no el “holy shit” comercial. | Añadir límites observables y eviction; no convertirlo en iniciativa principal hasta fijar el modelo de workspace/flota. |
|
|
91
|
+
|
|
92
|
+
### Recomendación propia
|
|
93
|
+
|
|
94
|
+
La próxima demo debe ser un flujo completo de cambio, no un catálogo de comandos:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
PR con cambio Spring -> pack gate -> findings file:line -> impacto transitivo
|
|
98
|
+
-> endpoints/posture -> decisión CI -> contexto compacto para remediación
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
El entregable comercial debe responder tres preguntas en una página: **qué cambió, qué
|
|
102
|
+
riesgo nuevo introduce y qué queda explícitamente fuera del alcance**. El KPI principal no
|
|
103
|
+
debe ser el número de findings, sino el tiempo hasta una decisión defendible y la proporción
|
|
104
|
+
de resultados con unidad, población, evidencia y exclusión negativa.
|
|
105
|
+
|
|
106
|
+
## Criterios de aceptación para próximas iteraciones
|
|
107
|
+
|
|
108
|
+
1. Dos ejecuciones frío/caliente del mismo árbol producen el mismo `content_id`; cualquier diferencia de ejecución vive bajo `_meta` y se declara como tal.
|
|
109
|
+
2. El bloque de inicio sólo recomienda comandos que pueden ejecutarse dentro del techo con la bandera que realmente los acota.
|
|
110
|
+
3. Ningún hint propone un flag ya usado o semánticamente ineficaz; la batería cubre todas las combinaciones publicadas.
|
|
111
|
+
4. Cada comando que anuncie `--ci` documenta su gate, exit code, base y comportamiento ante resultado parcial; los demás lo rechazan de forma explícita y coherente.
|
|
112
|
+
5. Windows ejecuta la batería de envelope y no permite publicar `command=unknown` como éxito silencioso.
|
|
113
|
+
6. Cada benchmark comercial incluye build, commit, tamaño de población, estado de caché, número de muestras y protocolo de aislamiento.
|
|
114
|
+
7. La demo PR/migración genera evidencia de fuente, población, límites y exclusiones negativas; sin esos campos el resultado se marca no concluyente.
|
|
115
|
+
|
|
116
|
+
## Estado documental
|
|
117
|
+
|
|
118
|
+
Este documento registra el informe externo y su evaluación independiente. El estado maestro
|
|
119
|
+
de cada fila continúa en [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md). Las diferencias entre wheel
|
|
120
|
+
auditado y checkout deben resolverse mediante reproducción contra el artefacto exacto, no
|
|
121
|
+
mediante una actualización manual del estado.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# ThingsBoard field audit findings — commercial value and product gaps
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-08-23
|
|
4
|
+
**ASK:** 5.8.25 (`b6e0e0f157687a962ce66627afe2e9b388fb2f06`)
|
|
5
|
+
**Subject:** ThingsBoard, `181ac1392b9728d3e2aed9cd698a246bf1de3de7`
|
|
6
|
+
**Status:** five corrections implemented in the working tree; release/commit pending
|
|
7
|
+
|
|
8
|
+
## Implementation status
|
|
9
|
+
|
|
10
|
+
| Finding | Implemented correction |
|
|
11
|
+
|---|---|
|
|
12
|
+
| `AUD-THB-001` | `impact-chain` now publishes `endpoint_disposition` / `negative_scope` with `in_scope`, `out_of_scope` and `unknown_scope`, using the shared disposition authority. |
|
|
13
|
+
| `AUD-THB-002` | `TX-006` now labels `material_proxy_bypass` versus `structural_proxy_bypass` in evidence. |
|
|
14
|
+
| `AUD-THB-003` | Security projections now publish `security_signal` while preserving `security_policy` for compatibility. |
|
|
15
|
+
| `AUD-THB-004` | `audit-report` now publishes and renders `evidence_bounds`. |
|
|
16
|
+
| `AUD-THB-005` | Migration output now separates legacy `headline_blocker` from `headline_action`. |
|
|
17
|
+
|
|
18
|
+
The focused contract battery passes. The full repository battery still has five unrelated
|
|
19
|
+
pre-existing failures in delegated-command cache reuse and RIS freshness/cold-start tests;
|
|
20
|
+
they are recorded separately and were not introduced by these changes.
|
|
21
|
+
|
|
22
|
+
## Executive assessment
|
|
23
|
+
|
|
24
|
+
The external review is accepted: the audit is technically credible but does not yet
|
|
25
|
+
demonstrate enough business value. It proves that ASK can inventory, prioritize and produce
|
|
26
|
+
defensible hypotheses. It does not yet prove the strongest commercial promise: that a customer
|
|
27
|
+
can make a safer change faster because ASK narrows the affected scope and explains what is
|
|
28
|
+
outside it.
|
|
29
|
+
|
|
30
|
+
The next commercial proof should therefore be a **change case**, not another broad posture
|
|
31
|
+
report: one concrete modernization or refactor, its transitive impact, endpoint/security
|
|
32
|
+
intersection, explicit exclusions, and a before/after decision that would otherwise require
|
|
33
|
+
hours of manual work.
|
|
34
|
+
|
|
35
|
+
## Findings from the field audit
|
|
36
|
+
|
|
37
|
+
### AUD-THB-001 — Impact output has no explicit negative scope
|
|
38
|
+
|
|
39
|
+
**Severity:** P1 product gap
|
|
40
|
+
**Observed:** `impact` and `impact-chain` produced large positive cones (528–556 related
|
|
41
|
+
endpoints for several targets) but no explicit, evidence-backed `negative_scope` section.
|
|
42
|
+
`UserController` provided a useful control case with 0 direct callers and 31 endpoints, but
|
|
43
|
+
that is not equivalent to a systematic exclusion set.
|
|
44
|
+
|
|
45
|
+
**Customer impact:** the output can increase uncertainty rather than reduce it. A CTO cannot
|
|
46
|
+
quickly distinguish “affected”, “not reached by this model”, and “proven outside the change”.
|
|
47
|
+
Large counts are therefore commercially weak and easy to misread.
|
|
48
|
+
|
|
49
|
+
**Required correction:** publish, for every impact result:
|
|
50
|
+
|
|
51
|
+
- `in_scope` with the path and evidence basis;
|
|
52
|
+
- `out_of_scope` only when a graph boundary proves exclusion;
|
|
53
|
+
- `unknown_scope` for unresolved, dynamic or unsupported paths;
|
|
54
|
+
- counts and representative examples for all three;
|
|
55
|
+
- the exact boundary that prevents a node from entering the positive cone.
|
|
56
|
+
|
|
57
|
+
Never infer negative scope from absence in a truncated result list.
|
|
58
|
+
|
|
59
|
+
**Regression test:** a fixture with two independent controller/service branches must show one
|
|
60
|
+
branch in `in_scope`, the other in `out_of_scope`, and an unresolved reflective edge in
|
|
61
|
+
`unknown_scope`.
|
|
62
|
+
|
|
63
|
+
### AUD-THB-002 — TX-006 overstates equivalent self-invocation cases
|
|
64
|
+
|
|
65
|
+
**Severity:** P1 precision defect
|
|
66
|
+
**Observed:** the Spring audit reported 18 defects, including many TX-006 findings where an
|
|
67
|
+
annotated method calls another annotated method internally but both use the default transaction
|
|
68
|
+
semantics. Manual review of `AssetProfileServiceImpl`, `DeviceServiceImpl` and
|
|
69
|
+
`DashboardServiceImpl` confirmed the proxy limitation, but did not demonstrate a changed
|
|
70
|
+
runtime contract.
|
|
71
|
+
|
|
72
|
+
**Customer impact:** inflated defect counts reduce trust and make the report look like a lint
|
|
73
|
+
dump. The `SqlPartitioningRepository#save` case is materially different because it declares
|
|
74
|
+
`Propagation.NOT_SUPPORTED`; the report must distinguish it from equivalent defaults.
|
|
75
|
+
|
|
76
|
+
**Required correction:** classify TX findings by semantic delta:
|
|
77
|
+
|
|
78
|
+
- `material_proxy_bypass`: propagation/isolation/rollback/timeout changes across the proxy;
|
|
79
|
+
- `structural_proxy_bypass`: annotation is bypassed but no changed contract is proven;
|
|
80
|
+
- `verified_runtime_effect`: integration evidence proves the behavior;
|
|
81
|
+
- `requires_validation`: static evidence is insufficient.
|
|
82
|
+
|
|
83
|
+
Only the first and third categories should contribute to a commercial “defect” count by
|
|
84
|
+
default. The second should be a review signal.
|
|
85
|
+
|
|
86
|
+
**Regression test:** fixtures must cover `NOT_SUPPORTED`, `REQUIRES_NEW`, custom rollback,
|
|
87
|
+
isolation and timeout versus two default `@Transactional` methods. The output must not assign
|
|
88
|
+
the same severity to semantically equivalent and materially different cases.
|
|
89
|
+
|
|
90
|
+
### AUD-THB-003 — `none_detected` is too easy to read as public exposure
|
|
91
|
+
|
|
92
|
+
**Severity:** P1 communication/contract defect
|
|
93
|
+
**Observed:** the endpoint inventory reported 28 mappings as `none_detected`. Manual review
|
|
94
|
+
showed static resources, redirects, no-auth routes, device-token routes, readiness and error
|
|
95
|
+
handlers among the examples.
|
|
96
|
+
|
|
97
|
+
**Customer impact:** a non-specialist reader can interpret the metric as “28 unprotected
|
|
98
|
+
endpoints”, which would create a false security escalation.
|
|
99
|
+
|
|
100
|
+
**Required correction:** rename or qualify the state as `security_signal_not_inferred`, and
|
|
101
|
+
publish a mandatory explanation per route: recognized control, unsupported control model,
|
|
102
|
+
public-by-design, token-gated, static, health/readiness, or unresolved. A naked count must not
|
|
103
|
+
appear in the executive summary.
|
|
104
|
+
|
|
105
|
+
**Regression test:** endpoint fixtures covering `@PreAuthorize`, request-chain authorization,
|
|
106
|
+
device token, `/api/noauth`, static resources and unsupported servlet mappings must produce
|
|
107
|
+
distinct states.
|
|
108
|
+
|
|
109
|
+
### AUD-THB-004 — Audit report does not carry evidence bounds consistently
|
|
110
|
+
|
|
111
|
+
**Severity:** P1 evidence-contract gap
|
|
112
|
+
**Observed:** component outputs exposed coverage gaps, while the generated `audit-report`
|
|
113
|
+
section declared evidence completeness without explicit bounds. The report therefore looks
|
|
114
|
+
more exhaustive than the underlying evidence supports.
|
|
115
|
+
|
|
116
|
+
**Customer impact:** a buyer cannot tell which claims are measured, inferred, unsupported or
|
|
117
|
+
profile-dependent without reading raw JSON.
|
|
118
|
+
|
|
119
|
+
**Required correction:** every report claim must carry an evidence envelope with:
|
|
120
|
+
|
|
121
|
+
- source component and schema version;
|
|
122
|
+
- repository commit and tree state;
|
|
123
|
+
- scope and unsupported surfaces;
|
|
124
|
+
- profile/configuration used;
|
|
125
|
+
- confidence and validation status;
|
|
126
|
+
- unresolved gaps and their commercial consequence.
|
|
127
|
+
|
|
128
|
+
The renderer must refuse “complete” language when any required bound is absent.
|
|
129
|
+
|
|
130
|
+
**Regression test:** build an assessment containing one known non-coverage gap and assert that
|
|
131
|
+
all Markdown, JSON and compact renderings expose it and cannot emit an unqualified complete
|
|
132
|
+
verdict.
|
|
133
|
+
|
|
134
|
+
### AUD-THB-005 — Baseline summary mixes incompatible migration signals
|
|
135
|
+
|
|
136
|
+
**Severity:** P2 presentation defect
|
|
137
|
+
**Observed:** the assessment combined `readiness 94`, `headline blocker jakarta_migration`
|
|
138
|
+
and `migration blockers 0`.
|
|
139
|
+
|
|
140
|
+
**Customer impact:** the executive decision is ambiguous: a customer cannot tell whether a
|
|
141
|
+
blocker exists, whether the score is a readiness score or a risk score, or whether the issue is
|
|
142
|
+
actionable in the current Spring Boot 3 baseline.
|
|
143
|
+
|
|
144
|
+
**Required correction:** define separate fields and wording for `readiness_score`,
|
|
145
|
+
`blocking_findings`, `headline_action` and `non_applicable_dimensions`. Enforce the invariant
|
|
146
|
+
that zero blockers cannot render as “blocker” without the qualifier “non-blocking action”.
|
|
147
|
+
|
|
148
|
+
**Regression test:** cases with zero blockers, one blocker and a non-applicable migration
|
|
149
|
+
dimension must produce mutually unambiguous summaries in JSON, Markdown and compact output.
|
|
150
|
+
|
|
151
|
+
## Bugs versus gaps
|
|
152
|
+
|
|
153
|
+
No runtime regression, crash, write leakage or checkout mutation was observed during this
|
|
154
|
+
field audit. The findings above are product defects or commercial gaps in precision, evidence
|
|
155
|
+
boundaries and decision presentation. They are not evidence that ThingsBoard itself is broken.
|
|
156
|
+
|
|
157
|
+
The strongest confirmed ASK defect is **TX-006 precision**, because static findings were
|
|
158
|
+
presented as defects despite equivalent default transaction semantics. The remaining rows are
|
|
159
|
+
contract or product-surface gaps that materially limit the sales value of the report.
|
|
160
|
+
|
|
161
|
+
## Recommended commercial proof case
|
|
162
|
+
|
|
163
|
+
Build the next demo around a deliberately controlled change:
|
|
164
|
+
|
|
165
|
+
1. choose one service or transaction boundary with a known interface/implementation split;
|
|
166
|
+
2. show the baseline callers, endpoints and security controls;
|
|
167
|
+
3. introduce a controlled change;
|
|
168
|
+
4. show the exact positive scope, proven exclusions and unknowns;
|
|
169
|
+
5. compare ASK output with a manually curated ground truth;
|
|
170
|
+
6. quantify analyst time avoided and the decision enabled.
|
|
171
|
+
|
|
172
|
+
The acceptance bar is not “more findings”. It is **precision, explainability and a bounded
|
|
173
|
+
change decision**.
|
|
@@ -16,6 +16,75 @@ The facts these rows are keyed to are published: `ask schema facts-v1` prints th
|
|
|
16
16
|
|
|
17
17
|
## Current Synchronization
|
|
18
18
|
|
|
19
|
+
**Corpus ampliado recibido, 2026-08-23 — 17 hallazgos nuevos en intake.**
|
|
20
|
+
[`AUDIT-2026-08-23-CORPUS-AMPLIADO.md`](AUDIT-2026-08-23-CORPUS-AMPLIADO.md) registra cuatro
|
|
21
|
+
P0 (`AUD-CA-001`, `002`, `003`, `014`), ocho P1, cuatro P2 y un P3. La evidencia externa
|
|
22
|
+
aporta reproducción y contraste manual, pero estas filas permanecen **pendientes de
|
|
23
|
+
reproducción contra checkout/wheel**: no se declaran corregidas ni se atribuyen al código
|
|
24
|
+
auditado. La prioridad inmediata es seguridad no modelada, colisiones de FQN y superficie
|
|
25
|
+
HTTP Micronaut; después siguen contratos de inventario, cobertura y precisión de salida.
|
|
26
|
+
|
|
27
|
+
**Correcciones iniciadas, 2026-08-23.** `AUD-CA-001` (declaración segura de Shiro),
|
|
28
|
+
`AUD-CA-005` (autoridad de `src/main`), `AUD-CA-013` (sobrecargas y anclas de
|
|
29
|
+
`explain`) y `AUD-CA-017` (contador estructurado) están corregidos en commits atómicos
|
|
30
|
+
de `5.8.25`. `AUD-CA-014` tiene una corrección parcial: Micronaut ya aparece como
|
|
31
|
+
superficie detectada-no-modelada y cuantificada, pero el soporte HTTP sigue pendiente.
|
|
32
|
+
Los restantes hallazgos permanecen abiertos hasta reproducirlos y cubrirlos con pruebas.
|
|
33
|
+
|
|
34
|
+
**Estado autoritativo del repositorio, 2026-08-23 — `5.8.25`, `HEAD 3d56d11`.** Este
|
|
35
|
+
snapshot supersede cualquier estado de release indicado en las secciones históricas de
|
|
36
|
+
este ledger. La batería completa pasa en verde cuando se configuran ambos almacenes
|
|
37
|
+
temporales: `SOURCECODE_CONTEXT_CACHE_DIR` para CIR/parse y `SOURCECODE_CACHE_DIR` para
|
|
38
|
+
snapshots/RIS. Usar sólo el primer directorio produce falsos fallos de persistencia.
|
|
39
|
+
|
|
40
|
+
Los commits `125e486`, `735d766`, `434d0e2`, `cd3f8f1`, `e9f5861`, `49187f9` y `3d56d11` están incluidos
|
|
41
|
+
en el checkout actual. Cubren rutas
|
|
42
|
+
Windows, selftest con `ask.exe`, resolución bounded de comandos y flags, fallback de
|
|
43
|
+
contexto, rutas POSIX del workspace, salida estable del job Windows, fingerprint sin estado
|
|
44
|
+
runtime de caché, sweep final del parse cache, gate CI de migraciones, trazabilidad explícita
|
|
45
|
+
de benchmarks históricos y aislamiento de observabilidad por invocación. Por tanto,
|
|
46
|
+
`ASK-UX-001`, `ASK-UX-002` y `ASK-ENV-001` ya no deben describirse como fallos sin
|
|
47
|
+
corrección: quedan **pendientes de verificación contra el wheel publicado y de confirmación
|
|
48
|
+
en GitHub Windows**.
|
|
49
|
+
|
|
50
|
+
La cola abierta actual es: validación externa de `ASK-DET-002`, `B-26` y `ASK-GATE-001`,
|
|
51
|
+
regeneración reproducible de cifras `B-11`, `ASK-PERF-003` (medición aislada aún
|
|
52
|
+
necesaria), `B-13`/`B-14` (reconciliación contra artefacto exacto), y la deuda P3 de filas
|
|
53
|
+
sin cita y `B-30`. No quedan fallos locales reproducidos pendientes en esta batería.
|
|
54
|
+
|
|
55
|
+
Las menciones posteriores a `5.8.24`, “release/commit pending” o “no audit, no release”
|
|
56
|
+
son fotografías históricas de sus respectivas iteraciones. Se mantienen para trazabilidad,
|
|
57
|
+
pero no representan el estado vigente ni deben usarse para decidir el siguiente release.
|
|
58
|
+
|
|
59
|
+
**External `5.8.25` regression audit received, 2026-08-23 — triage recorded.**
|
|
60
|
+
[`AUDIT-2026-08-23-EXTERNAL-5.8.25.md`](AUDIT-2026-08-23-EXTERNAL-5.8.25.md) separates the
|
|
61
|
+
Windows/MSAS wheel evidence from this checkout. The only new confirmed product defect is
|
|
62
|
+
`ASK-DET-002`: root `content_id` changes between cold and warm runs because `_cache` runtime
|
|
63
|
+
state is included in the answer fingerprint. `ASK-UX-001`/`ASK-UX-002` and
|
|
64
|
+
`ASK-GATE-001` remain actionable contract residues in the audited artefact; `ASK-ENV-001`
|
|
65
|
+
is a Windows-specific witness still requiring reproduction. `B-26` is recorded as a fleet
|
|
66
|
+
capacity issue (559.48 MB against 512 MB), not as a finding-analysis error. The reported
|
|
67
|
+
performance deltas are not accepted as regressions until isolated measurements control cache
|
|
68
|
+
state and concurrency. `B-13`/`B-14` require reconciliation against the exact wheel and
|
|
69
|
+
repository pair because the source re-audit disagrees with the external field result.
|
|
70
|
+
|
|
71
|
+
The validated commercial queue is now: deterministic/provenance envelope, bounded UX and
|
|
72
|
+
hint correctness, coherent CI gates, Windows envelope verification, then PR semantic gate,
|
|
73
|
+
bounded agent context, Java/Spring migration inventory, HTTP exposure provenance and SARIF
|
|
74
|
+
enrichment. The complete CTO assessment and acceptance criteria are in the linked audit;
|
|
75
|
+
they are not a claim that every auditor suggestion is a next-iteration fix.
|
|
76
|
+
|
|
77
|
+
**ThingsBoard field audit, 2026-08-23 — five findings documented and corrected in the
|
|
78
|
+
working tree; included in `5.8.25` and commit `2c551db`.**
|
|
79
|
+
[`AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md`](AUDIT-2026-08-23-THINGSBOARD-FINDINGS.md)
|
|
80
|
+
records the evidence and acceptance tests for the missing negative scope (`AUD-THB-001`),
|
|
81
|
+
TX-006 precision (`AUD-THB-002`), ambiguous `none_detected` exposure semantics
|
|
82
|
+
(`AUD-THB-003`), incomplete evidence bounds in the generated report (`AUD-THB-004`) and
|
|
83
|
+
contradictory migration summary wording (`AUD-THB-005`). The audit found no runtime
|
|
84
|
+
regression, crash, write leakage or mutation of the audited checkout. The five authorities
|
|
85
|
+
and focused regression tests were updated and released; these rows are product gaps/defects, not
|
|
86
|
+
claims that ThingsBoard itself is broken.
|
|
87
|
+
|
|
19
88
|
**`AUD-601` queue closed, 2026-08-23 — seven rows, one commit each, no release.** Six closed
|
|
20
89
|
and one (`AUD-601-X01`) held with the half it was owed. Suite **12 702 / 0 red**,
|
|
21
90
|
`__version__` unchanged at `5.8.24`. ⚠ **Three more reported mechanisms are corrected by the
|
|
@@ -523,7 +523,7 @@ moves ahead of everything except `S-23`.
|
|
|
523
523
|
| # | Row | Mechanism | Done when |
|
|
524
524
|
|---|---|---|---|
|
|
525
525
|
| `S-27` | **The licence axis cannot charge the buyer the product is being built for** ⭐ — `P-13` | `is_large_repo()` counts Java files **per repository path** against `_FREE_REPO_JAVA_FILE_LIMIT = 500` (`license.py:121`, `:521`), and the only other axis is the `delta` automation quota (`:267`). An organisation of 40 microservices at 300 Java files each crosses no threshold on any repository and **pays nothing**. That is precisely the buyer the third memo identifies correctly — flota, defendibilidad, *"how many unauthenticated routes does my organisation have"* — so the product's own price model excludes it. This is not a pricing preference: it is a measured contradiction between the gate in `license.py` and the route in `PRODUCT-ROUTE.md` | An axis that can charge an organisation — repository count, or a fleet manifest, or seats over a workspace — declared in `license.entitlement()` with `when_it_changes` saying what it costs, exactly as `P-2` established for the existing axis. **Not** by lowering the per-repo threshold, which would start charging the users the current rule deliberately leaves free. Acceptance: a fixture workspace of N small repositories reaches the same entitlement decision as one large repository of the same total size, or the difference is published as a stated product decision rather than an accident of the counter |
|
|
526
|
-
| `S-28` | **SARIF out — the findings reach the tab the developer already reads**
|
|
526
|
+
| `S-28` ◑ | **SARIF out — the findings reach the tab the developer already reads** — **first safe increment in `17fe1ca`**: `ask pack gate --format sarif` emits SARIF 2.1.0 decision diagnostics from the gate manifest only. A BLOCK/UNVERIFIED component becomes a locationless result with its component, status and exit code; a PASS emits nothing. This is deliberately narrower than an audit-finding export: no source location is invented and no component payload is re-emitted. | The schema was already in the house: `sarif.py` parses SARIF 2.1.0 for `enrich`, with severity mapping, location resolution and an `unresolved` list that names why a result could not be placed. The implemented gate channel reaches CI without presenting imported findings as ASK discoveries. **Remaining:** source-level exports for commands that own a finding population, with a round-trip assertion over their locations and non-coverage. A result that arrived through `enrich` stays attributed to the tool that found it and is never re-emitted as ASK's own: the enrichment is the reachability, not the detection (`NC-001`, `NC-002`). |
|
|
527
527
|
| `S-29` | **The remediation record becomes a public, generated page** | Twenty rows closed and field-verified in twenty-four hours, a mechanism in source per row, two rejected with their measurement and their price. It lives in `docs/DEFECT-LEDGER.md`, which is shipped inside the wheel and nowhere else. The commercial argument is exact and is the memo's best: the first objection to a single-maintainer proprietary product is *"what if it disappears"*, and the hardest answer is not an SLA promise but the product's own numbers | A **generated projection**, never the raw file — `P-14`: rows open and closed per version, median days to closure, declined rows with their reason, derived from the ledger plus `build_commit` so it cannot drift from what shipped. Redaction is part of the acceptance criterion, not a follow-up: no absolute maintainer paths, no third-party evaluation subjects named as audited. Assertion over the generator, not over the output |
|
|
528
528
|
| `S-30` | **The token bill becomes a measured number, and `--since` carries the budget** | Two halves of one thesis the memo states correctly: the customer's real cost is the agent's context bill, not the licence. The stateful half it proposes (a session that remembers what the agent was given) is **refused** — it makes the answer depend on what the agent claims it saw, which breaks the determinism this product sells. The stateless half is already almost built: `--since`, `delta`, `regress`, content-addressed answers and the declared `--compact` / `--agent` ceilings | (a) `--since <ref>` composed with a token budget on the existing bounded views, so an agent supplies the sha it holds and gets only what changed inside a stated ceiling, with `non_coverage` for what the budget cut. (b) A reproducible harness in the repository that runs one real agent task with and without ASK and publishes tokens per resolved task — under the honest-benchmark rule: what did **not** work is reported first, and no figure is published that a reader cannot re-run |
|
|
529
529
|
|
|
@@ -21,7 +21,6 @@ from __future__ import annotations
|
|
|
21
21
|
import argparse
|
|
22
22
|
import json
|
|
23
23
|
import os
|
|
24
|
-
import resource
|
|
25
24
|
import shutil
|
|
26
25
|
import subprocess
|
|
27
26
|
import sys
|
|
@@ -29,6 +28,11 @@ import tempfile
|
|
|
29
28
|
import time
|
|
30
29
|
from pathlib import Path
|
|
31
30
|
|
|
31
|
+
try:
|
|
32
|
+
import resource
|
|
33
|
+
except ImportError: # Windows has no POSIX resource module.
|
|
34
|
+
resource = None # type: ignore[assignment]
|
|
35
|
+
|
|
32
36
|
# Import the frozen collector from the package under test.
|
|
33
37
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "src"))
|
|
34
38
|
from sourcecode import __version__ as TOOL_VERSION # noqa: E402
|
|
@@ -154,7 +158,10 @@ def run_once(argv: list[str], env: dict[str, str], perf_log: Path) -> tuple[floa
|
|
|
154
158
|
"""
|
|
155
159
|
if perf_log.exists():
|
|
156
160
|
perf_log.unlink()
|
|
157
|
-
rss_before =
|
|
161
|
+
rss_before = (
|
|
162
|
+
resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss
|
|
163
|
+
if resource is not None else 0
|
|
164
|
+
)
|
|
158
165
|
t0 = time.perf_counter()
|
|
159
166
|
proc = subprocess.run(argv, env=env, capture_output=True, timeout=1800)
|
|
160
167
|
wall_ms = (time.perf_counter() - t0) * 1000.0
|
|
@@ -163,7 +170,10 @@ def run_once(argv: list[str], env: dict[str, str], perf_log: Path) -> tuple[floa
|
|
|
163
170
|
raise HarnessRunFailed(
|
|
164
171
|
f"exit {proc.returncode} from `{' '.join(argv)}`: {detail or 'no stderr'}"
|
|
165
172
|
)
|
|
166
|
-
rss_after =
|
|
173
|
+
rss_after = (
|
|
174
|
+
resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss
|
|
175
|
+
if resource is not None else 0
|
|
176
|
+
)
|
|
167
177
|
# ru_maxrss for RUSAGE_CHILDREN is the peak among reaped children; the delta
|
|
168
178
|
# approximates this run's peak. Approximate by construction — documented.
|
|
169
179
|
rss_bytes = max(rss_after - rss_before, rss_after) * RSS_UNIT if rss_after else 0.0
|