# DataSync.Dev Extraction Implementation Plan
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**Goal:** Extract dev/testing ETL code from JdeScoping.DataSync into a separate JdeScoping.DataSync.Dev project with its own test project.
**Architecture:** Create two new projects (DataSync.Dev and DataSync.Dev.Tests) that depend on the existing DataSync project. Move all DevEtl files, update namespaces, update solution file, then delete original folders.
**Tech Stack:** .NET 10, xUnit, Shouldly, NSubstitute
---
## Task 1: Create JdeScoping.DataSync.Dev Project
**Files:**
- Create: `NEW/src/JdeScoping.DataSync.Dev/JdeScoping.DataSync.Dev.csproj`
**Step 1: Create project directory**
Run:
```bash
mkdir -p /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync.Dev
```
**Step 2: Create project file**
Create `NEW/src/JdeScoping.DataSync.Dev/JdeScoping.DataSync.Dev.csproj`:
```xml
net10.0
enable
enable
```
**Step 3: Verify project builds**
Run:
```bash
dotnet build /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync.Dev/JdeScoping.DataSync.Dev.csproj
```
Expected: Build succeeded
---
## Task 2: Move Source Files to DataSync.Dev
**Files:**
- Move: `NEW/src/JdeScoping.DataSync/DevEtl/*.cs` → `NEW/src/JdeScoping.DataSync.Dev/`
**Step 1: Move all 22 source files**
Run:
```bash
mv /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync/DevEtl/*.cs /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync.Dev/
```
**Step 2: Remove empty DevEtl directory**
Run:
```bash
rmdir /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync/DevEtl
```
**Step 3: Verify files moved**
Run:
```bash
ls /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync.Dev/*.cs | wc -l
```
Expected: 22
---
## Task 3: Update Namespaces in Source Files
**Files:**
- Modify: All 22 `.cs` files in `NEW/src/JdeScoping.DataSync.Dev/`
**Step 1: Update namespace declarations**
Replace in all files:
```csharp
namespace JdeScoping.DataSync.DevEtl;
```
With:
```csharp
namespace JdeScoping.DataSync.Dev;
```
Run:
```bash
cd /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync.Dev && \
sed -i '' 's/namespace JdeScoping\.DataSync\.DevEtl;/namespace JdeScoping.DataSync.Dev;/g' *.cs
```
**Step 2: Verify namespace changes**
Run:
```bash
grep -l "JdeScoping.DataSync.DevEtl" /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync.Dev/*.cs
```
Expected: No output (no files should contain old namespace)
**Step 3: Verify new namespace exists**
Run:
```bash
grep -c "namespace JdeScoping.DataSync.Dev;" /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync.Dev/*.cs | head -5
```
Expected: Each file shows `:1`
**Step 4: Build to verify**
Run:
```bash
dotnet build /Users/dohertj2/Desktop/JdeScopingTool/NEW/src/JdeScoping.DataSync.Dev/JdeScoping.DataSync.Dev.csproj
```
Expected: Build succeeded
---
## Task 4: Create JdeScoping.DataSync.Dev.Tests Project
**Files:**
- Create: `NEW/tests/JdeScoping.DataSync.Dev.Tests/JdeScoping.DataSync.Dev.Tests.csproj`
**Step 1: Create test project directory**
Run:
```bash
mkdir -p /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests
```
**Step 2: Create test project file**
Create `NEW/tests/JdeScoping.DataSync.Dev.Tests/JdeScoping.DataSync.Dev.Tests.csproj`:
```xml
net10.0
enable
enable
false
true
runtime; build; native; contentfiles; analyzers; buildtransitive
all
runtime; build; native; contentfiles; analyzers; buildtransitive
all
```
**Step 3: Copy appsettings.json from existing test project**
Run:
```bash
cp /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Tests/appsettings.json /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests/
```
**Step 4: Verify project builds**
Run:
```bash
dotnet build /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests/JdeScoping.DataSync.Dev.Tests.csproj
```
Expected: Build succeeded
---
## Task 5: Move Test Files to DataSync.Dev.Tests
**Files:**
- Move: `NEW/tests/JdeScoping.DataSync.Tests/DevEtl/*.cs` → `NEW/tests/JdeScoping.DataSync.Dev.Tests/`
**Step 1: Move all 8 test files**
Run:
```bash
mv /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Tests/DevEtl/*.cs /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests/
```
**Step 2: Remove empty DevEtl directory**
Run:
```bash
rmdir /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Tests/DevEtl
```
**Step 3: Verify files moved**
Run:
```bash
ls /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests/*.cs | wc -l
```
Expected: 8
---
## Task 6: Update Namespaces and Usings in Test Files
**Files:**
- Modify: All 8 `.cs` files in `NEW/tests/JdeScoping.DataSync.Dev.Tests/`
**Step 1: Update namespace declarations**
Replace in all files:
```csharp
namespace JdeScoping.DataSync.Tests.DevEtl;
```
With:
```csharp
namespace JdeScoping.DataSync.Dev.Tests;
```
Run:
```bash
cd /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests && \
sed -i '' 's/namespace JdeScoping\.DataSync\.Tests\.DevEtl;/namespace JdeScoping.DataSync.Dev.Tests;/g' *.cs
```
**Step 2: Update using statements**
Replace in all files:
```csharp
using JdeScoping.DataSync.DevEtl;
```
With:
```csharp
using JdeScoping.DataSync.Dev;
```
Run:
```bash
cd /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests && \
sed -i '' 's/using JdeScoping\.DataSync\.DevEtl;/using JdeScoping.DataSync.Dev;/g' *.cs
```
**Step 3: Verify changes**
Run:
```bash
grep -l "DevEtl" /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests/*.cs
```
Expected: No output (no files should contain "DevEtl")
**Step 4: Build to verify**
Run:
```bash
dotnet build /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests/JdeScoping.DataSync.Dev.Tests.csproj
```
Expected: Build succeeded
---
## Task 7: Update Solution File
**Files:**
- Modify: `NEW/JdeScoping.slnx`
**Step 1: Add new projects to solution**
Update `NEW/JdeScoping.slnx` to add two new Project entries:
In the `/src/` folder section, add:
```xml
```
In the `/tests/` folder section, add:
```xml
```
**Step 2: Verify solution builds**
Run:
```bash
dotnet build /Users/dohertj2/Desktop/JdeScopingTool/NEW/JdeScoping.slnx
```
Expected: Build succeeded
---
## Task 8: Run Tests to Verify
**Step 1: Run new test project**
Run:
```bash
dotnet test /Users/dohertj2/Desktop/JdeScopingTool/NEW/tests/JdeScoping.DataSync.Dev.Tests/JdeScoping.DataSync.Dev.Tests.csproj --verbosity normal
```
Expected: All tests pass (some may skip if cache files don't exist)
**Step 2: Run full solution tests**
Run:
```bash
dotnet test /Users/dohertj2/Desktop/JdeScopingTool/NEW/JdeScoping.slnx --verbosity minimal
```
Expected: All tests pass
---
## Task 9: Commit Changes
**Step 1: Stage all changes**
Run:
```bash
cd /Users/dohertj2/Desktop/JdeScopingTool && \
git add NEW/src/JdeScoping.DataSync.Dev/ && \
git add NEW/tests/JdeScoping.DataSync.Dev.Tests/ && \
git add NEW/JdeScoping.slnx
```
**Step 2: Commit**
Run:
```bash
git commit -m "feat: extract DevEtl to JdeScoping.DataSync.Dev project
- Create JdeScoping.DataSync.Dev for sandbox testing ETL code
- Create JdeScoping.DataSync.Dev.Tests for associated tests
- Move 22 source files and 8 test files
- Update namespaces from DevEtl to Dev
- Add both projects to solution"
```
---
## Summary
| Task | Description | Files Changed |
|------|-------------|---------------|
| 1 | Create DataSync.Dev project | 1 new csproj |
| 2 | Move source files | 22 files moved |
| 3 | Update source namespaces | 22 files modified |
| 4 | Create DataSync.Dev.Tests project | 1 new csproj + appsettings |
| 5 | Move test files | 8 files moved |
| 6 | Update test namespaces/usings | 8 files modified |
| 7 | Update solution file | 1 file modified |
| 8 | Run tests | Verification |
| 9 | Commit | Git |