Code review 2026-09-09: fix PRs and deferred findings (tracking)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 20/100
- Issue type
- Documentation
- Clarity
- Needs clarification
- Activity status
- Active
- Tech stack
- android, csharp, sqlite
- Domain
- devtools, performance, security
Research direction
This is a tracking issue summarizing completed fixes and deferred findings, not a request for a specific change. Read the linked issues #288–#302 to find an individual task with a defined scope; this issue itself has no implementation entry point or completion criteria.
Written by the indexing model from the issue text.
Description
Tracking issue for the senior architecture / security / performance review of main at 35d86e1 (2026-09-09). Earlier audit for context: #167.
Overall verdict: a well-engineered codebase with a few sharp, high-consequence defects. Domain is dependency-free, the reference graph is acyclic, warnings-as-errors + AnalysisMode=All + StyleCop are enforced everywhere, every analyzer suppression carries a justification, SQL values are fully parameterised, actions are SHA-pinned, and the sync protocol uses a closed [JsonDerivedType] allowlist. The problems were concentrated in persistence correctness, error observability, lifecycle management and a few security edges on the sync / attachment path.
Fix PRs (each with a regression test that failed on main first)
| Prio | Finding | PR |
|---|---|---|
| P0 | force_unit_edits never deleted on save → Stärke history duplicated on every save, file grows quadratically |
#279 |
| P0 | IIncidentStore.SaveFailed had no subscriber → disk-full / locked / corrupt-DB failures were invisible while the UI said "gespeichert" |
#280 |
| P0 | Workspace never disposed on navigate-home → abandoned workspaces kept ticking, could still write journal entries and play alarms | #284 |
| P1 | Remote-supplied attachment name reached a temp path and the OS launcher (path traversal + type confusion across peers) | #285 |
| P1 | Trust store read race on the TLS callback, non-atomic write, dead accept-any-certificate branch | #286 |
| P1 | CI token not read-only; @claude workflow triggerable by anyone with contents: write; format-check not in CI; Dependabot gaps |
#287 |
| P1 | Android FileProvider exposed the whole cache dir; provider display names used verbatim as path segments | #303 |
Suggested merge order: #287 first (CI), then #279, #280, #284 (independent), then #285 before the Android PR (the Android PR is robust to either order, but #289 assumes #285).
Deferred findings, filed as issues
- Security: #288 (sync host: 6-digit PIN, SAN, fingerprint), #289 (Android attachment gate + temp janitor)
- Performance: #290 (coalesce saves), #291 (recent-file probes on UI thread), #292 (quadratic BuildMatrix), #293 (checklist O(N²) fan-out), #294 (Clear+re-add resets), #295 (sync fire-and-forget), #296 (audio queue timeout)
- Architecture: #297 (MasterDataSet out of Persistence), #298 (session port location + 5-file ceremony), #299 (Incident aggregate + German text in Domain), #300 (logging + global exception handlers)
- Hygiene: #301 (coverage, deterministic builds, AnalysisLevel, changelog enforcement), #302 (small cleanups checklist)
Items in #167 that this review re-confirmed as still open: Local/Remote session lockstep (#298), DispatcherTimerTicker subscriber isolation and unbounded remote file cache (#302), BuildChildren full rebuild (#294).
- Dominant language
- C#
- Stars
- 1
- Forks
- 3
- Avg merge
- 4h 49m
- Merged PRs (30d)
- 177
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from CodeForFire/lagebuch
-
Stammdaten: in the Checkliste editor the PFLICHT header is not aligned with its columnPossibly taken @Saad-elnagar claimed this 1 day ago. Openbug ux
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
CodeForFire/lagebuch#714 · 1 comment ·
Maintainers usually reply within 1 day
-
Stammdaten: on a phone the Fahrzeuge editor squeezes Wache and Funkrufname to nothingPossibly taken @Saad-elnagar claimed this 1 day ago. Openbug ux
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
CodeForFire/lagebuch#713 · 1 comment ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
CodeForFire/lagebuch#405 ·
Maintainers usually reply within 1 day
-
documentation good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
CodeForFire/lagebuch#349 ·
Maintainers usually reply within 1 day
-
documentation good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
CodeForFire/lagebuch#348 ·
Maintainers usually reply within 1 day
All issues in CodeForFire/lagebuch
Similar issues
-
clawsweeper:fix-shape-clear clawsweeper:needs-maintainer-review clawsweeper:no-new-fix-pr clawsweeper:not-repro-on-main impact:ux-release-blocker issue-rating: 🦪 silver shellfish P0
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
openclaw/openclaw-windows-node#1843 · 1 comment · 1 reaction ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
-
kind:ux size:S type:bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
elsa-workflows/elsa-foundation#3256 ·
Maintainers usually reply within 1 day
-
[Bug]: Revit selector reads process ids 2000-2099 as years (flaky AgentClientTests.AYearOrAProcessIdSelectsTheHost)Possibly taken @Wurschdhaud claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
pyrevitlabs/pyRevit#3817 ·
Maintainers usually reply within 1 day
-
bug effort:S P2
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
nightscout/nocturne#2449 ·
Maintainers usually reply within 1 day