techrevati-runtime 0.4.0__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.github/workflows/ci.yml +40 -15
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.github/workflows/codeql.yml +2 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.github/workflows/docs.yml +8 -8
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.github/workflows/release.yml +11 -11
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.pre-commit-config.yaml +2 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/CHANGELOG.md +97 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/PKG-INFO +18 -17
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/README.md +1 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/orchestrator.md +3 -0
- techrevati_runtime-0.5.0/docs/api/otel.md +64 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/changelog.md +97 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/production-readiness.md +1 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/remote-ci-validation.md +3 -3
- techrevati_runtime-0.5.0/docs/eu-ai-act/audit-log.md +146 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/eu-ai-act/conformity-checklist.md +5 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/eu-ai-act/cybersecurity.md +18 -3
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/eu-ai-act/human-oversight.md +31 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/eu-ai-act/incident-reporting.md +5 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/index.md +1 -1
- techrevati_runtime-0.5.0/docs/migrating-from-0.4.x.md +140 -0
- techrevati_runtime-0.5.0/docs/open-items.md +25 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/agent-events.md +7 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/circuit-breaker.md +13 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/durability-postgres.md +15 -5
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/durability.md +38 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/governance.md +24 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/hooks.md +8 -3
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/lifecycle.md +6 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/mcp.md +20 -8
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/memory.md +12 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/orchestrator.md +68 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/permissions.md +17 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/pilot-profile.md +2 -4
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/policy.md +5 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/rate-limiting.md +18 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/retry.md +6 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/routing.md +3 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/streaming.md +4 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/typed-outputs.md +5 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/usage-tracking.md +5 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/mkdocs.yml +2 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/pyproject.toml +17 -16
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_public_api.py +5 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_python_support.py +1 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_remote_ci_validation.py +4 -4
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/__init__.py +10 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/_internal.py +56 -10
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/agent_events.py +101 -5
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/agent_lifecycle.py +20 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/checkpoint.py +102 -96
- techrevati_runtime-0.5.0/src/techrevati/runtime/circuit_breaker.py +389 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/compliance/__init__.py +4 -0
- techrevati_runtime-0.5.0/src/techrevati/runtime/compliance/audit_log.py +1207 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/compliance/cybersecurity.py +86 -24
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/compliance/human_oversight.py +241 -36
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/compliance/incidents.py +51 -13
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/compliance/kit.py +34 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/data/pricing.json +3 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/governance.py +110 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/guardrails.py +168 -34
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/hooks.py +52 -9
- techrevati_runtime-0.5.0/src/techrevati/runtime/mcp.py +272 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/memory.py +59 -23
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/orchestrator.py +1072 -228
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/otel.py +338 -45
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/output_spec.py +25 -5
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/permissions.py +127 -28
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/persistence.py +23 -19
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/policy_engine.py +85 -12
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/rate_limit.py +145 -27
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/retry_policy.py +58 -25
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/routing.py +5 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/scheduler.py +5 -3
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/streaming.py +14 -6
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/usage_tracking.py +91 -45
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/compliance/test_kit_integration.py +1 -1
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_async_orchestrator.py +6 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_checkpoint.py +5 -6
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_guardrails.py +6 -2
- techrevati_runtime-0.5.0/tests/test_mcp_real.py +234 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_orchestrator.py +6 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_permissions.py +2 -2
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_property_retry_policy.py +34 -4
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_python_support.py +3 -2
- techrevati_runtime-0.5.0/tests/test_regress_compliance.py +2230 -0
- techrevati_runtime-0.5.0/tests/test_regress_integrations.py +666 -0
- techrevati_runtime-0.5.0/tests/test_regress_orchestrator.py +1235 -0
- techrevati_runtime-0.5.0/tests/test_regress_resilience.py +1151 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_remote_ci_validation.py +5 -5
- techrevati_runtime-0.4.0/docs/api/otel.md +0 -33
- techrevati_runtime-0.4.0/docs/eu-ai-act/audit-log.md +0 -62
- techrevati_runtime-0.4.0/src/techrevati/runtime/circuit_breaker.py +0 -315
- techrevati_runtime-0.4.0/src/techrevati/runtime/compliance/audit_log.py +0 -531
- techrevati_runtime-0.4.0/src/techrevati/runtime/mcp.py +0 -165
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.github/codeql/codeql-config.yml +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.github/dependabot.yml +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/.gitignore +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/CODEOWNERS +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/CONTRIBUTING.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/LICENSE +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/SECURITY.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/agent_events.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/agent_lifecycle.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/checkpoint.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/circuit_breaker.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/governance.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/guardrails.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/handoffs.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/hooks.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/mcp.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/memory.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/output_spec.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/permissions.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/persistence.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/pilot.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/policy_engine.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/quality_gate.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/rate_limit.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/retry_policy.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/routing.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/scheduler.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/sinks.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/streaming.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/api/usage_tracking.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/final-diff-review.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/guard-calibration.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/index.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/pilot-dry-run.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/pilot-evidence-template.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/pilot-execution.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/pilot-operations-runbook.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/private-rc-publication.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/rc-inventory.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/rc-readiness-summary.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/rc-review-handoff.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/rollback-execution.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/rollback-proof-checklist.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/security-review.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/stable-promotion.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/staging-manifest.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/consuming-as-a-library.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/eu-ai-act/index.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/eu-ai-act/risk-management.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/eu-ai-act/transparency.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/getting-started.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/migrating-from-0.0.x.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/migrating-from-0.1.x.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/migrating-from-0.3.x.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/durability-redis.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/patterns/quality-gate.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/styles/runtime.css +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/tutorials/end-to-end.md +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs_theme/404.html +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs_theme/main.html +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/examples/durable_agent.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/examples/parallel_tools.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/examples/pricing.json +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/examples/tiny_agent.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_changelog.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_ci_guardrails.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_dependency_vulnerabilities.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_distribution.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_docs_public_api.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_docs_publication.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_final_diff_review.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_guard_calibration.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_maintenance.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_module_coverage.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_operations_runbook.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_package_policy.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_pilot_dry_run.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_pilot_evidence.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_pilot_execution.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_precommit_config.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_private_rc_publication.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_public_branding.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_rc_readiness.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_rc_review_handoff.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_release_evidence.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_release_tag.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_release_workflow.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_repo_hygiene.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_rollback_execution.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_secret_leaks.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_security_patterns.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_security_review.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_source_hygiene.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_stable_promotion.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_staging_manifest.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_toolchain_pins.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_version_consistency.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_workflow_hardening.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/check_workflow_pinning.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/install_toolchain.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/mkdocs_hooks/remove_generator_meta.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/scripts/release_preflight.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/__init__.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/_classify.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/compliance/risk_registry.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/compliance/transparency.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/handoffs.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/pilot.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/py.typed +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/quality_gate.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/src/techrevati/runtime/sinks.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/__init__.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/compliance/test_audit_log.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/compliance/test_audit_session_wiring.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/compliance/test_cybersecurity.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/compliance/test_human_oversight.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/compliance/test_incidents.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/compliance/test_risk_registry.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/compliance/test_transparency.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/conftest.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_agent_events.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_agent_lifecycle.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_async_circuit_breaker.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_async_guardrails.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_checkpoint_steps.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_ci_guardrails.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_circuit_breaker.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_classify.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_dependency_vulnerabilities.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_distribution.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_docs_public_api.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_docs_publication.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_examples.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_final_diff_review.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_governance.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_governance_events.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_governance_integration.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_guard_calibration.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_handoffs.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_hooks.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_maintenance.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_max_iterations.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_mcp.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_memory.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_operations_runbook.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_otel.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_otel_atexit_cleanup.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_otel_genai_messages.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_otel_nesting.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_output_spec.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_package_metadata.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_package_policy.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_pattern_and_prompt_injection_guardrails.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_pilot.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_pilot_dry_run.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_pilot_evidence.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_pilot_execution.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_policy_engine.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_precommit_config.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_private_rc_publication.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_property_circuit_breaker.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_public_api.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_quality_gate.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_rate_limit.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_rc_readiness.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_rc_review_handoff.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_register_pricing_on_conflict.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_release_evidence.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_release_guards.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_release_workflow.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_repo_hygiene.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_retry_policy.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_rollback_execution.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_routing.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_s0_regressions.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_s5_scheduler_persistence_async_policy.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_s5_usage_limits_and_caching.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_secret_leaks.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_security_patterns.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_security_review.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_sinks.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_source_hygiene.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_stable_promotion.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_staging_manifest.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_step_retries.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_streaming.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_taskgroup_parallel_tools.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_usage_tracking.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_workflow_hardening.py +0 -0
- {techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/tests/test_workflow_pinning.py +0 -0
|
@@ -21,17 +21,17 @@ jobs:
|
|
|
21
21
|
strategy:
|
|
22
22
|
fail-fast: false
|
|
23
23
|
matrix:
|
|
24
|
-
python-version: ['3.11', '3.12', '3.13']
|
|
24
|
+
python-version: ['3.11', '3.12', '3.13', '3.14']
|
|
25
25
|
|
|
26
26
|
steps:
|
|
27
|
-
# actions/checkout
|
|
28
|
-
- uses: actions/checkout@
|
|
27
|
+
# actions/checkout v7
|
|
28
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
29
29
|
with:
|
|
30
30
|
persist-credentials: false
|
|
31
31
|
|
|
32
32
|
- name: Set up Python ${{ matrix.python-version }}
|
|
33
|
-
# actions/setup-python
|
|
34
|
-
uses: actions/setup-python@
|
|
33
|
+
# actions/setup-python v7
|
|
34
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0
|
|
35
35
|
with:
|
|
36
36
|
python-version: ${{ matrix.python-version }}
|
|
37
37
|
cache: pip
|
|
@@ -185,17 +185,17 @@ jobs:
|
|
|
185
185
|
strategy:
|
|
186
186
|
fail-fast: false
|
|
187
187
|
matrix:
|
|
188
|
-
python-version: ['3.11', '3.12', '3.13']
|
|
188
|
+
python-version: ['3.11', '3.12', '3.13', '3.14']
|
|
189
189
|
|
|
190
190
|
steps:
|
|
191
|
-
# actions/checkout
|
|
192
|
-
- uses: actions/checkout@
|
|
191
|
+
# actions/checkout v7
|
|
192
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
193
193
|
with:
|
|
194
194
|
persist-credentials: false
|
|
195
195
|
|
|
196
196
|
- name: Set up Python ${{ matrix.python-version }}
|
|
197
|
-
# actions/setup-python
|
|
198
|
-
uses: actions/setup-python@
|
|
197
|
+
# actions/setup-python v7
|
|
198
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0
|
|
199
199
|
with:
|
|
200
200
|
python-version: ${{ matrix.python-version }}
|
|
201
201
|
|
|
@@ -223,6 +223,31 @@ jobs:
|
|
|
223
223
|
print(f'techrevati-runtime {runtime.__version__}')
|
|
224
224
|
"
|
|
225
225
|
|
|
226
|
+
mcp-sdk-2:
|
|
227
|
+
name: MCP SDK 2.x adapter
|
|
228
|
+
runs-on: ubuntu-latest
|
|
229
|
+
timeout-minutes: 10
|
|
230
|
+
|
|
231
|
+
steps:
|
|
232
|
+
# actions/checkout v7
|
|
233
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
234
|
+
with:
|
|
235
|
+
persist-credentials: false
|
|
236
|
+
|
|
237
|
+
- name: Set up Python
|
|
238
|
+
# actions/setup-python v7
|
|
239
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0
|
|
240
|
+
with:
|
|
241
|
+
python-version: '3.13'
|
|
242
|
+
|
|
243
|
+
- name: Test the adapter against a real 2.x SDK
|
|
244
|
+
# The dev extra pins 1.x, so without this job the 2.x branch of the
|
|
245
|
+
# adapter would have no coverage.
|
|
246
|
+
run: |
|
|
247
|
+
python -m pip install --upgrade pip
|
|
248
|
+
pip install -e . "mcp>=2,<3" pytest==9.2.0 pytest-asyncio==1.4.1.post1
|
|
249
|
+
python -m pytest tests/test_mcp_real.py tests/test_mcp.py -p no:cacheprovider
|
|
250
|
+
|
|
226
251
|
zero-deps-smoke:
|
|
227
252
|
name: Zero-deps smoke on Python ${{ matrix.python-version }}
|
|
228
253
|
runs-on: ubuntu-latest
|
|
@@ -231,17 +256,17 @@ jobs:
|
|
|
231
256
|
strategy:
|
|
232
257
|
fail-fast: false
|
|
233
258
|
matrix:
|
|
234
|
-
python-version: ['3.11', '3.12', '3.13']
|
|
259
|
+
python-version: ['3.11', '3.12', '3.13', '3.14']
|
|
235
260
|
|
|
236
261
|
steps:
|
|
237
|
-
# actions/checkout
|
|
238
|
-
- uses: actions/checkout@
|
|
262
|
+
# actions/checkout v7
|
|
263
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
239
264
|
with:
|
|
240
265
|
persist-credentials: false
|
|
241
266
|
|
|
242
267
|
- name: Set up Python ${{ matrix.python-version }}
|
|
243
|
-
# actions/setup-python
|
|
244
|
-
uses: actions/setup-python@
|
|
268
|
+
# actions/setup-python v7
|
|
269
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0
|
|
245
270
|
with:
|
|
246
271
|
python-version: ${{ matrix.python-version }}
|
|
247
272
|
|
|
@@ -30,8 +30,8 @@ jobs:
|
|
|
30
30
|
language: [python]
|
|
31
31
|
|
|
32
32
|
steps:
|
|
33
|
-
# actions/checkout
|
|
34
|
-
- uses: actions/checkout@
|
|
33
|
+
# actions/checkout v7
|
|
34
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
35
35
|
with:
|
|
36
36
|
persist-credentials: false
|
|
37
37
|
|
|
@@ -20,14 +20,14 @@ jobs:
|
|
|
20
20
|
timeout-minutes: 10
|
|
21
21
|
|
|
22
22
|
steps:
|
|
23
|
-
# actions/checkout
|
|
24
|
-
- uses: actions/checkout@
|
|
23
|
+
# actions/checkout v7
|
|
24
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
25
25
|
with:
|
|
26
26
|
persist-credentials: false
|
|
27
27
|
|
|
28
28
|
- name: Set up Python
|
|
29
|
-
# actions/setup-python
|
|
30
|
-
uses: actions/setup-python@
|
|
29
|
+
# actions/setup-python v7
|
|
30
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0
|
|
31
31
|
with:
|
|
32
32
|
python-version: '3.11'
|
|
33
33
|
|
|
@@ -55,14 +55,14 @@ jobs:
|
|
|
55
55
|
contents: write
|
|
56
56
|
|
|
57
57
|
steps:
|
|
58
|
-
# actions/checkout
|
|
59
|
-
- uses: actions/checkout@
|
|
58
|
+
# actions/checkout v7
|
|
59
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
60
60
|
with:
|
|
61
61
|
persist-credentials: false
|
|
62
62
|
|
|
63
63
|
- name: Set up Python
|
|
64
|
-
# actions/setup-python
|
|
65
|
-
uses: actions/setup-python@
|
|
64
|
+
# actions/setup-python v7
|
|
65
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0
|
|
66
66
|
with:
|
|
67
67
|
python-version: '3.11'
|
|
68
68
|
|
|
@@ -24,17 +24,17 @@ jobs:
|
|
|
24
24
|
strategy:
|
|
25
25
|
fail-fast: false
|
|
26
26
|
matrix:
|
|
27
|
-
python-version: ['3.11', '3.12', '3.13']
|
|
27
|
+
python-version: ['3.11', '3.12', '3.13', '3.14']
|
|
28
28
|
|
|
29
29
|
steps:
|
|
30
|
-
# actions/checkout
|
|
31
|
-
- uses: actions/checkout@
|
|
30
|
+
# actions/checkout v7
|
|
31
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
32
32
|
with:
|
|
33
33
|
persist-credentials: false
|
|
34
34
|
|
|
35
35
|
- name: Set up Python ${{ matrix.python-version }}
|
|
36
|
-
# actions/setup-python
|
|
37
|
-
uses: actions/setup-python@
|
|
36
|
+
# actions/setup-python v7
|
|
37
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0
|
|
38
38
|
with:
|
|
39
39
|
python-version: ${{ matrix.python-version }}
|
|
40
40
|
cache: pip
|
|
@@ -192,14 +192,14 @@ jobs:
|
|
|
192
192
|
id-token: write
|
|
193
193
|
|
|
194
194
|
steps:
|
|
195
|
-
# actions/checkout
|
|
196
|
-
- uses: actions/checkout@
|
|
195
|
+
# actions/checkout v7
|
|
196
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
|
|
197
197
|
with:
|
|
198
198
|
persist-credentials: false
|
|
199
199
|
|
|
200
200
|
- name: Set up Python
|
|
201
|
-
# actions/setup-python
|
|
202
|
-
uses: actions/setup-python@
|
|
201
|
+
# actions/setup-python v7
|
|
202
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0
|
|
203
203
|
with:
|
|
204
204
|
python-version: '3.11'
|
|
205
205
|
|
|
@@ -263,9 +263,9 @@ jobs:
|
|
|
263
263
|
run: python scripts/check_release_evidence.py dist
|
|
264
264
|
|
|
265
265
|
- name: Create release
|
|
266
|
-
# softprops/action-gh-release
|
|
266
|
+
# softprops/action-gh-release v3.0.4 — the durable evidence record is
|
|
267
267
|
# created before any index push, so a publish failure cannot lose it.
|
|
268
|
-
uses: softprops/action-gh-release@
|
|
268
|
+
uses: softprops/action-gh-release@8a0cd651e5b2365bd640854a3fa5dfc70e4875f3
|
|
269
269
|
with:
|
|
270
270
|
prerelease: ${{ contains(github.ref_name, 'rc') || contains(github.ref_name, 'dev') }}
|
|
271
271
|
generate_release_notes: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
repos:
|
|
2
2
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
-
rev: v0.
|
|
3
|
+
rev: v0.17.4
|
|
4
4
|
hooks:
|
|
5
5
|
- id: ruff
|
|
6
6
|
args: [--fix]
|
|
@@ -16,7 +16,7 @@ repos:
|
|
|
16
16
|
- id: check-merge-conflict
|
|
17
17
|
|
|
18
18
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
19
|
-
rev: v2.1
|
|
19
|
+
rev: v2.4.1
|
|
20
20
|
hooks:
|
|
21
21
|
- id: mypy
|
|
22
22
|
additional_dependencies: []
|
|
@@ -2,6 +2,103 @@
|
|
|
2
2
|
|
|
3
3
|
Author: Techrevati doo
|
|
4
4
|
|
|
5
|
+
## 0.5.0 - 2026-11-06
|
|
6
|
+
|
|
7
|
+
The hardening line: every defect below was reproduced by an executed proof before
|
|
8
|
+
it was fixed. See [Migrating from 0.4.x](migrating-from-0.4.x.md) for what changes
|
|
9
|
+
for existing callers.
|
|
10
|
+
|
|
11
|
+
Added:
|
|
12
|
+
|
|
13
|
+
- `run_tool` / `arun_tool` accept `args`, `timeout` (`ToolTimeoutError`), and
|
|
14
|
+
`idempotency_key`, which replays a completed tool call instead of repeating its
|
|
15
|
+
side effect (at-least-once).
|
|
16
|
+
- `MaxRepeatedToolCallsLimit` stops an agent repeating the same tool call.
|
|
17
|
+
- `run_turn_with_fallback` / `arun_turn_with_fallback` drive `provider_router`.
|
|
18
|
+
- `arun_turn_stream(idempotency_key=...)`.
|
|
19
|
+
- `session(handoff=...)` / `asession(handoff=...)` run on the worker a `Handoff`
|
|
20
|
+
reserved.
|
|
21
|
+
- `agent.turn.completed` / `agent.turn.failed` events, `chat` spans,
|
|
22
|
+
`OpenTelemetryMetricsSink`, and the `gen_ai.client.inference.usage.*` counters.
|
|
23
|
+
- MCP Python SDK 2.x support alongside 1.x, plus a per-call `timeout`.
|
|
24
|
+
- Audit log `tip()`, `ChainTip`, and `verify_chain(expected_tip=...)`.
|
|
25
|
+
- `AgentRegistry.evict_terminal()`, `TokenBucket.debit()`.
|
|
26
|
+
- Audit purge markers, signed under the sink's key.
|
|
27
|
+
- `AgentSession(audit_fail_closed=True)` refuses further actions with
|
|
28
|
+
`AuditWriteError` once the audit log cannot be written.
|
|
29
|
+
- Python 3.14 support.
|
|
30
|
+
|
|
31
|
+
Fixed, security and audit integrity:
|
|
32
|
+
|
|
33
|
+
- Two audit writers on one SQLite file could wedge it and silently lose every later
|
|
34
|
+
record. Appends are now atomic and writers serialize into one chain.
|
|
35
|
+
- Quadratic regular expressions in `PromptInjectionGuardrail` and `RedactPIIHook` let
|
|
36
|
+
untrusted content stall the event loop.
|
|
37
|
+
- Prompt-injection and pattern guardrails were bypassed by any structured output,
|
|
38
|
+
because `str()` escaped the newlines their patterns match on.
|
|
39
|
+
- A role name differing by case or an invisible character bypassed its deny list.
|
|
40
|
+
- Async policy conditions always matched under `And` / `Or` and in sync `evaluate`.
|
|
41
|
+
- The human-oversight gate accepted replayed, stale, spoofed, and invalid decisions,
|
|
42
|
+
and did not enforce its timeout on a hanging queue.
|
|
43
|
+
- The oversight trail omitted the reason and action, and recorded nothing if a queue
|
|
44
|
+
raised. The compliance kit's log now receives oversight events.
|
|
45
|
+
- Unserializable event content dropped audit records while the action proceeded, and
|
|
46
|
+
could suppress incident notification. Hashes of existing records are unchanged.
|
|
47
|
+
- A deleted audit tail was not detected on a live sink.
|
|
48
|
+
- Tampered rows crashed verification rather than reporting invalid. CSV export did
|
|
49
|
+
not escape timestamps. Purge compared timestamp strings across UTC offsets.
|
|
50
|
+
- PII redaction skipped tuples, sets, dict keys, and bytes, and missed standard base64
|
|
51
|
+
keys and JWT headers. Combined patterns lost backreferences.
|
|
52
|
+
|
|
53
|
+
Fixed, accounting and durability:
|
|
54
|
+
|
|
55
|
+
- A turn that crossed a budget or usage limit, or whose `after_model` hook failed, was
|
|
56
|
+
missing from the checkpoint and from governance cost, so the retry paid again and
|
|
57
|
+
`MaxBudgetLimit` could never trip.
|
|
58
|
+
- A replayed turn did not restore its spend, so a restart reset the budget.
|
|
59
|
+
- Usage above a rate-limit bucket's capacity raised after the model call and lost the
|
|
60
|
+
turn.
|
|
61
|
+
- Usage passed without `model=` was discarded, which disabled `UsageLimits`.
|
|
62
|
+
- A failed SQLite write left a transaction open: every later write failed and reads
|
|
63
|
+
went stale until restart (`SqliteSaver`, `SqliteEventSink`, `SqliteUsageSink`).
|
|
64
|
+
- Concurrent cold starts of a new SQLite file crashed with `IntegrityError`.
|
|
65
|
+
- JSON-valid state with a lone surrogate failed on `SqliteSaver` and aborted the turn.
|
|
66
|
+
- Pricing prefixes had no name boundary: `gpt-4` priced `gpt-4o-mini` and suppressed
|
|
67
|
+
the missing-price warning.
|
|
68
|
+
- Cache writes could cost $0 on a tiered model. Float sums could falsely exceed a
|
|
69
|
+
budget at its exact boundary.
|
|
70
|
+
|
|
71
|
+
Fixed, runtime behaviour:
|
|
72
|
+
|
|
73
|
+
- `arun_turn_stream(timeout=)` cancelled the consumer's task, even after the consumer
|
|
74
|
+
had left the stream, because the timeout scope spanned a `yield`.
|
|
75
|
+
- A hung half-open probe blocked the circuit indefinitely, a stale probe result could
|
|
76
|
+
close it, and it could stay half-open under sustained load despite successes.
|
|
77
|
+
- Context-overflow errors containing a token count such as `14290` were classified as
|
|
78
|
+
rate limits, and digits inside identifiers as HTTP statuses.
|
|
79
|
+
- Duplicate names in a router's `exclude` made every router return `None`.
|
|
80
|
+
- A timed-out `pause_for_input` stranded the worker and made session exit raise.
|
|
81
|
+
- `run_turn(timeout=)` lost context variables, including tracing context, in its
|
|
82
|
+
worker thread. A `TimeoutError` raised by user code was reported as the deadline.
|
|
83
|
+
- Compaction identified messages by object identity, so a reused instance defeated
|
|
84
|
+
both limits, and it could delete the newest message.
|
|
85
|
+
- `JsonOutputSpec` leaked `RecursionError` and `ValueError`, and accepted `NaN`.
|
|
86
|
+
- Orphan spans were lost under a batch processor at exit. `OpenTelemetrySink.shutdown()`
|
|
87
|
+
closes them explicitly.
|
|
88
|
+
- `execute_tool` spans lacked `gen_ai.tool.name`, tool spans stayed open after a
|
|
89
|
+
post-guardrail block or cancellation, and cache tokens never reached metrics.
|
|
90
|
+
- Runtime exceptions did not survive `pickle` or `copy`.
|
|
91
|
+
- `mkdocs build` failed with current `pymdown-extensions`; `mkdocstrings` is updated.
|
|
92
|
+
|
|
93
|
+
Changed:
|
|
94
|
+
|
|
95
|
+
- **Breaking:** `default_allow_unknown_roles` now defaults to `False`, so a role with no
|
|
96
|
+
config is denied.
|
|
97
|
+
- A turn timeout now counts as a circuit-breaker failure, so a provider that hangs
|
|
98
|
+
opens the circuit.
|
|
99
|
+
- Toolchain updated (ruff 0.17, mypy 2.4, pytest 9.2, hypothesis, OpenTelemetry 1.45,
|
|
100
|
+
and pinned actions for checkout, setup-python, and the release publisher).
|
|
101
|
+
|
|
5
102
|
## 0.4.0 - 2026-06-20
|
|
6
103
|
|
|
7
104
|
The EU AI Act compliance line.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: techrevati-runtime
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Async-aware runtime primitives for multi-step LLM agent loops.
|
|
5
5
|
Author: Techrevati doo
|
|
6
6
|
License-Expression: MIT
|
|
@@ -13,33 +13,34 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
17
|
Classifier: Topic :: Software Development :: Libraries
|
|
17
18
|
Classifier: Typing :: Typed
|
|
18
19
|
Requires-Python: >=3.11
|
|
19
20
|
Provides-Extra: audit
|
|
20
|
-
Requires-Dist: pip-audit==2.10.
|
|
21
|
+
Requires-Dist: pip-audit==2.10.1; extra == 'audit'
|
|
21
22
|
Provides-Extra: build
|
|
22
23
|
Requires-Dist: build==1.5.0; extra == 'build'
|
|
23
24
|
Requires-Dist: twine==6.2.0; extra == 'build'
|
|
24
25
|
Provides-Extra: dev
|
|
25
|
-
Requires-Dist: hypothesis==6.
|
|
26
|
-
Requires-Dist: mcp==1.
|
|
27
|
-
Requires-Dist: mypy==2.1
|
|
28
|
-
Requires-Dist: opentelemetry-api==1.
|
|
29
|
-
Requires-Dist: opentelemetry-sdk==1.
|
|
30
|
-
Requires-Dist: opentelemetry-semantic-conventions==0.
|
|
31
|
-
Requires-Dist: pytest-asyncio==1.4.
|
|
26
|
+
Requires-Dist: hypothesis==6.170.15; extra == 'dev'
|
|
27
|
+
Requires-Dist: mcp==1.30.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: mypy==2.4.1; extra == 'dev'
|
|
29
|
+
Requires-Dist: opentelemetry-api==1.45.2; extra == 'dev'
|
|
30
|
+
Requires-Dist: opentelemetry-sdk==1.45.2; extra == 'dev'
|
|
31
|
+
Requires-Dist: opentelemetry-semantic-conventions==0.66b2; extra == 'dev'
|
|
32
|
+
Requires-Dist: pytest-asyncio==1.4.1.post1; extra == 'dev'
|
|
32
33
|
Requires-Dist: pytest-cov==7.1.0; extra == 'dev'
|
|
33
|
-
Requires-Dist: pytest-randomly==
|
|
34
|
-
Requires-Dist: pytest==9.
|
|
35
|
-
Requires-Dist: ruff==0.
|
|
34
|
+
Requires-Dist: pytest-randomly==5.0.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: pytest==9.2.0; extra == 'dev'
|
|
36
|
+
Requires-Dist: ruff==0.17.4; extra == 'dev'
|
|
36
37
|
Provides-Extra: docs
|
|
37
38
|
Requires-Dist: mkdocs==1.6.1; extra == 'docs'
|
|
38
|
-
Requires-Dist: mkdocstrings-python==2.0.
|
|
39
|
-
Requires-Dist: mkdocstrings[python]==1.0.
|
|
40
|
-
Requires-Dist: ruff==0.
|
|
39
|
+
Requires-Dist: mkdocstrings-python==2.0.10; extra == 'docs'
|
|
40
|
+
Requires-Dist: mkdocstrings[python]==1.0.8; extra == 'docs'
|
|
41
|
+
Requires-Dist: ruff==0.17.4; extra == 'docs'
|
|
41
42
|
Provides-Extra: mcp
|
|
42
|
-
Requires-Dist: mcp<
|
|
43
|
+
Requires-Dist: mcp<3,>=1.10; extra == 'mcp'
|
|
43
44
|
Provides-Extra: otel
|
|
44
45
|
Requires-Dist: opentelemetry-api<2,>=1.27; extra == 'otel'
|
|
45
46
|
Requires-Dist: opentelemetry-sdk<2,>=1.27; extra == 'otel'
|
|
@@ -64,7 +65,7 @@ budget enforcement, role-based tool gating, guardrails, handoffs, policy
|
|
|
64
65
|
evaluation, checkpointing, rate limiting, streaming, hooks, and telemetry
|
|
65
66
|
integration.
|
|
66
67
|
|
|
67
|
-
The package is currently `0.
|
|
68
|
+
The package is currently `0.5.0`. The `0.x`
|
|
68
69
|
API surface is still unstable, so pin exact versions when you depend on a
|
|
69
70
|
specific behavior.
|
|
70
71
|
|
|
@@ -8,7 +8,7 @@ budget enforcement, role-based tool gating, guardrails, handoffs, policy
|
|
|
8
8
|
evaluation, checkpointing, rate limiting, streaming, hooks, and telemetry
|
|
9
9
|
integration.
|
|
10
10
|
|
|
11
|
-
The package is currently `0.
|
|
11
|
+
The package is currently `0.5.0`. The `0.x`
|
|
12
12
|
API surface is still unstable, so pin exact versions when you depend on a
|
|
13
13
|
specific behavior.
|
|
14
14
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Telemetry Integration
|
|
2
|
+
|
|
3
|
+
Requires `pip install 'techrevati-runtime[otel]'`.
|
|
4
|
+
|
|
5
|
+
`OpenTelemetrySink` keeps one parent span open for the agent or phase
|
|
6
|
+
lifecycle. Tool calls open child spans under that parent, and
|
|
7
|
+
tool-scoped failures close only the tool span. Terminal session
|
|
8
|
+
failures still close the parent span.
|
|
9
|
+
|
|
10
|
+
Event details are omitted from spans by default because callers may put prompt
|
|
11
|
+
fragments, tool arguments, or exception text into `AgentEvent.detail`. Use
|
|
12
|
+
`OpenTelemetrySink(include_event_detail=True)` only after detail values are
|
|
13
|
+
sanitized and telemetry retention is approved.
|
|
14
|
+
|
|
15
|
+
## GenAI semantic conventions
|
|
16
|
+
|
|
17
|
+
The sink emits OpenTelemetry GenAI semantic-convention signals:
|
|
18
|
+
|
|
19
|
+
- **Spans** carry `gen_ai.operation.name`, `gen_ai.provider.name`, and
|
|
20
|
+
`gen_ai.agent.name`. An `invoke_agent {role}` span nests under the open
|
|
21
|
+
`invoke_workflow` span of its phase, when there is one. Tool calls are
|
|
22
|
+
`execute_tool {tool}` children with `gen_ai.tool.name` (concurrent calls to the
|
|
23
|
+
same tool each get their own span via a per-key LIFO stack). Model turns are
|
|
24
|
+
`chat {model}` client spans backdated by the measured duration.
|
|
25
|
+
- **Token metrics** (`OpenTelemetryUsageSink`):
|
|
26
|
+
`gen_ai.client.inference.usage.input_tokens` (including cached tokens),
|
|
27
|
+
`.output_tokens`, `.cache_read.input_tokens` and `.cache_write.input_tokens`
|
|
28
|
+
counters, plus a `techrevati.cost.usd` counter (no standard GenAI cost metric
|
|
29
|
+
exists yet).
|
|
30
|
+
- **Legacy token metric**: the conventions have removed `gen_ai.client.token.usage`.
|
|
31
|
+
It stays on by default so existing dashboards keep working; turn it off with
|
|
32
|
+
`OpenTelemetryUsageSink(emit_legacy_token_metric=False)` once they read the
|
|
33
|
+
counters.
|
|
34
|
+
- **Duration metrics** (`OpenTelemetryMetricsSink`, an event sink):
|
|
35
|
+
`gen_ai.client.inference.duration` and `gen_ai.execute_tool.duration` histograms
|
|
36
|
+
in seconds, with `error.type` on failure. The conventions' bucket boundaries are
|
|
37
|
+
applied as an advisory on OpenTelemetry API versions that support it; older ones
|
|
38
|
+
use the SDK's default buckets.
|
|
39
|
+
- **Message bodies**: if a caller places `gen_ai.input.messages` /
|
|
40
|
+
`gen_ai.output.messages` in `AgentEvent.data`, they are emitted as span events
|
|
41
|
+
of the same name — but only when `include_event_detail=True`, since message
|
|
42
|
+
content is sensitive. The runtime does not own the model call, so it never
|
|
43
|
+
fabricates these; they appear only when the caller supplies them.
|
|
44
|
+
|
|
45
|
+
These conventions now live in the
|
|
46
|
+
[`semantic-conventions-genai`](https://github.com/open-telemetry/semantic-conventions-genai)
|
|
47
|
+
repository and are still marked *Development*, so names can change.
|
|
48
|
+
|
|
49
|
+
Two required attributes cannot be known exactly by the runtime:
|
|
50
|
+
|
|
51
|
+
- `gen_ai.provider.name`: the runtime does not make the model call. Pass the real
|
|
52
|
+
provider as `provider_name`; the default `techrevati` only marks the data's source.
|
|
53
|
+
- `gen_ai.token.modality`: always `unknown`, as the conventions require when
|
|
54
|
+
`UsageSnapshot` does not split tokens by modality.
|
|
55
|
+
|
|
56
|
+
## Process exit
|
|
57
|
+
|
|
58
|
+
Spans still open at normal interpreter exit are ended with
|
|
59
|
+
`error.type=abrupt_termination`. That hook does not run on a default SIGTERM,
|
|
60
|
+
`os._exit` or a hard crash, and a span ended there only reaches the exporter if the
|
|
61
|
+
`TracerProvider` shuts down afterwards, so create the provider before the first
|
|
62
|
+
sink. For SIGTERM, or a provider created later, call `sink.shutdown()` yourself.
|
|
63
|
+
|
|
64
|
+
::: techrevati.runtime.otel
|
|
@@ -2,6 +2,103 @@
|
|
|
2
2
|
|
|
3
3
|
Author: Techrevati doo
|
|
4
4
|
|
|
5
|
+
## 0.5.0 - 2026-11-06
|
|
6
|
+
|
|
7
|
+
The hardening line: every defect below was reproduced by an executed proof before
|
|
8
|
+
it was fixed. See [Migrating from 0.4.x](migrating-from-0.4.x.md) for what changes
|
|
9
|
+
for existing callers.
|
|
10
|
+
|
|
11
|
+
Added:
|
|
12
|
+
|
|
13
|
+
- `run_tool` / `arun_tool` accept `args`, `timeout` (`ToolTimeoutError`), and
|
|
14
|
+
`idempotency_key`, which replays a completed tool call instead of repeating its
|
|
15
|
+
side effect (at-least-once).
|
|
16
|
+
- `MaxRepeatedToolCallsLimit` stops an agent repeating the same tool call.
|
|
17
|
+
- `run_turn_with_fallback` / `arun_turn_with_fallback` drive `provider_router`.
|
|
18
|
+
- `arun_turn_stream(idempotency_key=...)`.
|
|
19
|
+
- `session(handoff=...)` / `asession(handoff=...)` run on the worker a `Handoff`
|
|
20
|
+
reserved.
|
|
21
|
+
- `agent.turn.completed` / `agent.turn.failed` events, `chat` spans,
|
|
22
|
+
`OpenTelemetryMetricsSink`, and the `gen_ai.client.inference.usage.*` counters.
|
|
23
|
+
- MCP Python SDK 2.x support alongside 1.x, plus a per-call `timeout`.
|
|
24
|
+
- Audit log `tip()`, `ChainTip`, and `verify_chain(expected_tip=...)`.
|
|
25
|
+
- `AgentRegistry.evict_terminal()`, `TokenBucket.debit()`.
|
|
26
|
+
- Audit purge markers, signed under the sink's key.
|
|
27
|
+
- `AgentSession(audit_fail_closed=True)` refuses further actions with
|
|
28
|
+
`AuditWriteError` once the audit log cannot be written.
|
|
29
|
+
- Python 3.14 support.
|
|
30
|
+
|
|
31
|
+
Fixed, security and audit integrity:
|
|
32
|
+
|
|
33
|
+
- Two audit writers on one SQLite file could wedge it and silently lose every later
|
|
34
|
+
record. Appends are now atomic and writers serialize into one chain.
|
|
35
|
+
- Quadratic regular expressions in `PromptInjectionGuardrail` and `RedactPIIHook` let
|
|
36
|
+
untrusted content stall the event loop.
|
|
37
|
+
- Prompt-injection and pattern guardrails were bypassed by any structured output,
|
|
38
|
+
because `str()` escaped the newlines their patterns match on.
|
|
39
|
+
- A role name differing by case or an invisible character bypassed its deny list.
|
|
40
|
+
- Async policy conditions always matched under `And` / `Or` and in sync `evaluate`.
|
|
41
|
+
- The human-oversight gate accepted replayed, stale, spoofed, and invalid decisions,
|
|
42
|
+
and did not enforce its timeout on a hanging queue.
|
|
43
|
+
- The oversight trail omitted the reason and action, and recorded nothing if a queue
|
|
44
|
+
raised. The compliance kit's log now receives oversight events.
|
|
45
|
+
- Unserializable event content dropped audit records while the action proceeded, and
|
|
46
|
+
could suppress incident notification. Hashes of existing records are unchanged.
|
|
47
|
+
- A deleted audit tail was not detected on a live sink.
|
|
48
|
+
- Tampered rows crashed verification rather than reporting invalid. CSV export did
|
|
49
|
+
not escape timestamps. Purge compared timestamp strings across UTC offsets.
|
|
50
|
+
- PII redaction skipped tuples, sets, dict keys, and bytes, and missed standard base64
|
|
51
|
+
keys and JWT headers. Combined patterns lost backreferences.
|
|
52
|
+
|
|
53
|
+
Fixed, accounting and durability:
|
|
54
|
+
|
|
55
|
+
- A turn that crossed a budget or usage limit, or whose `after_model` hook failed, was
|
|
56
|
+
missing from the checkpoint and from governance cost, so the retry paid again and
|
|
57
|
+
`MaxBudgetLimit` could never trip.
|
|
58
|
+
- A replayed turn did not restore its spend, so a restart reset the budget.
|
|
59
|
+
- Usage above a rate-limit bucket's capacity raised after the model call and lost the
|
|
60
|
+
turn.
|
|
61
|
+
- Usage passed without `model=` was discarded, which disabled `UsageLimits`.
|
|
62
|
+
- A failed SQLite write left a transaction open: every later write failed and reads
|
|
63
|
+
went stale until restart (`SqliteSaver`, `SqliteEventSink`, `SqliteUsageSink`).
|
|
64
|
+
- Concurrent cold starts of a new SQLite file crashed with `IntegrityError`.
|
|
65
|
+
- JSON-valid state with a lone surrogate failed on `SqliteSaver` and aborted the turn.
|
|
66
|
+
- Pricing prefixes had no name boundary: `gpt-4` priced `gpt-4o-mini` and suppressed
|
|
67
|
+
the missing-price warning.
|
|
68
|
+
- Cache writes could cost $0 on a tiered model. Float sums could falsely exceed a
|
|
69
|
+
budget at its exact boundary.
|
|
70
|
+
|
|
71
|
+
Fixed, runtime behaviour:
|
|
72
|
+
|
|
73
|
+
- `arun_turn_stream(timeout=)` cancelled the consumer's task, even after the consumer
|
|
74
|
+
had left the stream, because the timeout scope spanned a `yield`.
|
|
75
|
+
- A hung half-open probe blocked the circuit indefinitely, a stale probe result could
|
|
76
|
+
close it, and it could stay half-open under sustained load despite successes.
|
|
77
|
+
- Context-overflow errors containing a token count such as `14290` were classified as
|
|
78
|
+
rate limits, and digits inside identifiers as HTTP statuses.
|
|
79
|
+
- Duplicate names in a router's `exclude` made every router return `None`.
|
|
80
|
+
- A timed-out `pause_for_input` stranded the worker and made session exit raise.
|
|
81
|
+
- `run_turn(timeout=)` lost context variables, including tracing context, in its
|
|
82
|
+
worker thread. A `TimeoutError` raised by user code was reported as the deadline.
|
|
83
|
+
- Compaction identified messages by object identity, so a reused instance defeated
|
|
84
|
+
both limits, and it could delete the newest message.
|
|
85
|
+
- `JsonOutputSpec` leaked `RecursionError` and `ValueError`, and accepted `NaN`.
|
|
86
|
+
- Orphan spans were lost under a batch processor at exit. `OpenTelemetrySink.shutdown()`
|
|
87
|
+
closes them explicitly.
|
|
88
|
+
- `execute_tool` spans lacked `gen_ai.tool.name`, tool spans stayed open after a
|
|
89
|
+
post-guardrail block or cancellation, and cache tokens never reached metrics.
|
|
90
|
+
- Runtime exceptions did not survive `pickle` or `copy`.
|
|
91
|
+
- `mkdocs build` failed with current `pymdown-extensions`; `mkdocstrings` is updated.
|
|
92
|
+
|
|
93
|
+
Changed:
|
|
94
|
+
|
|
95
|
+
- **Breaking:** `default_allow_unknown_roles` now defaults to `False`, so a role with no
|
|
96
|
+
config is denied.
|
|
97
|
+
- A turn timeout now counts as a circuit-breaker failure, so a provider that hangs
|
|
98
|
+
opens the circuit.
|
|
99
|
+
- Toolchain updated (ruff 0.17, mypy 2.4, pytest 9.2, hypothesis, OpenTelemetry 1.45,
|
|
100
|
+
and pinned actions for checkout, setup-python, and the release publisher).
|
|
101
|
+
|
|
5
102
|
## 0.4.0 - 2026-06-20
|
|
6
103
|
|
|
7
104
|
The EU AI Act compliance line.
|
{techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/production-readiness.md
RENAMED
|
@@ -50,7 +50,7 @@ At plan creation, the runtime is already significantly hardened:
|
|
|
50
50
|
- Runtime package name: `techrevati-runtime`.
|
|
51
51
|
- Current release-candidate version: `0.3.0rc1`.
|
|
52
52
|
- Runtime dependency policy: zero required runtime dependencies.
|
|
53
|
-
- Supported Python versions: 3.11, 3.12, and 3.
|
|
53
|
+
- Supported Python versions: 3.11, 3.12, 3.13, and 3.14.
|
|
54
54
|
- Existing gates cover lint, formatting, strict typing, tests, coverage,
|
|
55
55
|
package metadata, docs, branding, CI hardening, workflow pinning, release
|
|
56
56
|
checks, public API checks, full-scope source hygiene for source, scripts,
|
{techrevati_runtime-0.4.0 → techrevati_runtime-0.5.0}/docs/compliance/remote-ci-validation.md
RENAMED
|
@@ -57,9 +57,9 @@ and must be collected again.
|
|
|
57
57
|
|
|
58
58
|
The remote CI run must include:
|
|
59
59
|
|
|
60
|
-
- test matrix for Python 3.11, 3.12, and 3.
|
|
61
|
-
- build matrix for Python 3.11, 3.12, and 3.
|
|
62
|
-
- zero-dependency wheel smoke for Python 3.11, 3.12, and 3.
|
|
60
|
+
- test matrix for Python 3.11, 3.12, 3.13, and 3.14,
|
|
61
|
+
- build matrix for Python 3.11, 3.12, 3.13, and 3.14,
|
|
62
|
+
- zero-dependency wheel smoke for Python 3.11, 3.12, 3.13, and 3.14,
|
|
63
63
|
- lint, format, strict typing, and full tests,
|
|
64
64
|
- total and per-module coverage gates,
|
|
65
65
|
- all verify-time guard scripts,
|