dataenginex 0.3.5__tar.gz → 0.4.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.
- dataenginex-0.4.0/.claude/commands/new-feature.md +22 -0
- dataenginex-0.4.0/.claude/commands/validate.md +44 -0
- dataenginex-0.4.0/.claude/settings.json +71 -0
- dataenginex-0.4.0/.env.template +73 -0
- dataenginex-0.4.0/.github/ISSUE_TEMPLATE/bug_report.yml +107 -0
- dataenginex-0.4.0/.github/ISSUE_TEMPLATE/config.yml +20 -0
- dataenginex-0.4.0/.github/ISSUE_TEMPLATE/feature_request.yml +110 -0
- dataenginex-0.4.0/.github/PULL_REQUEST_TEMPLATE.md +75 -0
- dataenginex-0.4.0/.github/dependabot.yml +12 -0
- dataenginex-0.4.0/.github/labels.yml +107 -0
- dataenginex-0.4.0/.github/release-pr-template.md +23 -0
- dataenginex-0.4.0/.github/workflows/auto-pr.yml +23 -0
- dataenginex-0.4.0/.github/workflows/ci.yml +69 -0
- dataenginex-0.4.0/.github/workflows/enforce-dev-to-main.yml +11 -0
- dataenginex-0.4.0/.github/workflows/release.yml +69 -0
- dataenginex-0.4.0/.github/workflows/security.yml +17 -0
- dataenginex-0.4.0/.gitignore +97 -0
- dataenginex-0.4.0/.gitleaks.toml +4 -0
- dataenginex-0.4.0/.pre-commit-config.yaml +45 -0
- dataenginex-0.4.0/.python-version +1 -0
- dataenginex-0.4.0/CHANGELOG.md +572 -0
- dataenginex-0.4.0/CLAUDE.md +69 -0
- dataenginex-0.4.0/CODEOWNERS +4 -0
- dataenginex-0.4.0/CODE_OF_CONDUCT.md +57 -0
- dataenginex-0.4.0/CONTRIBUTING.md +19 -0
- dataenginex-0.4.0/Dockerfile +53 -0
- dataenginex-0.4.0/LICENSE +21 -0
- dataenginex-0.4.0/PKG-INFO +156 -0
- dataenginex-0.4.0/README.md +149 -0
- dataenginex-0.4.0/SECURITY.md +71 -0
- dataenginex-0.4.0/docker-compose.test.yml +55 -0
- dataenginex-0.4.0/docs/adr/0000-template.md +71 -0
- dataenginex-0.4.0/docs/adr/0001-medallion-architecture.md +171 -0
- dataenginex-0.4.0/docs/api-reference/api.md +63 -0
- dataenginex-0.4.0/docs/api-reference/core.md +5 -0
- dataenginex-0.4.0/docs/api-reference/dashboard.md +8 -0
- dataenginex-0.4.0/docs/api-reference/data.md +5 -0
- dataenginex-0.4.0/docs/api-reference/index.md +15 -0
- dataenginex-0.4.0/docs/api-reference/lakehouse.md +5 -0
- dataenginex-0.4.0/docs/api-reference/middleware.md +5 -0
- dataenginex-0.4.0/docs/api-reference/ml.md +45 -0
- dataenginex-0.4.0/docs/api-reference/plugins.md +5 -0
- dataenginex-0.4.0/docs/api-reference/warehouse.md +5 -0
- dataenginex-0.4.0/docs/architecture.md +182 -0
- dataenginex-0.4.0/docs/ci-cd.md +361 -0
- dataenginex-0.4.0/docs/contributing.md +106 -0
- dataenginex-0.4.0/docs/development.md +212 -0
- dataenginex-0.4.0/docs/index.md +10 -0
- dataenginex-0.4.0/docs/observability.md +796 -0
- dataenginex-0.4.0/docs/quickstart.md +155 -0
- dataenginex-0.4.0/docs/release-notes.md +141 -0
- dataenginex-0.4.0/docs/sdlc.md +206 -0
- dataenginex-0.4.0/docs/security-scanning.md +56 -0
- dataenginex-0.4.0/examples/01_hello_pipeline.py +84 -0
- dataenginex-0.4.0/examples/02_api_quickstart.py +74 -0
- dataenginex-0.4.0/examples/03_quality_gate.py +113 -0
- dataenginex-0.4.0/examples/04_ml_training.py +126 -0
- dataenginex-0.4.0/examples/05_rag_demo.py +112 -0
- dataenginex-0.4.0/examples/06_llm_quickstart.py +66 -0
- dataenginex-0.4.0/examples/07_api_ingestion.py +213 -0
- dataenginex-0.4.0/examples/08_spark_ml.py +208 -0
- dataenginex-0.4.0/examples/09_feature_engineering.py +186 -0
- dataenginex-0.4.0/examples/10_model_analysis.py +164 -0
- dataenginex-0.4.0/examples/GUIDE.md +59 -0
- dataenginex-0.4.0/examples/dashboard/dashboard_config.yaml +20 -0
- dataenginex-0.4.0/examples/dashboard/run_dashboard.py +25 -0
- dataenginex-0.4.0/examples/data/events.csv +11 -0
- dataenginex-0.4.0/examples/data/users.csv +11 -0
- dataenginex-0.4.0/examples/dex.yaml +82 -0
- dataenginex-0.4.0/examples/ecommerce/data/customers.csv +21 -0
- dataenginex-0.4.0/examples/ecommerce/data/orders.csv +51 -0
- dataenginex-0.4.0/examples/ecommerce/data/products.csv +11 -0
- dataenginex-0.4.0/examples/ecommerce/dex.yaml +142 -0
- dataenginex-0.4.0/examples/ecommerce/run_all.py +426 -0
- dataenginex-0.4.0/examples/movies.csv +9 -0
- dataenginex-0.4.0/poe_tasks.toml +162 -0
- dataenginex-0.4.0/pyproject.toml +163 -0
- dataenginex-0.4.0/scripts/localstack/init.sh +7 -0
- dataenginex-0.4.0/src/dataenginex/README.md +106 -0
- dataenginex-0.4.0/src/dataenginex/RELEASE_NOTES.md +48 -0
- dataenginex-0.4.0/src/dataenginex/__init__.py +96 -0
- dataenginex-0.4.0/src/dataenginex/ai/__init__.py +117 -0
- dataenginex-0.4.0/src/dataenginex/ai/agents/__init__.py +12 -0
- dataenginex-0.4.0/src/dataenginex/ai/agents/builtin.py +193 -0
- dataenginex-0.4.0/src/dataenginex/ai/llm.py +678 -0
- dataenginex-0.4.0/src/dataenginex/ai/memory/__init__.py +16 -0
- dataenginex-0.4.0/src/dataenginex/ai/memory/base.py +59 -0
- dataenginex-0.4.0/src/dataenginex/ai/memory/episodic.py +40 -0
- dataenginex-0.4.0/src/dataenginex/ai/memory/long_term.py +52 -0
- dataenginex-0.4.0/src/dataenginex/ai/observability/__init__.py +15 -0
- dataenginex-0.4.0/src/dataenginex/ai/observability/audit.py +45 -0
- dataenginex-0.4.0/src/dataenginex/ai/observability/cost.py +57 -0
- dataenginex-0.4.0/src/dataenginex/ai/observability/metrics.py +26 -0
- dataenginex-0.4.0/src/dataenginex/ai/retrieval/__init__.py +14 -0
- dataenginex-0.4.0/src/dataenginex/ai/retrieval/builtin.py +184 -0
- dataenginex-0.4.0/src/dataenginex/ai/retrieval/graph.py +159 -0
- dataenginex-0.4.0/src/dataenginex/ai/routing/__init__.py +8 -0
- dataenginex-0.4.0/src/dataenginex/ai/routing/anthropic.py +58 -0
- dataenginex-0.4.0/src/dataenginex/ai/routing/guarded.py +80 -0
- dataenginex-0.4.0/src/dataenginex/ai/routing/ollama.py +48 -0
- dataenginex-0.4.0/src/dataenginex/ai/routing/openai.py +58 -0
- dataenginex-0.4.0/src/dataenginex/ai/routing/router.py +56 -0
- dataenginex-0.4.0/src/dataenginex/ai/runtime/__init__.py +27 -0
- dataenginex-0.4.0/src/dataenginex/ai/runtime/checkpoint.py +31 -0
- dataenginex-0.4.0/src/dataenginex/ai/runtime/executor.py +173 -0
- dataenginex-0.4.0/src/dataenginex/ai/runtime/sandbox.py +257 -0
- dataenginex-0.4.0/src/dataenginex/ai/tools/__init__.py +57 -0
- dataenginex-0.4.0/src/dataenginex/ai/tools/builtin.py +259 -0
- dataenginex-0.4.0/src/dataenginex/ai/vectorstore.py +540 -0
- dataenginex-0.4.0/src/dataenginex/ai/workflows/__init__.py +9 -0
- dataenginex-0.4.0/src/dataenginex/ai/workflows/conditions.py +48 -0
- dataenginex-0.4.0/src/dataenginex/ai/workflows/dag.py +124 -0
- dataenginex-0.4.0/src/dataenginex/ai/workflows/human_loop.py +47 -0
- dataenginex-0.4.0/src/dataenginex/api/__init__.py +36 -0
- dataenginex-0.4.0/src/dataenginex/api/errors.py +43 -0
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/api/pagination.py +25 -5
- dataenginex-0.4.0/src/dataenginex/api/schemas.py +141 -0
- dataenginex-0.4.0/src/dataenginex/cli/__init__.py +3 -0
- dataenginex-0.4.0/src/dataenginex/cli/main.py +104 -0
- dataenginex-0.4.0/src/dataenginex/cli/run.py +69 -0
- dataenginex-0.4.0/src/dataenginex/cli/secops.py +125 -0
- dataenginex-0.4.0/src/dataenginex/cli/train.py +171 -0
- dataenginex-0.4.0/src/dataenginex/config/__init__.py +13 -0
- dataenginex-0.4.0/src/dataenginex/config/defaults.py +26 -0
- dataenginex-0.4.0/src/dataenginex/config/loader.py +225 -0
- dataenginex-0.4.0/src/dataenginex/config/schema.py +298 -0
- dataenginex-0.4.0/src/dataenginex/core/__init__.py +83 -0
- dataenginex-0.4.0/src/dataenginex/core/exceptions.py +101 -0
- dataenginex-0.4.0/src/dataenginex/core/interfaces.py +232 -0
- dataenginex-0.4.0/src/dataenginex/core/medallion_architecture.py +485 -0
- dataenginex-0.4.0/src/dataenginex/core/quality.py +356 -0
- dataenginex-0.4.0/src/dataenginex/core/registry.py +109 -0
- dataenginex-0.4.0/src/dataenginex/core/schemas.py +173 -0
- dataenginex-0.4.0/src/dataenginex/core/validators.py +105 -0
- dataenginex-0.4.0/src/dataenginex/data/__init__.py +63 -0
- dataenginex-0.4.0/src/dataenginex/data/connectors/__init__.py +39 -0
- dataenginex-0.4.0/src/dataenginex/data/connectors/_utils.py +17 -0
- dataenginex-0.4.0/src/dataenginex/data/connectors/csv.py +96 -0
- dataenginex-0.4.0/src/dataenginex/data/connectors/dbt.py +158 -0
- dataenginex-0.4.0/src/dataenginex/data/connectors/duckdb.py +103 -0
- dataenginex-0.3.5/src/dataenginex/data/connectors.py → dataenginex-0.4.0/src/dataenginex/data/connectors/legacy.py +364 -332
- dataenginex-0.4.0/src/dataenginex/data/connectors/parquet.py +108 -0
- dataenginex-0.4.0/src/dataenginex/data/connectors/spark.py +141 -0
- dataenginex-0.4.0/src/dataenginex/data/pipeline/__init__.py +15 -0
- dataenginex-0.4.0/src/dataenginex/data/pipeline/dag.py +67 -0
- dataenginex-0.4.0/src/dataenginex/data/pipeline/run_history.py +89 -0
- dataenginex-0.4.0/src/dataenginex/data/pipeline/runner.py +534 -0
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/data/profiler.py +21 -4
- dataenginex-0.4.0/src/dataenginex/data/quality/__init__.py +7 -0
- dataenginex-0.4.0/src/dataenginex/data/quality/gates.py +192 -0
- dataenginex-0.4.0/src/dataenginex/data/quality/spark.py +89 -0
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/data/registry.py +161 -148
- dataenginex-0.4.0/src/dataenginex/data/transforms/__init__.py +10 -0
- dataenginex-0.4.0/src/dataenginex/data/transforms/sql.py +171 -0
- dataenginex-0.4.0/src/dataenginex/engine.py +1023 -0
- dataenginex-0.4.0/src/dataenginex/lakehouse/__init__.py +48 -0
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/lakehouse/catalog.py +172 -145
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/lakehouse/partitioning.py +10 -0
- dataenginex-0.4.0/src/dataenginex/lakehouse/storage.py +722 -0
- dataenginex-0.4.0/src/dataenginex/middleware/__init__.py +43 -0
- dataenginex-0.4.0/src/dataenginex/middleware/domain_metrics.py +77 -0
- dataenginex-0.4.0/src/dataenginex/middleware/logging_config.py +131 -0
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/middleware/metrics.py +28 -4
- dataenginex-0.4.0/src/dataenginex/ml/__init__.py +56 -0
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/ml/drift.py +21 -2
- dataenginex-0.4.0/src/dataenginex/ml/features/__init__.py +11 -0
- dataenginex-0.4.0/src/dataenginex/ml/features/builtin.py +116 -0
- dataenginex-0.4.0/src/dataenginex/ml/metrics.py +55 -0
- dataenginex-0.4.0/src/dataenginex/ml/mlflow_registry.py +226 -0
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/ml/registry.py +187 -156
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/ml/serving.py +164 -141
- dataenginex-0.4.0/src/dataenginex/ml/serving_engine/__init__.py +12 -0
- dataenginex-0.4.0/src/dataenginex/ml/serving_engine/builtin.py +82 -0
- dataenginex-0.4.0/src/dataenginex/ml/tracking/__init__.py +11 -0
- dataenginex-0.4.0/src/dataenginex/ml/tracking/builtin.py +146 -0
- dataenginex-0.4.0/src/dataenginex/ml/training.py +373 -0
- dataenginex-0.4.0/src/dataenginex/orchestration/__init__.py +23 -0
- dataenginex-0.4.0/src/dataenginex/orchestration/builtin.py +101 -0
- dataenginex-0.4.0/src/dataenginex/orchestration/scheduler.py +352 -0
- dataenginex-0.4.0/src/dataenginex/plugins/__init__.py +35 -0
- dataenginex-0.4.0/src/dataenginex/plugins/registry.py +170 -0
- dataenginex-0.4.0/src/dataenginex/py.typed +0 -0
- dataenginex-0.4.0/src/dataenginex/secops/__init__.py +37 -0
- dataenginex-0.4.0/src/dataenginex/secops/audit.py +258 -0
- dataenginex-0.4.0/src/dataenginex/secops/gate.py +112 -0
- dataenginex-0.4.0/src/dataenginex/secops/guard.py +281 -0
- dataenginex-0.4.0/src/dataenginex/secops/masking.py +148 -0
- dataenginex-0.4.0/src/dataenginex/secops/pii.py +259 -0
- dataenginex-0.4.0/src/dataenginex/store.py +814 -0
- dataenginex-0.4.0/src/dataenginex/warehouse/__init__.py +40 -0
- dataenginex-0.4.0/src/dataenginex/warehouse/lineage.py +473 -0
- {dataenginex-0.3.5 → dataenginex-0.4.0}/src/dataenginex/warehouse/transforms.py +244 -206
- dataenginex-0.4.0/src/dataenginex/worker.py +180 -0
- dataenginex-0.4.0/tests/__init__.py +0 -0
- dataenginex-0.4.0/tests/conformance/__init__.py +0 -0
- dataenginex-0.4.0/tests/conformance/test_connector.py +38 -0
- dataenginex-0.4.0/tests/conformance/test_feature_store.py +42 -0
- dataenginex-0.4.0/tests/conformance/test_tracker.py +57 -0
- dataenginex-0.4.0/tests/conformance/test_transform.py +23 -0
- dataenginex-0.4.0/tests/conftest.py +144 -0
- dataenginex-0.4.0/tests/fixtures/__init__.py +5 -0
- dataenginex-0.4.0/tests/fixtures/sample_data.py +67 -0
- dataenginex-0.4.0/tests/fixtures/sample_jobs.csv +6 -0
- dataenginex-0.4.0/tests/fixtures/sample_jobs.json +57 -0
- dataenginex-0.4.0/tests/integration/__init__.py +1 -0
- dataenginex-0.4.0/tests/integration/test_ai_integration.py +427 -0
- dataenginex-0.4.0/tests/integration/test_cli_run.py +102 -0
- dataenginex-0.4.0/tests/integration/test_config_cli.py +108 -0
- dataenginex-0.4.0/tests/integration/test_lineage_integration.py +391 -0
- dataenginex-0.4.0/tests/integration/test_ml_integration.py +277 -0
- dataenginex-0.4.0/tests/integration/test_pipeline_e2e.py +63 -0
- dataenginex-0.4.0/tests/integration/test_secops_integration.py +316 -0
- dataenginex-0.4.0/tests/integration/test_storage_real.py +488 -0
- dataenginex-0.4.0/tests/load/__init__.py +0 -0
- dataenginex-0.4.0/tests/unit/__init__.py +1 -0
- dataenginex-0.4.0/tests/unit/test_agent_runtime.py +73 -0
- dataenginex-0.4.0/tests/unit/test_ai_modules.py +759 -0
- dataenginex-0.4.0/tests/unit/test_api_pagination.py +83 -0
- dataenginex-0.4.0/tests/unit/test_api_schemas.py +53 -0
- dataenginex-0.4.0/tests/unit/test_api_validators.py +110 -0
- dataenginex-0.4.0/tests/unit/test_builtin_agent.py +41 -0
- dataenginex-0.4.0/tests/unit/test_builtin_feature_store.py +60 -0
- dataenginex-0.4.0/tests/unit/test_builtin_serving.py +95 -0
- dataenginex-0.4.0/tests/unit/test_builtin_tracker.py +75 -0
- dataenginex-0.4.0/tests/unit/test_cli_train.py +96 -0
- dataenginex-0.4.0/tests/unit/test_config_loader.py +151 -0
- dataenginex-0.4.0/tests/unit/test_config_schema.py +98 -0
- dataenginex-0.4.0/tests/unit/test_config_schema_extended.py +299 -0
- dataenginex-0.4.0/tests/unit/test_core_exceptions.py +47 -0
- dataenginex-0.4.0/tests/unit/test_core_interfaces.py +127 -0
- dataenginex-0.4.0/tests/unit/test_core_quality.py +264 -0
- dataenginex-0.4.0/tests/unit/test_core_registry.py +78 -0
- dataenginex-0.4.0/tests/unit/test_core_schemas_extended.py +202 -0
- dataenginex-0.4.0/tests/unit/test_csv_connector.py +32 -0
- dataenginex-0.4.0/tests/unit/test_data.py +230 -0
- dataenginex-0.4.0/tests/unit/test_dbt_connector.py +172 -0
- dataenginex-0.4.0/tests/unit/test_dex_engine.py +144 -0
- dataenginex-0.4.0/tests/unit/test_dex_store.py +338 -0
- dataenginex-0.4.0/tests/unit/test_domain_metrics.py +98 -0
- dataenginex-0.4.0/tests/unit/test_domain_metrics_wiring.py +95 -0
- dataenginex-0.4.0/tests/unit/test_drift_scheduler.py +320 -0
- dataenginex-0.4.0/tests/unit/test_duckdb_connector.py +67 -0
- dataenginex-0.4.0/tests/unit/test_guarded_provider.py +108 -0
- dataenginex-0.4.0/tests/unit/test_lakehouse.py +210 -0
- dataenginex-0.4.0/tests/unit/test_llm.py +290 -0
- dataenginex-0.4.0/tests/unit/test_llm_extended.py +182 -0
- dataenginex-0.4.0/tests/unit/test_llm_litellm_vllm.py +102 -0
- dataenginex-0.4.0/tests/unit/test_logging.py +39 -0
- dataenginex-0.4.0/tests/unit/test_medallion.py +251 -0
- dataenginex-0.4.0/tests/unit/test_medallion_extended.py +261 -0
- dataenginex-0.4.0/tests/unit/test_middleware_metrics.py +101 -0
- dataenginex-0.4.0/tests/unit/test_ml.py +225 -0
- dataenginex-0.4.0/tests/unit/test_parquet_connector.py +173 -0
- dataenginex-0.4.0/tests/unit/test_pipeline_dag.py +45 -0
- dataenginex-0.4.0/tests/unit/test_pipeline_runner.py +104 -0
- dataenginex-0.4.0/tests/unit/test_plugins.py +216 -0
- dataenginex-0.4.0/tests/unit/test_privacy_guard_wiring.py +245 -0
- dataenginex-0.4.0/tests/unit/test_quality_gates.py +97 -0
- dataenginex-0.4.0/tests/unit/test_quality_spark.py +93 -0
- dataenginex-0.4.0/tests/unit/test_retriever.py +81 -0
- dataenginex-0.4.0/tests/unit/test_retriever_graph.py +89 -0
- dataenginex-0.4.0/tests/unit/test_run_history.py +57 -0
- dataenginex-0.4.0/tests/unit/test_scheduler.py +56 -0
- dataenginex-0.4.0/tests/unit/test_secops.py +353 -0
- dataenginex-0.4.0/tests/unit/test_secops_engine_and_cli.py +289 -0
- dataenginex-0.4.0/tests/unit/test_secops_guard.py +328 -0
- dataenginex-0.4.0/tests/unit/test_spark_connector.py +209 -0
- dataenginex-0.4.0/tests/unit/test_spark_fixtures.py +72 -0
- dataenginex-0.4.0/tests/unit/test_sql_transforms.py +123 -0
- dataenginex-0.4.0/tests/unit/test_storage_abstraction.py +232 -0
- dataenginex-0.4.0/tests/unit/test_vectorstore.py +180 -0
- dataenginex-0.4.0/tests/unit/test_vectorstore_extended.py +287 -0
- dataenginex-0.4.0/tests/unit/test_warehouse.py +159 -0
- dataenginex-0.4.0/tests/unit/test_warehouse_transforms.py +223 -0
- dataenginex-0.4.0/uv.lock +4633 -0
- dataenginex-0.3.5/PKG-INFO +0 -66
- dataenginex-0.3.5/pyproject.toml +0 -37
- dataenginex-0.3.5/src/dataenginex/README.md +0 -35
- dataenginex-0.3.5/src/dataenginex/RELEASE_NOTES.md +0 -48
- dataenginex-0.3.5/src/dataenginex/__init__.py +0 -16
- dataenginex-0.3.5/src/dataenginex/api/__init__.py +0 -11
- dataenginex-0.3.5/src/dataenginex/api/auth.py +0 -173
- dataenginex-0.3.5/src/dataenginex/api/errors.py +0 -70
- dataenginex-0.3.5/src/dataenginex/api/health.py +0 -133
- dataenginex-0.3.5/src/dataenginex/api/rate_limit.py +0 -122
- dataenginex-0.3.5/src/dataenginex/api/routers/__init__.py +0 -1
- dataenginex-0.3.5/src/dataenginex/api/routers/v1.py +0 -113
- dataenginex-0.3.5/src/dataenginex/core/__init__.py +0 -36
- dataenginex-0.3.5/src/dataenginex/core/medallion_architecture.py +0 -414
- dataenginex-0.3.5/src/dataenginex/core/pipeline_config.py +0 -111
- dataenginex-0.3.5/src/dataenginex/core/schemas.py +0 -304
- dataenginex-0.3.5/src/dataenginex/core/validators.py +0 -394
- dataenginex-0.3.5/src/dataenginex/data/__init__.py +0 -22
- dataenginex-0.3.5/src/dataenginex/lakehouse/__init__.py +0 -22
- dataenginex-0.3.5/src/dataenginex/lakehouse/storage.py +0 -177
- dataenginex-0.3.5/src/dataenginex/middleware/__init__.py +0 -19
- dataenginex-0.3.5/src/dataenginex/middleware/logging_config.py +0 -137
- dataenginex-0.3.5/src/dataenginex/middleware/metrics_middleware.py +0 -61
- dataenginex-0.3.5/src/dataenginex/middleware/request_logging.py +0 -77
- dataenginex-0.3.5/src/dataenginex/middleware/tracing.py +0 -87
- dataenginex-0.3.5/src/dataenginex/ml/__init__.py +0 -28
- dataenginex-0.3.5/src/dataenginex/ml/training.py +0 -205
- dataenginex-0.3.5/src/dataenginex/warehouse/__init__.py +0 -19
- dataenginex-0.3.5/src/dataenginex/warehouse/lineage.py +0 -164
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# New Feature (DEX)
|
|
2
|
+
|
|
3
|
+
Scaffold a new feature for the `dataenginex` core framework. Ask for the feature name and description if not provided as $ARGUMENTS.
|
|
4
|
+
|
|
5
|
+
Steps:
|
|
6
|
+
|
|
7
|
+
1. **Plan** — Write the implementation plan to `tasks/todo.md`. Check in before implementing.
|
|
8
|
+
1. **Explore** — Search `src/dataenginex/` for related patterns. Use Context7 MCP for library docs.
|
|
9
|
+
1. **Design** — Identify the right module:
|
|
10
|
+
- API endpoint → `src/dataenginex/api/` — `response_model=` required, type hints, auth via lifespan middleware
|
|
11
|
+
- Middleware → `src/dataenginex/middleware/` — follows request logging → metrics → auth → rate limit order
|
|
12
|
+
- Data pipeline → Medallion pattern (bronze → silver → gold) via `SchemaRegistry` / `DataCatalog`
|
|
13
|
+
- ML feature → `src/dataenginex/ml/` — `ModelRegistry` lifecycle (development → staging → production → archived)
|
|
14
|
+
- Quality gate → `src/dataenginex/quality/`
|
|
15
|
+
- Plugin hook → `src/dataenginex/plugins/` — entry-point based discovery
|
|
16
|
+
- Framework util → `src/dataenginex/core/`
|
|
17
|
+
1. **Implement** — Follow existing patterns. `from __future__ import annotations` at top. `structlog` only (no loguru, no print). Use `BackendRegistry` for new pluggable subsystems.
|
|
18
|
+
1. **Test** — Unit tests in `tests/unit/`, integration tests in `tests/integration/` (live uvicorn). `asyncio_mode = "auto"` — no `@pytest.mark.asyncio` needed.
|
|
19
|
+
1. **Validate** — Run `/validate` (dex version — includes real server step)
|
|
20
|
+
1. **Update** — Mark complete in `tasks/todo.md`; update `TODO.md` if relevant
|
|
21
|
+
|
|
22
|
+
Follow all standards in `CLAUDE.md` and `../CLAUDE.md`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Validate (DEX)
|
|
2
|
+
|
|
3
|
+
Run the full DEX validation pipeline in order. Stop and report on first failure.
|
|
4
|
+
|
|
5
|
+
1. **Lint**
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uv run poe lint
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
1. **Typecheck**
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
uv run poe typecheck
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
1. **Tests**
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
uv run poe test
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
1. **Real server** — start the quickstart example and verify all endpoints
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
uv run python examples/02_api_quickstart.py &
|
|
27
|
+
sleep 2
|
|
28
|
+
curl -sf http://localhost:17000/health | python -m json.tool
|
|
29
|
+
curl -sf http://localhost:17000/ | python -m json.tool
|
|
30
|
+
curl -sf http://localhost:17000/metrics | head -20
|
|
31
|
+
curl -sf -X POST http://localhost:17000/echo -H "Content-Type: application/json" -d '{"message":"test"}' | python -m json.tool
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Check response **bodies** — not just status codes. Kill the server after.
|
|
35
|
+
|
|
36
|
+
1. **Standalone import**
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
uv run python -c "import dataenginex; print('OK', dataenginex.__file__)"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Tests passing ≠ app working. Step 4 is NON-NEGOTIABLE.
|
|
43
|
+
|
|
44
|
+
Report pass/fail for each step with exact output. On failure, identify root cause — do not skip ahead.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"autoUpdatesChannel": "latest",
|
|
3
|
+
"statusLine": {
|
|
4
|
+
"type": "command",
|
|
5
|
+
"command": "b=$(git branch --show-current 2>/dev/null); [ -n \"$b\" ] && echo \"[$b]\" || echo \"\"",
|
|
6
|
+
"padding": 2
|
|
7
|
+
},
|
|
8
|
+
"permissions": {
|
|
9
|
+
"defaultMode": "default",
|
|
10
|
+
"allow": [
|
|
11
|
+
"Read",
|
|
12
|
+
"Edit",
|
|
13
|
+
"Bash(uv run poe *)",
|
|
14
|
+
"Bash(uv run uvicorn *)",
|
|
15
|
+
"Bash(uv run python *)",
|
|
16
|
+
"Bash(uv run *)",
|
|
17
|
+
"Bash(uv lock *)",
|
|
18
|
+
"Bash(uv sync *)",
|
|
19
|
+
"Bash(curl *)",
|
|
20
|
+
"Bash(git status)",
|
|
21
|
+
"Bash(git status *)",
|
|
22
|
+
"Bash(git diff *)",
|
|
23
|
+
"Bash(git log *)",
|
|
24
|
+
"Bash(git branch *)",
|
|
25
|
+
"Bash(git add *)",
|
|
26
|
+
"Bash(git fetch *)",
|
|
27
|
+
"Bash(ls *)",
|
|
28
|
+
"Bash(pwd)",
|
|
29
|
+
"Bash(which *)",
|
|
30
|
+
"Bash(wc *)",
|
|
31
|
+
"Bash(echo *)",
|
|
32
|
+
"Bash(python -c *)",
|
|
33
|
+
"Bash(python3 *)",
|
|
34
|
+
"Bash(gh pr *)",
|
|
35
|
+
"Bash(gh issue *)",
|
|
36
|
+
"Bash(gh release *)",
|
|
37
|
+
"Bash(gh run *)",
|
|
38
|
+
"Bash(gh api *)",
|
|
39
|
+
"Bash(llmfit *)",
|
|
40
|
+
"Bash(npx -y @upstash/context7-mcp*)"
|
|
41
|
+
],
|
|
42
|
+
"deny": [
|
|
43
|
+
"Bash(git commit *)",
|
|
44
|
+
"Bash(git push *)",
|
|
45
|
+
"Bash(rm -rf *)",
|
|
46
|
+
"Bash(git push --force*)",
|
|
47
|
+
"Bash(git reset --hard*)",
|
|
48
|
+
"Bash(pip install*)",
|
|
49
|
+
"Bash(sudo *)",
|
|
50
|
+
"Bash(chmod 777*)",
|
|
51
|
+
"Bash(curl * | bash*)"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"hooks": {
|
|
55
|
+
"UserPromptSubmit": [
|
|
56
|
+
{
|
|
57
|
+
"matcher": "",
|
|
58
|
+
"hooks": [
|
|
59
|
+
{
|
|
60
|
+
"type": "prompt",
|
|
61
|
+
"prompt": "Classify this task as 'simple' (data lookup, quick questions, simple edits — use haiku for speed/cost), 'moderate' (implementation, debugging, refactoring — use sonnet for balance), or 'complex' (architecture, multi-file design, research — use opus for reasoning). Based on the user message below, respond with ONLY the word: haiku, sonnet, or opus. User message: $ARGUMENTS",
|
|
62
|
+
"statusMessage": "Analyzing task complexity...",
|
|
63
|
+
"model": "claude-haiku-4-5-20251001"
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"alwaysThinkingEnabled": false,
|
|
70
|
+
"cleanupPeriodDays": 7
|
|
71
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# DataEngineX — Environment Configuration Template
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Copy to .env and fill in values for your environment.
|
|
5
|
+
# NEVER commit secrets to version control — use a secret manager in production.
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
# -- Application -------------------------------------------------------------
|
|
9
|
+
APP_NAME=dataenginex
|
|
10
|
+
ENVIRONMENT=dev
|
|
11
|
+
|
|
12
|
+
# -- Logging -----------------------------------------------------------------
|
|
13
|
+
LOG_LEVEL=INFO
|
|
14
|
+
# "json" for structured JSON output, "console" for human-readable
|
|
15
|
+
LOG_FORMAT=console
|
|
16
|
+
|
|
17
|
+
# -- API Server --------------------------------------------------------------
|
|
18
|
+
HOST=0.0.0.0
|
|
19
|
+
PORT=17000
|
|
20
|
+
|
|
21
|
+
# -- Authentication (JWT) ----------------------------------------------------
|
|
22
|
+
# Set to "true" to enforce Bearer-token auth on protected endpoints
|
|
23
|
+
DEX_AUTH_ENABLED=false
|
|
24
|
+
# HMAC-SHA256 secret — generate with: python -c "import secrets; print(secrets.token_urlsafe(64))"
|
|
25
|
+
DEX_JWT_SECRET=
|
|
26
|
+
DEX_JWT_ALGORITHM=HS256
|
|
27
|
+
# Token TTL in minutes
|
|
28
|
+
DEX_JWT_TTL_MINUTES=60
|
|
29
|
+
|
|
30
|
+
# -- Rate Limiting -----------------------------------------------------------
|
|
31
|
+
# Set to "true" to enable per-IP token-bucket rate limiting
|
|
32
|
+
DEX_RATE_LIMIT_ENABLED=false
|
|
33
|
+
DEX_RATE_LIMIT_RPM=60
|
|
34
|
+
DEX_RATE_LIMIT_BURST=10
|
|
35
|
+
|
|
36
|
+
# -- Observability / Tracing ------------------------------------------------
|
|
37
|
+
# OpenTelemetry collector endpoint (leave blank to disable OTLP export)
|
|
38
|
+
OTLP_ENDPOINT=
|
|
39
|
+
ENABLE_CONSOLE_TRACES=false
|
|
40
|
+
|
|
41
|
+
# -- Database ----------------------------------------------------------------
|
|
42
|
+
DB_DRIVER=
|
|
43
|
+
DB_SERVER=
|
|
44
|
+
DB_NAME=
|
|
45
|
+
DB_USER=
|
|
46
|
+
DB_PASSWORD=
|
|
47
|
+
|
|
48
|
+
# -- Databricks --------------------------------------------------------------
|
|
49
|
+
DATABRICKS_HOST=
|
|
50
|
+
DATABRICKS_CLIENT_ID=
|
|
51
|
+
DATABRICKS_SECRET=
|
|
52
|
+
|
|
53
|
+
# -- External APIs -----------------------------------------------------------
|
|
54
|
+
OPENWEATHER_API_KEY=
|
|
55
|
+
|
|
56
|
+
# -- GitHub App (CI/CD webhooks) ---------------------------------------------
|
|
57
|
+
GITHUB_PRIVATE_KEY=
|
|
58
|
+
GITHUB_APP_IDENTIFIER=
|
|
59
|
+
GITHUB_WEBHOOK_SECRET=
|
|
60
|
+
GITHUB_PERSONAL_ACCESS_TOKEN=
|
|
61
|
+
|
|
62
|
+
# -- MCP Servers -------------------------------------------------------------
|
|
63
|
+
# GitHub MCP uses GITHUB_PERSONAL_ACCESS_TOKEN above.
|
|
64
|
+
CLOUDFLARE_API_TOKEN=
|
|
65
|
+
CLOUDFLARE_ACCOUNT_ID=
|
|
66
|
+
POSTGRES_CONNECTION_STRING=
|
|
67
|
+
|
|
68
|
+
# -- Notifications -----------------------------------------------------------
|
|
69
|
+
SLACK_WEBHOOK_URL=
|
|
70
|
+
|
|
71
|
+
# -- Grafana (docker-compose local dev) --------------------------------------
|
|
72
|
+
GF_SECURITY_ADMIN_USER=admin
|
|
73
|
+
GF_SECURITY_ADMIN_PASSWORD=admin
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Report a bug or unexpected behavior
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: ["type:bug", "needs-triage", "bug"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for taking the time to report a bug! Please fill out the sections below.
|
|
10
|
+
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: description
|
|
13
|
+
attributes:
|
|
14
|
+
label: Bug Description
|
|
15
|
+
description: A clear and concise description of what the bug is.
|
|
16
|
+
placeholder: Describe what went wrong...
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: reproduce
|
|
22
|
+
attributes:
|
|
23
|
+
label: Steps to Reproduce
|
|
24
|
+
description: How can we reproduce this issue?
|
|
25
|
+
placeholder: |
|
|
26
|
+
1. Run command '...'
|
|
27
|
+
2. Check output '...'
|
|
28
|
+
3. See error
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
31
|
+
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: expected
|
|
34
|
+
attributes:
|
|
35
|
+
label: Expected Behavior
|
|
36
|
+
description: What did you expect to happen?
|
|
37
|
+
placeholder: Describe the expected behavior...
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
40
|
+
|
|
41
|
+
- type: textarea
|
|
42
|
+
id: actual
|
|
43
|
+
attributes:
|
|
44
|
+
label: Actual Behavior
|
|
45
|
+
description: What actually happened?
|
|
46
|
+
placeholder: Describe what actually happened...
|
|
47
|
+
validations:
|
|
48
|
+
required: true
|
|
49
|
+
|
|
50
|
+
- type: textarea
|
|
51
|
+
id: logs
|
|
52
|
+
attributes:
|
|
53
|
+
label: Relevant Logs/Screenshots
|
|
54
|
+
description: Add any logs, error messages, or screenshots
|
|
55
|
+
placeholder: Paste logs or drag images here...
|
|
56
|
+
validations:
|
|
57
|
+
required: false
|
|
58
|
+
|
|
59
|
+
- type: dropdown
|
|
60
|
+
id: environment
|
|
61
|
+
attributes:
|
|
62
|
+
label: Environment
|
|
63
|
+
description: Which environment(s) are affected?
|
|
64
|
+
multiple: true
|
|
65
|
+
options:
|
|
66
|
+
- Local Development
|
|
67
|
+
- Dev (dex-dev)
|
|
68
|
+
- Prod (dex)
|
|
69
|
+
validations:
|
|
70
|
+
required: true
|
|
71
|
+
|
|
72
|
+
- type: dropdown
|
|
73
|
+
id: provider_context
|
|
74
|
+
attributes:
|
|
75
|
+
label: Cloud/Provider Context
|
|
76
|
+
description: Where does this bug occur?
|
|
77
|
+
options:
|
|
78
|
+
- Local only
|
|
79
|
+
- Cloud-agnostic path
|
|
80
|
+
- AWS-specific path
|
|
81
|
+
- GCP-specific path
|
|
82
|
+
- Azure-specific path
|
|
83
|
+
- Unsure
|
|
84
|
+
validations:
|
|
85
|
+
required: true
|
|
86
|
+
|
|
87
|
+
- type: dropdown
|
|
88
|
+
id: cost_impact
|
|
89
|
+
attributes:
|
|
90
|
+
label: Cost Impact
|
|
91
|
+
description: Does this bug increase runtime or infra cost?
|
|
92
|
+
options:
|
|
93
|
+
- No noticeable cost impact
|
|
94
|
+
- Minor cost impact
|
|
95
|
+
- Major cost impact
|
|
96
|
+
- Unknown
|
|
97
|
+
validations:
|
|
98
|
+
required: false
|
|
99
|
+
|
|
100
|
+
- type: textarea
|
|
101
|
+
id: additional
|
|
102
|
+
attributes:
|
|
103
|
+
label: Additional Context
|
|
104
|
+
description: Any other context about the problem
|
|
105
|
+
placeholder: Add any other context...
|
|
106
|
+
validations:
|
|
107
|
+
required: false
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security Policy
|
|
4
|
+
url: https://github.com/TheDataEngineX/dataenginex/blob/main/SECURITY.md
|
|
5
|
+
about: Report vulnerabilities responsibly using the security policy
|
|
6
|
+
- name: Support Guide
|
|
7
|
+
url: https://github.com/TheDataEngineX/dataenginex/blob/main/SUPPORT.md
|
|
8
|
+
about: Find the right channel for help, bugs, and feature proposals
|
|
9
|
+
- name: Questions and Ideas (GitHub Discussions)
|
|
10
|
+
url: https://github.com/TheDataEngineX/dataenginex/discussions
|
|
11
|
+
about: Use Discussions for Q&A, design brainstorming, and early proposals
|
|
12
|
+
- name: Organization Projects
|
|
13
|
+
url: https://github.com/orgs/TheDataEngineX/projects
|
|
14
|
+
about: Track roadmap status, milestones, and planning boards
|
|
15
|
+
- name: Documentation
|
|
16
|
+
url: https://github.com/TheDataEngineX/dataenginex/blob/main/docs/docs-hub.md
|
|
17
|
+
about: Check the documentation for guides and runbooks
|
|
18
|
+
- name: SDLC Guide
|
|
19
|
+
url: https://github.com/TheDataEngineX/dataenginex/blob/main/docs/SDLC.md
|
|
20
|
+
about: Review the development lifecycle and workflow
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Suggest a new feature or enhancement
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels: ["type:feature", "needs-triage", "enhancement"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for suggesting a feature! Please describe your idea below.
|
|
10
|
+
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: problem
|
|
13
|
+
attributes:
|
|
14
|
+
label: Problem Statement
|
|
15
|
+
description: Is your feature request related to a problem? Please describe.
|
|
16
|
+
placeholder: "I'm frustrated when..."
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: solution
|
|
22
|
+
attributes:
|
|
23
|
+
label: Proposed Solution
|
|
24
|
+
description: Describe the solution you'd like
|
|
25
|
+
placeholder: Describe your proposed solution...
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
|
|
29
|
+
- type: textarea
|
|
30
|
+
id: alternatives
|
|
31
|
+
attributes:
|
|
32
|
+
label: Alternatives Considered
|
|
33
|
+
description: Describe any alternative solutions or features you've considered
|
|
34
|
+
placeholder: Other approaches you've thought about...
|
|
35
|
+
validations:
|
|
36
|
+
required: false
|
|
37
|
+
|
|
38
|
+
- type: dropdown
|
|
39
|
+
id: priority
|
|
40
|
+
attributes:
|
|
41
|
+
label: Priority
|
|
42
|
+
description: How important is this feature?
|
|
43
|
+
options:
|
|
44
|
+
- P0 - Critical (blocks release)
|
|
45
|
+
- P1 - High (needed soon)
|
|
46
|
+
- P2 - Medium (nice to have)
|
|
47
|
+
- P3 - Low (future consideration)
|
|
48
|
+
validations:
|
|
49
|
+
required: true
|
|
50
|
+
|
|
51
|
+
- type: dropdown
|
|
52
|
+
id: component
|
|
53
|
+
attributes:
|
|
54
|
+
label: Component
|
|
55
|
+
description: Which part of the system does this affect?
|
|
56
|
+
multiple: true
|
|
57
|
+
options:
|
|
58
|
+
- API (FastAPI)
|
|
59
|
+
- Data Pipelines
|
|
60
|
+
- ML Models
|
|
61
|
+
- Infrastructure (K8s/ArgoCD)
|
|
62
|
+
- CI/CD
|
|
63
|
+
- Documentation
|
|
64
|
+
- Other
|
|
65
|
+
validations:
|
|
66
|
+
required: true
|
|
67
|
+
|
|
68
|
+
- type: dropdown
|
|
69
|
+
id: cloud_neutrality
|
|
70
|
+
attributes:
|
|
71
|
+
label: Cloud Neutrality
|
|
72
|
+
description: How will this stay vendor-neutral?
|
|
73
|
+
options:
|
|
74
|
+
- No cloud dependency (local/open-source default)
|
|
75
|
+
- Optional provider adapter (AWS/GCP/Azure)
|
|
76
|
+
- Provider-specific (must justify)
|
|
77
|
+
validations:
|
|
78
|
+
required: true
|
|
79
|
+
|
|
80
|
+
- type: dropdown
|
|
81
|
+
id: cost_profile
|
|
82
|
+
attributes:
|
|
83
|
+
label: Cost Profile
|
|
84
|
+
description: Expected baseline operating cost for default usage
|
|
85
|
+
options:
|
|
86
|
+
- Free / local-first
|
|
87
|
+
- Free tier compatible
|
|
88
|
+
- Paid service required (must justify)
|
|
89
|
+
validations:
|
|
90
|
+
required: true
|
|
91
|
+
|
|
92
|
+
- type: textarea
|
|
93
|
+
id: acceptance
|
|
94
|
+
attributes:
|
|
95
|
+
label: Acceptance Criteria
|
|
96
|
+
description: What defines "done" for this feature?
|
|
97
|
+
placeholder: |
|
|
98
|
+
- [ ] Criterion 1
|
|
99
|
+
- [ ] Criterion 2
|
|
100
|
+
validations:
|
|
101
|
+
required: false
|
|
102
|
+
|
|
103
|
+
- type: textarea
|
|
104
|
+
id: additional
|
|
105
|
+
attributes:
|
|
106
|
+
label: Additional Context
|
|
107
|
+
description: Add any other context, mockups, or examples
|
|
108
|
+
placeholder: Links, diagrams, screenshots...
|
|
109
|
+
validations:
|
|
110
|
+
required: false
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<!-- Describe the change and motivation in a few sentences -->
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
**Related Issue**: Closes #XXX
|
|
6
|
+
|
|
7
|
+
## Suggested PR Title
|
|
8
|
+
|
|
9
|
+
<!-- Example: chore: org/domain foundation with pages + label/project automation -->
|
|
10
|
+
|
|
11
|
+
## Suggested Squash Commit Message
|
|
12
|
+
|
|
13
|
+
<!--
|
|
14
|
+
chore: establish org/domain foundation (pages, labels, project automation)
|
|
15
|
+
|
|
16
|
+
- migrate platform/docs references to thedataenginex.org
|
|
17
|
+
- add GitHub Pages docs deployment workflow
|
|
18
|
+
- add label sync and org project intake automation
|
|
19
|
+
- align issue templates/support/security/workflow docs
|
|
20
|
+
-->
|
|
21
|
+
|
|
22
|
+
## Keep / Change / Remove
|
|
23
|
+
|
|
24
|
+
- **Keep**:
|
|
25
|
+
- **Change**:
|
|
26
|
+
- **Remove**:
|
|
27
|
+
|
|
28
|
+
## Type of Change
|
|
29
|
+
|
|
30
|
+
- [ ] Bug fix (non-breaking change which fixes an issue)
|
|
31
|
+
- [ ] New feature (non-breaking change which adds functionality)
|
|
32
|
+
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
|
33
|
+
- [ ] Documentation update
|
|
34
|
+
- [ ] Infrastructure/DevOps change
|
|
35
|
+
|
|
36
|
+
## Changes Made
|
|
37
|
+
|
|
38
|
+
- Change 1
|
|
39
|
+
- Change 2
|
|
40
|
+
- Change 3
|
|
41
|
+
|
|
42
|
+
## Testing
|
|
43
|
+
|
|
44
|
+
- [ ] Unit tests added/updated
|
|
45
|
+
- [ ] Integration tests added/updated
|
|
46
|
+
- [ ] Tests pass locally (`uv run poe test`)
|
|
47
|
+
- [ ] Coverage maintained/improved (target: 80%+)
|
|
48
|
+
|
|
49
|
+
## Architecture Impact
|
|
50
|
+
|
|
51
|
+
- [ ] Cloud-neutral by default (no hard dependency on a single provider)
|
|
52
|
+
- [ ] Cost-aware default path (works locally or free/open-source tier)
|
|
53
|
+
- [ ] Extension points documented for future adapters/plugins
|
|
54
|
+
|
|
55
|
+
## Deprecation / Migration
|
|
56
|
+
|
|
57
|
+
- [ ] No deprecation impact
|
|
58
|
+
- [ ] If behavior changed, deprecation/migration notes were added to docs/release notes
|
|
59
|
+
|
|
60
|
+
## Checklist
|
|
61
|
+
|
|
62
|
+
- [ ] Linting passes (`uv run poe lint` ✓)
|
|
63
|
+
- [ ] Type checking passes (`uv run poe typecheck` ✓)
|
|
64
|
+
- [ ] Documentation updated (if applicable)
|
|
65
|
+
- [ ] Pre-commit hooks pass
|
|
66
|
+
|
|
67
|
+
## External Setup (if applicable)
|
|
68
|
+
|
|
69
|
+
- [ ] GitHub Pages source set to **GitHub Actions**
|
|
70
|
+
- [ ] Org/Repo variable set: `ORG_PROJECT_URL`
|
|
71
|
+
- [ ] Org/Repo secret set: `ORG_PROJECT_TOKEN`
|
|
72
|
+
- [ ] Cloudflare DNS updated for docs/api/apex domains
|
|
73
|
+
- [ ] Post-cutover checks completed (see `docs/DEPLOY_RUNBOOK.md` → Org + Domain Rollout)
|
|
74
|
+
|
|
75
|
+
## Notes for Reviewers
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
- name: type:bug
|
|
2
|
+
color: "D73A4A"
|
|
3
|
+
description: Defect or unintended behavior
|
|
4
|
+
|
|
5
|
+
- name: type:feature
|
|
6
|
+
color: "0E8A16"
|
|
7
|
+
description: New capability or enhancement request
|
|
8
|
+
|
|
9
|
+
- name: type:docs
|
|
10
|
+
color: "1D76DB"
|
|
11
|
+
description: Documentation improvements
|
|
12
|
+
|
|
13
|
+
- name: type:chore
|
|
14
|
+
color: "BFD4F2"
|
|
15
|
+
description: Maintenance and housekeeping work
|
|
16
|
+
|
|
17
|
+
- name: type:refactor
|
|
18
|
+
color: "C2E0C6"
|
|
19
|
+
description: Code restructuring without behavior changes
|
|
20
|
+
|
|
21
|
+
- name: area:api
|
|
22
|
+
color: "5319E7"
|
|
23
|
+
description: API layer and contracts
|
|
24
|
+
|
|
25
|
+
- name: area:data
|
|
26
|
+
color: "FBCA04"
|
|
27
|
+
description: Data pipelines, storage, and quality
|
|
28
|
+
|
|
29
|
+
- name: area:ml
|
|
30
|
+
color: "C5DEF5"
|
|
31
|
+
description: ML modeling, training, and inference
|
|
32
|
+
|
|
33
|
+
- name: area:infra
|
|
34
|
+
color: "0052CC"
|
|
35
|
+
description: Infrastructure, Kubernetes, and platform
|
|
36
|
+
|
|
37
|
+
- name: area:docs
|
|
38
|
+
color: "0E8A16"
|
|
39
|
+
description: Documentation structure and content
|
|
40
|
+
|
|
41
|
+
- name: area:ci
|
|
42
|
+
color: "0366D6"
|
|
43
|
+
description: CI/CD workflows and automation
|
|
44
|
+
|
|
45
|
+
- name: priority:p0
|
|
46
|
+
color: "B60205"
|
|
47
|
+
description: Critical priority
|
|
48
|
+
|
|
49
|
+
- name: priority:p1
|
|
50
|
+
color: "D93F0B"
|
|
51
|
+
description: High priority
|
|
52
|
+
|
|
53
|
+
- name: priority:p2
|
|
54
|
+
color: "FBCA04"
|
|
55
|
+
description: Medium priority
|
|
56
|
+
|
|
57
|
+
- name: priority:p3
|
|
58
|
+
color: "0E8A16"
|
|
59
|
+
description: Low priority
|
|
60
|
+
|
|
61
|
+
- name: needs-triage
|
|
62
|
+
color: "EDEDED"
|
|
63
|
+
description: Awaiting maintainer triage
|
|
64
|
+
|
|
65
|
+
- name: needs-info
|
|
66
|
+
color: "F9D0C4"
|
|
67
|
+
description: More information required
|
|
68
|
+
|
|
69
|
+
- name: blocked
|
|
70
|
+
color: "000000"
|
|
71
|
+
description: Blocked by external dependency
|
|
72
|
+
|
|
73
|
+
- name: duplicate
|
|
74
|
+
color: "CFD3D7"
|
|
75
|
+
description: Duplicate of an existing issue
|
|
76
|
+
|
|
77
|
+
- name: wontfix
|
|
78
|
+
color: "FFFFFF"
|
|
79
|
+
description: Intentionally not planned for implementation
|
|
80
|
+
|
|
81
|
+
- name: good first issue
|
|
82
|
+
color: "7057FF"
|
|
83
|
+
description: Good starter task for first-time contributors
|
|
84
|
+
|
|
85
|
+
- name: help wanted
|
|
86
|
+
color: "008672"
|
|
87
|
+
description: Community help welcomed
|
|
88
|
+
|
|
89
|
+
- name: incident
|
|
90
|
+
color: "B60205"
|
|
91
|
+
description: Incident issue generated from deployment failures
|
|
92
|
+
|
|
93
|
+
- name: deployment
|
|
94
|
+
color: "1D76DB"
|
|
95
|
+
description: Deployment and environment operations
|
|
96
|
+
|
|
97
|
+
- name: cd
|
|
98
|
+
color: "5319E7"
|
|
99
|
+
description: Continuous deployment automation
|
|
100
|
+
|
|
101
|
+
- name: bug
|
|
102
|
+
color: "D73A4A"
|
|
103
|
+
description: Backward-compatible alias for existing bug reports
|
|
104
|
+
|
|
105
|
+
- name: enhancement
|
|
106
|
+
color: "A2EEEF"
|
|
107
|
+
description: Backward-compatible alias for feature requests
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Release PR Template
|
|
2
|
+
|
|
3
|
+
Use this template whenever opening a release PR (`dev → main`). Reference `release-notes.md` and verify QA steps before merging.
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
- Describe what changed (e.g., alerts, APIs, docs).
|
|
8
|
+
- Link to the release note: [release-notes.md](release-notes.md).
|
|
9
|
+
- Note any rollout considerations (e.g., Alertmanager rules, Docker image tag).
|
|
10
|
+
|
|
11
|
+
## Verification
|
|
12
|
+
|
|
13
|
+
- `uv run poe lint`
|
|
14
|
+
- `./.venv/bin/pytest -v`
|
|
15
|
+
- `docker compose build`
|
|
16
|
+
- Reload Prometheus/Alertmanager (see `observability.md` → "Reloading Alert Rules").
|
|
17
|
+
|
|
18
|
+
## QA Checklist
|
|
19
|
+
|
|
20
|
+
- [ ] Release note referenced above
|
|
21
|
+
- [ ] Alert rules reloaded in target environment
|
|
22
|
+
- [ ] Docker image tagged and pushed (`ghcr.io/thedataenginex/dex:sha-<8-char-sha>`)
|
|
23
|
+
- [ ] Observability and QA docs updated as needed
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Auto PR
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- dev
|
|
7
|
+
- 'feature/**'
|
|
8
|
+
- 'fix/**'
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: write
|
|
12
|
+
pull-requests: write
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
feature-to-dev:
|
|
16
|
+
if: startsWith(github.ref, 'refs/heads/feature/') || startsWith(github.ref, 'refs/heads/fix/')
|
|
17
|
+
uses: TheDataEngineX/.github/.github/workflows/auto-pr-to-dev.yml@main
|
|
18
|
+
secrets: inherit
|
|
19
|
+
|
|
20
|
+
dev-to-main:
|
|
21
|
+
if: github.ref == 'refs/heads/dev'
|
|
22
|
+
uses: TheDataEngineX/.github/.github/workflows/auto-pr-dev-to-main.yml@main
|
|
23
|
+
secrets: inherit
|