From 36986ebe00ddbbbe896e29640cf7795477b1eae0 Mon Sep 17 00:00:00 2001 From: kutesir Date: Mon, 13 Jul 2026 01:36:19 +0300 Subject: [PATCH] docs: log KC-72 (StreakLogicTests fix + runner recovery) Co-Authored-By: Claude Opus 4.8 --- KisaniCal/ISSUES.md | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/KisaniCal/ISSUES.md b/KisaniCal/ISSUES.md index 0a2db03..f309ae4 100644 --- a/KisaniCal/ISSUES.md +++ b/KisaniCal/ISSUES.md @@ -2643,3 +2643,50 @@ Not run end-to-end yet — needs the user to generate the App Store Connect API key and add the 3 secrets before the next merge to `main` actually exercises this path. `ExportOptions.plist` needed no changes (already `method: app-store` with the correct team ID). + +## KC-72 — Fix StreakLogicTests compile error + a genuinely broken CI runner + +Status: Implemented and build-verified (see Note — this is the first entry +all session with real `xcodebuild` verification, not just self-review) +Reported by: Discovered while testing KC-71's release pipeline +Area: CI infra + `KisaniCalTests/StreakLogicTests.swift` + +### Description +Two separate, real problems surfaced while trying to actually exercise the +CI/CD pipeline for the first time all session: + +1. **The self-hosted runner (`act_runner` on Serenity) was broken all + session.** It registered with Gitea successfully ("declare successfully" + in its log) but its job-polling loop never actually started — zero log + output afterward even at debug level, confirmed across multiple + restarts. Its log showed no successful job since 01:52 that morning, + meaning it silently missed every one of ~20 pushes to `develop` + throughout the session. Root cause not fully isolated (stuck goroutine, + suspected); fixed by a full re-registration from scratch (fresh token, + delete `.runner`, `act_runner register --no-interactive`, reload the + LaunchAgent) rather than continuing to debug the stuck process. +2. **Once CI actually ran for the first time, it immediately caught a + real, pre-existing compile error**, unrelated to anything built + tonight: `StreakLogicTests.swift` calls `WorkoutViewModel + .totalAchievedWorkoutDays(...)` and `TaskViewModel.completionCount + (...)`, both `@MainActor`-isolated, from a test class that wasn't + itself marked `@MainActor` — a Swift 6 strict-concurrency error. + `RecurrenceTests.swift` in the same target already uses the correct + pattern (`@MainActor final class RecurrenceTests: XCTestCase`); + `StreakLogicTests` was just missing the same annotation. + +### Change +- Added `@MainActor` to `StreakLogicTests`'s class declaration. +- Fixed the runner registration (infra only, no code change). + +Files: `KisaniCalTests/StreakLogicTests.swift`. + +### Note +**This is the one entry all session that's actually build-verified, not +self-reviewed.** Ran the full test suite locally via `xcodebuild test` +on a real simulator (iPhone 17 Pro, `DEVELOPER_DIR` pointed at the +external-volume Xcode) — **78/78 tests pass, 0 failures** — which +incidentally also confirms every other change from KC-51 through KC-71 +this session actually compiles cleanly, since they're all in the same +build. Long-pending session task "Run XCTest suite on simulator" is now +done.