8.4 KiB
LocalG2-Only PathSmoothing Reorganization Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use
superpowers:subagent-driven-developmentorsuperpowers:executing-plansto execute this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.
Goal: Convert PathSmoothing into a LocalG2-only module, remove the three legacy smoothing algorithms, preserve LocalG2 visualization and fixture workflows, and organize the source tree and README using the established CoarsePath module pattern.
Architecture: The production facade always runs the LocalG2 pipeline. Shared path preparation and validation remain intact; B-spline, local Bezier, and piecewise quintic implementations and their configuration are removed. Offline reports remain a factual comparison of raw coarse path versus LocalG2 only, with visualization sources placed below an Output layer like CoarsePath.
Tech Stack: C# 10, .NET SDK, Newtonsoft.Json, existing System.Drawing/StbImageWriteSharp report exporter, PowerShell verification hosts.
Global Constraints
- Do not read, search, enumerate, copy, modify, delete, stage, or commit
ClumsyPilot/ParkrobTrajplanner/auto_avoidance; do not enumerateClumsyPilot/ParkrobTrajplanneras a parent. - Preserve LocalG2 candidate construction, validation, publication statuses, fixture data, diagnostic candidate visualization, and generated report artifacts below
ClumsyPilot/obj/path_smoothing_reports. - Remove all production references to
CubicBSpline,LocalCubicBezier, andPiecewiseQuinticsmoothing. - Retain the raw-path baseline in reports. Normal reports must contain only raw and LocalG2 series and four figures; diagnostic reports may append the already-rejected LocalG2 candidate as a fifth figure.
- Maintain current default
MinimumClearanceReserveMeters = 0d. - Do not delete unrelated user work or generated report directories.
Task 1: Establish a LocalG2-only verification contract
Files:
- Modify:
ClumsyPilot/tests/verify_path_smoothing_comparison.ps1 - Modify:
ClumsyPilot/tests/verify_path_smoothing_svg_csv.ps1 - Modify:
ClumsyPilot/tests/PathSmoothingPngVerificationHost/Program.cs
Interfaces:
-
The comparison request exposes exactly one requested method:
SmoothingMethod.LocalG2Quintic. -
A normal report has a raw baseline plus one LocalG2 row/series; the diagnostic report retains its optional rejected candidate figure.
-
Add failing assertions that reject the three removed enum names, require one requested comparison method, require two normal figure series, and require exactly two CSV rows after the header.
-
Run the focused PowerShell checks and confirm they fail against the four-algorithm implementation.
-
Update host assertions for the new two-series normal report while retaining the seven-file diagnostic contract.
-
Re-run the focused checks after Tasks 2 and 3 and record the exit codes.
Task 2: Remove legacy algorithms and simplify the production facade
Files:
- Delete:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Algorithms/ - Delete:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Contracts/CubicBSplineOptions.cs - Delete:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Contracts/LocalCubicBezierOptions.cs - Delete:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Contracts/PiecewiseQuinticOptions.cs - Modify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Contracts/SmoothingMethod.cs - Modify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Contracts/PathSmoothingConfiguration.cs - Modify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Contracts/PathSmoothingRequest.cs - Modify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Contracts/PathSmoothingResult.cs - Modify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Facade/PathSmoothingService.cs
Interfaces:
-
SmoothingMethodretains onlyLocalG2Quintic. -
PathSmoothingConfigurationdefaultsMethodtoLocalG2Quinticand exposes only shared safety/sampling fields andLocalG2Quinticoptions. -
PathSmoothingService.Smooth(request, cancellationToken)directly validates/prepares/builds the raw baseline and invokesLocalG2PreSmoothingPipeline. -
Delete legacy source files only after their callers are removed.
-
Remove legacy smoothness/retry configuration and cloning code; preserve output spacing, collision step, clearance reserve, and LocalG2 options.
-
Replace the multi-method resolver and fallback path in
PathSmoothingServicewith its LocalG2-only route. -
Compile the isolated PathSmoothing host and confirm no source references to the removed methods remain in allowed paths.
Task 3: Reorganize report sources into an Output layer and reduce the report model
Files:
- Move:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Comparison/toClumsyPilot/ParkrobTrajplanner/PathSmoothing/Output/Comparison/ - Move:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Visualization/toClumsyPilot/ParkrobTrajplanner/PathSmoothing/Output/Visualization/ - Delete:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Output/Comparison/SmoothingMethodRanker.cs - Modify: moved comparison request/result/service consumers and all moved visualization files.
Interfaces:
-
PathSmoothingComparisonRequestowns one immutable LocalG2 request rather than a caller-selectable method list. -
PathSmoothingComparisonResultcontains a raw baseline and exactly one LocalG2 entry. -
Normal figure and CSV builders emit
RawPathandLocalG2Quinticonly. -
Move source directories with their namespaces changed from
PathSmoothing.ComparisonandPathSmoothing.VisualizationtoPathSmoothing.Output.ComparisonandPathSmoothing.Output.Visualization. -
Simplify comparison execution to warm up and measure LocalG2 only; retain deterministic timing/digest behavior for its sole entry.
-
Remove visual style colors, legend rows, labels, metric rows, and all source references for the three deleted algorithms.
-
Publish four normal figures with stable stems
01-coarse-path-overview,02-all-paths-comparison,03-local-g2-overview, and04-curvature-comparison; append05-local-g2-diagnostic-candidateonly to an augmented diagnostic model. -
Update all allowed source/test imports to the new
Outputnamespaces.
Task 4: Align test/demo entry points and document the module
Files:
- Modify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Test/PathSmoothingComparisonDemo.cs - Modify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Test/SmoothingScenarioFactory.cs - Modify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/Test/LocalG2DiagnosticVisualizationDemo.cs - Create:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/README.md
Interfaces:
-
Fixture reports use the LocalG2-only comparison request and retain all eight fixtures.
-
The README mirrors the
CoarsePath/README.mdinformation architecture for LocalG2 inputs, safety gates, result statuses, report output, and known limitations. -
Update test/demo imports and expected report shapes for the Output namespaces and LocalG2-only model.
-
Create
README.mdwith the following ordered sections: Module Overview, File Structure, Smoothing Data Flow, Result Status and Publication Rules, Coordinates and Units, Minimal Call Example, Detailed Usage Guide, Fixture Reports and Visualization, Common Errors, and First-Version Limits. -
State explicitly that a candidate passing collision validation may still be retained when its quality gate fails, and that
0 mreserve removes only the additional clearance reserve, not collision or curvature checks.
Task 5: Verify source layout and retain visualization artifacts
Files:
-
Verify:
ClumsyPilot/ParkrobTrajplanner/PathSmoothing/ -
Verify:
ClumsyPilot/obj/path_smoothing_reports/ -
Build and run the isolated current-source LocalG2 visualization host against all eight fixture scenarios.
-
Confirm all normal report directories contain the expected four PNG/SVG figures and CSV, and that
02-all-paths-comparison.pngpresents raw plus LocalG2 only. -
Run the focused comparison/SVG/diagnostic verification scripts where their dependencies are available; report any root-build limitation separately.
-
Inspect at least the
single-turnnormal report and05-local-g2-diagnostic-candidate.pngto confirm LocalG2 labels, nonblank rendering, and retained diagnostic semantics. -
Update
.superpowers/sdd/progress.mdwith the actual cleanup results and verification evidence.