Files
jdescopingtool/NEW/docs/plans/2026-01-21-remove-pipeline-viewer.md
T
Joseph Doherty ceb63bfefb refactor(webui): remove pipeline viewer feature
Remove the read-only pipeline viewer from the web UI:
- Delete PipelineViewer.razor page and supporting components
- Delete PipelineController and PipelineMapper from API
- Delete Pipeline DTOs from Core
- Delete PipelineApiClient from Client
- Remove navigation link and DI registrations
- Delete obsolete plan documents

The ConfigManager utility retains pipeline editing capabilities.
2026-01-21 10:14:43 -05:00

9.2 KiB

Remove Pipeline Viewer Implementation Plan

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal: Remove the pipeline viewer feature from the web UI and clean up all supporting code (controllers, DTOs, client services, routes).

Architecture: Delete files in dependency order (DTOs/interfaces first would break compilation), so we delete leaf components first (views, client), then API layer, then shared contracts/DTOs. Modify DI registrations and navigation.

Tech Stack: Blazor WebAssembly, ASP.NET Core API, C#


Task 1: Remove Client Components (Blazor Pages)

Files:

  • Delete: src/JdeScoping.Client/Pages/Admin/PipelineViewer.razor
  • Delete: src/JdeScoping.Client/Components/Admin/PipelineScheduleSection.razor
  • Delete: src/JdeScoping.Client/Components/Admin/SqlQueryModal.razor

Step 1: Delete PipelineViewer.razor

rm src/JdeScoping.Client/Pages/Admin/PipelineViewer.razor

Step 2: Delete PipelineScheduleSection.razor

rm src/JdeScoping.Client/Components/Admin/PipelineScheduleSection.razor

Step 3: Delete SqlQueryModal.razor (if exists)

rm -f src/JdeScoping.Client/Components/Admin/SqlQueryModal.razor

Step 4: Verify files deleted

ls src/JdeScoping.Client/Pages/Admin/ | grep -i pipeline || echo "No pipeline pages remain"
ls src/JdeScoping.Client/Components/Admin/ | grep -i pipeline || echo "No pipeline components remain"

Expected: No pipeline-related files in Admin folders.


Files:

  • Modify: src/JdeScoping.Client/Layout/MainLayout.razor:16

Step 1: Remove the pipeline viewer nav link

In MainLayout.razor, delete this line (around line 16):

<NavLink class="nav-link" href="/admin/pipeline-viewer">Pipeline Viewer</NavLink>

Step 2: Verify the change

grep -n "pipeline-viewer" src/JdeScoping.Client/Layout/MainLayout.razor || echo "Nav link removed"

Expected: "Nav link removed"


Task 3: Remove Client Service

Files:

  • Delete: src/JdeScoping.Client/Services/PipelineApiClient.cs
  • Modify: src/JdeScoping.Client/Program.cs:58

Step 1: Delete PipelineApiClient.cs

rm src/JdeScoping.Client/Services/PipelineApiClient.cs

Step 2: Remove DI registration from Program.cs

In src/JdeScoping.Client/Program.cs, delete this line (around line 58):

builder.Services.AddScoped<IPipelineApiClient, PipelineApiClient>();

Step 3: Verify the changes

grep -n "PipelineApiClient" src/JdeScoping.Client/Program.cs || echo "DI registration removed"
ls src/JdeScoping.Client/Services/PipelineApiClient.cs 2>/dev/null || echo "File deleted"

Expected: Both checks show removal confirmed.


Task 4: Remove API Controller and Mapper

Files:

  • Delete: src/JdeScoping.Api/Controllers/PipelineController.cs
  • Delete: src/JdeScoping.Api/Mapping/PipelineMapper.cs
  • Delete: src/JdeScoping.Api/Mapping/IPipelineMapper.cs
  • Modify: src/JdeScoping.Api/DependencyInjection.cs:43

Step 1: Delete PipelineController.cs

rm src/JdeScoping.Api/Controllers/PipelineController.cs

Step 2: Delete PipelineMapper.cs

rm src/JdeScoping.Api/Mapping/PipelineMapper.cs

Step 3: Delete IPipelineMapper.cs

rm src/JdeScoping.Api/Mapping/IPipelineMapper.cs

Step 4: Remove DI registration from DependencyInjection.cs

In src/JdeScoping.Api/DependencyInjection.cs, delete this line (around line 43):

services.AddSingleton<IPipelineMapper, PipelineMapper>();

Step 5: Verify the changes

