mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
chore: commit unstaged workspace changes
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
---
|
||||
id: TASK-94
|
||||
title: Fix Kiku duplicate detection for Yomitan-marked duplicates
|
||||
status: Done
|
||||
assignee:
|
||||
- codex-duplicate-kiku-20260221T043006Z-5vkz
|
||||
created_date: '2026-02-21 04:33'
|
||||
updated_date: '2026-02-21 01:40'
|
||||
labels:
|
||||
- bug
|
||||
- anki
|
||||
- kiku
|
||||
dependencies: []
|
||||
priority: high
|
||||
ordinal: 65000
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||
Kiku field grouping no longer detects duplicate cards in scenarios where the mined card is clearly marked duplicate by Yomitan/N+1 workflow. Restore duplicate detection so duplicate note lookup succeeds for equivalent expression/word cards and Kiku grouping can run.
|
||||
<!-- SECTION:DESCRIPTION:END -->
|
||||
|
||||
## Acceptance Criteria
|
||||
<!-- AC:BEGIN -->
|
||||
- [x] #1 Repro case covered by automated regression test in duplicate-detection path.
|
||||
- [x] #2 Kiku duplicate detection returns duplicate note id for the repro case.
|
||||
- [x] #3 Targeted tests for duplicate detection pass.
|
||||
<!-- AC:END -->
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
<!-- SECTION:NOTES:BEGIN -->
|
||||
Added regression test `src/anki-integration/duplicate.test.ts` for a cross-field duplicate case where current note uses `Expression` and candidate uses `Word` with same value.
|
||||
|
||||
Updated duplicate matching in `src/anki-integration/duplicate.ts` to try alternate field-name aliases (`word` <-> `expression`) when resolving candidate note fields for exact-value verification.
|
||||
|
||||
Follow-up fix: duplicate search query now also probes alias fields (`word` <-> `expression`) and merges candidate note ids before exact verification, so duplicates are still found when only the alias field is indexed/populated on existing cards.
|
||||
|
||||
Second follow-up fix: duplicate detection now evaluates both source values when current note contains both `Expression` and `Word` (previously only one was used, depending on field-order). Query and exact verification now run against all source duplicate candidates.
|
||||
|
||||
Third follow-up fix: if deck-scoped duplicate queries return no results, detection now retries the same source/alias query set collection-wide (no deck filter) before exact verification. This aligns with cases where Yomitan shows duplicates outside the configured mining deck.
|
||||
|
||||
Fourth follow-up fix: if field-specific queries miss entirely, detection now falls back to phrase/plain-text queries (deck-scoped then collection-wide) and still requires exact `Expression/Word` value verification before selecting a duplicate note.
|
||||
|
||||
Fifth follow-up: added explicit duplicate-search debug logs (query strings, hit counts, candidate counts, exact-match note id) to improve runtime diagnosis in live launcher runs.
|
||||
|
||||
Verification:
|
||||
- `bun run build`
|
||||
- `node dist/anki-integration/duplicate.test.js`
|
||||
- `node --test dist/anki-integration.test.js`
|
||||
<!-- SECTION:NOTES:END -->
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
id: TASK-96
|
||||
title: Decouple secondary subtitle lifecycle from visible/invisible overlays
|
||||
status: To Do
|
||||
assignee: []
|
||||
created_date: '2026-02-21 04:41'
|
||||
updated_date: '2026-02-21 04:41'
|
||||
labels:
|
||||
- subtitles
|
||||
- overlay
|
||||
- architecture
|
||||
dependencies: []
|
||||
priority: high
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||
Secondary subtitle behavior should not depend on visible/invisible overlay state transitions. Introduce an independent lifecycle so secondary subtitle rendering, visibility mode (`always`/`hover`/`never`), and positioning stay stable even when primary overlays are toggled or rebound.
|
||||
<!-- SECTION:DESCRIPTION:END -->
|
||||
|
||||
## Suggestions
|
||||
|
||||
<!-- SECTION:SUGGESTIONS:BEGIN -->
|
||||
- Isolate secondary subtitle state management from primary overlay window orchestration.
|
||||
- Route secondary subtitle updates through a dedicated service/controller boundary.
|
||||
- Keep MPV secondary subtitle property handling independent from overlay visibility toggles.
|
||||
<!-- SECTION:SUGGESTIONS:END -->
|
||||
|
||||
## Action Steps
|
||||
|
||||
<!-- SECTION:PLAN:BEGIN -->
|
||||
1. Inventory existing coupling points between secondary subtitle updates and overlay visibility/bounds services.
|
||||
2. Introduce explicit secondary subtitle lifecycle state and transitions.
|
||||
3. Refactor event wiring so visible/invisible overlay toggles do not mutate secondary subtitle state.
|
||||
4. Validate display modes (`always`/`hover`/`never`) continue to work with independent lifecycle.
|
||||
5. Add regression tests for overlay toggles, reconnect/restart, and mode-switch behavior.
|
||||
<!-- SECTION:PLAN:END -->
|
||||
|
||||
## Acceptance Criteria
|
||||
<!-- AC:BEGIN -->
|
||||
- [ ] #1 Toggling visible or invisible overlays does not alter secondary subtitle lifecycle state.
|
||||
- [ ] #2 Secondary subtitle display mode behavior remains correct across overlay state transitions.
|
||||
- [ ] #3 Secondary subtitle behavior survives MPV reconnect/restart without overlay-coupling regressions.
|
||||
- [ ] #4 Automated tests cover decoupled lifecycle behavior and prevent re-coupling.
|
||||
<!-- AC:END -->
|
||||
|
||||
## Definition of Done
|
||||
<!-- DOD:BEGIN -->
|
||||
- [ ] #1 Relevant unit/integration tests pass
|
||||
- [ ] #2 Documentation/comments updated where lifecycle ownership changed
|
||||
<!-- DOD:END -->
|
||||
52
backlog/tasks/task-97 - Add-intro-skip-playback-control.md
Normal file
52
backlog/tasks/task-97 - Add-intro-skip-playback-control.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
id: TASK-97
|
||||
title: Add intro skip playback control
|
||||
status: To Do
|
||||
assignee: []
|
||||
created_date: '2026-02-21 04:41'
|
||||
updated_date: '2026-02-21 04:41'
|
||||
labels:
|
||||
- playback
|
||||
- ux
|
||||
dependencies: []
|
||||
priority: medium
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||
Add an intro skip control so users can jump past opening sequences quickly during playback. Start with a reliable manual control (shortcut/action) and clear user feedback after seek.
|
||||
<!-- SECTION:DESCRIPTION:END -->
|
||||
|
||||
## Suggestions
|
||||
|
||||
<!-- SECTION:SUGGESTIONS:BEGIN -->
|
||||
- Add a configurable skip duration (for example 60/75/90 seconds).
|
||||
- Expose skip intro via keybinding and optional UI action in overlay/help.
|
||||
- Show transient confirmation (OSD/overlay message) after skip action.
|
||||
<!-- SECTION:SUGGESTIONS:END -->
|
||||
|
||||
## Action Steps
|
||||
|
||||
<!-- SECTION:PLAN:BEGIN -->
|
||||
1. Define config and keybinding surface for intro skip duration and trigger.
|
||||
2. Implement intro skip command that performs bounded seek in active playback session.
|
||||
3. Wire command to user trigger path (keyboard + optional on-screen action if present).
|
||||
4. Emit user feedback after successful skip (current time + skipped duration).
|
||||
5. Add tests for command dispatch, seek bounds, and config fallback behavior.
|
||||
<!-- SECTION:PLAN:END -->
|
||||
|
||||
## Acceptance Criteria
|
||||
<!-- AC:BEGIN -->
|
||||
- [ ] #1 User can trigger intro skip during playback with configured shortcut/action.
|
||||
- [ ] #2 Skip performs bounded seek and never seeks before start or beyond stream duration.
|
||||
- [ ] #3 Skip duration is configurable with sane default.
|
||||
- [ ] #4 User receives visible confirmation after skip.
|
||||
- [ ] #5 Automated tests cover config + seek behavior.
|
||||
<!-- AC:END -->
|
||||
|
||||
## Definition of Done
|
||||
<!-- DOD:BEGIN -->
|
||||
- [ ] #1 Playback control tests pass
|
||||
- [ ] #2 User-facing config/docs updated for intro skip control
|
||||
<!-- DOD:END -->
|
||||
Reference in New Issue
Block a user