contractforge-core 0.1.0__tar.gz → 0.2.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.
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/.gitignore +11 -0
- contractforge_core-0.2.0/CHANGELOG.md +34 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/PKG-INFO +102 -51
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/README.md +96 -45
- contractforge_core-0.2.0/docs/README.md +159 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adapters/aws.md +62 -147
- contractforge_core-0.2.0/docs/adapters/fabric.md +250 -0
- contractforge_core-0.2.0/docs/adapters/gcp.md +297 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adapters/snowflake.md +76 -65
- contractforge_core-0.2.0/docs/adapters/test-contracts-across-adapters.md +528 -0
- contractforge_core-0.2.0/docs/adapters.md +186 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adrs/ADR-007-aws-glue-iceberg-adapter.md +6 -6
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/anti-patterns.md +2 -2
- contractforge_core-0.2.0/docs/cli.md +88 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/contracts.md +1 -1
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/databricks.md +22 -14
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/development-agents.md +6 -3
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/platform-parity-tests.md +51 -45
- contractforge_core-0.2.0/docs/presentations/contractforge-apresentacao-slides.html +1055 -0
- contractforge_core-0.2.0/docs/presentations/contractforge-apresentacao.md +452 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/project-yaml.md +56 -30
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/quickstart.md +6 -4
- contractforge_core-0.2.0/docs/reports/aws-hashdiff-production-benchmark.json +136 -0
- contractforge_core-0.2.0/docs/reports/aws-historical-semantics-decision.json +26 -0
- contractforge_core-0.2.0/docs/reports/aws-kafka-provider-matrix.json +115 -0
- contractforge_core-0.2.0/docs/reports/aws-lake-formation-consumer-matrix.json +119 -0
- contractforge_core-0.2.0/docs/reports/aws-snowflake-production-maturity-plan.json +127 -0
- contractforge_core-0.2.0/docs/reports/aws-stable-surface-evidence.json +214 -0
- contractforge_core-0.2.0/docs/reports/cross-adapter-production-run-scope-check.json +53 -0
- contractforge_core-0.2.0/docs/reports/databricks-kafka-provider-smoke.json +113 -0
- contractforge_core-0.2.0/docs/reports/databricks-stable-surface-evidence.json +111 -0
- contractforge_core-0.2.0/docs/reports/fabric-adls-iceberg-table-shortcut-source-smoke.json +125 -0
- contractforge_core-0.2.0/docs/reports/fabric-adls-shortcut-source-smoke.json +118 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-http-csv-variants-source-smoke.json +116 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-http-json-source-smoke.json +82 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-http-json-variants-source-smoke.json +102 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-http-text-api-key-source-smoke.json +101 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-http-text-basic-source-smoke.json +92 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-http-text-bearer-source-smoke.json +90 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-rest-oauth-source-smoke.json +92 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-rest-source-smoke.json +82 -0
- contractforge_core-0.2.0/docs/reports/fabric-auth-rest-variants-source-smoke.json +104 -0
- contractforge_core-0.2.0/docs/reports/fabric-azure-blob-source-smoke.json +93 -0
- contractforge_core-0.2.0/docs/reports/fabric-confluent-kafka-available-now-source-smoke.json +102 -0
- contractforge_core-0.2.0/docs/reports/fabric-confluent-kafka-bounded-source-smoke.json +102 -0
- contractforge_core-0.2.0/docs/reports/fabric-deployment-pipeline-lifecycle-smoke.json +24 -0
- contractforge_core-0.2.0/docs/reports/fabric-deployment-pipeline-read-probe.json +20 -0
- contractforge_core-0.2.0/docs/reports/fabric-deployment-pipeline-stage-promotion-smoke.json +65 -0
- contractforge_core-0.2.0/docs/reports/fabric-eventhubs-kafka-available-now-source-smoke.json +105 -0
- contractforge_core-0.2.0/docs/reports/fabric-external-azure-blob-shortcut-source-smoke.json +118 -0
- contractforge_core-0.2.0/docs/reports/fabric-external-s3-shortcut-source-smoke.json +121 -0
- contractforge_core-0.2.0/docs/reports/fabric-gcs-iceberg-table-shortcut-source-smoke.json +123 -0
- contractforge_core-0.2.0/docs/reports/fabric-gcs-shortcut-source-smoke.json +118 -0
- contractforge_core-0.2.0/docs/reports/fabric-http-csv-source-smoke.json +83 -0
- contractforge_core-0.2.0/docs/reports/fabric-http-json-source-smoke.json +72 -0
- contractforge_core-0.2.0/docs/reports/fabric-http-text-source-smoke.json +83 -0
- contractforge_core-0.2.0/docs/reports/fabric-iceberg-table-shortcut-source-smoke.json +126 -0
- contractforge_core-0.2.0/docs/reports/fabric-lakehouse-file-formats-source-smoke.json +129 -0
- contractforge_core-0.2.0/docs/reports/fabric-lakehouse-text-source-smoke.json +87 -0
- contractforge_core-0.2.0/docs/reports/fabric-onelake-data-access-role-smoke.json +38 -0
- contractforge_core-0.2.0/docs/reports/fabric-onelake-row-column-policy-smoke.json +48 -0
- contractforge_core-0.2.0/docs/reports/fabric-onelake-shortcut-source-smoke.json +96 -0
- contractforge_core-0.2.0/docs/reports/fabric-platform-parity.json +62 -0
- contractforge_core-0.2.0/docs/reports/fabric-postgres-jdbc-source-smoke.json +102 -0
- contractforge_core-0.2.0/docs/reports/fabric-private-azure-blob-source-smoke.json +102 -0
- contractforge_core-0.2.0/docs/reports/fabric-project-deploy-smoke.json +59 -0
- contractforge_core-0.2.0/docs/reports/fabric-s3-compatible-shortcut-source-smoke.json +121 -0
- contractforge_core-0.2.0/docs/reports/fabric-source-expansion-stable-scope-decision.json +100 -0
- contractforge_core-0.2.0/docs/reports/fabric-sqlserver-jdbc-source-smoke.json +96 -0
- contractforge_core-0.2.0/docs/reports/fabric-stable-surface-evidence.json +242 -0
- contractforge_core-0.2.0/docs/reports/fabric-usgs-rest-e2e-smoke.json +139 -0
- contractforge_core-0.2.0/docs/reports/gcp-auth-rest-http-secret-manager-variants-blocker.json +44 -0
- contractforge_core-0.2.0/docs/reports/gcp-auth-rest-http-secret-manager-variants-smoke.json +4958 -0
- contractforge_core-0.2.0/docs/reports/gcp-authenticated-rest-secret-manager-smoke.json +1234 -0
- contractforge_core-0.2.0/docs/reports/gcp-azure-sqlserver-jdbc-gold-smoke.json +2724 -0
- contractforge_core-0.2.0/docs/reports/gcp-azure-sqlserver-jdbc-medallion-e2e-smoke.json +54 -0
- contractforge_core-0.2.0/docs/reports/gcp-azure-sqlserver-jdbc-silver-smoke.json +2651 -0
- contractforge_core-0.2.0/docs/reports/gcp-azure-sqlserver-jdbc-source-promotion-launch.json +180 -0
- contractforge_core-0.2.0/docs/reports/gcp-azure-sqlserver-jdbc-source-promotion-plan.json +160 -0
- contractforge_core-0.2.0/docs/reports/gcp-biglake-iceberg-smoke.json +122 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-advanced-write-preflight-smoke.json +95 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-advanced-write-production-benchmark.json +243 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-advanced-write-smoke.json +153 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-annotations-smoke.json +104 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-bronze-to-gold-smoke.json +436 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-csv-smoke.json +948 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-data-masking-blocker.json +41 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-data-masking-smoke.json +101 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-error-evidence-smoke.json +65 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-file-formats-smoke.json +580 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-hashdiff-production-benchmark.json +163 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-historical-edge-smoke.json +114 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-policy-tags-smoke.json +133 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-row-access-policy-smoke.json +63 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-schema-policy-gcs-source-smoke.json +128 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-schema-policy-permissive-smoke.json +105 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-schema-policy-smoke.json +94 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-schema-policy-sql-source-smoke.json +103 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-schema-policy-strict-smoke.json +68 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-schema-policy-type-change-smoke.json +75 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-snapshot-variant-smoke.json +100 -0
- contractforge_core-0.2.0/docs/reports/gcp-bigquery-upsert-smoke.json +137 -0
- contractforge_core-0.2.0/docs/reports/gcp-confluent-kafka-dataflow-source-promotion-smoke.json +170 -0
- contractforge_core-0.2.0/docs/reports/gcp-dataplex-data-quality-execution-smoke.json +705 -0
- contractforge_core-0.2.0/docs/reports/gcp-dataplex-lineage-aspect-runtime-decision.json +39 -0
- contractforge_core-0.2.0/docs/reports/gcp-dataplex-lineage-aspects-smoke.json +112 -0
- contractforge_core-0.2.0/docs/reports/gcp-dataplex-lineage-dq-scope-decision.json +74 -0
- contractforge_core-0.2.0/docs/reports/gcp-deployment-orchestration-scope-decision.json +64 -0
- contractforge_core-0.2.0/docs/reports/gcp-governance-ledger-evidence-smoke.json +103 -0
- contractforge_core-0.2.0/docs/reports/gcp-governance-ledger-reconciliation-plan.json +42 -0
- contractforge_core-0.2.0/docs/reports/gcp-governance-ledger-reconciliation-smoke.json +83 -0
- contractforge_core-0.2.0/docs/reports/gcp-governance-stable-scope-decision.json +67 -0
- contractforge_core-0.2.0/docs/reports/gcp-hashdiff-cross-adapter-production-parity.json +69 -0
- contractforge_core-0.2.0/docs/reports/gcp-http-file-binary-bigquery-smoke.json +3698 -0
- contractforge_core-0.2.0/docs/reports/gcp-http-file-materialization-local-smoke.json +52 -0
- contractforge_core-0.2.0/docs/reports/gcp-http-sources-bigquery-smoke.json +4519 -0
- contractforge_core-0.2.0/docs/reports/gcp-http-text-bigquery-smoke-blocker.json +37 -0
- contractforge_core-0.2.0/docs/reports/gcp-http-text-materialization-local-smoke.json +40 -0
- contractforge_core-0.2.0/docs/reports/gcp-raw-iceberg-registration-smoke.json +96 -0
- contractforge_core-0.2.0/docs/reports/gcp-schema-policy-type-mutation-decision.json +48 -0
- contractforge_core-0.2.0/docs/reports/gcp-stable-surface-evidence.json +671 -0
- contractforge_core-0.2.0/docs/reports/gcp-streaming-scope-decision.json +46 -0
- contractforge_core-0.2.0/docs/reports/gcp-usgs-rest-e2e-smoke.json +12060 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-certified-runner-smoke.json +250 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-cleanup-command-smoke.json +62 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-command-readback-smoke.json +68 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-execution-runid-smoke.json +80 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-quality-semantics-smoke.json +86 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-runner-evidence-smoke.json +81 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-runner-smoke.json +116 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-schema-evidence-smoke.json +65 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-target-evidence-cleanup-smoke.json +75 -0
- contractforge_core-0.2.0/docs/reports/gcp-workflows-write-failure-evidence-smoke.json +75 -0
- contractforge_core-0.2.0/docs/reports/gcp-write-mode-scope-decision.json +52 -0
- contractforge_core-0.2.0/docs/reports/geojson-test-presentation.md +169 -0
- contractforge_core-0.2.0/docs/reports/snowflake-access-policy-smoke.json +57 -0
- contractforge_core-0.2.0/docs/reports/snowflake-continuous-ingestion-decision.json +44 -0
- contractforge_core-0.2.0/docs/reports/snowflake-hashdiff-production-benchmark.json +155 -0
- contractforge_core-0.2.0/docs/reports/snowflake-historical-semantics-decision.json +26 -0
- contractforge_core-0.2.0/docs/reports/snowflake-stable-surface-evidence.json +181 -0
- contractforge_core-0.2.0/docs/reports/snowflake-task-graph-live-smoke.json +79 -0
- contractforge_core-0.2.0/docs/roadmap.md +75 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/security.md +7 -1
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/adapter-authoring.md +31 -14
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/adapter-technical-review-checklist.md +5 -3
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/api-stability.md +32 -17
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/aws-adapter-hardening-checklist.md +1 -1
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/aws-adapter.md +16 -16
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/aws-capability-parity.md +8 -8
- contractforge_core-0.2.0/docs/specs/aws-ga-criteria.md +229 -0
- contractforge_core-0.2.0/docs/specs/aws-ga-waivers.md +57 -0
- contractforge_core-0.2.0/docs/specs/aws-snowflake-production-maturity-plan.md +164 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/aws-stabilization-matrix.md +16 -16
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/contract-sections.md +2 -2
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/control-table-parity.md +2 -2
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/databricks-adapter.md +14 -14
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/databricks-contractforge-parity.md +6 -6
- contractforge_core-0.2.0/docs/specs/databricks-ga-criteria.md +401 -0
- contractforge_core-0.2.0/docs/specs/databricks-ga-waivers.md +118 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/environment-contract.md +21 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/execution-plan.md +1 -1
- contractforge_core-0.2.0/docs/specs/gcp-capability-parity.md +288 -0
- contractforge_core-0.2.0/docs/specs/hash-diff-production-benchmark-runbook.md +131 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/parameter-defaults.md +1 -1
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/platform-capabilities.md +5 -5
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/platform-contract-parity.md +6 -6
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/portability-boundaries.md +2 -2
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/publication-packaging.md +34 -3
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/semantic-contract.md +19 -19
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/snowflake-adapter-implementation-plan.md +17 -17
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/snowflake-adapter-parity-execution-plan.md +7 -7
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/snowflake-capability-parity.md +12 -12
- contractforge_core-0.2.0/docs/specs/snowflake-ga-criteria.md +226 -0
- contractforge_core-0.2.0/docs/specs/snowflake-ga-waivers.md +57 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/snowflake-stabilization-matrix.md +18 -18
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/write-engines.md +15 -15
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/usage-guide.md +6 -6
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/pyproject.toml +7 -7
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/cli.py +2 -2
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/cli_contracts.py +4 -3
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/cli_init.py +6 -4
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/config.py +43 -1
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/normalize.py +3 -3
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/root.py +5 -4
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/schema.py +12 -6
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/execution/write_modes.py +2 -2
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/portability.py +5 -3
- contractforge_core-0.1.0/CHANGELOG.md +0 -14
- contractforge_core-0.1.0/docs/README.md +0 -88
- contractforge_core-0.1.0/docs/adapters/test-contracts-across-adapters.md +0 -103
- contractforge_core-0.1.0/docs/adapters.md +0 -153
- contractforge_core-0.1.0/docs/reports/geojson-supabase-test-presentation.md +0 -993
- contractforge_core-0.1.0/docs/roadmap.md +0 -73
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/LICENSE +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adrs/ADR-001-core-adapter-architecture.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adrs/ADR-002-databricks-reference-adapter.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adrs/ADR-003-portable-vs-platform-specific-semantics.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adrs/ADR-004-source-portability-and-connector-scope.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adrs/ADR-005-adapter-parameter-policy.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adrs/ADR-006-environment-contract.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/adrs/ADR-008-core-connector-centralization-and-independence.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/architecture.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/assets/diagrams/contractforge-flow.svg +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/assets/logo/contractforge-logo.png +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/assets/logo/contractforge-mark.png +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/connection-yaml.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/connectors.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/naming.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/operations.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/project-template.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/reports/adapter-technical-review-summary.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/reports/aws-adapter-review.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/reports/databricks-adapter-review.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/reports/snowflake-adapter-review.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/adapter-parameter-policy.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/evidence-mapping-matrix.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/evidence-model.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/extensions-aws.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/extensions-databricks.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/docs/specs/source-portability.md +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/adapters/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/adapters/base/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/adapters/base/generic.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/adapters/base/protocol.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/capabilities/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/capabilities/models.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/capabilities/native.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/cli_connectors.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/cli_io.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/rest/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/rest/auth.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/rest/pagination.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/rest/reader.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/rest/retry.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/rest/safety.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/rest/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/api/rest/transport.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/catalog/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/catalog/catalog/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/catalog/catalog/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/catalog/catalog/table_refs.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/databases/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/databases/jdbc/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/databases/jdbc/rds_iam.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/databases/jdbc/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/files/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/files/files/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/files/files/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/http_files/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/http_files/http_file/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/http_files/http_file/reader.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/http_files/http_file/retry.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/http_files/http_file/safety.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/http_files/http_file/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/metadata.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/native_passthrough/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/native_passthrough/native_passthrough/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/native_passthrough/native_passthrough/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/registry.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/sharing/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/sharing/delta_share/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/sharing/delta_share/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/streams/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/streams/eventhubs/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/streams/eventhubs/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/streams/kafka/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/streams/kafka/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/connectors/streams/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/access.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/annotations.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/base.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/bundle.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/environment.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/execution.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/governance.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/governance_common.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/naming.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/operations.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/plan_validation.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/quality.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/shape_validation.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/source.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/source_connector.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/source_generic.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/source_portability.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/source_validation.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/targeting.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/contracts/transform.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/diagnostics/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/diagnostics/models.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/errors.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/evidence/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/evidence/control_tables.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/evidence/models.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/evidence/records.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/execution/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/execution/results.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/execution/strategy.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/execution/windows.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/metrics/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/metrics/write.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/naming.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/normalization/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/normalization/common.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/normalization/intents.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/normalization/quality.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/parity/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/parity/models.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/partitioning/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/partitioning/predicates.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/planner/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/planner/governance_checks.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/planner/matcher.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/planner/plan_builder.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/planner/result.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/planner/semantic_checks.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/planner/write_checks.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/preparation/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/preparation/staging.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/project.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/quality/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/quality/results.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/quality/rules.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/reporting/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/reporting/models.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/results.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/runtime/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/runtime/models.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/schema/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/schema/diff.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/schema/policy.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/security/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/security/redaction.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/semantic/__init__.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/semantic/models.py +0 -0
- {contractforge_core-0.1.0 → contractforge_core-0.2.0}/src/contractforge_core/watermark.py +0 -0
|
@@ -8,6 +8,7 @@ __pycache__/
|
|
|
8
8
|
.tmp/
|
|
9
9
|
dist/
|
|
10
10
|
build/
|
|
11
|
+
test-runs/
|
|
11
12
|
*.egg
|
|
12
13
|
.coverage
|
|
13
14
|
.coverage.*
|
|
@@ -16,3 +17,13 @@ htmlcov/
|
|
|
16
17
|
.env
|
|
17
18
|
.env.*
|
|
18
19
|
!.env.example
|
|
20
|
+
api-key-*.txt
|
|
21
|
+
|
|
22
|
+
# Local agent/tooling state; never publish these.
|
|
23
|
+
.claude/
|
|
24
|
+
.codex/
|
|
25
|
+
.agents/
|
|
26
|
+
.vscode/
|
|
27
|
+
AGENTS.md
|
|
28
|
+
RTK.md
|
|
29
|
+
tools/rtk.ps1
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `contractforge-core` are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format follows Keep a Changelog, and this package follows semantic
|
|
6
|
+
versioning as described in `docs/specs/api-stability.md`.
|
|
7
|
+
|
|
8
|
+
## [0.2.0] - 2026-06-19
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Promoted the public package set for the current ContractForge maturity
|
|
13
|
+
baseline across core, Databricks, AWS, Snowflake, Fabric, GCP and AI.
|
|
14
|
+
- Added project and connection semantics used by the cross-platform test
|
|
15
|
+
projects, including reusable source defaults and environment-specific
|
|
16
|
+
bindings.
|
|
17
|
+
- Added stable writer aliases for contract authoring: `append`, `overwrite`,
|
|
18
|
+
`upsert`, `hash_diff_upsert`, `historical` and
|
|
19
|
+
`snapshot_reconcile_soft_delete`.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Updated packaging and release metadata for the independent PyPI
|
|
24
|
+
distributions.
|
|
25
|
+
- Kept adapter-specific behavior outside the core package while aligning the
|
|
26
|
+
core validation boundary with the current adapter surfaces.
|
|
27
|
+
|
|
28
|
+
## [0.1.0] - 2026-06-08
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- Initial public preview release of the platform-neutral ContractForge core.
|
|
33
|
+
- Semantic contract models, project parsing, capability matching, planning,
|
|
34
|
+
source connector catalog, evidence models and the `contractforge` CLI.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: contractforge-core
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Platform-neutral semantic core for contract-first data ingestion.
|
|
5
|
-
Project-URL: Homepage, https://github.com/marquesantero/contractforge
|
|
6
|
-
Project-URL: Documentation, https://marquesantero.github.io/contractforge
|
|
7
|
-
Project-URL: Repository, https://github.com/marquesantero/contractforge
|
|
8
|
-
Project-URL: Issues, https://github.com/marquesantero/contractforge
|
|
9
|
-
Project-URL: Changelog, https://github.com/marquesantero/contractforge
|
|
5
|
+
Project-URL: Homepage, https://github.com/marquesantero/contractforge
|
|
6
|
+
Project-URL: Documentation, https://marquesantero.github.io/contractforge/
|
|
7
|
+
Project-URL: Repository, https://github.com/marquesantero/contractforge
|
|
8
|
+
Project-URL: Issues, https://github.com/marquesantero/contractforge/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/marquesantero/contractforge/blob/main/CHANGELOG.md
|
|
10
10
|
Author: ContractForge contributors
|
|
11
11
|
License: MIT
|
|
12
12
|
License-File: LICENSE
|
|
@@ -38,19 +38,18 @@ Description-Content-Type: text/markdown
|
|
|
38
38
|
**Define ingestion intent once. Run it natively anywhere.**
|
|
39
39
|
|
|
40
40
|
<p align="center">
|
|
41
|
-
<a href="https://github.com/marquesantero/contractforge
|
|
42
|
-
<a href="https://github.com/marquesantero/contractforge
|
|
43
|
-
<a href="https://
|
|
44
|
-
<a href="https://github.
|
|
45
|
-
<a href="https://github.com/marquesantero/contractforge
|
|
46
|
-
<a href="https://github.com/marquesantero/contractforge
|
|
47
|
-
<a href="https://github.com/marquesantero/contractforge-core/tree/main/ai"><img alt="ContractForge AI" src="https://img.shields.io/badge/ai-contractforge--ai-7B3FE4"></a>
|
|
41
|
+
<a href="https://github.com/marquesantero/contractforge/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/marquesantero/contractforge/actions/workflows/ci.yml/badge.svg"></a>
|
|
42
|
+
<a href="https://github.com/marquesantero/contractforge/actions/workflows/release.yml"><img alt="Release" src="https://github.com/marquesantero/contractforge/actions/workflows/release.yml/badge.svg"></a>
|
|
43
|
+
<a href="https://github.com/marquesantero/contractforge"><img alt="Product" src="https://img.shields.io/badge/product-ContractForge-0B5FFF"></a>
|
|
44
|
+
<a href="https://marquesantero.github.io/contractforge/"><img alt="Documentation" src="https://img.shields.io/badge/docs-online-2EA44F"></a>
|
|
45
|
+
<a href="https://github.com/marquesantero/contractforge/tree/main/src/contractforge_core"><img alt="Core" src="https://img.shields.io/badge/core-contractforge--core-1F6FEB"></a>
|
|
46
|
+
<a href="https://github.com/marquesantero/contractforge/tree/main/ai"><img alt="ContractForge AI" src="https://img.shields.io/badge/ai-contractforge--ai-7B3FE4"></a>
|
|
48
47
|
<img alt="Python" src="https://img.shields.io/badge/python-%3E%3D3.10-blue">
|
|
49
|
-
<a href="LICENSE"><img alt="License" src="https://img.shields.io/github/license/marquesantero/contractforge
|
|
48
|
+
<a href="LICENSE"><img alt="License" src="https://img.shields.io/github/license/marquesantero/contractforge"></a>
|
|
50
49
|
</p>
|
|
51
50
|
|
|
52
51
|
<p align="center">
|
|
53
|
-
<a href="https://marquesantero.github.io/contractforge
|
|
52
|
+
<a href="https://marquesantero.github.io/contractforge/">Documentation</a>
|
|
54
53
|
·
|
|
55
54
|
<a href="docs/quickstart.md">Quick Start</a>
|
|
56
55
|
·
|
|
@@ -61,14 +60,19 @@ Description-Content-Type: text/markdown
|
|
|
61
60
|
<a href="docs/roadmap.md">Roadmap</a>
|
|
62
61
|
</p>
|
|
63
62
|
|
|
63
|
+
**Covered platforms:** Databricks, AWS Glue/Iceberg, Snowflake, Microsoft Fabric
|
|
64
|
+
Lakehouse and Google Cloud BigQuery. The adapters are separate packages, but
|
|
65
|
+
they execute the same contract vocabulary through native platform behavior.
|
|
66
|
+
|
|
64
67
|
ContractForge is a multi-runtime, contract-first ingestion platform. It turns
|
|
65
68
|
governed ingestion intent into native platform execution and evidence while
|
|
66
|
-
keeping the contract vocabulary stable across Databricks, AWS
|
|
67
|
-
|
|
69
|
+
keeping the contract vocabulary stable across Databricks, AWS, Snowflake,
|
|
70
|
+
Fabric and GCP.
|
|
68
71
|
|
|
69
|
-
|
|
70
|
-
`contractforge-
|
|
71
|
-
functional package boundaries
|
|
72
|
+
`contractforge-core`, `contractforge-databricks`, `contractforge-aws`,
|
|
73
|
+
`contractforge-fabric`, `contractforge-snowflake`, `contractforge-gcp` and
|
|
74
|
+
`contractforge-ai` are functional package boundaries that keep platform
|
|
75
|
+
dependencies isolated while preserving the same contract language.
|
|
72
76
|
|
|
73
77
|
It is built for data consultants, platform teams and engineering groups that
|
|
74
78
|
need repeatable governed ingestion across different client runtimes without
|
|
@@ -84,15 +88,11 @@ rewriting the framework for every platform.
|
|
|
84
88
|
| --- | --- |
|
|
85
89
|
| Contract-first ingestion | Source, target, write mode, schema policy, transforms, quality, access, operations and evidence live in reviewed YAML contracts. |
|
|
86
90
|
| Honest portability | The planner returns `SUPPORTED`, `SUPPORTED_WITH_WARNINGS`, `REVIEW_REQUIRED` or `UNSUPPORTED`; it does not silently downgrade semantics. |
|
|
87
|
-
| Native adapters | Databricks and
|
|
91
|
+
| Native adapters | Databricks, AWS, Snowflake, Fabric and GCP translate the same intent into native runtime behavior instead of forcing a lowest-common-denominator engine. |
|
|
88
92
|
| Evidence as product surface | Runs, errors, quality, quarantine, schema changes, lineage, governance actions and cost signals are tracked consistently. |
|
|
89
93
|
| Reusable connections | Shared `connection.yaml` files centralize connector defaults; ingestion contracts override only dataset-specific fields. |
|
|
90
94
|
| AI-assisted project design | ContractForge AI turns prompts and schemas into reviewable projects, then validates them through Core and adapter planners. |
|
|
91
95
|
|
|
92
|
-
ContractForge is not a scheduler, a dbt replacement, a closed ingestion runtime
|
|
93
|
-
or a universal Spark wrapper. It is the semantic contract and adapter layer for
|
|
94
|
-
repeatable governed ingestion.
|
|
95
|
-
|
|
96
96
|
## How It Works
|
|
97
97
|
|
|
98
98
|
```text
|
|
@@ -120,7 +120,7 @@ target:
|
|
|
120
120
|
schema: bronze
|
|
121
121
|
table: orders
|
|
122
122
|
|
|
123
|
-
mode:
|
|
123
|
+
mode: append
|
|
124
124
|
schema_policy: additive_only
|
|
125
125
|
quality_rules:
|
|
126
126
|
not_null: [order_id]
|
|
@@ -143,32 +143,26 @@ cannot preserve the same semantics safely.
|
|
|
143
143
|
| --- | --- | --- |
|
|
144
144
|
| Core semantic model | Active | Contract models, semantic normalization, capability matching, abstract planning and evidence models are implemented. |
|
|
145
145
|
| 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. |
|
|
146
|
-
| AWS adapter |
|
|
146
|
+
| 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. |
|
|
147
147
|
| ContractForge AI | Active | Deterministic review, project generation, diagnostics, provider routing and optional model-backed enrichment over the same core contract semantics. |
|
|
148
|
-
| Snowflake adapter |
|
|
149
|
-
| Fabric adapter |
|
|
148
|
+
| 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. |
|
|
149
|
+
| 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. |
|
|
150
|
+
| 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. |
|
|
150
151
|
|
|
151
152
|
See [roadmap](docs/roadmap.md) for adapter maturity and release criteria.
|
|
152
153
|
|
|
153
|
-
## Compared With Alternatives
|
|
154
|
-
|
|
155
|
-
| Alternative | Difference |
|
|
156
|
-
| --- | --- |
|
|
157
|
-
| dbt | dbt models data after it lands. ContractForge defines how governed data arrives, is written, validated and evidenced. |
|
|
158
|
-
| Airbyte/Fivetran | They provide managed ingestion runtimes. ContractForge provides the contract and lets adapters execute natively in your platform. |
|
|
159
|
-
| Data contract tools | Validation is one slice. ContractForge covers source, write semantics, schema policy, quality, governance, evidence and native execution artifacts. |
|
|
160
|
-
| Platform-specific frameworks | ContractForge keeps platform implementations in adapters so the same semantics can be evaluated for other runtimes. |
|
|
161
|
-
|
|
162
154
|
## Install
|
|
163
155
|
|
|
164
156
|
From GitHub:
|
|
165
157
|
|
|
166
158
|
```bash
|
|
167
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
168
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
169
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
170
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
171
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
159
|
+
pip install "git+https://github.com/marquesantero/contractforge.git"
|
|
160
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/databricks"
|
|
161
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/aws"
|
|
162
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/fabric"
|
|
163
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/snowflake"
|
|
164
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/gcp"
|
|
165
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=ai"
|
|
172
166
|
```
|
|
173
167
|
|
|
174
168
|
Local development:
|
|
@@ -185,15 +179,51 @@ uv build --wheel
|
|
|
185
179
|
cd adapters/databricks && uv build --wheel
|
|
186
180
|
cd ../aws && uv build --wheel
|
|
187
181
|
cd ../snowflake && uv build --wheel
|
|
182
|
+
cd ../fabric && uv build --wheel
|
|
183
|
+
cd ../gcp && uv build --wheel
|
|
188
184
|
cd ../../ai && uv build --wheel
|
|
189
185
|
```
|
|
190
186
|
|
|
191
187
|
Release package names:
|
|
192
188
|
|
|
193
189
|
```bash
|
|
194
|
-
pip install contractforge-core contractforge-databricks contractforge-aws contractforge-snowflake contractforge-ai
|
|
190
|
+
pip install contractforge-core contractforge-databricks contractforge-aws contractforge-snowflake contractforge-fabric contractforge-gcp contractforge-ai
|
|
195
191
|
```
|
|
196
192
|
|
|
193
|
+
## Packages And Releases
|
|
194
|
+
|
|
195
|
+
ContractForge is published as independent PyPI packages from one repository.
|
|
196
|
+
The package boundary is intentional: the core stays platform-neutral, while
|
|
197
|
+
adapters carry native runtime dependencies and behavior.
|
|
198
|
+
|
|
199
|
+
| Package | Current version | PyPI | Source |
|
|
200
|
+
| --- | --- | --- | --- |
|
|
201
|
+
| `contractforge-core` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-core/) | [core](src/contractforge_core) |
|
|
202
|
+
| `contractforge-databricks` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-databricks/) | [adapter](adapters/databricks) |
|
|
203
|
+
| `contractforge-aws` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-aws/) | [adapter](adapters/aws) |
|
|
204
|
+
| `contractforge-snowflake` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-snowflake/) | [adapter](adapters/snowflake) |
|
|
205
|
+
| `contractforge-fabric` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-fabric/) | [adapter](adapters/fabric) |
|
|
206
|
+
| `contractforge-gcp` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-gcp/) | [adapter](adapters/gcp) |
|
|
207
|
+
| `contractforge-ai` | `0.3.0` | [PyPI](https://pypi.org/project/contractforge-ai/) | [AI companion](ai) |
|
|
208
|
+
|
|
209
|
+
Releases are built by [`.github/workflows/release.yml`](.github/workflows/release.yml).
|
|
210
|
+
The workflow can be started manually with `workflow_dispatch` for one package,
|
|
211
|
+
or by pushing package-specific tags:
|
|
212
|
+
|
|
213
|
+
```text
|
|
214
|
+
v<version>-core
|
|
215
|
+
v<version>-databricks
|
|
216
|
+
v<version>-aws
|
|
217
|
+
v<version>-snowflake
|
|
218
|
+
v<version>-fabric
|
|
219
|
+
v<version>-gcp
|
|
220
|
+
v<version>-ai
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
PyPI does not allow overwriting an existing version. Before publishing from this
|
|
224
|
+
repository, bump the target package version and publish a new tag or manual
|
|
225
|
+
release workflow run.
|
|
226
|
+
|
|
197
227
|
## Project Shape
|
|
198
228
|
|
|
199
229
|
A complete ContractForge project keeps runtime concerns separate from contract
|
|
@@ -252,9 +282,10 @@ values override global connection defaults.
|
|
|
252
282
|
| Adapter | Package | Status | Native responsibilities |
|
|
253
283
|
| --- | --- | --- | --- |
|
|
254
284
|
| Databricks | `contractforge-databricks` | Reference implementation | Delta, Unity Catalog, Auto Loader, Lakeflow planning, Jobs, Asset Bundles, control tables, governance, lineage, cost and dashboards. |
|
|
255
|
-
| AWS | `contractforge-aws` |
|
|
256
|
-
| Fabric | `contractforge-fabric` |
|
|
257
|
-
| Snowflake | `contractforge-snowflake` |
|
|
285
|
+
| 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. |
|
|
286
|
+
| 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. |
|
|
287
|
+
| 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). |
|
|
288
|
+
| 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. |
|
|
258
289
|
|
|
259
290
|
Use the same project model for adapter deployment:
|
|
260
291
|
|
|
@@ -271,7 +302,7 @@ planning and produce clear HTML approval reports.
|
|
|
271
302
|
|
|
272
303
|
```bash
|
|
273
304
|
contractforge-ai guided-project \
|
|
274
|
-
--intent "Create a Supabase medallion project for AWS and
|
|
305
|
+
--intent "Create a Supabase medallion project for Databricks, AWS, Snowflake, Fabric and GCP daily at 6 Sao Paulo time." \
|
|
275
306
|
--schema schemas/products.json \
|
|
276
307
|
--target contractforge-yaml \
|
|
277
308
|
--allow-review-required \
|
|
@@ -280,6 +311,9 @@ contractforge-ai guided-project \
|
|
|
280
311
|
contractforge-ai validate-project-structure generated/supabase \
|
|
281
312
|
--adapter databricks \
|
|
282
313
|
--adapter aws \
|
|
314
|
+
--adapter snowflake \
|
|
315
|
+
--adapter fabric \
|
|
316
|
+
--adapter gcp \
|
|
283
317
|
--format html > generated/supabase/project_validation.html
|
|
284
318
|
```
|
|
285
319
|
|
|
@@ -298,7 +332,7 @@ contract = validate_contract(
|
|
|
298
332
|
{
|
|
299
333
|
"source": {"type": "incremental_files", "path": "s3://landing/orders", "format": "json"},
|
|
300
334
|
"target": {"catalog": "main", "schema": "bronze", "table": "orders"},
|
|
301
|
-
"mode": "
|
|
335
|
+
"mode": "append",
|
|
302
336
|
"schema_policy": "additive_only",
|
|
303
337
|
"quality_rules": {"not_null": ["order_id"]},
|
|
304
338
|
}
|
|
@@ -324,9 +358,12 @@ print(result.status)
|
|
|
324
358
|
| Semantic core | `contractforge-core` | Contract models, validation, semantic normalization, capability matching, abstract plans, portability diagnostics and neutral evidence models. |
|
|
325
359
|
| Databricks adapter | `contractforge-databricks` | Databricks capabilities, rendering, runtime execution, governance, evidence filling and deployment helpers. |
|
|
326
360
|
| AWS adapter | `contractforge-aws` | AWS capabilities, Glue/Iceberg planning, runtime helpers, S3 publication, deployment helpers and evidence filling. |
|
|
361
|
+
| Fabric adapter | `contractforge-fabric` | Fabric Lakehouse capabilities, Notebook rendering/execution, source expansion, governance apply helpers and deployment promotion. |
|
|
362
|
+
| Snowflake adapter | `contractforge-snowflake` | Snowflake SQL warehouse capabilities, hosted procedure runtime, task graph execution, governance, lineage, cost and evidence filling. |
|
|
363
|
+
| GCP adapter | `contractforge-gcp` | BigQuery capabilities, GCS load-job rendering, smoke execution, evidence DDL, governance smokes and BigLake Iceberg table support. |
|
|
327
364
|
| AI companion | `contractforge-ai` | Deterministic review, project generation, diagnostics, provider routing, report generation and optional model-backed enrichment. |
|
|
328
365
|
|
|
329
|
-
Publication stays split: each package builds its own wheel and
|
|
366
|
+
Publication stays split: each package builds its own wheel and all adapters
|
|
330
367
|
depend explicitly on `contractforge-core`.
|
|
331
368
|
|
|
332
369
|
The core wheel owns only `contractforge_core`; adapter wheels such as `contractforge-databricks` own their adapter package and depend explicitly on the core.
|
|
@@ -337,7 +374,7 @@ See [publication packaging](docs/specs/publication-packaging.md).
|
|
|
337
374
|
|
|
338
375
|
| Topic | Link |
|
|
339
376
|
| --- | --- |
|
|
340
|
-
| Online site | [marquesantero.github.io/contractforge
|
|
377
|
+
| Online site | [marquesantero.github.io/contractforge](https://marquesantero.github.io/contractforge/) |
|
|
341
378
|
| Documentation index | [docs/README.md](docs/README.md) |
|
|
342
379
|
| Quick start | [docs/quickstart.md](docs/quickstart.md) |
|
|
343
380
|
| Architecture | [docs/architecture.md](docs/architecture.md) |
|
|
@@ -347,16 +384,30 @@ See [publication packaging](docs/specs/publication-packaging.md).
|
|
|
347
384
|
| Adapters | [docs/adapters.md](docs/adapters.md) |
|
|
348
385
|
| Databricks adapter | [docs/databricks.md](docs/databricks.md) |
|
|
349
386
|
| AWS adapter | [docs/adapters/aws.md](docs/adapters/aws.md) |
|
|
387
|
+
| Snowflake adapter | [docs/adapters/snowflake.md](docs/adapters/snowflake.md) |
|
|
350
388
|
| Test contracts across adapters | [docs/adapters/test-contracts-across-adapters.md](docs/adapters/test-contracts-across-adapters.md) |
|
|
351
389
|
| Connectors | [docs/connectors.md](docs/connectors.md) |
|
|
352
390
|
| Operations and evidence | [docs/operations.md](docs/operations.md) |
|
|
353
391
|
| ContractForge AI | [ai/README.md](ai/README.md) |
|
|
354
392
|
| Security | [docs/security.md](docs/security.md) |
|
|
355
393
|
| Adapter authoring | [docs/specs/adapter-authoring.md](docs/specs/adapter-authoring.md) |
|
|
394
|
+
| Contributing | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
395
|
+
| Support | [SUPPORT.md](SUPPORT.md) |
|
|
396
|
+
| Security policy | [SECURITY.md](SECURITY.md) |
|
|
356
397
|
|
|
357
398
|
Architecture contracts live under [docs/specs](docs/specs/), and decisions live
|
|
358
399
|
under [docs/adrs](docs/adrs/).
|
|
359
400
|
|
|
401
|
+
## Contributing
|
|
402
|
+
|
|
403
|
+
Contributions are welcome when they preserve the core/adapter boundary and keep
|
|
404
|
+
contract behavior explicit. Start with [CONTRIBUTING.md](CONTRIBUTING.md), use
|
|
405
|
+
the issue templates for bugs, features or adapter gaps, and follow
|
|
406
|
+
[SECURITY.md](SECURITY.md) for private vulnerability reports. Changes flow
|
|
407
|
+
through pull requests to the protected `main` branch with required CI and
|
|
408
|
+
maintainer or CODEOWNER review when the change affects public behavior, release
|
|
409
|
+
flow, security, package boundaries or adapter maturity.
|
|
410
|
+
|
|
360
411
|
## Non-Goals
|
|
361
412
|
|
|
362
413
|
ContractForge is not:
|
|
@@ -7,19 +7,18 @@
|
|
|
7
7
|
**Define ingestion intent once. Run it natively anywhere.**
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<a href="https://github.com/marquesantero/contractforge
|
|
11
|
-
<a href="https://github.com/marquesantero/contractforge
|
|
12
|
-
<a href="https://
|
|
13
|
-
<a href="https://github.
|
|
14
|
-
<a href="https://github.com/marquesantero/contractforge
|
|
15
|
-
<a href="https://github.com/marquesantero/contractforge
|
|
16
|
-
<a href="https://github.com/marquesantero/contractforge-core/tree/main/ai"><img alt="ContractForge AI" src="https://img.shields.io/badge/ai-contractforge--ai-7B3FE4"></a>
|
|
10
|
+
<a href="https://github.com/marquesantero/contractforge/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/marquesantero/contractforge/actions/workflows/ci.yml/badge.svg"></a>
|
|
11
|
+
<a href="https://github.com/marquesantero/contractforge/actions/workflows/release.yml"><img alt="Release" src="https://github.com/marquesantero/contractforge/actions/workflows/release.yml/badge.svg"></a>
|
|
12
|
+
<a href="https://github.com/marquesantero/contractforge"><img alt="Product" src="https://img.shields.io/badge/product-ContractForge-0B5FFF"></a>
|
|
13
|
+
<a href="https://marquesantero.github.io/contractforge/"><img alt="Documentation" src="https://img.shields.io/badge/docs-online-2EA44F"></a>
|
|
14
|
+
<a href="https://github.com/marquesantero/contractforge/tree/main/src/contractforge_core"><img alt="Core" src="https://img.shields.io/badge/core-contractforge--core-1F6FEB"></a>
|
|
15
|
+
<a href="https://github.com/marquesantero/contractforge/tree/main/ai"><img alt="ContractForge AI" src="https://img.shields.io/badge/ai-contractforge--ai-7B3FE4"></a>
|
|
17
16
|
<img alt="Python" src="https://img.shields.io/badge/python-%3E%3D3.10-blue">
|
|
18
|
-
<a href="LICENSE"><img alt="License" src="https://img.shields.io/github/license/marquesantero/contractforge
|
|
17
|
+
<a href="LICENSE"><img alt="License" src="https://img.shields.io/github/license/marquesantero/contractforge"></a>
|
|
19
18
|
</p>
|
|
20
19
|
|
|
21
20
|
<p align="center">
|
|
22
|
-
<a href="https://marquesantero.github.io/contractforge
|
|
21
|
+
<a href="https://marquesantero.github.io/contractforge/">Documentation</a>
|
|
23
22
|
·
|
|
24
23
|
<a href="docs/quickstart.md">Quick Start</a>
|
|
25
24
|
·
|
|
@@ -30,14 +29,19 @@
|
|
|
30
29
|
<a href="docs/roadmap.md">Roadmap</a>
|
|
31
30
|
</p>
|
|
32
31
|
|
|
32
|
+
**Covered platforms:** Databricks, AWS Glue/Iceberg, Snowflake, Microsoft Fabric
|
|
33
|
+
Lakehouse and Google Cloud BigQuery. The adapters are separate packages, but
|
|
34
|
+
they execute the same contract vocabulary through native platform behavior.
|
|
35
|
+
|
|
33
36
|
ContractForge is a multi-runtime, contract-first ingestion platform. It turns
|
|
34
37
|
governed ingestion intent into native platform execution and evidence while
|
|
35
|
-
keeping the contract vocabulary stable across Databricks, AWS
|
|
36
|
-
|
|
38
|
+
keeping the contract vocabulary stable across Databricks, AWS, Snowflake,
|
|
39
|
+
Fabric and GCP.
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
`contractforge-
|
|
40
|
-
functional package boundaries
|
|
41
|
+
`contractforge-core`, `contractforge-databricks`, `contractforge-aws`,
|
|
42
|
+
`contractforge-fabric`, `contractforge-snowflake`, `contractforge-gcp` and
|
|
43
|
+
`contractforge-ai` are functional package boundaries that keep platform
|
|
44
|
+
dependencies isolated while preserving the same contract language.
|
|
41
45
|
|
|
42
46
|
It is built for data consultants, platform teams and engineering groups that
|
|
43
47
|
need repeatable governed ingestion across different client runtimes without
|
|
@@ -53,15 +57,11 @@ rewriting the framework for every platform.
|
|
|
53
57
|
| --- | --- |
|
|
54
58
|
| Contract-first ingestion | Source, target, write mode, schema policy, transforms, quality, access, operations and evidence live in reviewed YAML contracts. |
|
|
55
59
|
| Honest portability | The planner returns `SUPPORTED`, `SUPPORTED_WITH_WARNINGS`, `REVIEW_REQUIRED` or `UNSUPPORTED`; it does not silently downgrade semantics. |
|
|
56
|
-
| Native adapters | Databricks and
|
|
60
|
+
| Native adapters | Databricks, AWS, Snowflake, Fabric and GCP translate the same intent into native runtime behavior instead of forcing a lowest-common-denominator engine. |
|
|
57
61
|
| Evidence as product surface | Runs, errors, quality, quarantine, schema changes, lineage, governance actions and cost signals are tracked consistently. |
|
|
58
62
|
| Reusable connections | Shared `connection.yaml` files centralize connector defaults; ingestion contracts override only dataset-specific fields. |
|
|
59
63
|
| AI-assisted project design | ContractForge AI turns prompts and schemas into reviewable projects, then validates them through Core and adapter planners. |
|
|
60
64
|
|
|
61
|
-
ContractForge is not a scheduler, a dbt replacement, a closed ingestion runtime
|
|
62
|
-
or a universal Spark wrapper. It is the semantic contract and adapter layer for
|
|
63
|
-
repeatable governed ingestion.
|
|
64
|
-
|
|
65
65
|
## How It Works
|
|
66
66
|
|
|
67
67
|
```text
|
|
@@ -89,7 +89,7 @@ target:
|
|
|
89
89
|
schema: bronze
|
|
90
90
|
table: orders
|
|
91
91
|
|
|
92
|
-
mode:
|
|
92
|
+
mode: append
|
|
93
93
|
schema_policy: additive_only
|
|
94
94
|
quality_rules:
|
|
95
95
|
not_null: [order_id]
|
|
@@ -112,32 +112,26 @@ cannot preserve the same semantics safely.
|
|
|
112
112
|
| --- | --- | --- |
|
|
113
113
|
| Core semantic model | Active | Contract models, semantic normalization, capability matching, abstract planning and evidence models are implemented. |
|
|
114
114
|
| 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. |
|
|
115
|
-
| AWS adapter |
|
|
115
|
+
| 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. |
|
|
116
116
|
| ContractForge AI | Active | Deterministic review, project generation, diagnostics, provider routing and optional model-backed enrichment over the same core contract semantics. |
|
|
117
|
-
| Snowflake adapter |
|
|
118
|
-
| Fabric adapter |
|
|
117
|
+
| 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. |
|
|
118
|
+
| 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. |
|
|
119
|
+
| 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. |
|
|
119
120
|
|
|
120
121
|
See [roadmap](docs/roadmap.md) for adapter maturity and release criteria.
|
|
121
122
|
|
|
122
|
-
## Compared With Alternatives
|
|
123
|
-
|
|
124
|
-
| Alternative | Difference |
|
|
125
|
-
| --- | --- |
|
|
126
|
-
| dbt | dbt models data after it lands. ContractForge defines how governed data arrives, is written, validated and evidenced. |
|
|
127
|
-
| Airbyte/Fivetran | They provide managed ingestion runtimes. ContractForge provides the contract and lets adapters execute natively in your platform. |
|
|
128
|
-
| Data contract tools | Validation is one slice. ContractForge covers source, write semantics, schema policy, quality, governance, evidence and native execution artifacts. |
|
|
129
|
-
| Platform-specific frameworks | ContractForge keeps platform implementations in adapters so the same semantics can be evaluated for other runtimes. |
|
|
130
|
-
|
|
131
123
|
## Install
|
|
132
124
|
|
|
133
125
|
From GitHub:
|
|
134
126
|
|
|
135
127
|
```bash
|
|
136
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
137
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
138
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
139
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
140
|
-
pip install "git+https://github.com/marquesantero/contractforge
|
|
128
|
+
pip install "git+https://github.com/marquesantero/contractforge.git"
|
|
129
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/databricks"
|
|
130
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/aws"
|
|
131
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/fabric"
|
|
132
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/snowflake"
|
|
133
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=adapters/gcp"
|
|
134
|
+
pip install "git+https://github.com/marquesantero/contractforge.git#subdirectory=ai"
|
|
141
135
|
```
|
|
142
136
|
|
|
143
137
|
Local development:
|
|
@@ -154,15 +148,51 @@ uv build --wheel
|
|
|
154
148
|
cd adapters/databricks && uv build --wheel
|
|
155
149
|
cd ../aws && uv build --wheel
|
|
156
150
|
cd ../snowflake && uv build --wheel
|
|
151
|
+
cd ../fabric && uv build --wheel
|
|
152
|
+
cd ../gcp && uv build --wheel
|
|
157
153
|
cd ../../ai && uv build --wheel
|
|
158
154
|
```
|
|
159
155
|
|
|
160
156
|
Release package names:
|
|
161
157
|
|
|
162
158
|
```bash
|
|
163
|
-
pip install contractforge-core contractforge-databricks contractforge-aws contractforge-snowflake contractforge-ai
|
|
159
|
+
pip install contractforge-core contractforge-databricks contractforge-aws contractforge-snowflake contractforge-fabric contractforge-gcp contractforge-ai
|
|
164
160
|
```
|
|
165
161
|
|
|
162
|
+
## Packages And Releases
|
|
163
|
+
|
|
164
|
+
ContractForge is published as independent PyPI packages from one repository.
|
|
165
|
+
The package boundary is intentional: the core stays platform-neutral, while
|
|
166
|
+
adapters carry native runtime dependencies and behavior.
|
|
167
|
+
|
|
168
|
+
| Package | Current version | PyPI | Source |
|
|
169
|
+
| --- | --- | --- | --- |
|
|
170
|
+
| `contractforge-core` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-core/) | [core](src/contractforge_core) |
|
|
171
|
+
| `contractforge-databricks` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-databricks/) | [adapter](adapters/databricks) |
|
|
172
|
+
| `contractforge-aws` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-aws/) | [adapter](adapters/aws) |
|
|
173
|
+
| `contractforge-snowflake` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-snowflake/) | [adapter](adapters/snowflake) |
|
|
174
|
+
| `contractforge-fabric` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-fabric/) | [adapter](adapters/fabric) |
|
|
175
|
+
| `contractforge-gcp` | `0.2.0` | [PyPI](https://pypi.org/project/contractforge-gcp/) | [adapter](adapters/gcp) |
|
|
176
|
+
| `contractforge-ai` | `0.3.0` | [PyPI](https://pypi.org/project/contractforge-ai/) | [AI companion](ai) |
|
|
177
|
+
|
|
178
|
+
Releases are built by [`.github/workflows/release.yml`](.github/workflows/release.yml).
|
|
179
|
+
The workflow can be started manually with `workflow_dispatch` for one package,
|
|
180
|
+
or by pushing package-specific tags:
|
|
181
|
+
|
|
182
|
+
```text
|
|
183
|
+
v<version>-core
|
|
184
|
+
v<version>-databricks
|
|
185
|
+
v<version>-aws
|
|
186
|
+
v<version>-snowflake
|
|
187
|
+
v<version>-fabric
|
|
188
|
+
v<version>-gcp
|
|
189
|
+
v<version>-ai
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
PyPI does not allow overwriting an existing version. Before publishing from this
|
|
193
|
+
repository, bump the target package version and publish a new tag or manual
|
|
194
|
+
release workflow run.
|
|
195
|
+
|
|
166
196
|
## Project Shape
|
|
167
197
|
|
|
168
198
|
A complete ContractForge project keeps runtime concerns separate from contract
|
|
@@ -221,9 +251,10 @@ values override global connection defaults.
|
|
|
221
251
|
| Adapter | Package | Status | Native responsibilities |
|
|
222
252
|
| --- | --- | --- | --- |
|
|
223
253
|
| Databricks | `contractforge-databricks` | Reference implementation | Delta, Unity Catalog, Auto Loader, Lakeflow planning, Jobs, Asset Bundles, control tables, governance, lineage, cost and dashboards. |
|
|
224
|
-
| AWS | `contractforge-aws` |
|
|
225
|
-
| Fabric | `contractforge-fabric` |
|
|
226
|
-
| Snowflake | `contractforge-snowflake` |
|
|
254
|
+
| 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. |
|
|
255
|
+
| 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. |
|
|
256
|
+
| 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). |
|
|
257
|
+
| 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. |
|
|
227
258
|
|
|
228
259
|
Use the same project model for adapter deployment:
|
|
229
260
|
|
|
@@ -240,7 +271,7 @@ planning and produce clear HTML approval reports.
|
|
|
240
271
|
|
|
241
272
|
```bash
|
|
242
273
|
contractforge-ai guided-project \
|
|
243
|
-
--intent "Create a Supabase medallion project for AWS and
|
|
274
|
+
--intent "Create a Supabase medallion project for Databricks, AWS, Snowflake, Fabric and GCP daily at 6 Sao Paulo time." \
|
|
244
275
|
--schema schemas/products.json \
|
|
245
276
|
--target contractforge-yaml \
|
|
246
277
|
--allow-review-required \
|
|
@@ -249,6 +280,9 @@ contractforge-ai guided-project \
|
|
|
249
280
|
contractforge-ai validate-project-structure generated/supabase \
|
|
250
281
|
--adapter databricks \
|
|
251
282
|
--adapter aws \
|
|
283
|
+
--adapter snowflake \
|
|
284
|
+
--adapter fabric \
|
|
285
|
+
--adapter gcp \
|
|
252
286
|
--format html > generated/supabase/project_validation.html
|
|
253
287
|
```
|
|
254
288
|
|
|
@@ -267,7 +301,7 @@ contract = validate_contract(
|
|
|
267
301
|
{
|
|
268
302
|
"source": {"type": "incremental_files", "path": "s3://landing/orders", "format": "json"},
|
|
269
303
|
"target": {"catalog": "main", "schema": "bronze", "table": "orders"},
|
|
270
|
-
"mode": "
|
|
304
|
+
"mode": "append",
|
|
271
305
|
"schema_policy": "additive_only",
|
|
272
306
|
"quality_rules": {"not_null": ["order_id"]},
|
|
273
307
|
}
|
|
@@ -293,9 +327,12 @@ print(result.status)
|
|
|
293
327
|
| Semantic core | `contractforge-core` | Contract models, validation, semantic normalization, capability matching, abstract plans, portability diagnostics and neutral evidence models. |
|
|
294
328
|
| Databricks adapter | `contractforge-databricks` | Databricks capabilities, rendering, runtime execution, governance, evidence filling and deployment helpers. |
|
|
295
329
|
| AWS adapter | `contractforge-aws` | AWS capabilities, Glue/Iceberg planning, runtime helpers, S3 publication, deployment helpers and evidence filling. |
|
|
330
|
+
| Fabric adapter | `contractforge-fabric` | Fabric Lakehouse capabilities, Notebook rendering/execution, source expansion, governance apply helpers and deployment promotion. |
|
|
331
|
+
| Snowflake adapter | `contractforge-snowflake` | Snowflake SQL warehouse capabilities, hosted procedure runtime, task graph execution, governance, lineage, cost and evidence filling. |
|
|
332
|
+
| GCP adapter | `contractforge-gcp` | BigQuery capabilities, GCS load-job rendering, smoke execution, evidence DDL, governance smokes and BigLake Iceberg table support. |
|
|
296
333
|
| AI companion | `contractforge-ai` | Deterministic review, project generation, diagnostics, provider routing, report generation and optional model-backed enrichment. |
|
|
297
334
|
|
|
298
|
-
Publication stays split: each package builds its own wheel and
|
|
335
|
+
Publication stays split: each package builds its own wheel and all adapters
|
|
299
336
|
depend explicitly on `contractforge-core`.
|
|
300
337
|
|
|
301
338
|
The core wheel owns only `contractforge_core`; adapter wheels such as `contractforge-databricks` own their adapter package and depend explicitly on the core.
|
|
@@ -306,7 +343,7 @@ See [publication packaging](docs/specs/publication-packaging.md).
|
|
|
306
343
|
|
|
307
344
|
| Topic | Link |
|
|
308
345
|
| --- | --- |
|
|
309
|
-
| Online site | [marquesantero.github.io/contractforge
|
|
346
|
+
| Online site | [marquesantero.github.io/contractforge](https://marquesantero.github.io/contractforge/) |
|
|
310
347
|
| Documentation index | [docs/README.md](docs/README.md) |
|
|
311
348
|
| Quick start | [docs/quickstart.md](docs/quickstart.md) |
|
|
312
349
|
| Architecture | [docs/architecture.md](docs/architecture.md) |
|
|
@@ -316,16 +353,30 @@ See [publication packaging](docs/specs/publication-packaging.md).
|
|
|
316
353
|
| Adapters | [docs/adapters.md](docs/adapters.md) |
|
|
317
354
|
| Databricks adapter | [docs/databricks.md](docs/databricks.md) |
|
|
318
355
|
| AWS adapter | [docs/adapters/aws.md](docs/adapters/aws.md) |
|
|
356
|
+
| Snowflake adapter | [docs/adapters/snowflake.md](docs/adapters/snowflake.md) |
|
|
319
357
|
| Test contracts across adapters | [docs/adapters/test-contracts-across-adapters.md](docs/adapters/test-contracts-across-adapters.md) |
|
|
320
358
|
| Connectors | [docs/connectors.md](docs/connectors.md) |
|
|
321
359
|
| Operations and evidence | [docs/operations.md](docs/operations.md) |
|
|
322
360
|
| ContractForge AI | [ai/README.md](ai/README.md) |
|
|
323
361
|
| Security | [docs/security.md](docs/security.md) |
|
|
324
362
|
| Adapter authoring | [docs/specs/adapter-authoring.md](docs/specs/adapter-authoring.md) |
|
|
363
|
+
| Contributing | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
364
|
+
| Support | [SUPPORT.md](SUPPORT.md) |
|
|
365
|
+
| Security policy | [SECURITY.md](SECURITY.md) |
|
|
325
366
|
|
|
326
367
|
Architecture contracts live under [docs/specs](docs/specs/), and decisions live
|
|
327
368
|
under [docs/adrs](docs/adrs/).
|
|
328
369
|
|
|
370
|
+
## Contributing
|
|
371
|
+
|
|
372
|
+
Contributions are welcome when they preserve the core/adapter boundary and keep
|
|
373
|
+
contract behavior explicit. Start with [CONTRIBUTING.md](CONTRIBUTING.md), use
|
|
374
|
+
the issue templates for bugs, features or adapter gaps, and follow
|
|
375
|
+
[SECURITY.md](SECURITY.md) for private vulnerability reports. Changes flow
|
|
376
|
+
through pull requests to the protected `main` branch with required CI and
|
|
377
|
+
maintainer or CODEOWNER review when the change affects public behavior, release
|
|
378
|
+
flow, security, package boundaries or adapter maturity.
|
|
379
|
+
|
|
329
380
|
## Non-Goals
|
|
330
381
|
|
|
331
382
|
ContractForge is not:
|