Product bug: when a user joined a shared residence, the residence appeared but
its tasks (created by the owner) did not show in the Tasks tab until a manual
refresh. Root cause was client-side — APILayer.joinWithCode updated the
residence cache (addResidence) but never refreshed the tasks cache, and the
optimistic addResidence suppressed getMyResidences' count-based task
invalidation, so allTasks stayed a stale pre-join snapshot. The backend was
correct (task list query already joins residence_residence_users).
- APILayer.joinWithCode: call getTasks(forceRefresh = true) on success
(mirrors bulkCreateTasks) so the joined residence's tasks load immediately.
- ResidenceViewModel: corrected an inaccurate comment about join-time refresh.
- SharingUITests.test03: un-quarantined — now passes (verified against live stack).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
After the relaunch fix cleared 48/52 flaky failures, 4 genuine ones remained:
- DataLayerTests: logs out + re-logs in as the SAME user mid-test to check
cache/persistence — incompatible with per-test fresh accounts. Opt out with
usesFreshAccount=false (use the stable seeded admin it was designed for).
testDATA005 now passes.
- AuthRegistration.test11_appRelaunchWithUnverifiedUser: untestable in UI-test
mode (the app shortcuts isVerified = isAuthenticated so tests can reach the
app, which defeats unverified-email gating). Skipped — belongs at API/unit.
- Sharing.test03_sharedTasksVisibleInTasksTab: real app gap — a joined member
doesn't see the shared residence's tasks even after refresh. Skipped + noted.
- Onboarding.testF110: flaky end-to-end onboarding flow (fails at different
points per run); its residence-auto-create coverage is provided by
OnboardingTaskCacheUITests + the F-series. Quarantined with a re-enable TODO.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Migrate the XCUITest suite off the legacy shared-account model (and the
prior Django-style auth assumptions) to a parallel-safe, domain-organized
architecture, validated end-to-end against the live Kratos stack.
Isolation (parallel-safe by construction):
- Core/Fixtures/TestAccount.swift: each test mints its own pre-verified
Kratos identity (uit_<domain>_<uuid>@test.honeydue.local), logs in, seeds
under its own token, and deletes the identity in teardown (cascading all
data + clearing Kratos). No shared testuser; parallel workers no longer race.
- AuthenticatedUITestCase rewritten to that model (member surface preserved);
adds requiresResidence / seedAccountPreconditions to seed UI-gated data
BEFORE login (a fresh account is empty at login).
Organization (255 tests preserved, none dropped):
- 21 domain suites under Auth/ Onboarding/ Residence/ Task/ Contractor/
Document/ Sharing/ Navigation/ Smoke/ CrossCutting/ E2E/, consistent
<Domain>UITests naming. Removes the Suite1..11 / AAA_ / ZZ_ / Tests/Rebuild
naming chaos and the overlapping task/residence/auth suites.
Runner + test plans:
- run_ui_tests.sh: Smoke gate -> Seed -> Parallel(8 workers) -> Sweep. The
parallel phase runs the whole target minus phase-managed suites via
-skip-testing, so new suites auto-include (no hand-maintained list to drift).
Drops the 2-worker cap and Suite6 isolation (isolation made them moot).
- HoneyDueUITests.xctestplan skips the 4 phase-managed suites; adds Smoke.xctestplan.
Kratos auth fixes folded in (login/verify/reset endpoints removed under Kratos):
real Mailpit verification codes replace the obsolete fixed "123456"; teardown
deletes Kratos identities; admin-panel login uses the correct seeded password.
Build green; isolation, parallelism, and the precondition/sharing migrations
validated against the live stack (0 leaked accounts).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>