← ClaudeAtlas

golden-snapshot-migratorlisted

Capture golden snapshots before a major library or dependency migration and diff after to keep the external behavior contract intact.
RMAzrim/opencode-artes · ★ 2 · AI & Automation · score 76
Install: claude install-skill RMAzrim/opencode-artes
# Golden Snapshot Migrator ## 1. System Architecture & Prerequisites Upgrading a library (React, Express, ORM, SDK) is scary precisely because you cannot predict what breaks. The Migrator pins down the *current observable behavior* as golden snapshots before the swap and diffs it after, so every behavior change is seen and accounted for instead of discovered by users. Node 18+ stdlib. Core idea: snapshot = serialized observable output of a surface (render output, HTTP handler result, DB query, function returns) keyed by a stable input probe. ## 2. Input/Output Data Contracts Input: a directory of probe files (same contract family as refactor-safety-harness, compatible on purpose): - `setup()` — optional pre-migration fixtures - `probes: [{ name, inputs, invoke }]` — list baked into one module Baseline stored as `snapshots/<surface>.golden.json` with format `{ name, capturedAt, fields: { <probeName>: <normalized value> } }`. Output for the migration diff: `migration-drift.md` + `migration-drift.json` with `{ unchanged, changed, addedMarkedOK: [] }`; exit `1` on unacknowledged drift. ## 3. Production Reference Implementation ```js // golden-snapshot-migrator.js const fs = require('fs'); const path = require('path'); const crypto = require('crypto'); const [,, surface, mode = 'record', sourceDir = '.'] = process.argv; if (!surface) { console.error('usage: node golden-snapshot-migrator.js <surface> [record|diff] [probeDir]'); process.exit(1); } const GOLD = path.join(s