sourcecode 5.8.23__tar.gz → 5.8.25__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/.github/workflows/windows-battery.yml +41 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/CHANGELOG.md +66 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/PKG-INFO +4 -4
- {sourcecode-5.8.23 → sourcecode-5.8.25}/README.md +3 -3
- sourcecode-5.8.25/docs/AUDIT-2026-08-23-5.8.24.md +251 -0
- sourcecode-5.8.25/docs/AUDIT-2026-08-23-COMMERCIAL.md +195 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/CACHE.md +17 -7
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/DEFECT-LEDGER.md +512 -38
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/DEVELOPMENT-ROADMAP.md +285 -3
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/EXECUTION-PLAN-12MO.md +101 -6
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/EXECUTIVE-ROADMAP.md +128 -2
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/MANUAL-USUARIO.md +8 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/PRODUCT-ROUTE.md +48 -2
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/USER_GUIDE.md +16 -7
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/semantic-ir-roadmap.md +32 -9
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/REGRESSION-GATE.md +1 -2
- {sourcecode-5.8.23 → sourcecode-5.8.25}/pyproject.toml +1 -1
- {sourcecode-5.8.23 → sourcecode-5.8.25}/scripts/perf_harness.py +5 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/__init__.py +1 -1
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/analysis_budget.py +26 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/audit_report.py +8 -1
- sourcecode-5.8.25/src/sourcecode/build_stamp.py +185 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/cache.py +67 -1
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/cache_model.py +224 -6
- sourcecode-5.8.25/src/sourcecode/cache_observation.py +148 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/cli.py +538 -108
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/context_cache.py +11 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/data_exposure.py +16 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/envelope.py +17 -2
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/execution_plan.py +7 -3
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/field_deprecations.py +48 -3
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/migrate_check.py +204 -4
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/output_bounds.py +11 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/output_ceiling.py +203 -6
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/pack_manifest.py +39 -0
- sourcecode-5.8.25/src/sourcecode/packs.py +906 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/perf.py +24 -2
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/phased_run.py +84 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/product_info.py +43 -1
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/readonly.py +19 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/regress.py +43 -1
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/release_info.py +1 -1
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/rename_refactor.py +63 -0
- sourcecode-5.8.25/src/sourcecode/resource_budget.py +205 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schema_registry.py +23 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/timeline_cache.py +24 -4
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/validation_surface.py +9 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/verify_edit.py +25 -2
- sourcecode-5.8.23/src/sourcecode/build_stamp.py +0 -105
- sourcecode-5.8.23/src/sourcecode/packs.py +0 -386
- sourcecode-5.8.23/src/sourcecode/resource_budget.py +0 -77
- {sourcecode-5.8.23 → sourcecode-5.8.25}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/.github/workflows/perf-gate.yml +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/.gitignore +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/.ruff.toml +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/CLAUDE.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/CONTRIBUTING.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/LICENSE +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/NOTICE +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/SECURITY.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/AUDIT-2026-08-22-5.8.22.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/AUDIT-TESTING-CORPUS-2026-08-22.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/COMMERCIAL-OFFER.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/CUSTOMER-VALIDATION.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/DEMO-5MIN.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/MODERNIZATION.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/PRODUCT_AUDIT.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/PRODUCT_IDENTITY.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/PRODUCT_TIERS.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/RC1-CHECKLIST.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/RELEASE-CHECKLIST.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/CATALOG-retrieval-intents.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-assessment-deployment-evidence.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-assessment-report.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-build-closure-provenance.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-knowledge-provider-integration.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-p5.3b-statement-surface.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-p5.5-span-index.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-p6-semantic-impact-engine.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-p6-semantic-integration-engine.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-p7-semantic-services.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-pack-gate-ci.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-pack-manifest.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-pack-mcp-api.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-robustness-security-inference.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/DESIGN-semantic-retrieval.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/EPV-p6-class-typeref.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/REPORT-p6-flow-analyzer-comparison.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/REPORT-p6-integration-detector-comparison.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/REPORT-p8-flow-analyzer-migration.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/REPORT-p9-integration-detector-migration.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/adr/0001-semantic-ir.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/adr/0002-source-evidence-boundary.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/adr/0003-architectural-characterization.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/adr/0004-semantic-retrieval.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/adr/0005-evidence-reconciliation.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/adr/0006-performance-harness.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/adr/0007-composition-semantics.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/adr/0008-answer-coherence.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/consumer-disposition-inventory.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/overview.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/product-architecture-review.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/product-strategy-layering.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/architecture/semantic-ir-consumer-matrix.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/baseline-ci.yml +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/commercial-pipeline-audit.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/contracts-ci.yml +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/contracts.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/eval/2026-06-15-petclinic-rest-issue11-vets-pagination.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/eval/2026-06-15-petclinic-rest-issue147-validation.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/eval/2026-06-15-petclinic-rest-workflow.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/eval/2026-06-15-phase18-openapi-surface.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/eval/2026-06-15-phase20-validation-surface.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/eval/2026-06-16-broadleaf-checkout-impact-fieldtest.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/eval/2026-06-16-petclinic-rest-issue11-weakness2-closed.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/eval/2026-06-16-spring-petclinic-issue2333-dead-vets.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/licensing-schema.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/migrate-check.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/pack-gate-github-actions.yml +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/pack-gate-gitlab.yml +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/README.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/SUMMARY.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.15/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/SUMMARY.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/alfresco__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/alfresco__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/broadleaf__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/eureka__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/eureka__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/jenkins__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/jenkins__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/jobrunr__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/jobrunr__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/keycloak__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/keycloak__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/neo4j__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/neo4j__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/ofbiz__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/ofbiz__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/openmrs__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/openmrs__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/petclinic__ask__cold.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/2.5.16/petclinic__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/gate-latest/README.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/gate-latest/broadleaf__ask__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/gate-latest/broadleaf__endpoints__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/gate-latest/broadleaf__migrate-check__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/gate-latest/broadleaf__posture__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/gate-latest/broadleaf__spring-audit__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/gate-latest/broadleaf__validation__warm.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/baselines/reference-best/README.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/perf/corpus-testing-2026-08-22.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/posture.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/privacy.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/pro-experience-audit.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/schema.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/spec/envelope-v1.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/docs/spring-audit-ci.yml +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/hatch_build.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/scripts/perf_gate.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/scripts/sync_gate_anchors.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/scripts/test_fast.sh +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/answer_bounds.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/archetype.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/architectural_baseline.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/architectural_delta.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/audit_clusters.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/audit_recipe.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/audit_since.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/baseline_autocapture.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/breaking_changes.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/build_modules.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/bundled_docs.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/caller_reach.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/chain_rules.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/change_plan.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/ci_output.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/classifier.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/client_calls.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/compare.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/constraint_diff.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/consumer_join.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/container_wiring.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/contract_diff.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/contract_init.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/data_labels.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/declarations.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/defect_classes/__init__.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/defect_classes/registry.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/defect_identity.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/degradation.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/deployment_prefix.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detach.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/empty_reach.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/endpoint_disposition.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/environment_resolution.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/explain.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/explain_endpoint.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/facts/__init__.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/facts/registry.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/filter_surface.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/functional_routes.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/gate_anchors.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/git_checkout.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/github_diff.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/graph_evidence.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/identity_fallback.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/integration_coordinates.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/license.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/manifest_cache.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/dependency_import.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/migration_apply.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/migration_blast.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/non_coverage.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/openrewrite_recipe.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/output_encoding.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/output_sink.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/parallel.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/parse_cache.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/partial_contract.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/path_admission.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/pipe_contract.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/posture.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/progress.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/provenance.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/readiness_timeline.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/reconciliation.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/redactor.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/reference_facts.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/remediation_diff.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/remedies.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/__init__.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/context.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/errors.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/executor.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/planner.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/query.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/request.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/resolution.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/result.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/retriever.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/runtime.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/steps.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/steps_endpoint.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/steps_graph.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/steps_impact.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/steps_intf.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/steps_struct.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/retrieval/steps_txsec.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/ris.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/risk.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/risk_model.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/rule_catalog.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/rule_pass.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/runs.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/sarif.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/scanner.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schema.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schema_producers.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schemas/core-analysis-v1.schema.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schemas/endpoints-v1.schema.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schemas/envelope-v1.schema.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schemas/pr-impact-v1.schema.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schemas/verify-edit-v1.schema.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/schemas/verify-v1.schema.json +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/security_chain.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/security_config.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/security_config_scan.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/selection_contract.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/selftest.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/serializer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/servlet_surface.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/source_text.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_profiles.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_properties.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/sql_taint.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/target_admission.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/test_gap_ranking.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/test_sources.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/text_input.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/timeline.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/token_estimate.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/verify_repo.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/verify_rules.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/version_check.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/waivers.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/wired_surface.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/src/sourcecode/workspace.py +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/supabase/functions/README.md +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-5.8.23 → sourcecode-5.8.25}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: Windows battery
|
|
2
|
+
|
|
3
|
+
# AUD-601-X01 / S-10. Five defect witnesses have come from Windows and not one
|
|
4
|
+
# has been reproduced here, because the platform lived in a report and not in the
|
|
5
|
+
# battery: `envelope_status: degraded` on 13 of 13 payloads, `peak_rss_mb: 0.0`
|
|
6
|
+
# on four loads, a 457.6 s figure held rather than closed. This job is the
|
|
7
|
+
# reproduction those rows have been waiting for — it runs the same suite on the
|
|
8
|
+
# platform that produces them.
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: ["**"]
|
|
13
|
+
pull_request:
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
battery:
|
|
18
|
+
runs-on: windows-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.11"
|
|
25
|
+
|
|
26
|
+
- name: Install
|
|
27
|
+
run: |
|
|
28
|
+
python -m pip install --upgrade pip
|
|
29
|
+
pip install -e .
|
|
30
|
+
pip install pytest pytest-xdist
|
|
31
|
+
|
|
32
|
+
- name: Suite
|
|
33
|
+
run: pytest
|
|
34
|
+
|
|
35
|
+
# Named separately so a Windows-only failure is legible in the job list
|
|
36
|
+
# rather than one dot in nine thousand.
|
|
37
|
+
- name: The envelope names its command on every entry path
|
|
38
|
+
run: pytest tests/test_the_envelope_names_its_command_on_every_entry_path_aud601_x01.py -v
|
|
39
|
+
|
|
40
|
+
- name: A footprint sample is a number or a stated null, never a zero
|
|
41
|
+
run: pytest tests/test_resource_budget_d10.py -v
|
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.8.25] — 2026-08-23
|
|
4
|
+
|
|
5
|
+
*Version and documentation synchronization release. The audited `5.8.24` tree is
|
|
6
|
+
unchanged; the current package identity and user-facing documentation now report
|
|
7
|
+
`5.8.25`. Verification: `12,700 passed, 40 skipped` with writable cache locations.*
|
|
8
|
+
|
|
9
|
+
## [5.8.24] — 2026-08-22
|
|
10
|
+
|
|
11
|
+
*The thirteenth audit-pass queue is closed entire: all six rows as separate
|
|
12
|
+
commits, the regression first, with the full suite green at 12 329 tests. Three
|
|
13
|
+
of the reported mechanisms are wider than reported and are corrected against
|
|
14
|
+
measurement; one defect was found by the battery rather than by either.*
|
|
15
|
+
|
|
16
|
+
### Fixed — the regression the pass led with
|
|
17
|
+
|
|
18
|
+
- **`cache warm` warms every root view (`AUD-600-R01`)** — the warm built the
|
|
19
|
+
compact view only, so the first `--agent` call after an explicit warm paid a
|
|
20
|
+
full analysis: measured on `mall` (524 Java files) `--agent` 7.59 s → 0.34 s
|
|
21
|
+
(×22) and the raw contract view 3.20 s → 0.33 s (×9.7), against `--compact`
|
|
22
|
+
flat at 0.34 s. The field measured ×49.2 at ~3 000 files. Each view turns a
|
|
23
|
+
different set of analysers on and therefore has its own L1 core;
|
|
24
|
+
`cache_model.ROOT_VIEWS` is now the one authority the warm iterates and
|
|
25
|
+
`cache model` publishes a row per view. `--views` warms a subset, and a view
|
|
26
|
+
left cold is named rather than discovered by its first call.
|
|
27
|
+
|
|
28
|
+
### Fixed — the new pack surface
|
|
29
|
+
|
|
30
|
+
- **The gate composes `verify-edit` (`AUD-600-B01`)** — a pack named *Change
|
|
31
|
+
Safety Gate* did not compose the change-safety command, so a working tree
|
|
32
|
+
that had just gained `GET /internal/dump-config` returning `System.getenv(key)`
|
|
33
|
+
answered `NO_CHANGES` / exit 0. It now answers `UNVERIFIED` / exit 2 with the
|
|
34
|
+
route and its `access_policy`. The general half is the rule: every pack
|
|
35
|
+
publishes a `non_coverage` block, in its payload and in `pack list`, and the
|
|
36
|
+
battery asserts it over the axis and rule catalogues.
|
|
37
|
+
- **`--compact` bounds the assessment pack (`AUD-600-B02`)** — the flag was
|
|
38
|
+
forwarded to the children and nothing else. It now substitutes each
|
|
39
|
+
component's own decision summary for its body: `mall` 608 K → 42 K estimated
|
|
40
|
+
tokens, `thingsboard` 8.5 K, both under the ceiling. A refusal may not deny a
|
|
41
|
+
variant the command declares, so `--format markdown` is derived as the
|
|
42
|
+
bounded rendering it is.
|
|
43
|
+
- **The report keeps the figures the pack carries (`AUD-600-B03`)** — three
|
|
44
|
+
cells read `unknown` while the figure sat in a component payload the same
|
|
45
|
+
pack had written. One catalogue, `MARKDOWN_FIGURES`, read with the same
|
|
46
|
+
reader the bounded projection uses; every remaining `unknown` names what it
|
|
47
|
+
looked for.
|
|
48
|
+
- **A write refusal is decided from `argv` (`AUD-600-D01`)** — `--output-dir`
|
|
49
|
+
inside a read-only tree cost 47.9 s before refusing. The destination is now
|
|
50
|
+
decided before any component runs and the run is served without its artefacts,
|
|
51
|
+
the shape `verify --init --no-write` established. Nothing is created inside
|
|
52
|
+
the analysed tree and every refusal is still announced with its path and type.
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
|
|
56
|
+
- **`ask schema packs-v1` (`AUD-600-D02`)** — what each pack composes, what it
|
|
57
|
+
does not, its verdict vocabulary, its exit codes and the aggregation rule that
|
|
58
|
+
produced the verdict, generated from the pack declarations. The rule was
|
|
59
|
+
inferable from one run and published nowhere.
|
|
60
|
+
- **Per-component timing in the pack manifest** — `duration_ms` per component
|
|
61
|
+
and a `timing` rollup naming the slowest one, so a 47 s gate can be attributed
|
|
62
|
+
from outside. A clock is never an answer: `timing` is excluded from
|
|
63
|
+
`content_id`, or two runs of an unchanged tree would disagree.
|
|
64
|
+
- **The fourth exit code for packs** — when every unverified component was cut
|
|
65
|
+
short by its budget the pack leaves with `75` and names them in
|
|
66
|
+
`components_cut_short`. A mixed run keeps the stronger `2` and the verdict
|
|
67
|
+
word never moves.
|
|
68
|
+
|
|
3
69
|
## [5.8.23] — 2026-08-22
|
|
4
70
|
|
|
5
71
|
*The external corpus follow-up is closed: pack output is durable by default,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 5.8.
|
|
3
|
+
Version: 5.8.25
|
|
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.25 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.25 — 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.25 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.25 — and, on a build that has aged,
|
|
166
166
|
# how many releases have probably shipped since
|
|
167
167
|
```
|
|
168
168
|
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
# ASK Engine 5.8.24: auditoría de regresión, dos rondas
|
|
2
|
+
|
|
3
|
+
**Fecha:** 2026-08-23
|
|
4
|
+
**Artefacto auditado:** release `5.8.24`, `build_commit`
|
|
5
|
+
`61b9c12b0e354cda157038bc8be6e19384a42368`
|
|
6
|
+
**Sujetos:** banco de 16 repositorios Java/Spring sobre Windows 11 Pro (ronda A, ~145
|
|
7
|
+
invocaciones) · MSAS / `banyan-v2`, HEAD `3dde0376`, 3 342 ficheros Java (ronda B, octava
|
|
8
|
+
ronda sobre el mismo árbol bit a bit, ~55 invocaciones, `ASK_READONLY=1` y techo explícito
|
|
9
|
+
en todas, 0 tracebacks, 0 escrituras)
|
|
10
|
+
**Registro relacionado:** [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md), *Fourteenth Audit Pass* y
|
|
11
|
+
filas `AUD-601-*`
|
|
12
|
+
|
|
13
|
+
## Resultado ejecutivo
|
|
14
|
+
|
|
15
|
+
| Ronda | Nota | Anterior | Veredicto del auditor |
|
|
16
|
+
|---|---:|---:|---|
|
|
17
|
+
| A — banco de 16 repos | `8,7/10` | 8,3 | Adoptar |
|
|
18
|
+
| B — MSAS | `8,88/10` | 8,84 | Comprar y actualizar, con una reserva operativa |
|
|
19
|
+
|
|
20
|
+
Ronda B marca **su propio eje de rendimiento como provisional** y nombra el confound. Ronda A
|
|
21
|
+
**retracta una fila propia** tras cuatro informes. Ambas cosas cuentan a favor del método y
|
|
22
|
+
están recogidas abajo.
|
|
23
|
+
|
|
24
|
+
## 1. Lo primero: el sujeto es verificable
|
|
25
|
+
|
|
26
|
+
Las dos rondas leen `build_commit 61b9c12b0e35…` y el mismo
|
|
27
|
+
`version.provenance.closure_coverage` — **107 filas cerradas, 88 `present`, 19 `uncited`, 0
|
|
28
|
+
`absent`, 0 `unresolved`** — y este árbol lo reproduce exacto. Es `AUD-597-X01` y
|
|
29
|
+
`AUD-598-X01` cobrando juntos, y cambia una conclusión que se arrastraba dos rondas:
|
|
30
|
+
|
|
31
|
+
> En `5.8.22` y `5.8.23` la ronda B concluyó *«el fix no llegó al artefacto»*. Ahora el
|
|
32
|
+
> artefacto declara que sí llegó, el bloque del help demostrablemente cambió, y las dos
|
|
33
|
+
> líneas rotas siguen ahí. La lectura correcta pasa a ser: **el fix está y no cubre estos dos
|
|
34
|
+
> casos.**
|
|
35
|
+
|
|
36
|
+
El tercer estado `uncited` (19 de 107) distingue *no rastreado* de *rastreado y ausente* en
|
|
37
|
+
lugar de halagar el total. Es exactamente lo que `AUD-598-X01` declaró como su límite 2.
|
|
38
|
+
|
|
39
|
+
## 2. Cerrado y verificado desde fuera
|
|
40
|
+
|
|
41
|
+
| Fila | Qué era | Medido en `5.8.24` |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| `AUD-600-R01` | `cache warm` no calentaba la vista `--agent` | **Cerrada sin residuo.** Mismo protocolo (`cache clear -y` → `cache warm` → 1.ª → 2.ª): `struts` (~3 000 ficheros) **40 911 → 688 ms**, ×59 de mejora, 2.ª a 674 ms (ratio 1,0 donde era ×49,2); `mall` 12 487 → 665 ms; `spring-petclinic` 1 615 → 683 ms |
|
|
44
|
+
| `AUD-600-B01` | `pack gate` no componía `verify-edit` | **Cerrada.** `commands: ['verify','verify-edit','posture','pr-impact']`. Con una ruta nueva `GET /internal/dump-config` devolviendo `System.getenv(key)`: `verdict: UNVERIFIED`, `exit_code: 2`, proceso rc 2 |
|
|
45
|
+
| `AUD-600-B02` | `pack assessment` sin variante acotada (rechazaba con `OUTPUT_TOO_LARGE`) | **Cerrada.** `--compact` → rc 0, **35 619 B ≈ 8,9 K tokens** contra 1 901 108 B: **×53**, con margen bajo el techo |
|
|
46
|
+
| `S-20` · `S-22` | dos sugerencias de diseño de la ronda anterior | **Enviadas y verificadas por ambas rondas**: `non_coverage` por pack con ids propios (`NC-PACK-001`, `NC-PACK-003`) y el registro `packs-v1` con la regla de agregación publicada (*«BLOCK wins over UNVERIFIED, and UNVERIFIED over PASS»*), cuyo `basis` dice *«Generated from the pack declarations in `packs.py` … Nothing here is maintained by hand beside the code it describes»* |
|
|
47
|
+
|
|
48
|
+
**No tomadas, y las dos rondas lo dicen sin que se les pregunte:** el bloque `intersections`
|
|
49
|
+
(`S-23`) y `--format sarif` (`S-28`). `--format sarif` rechaza con `INVALID_USAGE` listando
|
|
50
|
+
los cuatro válidos, así que no hay ambigüedad. Es la tercera confirmación independiente de
|
|
51
|
+
la primera y la segunda de la segunda.
|
|
52
|
+
|
|
53
|
+
## 3. La cola nueva, con las correcciones de mecanismo
|
|
54
|
+
|
|
55
|
+
Siete filas, `AUD-601-*`. **Tres de los mecanismos reportados se corrigen al reproducir**, y
|
|
56
|
+
una fila sube de severidad por una mitad que nadie reportó.
|
|
57
|
+
|
|
58
|
+
### `AUD-601-M01` — el estado de caché no es un input que un auditor pueda establecer · **P1 de método**
|
|
59
|
+
|
|
60
|
+
La ronda A **retracta `B-27` / `C3-128`** tras cuatro informes. *«`timeline` es la única orden
|
|
61
|
+
con forma de puerta por encima de 120 s y sin techo posible»*, publicada a 198 s, 163,9 s,
|
|
62
|
+
75,2 s y 161,6 s, es un artefacto de caché. Su propio control, mismo comando, misma sesión:
|
|
63
|
+
|
|
64
|
+
| Estado | `timeline --since HEAD~3` |
|
|
65
|
+
|---|---:|
|
|
66
|
+
| 1.ª vez sobre ese rango de commits | 161 641 ms |
|
|
67
|
+
| Repetición inmediata | 547 ms |
|
|
68
|
+
| 2.ª y 3.ª seguidas | 509 ms · 505 ms |
|
|
69
|
+
| Tras `cache clear ./spring-security -y` | 512 ms |
|
|
70
|
+
|
|
71
|
+
La capa es **por commit muestreado**, así que un `cache clear` del repositorio no la
|
|
72
|
+
invalida — y el producto lo declara por escrito en `ask cache model`
|
|
73
|
+
(*«timeline · nothing (repeat cached) · [timeline-samples]»*). El coste atribuido cuatro
|
|
74
|
+
rondas al comando es el precio de sembrar una capa que la herramienta documenta como sembrada
|
|
75
|
+
una vez.
|
|
76
|
+
|
|
77
|
+
**Cuarto hallazgo falso que el estado de caché produce en ese banco en seis rondas** (×10,4 en
|
|
78
|
+
`5.8.16`, ×2,42 y ×1,39 en `5.8.18`, ×1,93 en `5.8.20`, y éste). Dos cifras más quedan sin
|
|
79
|
+
atribuir esta ronda por la misma razón: `B-21` (`posture ./thingsboard` 59,7 s intercalado
|
|
80
|
+
contra 4,9 / 4,3 s aislado) y `migrate-check ./spring-security` (×1,59, **publicado como no
|
|
81
|
+
atribuible** y no como regresión, con la serie de seis rondas 6,02 → 11,60 → 11,30 → 10,66 →
|
|
82
|
+
6,81 → 10,82 s y tres pasadas controladas a 10 365 / 10 400 / 10 825 ms).
|
|
83
|
+
|
|
84
|
+
⚠ **Una mitad de la fila ya está respondida y el informe no la vio:** `cache clear --global`
|
|
85
|
+
vacía los almacenes compartidos de parseo y CIR (`cli.py:18213`). Que `--all` los preserve es
|
|
86
|
+
comportamiento declarado, no el defecto. Lo que sobrevive es el presupuesto: **559,95 MB
|
|
87
|
+
sobre 512**, y es real.
|
|
88
|
+
|
|
89
|
+
### `AUD-601-R01` — `peak_rss_mb: 0.0` · **P1** (el informe la clasificó P2)
|
|
90
|
+
|
|
91
|
+
Síntoma reportado: `_meta.memory.peak_rss_mb: 0.0` en cuatro cargas que abarcan 49 → 3 000
|
|
92
|
+
ficheros, incluida la vista de agente, contra un control independiente por `tasklist` de
|
|
93
|
+
~1,4 GB sobre `thingsboard`.
|
|
94
|
+
|
|
95
|
+
Reproducido en fuente, y es **peor de lo reportado, por dos vías**:
|
|
96
|
+
|
|
97
|
+
1. El cero **no es un descuido**. `resource_budget.peak_rss_mb()` devuelve `0.0` cuando el
|
|
98
|
+
módulo `resource` no existe, con el comentario *«the zero value explicitly means the
|
|
99
|
+
platform did not expose a sample»* — la falsedad confiada escrita como decisión, en el eje
|
|
100
|
+
que este producto existe para rechazar.
|
|
101
|
+
2. **Mitad no reportada:** `resource_budget.exceeded()` sólo rehúsa cuando `peak > ceiling`.
|
|
102
|
+
Con `peak` clavado en `0.0`, **`ASK_MAX_RSS_MB` no puede dispararse nunca y
|
|
103
|
+
`MEMORY_TOO_LARGE` es inalcanzable en Windows** — la plataforma declarada — mientras el
|
|
104
|
+
help promete lo contrario (`cli.py:805`). Es una puerta que no puede fallar, la misma forma
|
|
105
|
+
que `AUD-597` ya rechazó una vez.
|
|
106
|
+
|
|
107
|
+
Contraste medido en este host: `peak_rss_mb: 54.69` en `posture ./spring-petclinic`. La rama
|
|
108
|
+
de plataforma es la falla entera.
|
|
109
|
+
|
|
110
|
+
**Aceptación:** `peak_rss_mb: null` con `peak_rss_basis` donde la plataforma no lo expone, y
|
|
111
|
+
medición real donde sí — el criterio del propio informe, que es el correcto. Y la mitad que es
|
|
112
|
+
P1: donde la muestra sea `null`, `exceeded()` debe **rehusar responder** en vez de devolver
|
|
113
|
+
`None`, y `MEMORY_TOO_LARGE` debe declararse no disponible en vez de quedar mudo.
|
|
114
|
+
|
|
115
|
+
### `AUD-601-B01` — el advisory de presupuesto está en el comando que no puede aplicarlo · **P2**
|
|
116
|
+
|
|
117
|
+
La ronda A reproduce `N-02` por quinta vez (`ASK_MAX_ANALYSIS_SECONDS=1e9` y `=1_000` → rc 0,
|
|
118
|
+
0 bytes de stderr, sin advisory) y lo lee como la fila que `AUD-598-B04` rechazó. Medido aquí,
|
|
119
|
+
**el informe mira la superficie equivocada y debajo hay un defecto real**:
|
|
120
|
+
|
|
121
|
+
- `budget_binds` **funciona** tal como se cerró: `migrate-check` publica *«1e+09s is more than
|
|
122
|
+
100x the 11.3s this product has measured for `migrate-check`, so no run of it reaches that
|
|
123
|
+
deadline»*, con `measured_anchor_seconds: 11.3`.
|
|
124
|
+
- Pero `_budget_disclosure()` tiene **exactamente un call site** (`cli.py:14437`) y es ese
|
|
125
|
+
comando, cuyo scope es `advisory_only`.
|
|
126
|
+
- Los tres miembros de `phased_run.BUDGET_RUNNER_COMMANDS` — `spring-audit`, `risk`,
|
|
127
|
+
`audit-report`, los únicos donde un plazo puede parar algo — **no publican ningún bloque
|
|
128
|
+
`analysis_budget`**: medido sobre `spring-audit ./spring-petclinic` con el presupuesto
|
|
129
|
+
puesto, no aparece ninguna clave que contenga *budget* en todo el payload.
|
|
130
|
+
|
|
131
|
+
Quien pone un plazo en un comando que lo aplica no se entera de nada; quien lo pone en el
|
|
132
|
+
comando que lo ignora recibe el advisory completo. Es la clase más repetida de este ledger —
|
|
133
|
+
un arreglo correcto que paró en un call site — y la población que debe es
|
|
134
|
+
`BUDGET_RUNNER_COMMANDS ∪ {migrate-check}`, leída del registro.
|
|
135
|
+
|
|
136
|
+
### `AUD-601-B02` — el modelo de futilidad no describe la bandera que juzga · **P3**
|
|
137
|
+
|
|
138
|
+
La ronda B abre `ASK-PACK-004`: `pack assessment .` rehúsa con *«No flag this command declares
|
|
139
|
+
can bring this answer under the ceiling»* mientras `--compact` lleva la misma respuesta a
|
|
140
|
+
~8 800 tokens estimados — *«un agente que lea el hint nunca probará `--compact`»*.
|
|
141
|
+
|
|
142
|
+
Reproducido aquí forzando el techo
|
|
143
|
+
(`ASK_MAX_OUTPUT_TOKENS=2000 ask pack assessment ./spring-petclinic`), y el mecanismo lo
|
|
144
|
+
publica el propio rechazo: `bounded_floor_tokens: 18201`, con `bounded_floor_basis` =
|
|
145
|
+
*«this payload with every list emptied — the smallest answer any list-bounding flag can
|
|
146
|
+
produce»*, y `hint_basis.declared_flags: ["--compact"]` impreso al lado de la frase que dice
|
|
147
|
+
que ninguna bandera declarada ayuda.
|
|
148
|
+
|
|
149
|
+
**El suelo modela truncado de listas, y `--compact` sobre un pack no es un truncado: es una
|
|
150
|
+
sustitución** — reemplaza el cuerpo de cada componente por el resumen de decisión de ese
|
|
151
|
+
componente (`S-21` / `AUD-600-B02`, tal como se envió). El hint es honesto contra un modelo
|
|
152
|
+
que no describe la superficie. Nota para quien lo tome: `bounding_is_futile` **no tiene call
|
|
153
|
+
site de producción** (sólo `output_ceiling.py` y un test), así que este hint llega por la rama
|
|
154
|
+
`nothing_smaller`, no por la medida que construyó `AUD-598-B02`.
|
|
155
|
+
|
|
156
|
+
### `AUD-601-X01` — el envelope se declara averiado en campo y aquí no reproduce · **P3, en espera**
|
|
157
|
+
|
|
158
|
+
La ronda B mide `_meta.envelope_status: "degraded"`,
|
|
159
|
+
`envelope_status_reason: "the running command could not be named"` y `command: "unknown"` en
|
|
160
|
+
**13 de 13 payloads**, y lo gradúa moderado precisamente porque el campo se autodeclara en vez
|
|
161
|
+
de fallar en silencio — que es la observabilidad que ese mismo auditor pidió.
|
|
162
|
+
|
|
163
|
+
Medido en este árbol al **mismo `build_commit`**, por cuatro caminos de entrada — `run_cli.py`;
|
|
164
|
+
`python -c "from sourcecode.cli import main_entry"` (el camino que usa `packs.py:555`); el
|
|
165
|
+
script instalado `ask`; y cada uno bajo `ASK_READONLY=1` y con presupuesto explícito —
|
|
166
|
+
`command` resuelve a `posture` siempre, `envelope_status` está ausente y `peak_rss_mb` es real.
|
|
167
|
+
`_active_command_context()` devuelve `""` sólo donde Click no tiene contexto actual en el
|
|
168
|
+
momento de emitir, y nada de aquí puede nombrar el entorno que lo produce.
|
|
169
|
+
|
|
170
|
+
**Se sostiene con la medición en ambas direcciones en vez de cerrarse**, igual que se sostuvo
|
|
171
|
+
la cifra de 457,6 s de `ASK-17` en Windows. Se ata a `S-10` (runner de Windows en CI), que
|
|
172
|
+
pasa a tener **cinco** testigos de defecto y cero reproducciones. Ése es el arreglo.
|
|
173
|
+
|
|
174
|
+
### `AUD-601-D01` y `AUD-601-D02` — declaración, quinta ronda
|
|
175
|
+
|
|
176
|
+
`AUD-601-D01`: *«Runs now»* sigue con `posture . --diff dev:prod` y `endpoints .` sin bandera
|
|
177
|
+
acotada; sólo `migrate-check . --compact` la lleva. Pero **el bloque sí cambió** — `risk .` se
|
|
178
|
+
movió a una categoría nueva *«Too big for this session»* — así que el generador ya consulta
|
|
179
|
+
coste y no cubre esas dos líneas. Lo mismo para `ASK-UX-002` (`56a4bf7`, `present`) con el
|
|
180
|
+
payload sin mover un byte: sin bandera / `--compact` / `--limit 20` dan los tres exactamente
|
|
181
|
+
71 483 tokens / 285 935 B. La frase que cierra `ASK-UX-002` **ya existe en el producto**: el
|
|
182
|
+
hint honesto de techo *«the weight is not in the lists they bound»* se envió para packs y no
|
|
183
|
+
se aplicó a `posture --diff`.
|
|
184
|
+
|
|
185
|
+
`AUD-601-D02`: `validation` gana `schema_version: validation-v1`; la identidad de repositorio
|
|
186
|
+
sigue ausente en `posture`, `validation` y `data-exposure`, y **`data-exposure` es
|
|
187
|
+
byte-idéntico entre `mall` y `struts`** — dos repositorios, una respuesta, y nada dentro que
|
|
188
|
+
nombre a ninguno. Es la forma de negativa idéntica de `B-14` y la razón de que las dos filas
|
|
189
|
+
viajen juntas.
|
|
190
|
+
|
|
191
|
+
## 4. Regresiones
|
|
192
|
+
|
|
193
|
+
**De contenido: ninguna, en las dos rondas.** Ronda A: 17 comprobaciones intactas (poblaciones
|
|
194
|
+
de rutas de `halo` 158/173 y control `mall` 246/246, `route_surface_changed`, `confidence_level`
|
|
195
|
+
sobre 0 findings, separadores POSIX, presupuestos inválidos a exit 2, `selftest` 12 filas / 0
|
|
196
|
+
error, la guarda de escritura cubriendo `pack`). Ronda B: cero deriva por **octava** ronda
|
|
197
|
+
(`endpoints` 3763 / 725, censo 3763-3872-1120, `repo_id 7fced5c877cacfc5`; `spring-audit`
|
|
198
|
+
373 / 94 / 43 003 símbolos), y el determinismo **mejoró**: `spring-audit --min-severity high`
|
|
199
|
+
byte-idéntico a 156 902 B en dos corridas donde antes oscilaba ±1–3 B por relojes,
|
|
200
|
+
`endpoints --compact` 14 702 B ×3 incluido `--no-cache`, `posture` 144 742 B ×5, y el
|
|
201
|
+
`content_id` de `posture` idéntico en cinco corridas (`124b61d1bf3f9d84`).
|
|
202
|
+
|
|
203
|
+
**De rendimiento: las dos rondas se contradicen, y no se declara regresión.**
|
|
204
|
+
|
|
205
|
+
| | Ronda A (banco, protocolo con `cache warm` explícito, intercalado ×4, mediana, primera descartada) | Ronda B (MSAS) |
|
|
206
|
+
|---|---|---|
|
|
207
|
+
| Lectura | **8 de 9 anclas mejoran 4–17 %**, y las seis que subieron en `5.8.23` vuelven todas a su banda o por debajo. `ask --help` a 1,74 s, bajo el ×1,25 de vigilancia | `posture` +55 %, `spring-audit` ×2,1, `migrate-check` ×2,2, `selftest` +45 %, `compare` +39 %, `export --c4` peor — y `ask . --compact` **mejor 1,3×** (94,6 → 74,9 s), `validation` 1,5×, `verify --init` 1,3× |
|
|
208
|
+
| Estado | firme | **provisional, declarado por su autor** |
|
|
209
|
+
|
|
210
|
+
La ronda B nombra su propio confound: su primera invocación de la sesión costó **94,9 s contra
|
|
211
|
+
8,9 s** en la segunda corrida, así que la sesión arrancó fría, y su almacén de parseo bajó de
|
|
212
|
+
28 106 a 22 491 entradas. Ninguna ronda se descarta y no se abre fila de regresión: los dos
|
|
213
|
+
protocolos difieren exactamente en la variable de la que trata `AUD-601-M01`.
|
|
214
|
+
|
|
215
|
+
**Lo que sí es señal limpia** es `S-22` cobrando: `pack gate --compact` pasó de 45,6 s a
|
|
216
|
+
127,9 s y `manifest.timing` lo atribuye sin cronómetro externo —
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
verify 566 ms
|
|
220
|
+
verify-edit 2854 ms <- componente NUEVO
|
|
221
|
+
posture 99539 ms <- 78 % del coste
|
|
222
|
+
pr-impact 24175 ms
|
|
223
|
+
sum_of_component_ms = 127134 slowest_component = "posture"
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
La hipótesis de que el gate se ralentizó por componer un cuarto comando **queda refutada por
|
|
227
|
+
los datos del propio producto**: `verify-edit` cuesta 2,9 s. El coste es `posture` en forma
|
|
228
|
+
comparativa, 99,5 s frente a 8–9 s en forma plana. Igual con `pack assessment` a 471 s: `risk`
|
|
229
|
+
son 401 012 ms (85 %) y sale `PARTIAL` porque agotó el techo de 400 s que el auditor le puso.
|
|
230
|
+
Es la primera ronda en que un coste compuesto se atribuye sin instrumentación externa.
|
|
231
|
+
|
|
232
|
+
Detalle que merece quedar escrito: publicar `duration_ms` metió un reloj en la respuesta y rompió
|
|
233
|
+
el `content_id`; lo detectó su propio test (`test_two_runs_of_an_unchanged_tree_agree`) y
|
|
234
|
+
`timing` se unió a `_CLOCK_KEYS`.
|
|
235
|
+
|
|
236
|
+
## 5. Movimiento en filas largas — no re-derivar
|
|
237
|
+
|
|
238
|
+
| Fila | Antes | Ahora |
|
|
239
|
+
|---|---|---|
|
|
240
|
+
| `B-11` / `AUD-598-B03` anclas de coste | 19 anclas, 17 en `5.1.0` | **16 en `5.1.0`, 1 regenerada en `5.8.23`** — primer movimiento en diez informes, consistente con que la fila cerrara la mitad de falsabilidad y deba las 16 cifras de campo |
|
|
241
|
+
| `B-13` identidad | `validation` sin `schema_version` | `schema_version: validation-v1`; identidad de repositorio aún ausente en tres payloads |
|
|
242
|
+
| `N-06` / `AUD-597-D03` | `source_file: ""` | `null` — el string vacío confiado desaparece y la ausencia se declara como ausencia. El fichero sigue sin poblarse, que es la mitad que la fila publicó como debida |
|
|
243
|
+
| `ASK-GATE-001` | — | **parcial, sin cambio**: `spring-audit` / `risk --ci` → 75; `migrate-check --ci` y `migrate-apply --ci` → rc 2 `No such option`. Coherente con la mitad que `AUD-597` rechazó con precio (una puerta que no puede fallar) |
|
|
244
|
+
|
|
245
|
+
## 6. Reserva operativa publicable
|
|
246
|
+
|
|
247
|
+
Es de la ronda B y se apoya en cifras del propio producto, no en un cronómetro:
|
|
248
|
+
|
|
249
|
+
> Si el coste importa en tu pipeline, mide `spring-audit` y `migrate-check` en tu propio árbol
|
|
250
|
+
> antes de mover el techo de CI. Y `posture` en forma comparativa cuesta 99,5 s — dato del
|
|
251
|
+
> propio producto — así que `pack gate` en cada push necesita presupuesto o `--detach`.
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# ASK Engine — auditoría comercial y de nicho, 2026-08-23
|
|
2
|
+
|
|
3
|
+
**Fecha:** 2026-08-23
|
|
4
|
+
**Artefacto auditado:** árbol `fix/aud600-queue`, `__version__` `5.8.24`, HEAD `61b9c12`
|
|
5
|
+
**Origen:** tercer memo estratégico externo, escrito desde seis rondas de auditoría sobre
|
|
6
|
+
el binario (no sobre la web). A diferencia de los dos memos de 2026-08-21, éste no audita
|
|
7
|
+
defectos: audita **posicionamiento, unidad de venta y techo de precio**.
|
|
8
|
+
**Auditoría de defectos del mismo día:**
|
|
9
|
+
[`AUDIT-2026-08-23-5.8.24.md`](AUDIT-2026-08-23-5.8.24.md) — dos rondas técnicas sobre el
|
|
10
|
+
mismo `build_commit`. Confirma desde el campo dos cosas que este memo también toca: `B-30`
|
|
11
|
+
(los 20 contratos derivados son de un solo tipo, cuarta ronda) y que `--format sarif` no
|
|
12
|
+
existe todavía, y **contradice al memo en una**: `pack gate` publica ya el coste por
|
|
13
|
+
componente, así que la composición no es opaca.
|
|
14
|
+
**Registros relacionados:** [`EXECUTION-PLAN-12MO.md`](EXECUTION-PLAN-12MO.md) (autoridad
|
|
15
|
+
sobre estrategia), [`DEVELOPMENT-ROADMAP.md`](DEVELOPMENT-ROADMAP.md) → *Product-strategy
|
|
16
|
+
queue* (mecanismo y orden de ataque), [`DEFECT-LEDGER.md`](DEFECT-LEDGER.md) clase `P`.
|
|
17
|
+
|
|
18
|
+
## Alcance y método
|
|
19
|
+
|
|
20
|
+
El memo se depuró fila a fila contra el árbol antes de aceptarse, que es el mismo
|
|
21
|
+
procedimiento que los dos memos anteriores. Lo que sigue separa tres cosas que el memo
|
|
22
|
+
mezcla: **hechos que no se sostienen en HEAD**, **propuestas aceptadas** y **propuestas
|
|
23
|
+
rechazadas con motivo**. Ninguna cifra de esta página se recuerda; todas se leyeron del
|
|
24
|
+
árbol el 2026-08-23.
|
|
25
|
+
|
|
26
|
+
## 1. Correcciones de hecho
|
|
27
|
+
|
|
28
|
+
Seis afirmaciones del memo cambian de estado al medirse. Tres de ellas **cambian la
|
|
29
|
+
prioridad de la propuesta que sostienen**, que es la razón de poner esta sección primero.
|
|
30
|
+
|
|
31
|
+
| Afirmación del memo | Estado medido en HEAD |
|
|
32
|
+
|---|---|
|
|
33
|
+
| «la caché de parseo no sostiene 16 repositorios → **la caché es el roadmap**» | Capacidad **sí**, rendimiento **no**. `ASK-17` ya cerró con medición controlada: el sweep LRU cuesta **~3 %**, no el 66 % que se le atribuyó, y esa cifra ya fue retractada con número. La ley medida es **~20 KB de store por fichero Java** → ~500 MB por repositorio de 24 000 ficheros. Es un problema de **dimensionado y planificación de flota**, no de motor. La propuesta sobrevive; su precondición declarada, no |
|
|
34
|
+
| «`cache clear --all` no reduce el almacén compartido» | Cierto, y **por diseño declarado**. Existe `--global` (`cli.py:18213`), que sí vacía los almacenes compartidos de parseo y CIR, y el propio help dice por qué son dos banderas distintas. El memo no vio la bandera |
|
|
35
|
+
| «los payloads ya están en memoria dentro de `pack`, así que la intersección es gratis» | **Falso**. `packs.py:555` lanza cada componente en un `subprocess` (`sys.executable -c …`). Pero la conclusión **mejora**: los artefactos quedan en disco indexados por `manifest.components`, así que la intersección es un *join sobre respuestas ya publicadas* — más barato de construir, y **no rompe «una autoridad por hecho»**, que es lo que sí haría recalcularla en un proceso compartido |
|
|
36
|
+
| «`verify --init` sólo sabe derivar `forbid_finding`; los 20 contratos son de un solo tipo» | Mecanismo equivocado. `verify_rules._KINDS` son **tres** (`forbidden_edge`, `require_endpoint_security`, `forbid_finding`) y `contract_init` deriva las tres, con su motivo escrito en el docstring del módulo. El 20/20 observado es el efecto de los umbrales (`MIN_EDGE_POPULATION=5`, `MAX_EDGE_RULES=5`, `MIN_ENDPOINTS_PER_PREFIX=3`) más el auto-descarte de reglas violadas en el árbol del que se derivan. **El síntoma es real y la causa no es la que se reporta**: la derivación degenera en silencio y no dice por qué |
|
|
37
|
+
| «las anclas de coste llevan diez informes en 5.1.0» | **Medio cerrado tras `5.8.24`** (`c63cb24`, `AUD-598-B03`): cada ancla publica ya su **sujeto** y su **build**, y donde la cifra precede al sello el commit va como `unrecorded` en vez de inventarse. Quedan las 16 cifras de campo sin re-medir, que es la mitad que sigue abierta |
|
|
38
|
+
| «el ledger es un activo que se vuelve pasivo si miente una vez» | El mecanismo ya envió: `CLOSURE_PROVENANCE` (`AUD-598-X01`) está en el árbol y **cazó su primer caso**. Los dos límites que declara — ancestría ≠ efecto, y una fila no rastreada es incontradecible — siguen siendo los límites correctos |
|
|
39
|
+
|
|
40
|
+
**Y el hallazgo que sostiene el resto:** la clave de join **existe**.
|
|
41
|
+
`CanonicalEndpoint.make_id` (`canonical_ir.py:480`) produce un identificador de endpoint
|
|
42
|
+
estable, y `posture`, `risk`, `pr_impact`, `spring_impact` y `data_exposure` lo cargan
|
|
43
|
+
todas. Eso convierte la propuesta de intersecciones de investigación en trabajo acotado.
|
|
44
|
+
|
|
45
|
+
## 2. Veredicto por propuesta
|
|
46
|
+
|
|
47
|
+
| Propuesta del memo | Veredicto | Destino |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| Bloque `intersections` | **CONSTRUIR YA** | `S-23`, ya abierta desde la 13.ª pasada — el memo la confirma desde fuera y por segunda vez |
|
|
50
|
+
| SARIF de **salida** | **CONSTRUIR YA** | `S-28` (nueva) |
|
|
51
|
+
| Página pública del ledger, **proyectada** | **CONSTRUIR YA** | `S-29` (nueva) — nunca el `.md` crudo, ver §4 |
|
|
52
|
+
| `--since` + `--budget` sobre las vistas existentes | **CONSTRUIR YA** | `S-30` (nueva), como la mitad sin estado de su idea |
|
|
53
|
+
| `ask fleet <manifest.yml>` | **CONSTRUIR DESPUÉS** (trimestre) | `S-18` ya existe (*de repositorio a organización*); la precondición declarada por el memo es la equivocada |
|
|
54
|
+
| Contratos de arquitectura estilo ArchUnit | **CONSTRUIR DESPUÉS, recortado** | Dos tipos de regla nuevos, no un producto (§3) |
|
|
55
|
+
| Deriva arquitectónica en el tiempo | **RELATO, NO CÓDIGO** | `baseline`, `trend` y `regress` ya existen. Falta la diapositiva, no el comando |
|
|
56
|
+
| Medir «tokens por tarea de agente, con y sin ASK» | **CONSTRUIR YA, con condiciones** | `S-30`; bajo la regla de benchmarks honestos y con arnés reproducible en el repo |
|
|
57
|
+
| `ask context --since <sha> --budget N` con sesión de agente | **RECHAZADA la forma, aceptado el diagnóstico** | §5 de `EXECUTION-PLAN-12MO.md` |
|
|
58
|
+
| Canal `stable` mensual junto a `latest` | **APLAZADA** | Precondición incumplida: no hay **ni un tag** |
|
|
59
|
+
| Escrow de código / cláusula de liberación | **RECHAZADA hoy** | §5 de `EXECUTION-PLAN-12MO.md` |
|
|
60
|
+
| Canal indirecto de consultoras para `assessment` | **RECHAZADA como construcción** | La versión barata ya existe (`--format markdown`) |
|
|
61
|
+
| «la caché es el roadmap» | **RECHAZADA** | Refutada con medición (§1) |
|
|
62
|
+
| «no pasar de cuatro packs» | **ACEPTADA** | Coincide con `S-26`, que ya fija el tope en cuatro |
|
|
63
|
+
|
|
64
|
+
## 3. Detalle de las tres que importan
|
|
65
|
+
|
|
66
|
+
### `intersections` — la única que ningún competidor copia
|
|
67
|
+
|
|
68
|
+
No como comando nuevo: como **bloque derivado dentro del payload del pack**, calculado por
|
|
69
|
+
join sobre `manifest.components`. Tres reglas que la mantienen honesta y que son las mismas
|
|
70
|
+
que ya rigen los packs:
|
|
71
|
+
|
|
72
|
+
- nunca afirma más de lo que afirmaron sus componentes;
|
|
73
|
+
- publica `non_coverage` diciendo **qué eje no pudo unirse y por qué** — un endpoint que
|
|
74
|
+
`posture` ve y `pr-impact` no es una intersección que no se puede computar, no una
|
|
75
|
+
intersección vacía;
|
|
76
|
+
- **tres o cuatro intersecciones nombradas**, nunca un lenguaje de consulta. Un lenguaje de
|
|
77
|
+
consulta devuelve al cliente a su `jq` con más pasos intermedios.
|
|
78
|
+
|
|
79
|
+
El argumento comercial del memo se acepta entero y es el mejor de los tres memos recibidos:
|
|
80
|
+
un listado de hallazgos es un *commodity* y se compara por número; una intersección de
|
|
81
|
+
cuatro autoridades es una **conclusión**, y las conclusiones no se comparan por número.
|
|
82
|
+
|
|
83
|
+
### Contratos de arquitectura — dos reglas, no un producto
|
|
84
|
+
|
|
85
|
+
De los cinco contratos que propone el memo, dos valen, uno vale y va primero, y dos no:
|
|
86
|
+
|
|
87
|
+
| Contrato propuesto | Veredicto |
|
|
88
|
+
|---|---|
|
|
89
|
+
| `max_unauthenticated_routes: 17` | **Sí, y primero.** Es un trinquete, cuesta casi nada sobre el censo que `--init` ya calcula, y es el único de la lista que se vende solo |
|
|
90
|
+
| `layer_may_not_call(controller → repository)` | **Sí.** Es lo que un usuario de ArchUnit escribe a mano y lo que necesita el grafo resuelto que sólo este build tiene |
|
|
91
|
+
| `module_may_not_depend_on(billing → shipping)` | **Sí**, mismo argumento |
|
|
92
|
+
| `no_new_unauthenticated_route` | Es el trinquete anterior con otro nombre |
|
|
93
|
+
| `no_transactional_outside(service)` | El modelo tx existe, pero es el que menos comprador nombrado tiene. Va detrás |
|
|
94
|
+
|
|
95
|
+
**Y no se construye un DSL de reglas ni un ecosistema de plugins.** El memo cita «grep
|
|
96
|
+
creció por las reglas de la comunidad» como virtud a imitar; para este producto es la
|
|
97
|
+
trampa: reglas de terceros rompen «una autoridad por hecho», que es el diferencial entero.
|
|
98
|
+
|
|
99
|
+
El censo que `--init` ya imprime y no usa (`contract_init.py:425`, *«Endpoints seen: 19 ·
|
|
100
|
+
types seen: 41»*) es exactamente el insumo del trinquete. Ahí el memo acierta de pleno.
|
|
101
|
+
|
|
102
|
+
### `fleet` — la lectura comercial es correcta, la precondición no
|
|
103
|
+
|
|
104
|
+
El instinto es correcto y el argumento de precio también: el comprador real de Java/Spring
|
|
105
|
+
tiene 40 microservicios, no un monolito, y la pregunta que hace — *«¿cuántas rutas sin
|
|
106
|
+
autenticar tiene mi organización, y cuáles cambiaron esta semana?»* — hoy no tiene comando.
|
|
107
|
+
Pasar de precio por desarrollador a licencia de sitio es la diferencia entre una suscripción
|
|
108
|
+
y un contrato anual.
|
|
109
|
+
|
|
110
|
+
Lo que no es cierto es que la precondición sea reescribir la caché. Las precondiciones
|
|
111
|
+
reales son tres, y ninguna es de motor:
|
|
112
|
+
|
|
113
|
+
1. identidad por repositorio y contrato de *rollup* — la misma forma que `pack` ya tiene;
|
|
114
|
+
2. `non_coverage` **por repositorio**, porque una flota donde un repositorio no se pudo
|
|
115
|
+
analizar y el total no lo dice es exactamente la falsedad confiada que este producto
|
|
116
|
+
existe para no cometer;
|
|
117
|
+
3. un documento de dimensionado con la ley ya medida (~500 MB de store por repositorio de
|
|
118
|
+
24 000 ficheros) y la cobertura por repositorio que `cache status` publica desde `5.8.5`.
|
|
119
|
+
|
|
120
|
+
`fleet` es orquestación sobre N subprocesos. Es la misma forma que `pack`, un nivel arriba —
|
|
121
|
+
que es justo lo que el memo dice, con la precondición cambiada.
|
|
122
|
+
|
|
123
|
+
## 4. Lo que el memo no vio
|
|
124
|
+
|
|
125
|
+
Cinco puntos. El primero es, en mi lectura, más grave que cualquier cosa de su propia lista.
|
|
126
|
+
|
|
127
|
+
**1 · El eje de licencia contradice al comprador que el memo identifica correctamente.**
|
|
128
|
+
`is_large_repo()` cuenta ficheros Java **por repositorio** contra
|
|
129
|
+
`_FREE_REPO_JAVA_FILE_LIMIT = 500` (`license.py:121`, `:521`). Una organización de 40
|
|
130
|
+
microservicios de 300 ficheros cada uno **paga cero**: ningún repositorio cruza el umbral,
|
|
131
|
+
y el único eje de automatización que existe es la cuota de `delta`. El comprador que el memo
|
|
132
|
+
describe bien — el que tiene flota y necesita defendibilidad — **no es cobrable hoy**. Es el
|
|
133
|
+
mayor defecto comercial del producto y no está en el informe. `fleet` no es sólo el techo del
|
|
134
|
+
precio: es el **suelo**. Filas `P-13` en el ledger y `S-27` en la cola.
|
|
135
|
+
|
|
136
|
+
**2 · No hay tags, y por eso su riesgo de cadencia está mal ordenado.** El problema no es
|
|
137
|
+
publicar cuatro veces al día; es que ninguna de esas publicaciones tiene identidad en git.
|
|
138
|
+
Un canal `stable` mensual sobre un repositorio sin un solo tag no resuelve nada: fija una
|
|
139
|
+
versión que nadie puede nombrar. `build_commit` ya envía dentro del wheel (`AUD-597-X01`,
|
|
140
|
+
`354338b`); el tag no. Se arregla el tag **antes** de inventar canales.
|
|
141
|
+
|
|
142
|
+
**3 · Riesgo de publicar el ledger que el memo no evaluó.** `docs/DEFECT-LEDGER.md` lleva
|
|
143
|
+
rutas absolutas de la máquina del mantenedor, nombres de repositorios de terceros usados
|
|
144
|
+
como sujetos de evaluación, y autocrítica a un nivel de detalle que un comprador puede leer
|
|
145
|
+
como inestabilidad en vez de como rigor. Publicar el crudo filtra e insinúa que esos
|
|
146
|
+
proyectos fueron auditados. Lo que se publica es una **proyección generada**: filas abiertas
|
|
147
|
+
y cerradas por versión, mediana de días hasta el cierre, y las declinadas con su motivo.
|
|
148
|
+
Cifras, no prosa. Fila `P-14`.
|
|
149
|
+
|
|
150
|
+
**4 · `enrich` debe ser gratis para siempre.** El memo acierta en que es la mejor cuña del
|
|
151
|
+
catálogo: convierte a un competidor en entrada, no sustituye nada y hace que la herramienta
|
|
152
|
+
que el cliente ya paga valga más. Una cuña de pago no es una cuña. Hoy está en
|
|
153
|
+
`experimental` porque ninguna ronda de campo lo ha ejercido de extremo a extremo — eso es
|
|
154
|
+
una fila de validación, no una razón para cobrarlo.
|
|
155
|
+
|
|
156
|
+
**5 · La superficie de 41 comandos de primer nivel no es un problema de ingeniería.** La
|
|
157
|
+
queja del memo (*«`enrich` es la orden nº 40 de una lista»*) se disuelve documentando la
|
|
158
|
+
jerarquía que ya existe: **los packs son el producto, los comandos son el SDK**. No hace
|
|
159
|
+
falta retirar nada; hace falta decir cuál de las dos superficies se compra.
|
|
160
|
+
|
|
161
|
+
## 5. Lo que el memo acierta y conviene no diluir
|
|
162
|
+
|
|
163
|
+
Dos cosas, y ambas se aceptan sin recorte.
|
|
164
|
+
|
|
165
|
+
**El nicho está mejor descrito en este memo que en la documentación propia.** «Contabilidad
|
|
166
|
+
epistémica sobre un grafo de Spring» nombra lo que el producto hace mejor que nadie y ya
|
|
167
|
+
ejecuta: unidad, población, base, techo y no-cobertura en cada cifra. Y define al comprador
|
|
168
|
+
mejor que la segmentación actual: no es quien quiere más hallazgos — ése compra Snyk — sino
|
|
169
|
+
**quien tiene que defender una decisión ante alguien**. Los cuatro compradores que enumera
|
|
170
|
+
(arquitecto justificando una migración, lead aprobando un PR de riesgo, consultor entregando
|
|
171
|
+
una auditoría, agente que no puede inventar) pagan por defendibilidad, no por cobertura.
|
|
172
|
+
|
|
173
|
+
**La velocidad de remediación medida es material comercial y hoy vive en un `.md`.** Veinte
|
|
174
|
+
filas cerradas y verificadas en campo en veinticuatro horas, con mecanismo en fuente por
|
|
175
|
+
fila y dos rechazadas con su medición y su precio. La objeción número uno a un producto
|
|
176
|
+
propietario de un solo autor es *«¿y si desaparece?»*, y la respuesta más dura no es una
|
|
177
|
+
promesa de SLA: son las cifras del propio historial. Convierte el mayor riesgo percibido en
|
|
178
|
+
la prueba más fuerte — con la redacción de §4.3.
|
|
179
|
+
|
|
180
|
+
## 6. Orden de ejecución
|
|
181
|
+
|
|
182
|
+
Difiere del que propone el memo en el segundo puesto, y la diferencia es la corrección de §1.
|
|
183
|
+
|
|
184
|
+
1. **`intersections`** (`S-23`) — coincide con el memo. Es la semana mejor invertida y lo
|
|
185
|
+
único de la lista que ningún competidor puede copiar sin reconstruir el IR.
|
|
186
|
+
2. **Eje de licencia (`S-27`) y `fleet` (`S-18`)** — no «la caché». Es a la vez el techo y el
|
|
187
|
+
suelo del precio, y hoy el comprador correcto sale gratis.
|
|
188
|
+
3. **Tag de release** (horas) → **SARIF de salida** (`S-28`) y **página del ledger generada**
|
|
189
|
+
(`S-29`) en el mismo incremento. Ambos baratos, ambos atacan objeciones de compra
|
|
190
|
+
distintas.
|
|
191
|
+
|
|
192
|
+
Y la cuarta que el memo pone aparte — medir tokens por tarea de agente con y sin ASK — se
|
|
193
|
+
acepta con una condición: arnés reproducible en el repositorio y la regla de benchmarks
|
|
194
|
+
honestos aplicada, mirando «qué no funcionó» antes de enseñar nada. Un número sobre agentes
|
|
195
|
+
que no se puede reproducir se vuelve en contra en la primera demo.
|