chore(workflow): sync backlog state and subagent coordination

Capture backlog task lifecycle updates, archive TASK-34, and add planning artifacts for recent config work. Update docs sweep scripts and AGENTS guidance to use sharded docs/subagents coordination metadata.
This commit is contained in:
2026-02-19 00:49:23 -08:00
parent 9e6d039a32
commit 9384d67b8e
14 changed files with 466 additions and 157 deletions

View File

@@ -5,7 +5,6 @@
* Copy to $XDG_CONFIG_HOME/SubMiner/config.jsonc (or ~/.config/SubMiner/config.jsonc) and edit as needed.
*/
{
// ==========================================
// Overlay Auto-Start
// When overlay connects to mpv, automatically show overlay and hide mpv subtitles.
@@ -24,7 +23,7 @@
// Control whether browser opens automatically for texthooker.
// ==========================================
"texthooker": {
"openBrowser": true
"openBrowser": true,
},
// ==========================================
@@ -34,7 +33,7 @@
// ==========================================
"websocket": {
"enabled": "auto",
"port": 6677
"port": 6677,
},
// ==========================================
@@ -43,7 +42,7 @@
// Set to debug for full runtime diagnostics.
// ==========================================
"logging": {
"level": "info"
"level": "info",
},
// ==========================================
@@ -56,15 +55,13 @@
"enabled": false,
"url": "http://127.0.0.1:8765",
"pollingRate": 3000,
"tags": [
"SubMiner"
],
"tags": ["SubMiner"],
"fields": {
"audio": "ExpressionAudio",
"image": "Picture",
"sentence": "Sentence",
"miscInfo": "MiscInfo",
"translation": "SelectionText"
"translation": "SelectionText",
},
"ai": {
"enabled": false,
@@ -73,7 +70,7 @@
"model": "openai/gpt-4o-mini",
"baseUrl": "https://openrouter.ai/api",
"targetLanguage": "English",
"systemPrompt": "You are a translation engine. Return only the translated text with no explanations."
"systemPrompt": "You are a translation engine. Return only the translated text with no explanations.",
},
"media": {
"generateAudio": true,
@@ -86,7 +83,7 @@
"animatedCrf": 35,
"audioPadding": 0.5,
"fallbackDuration": 3,
"maxMediaDuration": 30
"maxMediaDuration": 30,
},
"behavior": {
"overwriteAudio": true,
@@ -94,7 +91,7 @@
"mediaInsertMode": "append",
"highlightWord": true,
"notificationType": "osd",
"autoUpdateNewCards": true
"autoUpdateNewCards": true,
},
"nPlusOne": {
"highlightEnabled": false,
@@ -103,22 +100,20 @@
"decks": [],
"minSentenceWords": 3,
"nPlusOne": "#c6a0f6",
"knownWord": "#a6da95"
"knownWord": "#a6da95",
},
"metadata": {
"pattern": "[SubMiner] %f (%t)"
"pattern": "[SubMiner] %f (%t)",
},
"isLapis": {
"enabled": false,
"sentenceCardModel": "Japanese sentences",
"sentenceCardSentenceField": "Sentence",
"sentenceCardAudioField": "SentenceAudio"
},
"isKiku": {
"enabled": false,
"fieldGrouping": "disabled",
"deleteDuplicateInAuto": true
}
"deleteDuplicateInAuto": true,
},
},
// ==========================================
@@ -142,7 +137,7 @@
"toggleSecondarySub": "CommandOrControl+Shift+V",
"markAudioCard": "CommandOrControl+Shift+A",
"openRuntimeOptions": "CommandOrControl+Shift+O",
"openJimaku": "Ctrl+Shift+J"
"openJimaku": "Ctrl+Shift+J",
},
// ==========================================
@@ -152,7 +147,7 @@
// This edit-mode shortcut is fixed and is not currently configurable.
// ==========================================
"invisibleOverlay": {
"startupVisibility": "platform-default"
"startupVisibility": "platform-default",
},
// ==========================================
@@ -183,7 +178,7 @@
"N2": "#f5a97f",
"N3": "#f9e2af",
"N4": "#a6e3a1",
"N5": "#8aadf4"
"N5": "#8aadf4",
},
"frequencyDictionary": {
"enabled": false,
@@ -191,13 +186,7 @@
"topX": 1000,
"mode": "single",
"singleColor": "#f5a97f",
"bandedColors": [
"#ed8796",
"#f5a97f",
"#f9e2af",
"#a6e3a1",
"#8aadf4"
]
"bandedColors": ["#ed8796", "#f5a97f", "#f9e2af", "#a6e3a1", "#8aadf4"],
},
"secondary": {
"fontSize": 24,
@@ -205,8 +194,8 @@
"backgroundColor": "transparent",
"fontWeight": "normal",
"fontStyle": "normal",
"fontFamily": "Noto Sans CJK JP Regular, Noto Sans CJK JP, Arial Unicode MS, Arial, sans-serif"
}
"fontFamily": "Noto Sans CJK JP Regular, Noto Sans CJK JP, Arial Unicode MS, Arial, sans-serif",
},
},
// ==========================================
@@ -218,7 +207,7 @@
"secondarySub": {
"secondarySubLanguages": [],
"autoLoadSecondarySub": false,
"defaultMode": "hover"
"defaultMode": "hover",
},
// ==========================================
@@ -229,7 +218,7 @@
"defaultMode": "auto",
"alass_path": "",
"ffsubsync_path": "",
"ffmpeg_path": ""
"ffmpeg_path": "",
},
// ==========================================
@@ -237,7 +226,7 @@
// Initial vertical subtitle position from the bottom.
// ==========================================
"subtitlePosition": {
"yPercent": 10
"yPercent": 10,
},
// ==========================================
@@ -247,7 +236,7 @@
"jimaku": {
"apiBaseUrl": "https://jimaku.cc",
"languagePreference": "ja",
"maxEntryResults": 10
"maxEntryResults": 10,
},
// ==========================================
@@ -258,10 +247,7 @@
"mode": "automatic",
"whisperBin": "",
"whisperModel": "",
"primarySubLanguages": [
"ja",
"jpn"
]
"primarySubLanguages": ["ja", "jpn"],
},
// ==========================================
@@ -270,7 +256,7 @@
// ==========================================
"anilist": {
"enabled": false,
"accessToken": ""
"accessToken": "",
},
// ==========================================
@@ -295,16 +281,8 @@
"pullPictures": false,
"iconCacheDir": "/tmp/subminer-jellyfin-icons",
"directPlayPreferred": true,
"directPlayContainers": [
"mkv",
"mp4",
"webm",
"mov",
"flac",
"mp3",
"aac"
],
"transcodeVideoCodec": "h264"
"directPlayContainers": ["mkv", "mp4", "webm", "mov", "flac", "mp3", "aac"],
"transcodeVideoCodec": "h264",
},
// ==========================================
@@ -326,7 +304,7 @@
"telemetryDays": 30,
"dailyRollupsDays": 365,
"monthlyRollupsDays": 1825,
"vacuumIntervalDays": 7
}
}
"vacuumIntervalDays": 7,
},
},
}

