Guide
How to document prompt changes like config
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:
- Merge to main behind flag off or staging-only
- Canary 5–10% traffic
- Watch refusal rate, schema fail rate, cost per unit, support tickets
- 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.mdentry - 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
- Add metadata headers to your top three production prompts today.
- Create a PR template section for prompt diffs.
- Pin versions in code; remove “always fetch latest” without canary.
- 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_versionas 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:
- They submit a form that opens a PR (or CMS → git sync)
- Diff shows plain text, not minified JSON
- Automated bot comments with token estimate delta via CI
- 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.
Hubs: All guides · Tools · Start here
Tool links point to free client-side utilities on this site. Third-party product links may be affiliates — affiliate disclosure.