Skip to content

Snowflake decision publication service

ID MOD-079
System SD07
Repo bank-platform
Build status Deployed
Deployed Yes
Last commit 39bbf8c1b8255fa6429add330de438d2899dc558

The Snowflake decision publication service is the operational apply service defined in ADR-036. It is the only governed path by which Snowflake-generated decisions cross the Snowflake → Neon boundary and take operational effect.

Purpose

Snowflake produces decisions — onboarding outcomes, CDD tier assignments, fraud actions, credit pre-approvals, AML case escalations. These decisions must be applied to Neon's operational tables to change how the bank treats a customer. Without a governed publication path, decisions either do not take effect or require ad-hoc database writes that undermine auditability.

This module receives published decision payloads on the decision_inbox.decision_result_inbox table in Neon, validates the contract version and schema, deduplicates on the idempotency_key, and applies the decision to the correct operational table. Every applied decision is recorded in decision_delivery_log with its source computation, contract version, policy references, and effective timestamp.

What it does

  • Receives versioned decision payloads from Snowflake's decision_curated.decision_result view via the ADR-036 publication contract
  • Validates schema version, entity type, and mandatory fields before applying anything
  • Deduplicates on decision_id + idempotency_key — safe to replay without double-applying
  • Routes each decision type to its target operational table: onboarding → customers.onboarding_status; CDD tier → customers.cdd_tier; fraud action → accounts.status; credit pre-approval → credit_decisions; AML escalation → aml_cases.status
  • Logs every outcome — applied, duplicate, rejected — to decision_delivery_log

What it does not do

This module does not write Tier 3 reporting data. It does not receive raw Snowflake features or intermediate model scores. It does not accept direct database writes from Snowflake — all traffic arrives via the ADR-036 decision inbox contract. For the data tier classification see ADR-038.

Failure handling

If the apply step fails after successful inbox receipt, the record remains in the inbox with a failed status and is retried. Dead-letter records older than 24 hours are escalated via the operations work queue (MOD-064). Snowflake does not retry — the inbox record is the durable state.


Module dependencies

Depends on

Module Title Required? Contract Reason
MOD-042 CDC pipeline — Neon logical replication to S3 Iceberg Required Decision publication writes back to operational Neon databases — requires the CDC pipeline infrastructure to be established for the reverse flow.
MOD-104 AWS shared infrastructure bootstrap Required AWS shared infrastructure provisioned by MOD-104 (EventBridge buses, S3, KMS, Kinesis, Cognito) is required before this module can be deployed.

Required by

Module Title As Contract
MOD-048 System decision log Hard dependency
MOD-105 Product eligibility engine Hard dependency
MOD-147 Related party exposure monitor Hard dependency

Policies satisfied

Policy Title Mode How
GOV-006 Internal Audit Policy LOG Every applied decision is recorded with its source Snowflake computation, contract version, policy reference, and operator identity — immutable audit trail.
DT-001 Information Security Policy GATE Only schema-version-validated, policy-sanctioned outcomes cross the Snowflake → Neon boundary — raw features and intermediate scores never leave Snowflake.

Capabilities satisfied

Capability Title Mode How
CAP-125 Snowflake write-back API (internal) AUTO Receives versioned decision payloads from Snowflake, deduplicates on idempotency key, validates contract version, and applies the decision to the appropriate Neon operational table via the decision inbox.

Part of SD07 — Data Platform & Governance Infrastructure Compiled 2026-05-22 from source/entities/modules/MOD-079.yaml