[seg3-snowflake] starting JWKS on :8602 (Snowflake transport is DBAPI-mocked in-process)

$ pip show odgs-snowflake-bridge | grep -E "Name|Version"
Name: odgs-snowflake-bridge
Version: 0.4.2

$ python3 sync_from_snowflake.py
INFO    odgs_snowflake.client | Connected to Snowflake account: acme-demo.eu-west-1
INFO    odgs_snowflake.client | Fetched 2 tables from PRODUCTION.FINANCE
INFO    odgs_snowflake.client | Total: 2 tables from database 'PRODUCTION'
INFO    odgs_snowflake.client | Fetched 2 tables from PRODUCTION.FINANCE
INFO    odgs_snowflake.client | Total: 2 tables from database 'PRODUCTION'
INFO    odgs_snowflake.bridge | Transforming 2 Snowflake tables → ODGS metrics
WARNING odgs_snowflake.transformer | [ODGS Bridge] ⚠️ Compiling unsigned rules for ODGS Community Edition. Get Certified Sovereign Packs at https://registry.metricprovenance.com
INFO    odgs_snowflake.bridge | ✅ Written ODGS schema: /Users/kartik/Code/open-data-governance-protocol/1-Open-source/platform-bridges/odgs-snowflake-bridge/examples/marketplace-demo/schemas/custom/snowflake_acme_finance_production_metrics.json (2 tables → 2 metrics)
INFO    odgs_snowflake.client | Connected to Snowflake account: acme-demo.eu-west-1
INFO    odgs_snowflake.client | Fetched 2 tables from PRODUCTION.FINANCE
INFO    odgs_snowflake.client | Total: 2 tables from database 'PRODUCTION'
INFO    odgs_snowflake.bridge | Transforming 2 Snowflake tables → ODGS rules
WARNING odgs_snowflake.transformer | [ODGS Bridge] ⚠️ Compiling unsigned rules for ODGS Community Edition. Get Certified Sovereign Packs at https://registry.metricprovenance.com
INFO    odgs_snowflake.bridge | ✅ Written ODGS schema: /Users/kartik/Code/open-data-governance-protocol/1-Open-source/platform-bridges/odgs-snowflake-bridge/examples/marketplace-demo/schemas/custom/snowflake_acme_finance_production_rules.json (2 tables → 24 rules)
==========================================================================
Connecting to Snowflake account: acme-demo.eu-west-1 (DBAPI transport mocked)
Databases: ['PRODUCTION']
Schemas in PRODUCTION: ['FINANCE']

Snowflake tables in 'PRODUCTION':
  [BASE TABLE] PRODUCTION.FINANCE.TRANSACTIONS    6 cols (5 NOT NULL)  rows~1284000
  [BASE TABLE] PRODUCTION.FINANCE.CUSTOMERS       4 cols (3 NOT NULL)  rows~52000
==========================================================================

>>> bridge.sync(database='PRODUCTION', output_type='metrics')

>>> bridge.sync(database='PRODUCTION', output_type='rules', severity='HARD_STOP')

Generated ODGS schemas:
  metrics: /Users/kartik/Code/open-data-governance-protocol/1-Open-source/platform-bridges/odgs-snowflake-bridge/examples/marketplace-demo/schemas/custom/snowflake_acme_finance_production_metrics.json
  rules:   /Users/kartik/Code/open-data-governance-protocol/1-Open-source/platform-bridges/odgs-snowflake-bridge/examples/marketplace-demo/schemas/custom/snowflake_acme_finance_production_rules.json

$ python3 build_and_enforce.py rows/transactions_ok.json
[compile] 24 rules generated by odgs-snowflake-bridge
[compile] binding 5 NOT_NULL HARD_STOP rules for 'PRODUCTION.FINANCE.TRANSACTIONS':
  - transactions_transaction_id_not_null: TRANSACTION_ID != None  [HARD_STOP]
  - transactions_customer_id_not_null: CUSTOMER_ID != None  [HARD_STOP]
  - transactions_amount_not_null: AMOUNT != None  [HARD_STOP]
  - transactions_currency_not_null: CURRENCY != None  [HARD_STOP]
  - transactions_created_at_not_null: CREATED_AT != None  [HARD_STOP]

[sign] Rule pack canonical SHA-256: da0c0f54effc4a735e4a5422f8e351dd47f4ede5021dddadc62aa1f01cbe2e7e
[sign] JWS (ES256, kid=snowflake-gov-2026-01, iss=did:web:governance.snowflake-acme.demo): eyJhbGciOiJFUzI1NiIsImtpZCI6InNub3dmbGFrZS1nb3YtMjAyNi0wMSIsInR5cCI6Ik...

