WTWilly Tai
Case studyAI Governance & Assurance

A new rule lands. Which control does it touch?

Aegis reads a regulatory clause, extracts the obligations inside it, and maps each one to the internal control it affects, citing the exact standard and clause. When nothing in your library covers it, it returns "no confident match" instead of guessing. Here is the grounding score that decides, the threshold below which it abstains, and the honest boundary on what the model is allowed to touch.

01 / The pain

When a regulator moves, nobody knows what it breaks until the audit does.

A bank carries hundreds of internal compliance standards. When MAS or IMDA revises a notice, an analyst has to read the new wording and hunt, by hand, through the standards library to work out what's covered, what's merely reworded, and what is genuinely new. It takes days, it's point-in-time, and the obligation with no matching control, the one that becomes a finding, is exactly the one a tired analyst skims past. And when teams reach for AI here, they do the one unforgivable thing. They ask a model "which control does this affect?" and paste whatever citation it returns into the gap analysis.

02 / Why the naive approach fails

Keyword search misses the match; a free LLM invents one.

The obvious version is Ctrl-F across the standards, or a chat prompt that asks a model which control is impacted. Both fail in specific, knowable ways, and they fail silently, which is worse:

So the real job is more than search or generation. The system has to extract the obligation, ground it to a named concept, score that concept against the control library, and then cite or abstain. The threshold for abstention is written down, not felt.

NAIVE Ctrl-F "explain"→ 0 hits (std says "interpretability") free LLM: "which control?"→ invents a citation, never abstains ✗ real match goes unseen✗ wrong control mapped with confidence✗ the genuine gap is papered over GROUNDED · extract concept · score against library · cite or abstain extract obligation tag named concept score vs 40-standard library cite STD + clause or abstain → "Gap"
fig.1 · keyword miss and hallucinated citation, vs the grounded extract-score-cite path
03 / How it works

Deterministic code decides the mapping. The model only phrases the summary.

This is the load-bearing decision of the whole system. Concept extraction, the grounding score, and the abstain gate are all computed in Python over a named concept ontology. Every match is explained by a concept a reviewer can name and overrule, not by an opaque embedding. The language model is downstream and read-only. It phrases the plain-language change summary about a mapping the scorer already cited, and only about that mapping. The model never decides which control is impacted, and it never produces a citation the scorer didn't already ground.

DETERMINISTIC · extract · score · abstain-gate MODEL · phrasing only, about a cited mapping Reg clausenew / amended Extract concept12-concept ontology Score vs libraryconcept overlap Abstain gatecite or "Gap" SummaryLLM · cite-bound Review queuehuman confirms Provenance on every mapping · exportable CSV audit trailconcept · cited STD · score · status · who confirmed
fig.2 · the trust boundary: the scorer decides the control; the model only writes prose about its citation

Inside the engine, the mapping is concept-overlap, not a black box. Each clause is tagged to one or more of 12 named concepts by surface-term match, and a standard "matches" only when it shares a concept with the clause. The grounding score and the abstain rule are explicit:

score(clause, standard) = |concepts(clause)   ∩ concepts(standard)| match ⇔ score ≥ 1 abstain ⇔ score = 0   or concept uncovered ≥1 shared concept, concept coveredCovered → cite match, but reg is new/amendedReview → cite score = 0 or uncovered conceptGap → ABSTAIN cite top 2 standardsSTD-id + title + clause ref…or "no confident match"
fig.3 · the grounding score is concept-overlap; abstain triggers at zero overlap or an uncovered concept

The keyword baseline runs alongside the grounded path on the same clause, so the system can show its work. Where a literal surface-term search of the library returns zero but the concept match cites a real standard, that's the AI win made explicit. Where the concept maps to something the library covers in none of its 40 standards, the score is zero by construction and the system abstains, because it cannot cite what isn't there.

04 / One worked example

One obligation mapped with a citation, and one the engine refuses to map.

Take clause 4.4 of a revised model-risk notice: "institutions must be able to explain the basis of individual decisions to affected customers in plain language." A keyword search for explain returns zero standards. Aegis tags it to the concept Explainability / Interpretability, scores it against the library, and grounds it to STD-015 "Model interpretability", a match Ctrl-F never finds. Then clause 7.1 introduces a regulatory-notification duty your library has no standard for. Rather than guess the nearest control, it abstains.

