In a regulated bank, an IT change is not just a risk decision — it's a compliance decision. A change to a SOX- or PCI-scoped system cannot ship on a low risk score during a change freeze; it needs a compliance sign-off, an approver of record, and an audit trail that survives an examiner. A generic ITSM scores the change's blast radius and lets a low score auto-approve. This overlay makes the compliance check a hard gate the CAB model can never override, and every state transition an immutable audit row.

The problem — and the money

The buyer is the bank's IT-risk / change-governance lead who answers to an auditor. A failed regulated change — or one that shipped without sign-off during a freeze — is not a Sev-2, it's a finding, with remediation cost and regulatory exposure measured in millions. A vanilla ITSM will happily auto-approve the highest-scoring, lowest-blast change even on a payments database. The payoff here is a refusal: a change to a regulated = true CI whose compliance_status is still pending is routed to a human as compliance_hold — even though the CAB model said auto_approve and the blast radius was low. The hard gate overrides the model, exactly as compliance requires. In finserv, the deterministic gate is the feature.

This is the ITSM suite + the finserv overlay. The six base skills — core, cmdb-blast-radius, change-management and the rest — are unchanged. The overlay only adds compliance columns, one audit table, and a deterministic gate layered over the CAB verdict. Same bucket, one copy of the rows.

What finserv adds

A small, additive diff on top of the suite (skill: itsm/finserv → the itsm/overlays/finserv contract):

  • Compliance columns — on itsm/core cis (compliance_scope sox|pci|none, regulated boolean — the hard-gate input) and changes (approver_role, change_freeze_override, compliance_status) — added with ALTER TABLE … ADD COLUMN over the pg wire. A column-add, never a second copy.
  • One tablechange_audit (key audit_id): the immutable regulatory audit trail — one append-only row per state transition (actor, action, prev/new state, evidence).
  • One gate change — change-management's CAB gate still returns {decision, risk, reason}, but a deterministic compliance hard gate layers over it: compliance_hold when the CI is regulated and compliance_status <> 'approved', regardless of the model's decision or a low blast. Only change_freeze_override = true + an approver_role sign-off releases it.
  • Presetsauto_approve_risk = none for regulated CIs; require_pir = true; a quarter-end freeze window seeded.

Apply the diff — the ALTERs, the audit table, and the seed that drives the gate:

You

In the itsm bucket, apply the finserv overlay: ALTER cis ADD compliance_scope, regulated; ALTER changes ADD approver_role, change_freeze_override, compliance_status; create change_audit; tag orders-db as sox/regulated; add CHG5001 (change to orders-db, compliance_status pending, model verdict auto_approve, low risk) and CHG5002 (change to web-storefront, non-regulated).

DODIL MCP tools called
data_pgdata_table_createdata_table_upsert
Agent

Added compliance_scope/regulated to cis and approver_role/change_freeze_override/compliance_status to changes (ALTER over pg — the masters, not a copy). Created change_audit. Tagged orders-db sox + regulated=true; seeded CHG5001 (regulated, compliance_status pending) and CHG5002 (non-regulated) — the inputs the hard gate reads.

Now the payoff — the compliance hard gate overriding the model's auto_approve:

You

In itsm, compute each change's final verdict: compliance_hold when its CI is regulated and compliance_status <> 'approved' and not overridden, else the model's gate_verdict — joining changes to their CI. Then release CHG5001 with an approver sign-off and show the verdict flip.

DODIL MCP tools called
data_sqldata_table_upsert
Agent

CHG5001 (change to regulated orders-db, compliance_status pending) = compliance_hold — routed to a human DESPITE the model's auto_approve and low risk. CHG5002 (non-regulated) = auto_approve. After change_freeze_override=true + approver_role=cab-chair + compliance_status=approved, CHG5001 flips to auto_approve. change_audit recorded both transitions.

The CAB gate still runs on kimi-k2.6 with its {decision, risk, reason} contract unchanged — but its verdict can never promote a regulated change past the compliance check. The hard gate is a deterministic SQL CASE, not a model call; that's the point.

Scaffold it — the one-shot

With the DODIL MCP connected, one prompt composes the suite and this overlay:

Scaffold an ITSM for my bank — the ITSM suite plus the finserv overlay.
 
Base: the full itsm suite (core masters + CMDB blast-radius graph + sla / incident / problem /
change management) on one bucket.
 
Then apply the finserv overlay on the SAME bucket:
1. ALTER cis ADD compliance_scope, regulated; ALTER changes ADD approver_role, change_freeze_override,
   compliance_status (pg wire — the masters, not a copy).
2. Create change_audit (key audit_id) — an append-only row per state transition.
3. Default change-management to auto_approve_risk=none + require_pir=true, seed a quarter-end freeze,
   and layer a DETERMINISTIC compliance hard gate over the CAB verdict: compliance_hold when the CI is
   regulated and compliance_status <> 'approved', regardless of the model or blast radius.
Seed the demo above and show the hard gate holding a regulated change the model wanted to auto-approve.

Verify

Every result below was live-validated on 2026-09-02 (org IHDIASH, throwaway bucket, torn down after):

# columns land (nullable, over the pg wire)
dodil data pg -b "$BUCKET" "ALTER TABLE cis ADD COLUMN regulated BOOLEAN"   # + compliance_scope, +3 on changes
# the hard gate holds the model's auto_approve: CHG5001 (regulated, pending) = compliance_hold
dodil data sql -b "$BUCKET" "SELECT ch.number, ch.gate_verdict, ci.regulated, ch.compliance_status
  FROM changes ch JOIN cis ci ON ci.id = ch.ci_id ORDER BY ch.id"
# the audit trail captures every transition: 2 rows for CHG5001 (assess->compliance_hold->approved)
dodil data sql -b "$BUCKET" "SELECT count(*), count(DISTINCT new_state) FROM change_audit WHERE change_id = 5001"

The ALTER-adds, the change_audit table, the compliance hard gate overriding the model's auto_approve, and the approver-sign-off release path are proven live. The suitability/compliance clauses in the CAB gate prompt reuse the kimi-k2.6 gate already proven in the base change-management skill.

Connect your tools

Everything the overlay wrote lives in the one DataK3 bucket, reachable by your own stack — a GRC / audit tool reads change_audit and changes.compliance_status over the Postgres wire; a compliance dashboard walks the CMDB graph over Bolt to show a regulated CI's blast radius. data connect itsm prints the endpoints. Full, live-validated walkthrough: Connect your tools.

Composes

This page is not a fork of the ITSM — it is a composition:

  • Base: the six ITSM suite skills (itsm/core, itsm/change-management, itsm/cmdb-blast-radius, …) — the system of record, unchanged.
  • Overlay: itsm/overlays/finserv — the additive diff above (the compliance columns, the change_audit trail, the deterministic compliance hard gate over the CAB verdict).

Read the base to learn the mechanics; this overlay is the small, industry-specific diff on top.