chore: small cleanups from the 2026-09 code review (checklist)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
調査の方向性
The checklist names entry points across the project, including App.axaml.cs, MainActivity.OnPause, SystemAlarmService.cs, IncidentFile.SanitizeFileName, and DispatcherTimerTicker; read the relevant unchecked item and its referenced code first. Several items involve concurrency, lifecycle, security, or cancellation across subsystems, so select a narrowly scoped item and check whether it has already been split into another issue. Done means the chosen item is implemented and its behavior is covered by appropriate tests.
索引モデルが issue の本文から書いたものです。
説明
From the 2026-09-09 code review of main (35d86e1). Small, independent items; each is a short PR. Tick them off here.
- Four copy-paste JSON stores (
JsonRecentFilesStore,JsonLastSaveFolderStore,JsonLastPdfExportStorein AppLogic,JsonTrustStorein Sync) repeat the same read/deserialise/catch (JsonException)/write scaffolding. Extract one genericJsonFileStore<T>with the atomic temp+rename write that #286 added to the trust store. — #329 -
JsonTrustStore.Persist()mutates_cachebefore the disk write; ifFile.Movethrows, memory and disk diverge until the next write. Write first, then commit the in-memory change (noted in the #286 review). — #331 -
AboutViewModel.cs:68-77andLinksViewModel.cs:103-112are byte-identicalOpenUrlAsynctry/catch blocks; share one helper (also listed in #167 as "URL validation + opening duplicated"). — #332 -
RemoteIncidentSession.cs:496-501: a three-line comment block is duplicated verbatim. — #331 -
TasksSection.cs:54(PDF) usesDateTimeOffset.Nowto render "overdue", so the same incident exports differently depending on wall-clock time and the section is untestable. Pass theIClock(or an explicit "as of" timestamp) into the report. — #334 -
ForceUnit.StatusandRoleAssignment.Roleare free strings validated against nothing;Incident.StatusChangeText(:666) switches on the string, so a typo in master data silently falls through. Validate againstMasterDataSetat the session boundary, or model status as a small value type. — #355 -
App.CreateMainViewModel(App.axaml.cs:25) is a mutable public static delegate, a service-locator seam in an otherwise constructor-injected design. Pass the factory intoAppexplicitly. -
MainView.axaml.cs:19-32re-attachesPropertyChanged/Cancelled/… handlers to every newPendingPromptwithout detaching from the previous one. Same shape inIncidentWorkspaceView.axaml.cs:38,45. — #371 -
MainActivity.OnPausefires_ = _store?.FlushAsync()without awaiting; the last save can be lost when Android kills the process. Block briefly (with a timeout) as the desktopExithandler does. -
SystemAlarmServiceis never disposed on Android, so its temp WAV files leak. -
SystemAlarmService._voiceTempFilesis an unsynchronizedDictionarywritten byTempFileForonSerialAudioQueue's worker thread (SystemAlarmService.cs:107-125, reached fromPlayBlocking:80) and enumerated byDisposeon the UI thread at exit (:152) — a cue in flight during shutdown enumerates while the other thread mutates. Same class as theDispatcherTimerTickeritem below, but unlike that one this is genuinely cross-thread. While there: the temp path is a fixedlagebuch-{sound}.wavin the world-writable system temp dir (:116), with none of the per-open GUID directory and symlink refusalAttachmentTempPathsgives attachments — another local user can pre-create or symlink that path. (Found re-auditing #167.) - No
CancellationTokenSourceexists anywhere insrc/; tokens are only forwarded. A slow join, a large upload or a long PDF export cannot be cancelled by the user. Wire a cancel button on the join and export flows to a real CTS. -
IncidentFile.SanitizeFileName(#285) strips control characters but not Unicode format characters (e.g. U+202E RLO), so a display-name spoof is still possible in the Dateien list. StripUnicodeCategory.Formattoo. -
DispatcherTimerTickerallocates_subscribers.ToArray()on every tick and a throwing subscriber aborts the rest of the tick on the UI thread; isolate subscribers (also listed in #167). -
RemoteIncidentSession's per-device attachment cache underattachment-cache/is never evicted (also listed in #167). — split out as #382, tracked there. -
HttpClientHandlercreated inRemoteIncidentSessionis now disposed (#286); checkSystemAlarmService._voiceTempFilesandPdfLicense._configuredstatic state for testability while there.
- 主要言語
- C#
- スター
- 1
- フォーク
- 3
- 平均マージ
- 4時間 49分
- マージ済み PR(30日)
- 177
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
CodeForFire/lagebuch のほかの issue
-
Stammdaten: in the Checkliste editor the PFLICHT header is not aligned with its column対応中かも @Saad-elnagar が 1 日前に担当しました。 オープンbug ux
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
CodeForFire/lagebuch#714 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Stammdaten: on a phone the Fahrzeuge editor squeezes Wache and Funkrufname to nothing対応中かも @Saad-elnagar が 1 日前に担当しました。 オープンbug ux
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
CodeForFire/lagebuch#713 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
CodeForFire/lagebuch#405 ·
メンテナーはふだん 1 日以内に返信
-
documentation good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
CodeForFire/lagebuch#349 ·
メンテナーはふだん 1 日以内に返信
-
documentation good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
CodeForFire/lagebuch#348 ·
メンテナーはふだん 1 日以内に返信
CodeForFire/lagebuch の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
-
[Bug]: Revit selector reads process ids 2000-2099 as years (flaky AgentClientTests.AYearOrAProcessIdSelectsTheHost)対応中かも @Wurschdhaud が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
pyrevitlabs/pyRevit#3817 ·
メンテナーはふだん 1 日以内に返信
-
bug effort:S P2
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
nightscout/nocturne#2449 ·
メンテナーはふだん 1 日以内に返信
-
Python: Rejected system messages leave AgentChat permanently active対応中かも @Michael-Duck が今日担当しました。 オープンpython triage
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
microsoft/semantic-kernel#14638 ·
メンテナーはふだん 3 日以内に返信
-
audit:1 bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
NethermindEth/dotnet-libp2p#395 ·
メンテナーはふだん 1 日以内に返信