For engineering teams shipping critical changes on GitHub

Critical code ships without a documented why. dlogs blocks the merge until it is recorded.

Install a GitHub App. Mark which paths matter. When a PR touches them without a linked decision, merge is blocked. Setup takes minutes, and the decision record remains permanent.

Setup in 10 minutesAppend-only and tamper-evidentHumans author, AI suggests

Product demo coming soon

Decisions get lost. PRs merge anyway.

Every team has stories like these. The why behind critical changes disappears the moment the PR is merged.

Invisible cost

A Terraform change doubles infra cost, and six months later nobody can explain why it was approved.

Buried context

A critical architecture decision lived in Slack, then got buried before the next team needed it.

Missing accountability

A postmortem asks who approved a risky auth change, but the PR history only shows what changed, not why.

See it in action on a real PR

This is the exact workflow your team sees when critical code changes are proposed.

Step 1

The PR

A developer opens a PR that modifies a protected file.

  • Title: Upgrade RDS instance to r6g.xlarge
  • File touched: infra/terraform/rds.tf
  • Policy match: infra/**

Step 2

The block

dlogs check fails because no active Decision ID is linked.

  • dlogs/decision-required: No active Decision ID found.
  • This PR modifies a critical path.
  • Bot comment asks to link an existing decision or create one.

Step 3

The decision

The developer writes a quick decision record.

  • Decision ID: DEC-2026-0042
  • Problem: CPU ceiling during peak traffic windows.
  • Decision: Upgrade now; revisit read replicas next quarter.

Step 4

The merge

Decision is linked, check turns green, PR is mergeable.

  • dlogs/decision-required: Decision DEC-2026-0042 verified.
  • Status: Active
  • Merge proceeds with durable decision context.

How it works

Step 1

Connect GitHub and mark critical paths

Install the dlogs GitHub App and set policy paths like infra/, db/, or auth/ where mistakes are expensive.

Step 2

dlogs blocks risky PRs missing a decision

When a PR touches a protected path without an active Decision ID, status checks fail and the PR cannot merge.

Step 3

Write the decision and unblock merge

Capture problem, rationale, and tradeoffs in under a minute, attach the Decision ID, and move forward with an auditable trail.

@dlogs in Slack. Query decisions. Record new ones. Without leaving the conversation.

Your team makes decisions in Slack every day. dlogs meets you there — retrieve context during incidents and capture decisions before the thread gets buried.

RetrieveGet decision context in seconds
# incident-auth-2026-03Active
AK
alex.kim2:09 AM

Something changed in token rotation recently.

@dlogs auth token rotation

dl
dlogs2:09 AM

DEC-2026-0042 · ACTIVE

Set token rotation to 24h window

Constraint: must not exceed Redis connection pool limit

Supersedes: DEC-2025-0018

View full decision →

AK
alex.kim2:14 AM

Found it. Pool config was never updated after DEC-2026-0119. Fixing now.

RecordCapture decisions before the thread gets buried
# eng-platform
PR
priya3:42 PM

OK so we're going with Redis cluster over Memcached. Write-through handles our consistency needs. We accept higher memory cost.

AK
alex.kim3:45 PM

Agreed. Let's record this before it gets buried.

/dlogs record

dl
dlogs3:45 PM

Decision form opened · AI pre-filled from thread context

TitleAdopt Redis cluster with write-through caching
ProblemNeed consistent cache layer for session state
OptionsRedis cluster, Memcached, DynamoDB DAX

Review and edit in the modal, then submit.

dl
dlogs3:46 PM

Recorded · DEC-2026-0089

Adopt Redis cluster with write-through caching

By @alex.kim · Linked to this thread

View full decision →

Ask @dlogs in your editor. Understand any function's decision history.

Ask a question about any function. dlogs matches it to the exact decision that governs that code, including constraints, tradeoffs, and the full supersede chain.

auth/token_rotation.pyCursor
40
41# Token rotation strategy
42def rotate_token(user, window_hours=24):
43 """Rotate auth token within the given window."""
44 pool = get_redis_pool()
45 if pool.active_connections > pool.max - 2:
46 raise PoolExhaustedError()
47 token = generate_token(user)
48 cache_token(pool, token, ttl=window_hours * 3600)
49 return token
50
dlogs
@dlogs why does rotate_token use a 24h window?
DEC-2026-0042ACTIVEsymbol: rotate_token

24h window balances token freshness against Redis connection pool limits. 1h window (DEC-2025-0018) was rejected for causing latency spikes under load.

Constraint: Redis pool max connections

Supersedes: DEC-2025-0018

View full decision →

Trust guarantees, not conventions

Append-only by design

Decisions are never edited or deleted. New facts supersede old ones; history stays intact.

Trust over convenience

Tamper-evident, hash-chained records and derived status prevent silent drift from truth.

AI suggests, humans author

AI may suggest topics and gaps. It does not own decisions; your team remains accountable author.

Decision infrastructure first. Integrations are surfaces.

GitHub is the first enforcement surface, not the boundary of the product. dlogs is your long-term decision governance layer.

  • Today: PRs touching critical paths require an active Decision ID.
  • Near term: tighten governance guarantees and make onboarding low-friction.
  • Next: add a metered intelligence layer for suggestions, impact views, and queryability.

The merge is not the end. It is where future clarity starts.

Six months after a decision was captured, it pays for itself when the next team needs to understand why.

Decision lineage for infra/terraform/
DEC-2025-0018superseded

Initial RDS sizing for launch

@vamshi · Sep 2025

Constraint: Stay under $500/mo during beta
superseded by ↓
DEC-2026-0042superseded

Upgrade RDS to r6g.xlarge

@priya · Jan 2026

Constraint: Must not exceed Redis connection pool limit
superseded by ↓
DEC-2026-0119active

Add read replicas for auth DB

@alex · Mar 2026

Constraint: Pool config must be updated to match replica count

Postmortem finding

DEC-2026-0119 added replicas without adjusting pool limits. The binding constraint from DEC-2026-0042 was still in effect. Root cause identified in minutes using the decision chain.

FAQ

Is GitHub the only integration in v1?

Yes for enforcement in v1. GitHub is our first capture/enforcement surface, not the product boundary.

Does AI write decisions for us?

No. AI may suggest decision-worthy moments or topics; humans author every decision entry.

How long does setup take?

Most teams can connect GitHub, set their first criticality rule, and run enforcement in about 10 minutes.

What should a decision record include?

Enough context for future teammates to understand the tradeoff: the problem, alternatives considered, final rationale, constraints, and who approved it.

Can I use dlogs from Slack or my editor?

Yes. Type @dlogs in Slack to query decisions instantly, or /dlogs record to capture a new decision with AI-assisted form filling — without leaving the conversation. For your editor, dlogs exposes an MCP server for Cursor and IDE integration.

What happens to decisions after merge?

They become queryable by file, path, function, author, or keyword. Every decision is permanent and linked to the code it governs.

What is the long-term direction?

dlogs is built to become one goldmine for code, product, and business decisions with seamless capture across multiple surfaces.

Block risky merges until your team records the decision behind them.

Install free, set your critical paths, and make every high-impact change explainable months later.