docs: log KC-72 (StreakLogicTests fix + runner recovery)
All checks were successful
CI / build-and-test (push) Successful in 1m33s
CI / build-and-test (pull_request) Successful in 1m40s

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
kutesir
2026-07-13 01:36:19 +03:00
parent 3f8c9e1456
commit 887a75cc4f

View File

@@ -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.