7.1 KiB
Market Export Range 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: Add configurable CSV export ranges for the Xingtu market plugin, defaulting to the first 5 pages and supporting current page, preset ranges, all pages, and custom page counts.
Architecture: Keep filter and sort scoped to the current page, and introduce a dedicated batch-export path that only runs when exporting. Extend the toolbar with export-range controls, extract page-navigation/signature helpers, and add a focused controller that iterates pages, harvests lazy-loaded DOM fields, merges records by authorId, and returns a single record set for CSV generation.
Tech Stack: TypeScript, Vitest, jsdom, Chrome MV3 content script
Task 1: Extend Toolbar Controls For Export Range
Files:
-
Modify:
src/content/market/plugin-toolbar.ts -
Test:
tests/market-content-entry.test.ts -
Step 1: Write the failing tests
Add tests that assert:
-
the toolbar defaults to
前5页 -
selecting
自定义shows and uses a page-count input -
invalid custom values prevent export
-
export mode disables toolbar controls during a running task
-
Step 2: Run tests to verify they fail
Run: npm test -- tests/market-content-entry.test.ts -t "export range"
Expected: FAIL because the toolbar has no range selector or custom input behavior.
- Step 3: Write the minimal implementation
Update plugin-toolbar.ts to:
-
add an export-range
<select> -
add a custom page-count
<input> -
add status text support
-
expose helpers for reading range state and toggling disabled/running UI
-
Step 4: Run tests to verify they pass
Run: npm test -- tests/market-content-entry.test.ts -t "export range"
Expected: PASS
- Step 5: Commit
git add src/content/market/plugin-toolbar.ts tests/market-content-entry.test.ts
git commit -m "feat: add export range toolbar controls"
Task 2: Add Batch Export Coverage
Files:
-
Modify:
tests/market-content-entry.test.ts -
Modify:
tests/market-dom-sync.test.ts -
Test:
tests/market-content-entry.test.ts -
Step 1: Write the failing tests
Add tests that assert:
-
当前页exports only the current page -
前5页iterates through pages until it reaches page 5 or runs out of pages -
全部stops when the next-page control is no longer usable -
repeated authors across pages are merged by
authorId -
empty fields from later pages do not erase existing populated fields
-
page export waits for page signature change before harvesting the next page
-
Step 2: Run tests to verify they fail
Run: npm test -- tests/market-content-entry.test.ts
Expected: FAIL on the new batch-export expectations.
- Step 3: Write the minimal implementation scaffolding
Only introduce the minimum new helpers/types needed to make the tests compile:
-
export range type(s)
-
page signature helpers
-
harness utilities in tests
-
Step 4: Run tests to verify the failures are now behavioral
Run: npm test -- tests/market-content-entry.test.ts
Expected: FAIL because batch export logic is still missing, not because types/selectors are missing.
- Step 5: Commit
git add tests/market-content-entry.test.ts tests/market-dom-sync.test.ts src/content/market/types.ts
git commit -m "test: cover multi-page export behavior"
Task 3: Implement Batch Export Controller
Files:
-
Create:
src/content/market/export-range-controller.ts -
Modify:
src/content/market/types.ts -
Modify:
src/content/market/dom-sync.ts -
Modify:
src/content/market/result-store.ts -
Test:
tests/market-content-entry.test.ts -
Test:
tests/market-dom-sync.test.ts -
Step 1: Write the failing tests
Add focused tests for:
-
reading a page signature from current DOM
-
detecting/using the next-page control
-
merging rows by
authorIdwith non-empty-field preference -
Step 2: Run tests to verify they fail
Run: npm test -- tests/market-dom-sync.test.ts
Expected: FAIL because these helpers/controller do not exist yet.
- Step 3: Write the minimal implementation
Implement export-range-controller.ts to:
- normalize export targets (
current,count,all) - harvest current page rows with the existing lazy-load scroll path
- read page signatures
- click/advance pagination and wait for signature change
- merge pages by
authorIdwithout overwriting non-empty fields - return a final
MarketRecord[]
Keep dom-sync.ts focused on DOM reads:
-
page signature
-
next-page element lookup
-
next-page enabled check
-
Step 4: Run tests to verify they pass
Run:
-
npm test -- tests/market-dom-sync.test.ts -
npm test -- tests/market-content-entry.test.tsExpected: PASS -
Step 5: Commit
git add src/content/market/export-range-controller.ts src/content/market/dom-sync.ts src/content/market/result-store.ts src/content/market/types.ts tests/market-content-entry.test.ts tests/market-dom-sync.test.ts
git commit -m "feat: add multi-page export controller"
Task 4: Wire Controller Into Market Entry
Files:
-
Modify:
src/content/market/index.ts -
Modify:
src/content/market/plugin-toolbar.ts -
Test:
tests/market-content-entry.test.ts -
Step 1: Write the failing tests
Add tests that assert:
-
导出CSVuses the selected range -
progress text updates while exporting
-
controls are re-enabled on success and failure
-
invalid custom input blocks export without calling CSV builder
-
Step 2: Run tests to verify they fail
Run: npm test -- tests/market-content-entry.test.ts
Expected: FAIL because market/index.ts still always exports current-page records.
- Step 3: Write the minimal implementation
Update market/index.ts to:
-
parse toolbar export range
-
keep current-page export for
当前页 -
delegate batch modes to
export-range-controller.ts -
update toolbar running/error/progress state
-
preserve existing current-page lazy-load harvest path
-
Step 4: Run tests to verify they pass
Run: npm test -- tests/market-content-entry.test.ts
Expected: PASS
- Step 5: Commit
git add src/content/market/index.ts src/content/market/plugin-toolbar.ts tests/market-content-entry.test.ts
git commit -m "feat: wire export range selection into market export"
Task 5: Verify End-To-End
Files:
-
Modify:
docs/superpowers/plans/2026-04-21-market-export-range.md -
Step 1: Run targeted regression tests
Run:
npm test -- tests/market-content-entry.test.tsnpm test -- tests/market-dom-sync.test.ts
Expected: PASS
- Step 2: Run the full suite
Run: npm test
Expected: PASS with all test files green.
- Step 3: Run the build
Run: npm run build
Expected: PASS and emit updated dist/ bundles.
- Step 4: Mark the plan status
Update this document’s checkboxes to reflect completed steps.
- Step 5: Commit
git add docs/superpowers/plans/2026-04-21-market-export-range.md
git commit -m "docs: record export range implementation progress"