4.1 KiB
API Doc Refactor Phase 3 Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Give API document export one immutable request, one async operation owner, an explicit debug-proxy option, and the shared history UI.
Architecture: Capture all JavaFX form values into ApiDocExportRequest on the UI thread, then execute from AsyncOperationController. Inject the debug endpoint into ApiDocGenerator; only the export use case may decide whether to start the local proxy. Adapt existing history rows to HistoryItem without changing persistence.
Tech Stack: Java 17, JavaFX, JUnit 5, Maven.
Global Constraints
- Work only on
codex/plugin-ui-refactorin the existing isolated worktree. - Preserve generated HTML structure and history-file format.
- Do not introduce
new Thread. - File and directory choosers must not enter loading state.
- Local debug proxy is a visible option and defaults to disabled.
- Write and observe a failing test before production behavior.
Task 1: Immutable API export request
Files:
- Create:
src/main/java/com/example/workutils/biz/apidoc/application/ApiDocExportRequest.java - Test:
src/test/java/com/example/workutils/biz/apidoc/application/ApiDocExportRequestTest.java
Interfaces:
-
Produces:
Mode { PATH, FQN, BATCH }. -
Produces validated factories
path,fqn, andbatch. -
Carries debug-proxy opt-in and batch filters.
-
Test mode-specific validation and immutable project-path copying.
-
Observe focused test failure.
-
Implement the minimal request record.
-
Confirm focused test passes.
Task 2: Explicit debug endpoint injection
Files:
- Modify:
src/main/java/com/example/workutils/biz/apidoc/generator/ApiDocGenerator.java - Test:
src/test/java/com/example/workutils/biz/apidoc/generator/ApiDocGeneratorProxyTest.java
Interfaces:
-
Produces constructor
ApiDocGenerator(WorkUtilsProperties, Supplier<String>). -
Existing constructor supplies an empty endpoint and never starts a proxy.
-
Test that generated HTML receives the supplied endpoint and the default constructor does not instantiate the proxy.
-
Observe focused test failure.
-
Inject endpoint supplier and remove
DubboDebugProxy.getInstance()from HTML rendering. -
Confirm focused test passes.
Task 3: Single async export operation
Files:
- Create:
src/main/java/com/example/workutils/biz/apidoc/application/RunApiDocExportUseCase.java - Modify:
src/main/java/com/example/workutils/biz/apidoc/ApiDocWindow.java - Test:
src/test/java/com/example/workutils/biz/apidoc/application/RunApiDocExportUseCaseTest.java
Interfaces:
-
Consumes
ApiDocExportRequest. -
Produces
Result(Path output, int moduleCount, int classCount, int methodCount). -
Reports progress through
OperationContext. -
Test proxy-disabled execution does not resolve a local endpoint and proxy-enabled execution resolves it once.
-
Observe focused test failure.
-
Move export orchestration behind the use case and connect it to
AsyncOperationController. -
Bind the button through
LoadingButtonBinderand status throughOperationStatusPane. -
Confirm focused and existing tests pass.
Task 4: Shared history UI
Files:
- Modify:
src/main/java/com/example/workutils/biz/apidoc/ApiDocWindow.java - Test:
src/test/java/com/example/workutils/biz/apidoc/ApiDocHistoryMappingTest.java
Interfaces:
-
Produces package-visible
toHistoryItem(HistoryRow). -
Consumes
ExportHistoryPaneandHistoryFileCommands. -
Test history mapping.
-
Observe focused test failure.
-
Replace duplicated table and action cell.
-
Confirm focused test passes.
Task 5: Verification
- Run all tests.
- Compile with JDK 17.
- Run
git diff --check. - Confirm
ApiDocWindowcontains nonew Thread,buildActionCell, or direct export-button state mutations. - Inspect PATH, FQN, and BATCH panels without invoking export or file choosers.