Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
b6db4f1
chore(task): add fmp-rewrite parent task and audit child task
1morr Sep 26, 2026
4893f2c
docs(audit): add phase-one audit of the current codebase
1morr Sep 26, 2026
5bd916b
docs(audit): correct the remote-removal wording for imported playlists
1morr Sep 26, 2026
ea8cb34
docs(audit): record owner decisions and draft the phase-two order
1morr Sep 26, 2026
50a3fe4
chore(task): archive audit
1morr Sep 26, 2026
1764bad
docs(audit): fix the E6 tick and record the confirmed phase-two order
1morr Sep 26, 2026
8f03a20
chore(task): plan phase-two item 9 (docs structure and ADR disposition)
1morr Sep 26, 2026
1783f4b
docs(adr): add the ADR template for the rewrite decisions
1morr Sep 26, 2026
3d55335
chore(task): archive design-docs
1morr Sep 26, 2026
c605a7d
chore(task): plan phase-two item 7 (rewrite strategy, high level)
1morr Sep 26, 2026
b63d1de
docs(adr): 0008 rewrite as a new app in the same repo
1morr Sep 26, 2026
7d35d0d
chore(task): archive design-rewrite-strategy
1morr Sep 26, 2026
e4148be
chore(task): plan phase-two item 10 (platform layer)
1morr Sep 26, 2026
d3d97d6
docs(adr): 0009 platform layer with declared capabilities
1morr Sep 26, 2026
72a4054
chore(task): archive design-platform
1morr Sep 26, 2026
64ca621
chore(task): plan phase-two item 6 (data layer and compatibility)
1morr Sep 26, 2026
4aacca4
docs(adr): 0010 drift data layer and legacy import
1morr Sep 27, 2026
de0dc80
chore(task): archive design-data
1morr Sep 27, 2026
3e60fd3
chore(task): plan phase-two item 18 (settings and logging)
1morr Sep 27, 2026
1b341f8
docs(adr): 0011 settings and logging infrastructure
1morr Sep 27, 2026
25f0952
chore(task): archive design-settings-logging
1morr Sep 27, 2026
494dfe7
chore(task): plan phase-two item 12 (network layer and accounts)
1morr Sep 27, 2026
a6c99dd
docs(adr): 0012 network layer and accounts
1morr Sep 27, 2026
cf65c0e
chore(task): archive design-network-accounts
1morr Sep 27, 2026
88db67b
chore(task): plan phase-two item 2 (unified error model)
1morr Sep 27, 2026
bf4d151
docs(adr): 0013 unified error model
1morr Sep 27, 2026
069ec48
chore(task): archive design-errors
1morr Sep 27, 2026
d83e83a
chore(task): plan phase-two item 1 (script source plugins)
1morr Sep 27, 2026
ed27942
chore(task): move source plugins to a separate plugin repository
1morr Sep 27, 2026
c05f024
chore(task): fix the source plugin design diagram
1morr Sep 27, 2026
da5d1a0
docs(adr): 0014 script source plugins from a plugin repository
1morr Sep 27, 2026
edee2d0
chore(task): archive design-source-plugins
1morr Sep 27, 2026
f402e5f
chore(task): add a handoff note to the phase-two plan
1morr Sep 27, 2026
ab1e58a
chore(task): add design-testing research and prd draft
1morr Sep 27, 2026
a73d6f5
chore(task): add design and plan for tests, gates and dev environment
1morr Sep 27, 2026
a5a2239
docs(adr): 0015 testing gates and dev environment
1morr Sep 27, 2026
292e88d
chore(task): archive design-testing
1morr Sep 27, 2026
e862b31
chore(task): start design-cache-offline
1morr Sep 27, 2026
bef9c34
chore(task): add design-cache-offline research and prd draft
1morr Sep 27, 2026
e0ce3fa
chore(task): add design and plan for cache and offline
1morr Sep 27, 2026
9c4e16a
docs(adr): 0016 cache and offline
1morr Sep 27, 2026
70fab87
chore(task): archive design-cache-offline
1morr Sep 27, 2026
31484ac
chore(task): start design-background-tasks
1morr Sep 27, 2026
dc0c47f
chore(task): add design-background-tasks research and prd draft
1morr Sep 27, 2026
4792d63
chore(task): add design and plan for background tasks
1morr Sep 27, 2026
3a65efc
docs(adr): 0017 background task scheduler
1morr Sep 27, 2026
fca2e7f
chore(task): archive design-background-tasks
1morr Sep 27, 2026
e5d2249
chore(task): start design-playback-core
1morr Sep 27, 2026
89a9180
chore(task): add design-playback-core research and prd draft
1morr Sep 27, 2026
2ccdebe
chore(task): record the playback backend decision
1morr Sep 27, 2026
a0e94fc
chore(task): record the shuffle drag behaviour
1morr Sep 27, 2026
2038817
chore(task): add design and plan for playback core
1morr Sep 27, 2026
9d782d1
docs(adr): 0018 playback core
1morr Sep 27, 2026
1fe3d73
chore(task): archive design-playback-core
1morr Sep 27, 2026
33c486a
chore(task): start design-library-sync
1morr Sep 27, 2026
d186e0f
chore(task): add design-library-sync research and prd draft
1morr Sep 27, 2026
e273e8d
chore(task): add design and plan for library and sync
1morr Sep 27, 2026
93a352f
docs(adr): 0019 library and sync
1morr Sep 27, 2026
6946a99
chore(task): archive design-library-sync
1morr Sep 27, 2026
28f4544
chore(task): start design-downloads
1morr Sep 27, 2026
55d4189
chore(task): add design-downloads research and prd draft
1morr Sep 27, 2026
9a2938d
chore(task): record the download file layout decision
1morr Sep 27, 2026
9ca38d2
chore(task): add design and plan for downloads and permissions
1morr Sep 27, 2026
5c3b7c6
docs(adr): 0020 downloads and permissions
1morr Sep 27, 2026
96386e3
chore(task): archive design-downloads
1morr Sep 27, 2026
28596b5
chore(task): start design-lyrics
1morr Sep 27, 2026
b07e091
chore(task): refresh the phase-two handoff note
1morr Sep 27, 2026
60d6cd0
chore(task): add lyrics research and draft requirements
1morr Sep 27, 2026
847ced6
chore(task): record lyrics scope and ai decisions
1morr Sep 28, 2026
c22b66f
chore(task): add lyrics extras and decision-model research
1morr Sep 28, 2026
2a82400
chore(task): record ai-as-plugin decision for lyrics
1morr Sep 28, 2026
ae3354c
chore(task): record mobile lyrics scope
1morr Sep 28, 2026
5bba97e
chore(task): add design and plan for lyrics
1morr Sep 28, 2026
95deaf5
docs(adr): 0021 lyrics
1morr Sep 28, 2026
789849d
chore(task): archive design-lyrics
1morr Sep 28, 2026
cda0981
chore(task): start design-release-update
1morr Sep 28, 2026
eed6f6f
chore(task): add release research and draft requirements
1morr Sep 28, 2026
2a2ad25
chore(task): record release-please decision
1morr Sep 28, 2026
6d23504
chore(task): record linux and macos release formats
1morr Sep 28, 2026
a662115
chore(task): record windows signing decision
1morr Sep 28, 2026
036bb71
chore(task): add design and plan for release and update
1morr Sep 28, 2026
62b772d
docs(adr): 0022 release and in-app update
1morr Sep 28, 2026
8b82582
chore(task): archive design-release-update
1morr Sep 28, 2026
9d90de2
chore(task): start design-toast
1morr Sep 28, 2026
f4ea9b6
chore(task): add toast research and draft requirements
1morr Sep 28, 2026
d3fe877
chore(task): record toast appearance decision
1morr Sep 28, 2026
916c9c8
chore(task): add design and plan for toast
1morr Sep 28, 2026
1ac254e
docs(adr): 0023 unified toast
1morr Sep 28, 2026
63a04c3
chore(task): archive design-toast
1morr Sep 28, 2026
92ce862
chore(task): start design-ui-ux
1morr Sep 28, 2026
d090c5c
chore(task): add ui-ux research and draft requirements
1morr Sep 28, 2026
63b469f
chore(task): record desktop player layout decision
1morr Sep 28, 2026
6d6b8a8
chore(task): record i18n decision
1morr Sep 28, 2026
f931720
chore(task): record keyboard shortcut decision
1morr Sep 28, 2026
4615364
chore(task): record player bar decision
1morr Sep 28, 2026
2e03765
chore(task): add design and plan for ui-ux
1morr Sep 28, 2026
618e05f
chore(task): record design style decision
1morr Sep 28, 2026
e235974
docs(adr): 0024 ui and ux design system
1morr Sep 28, 2026
91e07fb
chore(task): archive design-ui-ux
1morr Sep 28, 2026
ead20f1
chore(task): start design-debug-page
1morr Sep 28, 2026
0fa0b9c
chore(task): refresh the phase-two handoff note
1morr Sep 28, 2026
cbd04d1
chore(task): add debug page research and prd
1morr Sep 28, 2026
08b4020
chore(task): record developer mode decision
1morr Sep 28, 2026
a3f27e1
chore(task): record debug page sections decision
1morr Sep 28, 2026
05537c6
chore(task): record log retention decision
1morr Sep 28, 2026
5875e50
chore(task): add debug page design and plan
1morr Sep 28, 2026
e195895
docs(adr): 0025 debug page and developer mode
1morr Sep 28, 2026
f7f7e71
chore(task): archive design-debug-page
1morr Sep 28, 2026
b973e04
chore(task): start design-milestones
1morr Sep 28, 2026
e7a95b8
chore(task): add milestone research and prd
1morr Sep 28, 2026
fec6079
chore(task): record milestone order decision
1morr Sep 28, 2026
cdc893e
chore(task): record milestone and pr structure decision
1morr Sep 28, 2026
3bd56ca
chore(task): record cut-over gate decision
1morr Sep 28, 2026
2f1c92a
chore(task): add milestone design and plan
1morr Sep 28, 2026
399890a
docs(adr): 0026 milestones and cut-over
1morr Sep 28, 2026
94b2a3e
chore(task): archive design-milestones
1morr Sep 28, 2026
6d3d61f
chore(task): start phase3-docs-cleanup
1morr Sep 28, 2026
a41c14f
chore(task): add phase three research and prd
1morr Sep 28, 2026
1dd380a
chore(task): record doc language scope decision
1morr Sep 28, 2026
5279724
chore(task): record on-device verification decision
1morr Sep 28, 2026
6a7e3bb
chore(task): add phase three design and plan
1morr Sep 28, 2026
587edac
docs(adr): 0027 on-device verification
1morr Sep 28, 2026
e113587
docs: remove mattpocock skill residue
1morr Sep 28, 2026
540685c
docs: fold CONTEXT.md into ADR 0012 and the spec
1morr Sep 28, 2026
7a9674d
docs(adr): mark old ADRs as legacy-only
1morr Sep 28, 2026
3fcd913
docs: rewrite the docs map
1morr Sep 28, 2026
8897112
docs: align agent notes with the trellis setup
1morr Sep 28, 2026
1820109
chore(task): refresh the handoff note after phase three
1morr Sep 28, 2026
2f132e7
chore(task): archive phase3-docs-cleanup
1morr Sep 28, 2026
4064e6c
chore(task): complete the feature freeze backlog list
1morr Sep 28, 2026
f3ea7ae
chore(task): note legacy agent files to split in m1
1morr Sep 28, 2026
e9516ed
chore(task): plan milestone m1
1morr Sep 28, 2026
2035023
chore(task): mark m1 as started
1morr Sep 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .trellis/spec/data/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ and the shared foundation in `lib/core/` (errors, logger, constants, utils).

