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,10 +1,11 @@
|
|||||||
---
|
---
|
||||||
id: TASK-80
|
id: TASK-80
|
||||||
title: Strengthen IPC contract typing and runtime payload validation
|
title: Strengthen IPC contract typing and runtime payload validation
|
||||||
status: To Do
|
status: In Progress
|
||||||
assignee: []
|
assignee:
|
||||||
|
- opencode-task80-ipc-contract
|
||||||
created_date: '2026-02-18 11:43'
|
created_date: '2026-02-18 11:43'
|
||||||
updated_date: '2026-02-18 11:43'
|
updated_date: '2026-02-22 00:21'
|
||||||
labels:
|
labels:
|
||||||
- ipc
|
- ipc
|
||||||
- type-safety
|
- type-safety
|
||||||
@@ -46,9 +47,28 @@ IPC handlers still rely on many `unknown` payload casts in main process paths. T
|
|||||||
- [ ] #4 Malformed payloads are handled gracefully and test-covered
|
- [ ] #4 Malformed payloads are handled gracefully and test-covered
|
||||||
<!-- AC:END -->
|
<!-- AC:END -->
|
||||||
|
|
||||||
|
## Implementation Plan
|
||||||
|
|
||||||
|
<!-- SECTION:PLAN:BEGIN -->
|
||||||
|
Plan of record (2026-02-22):
|
||||||
|
1) Add central typed IPC contract module at `src/shared/ipc/contracts.ts` and migrate `src/core/services/ipc.ts`, `src/core/services/anki-jimaku-ipc.ts`, and `src/preload.ts` from string literals to contract constants/types.
|
||||||
|
2) Add runtime IPC payload validators at `src/shared/ipc/validators.ts` for externally supplied payloads (runtime option id/direction/value boundary, subsync request shape, overlay modal, subtitle position, and kiku/jimaku payloads where renderer-supplied).
|
||||||
|
3) Wire validators at IPC boundaries so malformed payloads are handled gracefully (return structured `{ ok: false, error }` for invoke handlers or no-op/log for fire-and-forget channels) and avoid unsafe `as` casts in boundary code.
|
||||||
|
4) Reduce unsafe casts in runtime IPC wiring (`src/main/dependencies.ts`, `src/main.ts`, IPC composer generics) by narrowing types before domain calls.
|
||||||
|
5) Add/extend IPC tests for malformed payload behavior (`src/core/services/ipc.test.ts`, `src/core/services/anki-jimaku-ipc.test.ts`), then run `bun run build`, `bun run test:core:src`, and `bun run test:core:dist`.
|
||||||
|
6) Update `docs/architecture.md` with central IPC contract and boundary-validation conventions; then finalize TASK-80 AC/DoD evidence in Backlog MCP.
|
||||||
|
<!-- SECTION:PLAN:END -->
|
||||||
|
|
||||||
|
## Implementation Notes
|
||||||
|
|
||||||
|
<!-- SECTION:NOTES:BEGIN -->
|
||||||
|
2026-02-22: Started execution session opencode-task80-ipc-contract-20260222T001728Z-obrv. Loading IPC boundary code and preparing implementation plan via writing-plans before any code edits.
|
||||||
|
|
||||||
|
Saved plan document: docs/plans/2026-02-22-task-80-ipc-contract-validation.md. Proceeding with executing-plans implementation flow as requested.
|
||||||
|
<!-- SECTION:NOTES:END -->
|
||||||
|
|
||||||
## Definition of Done
|
## Definition of Done
|
||||||
<!-- DOD:BEGIN -->
|
<!-- DOD:BEGIN -->
|
||||||
- [ ] #1 IPC-related tests pass
|
- [ ] #1 IPC-related tests pass
|
||||||
- [ ] #2 IPC contract docs updated
|
- [ ] #2 IPC contract docs updated
|
||||||
<!-- DOD:END -->
|
<!-- DOD:END -->
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
---
|
---
|
||||||
id: TASK-82
|
id: TASK-82
|
||||||
title: Add end-to-end smoke suite for launcher mpv ipc and overlay runtime
|
title: Add end-to-end smoke suite for launcher mpv ipc and overlay runtime
|
||||||
status: To Do
|
status: In Progress
|
||||||
assignee: []
|
assignee:
|
||||||
|
- codex-task82-smoke-20260222T002523Z-3j7u
|
||||||
created_date: '2026-02-18 11:43'
|
created_date: '2026-02-18 11:43'
|
||||||
updated_date: '2026-02-18 11:43'
|
updated_date: '2026-02-22 00:27'
|
||||||
labels:
|
labels:
|
||||||
- testing
|
- testing
|
||||||
- e2e
|
- e2e
|
||||||
@@ -52,9 +53,51 @@ Current coverage is strong at unit/service level but thin on end-to-end behavior
|
|||||||
- [ ] #4 Smoke suite documented in development/release docs
|
- [ ] #4 Smoke suite documented in development/release docs
|
||||||
<!-- AC:END -->
|
<!-- AC:END -->
|
||||||
|
|
||||||
|
## Implementation Plan
|
||||||
|
|
||||||
|
<!-- SECTION:PLAN:BEGIN -->
|
||||||
|
Plan-of-record (2026-02-22, codex-task82-smoke-20260222T002523Z-3j7u)
|
||||||
|
|
||||||
|
Goal
|
||||||
|
- Add deterministic e2e smoke coverage for launcher -> mpv IPC socket -> app overlay start/stop runtime wiring.
|
||||||
|
- Run suite in CI + release quality gates with actionable failure artifacts.
|
||||||
|
- Document command, coverage, and release-checklist linkage.
|
||||||
|
|
||||||
|
Execution slices (parallel where safe)
|
||||||
|
1) Launcher smoke harness (core implementation)
|
||||||
|
- Create launcher/smoke.e2e.test.ts with fake mpv + fake app fixtures in temp dir.
|
||||||
|
- Validate startup path, socket readiness, app --start args/env, and post-run --stop behavior.
|
||||||
|
- Emit actionable artifact logs under .tmp/launcher-smoke/<run-id>.
|
||||||
|
|
||||||
|
2) Script + workflow wiring (can run in parallel after command exists)
|
||||||
|
- package.json: add test:launcher:smoke:src and include in launcher lane.
|
||||||
|
- .github/workflows/ci.yml: run launcher smoke suite and upload smoke artifacts on failure.
|
||||||
|
- .github/workflows/release.yml: mirror quality-gate step and failure artifact upload.
|
||||||
|
|
||||||
|
3) Docs wiring (parallel with workflows)
|
||||||
|
- docs/development.md: command usage + what it validates + artifact path.
|
||||||
|
- docs/installation.md: release/checklist reference to launcher smoke gate.
|
||||||
|
|
||||||
|
4) Validation + closure
|
||||||
|
- Run focused lane: bun run test:launcher:smoke:src and bun run test:launcher.
|
||||||
|
- Run integration lane: bun run test:fast.
|
||||||
|
- Run dist confidence lane: bun run build && bun run test:smoke:dist (or record unrelated blockers).
|
||||||
|
- Update TASK-82 AC/DoD checks with exact evidence and final summary.
|
||||||
|
|
||||||
|
Scope guardrails
|
||||||
|
- No commit/push in this run.
|
||||||
|
- Keep smoke suite dependency-free (local fakes only).
|
||||||
|
- If new required scope appears, pause and request user scope decision before expanding AC.
|
||||||
|
<!-- SECTION:PLAN:END -->
|
||||||
|
|
||||||
|
## Implementation Notes
|
||||||
|
|
||||||
|
<!-- SECTION:NOTES:BEGIN -->
|
||||||
|
2026-02-22: Started execution with opencode-task82-smoke-20260222T002150Z-p5bp via writing-plans -> executing-plans workflow.
|
||||||
|
<!-- SECTION:NOTES:END -->
|
||||||
|
|
||||||
## Definition of Done
|
## Definition of Done
|
||||||
<!-- DOD:BEGIN -->
|
<!-- DOD:BEGIN -->
|
||||||
- [ ] #1 Smoke suite passes on baseline branch
|
- [ ] #1 Smoke suite passes on baseline branch
|
||||||
- [ ] #2 Release checklist references smoke suite
|
- [ ] #2 Release checklist references smoke suite
|
||||||
<!-- DOD:END -->
|
<!-- DOD:END -->
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Configuration
|
# 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
|
## 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.
|
- `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.
|
- `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
|
### Hot-Reload Behavior
|
||||||
|
|
||||||
@@ -424,10 +426,10 @@ AniList integration is opt-in and disabled by default. Enable it to allow SubMin
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
| Option | Values | Description |
|
| Option | Values | Description |
|
||||||
| ------------- | --------------- | ----------------------------------------------------------------------------------- |
|
| ------------- | --------------- | ----------------------------------------------------------------------- |
|
||||||
| `enabled` | `true`, `false` | Enable AniList post-watch progress updates (default: `false`) |
|
| `enabled` | `true`, `false` | Enable AniList post-watch progress updates (default: `false`) |
|
||||||
| `accessToken` | string | Optional explicit AniList access token override (default: empty string) |
|
| `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.
|
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,
|
"enabled": true,
|
||||||
"serverUrl": "http://127.0.0.1:8096",
|
"serverUrl": "http://127.0.0.1:8096",
|
||||||
"username": "",
|
"username": "",
|
||||||
|
"accessToken": "",
|
||||||
|
"userId": "",
|
||||||
"remoteControlEnabled": true,
|
"remoteControlEnabled": true,
|
||||||
"remoteControlAutoConnect": true,
|
"remoteControlAutoConnect": true,
|
||||||
"autoAnnounce": false,
|
"autoAnnounce": false,
|
||||||
@@ -489,29 +493,28 @@ Jellyfin integration is optional and disabled by default. When enabled, SubMiner
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
| Option | Values | Description |
|
| Option | Values | Description |
|
||||||
| -------------------------- | --------------- | ---------------------------------------------------------------------------- |
|
| -------------------------- | --------------- | --------------------------------------------------------------------------------------- |
|
||||||
| `enabled` | `true`, `false` | Enable Jellyfin integration and CLI commands (default: `false`) |
|
| `enabled` | `true`, `false` | Enable Jellyfin integration and CLI commands (default: `false`) |
|
||||||
| `serverUrl` | string (URL) | Jellyfin server base URL |
|
| `serverUrl` | string (URL) | Jellyfin server base URL |
|
||||||
| `username` | string | Default username used by `--jellyfin-login` |
|
| `username` | string | Default username used by `--jellyfin-login` |
|
||||||
| `deviceId` | string | Client device id sent in auth headers (default: `subminer`) |
|
| `accessToken` | string | Optional explicit Jellyfin access token override; leave empty to use stored local token |
|
||||||
| `clientName` | string | Client name sent in auth headers (default: `SubMiner`) |
|
| `userId` | string | Jellyfin user id bound to token/session |
|
||||||
| `clientVersion` | string | Client version sent in auth headers (default: `0.1.0`) |
|
| `deviceId` | string | Client device id sent in auth headers (default: `subminer`) |
|
||||||
| `defaultLibraryId` | string | Default library id for `--jellyfin-items` when CLI value is omitted |
|
| `clientName` | string | Client name sent in auth headers (default: `SubMiner`) |
|
||||||
| `remoteControlEnabled` | `true`, `false` | Enable Jellyfin cast/remote-control session support |
|
| `clientVersion` | string | Client version sent in auth headers (default: `0.1.0`) |
|
||||||
| `remoteControlAutoConnect` | `true`, `false` | Auto-connect Jellyfin remote session on app startup |
|
| `defaultLibraryId` | string | Default library id for `--jellyfin-items` when CLI value is omitted |
|
||||||
| `autoAnnounce` | `true`, `false` | Auto-run cast-target visibility announce check on connect (default: `false`) |
|
| `remoteControlEnabled` | `true`, `false` | Enable Jellyfin cast/remote-control session support |
|
||||||
| `remoteControlDeviceName` | string | Device name shown in Jellyfin cast/device lists |
|
| `remoteControlAutoConnect` | `true`, `false` | Auto-connect Jellyfin remote session on app startup |
|
||||||
| `pullPictures` | `true`, `false` | Enable poster/icon fetching for launcher Jellyfin pickers |
|
| `autoAnnounce` | `true`, `false` | Auto-run cast-target visibility announce check on connect (default: `false`) |
|
||||||
| `iconCacheDir` | string | Cache directory for launcher-fetched Jellyfin poster icons |
|
| `remoteControlDeviceName` | string | Device name shown in Jellyfin cast/device lists |
|
||||||
| `directPlayPreferred` | `true`, `false` | Prefer direct stream URLs before transcoding |
|
| `pullPictures` | `true`, `false` | Enable poster/icon fetching for launcher Jellyfin pickers |
|
||||||
| `directPlayContainers` | string[] | Container allowlist for direct play decisions |
|
| `iconCacheDir` | string | Cache directory for launcher-fetched Jellyfin poster icons |
|
||||||
| `transcodeVideoCodec` | string | Preferred transcode video codec fallback (default: `h264`) |
|
| `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:
|
When `jellyfin.accessToken` is empty, SubMiner uses the locally stored encrypted token saved from Jellyfin login/setup.
|
||||||
|
|
||||||
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`).
|
|
||||||
|
|
||||||
Jellyfin direct app CLI commands (`SubMiner.AppImage ...`):
|
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"`) |
|
| `fontStyle` | string | `"normal"` or `"italic"` (default: `"normal"`) |
|
||||||
| `backgroundColor` | string | Any CSS color, including `"transparent"` (default: `"rgb(30, 32, 48, 0.88)"`) |
|
| `backgroundColor` | string | Any CSS color, including `"transparent"` (default: `"rgb(30, 32, 48, 0.88)"`) |
|
||||||
| `enableJlpt` | boolean | Enable JLPT level underline styling (`false` by default) |
|
| `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.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.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) |
|
| `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-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-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-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`
|
- alias: `codex-docs-unpushed-review`
|
||||||
- mission: `Review unpushed commits for docs drift; patch docs to reflect current code/state`
|
- 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`
|
- started_utc: `2026-02-21T21:37:07Z`
|
||||||
- heartbeat_minutes: `5`
|
- heartbeat_minutes: `5`
|
||||||
|
|
||||||
@@ -30,3 +30,7 @@
|
|||||||
## Log
|
## Log
|
||||||
|
|
||||||
- `2026-02-21T21:37:07Z` start; loaded subagent index/collaboration/backlog state; collecting unpushed commit/doc impact matrix.
|
- `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: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: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: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