Guide

How to document prompt changes like config

promptsopsprocess

Prompts are production behavior. Editing a system prompt without a changelog is like SSH-ing into prod to tweak a YAML file and hoping Slack remembers why. This guide shows how to document prompt changes like config — lightweight enough for small teams, strict enough for audit.

Related: production system prompts, prompt engineering checklist, JSON schema output prompts.

What “like config” means

Config norms you should borrow:

  • Version identifier
  • Owner / approver
  • Diff in source control
  • Rollback path
  • Environment promotion (dev → staging → prod)
  • Linked ticket or RFC

You do not need a bureaucracy theater. You need reconstructability: six weeks later, can you answer “what changed and why?”

Minimum viable prompt metadata

Store beside the prompt text (header comment, frontmatter, or adjacent manifest):

id: support-draft
version: 3.2.0
owner: @team-support
last_reviewed: 2026-09-15
model_allowlist: [mid-tier-id]
tokenizer_note: calibrated 2026-09-01
canary: 10%

Bump version on every production-affecting edit — including “tiny wording” changes. Tiny wording changes ship different refusals.

Changelog entries that help

Bad: update prompt

Good:

## 3.2.0 — 2026-09-15
- Why: reduce invented invoice IDs (ticket SUP-441)
- Change: add "if unknown, output UNKNOWN" to billing section
- Eval: 25 case fixture, invented-ID rate 12% → 3%
- Risk: slightly higher UNKNOWN rate
- Rollback: 3.1.1

Link fixtures or eval notebooks. If you lack evals, say so — silence is worse.

Where prompts should live

Prefer:

  • Git repo paths reviewed in PR (prompts/support-draft/v3.md)
  • Feature flags / remote config with version pins and audit log
  • Generated bundles with content hashes

Avoid:

  • Only in a vendor playground
  • Only in a shared Google Doc with no diff
  • Hot-edited in production DB without history

If product needs non-engineer edits, give them a CMS that still writes versioned artifacts to git or an audited store.

Review checklist (PR template)

  • Version bumped
  • Owner CC’d
  • Why / risk / rollback filled
  • Model allowlist unchanged or intentionally changed
  • Schema / output contract updated if needed
  • Eval notes attached (or explicit waiver)
  • Token impact estimated (estimator) if prompt grew
  • Disclosure / legal lines untouched unless Legal reviewed

Use the prompt engineering checklist for quality; use this doc for change control.

Promotion and canaries

Treat prompts like schema migrations:

  1. Merge to main behind flag off or staging-only
  2. Canary 5–10% traffic
  3. Watch refusal rate, schema fail rate, cost per unit, support tickets
  4. Promote or roll back by version pin — not by rewriting history

Agent tools and RAG packs are part of the prompt contract; version them together when they change jointly — see tool-calling overhead.

Audits and incidents

When the model “started lying last Tuesday,” you need:

  • Prompt version at the time
  • Model id / gateway route
  • Tool catalog hash
  • Relevant feature flag state

Without versioned prompts, incidents become folklore.

Lightweight process for solos

Even solo builders should:

  • Keep prompts in git
  • Tag releases
  • Write a one-line CHANGELOG.md entry
  • Snapshot eval examples in /fixtures

Future you is a stakeholder.

Anti-patterns

  • Editing prod prompts in the provider UI during an outage and forgetting to copy back
  • Same version string after material changes
  • Eval-by-vibe on two cherry-picked chats
  • Growing prompts endlessly without token review

Practical next steps

  1. Add metadata headers to your top three production prompts today.
  2. Create a PR template section for prompt diffs.
  3. Pin versions in code; remove “always fetch latest” without canary.
  4. Tie prompt growth to cost review via the token estimator.

If it changes product behavior, it deserves a diff — even when it is written in English instead of YAML.

Example directory layout

prompts/
  support-draft/
    CHANGELOG.md
    manifest.yaml
    v3.2.0.md
    fixtures/
      invoice-unknown.json
      refund-happy.json

manifest.yaml points prod: v3.2.0 and canary: v3.2.0 with percentages. CI fails if prod pin is missing a changelog header. This is enough structure for most startups; enterprises can map the same artifacts into their existing config service.

Mapping to existing config tooling

If you already use LaunchDarkly, Statsig, or a homemade flag service:

  • Store prompt_version as a flag payload field, not only on/off
  • Require dual control for prod pin changes (same as entitlement configs)
  • Emit an audit event: actor, old version, new version, ticket id
  • Snapshot the full prompt body to object storage on each pin change (immutable)

Playground-only edits are fine for spikes; production pins must reference an immutable artifact hash.

Diff hygiene for non-engineers

When PMs edit copy:

  1. They submit a form that opens a PR (or CMS → git sync)
  2. Diff shows plain text, not minified JSON
  3. Automated bot comments with token estimate delta via CI
  4. Owner still approves merge

This keeps “document like config” without forcing everyone into raw markdown if that is a cultural blocker — the artifact remains versioned.

Tool links point to free client-side utilities on this site. Third-party product links may be affiliates — affiliate disclosure.