batch-rewrite-pattern

$npx mdskill add Tibsfox/gsd-skill-creator/batch-rewrite-pattern

Automatically batch rewrite patterns across multiple files

  • Identifies and applies consistent edits to groups of matching files.
  • Deploys a transformation strategy based on user-defined rules and patterns.
  • Decides which files require batch processing by analyzing file content against defined criteria.
  • Applies the identified transformations in a safe, automated manner across selected files.

SKILL.md

.github/skills/batch-rewrite-patternView on GitHub ↗
---
name: batch-rewrite-pattern
description: "Cascade the same edit pattern across N files safely. Use when applying the same refactor to multiple files (e.g. swap import paths across 11 scripts, rename a symbol, migrate a call signature). Detects the common-shape-across-files situation and turns an N-file cascade into a planned audit → apply → verify workflow instead of N sequential manual edits."
format: 2025-10-02
version: 1.0.0
status: stable
updated: 2026-04-17
type: skill
category: gsd-meta
origin: tibsfox
modified: false
first_seen: 2026-04-17
first_path: examples/skills/gsd-meta/batch-rewrite-pattern/SKILL.md
superseded_by: null
---

# Batch Rewrite Pattern

When the same edit needs to land in N files, the worst shape is N sequential
manual passes. Each pass collects its own errors; the hook system retriggers;
context fills with repetitive diffs. This skill captures the better shape.

## Triggers

Activate when any of these apply:

- Renaming a symbol across the tree
- Migrating a function signature (add/remove/reorder args)
- Swapping an import path across modules
- Converting between two patterns (callbacks ↔ promises, v1 ↔ v2 API)
- Any edit where you can describe the transformation as "in every file
  matching pattern X, replace Y with Z"

Typical count trigger: **≥ 4 files** warrant the batch shape.

## Workflow

1. **Characterize the transformation** in one paragraph:
   - What's the before pattern? (regex or literal)
   - What's the after pattern?
   - Are there variants? (single pattern vs family of patterns)
   - Any files that should be exempt?

2. **Enumerate candidates** with Grep/Glob:
   ```
   Grep pattern=BEFORE output=files_with_matches
   ```

3. **Dry-run the rewrite** against 1-2 candidates first. Verify:
   - The transformation is correct
   - Surrounding context isn't disturbed
   - No collateral damage

4. **Apply in a batch** — prefer a single Bash `sed`/`perl` invocation or a
   small rewrite script over N sequential Edit calls:
   ```bash
   for f in $(grep -l 'BEFORE' src/**/*.ts); do
     sed -i -e 's/BEFORE/AFTER/g' "$f"
   done
   ```
   Or write a one-shot node script that reads each file, applies the
   transformation, writes back.

5. **Verify with the test suite** if one exists, or with a grep that the
   after-pattern is uniformly present and the before-pattern is gone.

6. **Single commit** covering the whole cascade, scope line listing files.

## Anti-patterns to avoid

- **Sequential manual Edit calls** when the transformation is deterministic.
  Each Edit triggers hook re-reads and bloats context.
- **Partial cascades** — leaving some files on the old pattern because you got
  interrupted halfway. Either all or none; use `git stash` to revert if the
  cascade was wrong.
- **Branching transformations without a plan** — when "most files" follow one
  pattern but a few need a variant, enumerate the variants first and handle
  each as its own batch.

## Example — Config Adapter Cascade (v1.49 release-history work)

Situation: 11 scripts in `tools/release-history/` each had a direct
`pg.Client` instantiation and hardcoded paths. Needed to convert all 11 to use
`loadConfig()` + `openDb(cfg)`.

Right shape:
1. Wrote the adapter (`db.mjs`) once
2. Characterized the transform: replace `new pg.Client({...})` block with
   `await openDb(cfg)`; replace hardcoded paths with `cfg.*_abs`
3. Applied to each file in one Bash loop or parallel sed invocation
4. One commit

Wrong shape (what actually happened): 11 sequential Read-plus-Edit cycles,
35+ read-before-edit hook fires, recursive pattern-matching at each step.