==========================================================================
ODGS ENFORCEMENT  |  process: urn:odgs:process:snowflake:write_transactions_row
row (transactions_ok.json): {"TRANSACTION_ID": "TXN-0001", "CUSTOMER_ID": "CUST-77", "AMOUNT": 320.5, "CURRENCY": "USD", "CREATED_AT": "2026-07-21T10:00:00"}
--------------------------------------------------------------------------
rule pack signature : VERIFIED (did:web:governance.snowflake-acme.demo, key snowflake-gov-2026-01)
active rules loaded : 5

VERDICT: APPROVED — all NOT NULL constraints satisfied
--------------------------------------------------------------------------
AUDIT RECORD (engine-generated, tri-partite binding)
  event_id        : fa4b103e-4a88-4a98-8324-20343fef0eab
  verdict         : APPROVED
  payload_hash    : cba3d990b8eb946c1b85c60733e76a14e933ff60cdf50c074d989cf48f26ae7e
  definition_hash : a307fea8ca335578a190cd55313f115212d19afdecb890709e13b9f13d96ea05
AUDIT SEAL (Ed25519, verified)  signature=dc3607a351fd535a198bc9f940e6b759...
  sealed log      : /Users/kartik/Code/open-data-governance-protocol/1-Open-source/platform-bridges/odgs-snowflake-bridge/examples/marketplace-demo/audit/signed_audit.jsonl
==========================================================================

$ python3 build_and_enforce.py rows/transactions_bad.json
[compile] 24 rules generated by odgs-snowflake-bridge
[compile] binding 5 NOT_NULL HARD_STOP rules for 'PRODUCTION.FINANCE.TRANSACTIONS':
  - transactions_transaction_id_not_null: TRANSACTION_ID != None  [HARD_STOP]
  - transactions_customer_id_not_null: CUSTOMER_ID != None  [HARD_STOP]
  - transactions_amount_not_null: AMOUNT != None  [HARD_STOP]
  - transactions_currency_not_null: CURRENCY != None  [HARD_STOP]
  - transactions_created_at_not_null: CREATED_AT != None  [HARD_STOP]

[sign] Rule pack canonical SHA-256: da0c0f54effc4a735e4a5422f8e351dd47f4ede5021dddadc62aa1f01cbe2e7e
[sign] JWS (ES256, kid=snowflake-gov-2026-01, iss=did:web:governance.snowflake-acme.demo): eyJhbGciOiJFUzI1NiIsImtpZCI6InNub3dmbGFrZS1nb3YtMjAyNi0wMSIsInR5cCI6Ik...

==========================================================================
ODGS ENFORCEMENT  |  process: urn:odgs:process:snowflake:write_transactions_row
row (transactions_bad.json): {"TRANSACTION_ID": "TXN-0002", "CUSTOMER_ID": "CUST-77", "AMOUNT": 90.0, "CURRENCY": null, "CREATED_AT": "2026-07-21T10:05:00"}
--------------------------------------------------------------------------
rule pack signature : VERIFIED (did:web:governance.snowflake-acme.demo, key snowflake-gov-2026-01)
active rules loaded : 5

VERDICT: BLOCKED — HARD STOP — Governance Failure: ['Rule transactions_currency_not_null Failed: TRANSACTIONS.CURRENCY NOT NULL']
--------------------------------------------------------------------------
AUDIT RECORD (engine-generated, tri-partite binding)
  event_id        : 7412a937-a536-4c23-b5cd-87dc52a2f575
  verdict         : BLOCKED
  payload_hash    : 4f2a93f579f26ad0d9024bbfede6fa2200a7d908b066541ae307f4bc3ae99238
  definition_hash : 6cf3061d4f2bb8da214835bf835f134fa3e90e458882c4669b7d7ecd0b0beeb8
  violation       : Rule transactions_currency_not_null Failed: TRANSACTIONS.CURRENCY NOT NULL
AUDIT SEAL (Ed25519, verified)  signature=ab67c26c65ed761c1090c744449e6143...
  sealed log      : /Users/kartik/Code/open-data-governance-protocol/1-Open-source/platform-bridges/odgs-snowflake-bridge/examples/marketplace-demo/audit/signed_audit.jsonl
==========================================================================
(exit 1 — NULL currency hard-stopped, as intended)

[seg3-snowflake] done.
