mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
Split note-update and field-grouping orchestration out of AnkiIntegration so the facade remains focused on composition and shared policy wiring. This keeps mining behavior stable while creating focused workflow seams with dedicated regression coverage and clearer ownership docs.
81 lines
3.6 KiB
Markdown
81 lines
3.6 KiB
Markdown
---
|
|
id: TASK-76
|
|
title: Decompose anki-integration orchestrator into workflow services
|
|
status: Done
|
|
assignee: []
|
|
created_date: '2026-02-18 11:43'
|
|
updated_date: '2026-02-21 21:16'
|
|
labels:
|
|
- anki
|
|
- refactor
|
|
- maintainability
|
|
dependencies:
|
|
- TASK-57
|
|
priority: high
|
|
---
|
|
|
|
## Description
|
|
|
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
|
`src/anki-integration.ts` remains a large orchestration hotspot after earlier splits. This task executes decomposition work (beyond evaluation) by extracting cohesive workflows and narrowing the central orchestrator to composition + policy decisions.
|
|
<!-- SECTION:DESCRIPTION:END -->
|
|
|
|
## Suggestions
|
|
|
|
<!-- SECTION:SUGGESTIONS:BEGIN -->
|
|
- Prefer workflow modules over helper sprawl: `card-update-workflow`, `media-attachment-workflow`, `known-word-sync-workflow`, `field-mapping-workflow`.
|
|
- Keep side-effect adapters explicit (AnkiConnect API, fs/media, notification).
|
|
- Introduce a small façade API from `anki-integration.ts` to preserve callsite stability.
|
|
<!-- SECTION:SUGGESTIONS:END -->
|
|
|
|
## Action Steps
|
|
|
|
<!-- SECTION:PLAN:BEGIN -->
|
|
1. Convert `TASK-57` findings into concrete extraction map with target module ownership.
|
|
2. Extract top two highest-churn workflows first (card creation/update and media attachment).
|
|
3. Move pure mapping/normalization logic to isolated pure modules with unit tests.
|
|
4. Keep backward-compatible public API for existing callsites.
|
|
5. Add regression tests for key mining flows (new card, update existing, audio-card mark, failure handling).
|
|
6. Update `docs/anki-integration.md` with new module boundaries.
|
|
<!-- SECTION:PLAN:END -->
|
|
|
|
## Acceptance Criteria
|
|
<!-- AC:BEGIN -->
|
|
- [x] #1 `src/anki-integration.ts` reduced to orchestration/composition role
|
|
- [x] #2 Extracted workflow modules have focused tests
|
|
- [x] #3 Existing mining behavior remains unchanged in regression tests
|
|
- [x] #4 Documentation updated with ownership boundaries
|
|
<!-- AC:END -->
|
|
|
|
## Implementation Notes
|
|
|
|
<!-- SECTION:NOTES:BEGIN -->
|
|
Execution started via writing-plans + executing-plans workflow.
|
|
|
|
Plan: docs/plans/2026-02-21-task-76-anki-workflow-services-plan.md
|
|
|
|
Baseline LOC (2026-02-21): src/anki-integration.ts=1315; existing anki-integration collaborators total=2271 (src/anki-integration/*.ts excluding facade).
|
|
|
|
Implemented workflow-service decomposition in `src/anki-integration.ts` by extracting `src/anki-integration/note-update-workflow.ts` (new-card update pipeline) and `src/anki-integration/field-grouping-workflow.ts` (auto/manual grouping merge orchestration).
|
|
|
|
Added focused workflow seam tests: `src/anki-integration/note-update-workflow.test.ts` and `src/anki-integration/field-grouping-workflow.test.ts`.
|
|
|
|
Updated ownership boundaries docs in `docs/anki-integration.md` under "Ownership Boundaries (TASK-76)".
|
|
|
|
Verification: `bun run build && node --test dist/anki-integration.test.js dist/anki-integration/note-update-workflow.test.js dist/anki-integration/field-grouping-workflow.test.js` (pass), and `bun run build && bun run test:core:dist` (pass).
|
|
|
|
LOC delta: `src/anki-integration.ts` 1315 -> 1143 (-172 LOC).
|
|
<!-- SECTION:NOTES:END -->
|
|
|
|
## Final Summary
|
|
|
|
<!-- SECTION:FINAL_SUMMARY:BEGIN -->
|
|
Decomposed `AnkiIntegration` into workflow services by extracting note update and field-grouping orchestration into dedicated modules while keeping public APIs stable. Added focused workflow seam tests, documented ownership boundaries, and validated behavior with Anki-focused dist tests plus full `test:core:dist` gate.
|
|
<!-- SECTION:FINAL_SUMMARY:END -->
|
|
|
|
## Definition of Done
|
|
<!-- DOD:BEGIN -->
|
|
- [x] #1 `bun run test:core:dist` passes with Anki-related suites green
|
|
- [x] #2 No callsite API breakage outside planned changes
|
|
<!-- DOD:END -->
|