7
docs/subagents/INDEX.md Normal file
View File

@@ -0,0 +1,7 @@
# Subagents Index
Read first. Keep concise.
| agent_id | alias | mission | status | file | last_update_utc |
| ------------ | -------------- | -------------------------------------------- | --------- | ------------------------------------- | ---------------------- |
| `codex-main` | `planner-exec` | `Track config-gated keybinding task request` | `handoff` | `docs/subagents/agents/codex-main.md` | `2026-02-19T08:41:44Z` |

View File

@@ -0,0 +1,27 @@
# Agent: <agent_id>
- alias: <short label>
- mission: <one-line focus>
- status: <planning|editing|testing|blocked|handoff|done>
- branch: <name>
- started_at: <UTC ISO>
- heartbeat_minutes: <n>
## Current Work (newest first)
- [YYYY-MM-DDTHH:MM:SSZ] intent: ...
- [YYYY-MM-DDTHH:MM:SSZ] progress: ...
- [YYYY-MM-DDTHH:MM:SSZ] test: ...
- [YYYY-MM-DDTHH:MM:SSZ] handoff: ...
## Files Touched
- `path/to/file`
- `path/to/another`
## Assumptions
- ...
## Open Questions / Blockers
- ...
## Next Step
- ...

View File

@@ -0,0 +1,64 @@
# Agent: codex-main
- alias: planner-exec
- mission: Track config-gated keybinding task request
- status: handoff
- branch: main
- started_at: 2026-02-19T08:06:28Z
- heartbeat_minutes: 20
## Current Work (newest first)
- [2026-02-19T08:41:44Z] handoff: created backlog TASK-84 for config-gated keybindings + disabled-feature integration non-loading (Jellyfin example) with tests/docs acceptance criteria.
- [2026-02-19T08:41:22Z] intent: create backlog task for config-gated keybindings so disabled features become no-ops and feature modules (example: Jellyfin) are not loaded when disabled.
- [2026-02-19T08:40:53Z] handoff: completed TASK-83 simplification; removed configurable sentence/audio field overrides for Lapis sentence cards and verified.
- [2026-02-19T08:40:53Z] test: `bun run build && bun run test:config:dist` -> pass (33/33).
- [2026-02-19T08:38:30Z] intent: implement TASK-83 to remove `isLapis.sentenceCardSentenceField` + `isLapis.sentenceCardAudioField` from config/types/docs and force fixed `Sentence`/`SentenceAudio` in integration.
- [2026-02-19T08:27:23Z] handoff: completed TASK-69 implementation + verification; backlog TASK-69 set Done with AC/DoD checked.
- [2026-02-19T08:27:23Z] test: `bun run build && bun run test:config:dist` -> pass (32/32).
- [2026-02-19T08:27:23Z] progress: hardened legacy ankiConnect migration mapping with validators + warnings in `src/config/service.ts`; added invalid/valid legacy regression tests in `src/config/config.test.ts`; updated migration doc note in `docs/configuration.md`.
- [2026-02-19T08:23:30Z] intent: user approved TASK-69 plan; start implementation (tests first, then validated legacy mapping, then verify + backlog updates).
- [2026-02-19T08:21:11Z] handoff: completed TASK-38 implementation + verification; updated Backlog acceptance checks and notes.
- [2026-02-19T08:21:11Z] test: `bun run build && node --test dist/config/config.test.js dist/core/services/app-ready.test.js` -> pass (39/39).
- [2026-02-19T08:21:11Z] progress: wired strict startup parse failure handling + warning summary + critical validation dialog path in `src/main.ts` and threaded new app-ready dependency in `src/main/app-lifecycle.ts`.
- [2026-02-19T08:20:00Z] intent: read TASK-69 details, write end-to-end implementation plan via writing-plans skill, then execute via executing-plans skill with parallel subagents where possible.
- [2026-02-19T08:18:47Z] progress: implemented unknown top-level config warning + `ankiConnect.openRouter` deprecation warning; added coverage in `src/config/config.test.ts`; verification passed (`bun run build && node --test dist/config/config.test.js`).
- [2026-02-19T08:10:40Z] intent: implement TASK-38 plan Task 1 scope (`src/config/service.ts`, `src/config/config.test.ts`) for unknown top-level key warnings + `ankiConnect.openRouter` deprecation warning, then run required build+test command.
- [2026-02-19T08:09:46Z] progress: wrote plan `docs/plans/2026-02-19-task-38-config-validation-startup.md`, set TASK-38 In Progress, and stored plan in Backlog.
- [2026-02-19T08:06:28Z] intent: read backlog/task context, draft implementation plan for TASK-38, then execute with parallel subagents where possible.
## Files Touched
- `docs/subagents/INDEX.md`
- `docs/subagents/agents/codex-main.md`
- `backlog/tasks/task-84 - Gate-feature-dependent-keybindings-behind-config-flags.md`
- `src/config/service.ts`
- `src/config/config.test.ts`
- `src/core/services/startup.ts`
- `src/core/services/app-ready.test.ts`
- `src/main.ts`
- `src/main/app-lifecycle.ts`
- `docs/plans/2026-02-19-task-38-config-validation-startup.md`
- `docs/plans/2026-02-19-task-69-legacy-config-migration-hardening.md`
- `docs/configuration.md`
- `src/types.ts`
- `src/config/definitions.ts`
- `src/anki-integration.ts`
- `config.example.jsonc`
- `docs/public/config.example.jsonc`
- `docs/anki-integration.md`
- `docs/mining-workflow.md`
- `backlog/tasks/task-83 - Simplify-isLapis-sentence-card-field-config-to-fixed-field-names.md`
- `backlog/tasks/task-38 - Add-user-friendly-config-validation-errors-on-startup.md`
## Assumptions
- AGENT_ID/AGENT_ALIAS env vars are unset; using stable fallback `codex-main` / `planner-exec` for this run.
## Open Questions / Blockers
- none
## Next Step
- Await user prioritization / implementation request for TASK-84.

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,6 @@
# Subagents Collaboration
Shared notes. Append-only.
- [YYYY-MM-DDTHH:MM:SSZ] [agent_id|alias] note, question, dependency, conflict, decision.
- [2026-02-19T08:21:11Z] [codex-main|planner-exec] conflict note: `docs/subagents/INDEX.md` and `docs/subagents/agents/codex-main.md` were externally updated to TASK-69 while TASK-38 work was in-flight; reconciled own row/file back to TASK-38 handoff state.