ENGINEERING

Log every security MR approval to a tamper-evident audit table

Whenever a security-labeled merge request is approved or merged in GitLab, this records who approved it, the diff scope.

CategoryEngineering
Enginesim
Difficultyintermediate
Triggerwebhook
Steps5
Setup~15 min

How it runs

The automated pipeline, trigger to output.

  • TriggerGitLab webhook: security MR approved or mergedGitLabGitLab
  • ActionRead approvers, group, and diff scope from GitLabGitLabGitLab
  • LogicVerify approver was in the authorized group
  • ActionAppend the approval record to the Postgres audit tablePostgreSQLPostgres
  • OutputPost a logged-entry confirmation to SlackSlack

What it does

Captures the approval trail for security-labeled merge requests. On each approval or merge event it records the MR ID, approvers, the reviewer group that owned it, the changed-file scope, and timestamps into a Postgres audit table built for compliance evidence. It then posts a confirmation to Slack so reviewers see the entry was logged.

When to use it

Use it when an auditor or SOC 2 / ISO control requires provable evidence that security-sensitive changes were reviewed by an authorized group. It turns scattered GitLab approval events into a queryable, append-only record.

How it works

  1. 1A GitLab webhook fires on MR approval or merge for security-labeled MRs.
  2. 2The flow reads the approver list, reviewer group, and changed-file scope from the GitLab API.
  3. 3A check confirms the approver belonged to the authorized reviewer group; mismatches are flagged.
  4. 4The event is written as an append-only row to the Postgres audit table.
  5. 5A Slack confirmation posts the logged entry, marking any unauthorized-approver flag.

Set it up

What you configure once, before turning it on.

  1. 1
    Connect GitLabRepos, MRs, pipelines, registry.
  2. 2
    Connect PostgresAny Postgres URL — query, write, migrate.
  3. 3
    Connect SlackChannels, DMs, threads, mentions.
  4. 4
    Set each agent's modelWe leave models unset so you pick the tier — fast + cheap, or top-quality.
  5. 5
    Tune it to your dataEdit the prompts, filters, and field mappings so it matches how your team works.
  6. 6
    Test, then turn it onRun once against a sample, confirm the output, then enable the trigger.

Run this workflow in your colony.

14-day trial. No DevOps. No Sales call. Provisioned in under a minute.