cfa-kernel 0.1.0__tar.gz → 0.1.2__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.
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/CFA_IMPLEMENTATION_PLAN.md +8 -8
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/PKG-INFO +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/README.md +2 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/pyproject.toml +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/__init__.py +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/formatters.py +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/governance/audit.py +4 -4
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/project/status.py +14 -2
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/observability/promotion.py +15 -3
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/testing/fixtures.py +10 -5
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_user_journeys.py +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/getting-started.md +6 -6
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/intro.md +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/mcp-server.md +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docusaurus.config.ts +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/getting-started.md +6 -6
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/intro.md +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/mcp-server.md +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/src/pages/index.tsx +1 -1
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.gitattributes +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.github/workflows/ci.yml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.github/workflows/deploy-docs.yml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.github/workflows/deploy-pypi.yml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.github/workflows/governance.yml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.gitignore +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.uv-cache/.gitignore +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.uv-cache/.lock +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.uv-cache/CACHEDIR.TAG +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/.uv-cache/sdists-v9/.gitignore +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/CFA_MARKET_RESEARCH_2026.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/CODE_OF_CONDUCT.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/CONTRIBUTING.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/LICENSE +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/MANUAL_TESTING_GUIDE.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/SECURITY.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/examples/fiscal_governance.yaml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/examples/full_pipeline.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/examples/llm_systematizer.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/examples/runtime_gate.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/examples/standalone_governance.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/examples/standalone_lifecycle.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/examples/standalone_resolution.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/integrations/airflow-governance-gate/README.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/integrations/airflow-governance-gate/dags/cfa_governance_gate_demo.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/integrations/airflow-governance-gate/requirements.txt +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/integrations/airflow-governance-gate/src/governance_gate.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/mcp.json +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/policies/compliance-strict-v1.yaml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/policies/finops-strict-v1.yaml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/policies/prod-v1.yaml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/_lazy.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/adapters/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/adapters/autogen.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/adapters/crewai.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/adapters/dspy.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/adapters/langgraph.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/adapters/openai_agents.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/audit/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/audit/context.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/audit/hashing.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/audit/trail.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/backends/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/backends/dbt.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/backends/pyspark.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/backends/sql.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/behavior/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/behavior/llm.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/behavior/spec.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/behavior/systematizer.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/__main__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/_helpers.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/core/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/core/evaluate.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/core/validate.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/governance/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/governance/catalog.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/governance/policy.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/governance/rules.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/governance/signature.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/infrastructure/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/infrastructure/backend_list.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/infrastructure/storage.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/project/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/project/init.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/project/lifecycle.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/project/taxonomy.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/reporting/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/reporting/report.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/cli/reporting/serve.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/config.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/core/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/core/codegen.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/core/conditions.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/core/kernel.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/core/phases/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/core/phases/runner.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/core/planner.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/execution/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/execution/partial.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/execution/state_projection.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/governance/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/lifecycle/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/mcp/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/mcp/__main__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/normalizer/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/normalizer/base.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/normalizer/llm.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/observability/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/observability/indices.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/observability/metrics.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/observability/notify.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/observability/otel.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/policy/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/policy/bundle.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/policy/catalog.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/policy/engine.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/reporting/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/reporting/charts.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/reporting/engine.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/resolution/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/runtime/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/runtime/gate.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/sandbox/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/sandbox/executor.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/sandbox/mock.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/sandbox/panic.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/storage/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/testing/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/testing/asserts.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/testing/evaluate.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/testing/markers.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/types.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/validation/__init__.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/validation/runtime.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/validation/signature.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/src/cfa/validation/static.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/conftest.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_adapters.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_airflow_governance_gate.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_audit_persistent.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_behavior.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_behavior_llm.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_catalog.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_cli_validation.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_codegen.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_config.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_context.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_context_persistent.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_dbt_backend.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_hashing.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_indices.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_integration.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_intensive.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_kernel.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_mcp.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_metrics.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_normalizer.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_normalizer_llm.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_notify.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_otel.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_partial_execution.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_planner.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_policy.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_policy_bundle.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_promotion.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_reporting.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_runtime.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_runtime_validation.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_sandbox.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_serialization.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_signature.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_sql_backend.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_state_projection.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_static_validation.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_storage.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_testing.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/tests/test_types.py +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/.gitignore +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/README.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/blog/2019-05-28-first-blog-post.mdx +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/blog/2019-05-29-long-blog-post.mdx +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/blog/2021-08-01-mdx-blog-post.mdx +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/blog/2021-08-26-welcome/index.mdx +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/blog/authors.yml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/blog/tags.yml +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/api.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/architecture-notes.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/backends.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/behavior-spec.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/cli.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/faq.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/guide.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/integrations/airflow.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/integrations/langgraph.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/integrations/openai-agents.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/policy-bundles.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/reporting.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/docs/whitepaper.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/code.json +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/api.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/architecture-notes.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/backends.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/behavior-spec.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/cli.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/guide.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/integrations/airflow.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/integrations/langgraph.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/integrations/openai-agents.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/policy-bundles.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/reporting.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/whitepaper.md +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/package-lock.json +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/package.json +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/sidebars.ts +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/src/components/HomepageFeatures/index.tsx +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/src/components/HomepageFeatures/styles.module.css +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/src/css/custom.css +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/src/pages/index.module.css +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/src/pages/markdown-page.mdx +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/static/.nojekyll +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/static/img/favicon.ico +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/static/img/logo.svg +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/static/img/undraw_docusaurus_mountain.svg +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/static/img/undraw_docusaurus_react.svg +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/static/img/undraw_docusaurus_tree.svg +0 -0
- {cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/website/tsconfig.json +0 -0
|
@@ -461,7 +461,7 @@ MCP Server CFA — Tools expostas:
|
|
|
461
461
|
- `pyproject.toml` — `[project.scripts] cfa-mcp = "cfa.mcp:main"`
|
|
462
462
|
- `mcp.json` — configuração exemplo para Claude Desktop, Cursor, etc.
|
|
463
463
|
|
|
464
|
-
**Dependências:** `mcp` package (extras_require: `pip install cfa[mcp]`)
|
|
464
|
+
**Dependências:** `mcp` package (extras_require: `pip install cfa-kernel[mcp]`)
|
|
465
465
|
|
|
466
466
|
---
|
|
467
467
|
|
|
@@ -548,7 +548,7 @@ enable_otel(OTELConfig(
|
|
|
548
548
|
|
|
549
549
|
**Arquivos:**
|
|
550
550
|
- `src/cfa/otel.py` — `enable_otel()`, `OTELConfig`, instrumentação do pipeline
|
|
551
|
-
- Dependência: `opentelemetry-api` + `opentelemetry-sdk` (extras_require: `pip install cfa[otel]`)
|
|
551
|
+
- Dependência: `opentelemetry-api` + `opentelemetry-sdk` (extras_require: `pip install cfa-kernel[otel]`)
|
|
552
552
|
|
|
553
553
|
---
|
|
554
554
|
|
|
@@ -697,12 +697,12 @@ cfa_lifecycle_index{pipeline="fiscal_monthly", index="idi"} 0.88
|
|
|
697
697
|
#### Sprint 13: PyPI Release + Community Setup (Dias 81-90)
|
|
698
698
|
|
|
699
699
|
**Release v0.1.0:**
|
|
700
|
-
- `pip install cfa` (core)
|
|
701
|
-
- `pip install cfa[cli]` (CLI)
|
|
702
|
-
- `pip install cfa[mcp]` (MCP server)
|
|
703
|
-
- `pip install cfa[otel]` (OpenTelemetry)
|
|
704
|
-
- `pip install cfa[langgraph]` (LangGraph adapter)
|
|
705
|
-
- `pip install cfa[all]` (tudo)
|
|
700
|
+
- `pip install cfa-kernel` (core)
|
|
701
|
+
- `pip install cfa-kernel[cli]` (CLI)
|
|
702
|
+
- `pip install cfa-kernel[mcp]` (MCP server)
|
|
703
|
+
- `pip install cfa-kernel[otel]` (OpenTelemetry)
|
|
704
|
+
- `pip install cfa-kernel[langgraph]` (LangGraph adapter)
|
|
705
|
+
- `pip install cfa-kernel[all]` (tudo)
|
|
706
706
|
|
|
707
707
|
**Community:**
|
|
708
708
|
- `cfa` package no PyPI
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
[](https://github.com/marquesantero/cfa/actions/workflows/ci.yml)
|
|
4
4
|
[](https://github.com/astral-sh/ruff)
|
|
5
5
|
[](https://github.com/marquesantero/cfa/actions/workflows/ci.yml)
|
|
6
|
+
[](https://pypi.org/project/cfa-kernel/)
|
|
6
7
|
[](https://www.python.org/)
|
|
7
8
|
[](./LICENSE)
|
|
8
9
|
[](https://marquesantero.github.io/cfa/)
|
|
@@ -14,7 +15,7 @@ Instead of asking _"which agent or skill should act?"_, CFA asks _"which state t
|
|
|
14
15
|
## Quick Start
|
|
15
16
|
|
|
16
17
|
```bash
|
|
17
|
-
pip install cfa
|
|
18
|
+
pip install cfa-kernel
|
|
18
19
|
# or: pip install git+https://github.com/marquesantero/cfa.git
|
|
19
20
|
cfa init
|
|
20
21
|
cfa evaluate "Join NFe with Clientes and persist to Silver" --catalog .cfa/catalog.json
|
|
@@ -17,7 +17,7 @@ _ANSI_RE = re.compile(r"\x1b\[[0-9;]*m")
|
|
|
17
17
|
# Force UTF-8 on Windows if possible
|
|
18
18
|
if sys.platform == "win32":
|
|
19
19
|
try:
|
|
20
|
-
sys.stdout.reconfigure(encoding="utf-8") # type: ignore[attr-defined]
|
|
20
|
+
sys.stdout.reconfigure(encoding="utf-8", errors="replace") # type: ignore[attr-defined]
|
|
21
21
|
except Exception:
|
|
22
22
|
pass
|
|
23
23
|
|
|
@@ -50,16 +50,16 @@ def cmd_audit_verify(args) -> int:
|
|
|
50
50
|
events = trail.get_events_for_intent(args.id)
|
|
51
51
|
chain_ok = trail.verify_chain()
|
|
52
52
|
if chain_ok:
|
|
53
|
-
print(f"
|
|
53
|
+
print(f"[OK] Chain INTACT for intent {args.id} ({len(events)} events)")
|
|
54
54
|
return 0
|
|
55
55
|
else:
|
|
56
|
-
print(f"
|
|
56
|
+
print(f"[FAIL] Chain BROKEN for intent {args.id}", file=sys.stderr)
|
|
57
57
|
return 1
|
|
58
58
|
else:
|
|
59
59
|
all_ok = trail.verify_chain()
|
|
60
60
|
if all_ok:
|
|
61
|
-
print(f"
|
|
61
|
+
print(f"[OK] Chain INTACT ({trail.event_count} events total)")
|
|
62
62
|
return 0
|
|
63
63
|
else:
|
|
64
|
-
print("
|
|
64
|
+
print("[FAIL] Chain BROKEN", file=sys.stderr)
|
|
65
65
|
return 1
|
|
@@ -5,12 +5,24 @@ from __future__ import annotations
|
|
|
5
5
|
from datetime import UTC
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
def _load_config(config_path: str | None):
|
|
9
|
+
from cfa.config import CfaConfig
|
|
10
|
+
if config_path:
|
|
11
|
+
try:
|
|
12
|
+
return CfaConfig.from_yaml(config_path)
|
|
13
|
+
except ImportError:
|
|
14
|
+
try:
|
|
15
|
+
return CfaConfig.from_json(config_path)
|
|
16
|
+
except Exception:
|
|
17
|
+
return None
|
|
18
|
+
return CfaConfig.discover()
|
|
19
|
+
|
|
20
|
+
|
|
8
21
|
def cmd_status(args) -> int:
|
|
9
22
|
from cfa.cli.formatters import format_json
|
|
10
|
-
from cfa.config import CfaConfig
|
|
11
23
|
from cfa.storage import SqliteStorage, _sqlite_storage_stats
|
|
12
24
|
|
|
13
|
-
config =
|
|
25
|
+
config = _load_config(args.config)
|
|
14
26
|
|
|
15
27
|
output = {
|
|
16
28
|
"config_found": config is not None,
|
|
@@ -26,13 +26,25 @@ Every promoted skill carries generation_metadata for traceability.
|
|
|
26
26
|
from __future__ import annotations
|
|
27
27
|
|
|
28
28
|
from dataclasses import dataclass, field
|
|
29
|
-
from datetime import datetime
|
|
29
|
+
from datetime import datetime, timezone
|
|
30
30
|
from enum import StrEnum
|
|
31
|
-
from typing import Any
|
|
32
31
|
|
|
33
32
|
from cfa.observability.indices import ExecutionRecord, IndexCalculator, IndexScores
|
|
34
33
|
from cfa.types import _utcnow
|
|
35
34
|
|
|
35
|
+
|
|
36
|
+
def _parse_storage_timestamp(ts: str) -> datetime | None:
|
|
37
|
+
"""Parse a storage timestamp string to timezone-aware datetime."""
|
|
38
|
+
if not ts:
|
|
39
|
+
return None
|
|
40
|
+
try:
|
|
41
|
+
dt = datetime.fromisoformat(ts)
|
|
42
|
+
if dt.tzinfo is None:
|
|
43
|
+
dt = dt.replace(tzinfo=timezone.utc)
|
|
44
|
+
return dt
|
|
45
|
+
except (ValueError, TypeError):
|
|
46
|
+
return None
|
|
47
|
+
|
|
36
48
|
# ── Lifecycle States ────────────────────────────────────────────────────────
|
|
37
49
|
|
|
38
50
|
|
|
@@ -140,7 +152,7 @@ class PromotionEngine:
|
|
|
140
152
|
for rec_dict in self._storage.execution_load_all():
|
|
141
153
|
self._records.append(ExecutionRecord(
|
|
142
154
|
signature_hash=rec_dict["signature_hash"],
|
|
143
|
-
timestamp=
|
|
155
|
+
timestamp=_parse_storage_timestamp(rec_dict.get("timestamp", "")) or _utcnow(),
|
|
144
156
|
success=rec_dict.get("success", True),
|
|
145
157
|
replanned=rec_dict.get("replanned", False),
|
|
146
158
|
cost_dbu=rec_dict.get("cost_dbu", 0.0),
|
|
@@ -15,12 +15,17 @@ from __future__ import annotations
|
|
|
15
15
|
|
|
16
16
|
from typing import Any
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
try:
|
|
19
|
+
import pytest
|
|
20
|
+
except ImportError:
|
|
21
|
+
pytest = None # type: ignore[assignment]
|
|
19
22
|
|
|
20
23
|
from cfa.core.kernel import KernelConfig, KernelOrchestrator
|
|
21
24
|
|
|
22
25
|
from ..sandbox.mock import MockSandboxBackend
|
|
23
26
|
|
|
27
|
+
_fixture = pytest.fixture if pytest else (lambda f: f)
|
|
28
|
+
|
|
24
29
|
DEFAULT_CATALOG = {
|
|
25
30
|
"datasets": {
|
|
26
31
|
"nfe": {
|
|
@@ -44,13 +49,13 @@ DEFAULT_CATALOG = {
|
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
|
|
47
|
-
@
|
|
52
|
+
@_fixture
|
|
48
53
|
def cfa_catalog() -> dict[str, Any]:
|
|
49
54
|
"""Default data catalog for governance tests."""
|
|
50
55
|
return DEFAULT_CATALOG
|
|
51
56
|
|
|
52
57
|
|
|
53
|
-
@
|
|
58
|
+
@_fixture
|
|
54
59
|
def cfa_kernel(cfa_catalog: dict[str, Any]) -> KernelOrchestrator:
|
|
55
60
|
"""Pre-configured KernelOrchestrator for testing.
|
|
56
61
|
|
|
@@ -64,7 +69,7 @@ def cfa_kernel(cfa_catalog: dict[str, Any]) -> KernelOrchestrator:
|
|
|
64
69
|
)
|
|
65
70
|
|
|
66
71
|
|
|
67
|
-
@
|
|
72
|
+
@_fixture
|
|
68
73
|
def cfa_strict_kernel(cfa_catalog: dict[str, Any]) -> KernelOrchestrator:
|
|
69
74
|
"""KernelOrchestrator with warnings treated as blocking."""
|
|
70
75
|
return KernelOrchestrator(
|
|
@@ -74,7 +79,7 @@ def cfa_strict_kernel(cfa_catalog: dict[str, Any]) -> KernelOrchestrator:
|
|
|
74
79
|
)
|
|
75
80
|
|
|
76
81
|
|
|
77
|
-
@
|
|
82
|
+
@_fixture
|
|
78
83
|
def cfa_noexec_kernel(cfa_catalog: dict[str, Any]) -> KernelOrchestrator:
|
|
79
84
|
"""KernelOrchestrator with execution disabled (policy-only gate)."""
|
|
80
85
|
return KernelOrchestrator(
|
|
@@ -34,7 +34,7 @@ class TestJourney1_FirstTimeUser:
|
|
|
34
34
|
def test_01_install_and_version(self):
|
|
35
35
|
"""User: pip install cfa && python -c 'import cfa; print(cfa.__version__)'"""
|
|
36
36
|
import cfa
|
|
37
|
-
assert cfa.__version__
|
|
37
|
+
assert cfa.__version__.startswith("0.1.")
|
|
38
38
|
|
|
39
39
|
def test_02_first_evaluate(self):
|
|
40
40
|
"""User: cfa evaluate 'my first governance check'"""
|
|
@@ -14,7 +14,7 @@ Install CFA and run your first governance check in under 5 minutes.
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
pip install cfa
|
|
17
|
+
pip install cfa-kernel
|
|
18
18
|
# or directly from GitHub:
|
|
19
19
|
# pip install git+https://github.com/marquesantero/cfa.git
|
|
20
20
|
```
|
|
@@ -22,11 +22,11 @@ pip install cfa
|
|
|
22
22
|
Optional features:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
pip install cfa[yaml] # YAML policy bundles
|
|
26
|
-
pip install cfa[llm] # LLM-powered intent normalization (OpenAI)
|
|
27
|
-
pip install cfa[otel] # OpenTelemetry tracing
|
|
28
|
-
pip install cfa[mcp] # MCP server protocol
|
|
29
|
-
pip install cfa[all] # Everything
|
|
25
|
+
pip install cfa-kernel[yaml] # YAML policy bundles
|
|
26
|
+
pip install cfa-kernel[llm] # LLM-powered intent normalization (OpenAI)
|
|
27
|
+
pip install cfa-kernel[otel] # OpenTelemetry tracing
|
|
28
|
+
pip install cfa-kernel[mcp] # MCP server protocol
|
|
29
|
+
pip install cfa-kernel[all] # Everything
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
## Initialize a project
|
|
@@ -21,7 +21,7 @@ CFA is a governance layer that validates state transitions before they execute.
|
|
|
21
21
|
## Quick Install
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
pip install cfa
|
|
24
|
+
pip install cfa-kernel
|
|
25
25
|
# or: pip install git+https://github.com/marquesantero/cfa.git
|
|
26
26
|
cfa init
|
|
27
27
|
cfa evaluate "Join NFe with Clientes and persist to Silver" --catalog .cfa/catalog.json
|
|
@@ -97,7 +97,7 @@ const config: Config = {
|
|
|
97
97
|
items: [
|
|
98
98
|
{ label: 'Blog', to: '/blog' },
|
|
99
99
|
{ label: 'GitHub', href: 'https://github.com/marquesantero/cfa' },
|
|
100
|
-
{ label: 'PyPI', href: 'https://pypi.org/project/cfa/' },
|
|
100
|
+
{ label: 'PyPI', href: 'https://pypi.org/project/cfa-kernel/' },
|
|
101
101
|
],
|
|
102
102
|
},
|
|
103
103
|
],
|
|
@@ -14,7 +14,7 @@ Instale o CFA e execute sua primeira verificação de governança em menos de 5
|
|
|
14
14
|
## Instalação
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
pip install cfa
|
|
17
|
+
pip install cfa-kernel
|
|
18
18
|
# ou diretamente do GitHub:
|
|
19
19
|
# pip install git+https://github.com/marquesantero/cfa.git
|
|
20
20
|
```
|
|
@@ -22,11 +22,11 @@ pip install cfa
|
|
|
22
22
|
Funcionalidades opcionais:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
pip install cfa[yaml] # Policy bundles YAML
|
|
26
|
-
pip install cfa[llm] # Normalização de intenção com LLM (OpenAI)
|
|
27
|
-
pip install cfa[otel] # Tracing OpenTelemetry
|
|
28
|
-
pip install cfa[mcp] # Protocolo servidor MCP
|
|
29
|
-
pip install cfa[all] # Tudo
|
|
25
|
+
pip install cfa-kernel[yaml] # Policy bundles YAML
|
|
26
|
+
pip install cfa-kernel[llm] # Normalização de intenção com LLM (OpenAI)
|
|
27
|
+
pip install cfa-kernel[otel] # Tracing OpenTelemetry
|
|
28
|
+
pip install cfa-kernel[mcp] # Protocolo servidor MCP
|
|
29
|
+
pip install cfa-kernel[all] # Tudo
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
## Inicializar um projeto
|
|
@@ -21,7 +21,7 @@ CFA é uma camada de governança que valida transições de estado antes da exec
|
|
|
21
21
|
## Instalação Rápida
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
pip install cfa
|
|
24
|
+
pip install cfa-kernel
|
|
25
25
|
cfa init
|
|
26
26
|
cfa evaluate "Juntar NFe com Clientes e persistir na Silver" --catalog .cfa/catalog.json
|
|
27
27
|
```
|
|
@@ -92,7 +92,7 @@ export default function Home(): JSX.Element {
|
|
|
92
92
|
background: 'rgba(0,0,0,0.3)', padding: '0.75rem 1.5rem',
|
|
93
93
|
borderRadius: 8, fontSize: '0.95rem', color: '#3dffa0',
|
|
94
94
|
}}>
|
|
95
|
-
pip install cfa && cfa evaluate "Join NFe with Clientes persist Silver"
|
|
95
|
+
pip install cfa-kernel && cfa evaluate "Join NFe with Clientes persist Silver"
|
|
96
96
|
</code>
|
|
97
97
|
<p style={{ color: '#8892a4', marginTop: '1rem', fontSize: '0.85rem' }}>
|
|
98
98
|
343 tests · MIT License · Python 3.11+
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cfa_kernel-0.1.0 → cfa_kernel-0.1.2}/integrations/airflow-governance-gate/src/governance_gate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|