mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
chore(backlog): capture task planning and subagent handoffs
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Configuration
|
||||
|
||||
Settings are stored in `$XDG_CONFIG_HOME/SubMiner/config.jsonc` (or `~/.config/SubMiner/config.jsonc` when `XDG_CONFIG_HOME` is unset). For backward compatibility, SubMiner also reads existing configs from lowercase `subminer` directories.
|
||||
Settings are stored in `$XDG_CONFIG_HOME/SubMiner/config.jsonc` (or `~/.config/SubMiner/config.jsonc` when `XDG_CONFIG_HOME` is unset).
|
||||
|
||||
## Quick Start
|
||||
|
||||
@@ -41,7 +41,9 @@ SubMiner.AppImage --generate-config --backup-overwrite
|
||||
- `bun run generate:config-example` regenerates both repository `config.example.jsonc` and docs-served `/config.example.jsonc` from the same centralized defaults.
|
||||
- `make generate-config` builds and runs the same default-config generator via local Electron.
|
||||
|
||||
Invalid config values are handled with warn-and-fallback behavior: SubMiner logs the bad key/value and continues with the default for that option.
|
||||
Malformed config syntax (invalid JSON/JSONC) is startup-blocking: SubMiner shows a clear parse error with the config path and asks you to fix the file and restart.
|
||||
|
||||
For valid JSON/JSONC with invalid option values, SubMiner uses warn-and-fallback behavior: it logs the bad key/value and continues with the default for that option.
|
||||
|
||||
### Hot-Reload Behavior
|
||||
|
||||
@@ -424,10 +426,10 @@ AniList integration is opt-in and disabled by default. Enable it to allow SubMin
|
||||
}
|
||||
```
|
||||
|
||||
| Option | Values | Description |
|
||||
| ------------- | --------------- | ----------------------------------------------------------------------------------- |
|
||||
| `enabled` | `true`, `false` | Enable AniList post-watch progress updates (default: `false`) |
|
||||
| `accessToken` | string | Optional explicit AniList access token override (default: empty string) |
|
||||
| Option | Values | Description |
|
||||
| ------------- | --------------- | ----------------------------------------------------------------------- |
|
||||
| `enabled` | `true`, `false` | Enable AniList post-watch progress updates (default: `false`) |
|
||||
| `accessToken` | string | Optional explicit AniList access token override (default: empty string) |
|
||||
|
||||
When `enabled` is `true` and `accessToken` is empty, SubMiner opens an AniList setup helper window. Keep `enabled` as `false` to disable all AniList setup/update behavior.
|
||||
|
||||
@@ -477,6 +479,8 @@ Jellyfin integration is optional and disabled by default. When enabled, SubMiner
|
||||
"enabled": true,
|
||||
"serverUrl": "http://127.0.0.1:8096",
|
||||
"username": "",
|
||||
"accessToken": "",
|
||||
"userId": "",
|
||||
"remoteControlEnabled": true,
|
||||
"remoteControlAutoConnect": true,
|
||||
"autoAnnounce": false,
|
||||
@@ -489,29 +493,28 @@ Jellyfin integration is optional and disabled by default. When enabled, SubMiner
|
||||
}
|
||||
```
|
||||
|
||||
| Option | Values | Description |
|
||||
| -------------------------- | --------------- | ---------------------------------------------------------------------------- |
|
||||
| `enabled` | `true`, `false` | Enable Jellyfin integration and CLI commands (default: `false`) |
|
||||
| `serverUrl` | string (URL) | Jellyfin server base URL |
|
||||
| `username` | string | Default username used by `--jellyfin-login` |
|
||||
| `deviceId` | string | Client device id sent in auth headers (default: `subminer`) |
|
||||
| `clientName` | string | Client name sent in auth headers (default: `SubMiner`) |
|
||||
| `clientVersion` | string | Client version sent in auth headers (default: `0.1.0`) |
|
||||
| `defaultLibraryId` | string | Default library id for `--jellyfin-items` when CLI value is omitted |
|
||||
| `remoteControlEnabled` | `true`, `false` | Enable Jellyfin cast/remote-control session support |
|
||||
| `remoteControlAutoConnect` | `true`, `false` | Auto-connect Jellyfin remote session on app startup |
|
||||
| `autoAnnounce` | `true`, `false` | Auto-run cast-target visibility announce check on connect (default: `false`) |
|
||||
| `remoteControlDeviceName` | string | Device name shown in Jellyfin cast/device lists |
|
||||
| `pullPictures` | `true`, `false` | Enable poster/icon fetching for launcher Jellyfin pickers |
|
||||
| `iconCacheDir` | string | Cache directory for launcher-fetched Jellyfin poster icons |
|
||||
| `directPlayPreferred` | `true`, `false` | Prefer direct stream URLs before transcoding |
|
||||
| `directPlayContainers` | string[] | Container allowlist for direct play decisions |
|
||||
| `transcodeVideoCodec` | string | Preferred transcode video codec fallback (default: `h264`) |
|
||||
| Option | Values | Description |
|
||||
| -------------------------- | --------------- | --------------------------------------------------------------------------------------- |
|
||||
| `enabled` | `true`, `false` | Enable Jellyfin integration and CLI commands (default: `false`) |
|
||||
| `serverUrl` | string (URL) | Jellyfin server base URL |
|
||||
| `username` | string | Default username used by `--jellyfin-login` |
|
||||
| `accessToken` | string | Optional explicit Jellyfin access token override; leave empty to use stored local token |
|
||||
| `userId` | string | Jellyfin user id bound to token/session |
|
||||
| `deviceId` | string | Client device id sent in auth headers (default: `subminer`) |
|
||||
| `clientName` | string | Client name sent in auth headers (default: `SubMiner`) |
|
||||
| `clientVersion` | string | Client version sent in auth headers (default: `0.1.0`) |
|
||||
| `defaultLibraryId` | string | Default library id for `--jellyfin-items` when CLI value is omitted |
|
||||
| `remoteControlEnabled` | `true`, `false` | Enable Jellyfin cast/remote-control session support |
|
||||
| `remoteControlAutoConnect` | `true`, `false` | Auto-connect Jellyfin remote session on app startup |
|
||||
| `autoAnnounce` | `true`, `false` | Auto-run cast-target visibility announce check on connect (default: `false`) |
|
||||
| `remoteControlDeviceName` | string | Device name shown in Jellyfin cast/device lists |
|
||||
| `pullPictures` | `true`, `false` | Enable poster/icon fetching for launcher Jellyfin pickers |
|
||||
| `iconCacheDir` | string | Cache directory for launcher-fetched Jellyfin poster icons |
|
||||
| `directPlayPreferred` | `true`, `false` | Prefer direct stream URLs before transcoding |
|
||||
| `directPlayContainers` | string[] | Container allowlist for direct play decisions |
|
||||
| `transcodeVideoCodec` | string | Preferred transcode video codec fallback (default: `h264`) |
|
||||
|
||||
Jellyfin auth resolution order:
|
||||
|
||||
1. `SUBMINER_JELLYFIN_ACCESS_TOKEN` (and optional `SUBMINER_JELLYFIN_USER_ID`) environment overrides.
|
||||
2. Locally stored encrypted Jellyfin session payload saved by login/setup (`accessToken` + `userId`).
|
||||
When `jellyfin.accessToken` is empty, SubMiner uses the locally stored encrypted token saved from Jellyfin login/setup.
|
||||
|
||||
Jellyfin direct app CLI commands (`SubMiner.AppImage ...`):
|
||||
|
||||
@@ -725,7 +728,7 @@ See `config.example.jsonc` for detailed configuration options.
|
||||
| `fontStyle` | string | `"normal"` or `"italic"` (default: `"normal"`) |
|
||||
| `backgroundColor` | string | Any CSS color, including `"transparent"` (default: `"rgb(30, 32, 48, 0.88)"`) |
|
||||
| `enableJlpt` | boolean | Enable JLPT level underline styling (`false` by default) |
|
||||
| `preserveLineBreaks` | boolean | Preserve line breaks in visible overlay subtitle rendering (`false` by default). Enable to mirror mpv line layout. |
|
||||
| `preserveLineBreaks` | boolean | Preserve line breaks in visible overlay subtitle rendering (`false` by default). Enable to mirror mpv line layout. |
|
||||
| `frequencyDictionary.enabled` | boolean | Enable frequency highlighting from dictionary lookups (`false` by default) |
|
||||
| `frequencyDictionary.sourcePath` | string | Path to a local frequency dictionary root. Leave empty or omit to use the built-in bundled dictionary search paths. |
|
||||
| `frequencyDictionary.topX` | number | Only color tokens whose frequency rank is `<= topX` (`1000` by default) |
|
||||
|
||||
@@ -54,3 +54,6 @@ Read first. Keep concise.
|
||||
| `opencode-task77-sliceb-20260221T232507Z-vzk5` | `opencode-task77-sliceb` | `Implement TASK-77 slice B parser-enrichment stage module + focused tests without touching tokenizer.ts` | `done` | `docs/subagents/agents/opencode-task77-sliceb-20260221T232507Z-vzk5.md` | `2026-02-21T23:27:40Z` |
|
||||
| `opencode-task79-runtime-reducers-20260221T235652Z-n4p7` | `opencode-task79-runtime-reducers` | `Execute TASK-79 explicit runtime state transitions/reducers in main via plan-first workflow` | `done` | `docs/subagents/agents/opencode-task79-runtime-reducers-20260221T235652Z-n4p7.md` | `2026-02-22T00:10:51Z` |
|
||||
| `opencode-task79-sliceb-20260222T000253Z-m2r7` | `opencode-task79-sliceb` | `Implement TASK-79 slice B invariants coverage/tests and composition-boundary docs updates without commit` | `done` | `docs/subagents/agents/opencode-task79-sliceb-20260222T000253Z-m2r7.md` | `2026-02-22T00:04:21Z` |
|
||||
| `opencode-task80-ipc-contract-20260222T001728Z-obrv` | `opencode-task80-ipc-contract` | `Execute TASK-80 IPC contract typing + runtime payload validation end-to-end without commit` | `planning` | `docs/subagents/agents/opencode-task80-ipc-contract-20260222T001728Z-obrv.md` | `2026-02-22T00:17:28Z` |
|
||||
| `opencode-task82-smoke-20260222T002150Z-p5bp` | `opencode-task82-smoke` | `Execute TASK-82 e2e smoke suite for launcher/mpv/ipc/overlay end-to-end without commit` | `planning` | `docs/subagents/agents/opencode-task82-smoke-20260222T002150Z-p5bp.md` | `2026-02-22T00:21:50Z` |
|
||||
| `codex-task82-smoke-20260222T002523Z-3j7u` | `codex-task82-smoke` | `Execute TASK-82 e2e smoke suite for launcher/mpv/ipc/overlay end-to-end without commit` | `planning` | `docs/subagents/agents/codex-task82-smoke-20260222T002523Z-3j7u.md` | `2026-02-22T00:25:23Z` |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
- alias: `codex-docs-unpushed-review`
|
||||
- mission: `Review unpushed commits for docs drift; patch docs to reflect current code/state`
|
||||
- status: `in_progress`
|
||||
- status: `done`
|
||||
- started_utc: `2026-02-21T21:37:07Z`
|
||||
- heartbeat_minutes: `5`
|
||||
|
||||
@@ -30,3 +30,7 @@
|
||||
## Log
|
||||
|
||||
- `2026-02-21T21:37:07Z` start; loaded subagent index/collaboration/backlog state; collecting unpushed commit/doc impact matrix.
|
||||
- `2026-02-21T21:39:15Z` docs drift patched:
|
||||
- removed stale lowercase-config fallback claim from `docs/configuration.md`
|
||||
- added `bun run test:launcher` to `docs/development.md` Testing section
|
||||
- `2026-02-21T21:39:15Z` no further user-facing doc drift found for current unpushed commit set; ready for handoff.
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# Agent: `codex-task75-mpv-osd-buffered-20260221T231816Z-yj32`
|
||||
|
||||
- alias: `codex-task75-mpv-osd-buffered`
|
||||
- mission: `Execute TASK-75 move MPV OSD log writes to buffered async path end-to-end`
|
||||
- status: `done`
|
||||
- branch: `main`
|
||||
- started_at: `2026-02-21T23:18:16Z`
|
||||
- heartbeat_minutes: `5`
|
||||
|
||||
## Current Work (newest first)
|
||||
|
||||
- [2026-02-21T23:48:10Z] handoff: Completed TASK-75. Converted MPV OSD log writes to buffered async queue + flush, wired shutdown flush into lifecycle cleanup, updated runtime/lifecycle tests, marked backlog task Done, no commit.
|
||||
- [2026-02-21T23:48:10Z] test: `bun run test:core:src` PASS (219 pass, 0 fail); focused runtime tests PASS via `bun build ... --outdir /tmp/task75-tests && node --test /tmp/task75-tests/*.js`; `bun run build` blocked by unrelated pre-existing tokenizer logger typing error.
|
||||
- [2026-02-21T23:24:00Z] progress: Added plan document `docs/plans/2026-02-21-task-75-mpv-osd-buffered-async.md` and recorded plan-of-record in Backlog `TASK-75`.
|
||||
- [2026-02-21T23:18:16Z] intent: Load Backlog TASK-75 context, produce plan via writing-plans skill, then implement buffered async MPV OSD logging path with shutdown flush tests.
|
||||
|
||||
## Files Touched
|
||||
|
||||
- `docs/subagents/INDEX.md`
|
||||
- `docs/subagents/collaboration.md`
|
||||
- `docs/subagents/agents/codex-task75-mpv-osd-buffered-20260221T231816Z-yj32.md`
|
||||
- `docs/plans/2026-02-21-task-75-mpv-osd-buffered-async.md`
|
||||
- `src/main/runtime/mpv-osd-log.ts`
|
||||
- `src/main/runtime/mpv-osd-log-main-deps.ts`
|
||||
- `src/main/runtime/mpv-osd-runtime-handlers.ts`
|
||||
- `src/main/runtime/mpv-osd-log.test.ts`
|
||||
- `src/main/runtime/mpv-osd-log-main-deps.test.ts`
|
||||
- `src/main/runtime/mpv-osd-runtime-handlers.test.ts`
|
||||
- `src/main/runtime/app-lifecycle-actions.ts`
|
||||
- `src/main/runtime/app-lifecycle-main-cleanup.ts`
|
||||
- `src/main/runtime/app-lifecycle-actions.test.ts`
|
||||
- `src/main/runtime/app-lifecycle-main-cleanup.test.ts`
|
||||
- `src/main/runtime/composers/startup-lifecycle-composer.test.ts`
|
||||
- `src/main.ts`
|
||||
- `backlog/tasks/task-75 - Move-mpv-OSD-log-writes-to-buffered-async-path.md`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- Backlog MCP task view for `TASK-75` is source of truth for acceptance criteria.
|
||||
- Existing `bun run build` failure in tokenizer logger typing is unrelated to TASK-75 scope.
|
||||
|
||||
## Open Questions / Blockers
|
||||
|
||||
- None.
|
||||
|
||||
## Next Step
|
||||
|
||||
- Await user review or follow-up tasks.
|
||||
@@ -0,0 +1,32 @@
|
||||
# Agent Session: codex-task82-smoke-20260222T002523Z-3j7u
|
||||
|
||||
- alias: `codex-task82-smoke`
|
||||
- mission: `Execute TASK-82 e2e smoke suite for launcher/mpv/ipc/overlay end-to-end without commit`
|
||||
- status: `planning`
|
||||
- start_utc: `2026-02-22T00:25:23Z`
|
||||
- last_update_utc: `2026-02-22T00:25:23Z`
|
||||
|
||||
## Intent
|
||||
|
||||
- Load TASK-82 details from Backlog MCP and preserve plan of record in task.
|
||||
- Use writing-plans skill for concrete execution plan.
|
||||
- Execute via executing-plans skill with parallel subagents for independent slices.
|
||||
|
||||
## Planned Files
|
||||
|
||||
- `launcher/smoke.e2e.test.ts`
|
||||
- `package.json`
|
||||
- `.github/workflows/ci.yml`
|
||||
- `.github/workflows/release.yml`
|
||||
- `docs/development.md`
|
||||
- `docs/installation.md`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- Existing launcher/mpv readiness primitives from TASK-73/TASK-74 are stable.
|
||||
- Smoke suite should run with local fakes; no real mpv/jellyfin dependency in CI.
|
||||
- Existing `docs/plans/2026-02-22-task-82-launcher-e2e-smoke-suite.md` is base plan and may be refined.
|
||||
|
||||
## Log
|
||||
|
||||
- `2026-02-22T00:25:23Z` session started; reading backlog + subagent context; entering planning.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Agent: `opencode-task72-parse-details-20260221T232137Z-b63t`
|
||||
|
||||
- alias: `opencode-task72-parse-details`
|
||||
- mission: `Implement TASK-72 Task 2 shared parse-error formatter wiring and tests`
|
||||
- status: `done`
|
||||
- branch: `main`
|
||||
- started_at: `2026-02-21T23:21:37Z`
|
||||
- heartbeat_minutes: `5`
|
||||
|
||||
## Current Work (newest first)
|
||||
|
||||
- [2026-02-21T23:24:12Z] completed: added shared `buildConfigParseErrorDetails` formatter, rewired startup hot-reload parse-failure branch to use it, expanded tests in `config-validation.test.ts` and `runtime/startup-config.test.ts`; verification passed (`bun run build && node --test dist/main/config-validation.test.js dist/main/runtime/startup-config.test.js`).
|
||||
- [2026-02-21T23:21:37Z] intent: implement Task 2 from `docs/plans/2026-02-21-task-72-strict-startup-config-loading.md`; scope `src/main/config-validation.ts`, `src/main/runtime/startup-config.ts`, and related tests; run required build+node-test command.
|
||||
|
||||
## Files Touched
|
||||
|
||||
- `docs/subagents/INDEX.md`
|
||||
- `docs/subagents/collaboration.md`
|
||||
- `docs/subagents/agents/opencode-task72-parse-details-20260221T232137Z-b63t.md`
|
||||
- `src/main/config-validation.ts`
|
||||
- `src/main/runtime/startup-config.ts`
|
||||
- `src/main/config-validation.test.ts`
|
||||
- `src/main/runtime/startup-config.test.ts`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- Backlog ticket exists: `TASK-72` (`To Do`), and this run is scoped to Task 2 only.
|
||||
- Existing startup/hot-reload fail handlers remain source of truth for fatal behavior.
|
||||
|
||||
## Open Questions / Blockers
|
||||
|
||||
- None.
|
||||
|
||||
## Next Step
|
||||
|
||||
- Handoff complete for Task 2 scope.
|
||||
@@ -0,0 +1,33 @@
|
||||
# Agent: `opencode-task72-strict-startup-config-20260221T232155Z-kf0o`
|
||||
|
||||
- alias: `opencode-task72-strict-startup-config`
|
||||
- mission: `Implement Task 1 strict startup constructor loading behavior and malformed startup config tests`
|
||||
- status: `done`
|
||||
- branch: `main`
|
||||
- started_at: `2026-02-21T23:21:55Z`
|
||||
- heartbeat_minutes: `5`
|
||||
|
||||
## Current Work (newest first)
|
||||
|
||||
- [2026-02-21T23:24:32Z] done: constructor now loads startup config via strict parser and throws `ConfigStartupParseError` on malformed config with path + parse reason + restart action; added malformed-startup test; validation command passed.
|
||||
- [2026-02-21T23:21:55Z] intent: implement Task 1 from `docs/plans/2026-02-21-task-72-strict-startup-config-loading.md`; scope `src/config/service.ts` + `src/config/config.test.ts`; run `bun run build && node --test dist/config/config.test.js`.
|
||||
|
||||
## Files Planned
|
||||
|
||||
- `src/config/service.ts`
|
||||
- `src/config/config.test.ts`
|
||||
- `docs/subagents/INDEX.md`
|
||||
- `docs/subagents/collaboration.md`
|
||||
- `docs/subagents/agents/opencode-task72-strict-startup-config-20260221T232155Z-kf0o.md`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- Backlog task exists for TASK-72; this run handles plan Task 1 only and no commit.
|
||||
|
||||
## Open Questions / Blockers
|
||||
|
||||
- None.
|
||||
|
||||
## Next Step
|
||||
|
||||
- Handoff complete; ready for TASK-72 Task 2/Task 3 follow-up wiring in main runtime.
|
||||
@@ -0,0 +1,35 @@
|
||||
# Agent: `opencode-task77-slice-a-20260222T000100Z-j4p2`
|
||||
|
||||
- alias: `opencode-task77-slice-a`
|
||||
- mission: `Implement TASK-77 slice A parser-selection-stage module + focused tests without touching tokenizer.ts`
|
||||
- status: `done`
|
||||
- branch: `main`
|
||||
- started_at: `2026-02-22T00:01:00Z`
|
||||
- heartbeat_minutes: `5`
|
||||
|
||||
## Current Work (newest first)
|
||||
|
||||
- [2026-02-22T00:01:00Z] intent: extract pure parse-result selection logic from `src/core/services/tokenizer.ts` into new stage module and add focused tests for selection behavior.
|
||||
- [2026-02-22T00:01:00Z] plan: write failing tests first in `src/core/services/tokenizer/parser-selection-stage.test.ts`, then add module `src/core/services/tokenizer/parser-selection-stage.ts`, then run targeted test command.
|
||||
- [2026-02-22T00:03:30Z] complete: added pure parser selection stage module + helper exports and focused tests for scanning preference, mecab fallback split, and suspicious-kana tie-break; verified with `bun test src/core/services/tokenizer/parser-selection-stage.test.ts` (3 pass, 0 fail).
|
||||
|
||||
## Files Touched
|
||||
|
||||
- `docs/subagents/agents/opencode-task77-slice-a-20260222T000100Z-j4p2.md`
|
||||
- `docs/subagents/INDEX.md`
|
||||
- `docs/subagents/collaboration.md`
|
||||
- `src/core/services/tokenizer/parser-selection-stage.ts`
|
||||
- `src/core/services/tokenizer/parser-selection-stage.test.ts`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- TASK-77 already exists in Backlog (`task_search` hit confirmed).
|
||||
- Slice A should preserve existing behavior from tokenizer parse candidate selection path only.
|
||||
|
||||
## Open Questions / Blockers
|
||||
|
||||
- None.
|
||||
|
||||
## Next Step
|
||||
|
||||
- Handoff complete.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Agent: `opencode-task77-sliceb-20260221T232507Z-vzk5`
|
||||
|
||||
- alias: `opencode-task77-sliceb`
|
||||
- mission: `Implement TASK-77 slice B parser-enrichment stage module + focused tests without touching tokenizer.ts`
|
||||
- status: `done`
|
||||
- branch: `main`
|
||||
- started_at: `2026-02-21T23:25:07Z`
|
||||
- heartbeat_minutes: `5`
|
||||
|
||||
## Current Work (newest first)
|
||||
|
||||
- [2026-02-21T23:27:40Z] complete: added `parser-enrichment-stage.ts` with extracted pure overlap + surface-sequence enrichment helpers and narrow API `enrichTokensWithMecabPos1`; added focused stage tests; verified `bun test src/core/services/tokenizer/parser-enrichment-stage.test.ts` passes (3/3).
|
||||
- [2026-02-21T23:26:40Z] tdd: created `parser-enrichment-stage.test.ts` first; confirmed RED due to missing module; then implemented stage module to GREEN.
|
||||
- [2026-02-21T23:25:07Z] intent: extract pure MeCab pos1 enrichment logic into dedicated stage module, add focused stage tests, run requested target test command.
|
||||
- [2026-02-21T23:25:07Z] progress: loaded Backlog overview + TASK-77 context; preparing red-first tests for parser enrichment stage.
|
||||
|
||||
## Files Touched
|
||||
|
||||
- `docs/subagents/agents/opencode-task77-sliceb-20260221T232507Z-vzk5.md`
|
||||
- `docs/subagents/INDEX.md`
|
||||
- `docs/subagents/collaboration.md`
|
||||
- `src/core/services/tokenizer/parser-enrichment-stage.ts`
|
||||
- `src/core/services/tokenizer/parser-enrichment-stage.test.ts`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- `TASK-77` remains active and this request maps to implementation plan step 2.
|
||||
- Scope excludes edits to `src/core/services/tokenizer.ts` in this slice.
|
||||
|
||||
## Open Questions / Blockers
|
||||
|
||||
- None.
|
||||
|
||||
## Next Step
|
||||
|
||||
- Handoff slice-B result to user; no tokenizer orchestrator edits in this slice.
|
||||
@@ -0,0 +1,47 @@
|
||||
# Agent: `opencode-task77-tokenizer-stages-20260221T232016Z-v9k2`
|
||||
|
||||
- alias: `opencode-task77-tokenizer-stages`
|
||||
- mission: `Execute TASK-77 tokenizer pipeline split into parser-selection enrichment and annotation stages end-to-end without commit`
|
||||
- status: `done`
|
||||
- branch: `main`
|
||||
- started_at: `2026-02-21T23:20:16Z`
|
||||
- heartbeat_minutes: `5`
|
||||
|
||||
## Current Work (newest first)
|
||||
|
||||
- [2026-02-21T23:20:16Z] intent: load Backlog TASK-77 context via MCP, write execution plan with writing-plans skill, execute with executing-plans skill, then run relevant verification gates.
|
||||
- [2026-02-21T23:20:16Z] progress: initialized agent coordination record and index row before code edits.
|
||||
- [2026-02-21T23:47:08Z] progress: implemented TASK-77 via stage split (`parser-selection-stage`, `parser-enrichment-stage`, `annotation-stage`) and parser lifecycle runtime extraction; reduced `src/core/services/tokenizer.ts` to orchestration facade.
|
||||
- [2026-02-21T23:47:08Z] test: `bun test src/core/services/tokenizer.test.ts src/core/services/tokenizer/annotation-stage.test.ts src/core/services/tokenizer/parser-selection-stage.test.ts src/core/services/tokenizer/parser-enrichment-stage.test.ts` PASS (53/53).
|
||||
- [2026-02-21T23:47:08Z] test: `bun run test:core:src` PASS (219 pass, 6 skip); `bun run build` PASS; `bun run test:core:dist` PASS (214 pass, 10 skip).
|
||||
- [2026-02-21T23:47:08Z] handoff: TASK-77 backlog finalized to Done with AC/DoD checks and final summary; no commit performed.
|
||||
|
||||
## Files Touched
|
||||
|
||||
- `docs/subagents/agents/opencode-task77-tokenizer-stages-20260221T232016Z-v9k2.md`
|
||||
- `docs/subagents/INDEX.md`
|
||||
- `docs/subagents/collaboration.md`
|
||||
- `docs/plans/2026-02-21-task-77-tokenizer-pipeline-stages.md`
|
||||
- `package.json`
|
||||
- `src/core/services/tokenizer.ts`
|
||||
- `src/core/services/tokenizer/yomitan-parser-runtime.ts`
|
||||
- `src/core/services/tokenizer/parser-selection-stage.ts`
|
||||
- `src/core/services/tokenizer/parser-selection-stage.test.ts`
|
||||
- `src/core/services/tokenizer/parser-enrichment-stage.ts`
|
||||
- `src/core/services/tokenizer/parser-enrichment-stage.test.ts`
|
||||
- `src/core/services/tokenizer/annotation-stage.ts`
|
||||
- `src/core/services/tokenizer/annotation-stage.test.ts`
|
||||
- `backlog/tasks/task-77 - Split-tokenizer-pipeline-into-parser-selection-enrichment-and-annotation-stages.md`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- TASK-77 exists on Backlog board and is the source of truth for acceptance criteria.
|
||||
- Scope likely includes tokenizer pipeline modules under `src/` plus associated tests/docs.
|
||||
|
||||
## Open Questions / Blockers
|
||||
|
||||
- None.
|
||||
|
||||
## Next Step
|
||||
|
||||
- Await user review; optional next step is commit/push on request.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Agent: `opencode-task79-sliceb-20260222T000253Z-m2r7`
|
||||
|
||||
- alias: `opencode-task79-sliceb`
|
||||
- mission: `Implement TASK-79 slice B invariants coverage/tests and composition-boundary docs updates without commit`
|
||||
- status: `done`
|
||||
- branch: `main`
|
||||
- started_at: `2026-02-22T00:02:53Z`
|
||||
- heartbeat_minutes: `5`
|
||||
|
||||
## Current Work (newest first)
|
||||
|
||||
- [2026-02-22T00:02:53Z] intent: add invariants coverage for AniList runtime state/media state tests and document runtime ownership/mutation/reducer boundaries under composition guidance.
|
||||
- [2026-02-22T00:02:53Z] plan: update `src/main/runtime/anilist-state.test.ts`, `src/main/runtime/anilist-media-state.test.ts`, and `docs/architecture.md`; run focused bun tests for both runtime test files.
|
||||
- [2026-02-22T00:04:21Z] complete: added TASK-79 slice B invariant tests for queue metadata preservation/token-clear non-mutation/media-reset behavior and documented migrated runtime-state reducer ownership rules; verified with `bun test src/main/runtime/anilist-state.test.ts src/main/runtime/anilist-media-state.test.ts` (8 pass, 0 fail).
|
||||
|
||||
## Files Touched
|
||||
|
||||
- `docs/subagents/agents/opencode-task79-sliceb-20260222T000253Z-m2r7.md`
|
||||
- `docs/subagents/INDEX.md`
|
||||
- `docs/subagents/collaboration.md`
|
||||
- `src/main/runtime/anilist-state.test.ts`
|
||||
- `src/main/runtime/anilist-media-state.test.ts`
|
||||
- `docs/architecture.md`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- TASK-79 is the owning backlog ticket for this slice.
|
||||
- Requested scope is test/docs only; no production behavior changes required.
|
||||
|
||||
## Open Questions / Blockers
|
||||
|
||||
- None.
|
||||
|
||||
## Next Step
|
||||
|
||||
- Handoff complete.
|
||||
@@ -0,0 +1,31 @@
|
||||
# Agent Session: opencode-task80-ipc-contract-20260222T001728Z-obrv
|
||||
|
||||
- alias: `opencode-task80-ipc-contract`
|
||||
- mission: `Execute TASK-80 IPC contract typing + runtime payload validation via writing-plans + executing-plans (no commit).`
|
||||
- status: `planning`
|
||||
- started_utc: `2026-02-22T00:17:28Z`
|
||||
- last_update_utc: `2026-02-22T00:17:28Z`
|
||||
|
||||
## Intent
|
||||
|
||||
- Load TASK-80 from Backlog MCP and capture implementation plan before edits.
|
||||
- Strengthen typed IPC channel contracts and runtime payload validation at boundaries.
|
||||
- Reduce unsafe `unknown` casts in IPC handlers and add malformed payload coverage.
|
||||
|
||||
## Planned Files
|
||||
|
||||
- `src/main/ipc.ts`
|
||||
- `src/main/runtime/*`
|
||||
- `src/shared/ipc/*`
|
||||
- `src/main/**/*.test.ts`
|
||||
- `docs/architecture.md`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- TASK-80 scope is main-process IPC boundary; keep external behavior/backward compatibility.
|
||||
- Existing validation helpers may exist and should be reused over introducing heavy deps.
|
||||
- Parallel subagents can split contracts/validation/tests/docs with non-overlapping files.
|
||||
|
||||
## Phase Log
|
||||
|
||||
- `2026-02-22T00:17:28Z` Session started; read backlog overview and TASK-80 details; beginning planning.
|
||||
@@ -0,0 +1,31 @@
|
||||
# Agent Session: opencode-task82-smoke-20260222T002150Z-p5bp
|
||||
|
||||
- alias: `opencode-task82-smoke`
|
||||
- mission: `Execute TASK-82 e2e smoke suite for launcher/mpv/ipc/overlay end-to-end without commit`
|
||||
- status: `planning`
|
||||
- start_utc: `2026-02-22T00:21:50Z`
|
||||
- last_update_utc: `2026-02-22T00:21:50Z`
|
||||
|
||||
## Intent
|
||||
|
||||
- Load TASK-82 details from Backlog MCP.
|
||||
- Produce plan via writing-plans skill.
|
||||
- Execute via executing-plans skill; use parallel subagents where safe.
|
||||
|
||||
## Planned Files
|
||||
|
||||
- `launcher/**/*.test.ts`
|
||||
- `scripts/**`
|
||||
- `package.json`
|
||||
- `.github/workflows/*.yml`
|
||||
- `docs/development.md`
|
||||
- `docs/RELEASING.md`
|
||||
|
||||
## Assumptions
|
||||
|
||||
- Existing launcher/mpv readiness primitives from TASK-73/TASK-74 available.
|
||||
- Smoke suite can run with local stubs/mocks; no real mpv/jellyfin dependency in CI.
|
||||
|
||||
## Log
|
||||
|
||||
- `2026-02-22T00:21:50Z` session started; backlog context loaded; moving to planning.
|
||||
@@ -71,3 +71,6 @@ Shared notes. Append-only.
|
||||
- [2026-02-22T00:02:53Z] [opencode-task79-sliceb-20260222T000253Z-m2r7|opencode-task79-sliceb] overlap note: implementing TASK-79 slice B only (`src/main/runtime/anilist-state.test.ts`, `src/main/runtime/anilist-media-state.test.ts`, `docs/architecture.md`) for invariants coverage and composition-boundary ownership docs; no runtime behavior code changes.
|
||||
- [2026-02-22T00:04:21Z] [opencode-task79-sliceb-20260222T000253Z-m2r7|opencode-task79-sliceb] completed TASK-79 slice B request: added invariants coverage in AniList runtime/media tests (queue metadata preservation, clear-token non-mutation, guess-only reset, tracking reset idempotence), documented migrated runtime reducer ownership rules in architecture docs, and verified focused tests green (8 pass).
|
||||
- [2026-02-22T00:10:51Z] [opencode-task79-runtime-reducers-20260221T235652Z-n4p7|opencode-task79-runtime-reducers] completed TASK-79 end-to-end: merged slice A/B, added explicit AniList runtime transitions in `src/main/state.ts`, rewired migrated `src/main.ts` mutation paths, fixed `state.ts` core-services import coupling for focused tests, verified `bun test src/main/state.test.ts src/main/runtime/anilist-state.test.ts src/main/runtime/anilist-media-state.test.ts` + `bun run build` + `bun run test:core:src`, and marked backlog task Done.
|
||||
- [2026-02-22T00:17:28Z] [opencode-task80-ipc-contract-20260222T001728Z-obrv|opencode-task80-ipc-contract] starting TASK-80 via Backlog MCP + writing-plans/executing-plans; scope IPC contract typing/runtime payload validation + malformed payload tests; will parallelize independent slices where possible.
|
||||
- [2026-02-22T00:21:50Z] [opencode-task82-smoke-20260222T002150Z-p5bp|opencode-task82-smoke] starting TASK-82 via Backlog MCP + writing-plans/executing-plans; scope e2e smoke suite for launcher mpv ipc overlay startup + workflow/docs wiring, no commit.
|
||||
- [2026-02-22T00:25:23Z] [codex-task82-smoke-20260222T002523Z-3j7u|codex-task82-smoke] overlap note: taking active TASK-82 execution; reusing existing task context/plan artifact, scoping edits to launcher smoke test + workflow/docs wiring + backlog evidence updates only.
|
||||
|
||||
Reference in New Issue
Block a user