160 lines
7.3 KiB
Markdown
160 lines
7.3 KiB
Markdown
# Tasks: Regex Command for Pattern-Based Renaming
|
||
|
||
**Input**: Design documents from `/specs/006-add-regex-command/`
|
||
**Prerequisites**: plan.md (required), spec.md (required for user stories), research.md, data-model.md, contracts/
|
||
|
||
**Tests**: Include targeted contract and integration coverage where scenarios demand automated verification.
|
||
|
||
**Organization**: Tasks are grouped by user story to enable independent implementation and testing of each story.
|
||
|
||
## Format: `[ID] [P?] [Story] Description`
|
||
|
||
- **[P]**: Can run in parallel (different files, no dependencies)
|
||
- **[Story]**: Which user story this task belongs to (e.g., US1, US2, US3)
|
||
- Include exact file paths in descriptions
|
||
|
||
## Phase 1: Setup (Shared Infrastructure)
|
||
|
||
**Purpose**: Prepare fixtures and support tooling required across all stories.
|
||
|
||
- [X] T001 Create regex test fixtures (`tests/fixtures/regex/`) with sample filenames covering digits, words, and Unicode cases.
|
||
- [X] T002 [P] Scaffold `scripts/smoke-test-regex.sh` mirroring quickstart scenarios for preview/apply/undo.
|
||
|
||
---
|
||
|
||
## Phase 2: Foundational (Blocking Prerequisites)
|
||
|
||
**Purpose**: Establish reusable package skeletons and command registration that all stories build upon.
|
||
|
||
- [X] T003 Create `internal/regex` package scaffolding (request.go, summary.go, doc.go) matching data-model entities.
|
||
- [X] T004 [P] Register a stub `regex` Cobra command in `cmd/regex.go` with flag definitions aligned to shared scope options.
|
||
|
||
**Checkpoint**: Foundation ready – user story implementation can now begin.
|
||
|
||
---
|
||
|
||
## Phase 3: User Story 1 - Rename Files Using Captured Groups (Priority: P1) 🎯 MVP
|
||
|
||
**Goal**: Allow users to preview regex-based renames that substitute captured groups into templates while preserving extensions.
|
||
|
||
**Independent Test**: Run `renamer regex "^(\w+)-(\d+)" "@2_@1" --dry-run` against fixtures and verify preview outputs `123_alpha.log`, `456_beta.log` without modifying the filesystem.
|
||
|
||
### Tests for User Story 1
|
||
|
||
- [X] T005 [P] [US1] Add preview contract test for capture groups in `tests/contract/regex_command_test.go`.
|
||
- [X] T006 [P] [US1] Add integration preview flow test covering dry-run confirmation in `tests/integration/regex_flow_test.go`.
|
||
|
||
### Implementation for User Story 1
|
||
|
||
- [X] T007 [P] [US1] Implement template parser handling `@n` and `@@` tokens in `internal/regex/template.go`.
|
||
- [X] T008 [P] [US1] Implement regex engine applying capture groups to candidate names in `internal/regex/engine.go`.
|
||
- [X] T009 [US1] Build preview planner producing `RegexSummary` entries in `internal/regex/preview.go`.
|
||
- [X] T010 [US1] Wire Cobra command to preview/apply planner with scope options in `cmd/regex.go`.
|
||
|
||
**Checkpoint**: User Story 1 preview capability ready for validation.
|
||
|
||
---
|
||
|
||
## Phase 4: User Story 2 - Automation-Friendly Regex Renames (Priority: P2)
|
||
|
||
**Goal**: Deliver deterministic apply flows with ledger metadata and undo support suitable for CI automation.
|
||
|
||
**Independent Test**: Execute `renamer regex "^build_(\d+)_(.*)$" "release-@1-@2" --yes --path ./tests/fixtures/regex` and verify exit code `0`, ledger metadata, and successful `renamer undo` restoration.
|
||
|
||
### Tests for User Story 2
|
||
|
||
- [X] T011 [P] [US2] Add ledger contract test capturing pattern/template metadata in `tests/contract/regex_ledger_test.go`.
|
||
- [X] T012 [P] [US2] Add integration undo flow test for regex entries in `tests/integration/regex_undo_test.go`.
|
||
|
||
### Implementation for User Story 2
|
||
|
||
- [X] T013 [P] [US2] Implement apply handler persisting ledger entries in `internal/regex/apply.go`.
|
||
- [X] T014 [US2] Ensure `cmd/regex.go` honors `--yes` automation semantics and deterministic exit codes.
|
||
- [X] T015 [US2] Extend undo recognition for regex batches in `internal/history/history.go` and shared output messaging.
|
||
|
||
**Checkpoint**: Automation-focused workflows (apply + undo) validated.
|
||
|
||
---
|
||
|
||
## Phase 5: User Story 3 - Validate Patterns, Placeholders, and Conflicts (Priority: P3)
|
||
|
||
**Goal**: Provide clear feedback for invalid patterns or template conflicts to prevent destructive applies.
|
||
|
||
**Independent Test**: Run `renamer regex "^(.*)$" "@2" --dry-run` and confirm an error about undefined capture groups; attempt a rename producing duplicate targets and confirm apply is blocked.
|
||
|
||
### Tests for User Story 3
|
||
|
||
- [X] T016 [P] [US3] Add validation contract tests for invalid patterns/placeholders in `tests/contract/regex_validation_test.go`.
|
||
- [X] T017 [P] [US3] Add integration conflict test ensuring duplicate targets block apply in `tests/integration/regex_conflict_test.go`.
|
||
|
||
### Implementation for User Story 3
|
||
|
||
- [X] T018 [P] [US3] Implement validation for undefined groups and empty results in `internal/regex/validate.go`.
|
||
- [X] T019 [US3] Extend conflict detection to flag duplicate or empty proposals in `internal/regex/preview.go`.
|
||
- [X] T020 [US3] Enhance CLI error messaging and help examples in `cmd/regex.go`.
|
||
|
||
**Checkpoint**: Validation safeguards complete; regex command safe for experimentation.
|
||
|
||
---
|
||
|
||
## Phase 6: Polish & Cross-Cutting Concerns
|
||
|
||
**Purpose**: Final documentation, tooling, and quality passes.
|
||
|
||
- [X] T021 [P] Update CLI documentation with regex command details in `docs/cli-flags.md`.
|
||
- [X] T022 [P] Finalize `scripts/smoke-test-regex.sh` to exercise quickstart scenarios and ledger undo.
|
||
- [X] T023 Run `gofmt` and `go test ./...` to verify formatting and regression coverage.
|
||
|
||
---
|
||
|
||
## Dependencies & Execution Order
|
||
|
||
### Phase Dependencies
|
||
|
||
- **Setup (Phase 1)** → prerequisite for foundational work.
|
||
- **Foundational (Phase 2)** → must complete before User Stories begin.
|
||
- **User Stories (Phase 3–5)** → execute sequentially by priority or in parallel once dependencies satisfied.
|
||
- **Polish (Phase 6)** → runs after desired user stories ship.
|
||
|
||
### User Story Dependencies
|
||
|
||
- **US1** depends on Foundational package scaffolding (T003–T004).
|
||
- **US2** depends on US1 preview/apply wiring.
|
||
- **US3** depends on US1 preview engine and US2 apply infrastructure to validate.
|
||
|
||
### Parallel Opportunities
|
||
|
||
- Tasks marked `[P]` operate on distinct files and can proceed concurrently once their prerequisites are met.
|
||
- Different user stories can progress in parallel after their dependencies complete, provided shared files (`cmd/regex.go`, `internal/regex/preview.go`) are coordinated sequentially.
|
||
|
||
---
|
||
|
||
## Implementation Strategy
|
||
|
||
### MVP First (User Story 1 Only)
|
||
|
||
1. Complete Phase 1–2 to establish scaffolding.
|
||
2. Implement US1 preview workflow (T005–T010) and validate independently.
|
||
3. Ship preview-only capability if automation support can follow later.
|
||
|
||
### Incremental Delivery
|
||
|
||
1. Deliver US1 preview/apply basics.
|
||
2. Layer US2 automation + ledger features.
|
||
3. Add US3 validation/conflict safeguards.
|
||
4. Conclude with polish tasks for docs, smoke script, and regression suite.
|
||
|
||
### Parallel Team Strategy
|
||
|
||
- Developer A focuses on template/engine internals (T007–T008) while Developer B builds tests (T005–T006).
|
||
- After US1, split automation work: ledger implementation (T013) and undo validation tests (T012) run concurrently.
|
||
- Validation tasks (T016–T020) can be parallelized between CLI messaging and conflict handling once US2 merges.
|
||
|
||
---
|
||
|
||
## Notes
|
||
|
||
- Keep task granularity small enough for independent completion while documenting file paths for each change.
|
||
- Tests should fail before implementation to confirm coverage.
|
||
- Mark tasks complete (`[X]`) in this document as work progresses.
|