ls src/JdeScoping.Api/Controllers/PipelineController.cs 2>/dev/null || echo "Controller deleted"
ls src/JdeScoping.Api/Mapping/*Pipeline* 2>/dev/null || echo "Mapper files deleted"
grep -n "PipelineMapper" src/JdeScoping.Api/DependencyInjection.cs || echo "DI registration removed"

Expected: All three checks confirm removal.


Task 5: Remove Core DTOs and Interface

Files:

  • Delete: src/JdeScoping.Core/Models/Pipelines/ (entire folder)
  • Delete: src/JdeScoping.Core/ApiContracts/IPipelineApiClient.cs

Step 1: Delete the Pipelines DTO folder

rm -rf src/JdeScoping.Core/Models/Pipelines/

Step 2: Delete IPipelineApiClient.cs

rm src/JdeScoping.Core/ApiContracts/IPipelineApiClient.cs

Step 3: Verify deletions

ls src/JdeScoping.Core/Models/Pipelines/ 2>/dev/null || echo "Pipelines folder deleted"
ls src/JdeScoping.Core/ApiContracts/IPipelineApiClient.cs 2>/dev/null || echo "Interface deleted"

Expected: Both checks confirm deletion.


Task 6: Remove API Routes

Files:

  • Modify: src/JdeScoping.Core/ApiContracts/ApiRoutes.cs:155-188

Step 1: Remove the Pipelines class from ApiRoutes.cs

Delete the entire Pipelines static class (lines 155-188):

    /// <summary>
    /// Routes for pipeline configuration API endpoints.
    /// </summary>
    public static class Pipelines
    {
        /// <summary>Base route for pipeline endpoints.</summary>
        public const string Base = "api/pipelines";

        /// <summary>Route template for getting a pipeline by name.</summary>
        public const string ByName = "{name}";

        /// <summary>Route template for getting pipeline status.</summary>
        public const string Status = "{name}/status";

        /// <summary>Route template for getting pipeline executions.</summary>
        public const string Executions = "{name}/executions";

        /// <summary>Builds the route to get a specific pipeline config.</summary>
        /// <param name="name">The pipeline name to URL-encode.</param>
        /// <returns>The formatted route.</returns>
        public static string GetByName(string name) => $"api/pipelines/{Uri.EscapeDataString(name)}";

        /// <summary>Builds the route to get pipeline status.</summary>
        /// <param name="name">The pipeline name to URL-encode.</param>
        /// <returns>The formatted route.</returns>
        public static string GetStatus(string name) => $"api/pipelines/{Uri.EscapeDataString(name)}/status";

        /// <summary>Builds the route to get pipeline executions.</summary>
        /// <param name="name">The pipeline name to URL-encode.</param>
        /// <param name="count">The number of recent executions to retrieve.</param>
        /// <returns>The formatted route.</returns>
        public static string GetExecutions(string name, int count = 10) =>
            $"api/pipelines/{Uri.EscapeDataString(name)}/executions?count={count}";
    }

Step 2: Verify the change

grep -n "Pipelines" src/JdeScoping.Core/ApiContracts/ApiRoutes.cs || echo "Pipelines routes removed"

Expected: "Pipelines routes removed"


Task 7: Delete Plan Documents

Files:

  • Delete: docs/plans/2026-01-07-pipeline-viewer-design.md
  • Delete: docs/plans/2026-01-07-pipeline-viewer-implementation.md

Step 1: Delete design document

rm docs/plans/2026-01-07-pipeline-viewer-design.md

Step 2: Delete implementation plan

rm docs/plans/2026-01-07-pipeline-viewer-implementation.md

Step 3: Verify deletions

ls docs/plans/*pipeline-viewer* 2>/dev/null || echo "Plan documents deleted"

Expected: "Plan documents deleted"


Task 8: Build and Verify

Step 1: Build the solution

cd /Users/dohertj2/Desktop/JdeScopingTool/NEW && dotnet build

Expected: Build succeeds with no errors.

Step 2: Search for any remaining pipeline viewer references

grep -r "PipelineViewer\|PipelineApiClient\|IPipelineApiClient\|PipelineController\|IPipelineMapper\|PipelineMapper\|pipeline-viewer" src/ --include="*.cs" --include="*.razor" || echo "No references remain"

Expected: "No references remain"

Step 3: Run tests

dotnet test

Expected: All tests pass.


Task 9: Commit

Step 1: Stage all changes

git add -A

Step 2: Commit

git commit -m "$(cat <<'EOF'
refactor(webui): remove pipeline viewer feature

Remove the read-only pipeline viewer from the web UI:
- Delete PipelineViewer.razor page and supporting components
- Delete PipelineController and PipelineMapper from API
- Delete Pipeline DTOs from Core
- Delete PipelineApiClient from Client
- Remove navigation link and DI registrations
- Delete obsolete plan documents

The ConfigManager utility retains pipeline editing capabilities.
EOF
)"

Summary

Task Action Files Affected
1 Delete Blazor components 3 files deleted
2 Remove nav link 1 file modified
3 Remove client service 1 deleted, 1 modified
4 Remove API layer 3 deleted, 1 modified
5 Remove Core DTOs 5 files deleted
6 Remove API routes 1 file modified
7 Delete plan docs 2 files deleted
8 Build and verify -
9 Commit -

Total: 14 files deleted, 4 files modified