Akıllı Fitness Uygulaması: İstemci Mimarisi Spesifikasyonu
ÖğeBu, 3. Bölüm: Uygulamanıza Beyin Kazandırın ve 4. Bölüm: Kodsuz Uygulama Uygulama Planı'nda kullanılan yapıdır. Bu spesifikasyonu ön uç görünümleri, yeniden kullanılabilir kullanıcı arayüzü bileşenleri, istemci durumu yönetimi ve basit İngilizce test durumları için referans olarak kullanabilirsiniz.
Bu öğeye erişmek için oturum açın
Build It! serisinde kullanılan yapının tamamını görüntülemek ve kopyalamak için Google Geliştirici Profilinizle oturum açın.
Geliştirici Profili Gerekli
Geliştirici profili için uygun değilsiniz. Bu özelliği etkinleştirmek için Workspace yöneticinizle iletişime geçin.
Geliştirici Profili oluşturun
Tüm Build It! istemlerinin ve yapılarının kilidini açmak için ücretsiz bir Google Geliştirici Profili oluşturun.
Builder Central'a katılarak erişim elde edin
Tüm Build It! istemlerine ve yapılarına erişmek için ücretsiz Builder üye rozetinizi tek tıklamayla alın.
Durum: Planlama Oturumuna Hazır (Müşteri Planlama Yardımcısı ile Taslak Oluşturma)
Yardımcı Belge: Veri Mimarisi Spesifikasyonu
Mimari Hedef: AI Studio akıllı fitness prototipinin temiz, bakımı kolay, modüler ve test edilebilir bir şekilde yeniden oluşturulması.
0. Temel Teknik Altyapı ve Mühendislik Standartları
- Çalışma zamanı çerçevesi: Next.js (App Router, React 19) + Progresif Web Uygulaması (PWA) çevrimdışı öğe önbelleğe alma.
- Stil Mimarisi: Tailwind CSS v4 + Tailwind Variants (belirleyici bileşen stilleri için) + Lucide React (simgeler).
- Müşteri Eyalet Bölümü:
- Zustand (Yerel Oturum): Değişken spor salonu durumu (
useActiveSessionStore), kronometre zamanlayıcıları, etkin set arabellekleri ve önceden hesaplanmış adım sıralamasını yönetir. Telefon kilidi kurtarma içinlocalStorageile senkronize edildi. - TanStack Query (Sunucu Durumu):
weekly_plans,user_profiles,prsveworkout_logsiçin Firestore belge önbelleğe alma, arka planda yeniden doğrulama ve iyimser güncellemeleri yönetir.
- Zustand (Yerel Oturum): Değişken spor salonu durumu (
- Grafik Görselleştirme: Recharts (özel koyu spor salonu modu jetonlarıyla stillendirilmiş).
- Kimlik doğrulama: Tüm sunucu uç noktalarına iletilen hamiline ait jeton kimlik doğrulama başlığıyla Firebase Authentication.
1. Ön Uç İlkeleri ve Tasarım İlkeleri
- Spor salonu odaklı ergonomi: Antrenman sırasında terli ellerle tek elle dokunarak kullanılacak şekilde tasarlanmıştır. Geniş dokunma hedefleri (minimum 48x48 dp), yüksek kontrastlı okunabilirlik ve minimum düzeyde yazma gereksinimi.
- İyimser kullanıcı arayüzü ve çevrimdışı esneklik: Setleri kaydetme, dinlenme zamanlayıcılarını başlatma ve egzersizleri değiştirme işlemleri, kullanıcı arayüzünde anında (<16 ms) yanıt vermelidir. Arka plan senkronizasyonu, kullanıcıyı engellemeden
POST /api/workouts/logiçin sunucu kalıcılığını yönetir. - Strict Separation of Concerns: Dumb/Presentational components receive data and emit events using props; smart container views manage business logic, state stores, and API coordination.
- Aşamalı Değişiklik Kullanıcı Deneyimi: Yapay Zeka Koçu (
POST /api/coach/chat) tarafından oluşturulan öneriler, uygulama durumunda değişiklik yapılmadan önce açık [Planı Kabul Et] ve [Değiştir] kontrolleriyle etkileşimli aşamalı önizleme kartları olarak gösterilir. - Davranış Odaklı Kalite: Her sayfa, bileşen ve etkileşim, beklenen davranışı net bir şekilde tanımlayan basit İngilizce test senaryolarıyla eşleştirilir.
2. Uygulamada Gezinme ve Görünüm Hiyerarşisi
| Rota yolu | Görünüm Adı | Birincil Amaç | İçerdiği Temel Bileşenler |
|---|---|---|---|
/ |
Kök yönlendirme | /today adresine anında yönlendirme. |
(Yönlendirici yönlendirmesi) |
/today |
Bugünkü Antrenman Önizlemesi | Varsayılan görünüm. Haftanın geçerli gününü otomatik olarak belirler ve bugünün antrenman önizlemesini gösterir. | <BackButton />, <WorkoutHeader />, <CoachNoteCard />, <WorkoutExerciseSummary />, <WorkoutBlock />, <ExerciseCard />, <EmptyDayPlaceholder />, <ModifyWithCoachCard /> |
/workouts/:day |
Günlük Antrenman Önizlemesi | Haftanın belirli bir gününe (ör. /workouts/monday, /workouts/thursday) ait antrenman önizlemesini gösterir. |
<BackButton />, <WorkoutHeader />, <CoachNoteCard />, <WorkoutExerciseSummary />, <WorkoutBlock />, <ExerciseCard />, <EmptyDayPlaceholder />, <ModifyWithCoachCard /> |
/workout/active |
Etkin Oturum İzleyici | Yüksek riskli antrenman uygulama ekranı (setler, tekrarlar, zamanlayıcı). Alt gezinme çubuğu görünür kalır. | <ActiveSessionStickyHeader />, <ActiveExerciseCardHeader />, <CoachTipCard />, <CurrentSetTargetCard />, <SetNavigationRow />, <ExerciseSetsTable />, <ActiveRestTimerDock />, <SessionExerciseOverview />, <ActiveSessionControlsDock />, <SwapExerciseModal />, <FinishConfirmationModal /> |
/week |
Antrenman Programı / Hafta Görünümü | Haftalık hacim/süre toplamlarını içeren 7 günlük tam program genel bakışı. | <WeekHeader />, <WeeklyStatsSummary />, <DayScheduleCardList />, <DayScheduleCard />, <ModifyWeekWithCoachCard /> |
/coach |
Yapay Zeka Koç Sohbeti | Bağlama dayalı çipler ve aşamalı antrenman önerileriyle etkileşimli koçluk | <CoachHeader />, <ChatMessageList />, <ChatBubble />, <StagedProposalCard />, <ContextualPromptsBar />, <ChatInputDock />, <ContextBanner />, <ChatInputBar />, <SpeechToTextButton /> |
/progress |
İlerleme durumu ve analizler | Geçmiş antrenman günlükleri, kişisel rekor başarıları ve hacim grafikleri. | <ProgressHeader />, <PRShowcaseBanner />, <VolumeProgressChartCard />, <AllTimeStatsGrid />, <WorkoutHistorySection />, <HistorySessionCard />, <EmptyHistoryPlaceholder /> |
/settings |
Kullanıcı Profili ve Tercihleri | Ekipman profili, bildirimler ve 3 katmanlı bellek yönetimi. | <SettingsHeader />, <UserProfileCard />, <EquipmentSelectorCard />, <EquipmentToggleChip />, <PreferencesGroup />, <MemoryTierViewerCard />, <MemoryItemCard />, <AccountActionsGroup /> |
/exercises/:exerciseId |
Egzersiz Ansiklopedisi Ayrıntıları | Video ve form ipuçları içeren, derin bağlantı oluşturulabilir egzersiz kılavuzu (ör. /exercises/incline-db-bench-press). |
<BackButton />, <ExerciseVideoPlayer />, <TargetMusclesCard />, <HowToPerformCard />, <FormTipsCard /> |
3. Sayfa ve Görüntüleme Özellikleri
Görüntüle: DailyWorkoutView (/today ve /workouts/:day)
- Amaç: Belirli bir gün için planlanan antrenman programını (antrenman odağı, süre, hedef kas yükü dağılımı, koç notları, düz set blokları ve süper set blokları dahil) gösterir. Antrenman planlanmadığında ise temiz ve boş bir yedek durum gösterir.
- Görsel Anatomi:
- Üst:
<BackButton label="Back to Week" targetRoute="/week" />. - Başlık: Koşullu
"✓ Completed"rozeti, süre hapı ("⏱ 50 min") ve hedef kas harcanan efor düzeyi yüzdesi çubukları içeren tek satırlık başlık ("Today"veya haftanın günü). - Koç Notu: Simge ve yeşil kenarlık tonu içeren bağlamsal tavsiye kartı.
- Gövde:
<WorkoutExerciseSummary />kullanan egzersiz bloklarının kaydırılabilir listesi (border-left: 3px solid #a3e635ve🔁 SUPERSET BLOCKrozetli düz setler veya süper setler). - Boş durum:
<EmptyDayPlaceholder message="Nothing scheduled for this day" />. - Altbilgi İşlemi:
<ModifyWithCoachCard />(/coach?day=:daysayfasına yönlendirir).
- Üst:
Görünüm: WeekScheduleView (/week)
- Amaç: 7 günlük antrenman programının genel görünümünü gösterir. Bu görünümde, haftalık hacim/süre metrikleri, aktif antrenman günlerinin özel olarak seçilmiş bir listesi (programlanmamış/dinlenme günleri filtrelenir) ve haftalık planı yapay zeka koç ile düzenlemek için doğrudan bir kısayol bulunur.
- Görsel Anatomi:
<WeekHeader />, 3 sütunlu<WeeklyStatsSummary />(Toplam Süre, Toplam Hacim, Sıklık),<DayScheduleCard variant="normal" />kullanan planlanmış günlerin listesi (geçerli günde neon yeşilTODAYrozetiyle) ve<ModifyWeekWithCoachCard />(/coach?context=weeksayfasına yönlendirir).
Görünüm: CoachChatView (/coach)
- Amaç: Gemini eğitmen temsilcisiyle sohbet tabanlı koçluk merkezi. Motive edici ve stratejik antrenman tavsiyeleri verir, konuşmayı metne dönüştürme diktesini destekler ve açık kabul kontrolleriyle insan müdahalesi gerektiren aşamalı antrenman ayarlamaları yapar.
- Görsel Anatomi:
<CoachHeader />, kaydırılabilir<ChatMessageList />(<ChatBubble />ve<StagedProposalCard />), koşullu<ContextualPromptsBar />ve sabitlenmiş<ChatInputDock />(<ContextBanner />,[✕]kapatma +<ChatInputBar />+<SpeechToTextButton />ile).
Görünüm: ExerciseDetailView (/exercises/:exerciseId)
- Amaç: Otomatik olarak döngüye giren sessiz video gösterimi (
<ExerciseVideoPlayer />), birincil ve ikincil hedef kas rozetleri (<TargetMusclesCard />), sıralı adım adım performans talimatları (<HowToPerformCard />) ve form ipuçları (<FormTipsCard />) sunan, derin bağlantı oluşturulabilir ansiklopedi girişi.
Görünüm: ActiveWorkoutView (/workout/active)
- Amaç: Önemli antrenmanları uygulama ve setleri kaydetme ekranı. Canlı oturum kronometre durumunu, mevcut set hedeflerini, tekrar/ağırlık girişlerini, anlık onay işareti tamamlamayı (<16 ms), otomatik süper set değişimini, dokunma/sesli dinlenme zamanlayıcısı geri sayımlarını, egzersiz değişimini ve
POST /api/workouts/logiçin son kalıcılığı yönetir. - Görsel Anatomi:
<ActiveSessionStickyHeader />,<ActiveExerciseCardHeader />,<CoachTipCard />,<CurrentSetTargetCard />, kayan<ActiveRestTimerDock />(+30s,Skip),<SetNavigationRow />,<ExerciseSetsTable />(+ Add Set),<SessionExerciseOverview />, sabitlenmiş<ActiveSessionControlsDock />([⇄ SWAP EXERCISE]+[▶ START WORKOUT]/[⏸ PAUSE]/[▶ RESUME]),<SwapExerciseModal />ve<FinishConfirmationModal />.
Görünüm: ProgressView (/progress)
- Amaç: Zaman içindeki atletik gelişimi takip eder, son kişisel rekorları (
<PRShowcaseBanner />) kutlar, etkileşimli Recharts (4W | 3M | 1Yaçma/kapatma düğmeleriyle<VolumeProgressChartCard />) ile haftalık/aylık hacim trendlerini görselleştirir,<AllTimeStatsGrid />gösterir ve geçmişte tamamlanan antrenman oturumlarını (<WorkoutHistorySection />/<HistorySessionCard />) arşivler.
Görünüm: SettingsView (/settings)
- Amaç: Sporcu profili bilgilerini (
<UserProfileCard />), ekipman envanterini (<EquipmentSelectorCard />/<EquipmentToggleChip />), antrenman tercihlerini (LBS / KGiçin<PreferencesGroup />, dokunma, ses) yönetir ve yapay zeka antrenörünün 3 Katmanlı Yaşayan Belleği'nin (<MemoryTierViewerCard />/<MemoryItemCard />) şeffaf bir şekilde yönetilmesini ve silinmesini sağlar.
4. Yeniden Kullanılabilir Bileşen Kataloğu ve Arayüzleri
Uygulama genelindeki önemli TypeScript bileşeni prop sözleşmeleri:
// src/components/workout/WorkoutExerciseSummary.tsx
interface WorkoutExerciseSummaryProps {
blocks: Array<{
label?: string;
category?: string;
exercises: Array<{
exercise_id: string; // Canonical slug (e.g. 'incline-db-bench-press')
name: string; // Denormalized display name (e.g. 'Incline DB Bench Press')
target_sets: number;
target_reps: string | number;
rest_seconds?: number;
}>;
}>;
activeExerciseId?: string;
onSelectExercise?: (exerciseId: string) => void;
}
// src/components/week/DayScheduleCard.tsx
interface DayScheduleCardProps {
dayName: string;
dayShort: string;
subtitleLabel?: string;
isToday?: boolean;
title: string;
focusBadge: string;
durationMin: number;
volumeLbs?: number;
targetMuscles: string[];
variant?: 'normal' | 'condensed';
onPress: (dayName: string) => void;
}
// src/components/coach/StagedProposalCard.tsx
interface StagedProposalCardProps {
proposalId: string;
type: 'UPDATE_DAY' | 'UPDATE_WEEK';
targetDay?: string;
summaryDiff: string;
proposalData: any;
isApplied?: boolean;
onAccept: (proposalId: string, data: any) => void;
onModify: (summaryDiff: string) => void;
}
// src/components/workout/CurrentSetTargetCard.tsx
interface CurrentSetTargetCardProps {
setNumber: number;
targetWeightLbs: number;
targetReps: number;
isCompleted: boolean;
onWeightChange: (weight: number) => void;
onRepsChange: (reps: number) => void;
onToggleComplete: () => void;
}5. İstemci Durumu Yönetimi ve Veri Akışı Matrisi
5.1 Gecikme ve Yükleme Politikası: İki Hızlı Motor
- Spor Salonu Zemininde İyimser Kullanıcı Arayüzü (<16 ms): Spor salonu zemininde yapılan dokunma işlemleri (setleri işaretleme, ağırlıkları/tekrarları artırma, sekmeler arasında geçiş yapma ve ekipmanları açma/kapatma) yerel durumu günceller ve 16 milisaniye içinde yeniden oluşturulur. Kullanıcılar, ağırlık tutarken yükleme göstergeleri tarafından hiçbir zaman engellenmez.
- Eşzamansız işlemler için açık yükleme animasyonları ve göstergeleri:
- Yapay Zeka Koç Sohbetleri (
POST /api/coach/chat): Sohbet mesajı gönderildiğinde, Gemini yanıtını veya antrenman önerisini verene kadar sohbet akışında animasyonlu bir Koç Düşünüyor Dönen Baloncuğu gösterilir. - İlk soğuk başlatma ve ağ senkronizasyonu: Görüntüleme kapsayıcıları,
weekly_plansveyahistorical_workoutsgetirilirken iskelet yükleyiciler ve yüksek kontrastlı yükleme animasyonları gösterir. - Antrenman Gönderme (
[Finish]): Oturum yükü Cloud Firestore'daPOST /api/workouts/logkonumuna kaydedilirken bitiş onayı modalı etkin bir yükleme animasyonu gösterir.
- Yapay Zeka Koç Sohbetleri (
5.2 İstemci Mağazası Mimarisi ve Alan Sınırları
| Mağaza Katmanı | Durum Alanı ve Temel Özellikler | Kalıcılık ve Önbellek Politikası | Koordineli Arka Uç Sözleşmesi |
|---|---|---|---|
useActiveSessionStore (Zustand) |
sessionState (unstarted, running, paused), elapsedSeconds, currentStepIndex, steps: WorkoutStep[], loggedExercises. |
Telefon kilitlendiğinde veya yenilendiğinde kurtarma işleminin sorunsuz olması için her saniye localStorage ile senkronize edilir. |
Tamamlanan yükü POST /api/workouts/log adresine gönderir. |
useWeeklyPlanQuery (TanStack Query) |
Mevcut 7 günlük program, günlük antrenman nesneleri, süper set blokları, tamamlanma durumları (scheduled, completed). |
TanStack Query'de (staleTime: 5 min) önbelleğe alındı; başlatma sırasında önceden getirildi. |
Kullanıcı, POST /api/coach/chat tarafından gönderilen teklifler için [Accept Plan] simgesine dokunduğunda taahhüt edilir. |
useCoachChatStore (Zustand + TanStack) |
Kronolojik mesaj balonları, activeContext, istem çipleri, isCoachTyping: boolean, aşamalı öneriler. |
Gerçek zamanlı abonelik (onSnapshot) kullanılarak Firestore haftalık sohbet paketiyle senkronize edildi. |
Sorguları POST /api/coach/chat adlı üçüncü tarafa gönderir. |
useProgressQuery (TanStack Query) |
Geçmiş antrenman arşivi, PR rekor panosu (/users/{userId}/prs), tüm zamanların toplam hacmi, zaman aralığı filtresi (4W, 3M, 1Y). |
TanStack Query'de (staleTime: 10 min) önbelleğe alındı. |
Antrenman oturumu tamamlandığında hemen güncellenir. |
useUserProfileStore (TanStack Query) |
Ekipman envanteri, birimler (LBS/KG), ses/dokunma açma/kapatma düğmeleri, 3 katmanlı canlı bellek (Temel, Fizyolojik, Durumsal). |
Firestore user_profiles ile çift yönlü senkronizasyonla TanStack Query'de önbelleğe alınır. |
POST /api/coach/chat üzerinden memory_mutations kullanılarak otonom olarak güncellendi. |
useExerciseLibraryQuery (TanStack Query) |
Statik ansiklopedi girişleri, video URL'leri, birincil/ikincil kaslar, adımlar, form ipuçları. | Sonsuz TTL (staleTime: Infinity) ile agresif önbellek öncelikli. |
Değişmez Firestore exercises koleksiyonundan salt okunur. |
5.3 Önceden Hesaplanmış Etkin Aktivite Seansı Adım Grafiği
export interface WorkoutStep {
stepIndex: number; // 1-based index (e.g. 1 to 13)
totalSteps: number; // Total sets in the session
blockIndex: number; // Index of block in day plan
blockType: 'straight' | 'superset';
exerciseId: string; // Canonical slug
exerciseName: string; // Display name
setNumber: number; // Set index for this exercise (1, 2, 3...)
targetWeightLbs: number; // Target weight in lbs
targetReps: string | number; // Target reps (e.g. "8-10")
restSecondsAfter: number; // Prescribed rest duration
isCompleted: boolean; // Completion checkmark status
actualWeightLbs?: number; // User entered weight
actualRepsCompleted?: number; // User entered reps
}5.4 Uçtan Uca Veri Akışı ve Değişiklik Matrisi
| Kullanıcı Tetikleyici | Kaynak Görünüm | Müşteri Mağazası Değiştirildi | Kullanıcı arayüzü gecikmesi/Yükleme durumu | Arka Uç Koordinasyonu | Geri alma/Hata yönetimi |
|---|---|---|---|---|---|
[✓] Seti Tamamla'ya dokunun. |
/workout/active |
useActiveSessionStore |
<16ms (İyimser) |
Yerel oturum arabelleği güncellendi; ağ bekleme süresi yok. | Güvenilir yerel kalıcılıkla yerel bellek yazma. |
[Finish Workout] simgesine dokunun. |
/workout/active |
useActiveSessionStore, useWeeklyPlanStore ve useProgressStore |
Düğme, senkronizasyon sırasında yükleme döner simgesini gösterir. | POST /api/workouts/log adresine gönderilir. Firestore gününü completed olarak işaretler. |
Çevrimdışıysa yükü yerel senkronizasyon arabelleğine sıraya alır ve yeniden bağlandığında tekrar dener. |
[Accept Plan] simgesine dokunun. |
/coach |
useWeeklyPlanStore, useCoachChatStore |
Anlık kullanıcı arayüzü damgası ("✓ Plan Applied") |
proposal.data öğesini Firestore weekly_plans'a kaydeder. |
Ağ başarısız olursa kullanıcıya kısa ileti bildirim uyarısı gönderilir ve düğmeler yeniden deneme için etkin kalır. |
| Chat'te mesaj gönderme | /coach |
useCoachChatStore, useUserProfileStore |
İyimser balon ekleme + Koç Düşünüyor Döner Simgesi | Telefon aramaları POST /api/coach/chat. İşlemeler memory_mutations değerini döndürdü. |
Dönen simgeyi "Gönderilemedi. Yeniden denemek için dokunun." balonu gösterilir. |
| Ekipman Çipini Aç/Kapat | /settings |
useUserProfileStore |
Anında açma/kapatma (<16ms) |
Firestore user_profiles için arka planda yazma işlemini gönderir. |
Yazma işlemi başarısız olursa çip seçimini geri alır ve hata mesajı gösterir. |
Yapay Zeka Hafızası öğesini sil [🗑] |
/settings |
useUserProfileStore |
Anında silme (<16ms) |
Firestore'a silme mutasyonu gönderir user_profiles. |
Bellek öğesini geri yükler ve silme işlemi başarısız olursa kullanıcıyı uyarır. |
6. Uçtan Uca Kullanıcı Yolculukları ve Sade İngilizce Test Matrisi
- Paket 1: Uygulama Kabuğu, Gezinme ve Rota İşleme (Test 1.1-1.6: Kök başlatma yönlendirmesi, kalıcı dock, etkin aktivite seansı hızlı dönüşü, geçersiz haftanın günü yedek, bilinmeyen rota 404 yedek, geçersiz egzersiz derin bağlantı yedek).
- Suite 2: Daily Workout View & Block Rendering (Tests 2.1–2.7: Dynamic day title resolution, specific day route & back button, single versus superset block treatment, empty day placeholder, completed workout stamp, pure navigation on center play button, modify with coach context attachment).
- Paket 3: Haftalık Program Görünümü ve Günlük Program Kartı (Test 3.1-3.6: Haftalık istatistiklerin oluşturulması, yalnızca programlanmış günler filtresi, bugünün görsel açıklama metni, günlük kartta gezinme, haftalık gezinmeyi değiştirme, sıkıştırılmış varyant oluşturma).
- 4. Paket: Coach Sohbeti ve Aşamalı Mutasyon (4.1-4.7 testleri: Sohbet mesajı akışı oluşturma, bağlam banner'ı ekleme ve kapatma, istem çipi önceden doldurma, konuşma diktesi açma/kapatma, aşamalı mutasyon izolasyonu, teklif kabulü ve onayı, haftalık revizyon teklifi önizlemesi ve onayı).
- Paket 5: Egzersiz Ayrıntıları ve Ansiklopedi (Test 5.1-5.5: Egzersiz ayrıntılarını oluşturma, otomatik döngülü sessiz oynatma, video duraklatma açma/kapatma, birincil ve ikincil kas etiketleri, geçmişte geri gezinme ve yedek).
- 6. Paket: Aktif Antrenman Takipçisi ve Günlük Kaydı (Test 6.1-6.7: Başlatılmamış ilk durum ve manuel başlatma, kronometreyi duraklatma ve devam ettirme, dokunsal set günlüğü ve onay işareti açma/kapatma, süper set adım değişimi, egzersiz modülünü değiştirme ve değiştirme, bitiş onayı ve sunucu senkronizasyonu, yeniden yüklemede oturum durumu kurtarma).
- 7. Paket: İlerleme Durumu ve Geçmiş Analizleri (Test 7.1-7.5: İlerleme durumu kontrol paneline genel bakış oluşturma, PR vitrin banner'ı görüntüleme, grafik zaman aralığı açma/kapatma, boş geçmiş durumu, geçmiş oturum geçmişine dokunma).
- 8. Paket: Kullanıcı Ayarları, Ekipman ve Yapay Zeka Hafızası (8.1-8.4 numaralı testler: Ayarlar görünümünü oluşturma, ekipman açma/kapatma güncellemesi, birim değiştirme, yapay zeka hafızası öğesini silme).