The lesson: when you feel yourself about to do the same edit for the fourth
time, stop and batch the rest.

## Companion Tools

- `Grep` with `output_mode: files_with_matches` to enumerate candidates
- `Bash` with `sed -i` or a small rewrite script for the cascade
- `Grep` again to verify the before-pattern is gone and after-pattern is
  uniformly present

## Related

- `file-operation-patterns` — safe bulk file operations
- `decision-framework-invoker` — use when the batch is irreversible

More from Tibsfox/gsd-skill-creator

SkillDescription
3d-interaction-designDesign heuristics for three-dimensional interaction — input modalities (6DoF controllers, gaze, gesture, voice), selection and manipulation techniques (ray-cast, virtual hand, go-go, world-in-miniature), navigation (teleport, continuous, redirected walking), and feedback loops (haptic, audio, visual). Covers Fitts' law in 3D, discoverability vs affordance, safe-zone design, and comfort/simulator sickness mitigation. Use when designing VR/AR interactions, immersive walkthroughs, or any input system where the user's body is the controller.
accessibility-patternsProvides web accessibility best practices for semantic HTML, ARIA, keyboard navigation, color contrast, and screen reader patterns. Use when building UI components, reviewing accessibility, or when user mentions 'a11y', 'accessibility', 'ARIA', 'screen reader', 'keyboard navigation', 'WCAG'.
active-listeningActive listening techniques for effective communication. Covers attending behaviors, paraphrasing, reflective listening, clarifying questions, empathic response, barriers to listening, listening in conflict, and cross-cultural listening. Use when building listening skills, improving understanding in conversation, mediating disputes, or analyzing communication breakdowns.
adversarial-pr-reviewAdversarial spec-compliance PR review — cross-references diffs against approved specs, verifies runtime claims against source, detects competing PRs, audits scope/convention compliance. Use before merging.
agile-methodsAgile and Lean software development methodologies for iterative, adaptive project execution. Covers Scrum (roles, ceremonies, artifacts), Kanban (WIP limits, flow metrics), XP (TDD, pair programming, CI), SAFe overview, Lean Software Development (Poppendieck's 7 principles), user stories (INVEST criteria), estimation via story points and velocity, and the Agile Manifesto's values and principles. Includes Cynefin framework for methodology selection and GSD's relationship to Agile as a structured Lean variant.
algebraic-reasoningSymbolic manipulation, equation solving, and algebraic structures for mathematical reasoning. Covers distributive law, factoring, completing the square, linear through polynomial equation solving, systems of equations (substitution, elimination, Gaussian elimination, matrix methods), algebraic structures (groups, rings, fields), modular arithmetic, polynomial theory, and inequalities. Use when solving equations, simplifying expressions, working with algebraic structures, or performing symbolic manipulation.
algorithmic-awarenessUnderstanding how algorithmic systems shape what users see, know, and do -- from recommendation feeds to search ranking to credit scoring to hiring software. Covers the mechanics of recommendation systems, algorithmic bias and its sources, personalization's effects on information diets, opacity and accountability, AI limitations (hallucination, confident wrongness), and the human-in-the-loop question. Use when a learner needs to think critically about why particular content reached them.
algorithms-data-structuresAlgorithms and data structures from first principles through advanced analysis. Covers sorting (bubble, insertion, selection, merge, quick, heap, radix), searching (linear, binary, BFS, DFS, Dijkstra, A*), fundamental data structures (arrays, linked lists, stacks, queues, hash tables, trees, heaps, graphs, tries), complexity analysis (Big-O, Big-Omega, Big-Theta, amortized), recurrence relations, and algorithm design paradigms (divide-and-conquer, greedy, dynamic programming, backtracking). Use when analyzing, selecting, implementing, or comparing algorithms and data structures.
aminet-browserAminet search and browse: full-text search, category tree navigation, architecture filtering, package detail, and curated collections. Use when searching, browsing, or managing package collections.
aminet-emulatorFS-UAE emulator configuration and launch: hardware profiles, ROM management, WHDLoad integration, config generation, and state snapshots. Use when configuring emulation, managing ROMs, or launching Amiga software.