← All posts
Product

Treating knowledge configs like infrastructure code

Mahari Kalau6 min readJun 2026
Treating knowledge configs like infrastructure code

Nobody would accept a production database schema that any employee could change silently, with no history and no review. Somehow that is exactly how most companies manage their metric definitions.

The state of the art is a spreadsheet

Ask a data team where their metric definitions live and the honest answer is usually: partly in dbt, partly in a Confluence page that is eight months stale, partly in a Google Sheet the analytics lead maintains, and mostly in three people's heads.

None of these have change history worth the name. When a number moves and someone asks why, the investigation starts from zero.

What GitOps gives you here

OneClickBrain exports the entire knowledge layer as structured files. Definitions, scopes, permissions, integration configs — all of it, in YAML or JSON, in a repo you own.

# knowledge/metrics/revenue_churn.yaml name: revenue_churn owner: finance status: verified formula: | churned_mrr / starting_mrr excludes: - internal_accounts - trial_accounts grace_period_days: 30 sources: - dbt:models/finance/mrr_movements.sql - slack:C04XX/1719...

Once it is a file, everything you already know how to do applies:

The definition of revenue is at least as load-bearing as a database migration. Treat it accordingly.

A CI check worth having

The single most useful check we have seen customers add is an ownership gate:

# .github/workflows/knowledge.yml - name: Validate knowledge layer run: oneclickbrain validate ./knowledge \ --require-owner \ --fail-on-conflict \ --fail-on-stale-source

It refuses to merge a metric marked verified without a named human owner. That one rule does more for definition hygiene than any amount of documentation policy.

No lock-in, structurally. Because the export is complete and the format is plain, moving off OneClickBrain means keeping the repo. That is deliberate — a knowledge layer you cannot take with you is a liability, not an asset.

Where it fits with the dashboard

Not every change belongs in a pull request. Approving a proposed definition update is a two-click action in the UI, and that is the right interface for it. The repo is the source of truth for structural changes: new scopes, permission model shifts, integration configuration, anything a reviewer should see before it takes effect.

Both paths write to the same store. The distinction is about which changes deserve review, not about which tool you happen to prefer.

Mahari Kalau

Mahari Kalau

Founder & CEO, OneClickBrain

Writes about context engineering, agent architecture, and the unglamorous parts of enterprise AI.

Keep reading

🧩
Architecture

Metadata-first: reading a stack without touching a row

9 min read · Aug 2026
🔍
Case Study

Three teams, three churn definitions, one broken dashboard

8 min read · Jul 2026
🔒
Governance

Permissions belong in the context layer

7 min read · Aug 2026