Neither directory imports `lib/services/` or `lib/providers/` (one recorded
exception, `lib/core/extensions/track_extensions.dart`, in
`test/support/layer_boundary_static_rule_test.dart`) — see AGENTS.md § Boundaries. Vocabulary for auth and media handoff is in `CONTEXT.md`.
`test/support/layer_boundary_static_rule_test.dart`) — see AGENTS.md § Boundaries. Vocabulary for auth and media handoff is in `services/download-and-auth.md` § Auth vocabulary.

## Guidelines

Expand Down
2 changes: 1 addition & 1 deletion .trellis/spec/data/sources.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Adapters never read accounts. Credentials arrive per request as
`getVideoDetail(…, {authHeaders})`, `parsePlaylist(…, {authHeaders})`), and the
adapter keeps only what it needs (`NeteaseSource._withAuth` keeps `Cookie`). The
caller side is `SourceAuthContext` in `lib/services/account/`; the terms are
defined in `CONTEXT.md`.
defined in `services/download-and-auth.md` § Auth vocabulary.

## Errors: one `SourceApiException` subtype per source

Expand Down
2 changes: 1 addition & 1 deletion .trellis/spec/guides/cross-layer-thinking-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,6 @@ relinked in the same transaction.

### Anything about credentials

Name which of the `CONTEXT.md` terms applies: Stream Resolution Auth
Name which of the auth vocabulary terms (`services/download-and-auth.md`) applies: Stream Resolution Auth
(adapter request) and Media Request Credentials (byte request, empty by
construction) are different arrows. Changing either needs the user's approval.
32 changes: 29 additions & 3 deletions .trellis/spec/services/download-and-auth.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,32 @@
# Download pipeline, media handoff, accounts

