cfa-kernel 0.1.9__tar.gz → 1.0.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.
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.gitignore +1 -4
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/PKG-INFO +39 -18
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/README.md +38 -17
- cfa_kernel-1.0.0/ROADMAP.md +377 -0
- cfa_kernel-1.0.0/SECURITY.md +131 -0
- cfa_kernel-1.0.0/demos/cfa_demo_complete.dbc +0 -0
- cfa_kernel-1.0.0/demos/cfa_demo_complete.py +823 -0
- cfa_kernel-1.0.0/demos/cfa_llm_demo_complete.dbc +0 -0
- cfa_kernel-1.0.0/demos/cfa_llm_demo_complete.py +727 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/pyproject.toml +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/__init__.py +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/audit/context.py +206 -205
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/audit/hashing.py +42 -41
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/core/__init__.py +1 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/core/codegen.py +66 -65
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/core/conditions.py +131 -130
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/core/kernel.py +1 -1
- cfa_kernel-1.0.0/src/cfa/core/phases/__init__.py +1 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/core/planner.py +291 -290
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/execution/partial.py +340 -339
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/execution/state_projection.py +217 -216
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/governance/__init__.py +77 -76
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/normalizer/base.py +442 -441
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/observability/metrics.py +92 -91
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/observability/notify.py +80 -79
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/observability/otel.py +82 -81
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/observability/promotion.py +2 -2
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/policy/__init__.py +1 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/reporting/engine.py +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/resolution/__init__.py +63 -62
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/sandbox/executor.py +93 -92
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/sandbox/mock.py +90 -89
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/sandbox/panic.py +53 -52
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/validation/runtime.py +286 -285
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/validation/signature.py +147 -146
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/validation/static.py +253 -252
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/api.md +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/faq.md +2 -2
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/guide.md +299 -299
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/integrations/langgraph.md +145 -145
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/integrations/openai-agents.md +143 -143
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/intro.md +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/policy-bundles.md +94 -94
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/whitepaper.md +3 -3
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docusaurus.config.ts +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/api.md +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/intro.md +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/whitepaper.md +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/sidebars.ts +1 -1
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/src/pages/index.tsx +2 -2
- cfa_kernel-0.1.9/CFA_LLM_Demo.ipynb +0 -711
- cfa_kernel-0.1.9/CFA_LLM_Demo_fixed (1).dbc +0 -0
- cfa_kernel-0.1.9/CFA_LLM_Demo_fixed.dbc +0 -0
- cfa_kernel-0.1.9/CFA_LLM_Demo_fixed.py +0 -673
- cfa_kernel-0.1.9/SECURITY.md +0 -39
- cfa_kernel-0.1.9/cfa_demo_complete.ipynb +0 -971
- cfa_kernel-0.1.9/integrations/airflow-governance-gate/README.md +0 -134
- cfa_kernel-0.1.9/integrations/airflow-governance-gate/dags/cfa_governance_gate_demo.py +0 -79
- cfa_kernel-0.1.9/integrations/airflow-governance-gate/requirements.txt +0 -7
- cfa_kernel-0.1.9/integrations/airflow-governance-gate/src/governance_gate.py +0 -101
- cfa_kernel-0.1.9/src/cfa/core/phases/__init__.py +0 -0
- cfa_kernel-0.1.9/tests/test_airflow_governance_gate.py +0 -76
- cfa_kernel-0.1.9/website/docs/integrations/airflow.md +0 -164
- cfa_kernel-0.1.9/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/integrations/airflow.md +0 -42
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.gitattributes +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.github/workflows/ci.yml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.github/workflows/deploy-docs.yml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.github/workflows/deploy-pypi.yml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.github/workflows/governance.yml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.uv-cache/.gitignore +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.uv-cache/.lock +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.uv-cache/CACHEDIR.TAG +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/.uv-cache/sdists-v9/.gitignore +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/CODE_OF_CONDUCT.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/CONTRIBUTING.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/LICENSE +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/MANUAL_TESTING_GUIDE.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/examples/cfa_demo.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/examples/fiscal_governance.yaml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/examples/full_pipeline.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/examples/llm_systematizer.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/examples/runtime_gate.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/examples/standalone_governance.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/examples/standalone_lifecycle.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/examples/standalone_resolution.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/mcp.json +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/policies/compliance-strict-v1.yaml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/policies/finops-strict-v1.yaml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/policies/prod-v1.yaml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/_lazy.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/adapters/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/adapters/autogen.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/adapters/crewai.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/adapters/dspy.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/adapters/langgraph.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/adapters/openai_agents.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/audit/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/audit/trail.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/backends/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/backends/dbt.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/backends/pyspark.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/backends/sql.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/behavior/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/behavior/llm.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/behavior/spec.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/behavior/systematizer.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/__main__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/_helpers.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/core/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/core/evaluate.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/core/validate.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/formatters.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/governance/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/governance/audit.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/governance/catalog.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/governance/policy.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/governance/rules.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/governance/signature.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/infrastructure/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/infrastructure/backend_list.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/infrastructure/storage.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/project/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/project/init.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/project/lifecycle.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/project/status.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/project/taxonomy.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/reporting/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/reporting/report.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/cli/reporting/serve.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/config.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/core/phases/runner.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/execution/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/lifecycle/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/mcp/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/mcp/__main__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/normalizer/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/normalizer/llm.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/observability/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/observability/indices.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/policy/bundle.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/policy/catalog.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/policy/engine.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/reporting/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/reporting/charts.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/runtime/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/runtime/gate.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/sandbox/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/storage/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/testing/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/testing/asserts.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/testing/evaluate.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/testing/fixtures.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/testing/markers.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/types.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/src/cfa/validation/__init__.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/conftest.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_adapters.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_audit_persistent.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_behavior.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_behavior_llm.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_catalog.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_cli_validation.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_codegen.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_config.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_context.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_context_persistent.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_dbt_backend.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_hashing.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_indices.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_integration.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_intensive.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_kernel.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_mcp.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_metrics.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_normalizer.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_normalizer_llm.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_notify.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_otel.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_partial_execution.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_planner.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_policy.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_policy_bundle.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_promotion.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_reporting.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_runtime.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_runtime_validation.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_sandbox.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_serialization.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_signature.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_sql_backend.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_state_projection.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_static_validation.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_storage.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_testing.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_types.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/tests/test_user_journeys.py +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/.gitignore +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/README.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/blog/2019-05-28-first-blog-post.mdx +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/blog/2019-05-29-long-blog-post.mdx +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/blog/2021-08-01-mdx-blog-post.mdx +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/blog/2021-08-26-welcome/index.mdx +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/blog/authors.yml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/blog/tags.yml +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/architecture-notes.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/backends.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/behavior-spec.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/cli.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/getting-started.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/mcp-server.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/docs/reporting.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/code.json +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/architecture-notes.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/backends.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/behavior-spec.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/cli.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/faq.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/getting-started.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/guide.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/integrations/langgraph.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/integrations/openai-agents.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/mcp-server.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/policy-bundles.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/i18n/pt-BR/docusaurus-plugin-content-docs/current/reporting.md +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/package-lock.json +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/package.json +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/src/components/HomepageFeatures/index.tsx +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/src/components/HomepageFeatures/styles.module.css +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/src/css/custom.css +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/src/pages/index.module.css +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/src/pages/markdown-page.mdx +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/static/.nojekyll +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/static/img/favicon.ico +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/static/img/logo.svg +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/static/img/undraw_docusaurus_mountain.svg +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/static/img/undraw_docusaurus_react.svg +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/static/img/undraw_docusaurus_tree.svg +0 -0
- {cfa_kernel-0.1.9 → cfa_kernel-1.0.0}/website/tsconfig.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cfa-kernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: CFA — Governed execution for AI agents and data systems
|
|
5
5
|
Project-URL: Homepage, https://marquesantero.github.io/cfa/
|
|
6
6
|
Project-URL: Repository, https://github.com/marquesantero/cfa
|
|
@@ -38,12 +38,12 @@ Provides-Extra: yaml
|
|
|
38
38
|
Requires-Dist: pyyaml>=6.0; extra == 'yaml'
|
|
39
39
|
Description-Content-Type: text/markdown
|
|
40
40
|
|
|
41
|
-
# CFA
|
|
41
|
+
# CFA v1.0.0
|
|
42
42
|
|
|
43
43
|
[](https://github.com/marquesantero/cfa/actions/workflows/ci.yml)
|
|
44
44
|
[](https://codecov.io/github/marquesantero/cfa)
|
|
45
45
|
[](https://github.com/astral-sh/ruff)
|
|
46
|
-
[](https://github.com/marquesantero/cfa/actions/workflows/ci.yml)
|
|
47
47
|
[](https://pypi.org/project/cfa-kernel/)
|
|
48
48
|
[](https://www.python.org/)
|
|
49
49
|
[](./LICENSE)
|
|
@@ -53,6 +53,8 @@ Description-Content-Type: text/markdown
|
|
|
53
53
|
|
|
54
54
|
Instead of asking _"which agent or skill should act?"_, CFA asks _"which state transition is being requested, under which constraints, and can it be executed safely?"_ and produces a cryptographically verifiable decision.
|
|
55
55
|
|
|
56
|
+
> **Status:** alpha (`0.1.x`). APIs may shift between minor versions. Not yet recommended for unsupervised production use.
|
|
57
|
+
|
|
56
58
|
## Quick Start
|
|
57
59
|
|
|
58
60
|
```bash
|
|
@@ -105,20 +107,20 @@ CLI / MCP / Adapter / API
|
|
|
105
107
|
Decision JSON / Audit Trail / OTel / Prometheus
|
|
106
108
|
```
|
|
107
109
|
|
|
108
|
-
##
|
|
109
|
-
|
|
110
|
-
|
|
|
111
|
-
|
|
112
|
-
| SHA-256 audit trail
|
|
113
|
-
| State projection
|
|
114
|
-
| Lifecycle indices (IFo/IFs/IFg/IDI) |
|
|
115
|
-
| REPLAN
|
|
116
|
-
| Backend-agnostic
|
|
117
|
-
| Artifact hashing
|
|
118
|
-
| MCP protocol
|
|
119
|
-
| SQLite storage with retention
|
|
120
|
-
| Config
|
|
121
|
-
| Zero
|
|
110
|
+
## Capabilities
|
|
111
|
+
|
|
112
|
+
| Capability | What it gives you |
|
|
113
|
+
|------------|-------------------|
|
|
114
|
+
| SHA-256 audit trail | Tamper-evident chain of decisions, verifiable offline (`cfa audit verify`) |
|
|
115
|
+
| State projection | Each execution carries the typed state of the prior one — no implicit globals |
|
|
116
|
+
| Lifecycle indices (IFo/IFs/IFg/IDI) | Quantifies how often an intent recurs, stabilizes, and qualifies for promotion to a reusable skill |
|
|
117
|
+
| REPLAN cycle | Failed policy checks emit a structured remediation, not a hard stop |
|
|
118
|
+
| Backend-agnostic codegen | Same signature compiles to PySpark, ANSI SQL, or dbt — pluggable via `BackendRegistry` |
|
|
119
|
+
| Artifact hashing | Catalog, policy bundle, and signature are content-hashed and bound to every decision |
|
|
120
|
+
| MCP protocol | Any MCP-compatible agent can call CFA as a governance tool |
|
|
121
|
+
| SQLite + JSONL storage | First-class persistence with stats, retention cleanup, and vacuum |
|
|
122
|
+
| Config auto-discovery | `cfa.yaml` walked up the tree; all CLI commands respect it |
|
|
123
|
+
| Zero core dependencies | Optional extras for `yaml`, `otel`, `mcp`, `llm` — none required for the kernel |
|
|
122
124
|
|
|
123
125
|
## CLI
|
|
124
126
|
|
|
@@ -290,10 +292,14 @@ Expose CFA governance to any AI agent via Model Context Protocol:
|
|
|
290
292
|
src/cfa/
|
|
291
293
|
├── core/ Kernel, Planner, CodeGen, Conditions, Phases
|
|
292
294
|
├── policy/ PolicyEngine, PolicyBundle, Catalog validation
|
|
295
|
+
├── governance/ Standalone governance API (no LLM, no execution required)
|
|
293
296
|
├── validation/ Static, Runtime, Signature validation
|
|
297
|
+
├── resolution/ Intent → StateSignature resolver (LLM or rule-based backend)
|
|
298
|
+
├── normalizer/ Rule-based normalizer, LLM normalizer
|
|
299
|
+
├── behavior/ BehaviorSpec + Systematizer (human intent → policy rules)
|
|
294
300
|
├── audit/ AuditTrail, Context, Hashing
|
|
295
301
|
├── observability/ Metrics, OTel, Notify, Indices, Promotion
|
|
296
|
-
├──
|
|
302
|
+
├── lifecycle/ IFo/IFs/IFg/IDI indices + Promotion/Demotion engine
|
|
297
303
|
├── execution/ Partial execution, State projection
|
|
298
304
|
├── adapters/ LangGraph, OpenAI, CrewAI, AutoGen, DSPy
|
|
299
305
|
├── backends/ PySpark, SQL, dbt (pluggable)
|
|
@@ -322,6 +328,21 @@ All documentation at **[marquesantero.github.io/cfa](https://marquesantero.githu
|
|
|
322
328
|
- [Architecture Notes](https://marquesantero.github.io/cfa/docs/architecture-notes)
|
|
323
329
|
- [FAQ](https://marquesantero.github.io/cfa/docs/faq)
|
|
324
330
|
|
|
331
|
+
## Demos
|
|
332
|
+
|
|
333
|
+
Two complete notebooks, tested on Databricks with CFA v1.0.0, 0 errors:
|
|
334
|
+
|
|
335
|
+
| File | Format | Description |
|
|
336
|
+
|------|--------|-------------|
|
|
337
|
+
| `demos/cfa_demo_complete` | `.dbc` / `.py` | Rule-based governance — APPROVE, REPLAN, BLOCK, codegen, audit, storage |
|
|
338
|
+
| `demos/cfa_llm_demo_complete` | `.dbc` / `.py` | LLM-powered — semantic normalizer, systematizer, strict mode, compare |
|
|
339
|
+
|
|
340
|
+
Import the `.dbc` into Databricks or run the `.py` files anywhere.
|
|
341
|
+
|
|
342
|
+
## Contributing
|
|
343
|
+
|
|
344
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for development setup, test conventions, and the PR checklist. By participating, you agree to the [Code of Conduct](./CODE_OF_CONDUCT.md). Security issues: see [SECURITY.md](./SECURITY.md).
|
|
345
|
+
|
|
325
346
|
## License
|
|
326
347
|
|
|
327
348
|
[MIT](./LICENSE) · [Antero Marques](https://github.com/marquesantero)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# CFA
|
|
1
|
+
# CFA v1.0.0
|
|
2
2
|
|
|
3
3
|
[](https://github.com/marquesantero/cfa/actions/workflows/ci.yml)
|
|
4
4
|
[](https://codecov.io/github/marquesantero/cfa)
|
|
5
5
|
[](https://github.com/astral-sh/ruff)
|
|
6
|
-
[](https://github.com/marquesantero/cfa/actions/workflows/ci.yml)
|
|
7
7
|
[](https://pypi.org/project/cfa-kernel/)
|
|
8
8
|
[](https://www.python.org/)
|
|
9
9
|
[](./LICENSE)
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
|
|
14
14
|
Instead of asking _"which agent or skill should act?"_, CFA asks _"which state transition is being requested, under which constraints, and can it be executed safely?"_ and produces a cryptographically verifiable decision.
|
|
15
15
|
|
|
16
|
+
> **Status:** alpha (`0.1.x`). APIs may shift between minor versions. Not yet recommended for unsupervised production use.
|
|
17
|
+
|
|
16
18
|
## Quick Start
|
|
17
19
|
|
|
18
20
|
```bash
|
|
@@ -65,20 +67,20 @@ CLI / MCP / Adapter / API
|
|
|
65
67
|
Decision JSON / Audit Trail / OTel / Prometheus
|
|
66
68
|
```
|
|
67
69
|
|
|
68
|
-
##
|
|
69
|
-
|
|
70
|
-
|
|
|
71
|
-
|
|
72
|
-
| SHA-256 audit trail
|
|
73
|
-
| State projection
|
|
74
|
-
| Lifecycle indices (IFo/IFs/IFg/IDI) |
|
|
75
|
-
| REPLAN
|
|
76
|
-
| Backend-agnostic
|
|
77
|
-
| Artifact hashing
|
|
78
|
-
| MCP protocol
|
|
79
|
-
| SQLite storage with retention
|
|
80
|
-
| Config
|
|
81
|
-
| Zero
|
|
70
|
+
## Capabilities
|
|
71
|
+
|
|
72
|
+
| Capability | What it gives you |
|
|
73
|
+
|------------|-------------------|
|
|
74
|
+
| SHA-256 audit trail | Tamper-evident chain of decisions, verifiable offline (`cfa audit verify`) |
|
|
75
|
+
| State projection | Each execution carries the typed state of the prior one — no implicit globals |
|
|
76
|
+
| Lifecycle indices (IFo/IFs/IFg/IDI) | Quantifies how often an intent recurs, stabilizes, and qualifies for promotion to a reusable skill |
|
|
77
|
+
| REPLAN cycle | Failed policy checks emit a structured remediation, not a hard stop |
|
|
78
|
+
| Backend-agnostic codegen | Same signature compiles to PySpark, ANSI SQL, or dbt — pluggable via `BackendRegistry` |
|
|
79
|
+
| Artifact hashing | Catalog, policy bundle, and signature are content-hashed and bound to every decision |
|
|
80
|
+
| MCP protocol | Any MCP-compatible agent can call CFA as a governance tool |
|
|
81
|
+
| SQLite + JSONL storage | First-class persistence with stats, retention cleanup, and vacuum |
|
|
82
|
+
| Config auto-discovery | `cfa.yaml` walked up the tree; all CLI commands respect it |
|
|
83
|
+
| Zero core dependencies | Optional extras for `yaml`, `otel`, `mcp`, `llm` — none required for the kernel |
|
|
82
84
|
|
|
83
85
|
## CLI
|
|
84
86
|
|
|
@@ -250,10 +252,14 @@ Expose CFA governance to any AI agent via Model Context Protocol:
|
|
|
250
252
|
src/cfa/
|
|
251
253
|
├── core/ Kernel, Planner, CodeGen, Conditions, Phases
|
|
252
254
|
├── policy/ PolicyEngine, PolicyBundle, Catalog validation
|
|
255
|
+
├── governance/ Standalone governance API (no LLM, no execution required)
|
|
253
256
|
├── validation/ Static, Runtime, Signature validation
|
|
257
|
+
├── resolution/ Intent → StateSignature resolver (LLM or rule-based backend)
|
|
258
|
+
├── normalizer/ Rule-based normalizer, LLM normalizer
|
|
259
|
+
├── behavior/ BehaviorSpec + Systematizer (human intent → policy rules)
|
|
254
260
|
├── audit/ AuditTrail, Context, Hashing
|
|
255
261
|
├── observability/ Metrics, OTel, Notify, Indices, Promotion
|
|
256
|
-
├──
|
|
262
|
+
├── lifecycle/ IFo/IFs/IFg/IDI indices + Promotion/Demotion engine
|
|
257
263
|
├── execution/ Partial execution, State projection
|
|
258
264
|
├── adapters/ LangGraph, OpenAI, CrewAI, AutoGen, DSPy
|
|
259
265
|
├── backends/ PySpark, SQL, dbt (pluggable)
|
|
@@ -282,6 +288,21 @@ All documentation at **[marquesantero.github.io/cfa](https://marquesantero.githu
|
|
|
282
288
|
- [Architecture Notes](https://marquesantero.github.io/cfa/docs/architecture-notes)
|
|
283
289
|
- [FAQ](https://marquesantero.github.io/cfa/docs/faq)
|
|
284
290
|
|
|
291
|
+
## Demos
|
|
292
|
+
|
|
293
|
+
Two complete notebooks, tested on Databricks with CFA v1.0.0, 0 errors:
|
|
294
|
+
|
|
295
|
+
| File | Format | Description |
|
|
296
|
+
|------|--------|-------------|
|
|
297
|
+
| `demos/cfa_demo_complete` | `.dbc` / `.py` | Rule-based governance — APPROVE, REPLAN, BLOCK, codegen, audit, storage |
|
|
298
|
+
| `demos/cfa_llm_demo_complete` | `.dbc` / `.py` | LLM-powered — semantic normalizer, systematizer, strict mode, compare |
|
|
299
|
+
|
|
300
|
+
Import the `.dbc` into Databricks or run the `.py` files anywhere.
|
|
301
|
+
|
|
302
|
+
## Contributing
|
|
303
|
+
|
|
304
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for development setup, test conventions, and the PR checklist. By participating, you agree to the [Code of Conduct](./CODE_OF_CONDUCT.md). Security issues: see [SECURITY.md](./SECURITY.md).
|
|
305
|
+
|
|
285
306
|
## License
|
|
286
307
|
|
|
287
308
|
[MIT](./LICENSE) · [Antero Marques](https://github.com/marquesantero)
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
# CFA Strategic Roadmap
|
|
2
|
+
|
|
3
|
+
## 0. Pre-flight Checks
|
|
4
|
+
|
|
5
|
+
- [x] 0.1 Run `uv run ruff check src/` — zero warnings
|
|
6
|
+
- [x] 0.2 Run `uv run pytest tests -q` — 534/534 passed
|
|
7
|
+
- [x] 0.3 Verify `README.md`, `website/docs/`, `website/i18n/` consistent with v1.0
|
|
8
|
+
- [x] 0.4 Verify `pyproject.toml` version, classifiers, deps correct
|
|
9
|
+
- [x] 0.5 Verify `.github/workflows/ci.yml` passes on push
|
|
10
|
+
- [x] 0.6 Verify `.github/workflows/deploy-pypi.yml` ready
|
|
11
|
+
- [x] 0.7 Verify `.github/workflows/deploy-docs.yml` deploys to gh-pages
|
|
12
|
+
- [x] 0.8 Write `SECURITY.md` — threat model (MCP injection, audit chain replay attacks, YAML parser fuzzing)
|
|
13
|
+
- [x] 0.9 Define release contingency plan
|
|
14
|
+
|
|
15
|
+
**Contingency plan**: Hotfix → branch `hotfix-1.0.x` → cherry-pick → bump patch → release.
|
|
16
|
+
Critical bug → GitHub Issue + Discord announcement + `git revert` as fallback.
|
|
17
|
+
Nuclear option: `pip install cfa-kernel!=<broken_version>` guidance + yank via PyPI.
|
|
18
|
+
|
|
19
|
+
- [x] 0.10 Run `pip-audit` and `safety check` — zero critical vulnerabilities in CFA core (41 in dev deps, none direct)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 1. API Freeze — v1.0 Stable Contracts (Week 1-2)
|
|
24
|
+
|
|
25
|
+
### 1.1 Define the public API surface
|
|
26
|
+
|
|
27
|
+
- [x] 1.1.1 Audit `src/cfa/__init__.py` — decide what is top-level vs submodule
|
|
28
|
+
- [x] 1.1.2 Freeze `StateSignature` constructor (required fields, defaults, types)
|
|
29
|
+
- [x] 1.1.3 Freeze `PolicyEngine` constructor + `evaluate()` signature
|
|
30
|
+
- [x] 1.1.4 Freeze `PolicyResult` fields (action, faults, reasoning, etc.)
|
|
31
|
+
- [x] 1.1.5 Freeze `RuntimeGate` constructor + `validate()`, `guard()`, `scope()`
|
|
32
|
+
- [x] 1.1.6 Freeze `GateConfig`, `GateResult` fields
|
|
33
|
+
- [x] 1.1.7 Freeze `KernelConfig` fields
|
|
34
|
+
- [x] 1.1.8 Freeze `KernelOrchestrator` constructor + `process()`
|
|
35
|
+
- [x] 1.1.9 Freeze `KernelResult` fields
|
|
36
|
+
- [x] 1.1.10 Freeze `AuditTrail` constructor + `record()`, `verify_chain()`, `events`
|
|
37
|
+
- [x] 1.1.11 Freeze `OpenAILMProvider` + `LLMNormalizerBackend` (LLM surface)
|
|
38
|
+
|
|
39
|
+
**Done**: Added `PolicyResult` to `cfa.policy` lazy loader. Added `KernelResult` to `cfa.core` lazy loader. MCP public API is `serve()`.
|
|
40
|
+
|
|
41
|
+
### 1.2 Deprecate / hide internal-only modules
|
|
42
|
+
|
|
43
|
+
- [ ] 1.2.1 Audit `core/phases/runner.py` — internal, should not be public
|
|
44
|
+
- [ ] 1.2.2 Audit `core/planner.py`, `core/codegen.py` — internal helpers
|
|
45
|
+
- [ ] 1.2.3 Audit `execution/*.py` — sandbox internals
|
|
46
|
+
- [ ] 1.2.4 Mark all internal modules with `_` prefix or `__all__` restriction
|
|
47
|
+
- [ ] 1.2.5 Document public vs internal in `api.md`
|
|
48
|
+
|
|
49
|
+
### 1.3 v1.0 release
|
|
50
|
+
|
|
51
|
+
- [ ] 1.3.1 Bump version to `1.0.0` everywhere
|
|
52
|
+
- [ ] 1.3.2 Update `README.md` — remove alpha warnings, emphasize stability
|
|
53
|
+
- [ ] 1.3.3 Update `website/docs/intro.md` — "production ready" language
|
|
54
|
+
- [ ] 1.3.4 Write changelog (v0.1.0 → v1.0.0 highlights)
|
|
55
|
+
- [ ] 1.3.5 Tag `v1.0.0` + publish to PyPI
|
|
56
|
+
- [ ] 1.3.6 Write announcement blog post (Medium/Dev.to + website blog)
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 2. MCP Server — Production-Ready (Week 1-2, parallel)
|
|
61
|
+
|
|
62
|
+
### 2.1 Hardening
|
|
63
|
+
|
|
64
|
+
- [ ] 2.1.1 Add authentication (API key / token) to MCP server
|
|
65
|
+
- [ ] 2.1.2 Add rate limiting per tool
|
|
66
|
+
- [ ] 2.1.3 Add request/response logging to audit trail
|
|
67
|
+
- [ ] 2.1.4 Add health check endpoint
|
|
68
|
+
- [ ] 2.1.5 Add tool: `cfa_verify_chain` — verify audit hash chain
|
|
69
|
+
- [ ] 2.1.6 Add tool: `cfa_lifecycle_status` — expose IFo/IFs/IFg/IDI
|
|
70
|
+
- [ ] 2.1.7 Add tool: `cfa_compliance_check` — check against bundle
|
|
71
|
+
- [ ] 2.1.8 Define SLOs: tool call latency p99 < 500ms, uptime > 99%
|
|
72
|
+
- [ ] 2.1.9 Load test: 100 req/s sustained for 10 minutes
|
|
73
|
+
- [ ] 2.1.10 Fuzz test MCP tool inputs (property-based testing with Hypothesis)
|
|
74
|
+
- [ ] 2.1.11 Test with Claude Desktop, Cursor, Windsurf
|
|
75
|
+
|
|
76
|
+
### 2.2 Distribution
|
|
77
|
+
|
|
78
|
+
- [ ] 2.2.1 Package MCP server as standalone entry point (`cfa-mcp` or `uvx cfa`)
|
|
79
|
+
- [ ] 2.2.2 Write install guide for Claude Desktop config JSON
|
|
80
|
+
- [ ] 2.2.3 Submit to Smithery marketplace
|
|
81
|
+
- [ ] 2.2.4 Submit to Glama marketplace
|
|
82
|
+
- [ ] 2.2.5 Submit to mcp.run marketplace
|
|
83
|
+
- [ ] 2.2.6 Write blog post: "CFA MCP: Governance as Native Tool for AI Agents"
|
|
84
|
+
|
|
85
|
+
### 2.3 Documentation
|
|
86
|
+
|
|
87
|
+
- [ ] 2.3.1 Update `website/docs/mcp-server.md` with auth + all tools
|
|
88
|
+
- [ ] 2.3.2 Add MCP quickstart video (2 min)
|
|
89
|
+
- [ ] 2.3.3 Add "CFA + Claude" end-to-end example
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 3. Developer Experience — `cfa init --template` (Week 3)
|
|
94
|
+
|
|
95
|
+
### 3.1 Template system
|
|
96
|
+
|
|
97
|
+
- [ ] 3.1.1 Design template directory structure (`cfa/templates/`)
|
|
98
|
+
- [ ] 3.1.2 Implement `cfa init --template <name>` CLI command
|
|
99
|
+
- [ ] 3.1.3 Template: `fastapi-cfa` — FastAPI + RuntimeGate guard
|
|
100
|
+
- [ ] 3.1.4 Template: `langgraph-cfa` — LangGraph agent + cfa_guard
|
|
101
|
+
- [ ] 3.1.5 Template: `dbt-cfa` — dbt models + CFA validation step
|
|
102
|
+
- [ ] 3.1.6 Template: `mcp-cfa` — MCP server skeleton with CFA tools
|
|
103
|
+
- [ ] 3.1.7 Template: `streaming-placeholder` — Structured Streaming stub with explicit README: "Experimental — streaming governance coming in v1.3"
|
|
104
|
+
|
|
105
|
+
### 3.2 Onboarding flow
|
|
106
|
+
|
|
107
|
+
- [ ] 3.2.1 `cfa init` without args = interactive wizard (pick template)
|
|
108
|
+
- [ ] 3.2.2 Each template generates: `cfa.yaml`, catalog stub, policy stub, README
|
|
109
|
+
- [ ] 3.2.3 Generated project passes `cfa validate` out of the box
|
|
110
|
+
- [ ] 3.2.4 Generated project has one working test
|
|
111
|
+
|
|
112
|
+
### 3.3 Documentation
|
|
113
|
+
|
|
114
|
+
- [ ] 3.3.1 Update `website/docs/getting-started.md` with templates
|
|
115
|
+
- [ ] 3.3.2 Write "5 Minute Quickstart" with template
|
|
116
|
+
- [ ] 3.3.3 Write "From Zero to Governed Pipeline" tutorial
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 4. Documentation as Product (Week 3-4)
|
|
121
|
+
|
|
122
|
+
### 4.1 Quickstart
|
|
123
|
+
|
|
124
|
+
- [ ] 4.1.1 Write 5-minute quickstart (< 500 words, copy-paste runnable)
|
|
125
|
+
- [ ] 4.1.2 Embed on website landing page above the fold
|
|
126
|
+
- [ ] 4.1.3 Test quickstart on clean Ubuntu, macOS, Windows (PowerShell)
|
|
127
|
+
|
|
128
|
+
### 4.2 Tutorials
|
|
129
|
+
|
|
130
|
+
- [ ] 4.2.1 "Governed PySpark Pipeline" end-to-end tutorial
|
|
131
|
+
- [ ] 4.2.2 "LLM Agent with CFA Guardrails" tutorial
|
|
132
|
+
- [ ] 4.2.3 "Multi-Agent Governance" tutorial (3+ agents)
|
|
133
|
+
- [ ] 4.2.4 "Compliance Passport" tutorial (EU AI Act → CFA rules)
|
|
134
|
+
|
|
135
|
+
### 4.3 Visuals
|
|
136
|
+
|
|
137
|
+
- [ ] 4.3.1 Architecture diagram (SVG, light + dark mode)
|
|
138
|
+
- [ ] 4.3.2 5-phase pipeline flowchart
|
|
139
|
+
- [ ] 4.3.3 Decision tree: APPROVE vs REPLAN vs BLOCK
|
|
140
|
+
- [ ] 4.3.4 Hero animation / logo
|
|
141
|
+
|
|
142
|
+
### 4.4 Voice & Tone
|
|
143
|
+
|
|
144
|
+
- [ ] 4.4.1 Define writing guidelines (professional, not academic; confident, not salesy)
|
|
145
|
+
- [ ] 4.4.2 Audit all docs for consistency
|
|
146
|
+
- [ ] 4.4.3 Sync EN and PT-BR docs for all critical pages
|
|
147
|
+
|
|
148
|
+
### 4.5 PT-BR Critical Sync (MANDATORY — Brazilian market is primary target)
|
|
149
|
+
|
|
150
|
+
- [ ] 4.5.1 Rewrite `guide.md` PT-BR (39 → full translation matching EN)
|
|
151
|
+
- [ ] 4.5.2 Complete `architecture-notes.md` PT-BR (7 missing sections)
|
|
152
|
+
- [ ] 4.5.3 Complete `policy-bundles.md` PT-BR (3 missing conditions + programmatic section)
|
|
153
|
+
- [ ] 4.5.4 Complete `behavior-spec.md` PT-BR (add Python code examples)
|
|
154
|
+
- [ ] 4.5.5 Complete `reporting.md` PT-BR (add `generate_report()` API examples)
|
|
155
|
+
- [ ] 4.5.6 Verify LGPD terminology consistency across all PT-BR docs
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 5. Compliance Pack — EU AI Act + LGPD (Week 4)
|
|
160
|
+
|
|
161
|
+
### 5.1 EU AI Act mapping
|
|
162
|
+
|
|
163
|
+
- [ ] 5.1.1 Read EU AI Act articles relevant to data/AI governance
|
|
164
|
+
- [ ] 5.1.2 Map Article 9 (risk management) → CFA policy rules
|
|
165
|
+
- [ ] 5.1.3 Map Article 10 (data governance) → CFA catalog constraints
|
|
166
|
+
- [ ] 5.1.4 Map Article 12 (record-keeping) → CFA audit trail
|
|
167
|
+
- [ ] 5.1.5 Map Article 13 (transparency) → CFA reporting
|
|
168
|
+
- [ ] 5.1.6 Map Article 15 (accuracy, robustness) → CFA validation
|
|
169
|
+
- [ ] 5.1.7 Map Article 17 (quality management) → CFA lifecycle (IFo/IFs/IFg/IDI)
|
|
170
|
+
- [ ] 5.1.8 Create `policies/eu-ai-act-v1.yaml` policy bundle
|
|
171
|
+
|
|
172
|
+
### 5.2 LGPD mapping
|
|
173
|
+
|
|
174
|
+
- [ ] 5.2.1 Map Art. 6 (consent/legitimate interest) → CFA domain constraints
|
|
175
|
+
- [ ] 5.2.2 Map Art. 11-13 (anonymization, pseudonymization) → CFA PII rules
|
|
176
|
+
- [ ] 5.2.3 Map Art. 16 (security) → CFA audit + hash chain
|
|
177
|
+
- [ ] 5.2.4 Map Art. 18 (portability) → CFA data contracts
|
|
178
|
+
- [ ] 5.2.5 Map Art. 37-38 (DPO, impact assessment) → CFA reports
|
|
179
|
+
- [ ] 5.2.6 Create `policies/lgpd-v1.yaml` policy bundle
|
|
180
|
+
|
|
181
|
+
### 5.3 Compliance reporting
|
|
182
|
+
|
|
183
|
+
- [ ] 5.3.1 Generate compliance report: `cfa report compliance --bundle eu-ai-act-v1`
|
|
184
|
+
- [ ] 5.3.2 Export audit trail as signed PDF (for DPO/auditor)
|
|
185
|
+
- [ ] 5.3.3 Document: "How CFA Demonstrates EU AI Act Compliance" (white paper)
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 6. Observability — OTel + Prometheus + Grafana (Week 5)
|
|
190
|
+
|
|
191
|
+
### 6.1 OpenTelemetry integration
|
|
192
|
+
|
|
193
|
+
- [ ] 6.1.1 Export spans for: normalize, evaluate, generate, execute, validate phases
|
|
194
|
+
- [ ] 6.1.2 Export span attributes: intent, domain, target_layer, decision, duration_ms
|
|
195
|
+
- [ ] 6.1.3 Export metrics: evaluations_total, blocks_total, replans_total, latency_p99
|
|
196
|
+
- [ ] 6.1.4 Export traces: end-to-end trace_id from intent → decision
|
|
197
|
+
|
|
198
|
+
### 6.2 Dashboards
|
|
199
|
+
|
|
200
|
+
- [ ] 6.2.1 Grafana dashboard JSON: governance overview (decisions pie, latency heatmap)
|
|
201
|
+
- [ ] 6.2.2 Grafana dashboard JSON: lifecycle indices over time (IFo/IFs/IFg/IDI)
|
|
202
|
+
- [ ] 6.2.3 Grafana dashboard JSON: compliance posture (rules fired, remediations)
|
|
203
|
+
- [ ] 6.2.4 Add to docs: "Monitoring CFA with Grafana"
|
|
204
|
+
|
|
205
|
+
### 6.3 Benchmarks
|
|
206
|
+
|
|
207
|
+
- [ ] 6.3.1 Measure `PolicyEngine.evaluate()` latency (p50, p95, p99)
|
|
208
|
+
- [ ] 6.3.2 Measure `KernelOrchestrator.process()` end-to-end latency
|
|
209
|
+
- [ ] 6.3.3 Measure throughput (evaluations/second) on commodity hardware
|
|
210
|
+
- [ ] 6.3.4 Measure SQLite storage performance (writes/second, query latency)
|
|
211
|
+
- [ ] 6.3.5 Publish benchmark page on website
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 7. Integration with Catalogs (Week 6-7)
|
|
216
|
+
|
|
217
|
+
### 7.1 DataHub connector
|
|
218
|
+
|
|
219
|
+
- [ ] 7.1.1 Implement `CatalogLoader` abstract base class
|
|
220
|
+
- [ ] 7.1.2 Implement `DataHubCatalogLoader` (read-only via DataHub REST API)
|
|
221
|
+
- [ ] 7.1.3 Map DataHub dataset entities → CFA catalog dict
|
|
222
|
+
- [ ] 7.1.4 Support: `cfa evaluate --catalog datahub://instance:8080`
|
|
223
|
+
- [ ] 7.1.5 Document DataHub integration
|
|
224
|
+
|
|
225
|
+
### 7.2 OpenMetadata connector
|
|
226
|
+
|
|
227
|
+
- [ ] 7.2.1 Implement `OpenMetadataCatalogLoader` (read-only via REST API)
|
|
228
|
+
- [ ] 7.2.2 Map OpenMetadata entities → CFA catalog dict
|
|
229
|
+
- [ ] 7.2.3 Support: `cfa evaluate --catalog openmetadata://instance:8585`
|
|
230
|
+
- [ ] 7.2.4 Document OpenMetadata integration
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## 8. Lifecycle Dashboards — CDO-Ready Reports (Week 6-7)
|
|
235
|
+
|
|
236
|
+
### 8.1 Live dashboard
|
|
237
|
+
|
|
238
|
+
- [ ] 8.1.1 Upgrade `cfa serve` to serve lifecycle HTML dashboard
|
|
239
|
+
- [ ] 8.1.2 Dashboard: pipeline health cards (IFo, IFs, IFg, IDI per skill)
|
|
240
|
+
- [ ] 8.1.3 Dashboard: trend charts (30-day window, Chart.js)
|
|
241
|
+
- [ ] 8.1.4 Dashboard: promotion recommendations (CANDIDATE → ACTIVE → WATCHLIST)
|
|
242
|
+
- [ ] 8.1.5 Dashboard: cost DBU tracker per pipeline
|
|
243
|
+
|
|
244
|
+
### 8.2 Export
|
|
245
|
+
|
|
246
|
+
- [ ] 8.2.1 `cfa report lifecycle --format pdf` — signed PDF for auditors
|
|
247
|
+
- [ ] 8.2.2 `cfa report lifecycle --format csv` — raw data for analysts
|
|
248
|
+
- [ ] 8.2.3 PDF includes: SHA-256 hash, timestamp, auditor signature block
|
|
249
|
+
|
|
250
|
+
### 8.3 Alerts
|
|
251
|
+
|
|
252
|
+
- [ ] 8.3.1 IFg drop below 1.0 → send notification
|
|
253
|
+
- [ ] 8.3.2 IDI > 0.25 drift → send notification
|
|
254
|
+
- [ ] 8.3.3 Integrate with Slack/Teams webhooks
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## 9. Public Launch — v1.0 (Week 8-10)
|
|
259
|
+
|
|
260
|
+
### 9.1 Launch assets
|
|
261
|
+
|
|
262
|
+
- [ ] 9.1.1 Landing page refresh (hero, value prop, quickstart above fold)
|
|
263
|
+
- [ ] 9.1.2 Launch blog post: "CFA v1.0: Governance Kernel for the Agent Era"
|
|
264
|
+
- [ ] 9.1.3 Demo video (5 min): full pipeline + LLM + MCP + compliance report
|
|
265
|
+
- [ ] 9.1.4 Social cards (Open Graph, Twitter) for sharing
|
|
266
|
+
|
|
267
|
+
### 9.2 Distribution
|
|
268
|
+
|
|
269
|
+
- [ ] 9.2.1 PyPI: `cfa-kernel` v1.0.0 published
|
|
270
|
+
- [ ] 9.2.2 Smithery/Glama/MCP.run: CFA MCP server listed
|
|
271
|
+
- [ ] 9.2.3 GitHub: README badges all green, 534 tests
|
|
272
|
+
- [ ] 9.2.4 Website: docs clean, no broken links, version 1.0.0 everywhere
|
|
273
|
+
|
|
274
|
+
### 9.3 Outreach
|
|
275
|
+
|
|
276
|
+
- [ ] 9.3.1 Dev.to / Medium post: "Why Every AI Agent Needs a Governance Kernel"
|
|
277
|
+
- [ ] 9.3.2 Hacker News Show HN: CFA
|
|
278
|
+
- [ ] 9.3.3 r/MachineLearning, r/dataengineering, r/Python cross-posts
|
|
279
|
+
- [ ] 9.3.4 LinkedIn article + video (personal brand: Antero Marques)
|
|
280
|
+
- [ ] 9.3.5 Reach out to 20 early adopters (personal DMs, data/AI communities)
|
|
281
|
+
|
|
282
|
+
### 9.4 Community
|
|
283
|
+
|
|
284
|
+
- [ ] 9.4.1 Create Discord server
|
|
285
|
+
- [ ] 9.4.2 Create "CFA Ambassadors" program (3-5 initial members)
|
|
286
|
+
- [ ] 9.4.3 GitHub Discussions enabled + seeded with FAQ
|
|
287
|
+
- [ ] 9.4.4 CONTRIBUTING.md + good-first-issue labels
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## 10. Metrics & Iteration (Week 11-12)
|
|
292
|
+
|
|
293
|
+
### 10.1 Success metrics (6-month targets — conservative / stretch)
|
|
294
|
+
|
|
295
|
+
- [ ] 10.1.1 GitHub: 300 stars conservative / 1,000 stretch
|
|
296
|
+
- [ ] 10.1.2 PyPI: 30 downloads/day conservative / 100 stretch
|
|
297
|
+
- [ ] 10.1.3 MCP: listed in 3+ marketplaces
|
|
298
|
+
- [ ] 10.1.4 Community: 50 Discord members conservative / 100 stretch
|
|
299
|
+
- [ ] 10.1.5 Case studies: 1 public conservative / 3 stretch
|
|
300
|
+
- [ ] 10.1.6 Blog: 12 posts published
|
|
301
|
+
|
|
302
|
+
### 10.2 Feedback loop
|
|
303
|
+
|
|
304
|
+
- [ ] 10.2.1 Survey 20 early adopters (what worked, what's missing, what's confusing)
|
|
305
|
+
- [ ] 10.2.2 Analyze GitHub issues: top 3 pain points
|
|
306
|
+
- [ ] 10.2.3 Analyze MCP usage: which tools are used most
|
|
307
|
+
- [ ] 10.2.4 Prioritize Horizon 2 items based on feedback
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## 11. Sustainability Plan
|
|
312
|
+
|
|
313
|
+
### 11.1 Funding
|
|
314
|
+
|
|
315
|
+
- [ ] 11.1.1 Identify 3 potential enterprise sponsors (month 3)
|
|
316
|
+
- [ ] 11.1.2 Apply for 1 open-source grant (CNCF, Linux Foundation AI, NLnet)
|
|
317
|
+
- [ ] 11.1.3 Explore GitHub Sponsors setup
|
|
318
|
+
|
|
319
|
+
### 11.2 Bus factor mitigation
|
|
320
|
+
|
|
321
|
+
- [ ] 11.2.1 Document architecture for external contributors (`ARCHITECTURE.md`)
|
|
322
|
+
- [ ] 11.2.2 Record 3 codebase walkthrough videos (kernel, policy engine, MCP)
|
|
323
|
+
- [ ] 11.2.3 Tag 10+ "good first issue" tickets
|
|
324
|
+
|
|
325
|
+
### 11.3 Maintainer health
|
|
326
|
+
|
|
327
|
+
- [ ] 11.3.1 Define maintainer vacation policy (who covers PR review?)
|
|
328
|
+
- [ ] 11.3.2 Set up CODEOWNERS file
|
|
329
|
+
- [ ] 11.3.3 Plan burnout checkpoints (monthly retro: how am I doing?)
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Appendix A — i18n Sync Status
|
|
334
|
+
|
|
335
|
+
| Page | EN | PT-BR | Delta |
|
|
336
|
+
|------|----|-------|-------|
|
|
337
|
+
| intro.md | ✅ | ✅ | ~sync |
|
|
338
|
+
| api.md | ✅ | ✅ | ~sync |
|
|
339
|
+
| faq.md | ✅ | ⚠️ | minor |
|
|
340
|
+
| guide.md | ✅ | ❌ | 39 vs 299 lines — needs complete rewrite |
|
|
341
|
+
| architecture-notes.md | ✅ | ❌ | 7 vs 13 sections missing |
|
|
342
|
+
| behavior-spec.md | ✅ | ❌ | missing Python examples |
|
|
343
|
+
| policy-bundles.md | ✅ | ❌ | missing 3 conditions + programmatic section |
|
|
344
|
+
| reporting.md | ✅ | ❌ | missing generate_report() API |
|
|
345
|
+
| mcp-server.md | ✅ | ⚠️ | simplified structure |
|
|
346
|
+
| integrations/langgraph.md | ✅ | ⚠️ | needs verification |
|
|
347
|
+
| integrations/openai-agents.md | ✅ | ⚠️ | needs verification |
|
|
348
|
+
| whitepaper.md | ✅ | ✅ | ~sync |
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## Appendix B — Horizon 2 & 3 (Future)
|
|
353
|
+
|
|
354
|
+
### B.1 Great Expectations integration (Horizon 2)
|
|
355
|
+
- `backend="great_expectations"` → generates `expectation_suite` from `StateSignature`
|
|
356
|
+
- CFA as "governance upstream", GE as "quality downstream"
|
|
357
|
+
|
|
358
|
+
### B.2 Backends enterprise (Horizon 3)
|
|
359
|
+
- Snowflake (via Snowpark Python)
|
|
360
|
+
- BigQuery (via `google-cloud-bigquery`)
|
|
361
|
+
- Databricks SQL (via `databricks-sql-connector`)
|
|
362
|
+
- Each as pluggable `CodeGenBackend`
|
|
363
|
+
|
|
364
|
+
### B.3 Streaming governance (Horizon 3)
|
|
365
|
+
- Spark Structured Streaming micro-batch governance
|
|
366
|
+
- Kafka Connect governance hooks
|
|
367
|
+
- Stateful exactly-once audit for streaming
|
|
368
|
+
|
|
369
|
+
### B.4 CFA Cloud SaaS (Horizon 3)
|
|
370
|
+
- Managed kernel with web console
|
|
371
|
+
- Team policies, shared catalogs
|
|
372
|
+
- Pay-per-API-key or per-seat pricing
|
|
373
|
+
|
|
374
|
+
### B.5 Certified Agent marketplace (Horizon 3)
|
|
375
|
+
- "CFA-Certified Agent" badge
|
|
376
|
+
- Registry of agents that run on CFA
|
|
377
|
+
- Network effects: more agents → more CFA adoption
|