{"id":49953568,"url":"https://github.com/marquesantero/contractforge","last_synced_at":"2026-06-18T00:00:18.411Z","repository":{"id":357595477,"uuid":"1234005293","full_name":"marquesantero/contractforge","owner":"marquesantero","description":"Contract-first framework for governed lakehouse ingestion on Delta Lake and Databricks.","archived":false,"fork":false,"pushed_at":"2026-05-24T22:10:11.000Z","size":7022,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-24T22:10:13.540Z","etag":null,"topics":["data-contracts","data-engineering","databricks","delta-lake","ingestion","lakehouse","openlineage","pyspark"],"latest_commit_sha":null,"homepage":"https://marquesantero.github.io/contractforge/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marquesantero.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-09T16:18:05.000Z","updated_at":"2026-05-24T21:52:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/marquesantero/contractforge","commit_stats":null,"previous_names":["marquesantero/lakehouse-ingestion-framework","marquesantero/contractforge"],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/marquesantero/contractforge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marquesantero%2Fcontractforge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marquesantero%2Fcontractforge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marquesantero%2Fcontractforge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marquesantero%2Fcontractforge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marquesantero","download_url":"https://codeload.github.com/marquesantero/contractforge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marquesantero%2Fcontractforge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33546836,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-contracts","data-engineering","databricks","delta-lake","ingestion","lakehouse","openlineage","pyspark"],"created_at":"2026-05-17T21:13:38.352Z","updated_at":"2026-06-18T00:00:18.351Z","avatar_url":"https://github.com/marquesantero.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo/contractforge-logo.png\" alt=\"ContractForge\" width=\"520\"\u003e\n\u003c/p\u003e\n\n# ContractForge\n\n**Define ingestion intent once. Run it natively anywhere.**\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/marquesantero/contractforge/actions/workflows/ci.yml\"\u003e\u003cimg alt=\"CI\" src=\"https://github.com/marquesantero/contractforge/actions/workflows/ci.yml/badge.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/marquesantero/contractforge/actions/workflows/release.yml\"\u003e\u003cimg alt=\"Release\" src=\"https://github.com/marquesantero/contractforge/actions/workflows/release.yml/badge.svg\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/marquesantero/contractforge\"\u003e\u003cimg alt=\"Product\" src=\"https://img.shields.io/badge/product-ContractForge-0B5FFF\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://marquesantero.github.io/contractforge/\"\u003e\u003cimg alt=\"Documentation\" src=\"https://img.shields.io/badge/docs-online-2EA44F\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/marquesantero/contractforge/tree/main/src/contractforge_core\"\u003e\u003cimg alt=\"Core\" src=\"https://img.shields.io/badge/core-contractforge--core-1F6FEB\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/marquesantero/contractforge/tree/main/ai\"\u003e\u003cimg alt=\"ContractForge AI\" src=\"https://img.shields.io/badge/ai-contractforge--ai-7B3FE4\"\u003e\u003c/a\u003e\n  \u003cimg alt=\"Python\" src=\"https://img.shields.io/badge/python-%3E%3D3.10-blue\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/marquesantero/contractforge\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://marquesantero.github.io/contractforge/\"\u003eDocumentation\u003c/a\u003e\n  ·\n  \u003ca href=\"docs/quickstart.md\"\u003eQuick Start\u003c/a\u003e\n  ·\n  \u003ca href=\"docs/adapters.md\"\u003eAdapters\u003c/a\u003e\n  ·\n  \u003ca href=\"ai/README.md\"\u003eContractForge AI\u003c/a\u003e\n  ·\n  \u003ca href=\"docs/roadmap.md\"\u003eRoadmap\u003c/a\u003e\n\u003c/p\u003e\n\n**Covered platforms:** Databricks, AWS Glue/Iceberg, Snowflake, Microsoft Fabric\nLakehouse and Google Cloud BigQuery. The adapters are separate packages, but\nthey execute the same contract vocabulary through native platform behavior.\n\nContractForge is a multi-runtime, contract-first ingestion platform. It turns\ngoverned ingestion intent into native platform execution and evidence while\nkeeping the contract vocabulary stable across Databricks, AWS, Snowflake and\nGCP, with Fabric and future adapters following the same core boundary.\n\nThe product remains **ContractForge**. `contractforge-core`,\n`contractforge-databricks`, `contractforge-aws`, `contractforge-fabric`,\n`contractforge-snowflake`, `contractforge-gcp` and `contractforge-ai` are\nfunctional package boundaries, not separate products.\n\nIt is built for data consultants, platform teams and engineering groups that\nneed repeatable governed ingestion across different client runtimes without\nrewriting the framework for every platform.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/diagrams/contractforge-flow.svg\" alt=\"ContractForge flow from contract to semantic core, capability matcher, platform adapter and native artifacts\" width=\"900\"\u003e\n\u003c/p\u003e\n\n## Why ContractForge\n\n| Capability | What it means |\n| --- | --- |\n| Contract-first ingestion | Source, target, write mode, schema policy, transforms, quality, access, operations and evidence live in reviewed YAML contracts. |\n| Honest portability | The planner returns `SUPPORTED`, `SUPPORTED_WITH_WARNINGS`, `REVIEW_REQUIRED` or `UNSUPPORTED`; it does not silently downgrade semantics. |\n| Native adapters | Databricks, AWS, Snowflake, Fabric and GCP translate the same intent into native runtime behavior instead of forcing a lowest-common-denominator engine. |\n| Evidence as product surface | Runs, errors, quality, quarantine, schema changes, lineage, governance actions and cost signals are tracked consistently. |\n| Reusable connections | Shared `connection.yaml` files centralize connector defaults; ingestion contracts override only dataset-specific fields. |\n| AI-assisted project design | ContractForge AI turns prompts and schemas into reviewable projects, then validates them through Core and adapter planners. |\n\nContractForge is not a scheduler, a dbt replacement, a closed ingestion runtime\nor a universal Spark wrapper. It is the semantic contract and adapter layer for\nrepeatable governed ingestion.\n\n## How It Works\n\n```text\nContract YAML\n  -\u003e Semantic Core\n  -\u003e Capability Matcher\n  -\u003e Abstract Execution Plan\n  -\u003e Platform Adapter\n  -\u003e Native Runtime + Evidence\n```\n\nThe core owns portable semantics. Adapters own platform behavior.\nThe core does not import Spark, Databricks SDK, boto3, Azure SDK, Fabric SDK or Snowflake clients.\n\n## See It In 30 Seconds\n\n```yaml\nsource:\n  type: incremental_files\n  path: s3://landing/orders\n  format: json\n\ntarget:\n  catalog: main\n  schema: bronze\n  table: orders\n\nmode: append\nschema_policy: additive_only\nquality_rules:\n  not_null: [order_id]\n```\n\nCore planning result:\n\n```text\nSUPPORTED\n```\n\nThe Databricks adapter may render Delta/Auto Loader/Asset Bundle artifacts. The\nAWS adapter may render and deploy Glue Spark/Iceberg artifacts. Another adapter\nmay return `SUPPORTED_WITH_WARNINGS`, `REVIEW_REQUIRED` or `UNSUPPORTED` if it\ncannot preserve the same semantics safely.\n\n## Status And Roadmap\n\n| Area | Status | Notes |\n| --- | --- | --- |\n| Core semantic model | Active | Contract models, semantic normalization, capability matching, abstract planning and evidence models are implemented. |\n| Databricks adapter | Reference implementation | Delta, Unity Catalog, Auto Loader, Lakeflow planning, Asset Bundles, control tables, quality, governance, lineage, cost and dashboards are implemented inside the adapter boundary. |\n| AWS adapter | Stable supported surface | Glue Spark/Iceberg planning, source support, quality/evidence, Lake Formation review/apply helpers, annotations, operations, S3 artifact publication, one-command Glue deployment, orchestration, cost reconciliation and Glue job helper APIs are validated for the documented `aws_glue_iceberg` surface. |\n| ContractForge AI | Active | Deterministic review, project generation, diagnostics, provider routing and optional model-backed enrichment over the same core contract semantics. |\n| Snowflake adapter | Stable supported surface | SQL warehouse runtime, hosted Snowpark procedure library runner, table/SQL/bounded REST/staged-file sources, write modes, quality, schema policy, governance, evidence, lineage and cost reconciliation are validated for the documented `snowflake_sql_warehouse` surface. |\n| Fabric adapter | Stable supported surface | Notebook-first Lakehouse execution, broad source expansion, core write modes, evidence, governance review/apply helpers and deployment promotion are validated for the documented `fabric_lakehouse` surface. |\n| GCP adapter | Stable supported surface | BigQuery table/view/SQL sources, GCS load jobs, registered BigLake Iceberg reads, append/overwrite/explicit-column upsert, SQL quality, evidence, row policies, direct masking, policy tags and descriptions are validated for the documented `gcp_bigquery` surface. |\n\nSee [roadmap](docs/roadmap.md) for adapter maturity and release criteria.\n\n## Compared With Alternatives\n\n| Alternative | Difference |\n| --- | --- |\n| dbt | dbt models data after it lands. ContractForge defines how governed data arrives, is written, validated and evidenced. |\n| Airbyte/Fivetran | They provide managed ingestion runtimes. ContractForge provides the contract and lets adapters execute natively in your platform. |\n| Data contract tools | Validation is one slice. ContractForge covers source, write semantics, schema policy, quality, governance, evidence and native execution artifacts. |\n| Platform-specific frameworks | ContractForge keeps platform implementations in adapters so the same semantics can be evaluated for other runtimes. |\n\n## Install\n\nFrom GitHub:\n\n```bash\npip install \"git+https://github.com/marquesantero/contractforge.git\"\npip install \"git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/databricks\"\npip install \"git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/aws\"\npip install \"git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/fabric\"\npip install \"git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/snowflake\"\npip install \"git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/gcp\"\npip install \"git+https://github.com/marquesantero/contractforge.git#subdirectory=ai\"\n```\n\nLocal development:\n\n```bash\nuv sync --all-extras\nuv run pytest\n```\n\nBuild wheels independently:\n\n```bash\nuv build --wheel\ncd adapters/databricks \u0026\u0026 uv build --wheel\ncd ../aws \u0026\u0026 uv build --wheel\ncd ../snowflake \u0026\u0026 uv build --wheel\ncd ../../ai \u0026\u0026 uv build --wheel\n```\n\nRelease package names:\n\n```bash\npip install contractforge-core contractforge-databricks contractforge-aws contractforge-snowflake contractforge-fabric contractforge-gcp contractforge-ai\n```\n\n## Packages And Releases\n\nContractForge is published as independent PyPI packages from one repository.\nThe package boundary is intentional: the core stays platform-neutral, while\nadapters carry native runtime dependencies and behavior.\n\n| Package | Current version | PyPI | Source |\n| --- | --- | --- | --- |\n| `contractforge-core` | `0.1.0` | [PyPI](https://pypi.org/project/contractforge-core/) | [core](src/contractforge_core) |\n| `contractforge-databricks` | `0.1.0` | [PyPI](https://pypi.org/project/contractforge-databricks/) | [adapter](adapters/databricks) |\n| `contractforge-aws` | `0.1.0` | [PyPI](https://pypi.org/project/contractforge-aws/) | [adapter](adapters/aws) |\n| `contractforge-snowflake` | `0.1.0` | [PyPI](https://pypi.org/project/contractforge-snowflake/) | [adapter](adapters/snowflake) |\n| `contractforge-fabric` | `0.1.0` | [PyPI](https://pypi.org/project/contractforge-fabric/) | [adapter](adapters/fabric) |\n| `contractforge-gcp` | `0.1.0` | [PyPI](https://pypi.org/project/contractforge-gcp/) | [adapter](adapters/gcp) |\n| `contractforge-ai` | `0.2.9` | [PyPI](https://pypi.org/project/contractforge-ai/) | [AI companion](ai) |\n\nReleases are built by [`.github/workflows/release.yml`](.github/workflows/release.yml).\nThe workflow can be started manually with `workflow_dispatch` for one package,\nor by pushing package-specific tags:\n\n```text\nv\u003cversion\u003e-core\nv\u003cversion\u003e-databricks\nv\u003cversion\u003e-aws\nv\u003cversion\u003e-snowflake\nv\u003cversion\u003e-fabric\nv\u003cversion\u003e-gcp\nv\u003cversion\u003e-ai\n```\n\nPyPI does not allow overwriting an existing version. Before publishing from this\nrepository, bump the target package version and publish a new tag or manual\nrelease workflow run.\n\n## Project Shape\n\nA complete ContractForge project keeps runtime concerns separate from contract\nsemantics:\n\n```text\nproject.yaml\nenvironments/\n  databricks.environment.yaml\n  aws.environment.yaml\nconnections/\n  supabase.yaml\ncontracts/\n  bronze/\n    b_products/\n      b_products.ingestion.yaml\n      b_products.annotations.yaml\n      b_products.operations.yaml\n      b_products.access.yaml\n```\n\nExample shared connection:\n\n```yaml\nsource:\n  type: connector\n  connector: postgres\n  system: supabase\n  options:\n    url: \"{{ secret:supabase/jdbc_url }}\"\nauth:\n  type: basic\n  username: \"{{ secret:supabase/user }}\"\n  password: \"{{ secret:supabase/password }}\"\nread:\n  fetchsize: 20000\n```\n\nExample ingestion override:\n\n```yaml\nsource:\n  type: connection\n  connection_path: project://connections/supabase.yaml\n  table: public.products\n  read:\n    partition_column: product_id\n    num_partitions: 8\n```\n\nThe core resolves the connection before adapters plan or execute. Ingestion\nvalues override global connection defaults.\n\n## Platform Adapters\n\n| Adapter | Package | Status | Native responsibilities |\n| --- | --- | --- | --- |\n| Databricks | `contractforge-databricks` | Reference implementation | Delta, Unity Catalog, Auto Loader, Lakeflow planning, Jobs, Asset Bundles, control tables, governance, lineage, cost and dashboards. |\n| AWS | `contractforge-aws` | Stable supported surface | Glue Spark, Iceberg, Glue Catalog, Lake Formation review/apply helpers, S3 artifacts, Glue jobs, Athena/Iceberg evidence and cost records for the documented `aws_glue_iceberg` surface. |\n| Fabric | `contractforge-fabric` | Stable supported surface | Notebook-first Lakehouse execution, Lakehouse Delta writes, source expansion, shortcut reads, Kafka catch-up, core write modes, control evidence, workspace roles, sensitivity labels and OneLake data access role apply helpers for the documented `fabric_lakehouse` surface. |\n| Snowflake | `contractforge-snowflake` | Stable supported surface | SQL warehouse runtime, hosted Snowpark procedure library runner with staged ZIP imports, table/SQL/bounded REST/staged-file sources, append/overwrite/upsert/hash-diff writes, quality, schema policy, governance, evidence/control tables, lineage, cost reconciliation and project deployment for the documented `snowflake_sql_warehouse` surface. Task graph live execution still needs task grants. See [Snowflake adapter guide](docs/adapters/snowflake.md). |\n| GCP | `contractforge-gcp` | Stable supported surface | BigQuery table/view/SQL sources, GCS load jobs, BigLake Iceberg table reads, core writes, SQL quality, evidence tables, row access policies, masking, policy tags and descriptions for the documented `gcp_bigquery` surface. |\n\nUse the same project model for adapter deployment:\n\n```bash\ncontractforge-databricks deploy-project examples/real-world/supabase-jdbc-medallion/project.yaml --target dev\ncontractforge-aws deploy-project examples/real-world/supabase-jdbc-medallion/project.yaml --dry-run --summary-only\n```\n\n## ContractForge AI\n\nContractForge AI is the planning and review companion. It can generate project\nscaffolds from prompts and schemas, validate project folders, compare adapter\nplanning and produce clear HTML approval reports.\n\n```bash\ncontractforge-ai guided-project \\\n  --intent \"Create a Supabase medallion project for Databricks, AWS, Snowflake, Fabric and GCP daily at 6 Sao Paulo time.\" \\\n  --schema schemas/products.json \\\n  --target contractforge-yaml \\\n  --allow-review-required \\\n  --output-dir generated/supabase\n\ncontractforge-ai validate-project-structure generated/supabase \\\n  --adapter databricks \\\n  --adapter aws \\\n  --adapter snowflake \\\n  --adapter fabric \\\n  --adapter gcp \\\n  --format html \u003e generated/supabase/project_validation.html\n```\n\nModel providers are optional. Deterministic validation and adapter planners\nremain the source of truth; providers can explain or enrich, but they cannot\ninvent support status.\n\n## Core Planning Example\n\n```python\nfrom contractforge_core.capabilities import PlatformCapabilities\nfrom contractforge_core.contracts import semantic_contract_from_mapping, validate_contract\nfrom contractforge_core.planner import plan_contract\n\ncontract = validate_contract(\n    {\n        \"source\": {\"type\": \"incremental_files\", \"path\": \"s3://landing/orders\", \"format\": \"json\"},\n        \"target\": {\"catalog\": \"main\", \"schema\": \"bronze\", \"table\": \"orders\"},\n        \"mode\": \"append\",\n        \"schema_policy\": \"additive_only\",\n        \"quality_rules\": {\"not_null\": [\"order_id\"]},\n    }\n)\n\nsemantic = semantic_contract_from_mapping(contract)\ncapabilities = PlatformCapabilities(\n    platform=\"example\",\n    supports_append=True,\n    supports_overwrite=True,\n    supports_merge=False,\n    evidence_stores=(\"audit_tables\",),\n)\n\nresult = plan_contract(semantic, capabilities)\nprint(result.status)\n```\n\n## Package Boundaries\n\n| Layer | Package | Responsibility |\n| --- | --- | --- |\n| Semantic core | `contractforge-core` | Contract models, validation, semantic normalization, capability matching, abstract plans, portability diagnostics and neutral evidence models. |\n| Databricks adapter | `contractforge-databricks` | Databricks capabilities, rendering, runtime execution, governance, evidence filling and deployment helpers. |\n| AWS adapter | `contractforge-aws` | AWS capabilities, Glue/Iceberg planning, runtime helpers, S3 publication, deployment helpers and evidence filling. |\n| Fabric adapter | `contractforge-fabric` | Fabric Lakehouse capabilities, Notebook rendering/execution, source expansion, governance apply helpers and deployment promotion. |\n| Snowflake adapter | `contractforge-snowflake` | Snowflake SQL warehouse capabilities, hosted procedure runtime, task graph execution, governance, lineage, cost and evidence filling. |\n| GCP adapter | `contractforge-gcp` | BigQuery capabilities, GCS load-job rendering, smoke execution, evidence DDL, governance smokes and BigLake Iceberg table support. |\n| AI companion | `contractforge-ai` | Deterministic review, project generation, diagnostics, provider routing, report generation and optional model-backed enrichment. |\n\nPublication stays split: each package builds its own wheel and all adapters\ndepend explicitly on `contractforge-core`.\n\nThe core wheel owns only `contractforge_core`; adapter wheels such as `contractforge-databricks` own their adapter package and depend explicitly on the core.\n\nSee [publication packaging](docs/specs/publication-packaging.md).\n\n## Documentation\n\n| Topic | Link |\n| --- | --- |\n| Online site | [marquesantero.github.io/contractforge](https://marquesantero.github.io/contractforge/) |\n| Documentation index | [docs/README.md](docs/README.md) |\n| Quick start | [docs/quickstart.md](docs/quickstart.md) |\n| Architecture | [docs/architecture.md](docs/architecture.md) |\n| Contracts | [docs/contracts.md](docs/contracts.md) |\n| Project YAML | [docs/project-yaml.md](docs/project-yaml.md) |\n| Connection YAML | [docs/connection-yaml.md](docs/connection-yaml.md) |\n| Adapters | [docs/adapters.md](docs/adapters.md) |\n| Databricks adapter | [docs/databricks.md](docs/databricks.md) |\n| AWS adapter | [docs/adapters/aws.md](docs/adapters/aws.md) |\n| Snowflake adapter | [docs/adapters/snowflake.md](docs/adapters/snowflake.md) |\n| Test contracts across adapters | [docs/adapters/test-contracts-across-adapters.md](docs/adapters/test-contracts-across-adapters.md) |\n| Connectors | [docs/connectors.md](docs/connectors.md) |\n| Operations and evidence | [docs/operations.md](docs/operations.md) |\n| ContractForge AI | [ai/README.md](ai/README.md) |\n| Security | [docs/security.md](docs/security.md) |\n| Adapter authoring | [docs/specs/adapter-authoring.md](docs/specs/adapter-authoring.md) |\n| Contributing | [CONTRIBUTING.md](CONTRIBUTING.md) |\n| Support | [SUPPORT.md](SUPPORT.md) |\n| Security policy | [SECURITY.md](SECURITY.md) |\n\nArchitecture contracts live under [docs/specs](docs/specs/), and decisions live\nunder [docs/adrs](docs/adrs/).\n\n## Contributing\n\nContributions are welcome when they preserve the core/adapter boundary and keep\ncontract behavior explicit. Start with [CONTRIBUTING.md](CONTRIBUTING.md), use\nthe issue templates for bugs, features or adapter gaps, and follow\n[SECURITY.md](SECURITY.md) for private vulnerability reports.\n\n## Non-Goals\n\nContractForge is not:\n\n- a scheduler;\n- a universal Spark wrapper;\n- a replacement for Databricks, Glue, Fabric, Snowflake or other runtimes;\n- a promise that every contract runs everywhere;\n- a dbt replacement;\n- an orchestration engine;\n- a GUI product in the core.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarquesantero%2Fcontractforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarquesantero%2Fcontractforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarquesantero%2Fcontractforge/lists"}