Vocabulary: `CONTEXT.md`. Storage paths and Android permissions: ADR 0004.
Vocabulary: § Auth vocabulary below (the principle is recorded in ADR 0012).
Storage paths and Android permissions: ADR 0004.

## Auth vocabulary

Use these terms as defined; avoid the synonyms in brackets.

- **Source Auth Context** — the policy that decides which source credentials a
given source operation may use; distinct from account login and credential
storage. (Not: auth helper, header utility, account service.)
- **Media Handoff** — the move from a resolved stream URL to the audio or
download backend: redirect checks, per-hop media headers, resumed-download
range headers, and Source Auth Context credentials narrowed into Media Request
Credentials. (Not: playback URL helper, download header helper.)
- **Stream Resolution Auth** — credentials used while asking a source adapter to
resolve or refresh a stream URL; broader than Media Request Credentials and may
include Bilibili or YouTube auth that must never reach a media/CDN request.
(Not: media auth, playback headers.)
- **Auth For Play** — the user setting that gates credentials for stream
resolution, playback handoff, download, track detail and auth-aware
metadata/detail paths; it does not control playlist import, playlist refresh
or search. (Not: import auth, search auth.)
- **Media Request Credentials** — credentials allowed on the actual audio byte
request. There are none: `SourceHttpPolicy.mediaHeaders(String sourceType)`
(`lib/data/sources/source_http_policy.dart`) takes only the source id, so no
cookie or token can reach the media host through it; the former Netease media
allowlist was removed in `c09aec10`. (Not: stream auth, source auth.)