ClauseConcept extractedKeyword hitsGrounded matchCitationResult
4.4Explainability / Interpretability0score 1 · coveredSTD-015 · "Model interpretability"mapped
3.1Governance & Accountability2score ≥1 · coveredSTD-001 · STD-002mapped + cited
7.1Regulatory Notification1score 0 · uncoveredno confident matchabstains (Gap)
Refusing to map is what earns the trust here. Clause 7.1 contains a term (failure) that keyword search happily matches to four standards, and a free LLM would dutifully cite the nearest one. But the obligation's load-bearing concept, Regulatory Notification, is covered by zero of the 40 standards. So the score is zero, and Aegis returns "no confident match", surfacing this as a real gap to close rather than burying it under a plausible-wrong citation. Mapping the paraphrase that keyword search missed, and refusing to map the obligation it has no control for, are the same discipline.
05 / Numbers & honest trade-offs

What it found on one revised notice, and what those numbers do and don't prove.

40
standards in library
Indexed once into the concept graph.
12
named concepts · 10 controls
The auditable ontology behind every match.
13
obligations extracted
From the revised notice: 9 covered, 3 review.
1
abstained (Gap)
~8%, an uncovered concept, cited nothing.

Where these come from, honestly. The standards library and the notice are synthetic, built to exercise the mechanism: a paraphrase the keyword baseline must miss, and an obligation with deliberately no coverage. So the figures prove the mechanism discriminates correctly. They don't prove it survives a specific real standards library. One of the 13 obligations is an AI-only win, where keyword search returns zero and the grounded match cites a real standard.

The dial every compliance lead actually buys on is how hard to abstain. The abstain rule here is strict. The score must reach 1 (at least one shared concept) and the concept must appear in the library, or it's a Gap. That threshold is the lever. Hold it at concept-overlap ≥ 1 and you abstain only on genuine non-coverage. Require ≥ 2 shared concepts and the system gets more conservative, abstaining on thin single-concept matches and pushing more obligations to a human, which trades recall for fewer speculative mappings. Aegis doesn't pretend a citation equals coverage. It produces a cited candidate mapping a human confirms, and the overlap threshold sets how much lands on their desk versus how much it declines to call.

06 / Governance, shown

The governance that's actually real here, and the boundary I won't oversell.

Aegis is grounded retrieval plus concept-overlap scoring with a human review queue and an exportable audit trail. The core control is cite-or-abstain: no mapping ships without a grounded citation, and uncovered obligations are flagged rather than mapped. Every mapping carries its provenance, meaning the concept it matched on, the standard it cited, the score, and the analyst who confirmed it, and the whole register exports to CSV for the audit file.

The honest boundary. Unlike my finance demos, Aegis is not yet routed through the hash-chained AI Control Ledger. There is no immutable, tamper-evident chain over these mappings today. The export is an audit trail, not a cryptographic one. Wiring Aegis into the control-ledger overlay, so every confirmed mapping becomes a replayable, tamper-evident entry, is the roadmap. I state it as future work, not something that exists now.

07 / Old vs new

The same gap analysis, re-engineered.

TRADITIONAL · ≈ days per circular read each circular by hand keyword-search standards paraphrased matches & gaps missed RE-ENGINEERED · minutes extract + ground to concept cite STD + clause, or abstain human confirms · gap surfaced
fig.4 · hand-reading every circular → grounded auto-mapping that cites or abstains

What this says about how I work.

I don't ask a model "which control does this touch?" and trust the citation. I draw the trust boundary first. Extraction, the grounding score, and the abstain gate live in code over a named ontology a reviewer can challenge, and the model sits strictly downstream, allowed only to phrase prose about a mapping the scorer already cited. Then I confront the hard parts out loud: the paraphrase keyword search misses, the citation a free LLM would invent, and the obligation with no control that must surface as a gap rather than a guess. Re-engineering a control to run on the whole library, and being honest about where grounded retrieval ends and an immutable ledger I haven't built yet begins, is the judgment I'd bring to leading an AI transformation.

See it run.

The mapping above is real output from the engine over the synthetic library. The full interactive workspace runs as a working application: the standards graph, the extracted obligations, the cited mappings, and the abstained gap.

See the live workspace →The full console runs on my machine. Ask me for a 90-second walkthrough or a screen-share.