vibe-golden-file-testing
SkillFiles & storageImplements snapshot/golden file tests with temporal normalization so tests don't break daily. Use when implementing tests that compare output against expected snapshots.
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the vibe-golden-file-testing skill
What this skill tells your AI
The instructions your AI receives, as published by ash1794/vibe-engineering in plugins/vibe-engineering/skills/vibe-golden-file-testing/SKILL.md and read by ahel’s review.
Golden file tests are powerful but brittle. This skill makes them robust.
When to Use This Skill
- Implementing tests that compare output against saved expected output
- Tests that currently break because dates, timestamps, or IDs change
- API response testing with dynamic fields
- CLI output testing
When NOT to Use This Skill
- Simple unit tests with static assertions
- Tests where the exact output IS the requirement (byte-for-byte)
- Performance benchmarks
The Problem
Golden tests break when they contain:
- Dates/timestamps (
2026-02-28→ different tomorrow) - UUIDs/IDs (random each run)
- Hostnames/ports (different per environment)
- File paths (absolute paths differ per machine)
- Durations (
took 1.23s→ varies by machine)
Steps
-
Identify dynamic fields in the output being tested
-
Create normalizer function:
func normalizeOutput(s string) string { // Dates: 2026-02-28 → REDACTED_DATE s = dateRegex.ReplaceAll(s, "REDACTED_DATE") // UUIDs: 550e8400-... → REDACTED_UUID s = uuidRegex.ReplaceAll(s, "REDACTED_UUID") // Timestamps: 1709136000 → REDACTED_TS s = tsRegex.ReplaceAll(s, "REDACTED_TS") // Durations: 1.23s → REDACTED_DURATION s = durationRegex.ReplaceAll(s, "REDACTED_DURATION") return s } -
Apply normalization to BOTH:
- The actual output (at test time)
- The golden file (at generation time)
-
Generate golden file with update flag:
if os.Getenv("UPDATE_GOLDEN") == "1" { os.WriteFile(goldenPath, normalized, 0644) } -
Document update command:
# To update golden files: UPDATE_GOLDEN=1 go test ./...
Common Normalizations
| Pattern | Regex | Replacement |
|---|---|---|
| ISO Date | \d{4}-\d{2}-\d{2} | REDACTED_DATE |
| ISO DateTime | \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2} | REDACTED_DATETIME |
| UUID | [0-9a-f]{8}-[0-9a-f]{4}-... | REDACTED_UUID |
| Unix timestamp | \b1[6-9]\d{8}\b | REDACTED_TS |
| Duration | \d+\.?\d*[µnm]?s | REDACTED_DURATION |
| Absolute path | /home/\w+/ or C:\\Users\\ | REDACTED_PATH |
| Port | :\d{4,5}\b | :REDACTED_PORT |
Output Format
Golden File Setup: [Test Name]
Dynamic fields found: X
Normalizations applied: Y
Golden file: [path]
Update command: UPDATE_GOLDEN=1 [test command]
Signals
- GitHub stars
- 85
- Forks
- 20
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
vibe-golden-file-testing- Source
- github.com/ash1794/vibe-engineering
github.com/ash1794/vibe-engineering