## Download (`lib/services/download/`)

Expand Down Expand Up @@ -35,8 +61,8 @@ Media byte requests — playback and download — carry only
`SourceHttpPolicy.mediaHeaders(sourceType)` plus `Range`.
`streamResolutionAuth` is carried through but deliberately unused. Stream
Resolution Auth is for asking the adapter for a URL, never for fetching the
bytes. Do not add credentials here without changing `CONTEXT.md` and getting the
user's approval.
bytes. Do not add credentials here without changing § Auth vocabulary and getting
the user's approval.

## Accounts and credentials (`lib/services/account/`)

Expand Down
4 changes: 2 additions & 2 deletions .trellis/spec/services/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ radio, search, cache, network, platform, update, backup, and the shared
`ToastService` / image-loading services in `lib/core/services/`.

Terms used here — Source Auth Context, Media Handoff, Auth For Play, Media Request
Credentials — are defined in `CONTEXT.md`; use them as defined.
Credentials — are defined in `download-and-auth.md` § Auth vocabulary; use them as defined.

## Guidelines

Expand All @@ -21,7 +21,7 @@ Error and logging rules shared with other layers: [../shared/errors-and-logging.

- [ ] Audio change → read `audio.md` and ADR 0003 (two backends). UI calls `AudioController`, never `FmpAudioService`; radio is the one exception (AGENTS.md § Boundaries).
- [ ] Download / storage path change → read `download-and-auth.md` and ADR 0004.
- [ ] Anything that decides which credentials go where → read `CONTEXT.md` first. Changing the auth boundary needs the user's approval (AGENTS.md § Conventions).
- [ ] Anything that decides which credentials go where → read `download-and-auth.md` § Auth vocabulary first. Changing the auth boundary needs the user's approval (AGENTS.md § Conventions).
- [ ] A new repeating timer, outbound host or cross-feature import → plan the static-rule entry with its reason.

## Quality Check
Expand Down
Empty file.
Empty file.
145 changes: 145 additions & 0 deletions .trellis/tasks/09-26-fmp-rewrite/milestones.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# 里程碑清單(ADR 0026)

> 每完成一個里程碑或平台任務,就更新它的「狀態」與驗收勾選。
> 範圍若在開工時要大改,先改這份清單並寫明原因。
> 「§7」「§8」指 `phase2-plan.md` 的第 7 節(第一個里程碑的必要驗證)與第 8 節(延後的實測)。

| # | 里程碑 | 依賴 | 狀態 |
|---|---|---|---|
| M1 | 骨架+曳光彈 | — | 進行中(`09-28-m1-skeleton-tracer`) |
| M2 | 完整播放 | M1 | 未開始 |
| M3 | 三音源、帳號與開發工具 | M2 | 未開始 |
| M4 | 音樂庫與同步 | M3 | 未開始 |
| M5 | 舊資料匯入 | M4 | 未開始 |
| M6 | 下載 | M5 | 未開始 |
| M7 | 歌詞 | M5 | 未開始 |
| M8 | 桌面整合 | M2 | 未開始 |
| M9 | 發版、更新與切換 | M1–M8 | 未開始 |
| L | Linux 平台 | M1 | 未開始 |
| Mac | macOS 平台 | Mac 到貨 | 未開始 |
| iOS | iOS 平台 | Mac 到貨 | 未開始 |

- M6、M7 互不依賴,可以對調。
- M8 放在 M7 之後,是因為它不擋試用。

## M1 骨架+曳光彈

- **做完**:Android、Windows 上能搜尋 B 站並連續播放兩首。
- **範圍**:
- `app/` 新專案,Flutter 用當時的 stable;`app/AGENTS.md`;flavor dev/prod 與 App 身分;單一實例鎖(ADR 0008、0015)。
- `fmp_lints` 與接線哨兵;CI 以 `dorny/paths-filter` 切分、五平台編譯、`always()` 彙總(ADR 0015 §9)。
- 平台層骨架與能力宣告(ADR 0009)。
- drift 最小 schema 與快照(ADR 0010)。
- log 門面、遮蔽函式、log 檔(ADR 0011)。
- 網路層(不含登入,ADR 0012)、錯誤模型(ADR 0013)。
- JS 執行環境、宿主 API 最小集、以「從檔案安裝」載入 B 站插件(ADR 0014)。
- 播放核心最小集:兩個後端、兩首的佇列、前瞻交接(ADR 0018)。
- `ToastHost` 與 `Toaster`(ADR 0023)。
- token、斷點、字型、slang 三語言骨架、播放快捷鍵(ADR 0024)。
- `app/` 發版 workflow 以 release-please dry-run 驗證(ADR 0022)。
- **限時探針**:YouTube.js 可行性。失敗就在 M3 以 Dart 實作 YouTube(ADR 0014)。
- **驗收**:
- [ ] 兩平台端到端操作
- [ ] §7 全部項目
- **之後**:開 Linux 平台任務。

## M2 完整播放

- **做完**:以單一音源像舊版一樣日常聽歌。
- **範圍**:
- 完整 `QueueModel` 與 `RecoveryPolicy`(ADR 0018);
- 播放頁方案 B、播放列三段、App 內快捷鍵全表、焦點三區(ADR 0024);
- 系統媒體控制;速度、音量、輸出裝置(E19);播放歷史(E15);
- 統一快取庫與離線狀態(ADR 0016);
- 背景排程器與啟動維護清單(ADR 0017),含 log 保留 7 天(ADR 0025)。
- **驗收**:
- [ ] 兩平台端到端操作
- [ ] ADR 0016、0017、0018 的測試

## M3 三音源、帳號與開發工具

- **做完**:三個音源都能搜尋、播放、登入。
- **範圍**:
- YouTube、網易雲插件;B 站分 P(E2)、Mix(E13)、電台直播(E12);
- 帳號與 `CredentialStore`、`AuthRequirement`(ADR 0012,E6);
- `1morr/fmp-plugins` repo、CI、`index.json`;插件頁;首次啟動引導(ADR 0014);
- Debug 頁與插件開發工具(ADR 0025、0015 §7);錯誤詳細頁、GitHub 回報、`.github/ISSUE_TEMPLATE/bug_report.yml`(ADR 0023)。
- **驗收**:
- [ ] 兩平台端到端操作
- [ ] §8:YouTube App 內網頁登入(ADR 0012)
- [ ] §8:加入 Debug 頁的里程碑實測(ADR 0025)

## M4 音樂庫與同步

- **做完**:建歌單、匯入並刷新平台歌單、匯入 Spotify/QQ 歌單。
- **範圍**:
- 關聯表與孤兒清理(ADR 0019);本機歌單(E3);
- 匯入與刷新(E4);僅元資料來源的匹配(E5);遠端歌單編輯(E7);
- 首頁排行(E14);新格式的備份與還原(E16)。
- **驗收**:
- [ ] 兩平台端到端操作
- [ ] `opencc` native assets 在各平台建置(ADR 0019)

## M5 舊資料匯入

- **做完**:首次啟動自動匯入舊版的歌單、曲目、歷史、設定、帳號;也能匯入舊備份檔。
- **範圍**:`legacy_import`(ADR 0010):先寫暫存庫、驗證後才換上;錯誤頁;「刪除舊版資料」。
- **驗收**:
- [ ] 以擁有者的真實資料副本完整匯入,比對筆數
- [ ] 擁有者開始以 dev flavor+真實資料副本日常試用

## M6 下載

- **範圍**:ADR 0020 全部(E8);匯入舊下載紀錄。
- **驗收**:
- [ ] 兩平台端到端操作
- [ ] §8:加入下載的里程碑實測(ADR 0020)

## M7 歌詞

- **範圍**:
- ADR 0021 全部(E9–E11);
- 官方 AI 插件 `openai-compatible`、`system-one`;
- 舊歌詞配對以 `manual` 匯入。
- **驗收**:
- [ ] 兩平台端到端操作
- [ ] §8:桌面歌詞、Android 懸浮歌詞、逐字的里程碑實測(ADR 0021)

## M8 桌面整合

- **範圍**:托盤、全域快捷鍵、開機自啟、關閉縮到托盤(E18);設定頁「鍵盤快捷鍵」列出兩組(ADR 0024)。
- **驗收**:
- [ ] Windows 端到端操作
- [ ] 錄製全域快捷鍵時,與 App 內快捷鍵衝突會提示

## M9 發版、更新與切換

- **範圍**:
- 應用內更新(ADR 0022,E17);
- `docs/user-guide.md` 與關於頁(ADR 0024);
- 切換 PR(ADR 0008 §決定 5):刪除根目錄舊專案、`docs/audit/`、ADR 0001–0007;`release.yml`、`ci.yml`、`orca.yaml`、`tool/release/` 改指向 `app/`。
- **驗收**(ADR 0026 §決定 5):
- [ ] 功能清單 E1–E17 與各 ADR 行為逐項通過
- [ ] 舊版與新版同機各量 5 次,新版每項不差超過 5%
- [ ] 真實資料副本完整匯入,並比對筆數
- [ ] 從 v1.11.0 實際升級:Android、Windows 安裝版、Windows 免安裝版(§8,ADR 0022)
- [ ] Windows 自行下載的安裝檔不帶 Mark of the Web
- [ ] App 身分比對(ADR 0008)
- [ ] 試用 2 週,沒有未解決的阻擋性 bug

## 平台任務

- **Linux**(M1 之後):
- 驗收在 VMware Workstation Pro 的 Ubuntu LTS 桌面虛擬機,X11 與 Wayland 各一次;日常開發用 WSL2。
- 之後每個里程碑在虛擬機跑一次冒煙測試。
- [ ] §8:沒有 keyring 時的 secure storage(ADR 0012)
- [ ] §8:X11/Wayland 桌面歌詞(ADR 0021)
- [ ] §8:AppImage 改名替換(ADR 0022)
- **macOS**(Mac 到貨後):
- [ ] §8:AVPlayer 對 B 站 DASH 與直播 HLS(ADR 0018)
- [ ] §8:桌面歌詞(ADR 0021)
- [ ] §8:更新不帶 quarantine(ADR 0022)
- **iOS**(Mac 到貨後,實機與付費帳號在該任務決定):
- [ ] §8:AVPlayer 對 B 站 DASH 與直播 HLS(ADR 0018)
- [ ] §8:Live Activity 本機逐行更新(ADR 0021)
- 各平台實機驗證完才發佈(ADR 0009)。
Loading
Loading