2026-03-19 11:14:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerManager.kt
DefaultPlayerManager
Phase 7 fix: filter VIEW/SEND aliases by BuildConfig.SUPPORT_* flags so partially-limited flavors (photos) never activate unsupported handlers
2026-03-19 12:22:42
README.md
README Key Features
Added concise default-player integration bullet
2026-03-19 12:22:42
docs/README.md
docs README Key Features
Added concise default-player integration bullet
2026-03-19 12:22:42
docs/README_RU.md
README_RU Key Features
Added concise default-player integration bullet
2026-03-19 12:22:42
docs/README_UK.md
README_UK Key Features
Added concise default-player integration bullet
2026-03-19 14:30:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Phase 4 fix Medium: gate default player onboarding card with BuildConfig.SUPPORTS_DEFAULT_PLAYER so lite flavor never shows it
2026-03-19 14:30:00
app_v2/src/main/AndroidManifest.xml
StandaloneDocsPlayer
Phase 2 fix High: added text/xml, text/html, text/csv, text/markdown, application/json, application/xml MIME types to match MediaTypeUtils coverage
2026-03-19 14:30:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Phase 1 implementation: new helper routing IMAGE/GIF→Glide, VIDEO→ExoPlayer, AUDIO→AudioServiceController, PDF/EPUB/TEXT→full viewer managers
2026-03-19 14:30:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Phase 1 wiring: inject network deps, create StandaloneViewManager, replace all TODO stubs with viewManager.show(), add progressBar, onDestroy release
2026-03-19 15:00:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Fix: Glide.with(activity) → Glide.with(activity.applicationContext) to eliminate deprecation warning
2026-03-19 15:00:00
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
Fix: fallbackToDestructiveMigration() → fallbackToDestructiveMigration(dropAllTables=true) to fix Room API deprecation
2026-03-19 15:00:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBackgroundPhotosManager.kt
AudioBackgroundPhotosManager
Fix: remove redundant && resourceId != null (already encoded in shouldBeActive); eliminates always-true warning
2026-03-19 15:00:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BackgroundMusicManager.kt
BackgroundMusicManager
Fix: remove redundant && resourceId != null (already encoded in shouldLoadPlaylist); eliminates always-true warning
2026-03-19 15:00:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment
Fix: remove redundant || statistics == null (already covered by !show); eliminates always-false warning
2026-03-19 15:00:00
(63 files) @ApplicationContext/@ApplicationScope/@IoDispatcher
Hilt constructor params
Fix: add @param: use-site target to all Hilt qualifier annotations on val/var constructor params across 63 files to eliminate future-field-annotation warnings
2026-03-19 15:30:00
gradle.properties
gradle.properties
Remove 4 deprecated AGP flags (sdk.defaultTargetSdk, enableAppCompileTimeRClass, usesSdkInManifest.disallowed, r8.optimizedResourceShrinking); add generateSyncIssueWhenLibraryConstraintsAreEnabled=false to suppress spam; document kept flags
2026-03-19 15:30:00
app_v2/build.gradle.kts
build.gradle.kts
Migrate resourceConfigurations to androidResources.localeFilters; migrate kotlinOptions{jvmTarget} to tasks.withType().compilerOptions
2026-03-19 16:00:00
.gitattributes
git
Add .gitattributes enforcing LF line endings for all source files; normalize all 491 .kt files from mixed CRLF/LF to LF with dos2unix
2026-03-19 19:00:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt
DefaultPlayerViewHolder
Delegate btnSetDefault click to onSetDefaultClick callback; remove hardcoded Settings intent from ViewHolder
2026-03-19 19:00:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt
WelcomeViewModel
Inject SettingsRepository; add enablePrimaryMediaPlayer() to persist isPrimaryMediaPlayer=true from onboarding
2026-03-19 19:00:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Fix: provide onSetDefaultClick callback that enables activity-aliases and persists setting before opening Android default apps settings
2026-03-19 19:30:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
openDefaultPlayerChooser
Fix: replace ACTION_MANAGE_DEFAULT_APPS_SETTINGS (no media category on stock Android) with Intent.ACTION_VIEW per MIME type, which triggers Open With chooser where app IS visible; settings screen as fallback for Samsung/Xiaomi ROMs
2026-03-19 19:30:00
app_v2/src/main/res/values/strings.xml
welcome_default_player_description
Update description to correctly explain tap-Always flow instead of implying a settings page
2026-03-19 23:40:18
app_v2/.../DefaultPlayerHelper.kt
DefaultPlayerHelper
Phase 3 fix: enable aliases before opening chooser; MediaStore query + createChooser replaces broken ACTION_MANAGE_DEFAULT_APPS_SETTINGS
2026-03-19 23:40:18
.../AudioSettingsFragment.kt
setupDefaultPlayerButton
showSetDefaultDialogForType(audio/*)
2026-03-19 23:40:18
.../VideoSettingsFragment.kt
setupDefaultPlayerButton
showSetDefaultDialogForType(video/*)
2026-03-19 23:40:18
.../ImagesSettingsFragment.kt
setupDefaultPlayerButton
showSetDefaultDialogForType(image/*)
2026-03-19 23:40:18
.../DocumentsSettingsFragment.kt
setupDefaultPlayerButton
showSetDefaultDialogForType(application/pdf)
2026-03-19 23:40:18
.../MediaSettingsFragment.kt
setupDefaultPlayerButton
showSetDefaultDialogForType(video/*)
2026-03-19 23:40:18
res/layout/page_welcome_default_player.xml
layout
Phase 4 fix: replaced single button with 4 type-specific buttons (Audio/Video/Images/Docs), removed Skip per spec
2026-03-19 23:40:18
.../WelcomePagerAdapter.kt
DefaultPlayerViewHolder
Phase 4 fix: 4-button ViewHolder with BuildConfig flavor gating; WelcomePage.onSetDefaultForTypeClick replaces onSetDefaultClick
2026-03-19 23:40:18
.../WelcomeActivity.kt
setupViewPager
Phase 4 fix: 4 type callbacks; openDefaultPlayerChooser() removed
2026-03-19 23:40:18
AndroidManifest.xml
StandaloneAudioSender/VideoSender/ImageSender
Phase 6 fix: added ACTION_SEND_MULTIPLE to all share aliases
2026-03-19 23:40:18
.../StandalonePlayerActivity.kt
parseIncomingIntent
Phase 6 fix: handle ACTION_SEND_MULTIPLE, open first URI from list
2026-03-19 23:40:18
res/values*/strings.xml
settings_default_player_dialog_message
Updated dialog message/button text for chooser flow in EN/RU/UK
2026-03-20 00:34:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Fix onboarding default-player dead-end on API27: skip MediaStore without permission; add MIME-only chooser fallback before default apps settings
2026-03-20 00:48:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Fix default-player chooser routing: replace MIME-only fallback with FileProvider probe URI so VIEW aliases with content/file schemes are matched on API27
2026-03-20 00:48:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Ensure default-player onboarding page is shown when app is not default even if onboarding flag was previously set
2026-03-20 01:08:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Replaced createChooser with direct ACTION_VIEW launch to allow system Always default selection
2026-03-20 02:15:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Remove probe-file fallback approach; always attempt MediaStore query with try/catch for SecurityException; fall back to default apps settings when no real file found
2026-03-20 02:15:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
parseIncomingIntent
Detect and silently discard default_player_probe URIs to prevent 1-byte stubs from crashing viewers
2026-03-20 01:31:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Added URI permission pre-grants and ClipData for probe intent; added explicit fallback logging before opening Default apps
2026-03-20 01:45:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Replaced PackageInfo.longVersionCode with PackageInfoCompat.getLongVersionCode for API 27 compatibility
2026-03-20 02:20:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
goToMainActivity
Use TaskStackBuilder for first-run Settings navigation so Back returns to MainActivity instead of closing the app
2026-03-20 02:09:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Added debug-only launch diagnostics for external/default-player intent flow and component state snapshot
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
fix: show player controls for audio in standalone/external-open mode
2026-03-20 02:11:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
fix: show player controls for audio in standalone/external-open mode
2026-03-20 02:57:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager.release
fix: stop audio playback before releasing AudioServiceController so music does not continue after standalone player close
2026-03-20 02:34:17
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt
GoogleDriveAuthPlugin
Added debug-only Google Sign-In environment diagnostics (SHA-1, package, webClientId, GMS status, intent metadata)
2026-03-20 02:34:41
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt
GoogleDriveAuthPlugin
Fixed null-safe signature extraction in debug diagnostics for API compatibility
2026-03-20 03:20:00
app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt
BaseActivity
DEBUG: timing for attachBaseContext locale apply and setupViews duration per activity
2026-03-20 03:20:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity.setupViews
DEBUG: granular timing checkpoints (adapter/viewpager/tabmediator/disk-read/search) to diagnose 842ms startup
2026-03-20 03:20:00
app_v2/src/main/java/com/sza/fastmediasorter/core/util/LocaleHelper.kt
LocaleHelper.applyLocale
DEBUG: log caller class+method to identify source of redundant applyLocale calls
2026-03-20 03:20:00
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl.updateSettings
DEBUG: diff logging - compare new vs current settings to detect no-op DataStore writes
2026-03-20 03:20:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity.setupViews
DEBUG: probe URI detected before StandaloneViewManager init + per-step timing to diagnose WebView eager load
2026-03-20 02:50:15
app_v2/build.gradle.kts
buildTypes.debug
Restored applicationIdSuffix .debug for debug builds to align package with separate OAuth config
2026-03-20 02:50:15
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt
GoogleDriveAuthPlugin
Made code-10 Google Sign-In message variant-aware using current BuildConfig application id
2026-03-20 03:35:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt
enablePrimaryMediaPlayer
Perf: guard DataStore write with isPrimaryMediaPlayer check to eliminate 3 no-op writes per Set-as-Default session
2026-03-20 03:35:00
app_v2/src/main/java/com/sza/fastmediasorter/core/util/LocaleHelper.kt
LocaleHelper.getLanguage
Perf: in-memory cache for resolved language code; invalidated on saveLanguage to avoid repeated SharedPreferences/LocaleManager reads per Activity creation
2026-03-20 03:05:08
app_v2/build.gradle.kts
release signing precheck
Added explicit Gradle error for missing keystore.properties when release signing tasks are requested
2026-03-20 03:06:06
app_v2/src/main/AndroidManifest.xml
activity-alias
Fix setComponentEnabledSetting crash in all flavors with applicationIdSuffix
2026-03-20 03:11:37
keystore.properties
release signing config
Fixed storeFile path to local fastmediasorter.keystore in workspace root
2026-03-20 03:11:59
keystore.properties
release signing config
Adjusted storeFile path to ../fastmediasorter.keystore for module-relative resolution
2026-03-20 03:17:06
app_v2/build.gradle.kts
buildTypes.debug signing
Removed forced release signing for debug builds to keep separate debug/release keys
2026-03-20 03:28:22
app_v2/build.gradle.kts
debug signing config
Added optional custom debug signing via debug.keystore.properties with validation and fallback to default debug keystore
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager.loadAudioCoverArt
Fix MediaMetadataRetriever crash for content:// URIs - use setDataSource(context, uri) overload
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager.loadAudioCoverArt
Fix MediaMetadataRetriever crash for content:// URIs - use setDataSource(context, uri) overload
2026-03-21 02:28:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager.loadAudioCoverArt
Fix MediaMetadataRetriever crash for content:// URIs - use setDataSource(context, uri) overload
2026-03-21 02:30:31
scripts/add_to_dev_log.ps1
add_to_dev_log
Fix Join-Path for PowerShell 5 compatibility (3-arg form unsupported)
2026-03-21 02:31:27
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AudioMetadataCacheRepository.kt
AudioMetadataCacheRepository
New: local cache for audio cover art and metadata (filesDir/audio_metadata_cache/)
2026-03-21 02:31:33
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Add saveAudioMetadataLocally field
2026-03-21 02:31:33
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Add KEY_SAVE_AUDIO_METADATA_LOCALLY read/write
2026-03-21 02:31:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupSettings
Add saveAudioMetadataLocally field
2026-03-21 02:31:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Map saveAudioMetadataLocally in toBackupSettings/toAppSettings
2026-03-21 02:31:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt
ExportSettingsUseCase
Export saveAudioMetadataLocally to XML
2026-03-21 02:31:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Import saveAudioMetadataLocally from XML
2026-03-21 02:31:42
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
Add layoutSaveAudioMetadataLocally switch block
2026-03-21 02:31:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
AudioSettingsFragment
Add listener and observer for saveAudioMetadataLocally
2026-03-21 02:31:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Add local cache check and save in loadAudioCoverArt + searchOnlineAndDisplayCover
2026-03-21 02:31:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Inject AudioMetadataCacheRepository and OkHttpClient, pass to ImageLoadingManager
2026-03-21 02:31:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Include audio_metadata_cache in size calc, clearCache, 10GB warning dialog
2026-03-21 02:54:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
AudioPlaybackService
Add pendingDirection flag; seekToPrevious near track start sets DIRECTION_PREV and seeks to end to trigger STATE_ENDED-based backward navigation
2026-03-21 02:54:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
playLocalAudioViaService: always single-file mode (remove playlist branch) so STATE_ENDED reliably fires on track end and hardware NEXT press
2026-03-21 02:54:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
onAudioServicePlaybackEnded: always navigate next/prev using AudioPlaybackService.pendingDirection; fixes hardware NEXT button not advancing track
2026-03-21 03:55:49
app_v2/src/main/res/xml/widget_resource_launch_info.xml
widget_resource_launch_info
Fix: disable resize (resizeMode=none), widget is strictly 1x1
2026-03-21 03:55:53
app_v2/src/main/res/layout/widget_resource_launch.xml
widget_resource_launch
Add id to ImageView for dynamic icon setting
2026-03-21 03:56:00
app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt
ResourceLaunchWidgetConfigActivity
Save resource_path and resource_type to SharedPreferences for icon resolution
2026-03-21 03:56:05
app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetProvider.kt
ResourceLaunchWidgetProvider
Smart icon selection based on virtual path and resource type; cleanup path/type prefs on delete
2026-03-21 04:12:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel.loadSettings
Fix showCommandPanel priority: check files.isNotEmpty first to prevent overriding runtime value; apply same global-default logic as loadMediaFiles on initial load
2026-03-21 04:12:36
app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetProvider.kt
ResourceLaunchWidgetProvider
Fix: use setColorFilter(Color.WHITE) for RemoteViews tinting instead of app:tint
2026-03-21 04:12:43
app_v2/src/main/res/layout/widget_resource_launch.xml
widget_resource_launch
Fix: app:tint -> android:tint (RemoteViews supports android: namespace only)
2026-03-21 04:19:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager.updatePanelVisibility
Fix: respect showCommandPanel=true during slideshow - VIDEO_LIBRARY auto-slideshow no longer forces fullscreen when user prefers command panel
2026-03-21 04:23:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Add shuffleOnStart parameter to createIntent()
2026-03-21 04:23:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Add shuffleOnStart: shuffle file list on first load when launched from widget
2026-03-21 04:23:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
MainViewModel
Add NavigateToPlayerRandomMusic event and startRandomMusicPlayback()
2026-03-21 04:23:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Handle ACTION_RANDOM_MUSIC intent and NavigateToPlayerRandomMusic event
2026-03-21 04:23:32
app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomMusicWidgetProvider.kt
RandomMusicWidgetProvider
New widget: one-tap random music playback
2026-03-21 04:23:32
app_v2/src/main/res/layout/widget_random_music.xml
widget_random_music
New widget layout (1x1, icon + label)
2026-03-21 04:23:32
app_v2/src/main/res/xml/widget_random_music_info.xml
widget_random_music_info
New widget metadata (1x1, no config)
2026-03-21 04:23:32
app_v2/src/main/AndroidManifest.xml
AndroidManifest
Register RandomMusicWidgetProvider receiver
2026-03-21 04:23:32
app_v2/src/photos/AndroidManifest.xml
AndroidManifest (photos)
Remove RandomMusicWidgetProvider from photos flavor (no SUPPORT_AUDIO)
2026-03-21 16:48:27
app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt
LocalMediaScanner
Add CAMERA_FOLDER_PATH constant for DCIM/Camera
2026-03-21 16:48:50
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
ProvisionDefaultResourcesUseCase
Add Camera resource provisioning with DisplayMode.GRID; add displayMode param to createVirtualResource
2026-03-21 16:49:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
MainViewModel
Add openCameraPhotos() - finds Camera resource by path and navigates to Browse
2026-03-21 16:49:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Add ACTION_CAMERA_PHOTOS handling - calls viewModel.openCameraPhotos()
2026-03-21 16:49:20
app_v2/src/main/java/com/sza/fastmediasorter/widget/CameraPhotosWidgetProvider.kt
CameraPhotosWidgetProvider
New widget: 1x1 Camera Photos widget, opens DCIM/Camera in grid mode (SUPPORT_IMAGES flavors)
2026-03-21 16:49:38
app_v2/src/main/AndroidManifest.xml
AndroidManifest
Register CameraPhotosWidgetProvider receiver
2026-03-21 16:49:43
app_v2/src/main/res/values/strings.xml
strings
Add resource_camera, widget_camera_photos_label/description/resource_not_found (EN/RU/UK)
2026-03-21 17:20:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment
Add ‘Add to Home Screen’ button to pin ResourceLaunch widget from resource edit screen
2026-03-21 17:20:51
app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetProvider.kt
ResourceLaunchWidgetProvider
Handle pending pin config in onUpdate; add ACTION_WIDGET_PINNED receiver; expose PREFS_NAME and KEY_PENDING_* constants
2026-03-21 23:07:29
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general
add missing btnExportLogs to landscape layout
2026-03-21 23:26:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
Fix: advance background photo and refresh song label on audio auto-advance (onPlaybackEnded + onPlaybackReady)
2026-03-21 23:26:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Fix: advance background photo and refresh song label on audio auto-advance via service (onAudioServicePlaybackEnded + onAudioServiceReady)
2026-03-21 23:55:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
PlayerKeyboardHandler
Fix: getActivePlayer() returns service MediaController when background audio active, fixing play/pause from car head unit
2026-03-21 23:55:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Fix: PlayerKeyboardCallback.getActivePlayer() prefers audioServiceController.player over VideoPlayerManager ExoPlayer
2026-03-22 01:04:16
PLAN/SPEC_SETTINGS_TOGGLE_SUBTITLES.md
Settings toggles
Create spec for adding inline subtitle text to all settings toggles (EN/RU/UK)
2026-03-22 01:06:44
app_v2/src/main/AndroidManifest.xml
Widget receivers
Add android:label to all 5 widget receivers so they show distinct names in the widget picker instead of the app name
2026-03-22 01:25:03
app_v2/src/main/res/xml/widget_*_info.xml
Widget picker previews
Add android:previewLayout to all 5 widgets; create 5 widget_preview_*.xml layouts with representative sample content for Android 12+ widget picker
2026-03-22 01:27:54
app_v2/src/main/res/values/strings.xml
strings
Add 48 setting_*_desc subtitle strings for all settings toggles (EN)
2026-03-22 01:27:54
app_v2/src/main/res/values-ru/strings.xml
strings
Add 48 setting_*_desc subtitle strings for all settings toggles (RU)
2026-03-22 01:27:54
app_v2/src/main/res/values-uk/strings.xml
strings
Add 48 setting_*_desc subtitle strings for all settings toggles (UK)
2026-03-22 01:27:54
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
Add subtitle descriptions to 11 toggles in general settings
2026-03-22 01:27:54
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general
Add subtitle descriptions to 11 toggles in general settings landscape
2026-03-22 01:27:54
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
Add subtitle descriptions to 4 toggles in audio settings
2026-03-22 01:27:54
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Add subtitle descriptions to 2 toggles in video settings
2026-03-22 01:27:54
app_v2/src/main/res/layout/fragment_settings_images.xml
fragment_settings_images
Add subtitle descriptions to 6 toggles in images settings
2026-03-22 01:27:54
app_v2/src/main/res/layout/fragment_settings_documents.xml
fragment_settings_documents
Add subtitle descriptions to 4 toggles in documents settings
2026-03-22 01:27:54
app_v2/src/main/res/layout/fragment_settings_other.xml
fragment_settings_other
Add subtitle descriptions to 3 toggles in other settings
2026-03-22 01:27:54
app_v2/src/main/res/layout-land/fragment_settings_other.xml
fragment_settings_other
Add subtitle descriptions to 3 toggles in other settings landscape
2026-03-22 01:27:54
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback
Add subtitle descriptions to 9 toggles in playback settings
2026-03-22 01:27:54
app_v2/src/main/res/layout/fragment_settings_destinations.xml
fragment_settings_destinations
Add subtitle descriptions to 4 toggles in destinations settings
2026-03-22 01:41:13
app_v2/src/main/res/xml/widget_resource_launch_info.xml
widget_resource_launch_info.xml
Added widget_preview_resource_launch fallback image
2026-03-22 01:41:15
app_v2/src/main/res/xml/widget_random_music_info.xml
widget_random_music_info.xml
Added widget_preview_random_music fallback image
2026-03-22 01:41:17
app_v2/src/main/res/xml/widget_favorites_info.xml
widget_favorites_info.xml
Added widget_preview_favorites fallback image
2026-03-22 02:00:39
app_v2/src/main/res/xml/widget_continue_reading_info.xml
widget_continue_reading_info.xml
Added widget_preview_continue_reading fallback image
2026-03-22 02:04:02
app_v2/src/main/res/drawable/widget_preview_*.png
Widget preview PNGs
Add 5 custom 320x320 PNG preview images for all widgets; update android:previewImage references from generic icons to dedicated preview PNGs
2026-03-22 02:16:51
app_v2/src/main/res/values/dimens.xml
dimens
Add checkbox_subtitle_margin_start dimen (48dp) for checkbox subtitle alignment
2026-03-22 02:16:51
app_v2/src/main/res/values/strings.xml
strings
Add 21 cb_*_desc subtitle strings for boolean checkboxes (EN)
2026-03-22 02:16:51
app_v2/src/main/res/values-ru/strings.xml
strings
Add 21 cb_*_desc subtitle strings for boolean checkboxes (RU)
2026-03-22 02:16:51
app_v2/src/main/res/values-uk/strings.xml
strings
Add 21 cb_*_desc subtitle strings for boolean checkboxes (UK)
2026-03-22 02:16:51
app_v2/src/main/res/layout/activity_add_resource.xml
activity_add_resource
Add subtitle descriptions to 16 boolean checkboxes in local/SMB/SFTP/cloud sections
2026-03-22 02:16:51
app_v2/src/main/res/layout/dialog_player_settings.xml
dialog_player_settings
Add subtitle descriptions to cbRepeatVideo and cbShowSubtitles
2026-03-22 02:16:51
app_v2/src/main/res/layout/activity_dropbox_folder_picker.xml
activity_dropbox_folder_picker
Add subtitle descriptions to cbAddAsDestination and cbScanSubdirectories
2026-03-22 02:16:51
app_v2/src/main/res/layout/activity_google_drive_folder_picker.xml
activity_google_drive_folder_picker
Add subtitle descriptions to cbAddAsDestination and cbScanSubdirectories
2026-03-22 02:16:51
app_v2/src/main/res/layout/activity_onedrive_folder_picker.xml
activity_onedrive_folder_picker
Add subtitle descriptions to cbAddAsDestination and cbScanSubdirectories
2026-03-22 02:27:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/MediaExtensions.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt,app_v2/src/main/res/values/strings.xml,docs/README.md,docs/LIMITATIONS.md
MediaExtensions,VideoPlayerManager,strings
Remove AVI from supported video formats (code, UI strings, all documentation)
2026-03-22 02:37:02
app_v2/src/main/res/drawable/ic_next_circle_red.xml
drawable
Added red circle icon for next button
2026-03-22 02:37:02
app_v2/src/main/res/layout/custom_player_controls.xml
custom_player_controls
Made next button twice as wide and used red circle icon
2026-03-22 02:38:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioWaveParticleView.kt
AudioWaveParticleView
Randomize all visual params per session: wave count 5-12, step ±20%, stroke 3-6px, hue ±30%, amplitude 28-48%, particles 15-55, radius 1-6px, speed ±50%
2026-03-22 02:39:04
app_v2/src/main/res/drawable/ic_next_circle_red_pressed.xml
drawable
Added pressed state icon for next button
2026-03-22 02:39:04
app_v2/src/main/res/drawable/ic_next_circle_selector.xml
drawable
Added selector for next button pressed state
2026-03-22 02:39:04
app_v2/src/main/res/layout/custom_player_controls.xml
custom_player_controls
Applied pressed state selector to exo_next_file
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\activity_player_unified.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\custom_player_controls.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\player_deprecated_google_lens_image_button_content.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\player_deprecated_translate_image_button_content.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\player_document_fullscreen_exit_button_content.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\player_epub_controls_overlay_content.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\player_pdf_controls_overlay_content.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\player_pdf_exit_fullscreen_button_content.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:41:10
P:\ANDROID\FastMediaSorter_mob_v2\app_v2\src\main\res\layout\player_text_viewer_container_content.xml
layout
Applied red glow selector player_button_tint to app:tint
2026-03-22 02:45:43
app_v2/src/main/res/layout/activity_player_unified.xml
layout
Applied red glow selector player_button_tint to textColor for text buttons
2026-03-22 02:48:53
app_v2/src/main/res/color/selector_themed_button_tint.xml
selector_themed_button_tint
New color selector: pressed=#FF3333, default=text_color_primary (for themed backgrounds)
2026-03-22 02:48:56
app_v2/src/main/res/layout/activity_player_unified.xml
btnTranslateEpubCmd
Add missing selector_player_button_tint to btnTranslateEpubCmd
2026-03-22 02:48:59
app_v2/src/main/res/layout/player_search_panel_content.xml
btnSearchPrev,btnSearchNext,btnCloseSearch
Replace hardcoded #FFFFFF tint with selector_player_button_tint for press highlight
2026-03-22 02:49:03
app_v2/src/main/res/layout/activity_browse.xml
fabScrollToTop,fabPageUp,fabPageDown,fabScrollToBottom
Replace hardcoded @color/white tint with selector_player_button_tint for press highlight
2026-03-22 02:49:06
app_v2/src/main/res/layout/player_lyrics_viewer_container.xml
btnTranslateLyrics,btnCloseLyricsViewer
Replace text_color_primary tint with selector_themed_button_tint for press highlight
2026-03-22 02:55:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
setupLyricsViewerControls
Fix lyrics viewer close/translate buttons hidden behind status bar and landscape nav bar - add WindowInsets listener to lyricsViewerContainer
2026-03-22 03:48:41
app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt
LocalMediaScanner
Added VIRTUAL_PATH_CAMERA_PHOTOS, removed CAMERA_FOLDER_PATH
2026-03-22 03:48:44
app_v2/src/main/java/com/sza/fastmediasorter/util/VirtualPathUtils.kt
VirtualPathUtils
Added VIRTUAL_PATH_CAMERA_PHOTOS to ALL_VIRTUAL_PATHS
2026-03-22 03:50:01
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/MediaStoreRepository.kt
MediaStoreRepository
Added findCameraFolderPath method
2026-03-22 03:50:03
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt
MediaStoreRepositoryImpl
Implemented findCameraFolderPath
2026-03-22 03:50:05
app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt
LocalMediaScanner
Updated scanFolder and getFileCount to handle VIRTUAL_PATH_CAMERA_PHOTOS
2026-03-22 03:50:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MigrateCameraResourceUseCase.kt
MigrateCameraResourceUseCase
Created generic migration for Camera physical to virtual resource
2026-03-22 03:50:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
ProvisionDefaultResourcesUseCase
Provision Camera as virtual URL
2026-03-22 03:50:38
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ScanLocalFoldersUseCase.kt
ScanLocalFoldersUseCase
Added scan fallback logic for virtual camera setup
2026-03-22 03:51:54
app_v2/src/main/res/layout/dialog_folder_selection.xml
dialog_folder_selection
Added btnVirtualCameraPhotos
2026-03-22 03:51:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
MainViewModel
Trigger Camera migration and updated openCameraPhotos
2026-03-22 03:51:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
Added mapping for VIRTUAL_PATH_CAMERA_PHOTOS
2026-03-22 03:52:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Wired up new Camera Photos button
2026-03-22 04:07:14
app_v2/src/main/res/values/strings.xml
strings.xml
Added Camera Photos virtual folder strings (EN)
2026-03-22 04:07:18
app_v2/src/main/res/values-ru/strings.xml
strings.xml (ru)
Added Camera Photos virtual folder strings (RU)
2026-03-22 04:07:22
app_v2/src/main/res/values-uk/strings.xml
strings.xml (uk)
Added Camera Photos virtual folder strings (UK)
2026-03-22 04:08:46
docs/FEATURES.md
FEATURES.md
Added Camera Photos virtual folder documentation (EN)
2026-03-22 04:08:53
docs/FEATURES_RU.md
FEATURES_RU.md
Added Camera Photos virtual folder documentation (RU)
2026-03-22 04:09:00
docs/FEATURES_UK.md
FEATURES_UK.md
Added Camera Photos virtual folder documentation (UK)
2026-03-22 04:09:33
app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetProvider.kt
ResourceLaunchWidgetProvider
Added icon mapping for VIRTUAL_PATH_CAMERA_PHOTOS
2026-03-22 04:17:18
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCaseTest.kt
ProvisionDefaultResourcesUseCaseTest
Updated assertions to expect VIRTUAL_PATH_CAMERA_PHOTOS and ALL_IMAGES
2026-03-22 04:17:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ScanLocalFoldersUseCase.kt
ScanLocalFoldersUseCase
Fixed missing DisplayMode import
2026-03-22 04:21:46
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/MigrateCameraResourceUseCaseTest.kt
MigrateCameraResourceUseCaseTest
Added tests for camera virtual folder migration
2026-03-22 05:21:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SleepTimerManager.kt
SleepTimerManager
guard stopVinylAnimation log: only emit when animator was running
2026-03-22 05:22:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
downgrade TOUCH_ZONE_DEBUG Playback ended from warn to debug
2026-03-22 05:22:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerGestureCallbackImpl.kt
PlayerGestureCallbackImpl
downgrade TOUCH_ZONE_DEBUG swipe logs from warn to debug
2026-03-22 05:22:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationManager.kt
PlayerNavigationManager
downgrade all TOUCH_ZONE_DEBUG navigation logs from warn to debug
2026-03-22 05:22:09
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
SmbDataSource
increase SMB stream log threshold from 1MB to 10MB to reduce log noise
2026-03-22 05:22:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
suppress redundant releasePlayer already-released log (expected no-op path)
2026-03-22 05:22:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
downgrade PanelGeom/updateCommandAvailability/updateSlideshowButtonColor logs from debug to verbose
2026-03-22 05:22:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
smart preload cancellation: only cancel stale jobs not in new adjacent set
2026-03-22 05:22:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
change preloadJobs from MutableList to MutableMap for path-keyed smart cancellation
2026-03-22 05:44:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
getLastNetworkSyncTimestamp
rethrow CancellationException to suppress false-positive error log on SettingsActivity destroy
2026-03-22 05:44:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
calculateCacheSize
rethrow CancellationException to suppress false-positive error log on SettingsActivity destroy
2026-03-22 05:46:03
app_v2/src/main/res/layout/page_welcome_default_player.xml
page_welcome_default_player
Fix landscape: wrap content in ScrollView so buttons are always reachable
2026-03-22 05:46:03
app_v2/src/main/res/layout-land/page_welcome_default_player.xml
page_welcome_default_player (land)
New landscape layout: two-column with icon+description left, action buttons right
2026-03-22 05:46:04
app_v2/src/main/res/layout-land/page_welcome_permissions.xml
page_welcome_permissions (land)
New landscape layout: icon+title left column, description+grant button right column
2026-03-22 05:46:04
app_v2/src/main/res/values-land/dimens.xml
values-land/dimens
Add compact welcome_ dimens for landscape (icon 56dp, reduced margins/padding/text)
2026-03-22 05:54:40
docs/FEATURES.md
Section17+header
add Android 8+ platform note and 2 missing widgets (RandomMusic, CameraPhotos) to all 3 language docs
2026-03-22 06:16:30
docs/README.md
README
Added Google Play Store link to Download section
2026-03-22 06:16:30
README.md
README
Added Google Play Store link to Download section
2026-03-22 06:16:30
docs/README_RU.md
README_RU
Added Google Play Store link to Download section (RU)
2026-03-22 06:16:30
docs/README_UK.md
README_UK
Added Google Play Store link to Download section (UK)
2026-03-22 06:27:21
README.md, docs/README.md, docs/README_RU.md, docs/README_UK.md
Documentation
Add predefined resources (All Music/Videos/Photos), hardware button support bullet, car stereo use case (#10), enhanced tablet photo frame scenario (#7)
2026-03-22 06:37:58
index.html, index-ru.html, index-uk.html, sitemap.xml, _config.yml
SEO
Comprehensive SEO overhaul: improved titles/descriptions/keywords (3 langs), added author/robots/theme-color meta, OG image → real screenshot, Twitter summary_large_image, h2→h3 heading hierarchy fix, expanded JSON-LD schema (featureList/keywords/downloadUrl/screenshot/version), new car stereo+tablet scenarios, predefined resources + hardware buttons in feature lists, sitemap lastmod updated
2026-03-22 06:38:21
docs/README.md,docs/README_RU.md,docs/README_UK.md,README.md,index.html,index-ru.html
Usage Scenarios
Expand scenario 8 with detailed VR use cases: giant virtual cinema, VR music player, wall-sized VR photo frame
2026-03-22 06:43:32
docs/FAQ.md,docs/FAQ_RU.md,docs/FAQ_UK.md
FAQ
Fix Android minimum version: API 28 -> API 26 (Android 8+), add Legacy flavor API 23 note
2026-03-22 15:54:38
app_v2/src/main/res/layout/fragment_settings_documents.xml
fragment_settings_documents.xml
Added missing description for show_pdf_thumbnails switch
2026-03-22 16:10:25
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback.xml
Refactored Touch Zones switches to include inline descriptions
2026-03-22 16:12:06
app_v2/src/main/res/layout/fragment_settings_destinations.xml
fragment_settings_destinations.xml
Added description for switchGoToNextAfterCopy and string keys
2026-03-22 16:19:11
app_v2/src/main/res/
strings.xml
Bulk updated UI trigger hints in EN, RU, UK
2026-03-22 16:50:24
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
ResourceType
Added isNetworkResource property
2026-03-22 16:50:24
app_v2/src/main/res/values/strings.xml
strings
Added strings for network delete dialog
2026-03-22 16:50:24
app_v2/src/main/res/values-ru/strings.xml
strings
Added Russian translations for network delete dialog
2026-03-22 16:50:24
app_v2/src/main/res/values-uk/strings.xml
strings
Added Ukrainian translations for network delete dialog
2026-03-22 16:50:24
app_v2/src/main/res/layout/dialog_network_delete_confirmation.xml
dialog_network_delete_confirmation
Created layout for network delete confirmation
2026-03-22 16:50:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Pass MediaFiles and MediaResource to showDeleteConfirmation
2026-03-22 16:50:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Added logic to show Network Delete Dialog with dont-show-again option
2026-03-22 17:09:04
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/FavoritesExportModel.kt
FavoritesExportModel
Add data models for favorites export/import JSON format
2026-03-22 17:09:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportFavoritesUseCase.kt
ExportFavoritesUseCase
Implement favorites export to JSON in Downloads folder
2026-03-22 17:10:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportFavoritesUseCase.kt
ImportFavoritesUseCase
Implement favorites import from JSON with conflict resolution and preview
2026-03-22 17:10:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt
BackupRestoreViewModel
Add favorites export/import state flows and trigger methods
2026-03-22 17:10:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
Add favorites export/import UI with file pickers, preview and result dialogs
2026-03-22 17:10:20
app_v2/src/main/res/layout/fragment_settings_backup_restore.xml
fragment_settings_backup_restore
Add Export Favorites and Import Favorites buttons to Backup tab
2026-03-22 17:10:20
app_v2/src/main/res/values/strings.xml
strings
Add EN/RU/UK localized strings for favorites export/import feature
2026-03-22 17:10:20
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/FavoritesDao.kt
FavoritesDao
Add getAllFavoritesSync() and getFavoritesCount() methods
2026-03-22 19:34:03
PLAN/IMPROVEMENT_PROPOSAL.md
IMPROVEMENT_PROPOSAL
Comprehensive revision: removed completed items, marked III.2/III.3/III.4 as in-progress, updated IV.1 LOC table (all files grew, IntegrationTestRunner 4471 LOC), added new items III.11-14 and IX.6, added IV.10 debug-code section
2026-03-22 20:13:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Fix RV thumbnail load race: retry notifyItemRangeChanged via OnChildAttachStateChangeListener when post{} fires before items are bound
2026-03-23 13:40:39
PLAN/IMPROVEMENT_PROPOSAL.md
IMPROVEMENT_PROPOSAL
Updated: marked III.2/III.3/III.4 as completed, added 11 new proposals (X.9-X.19), refreshed prioritization list
2026-03-23 13:40:46
PLAN/IMPROVEMENT_ROADMAP.md
IMPROVEMENT_ROADMAP
Full rewrite: added TIER 0 security/compliance, re-prioritized security-first execution, added 7 new tier items, phased sprint plan, change delta table
2026-03-23 13:51:11
PLAN/SPEC_EDGE_TO_EDGE_X15.md
X.15 Edge-to-Edge
Created detailed task specification for edge-to-edge migration (X.15) in Russian
2026-03-23 14:24:17
gradle.properties
org.gradle.jvmargs/kotlin.daemon.jvm.options
Fixed hardcoded tmpdir path from P:/ANDROID to D:/GIT to match current machine
2026-03-23 14:54:00
gradle/wrapper/gradle-wrapper.properties
distributionUrl
Updated Gradle wrapper from 8.11.1 to 9.3.1 (required by AGP minimum version check)
2026-03-23 15:05:29
app_v2/src/.../core/ui/BaseActivity.kt
BaseActivity
enableEdgeToEdge() replaces setDecorFitsSystemWindows(true); added shouldEnableEdgeToEdge() hook
2026-03-23 15:05:43
app_v2/src/.../ui/player/PlayerActivity.kt
PlayerActivity
Override shouldEnableEdgeToEdge()=false to preserve custom immersive edge-to-edge
2026-03-23 15:05:43
app_v2/src/main/res/values*/themes.xml
Themes
Transparent system bars for edge-to-edge; removed windowOptOutEdgeToEdgeEnforcement
2026-03-23 15:05:44
app_v2/src/main/res/layout*/activity_*.xml
Layouts
Removed fitsSystemWindows from 8 ConstraintLayout-rooted layouts; kept on 5 CoordinatorLayout roots
2026-03-23 15:05:45
Multiple Activities
Edge-to-Edge X.15
Added WindowInsets listeners to 10 Activities for status/nav bar padding
2026-03-23 15:05:45
app_v2/build.gradle.kts
build config
Fixed proguard-android-optimize.txt, staging shrinkResources, added compose plugin
2026-03-23 15:05:46
wear/build.gradle.kts
build config
Added compose compiler plugin for Kotlin 2.x compatibility
2026-03-23 15:05:49
app_v2/src/main/res/values*/themes.xml
Themes
Transparent system bars for edge-to-edge; removed windowOptOutEdgeToEdgeEnforcement
2026-03-23 15:05:56
app_v2/src/main/res/layout*/activity_*.xml
Layouts
Removed fitsSystemWindows from 8 ConstraintLayout roots; kept on 5 CoordinatorLayout roots
2026-03-23 15:06:03
Multiple Activities
Edge-to-Edge X.15
Added WindowInsets listeners to 10 Activities for status/nav bar padding
2026-03-23 15:06:09
app_v2/build.gradle.kts, wear/build.gradle.kts
build config
Fixed proguard-android-optimize.txt, staging shrinkResources, added compose plugin for Kotlin 2.x
2026-03-23 16:39:51
app_v2/src/main/res/values/strings.xml
strings.xml
Added 56 missing string resources (cb__desc, setting_ desc, widget , import_fav_ , export_fav_*, network delete dialog, audio cache, welcome default player)
2026-03-23 16:40:02
app_v2/src/main/res/values/dimens.xml
dimens.xml
Added checkbox_subtitle_margin_start (16dp) for Add Resource checkbox subtitles
2026-03-23 16:40:02
app_v2/build.gradle.kts
build.gradle.kts
Updated Hilt 2.50->2.57.2, Room 2.6.1->2.7.1, hilt-work 1.1.0->1.2.0 for Kotlin 2.2 metadata compat; added SUPPORTS_DEFAULT_PLAYER flag per flavor
2026-03-23 16:40:02
app_v2/src/.../DefaultPlayerHelper.kt
DefaultPlayerHelper
Added isAlreadyDefaultPlayer, applyButtonState, showSetDefaultDialogForType, openChooserOrFallbackFromActivity methods
2026-03-23 16:47:42
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Added 118 Russian translations for all new string resources
2026-03-23 16:47:46
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Added 118 Ukrainian translations for all new string resources
2026-03-23 16:50:05
PLAN/IMPROVEMENT_ROADMAP.md
IMPROVEMENT_ROADMAP
Moved X.15 Edge-to-Edge to Recently Completed (March 23); removed from TIER 0 and TIER 4; renumbered execution order
2026-03-23 16:59:12
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
X.14: Added DynamicColors.applyToActivitiesIfAvailable() for Material You wallpaper-based theming on Android 12+
2026-03-23 16:59:18
PLAN/IMPROVEMENT_ROADMAP.md
IMPROVEMENT_ROADMAP
Moved X.14 Material You to Recently Completed; removed from TIER 1 and Phase 2; renumbered execution order (33 items)
2026-03-23 17:31:42
gradle/libs.versions.toml
VersionCatalog
Created Gradle Version Catalog (libs.versions.toml) with all dependency versions, library aliases, and plugin aliases
2026-03-23 17:31:50
build.gradle.kts
RootBuild
Migrated root build.gradle.kts from buildscript{} classpath + plugins{} version blocks to alias(libs.plugins.*) from version catalog
2026-03-23 17:31:57
app_v2/build.gradle.kts
AppBuild
Migrated app_v2 plugins{} and all 80+ dependencies to version catalog aliases (libs.plugins., libs. )
2026-03-23 17:32:03
wear/build.gradle.kts
WearBuild
Migrated wear plugins{} and all 40+ dependencies to version catalog aliases (libs.plugins., libs. )
2026-03-23 17:44:32
app_v2/src/.../ui/settings/SettingsActivity.kt
SettingsActivity
IV.10: Guarded setupStartUptimeMs and startup timing Timber.i() with BuildConfig.DEBUG
2026-03-23 17:44:37
app_v2/src/.../data/network/SmbConnectionManager.kt
SmbConnectionManager
IV.10: Guarded 3 timing blocks (connect/auth/share) with BuildConfig.DEBUG on SMB hot path
2026-03-23 17:44:42
app_v2/src/.../data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
IV.10: Guarded cache-sync Timber.d() with BuildConfig.DEBUG
2026-03-23 17:54:00
app_v2/src/main/res/xml/shortcuts.xml
AppShortcuts
X.19: Created shortcuts.xml with 2 static shortcuts (Favorites, Slideshow)
2026-03-23 17:54:06
app_v2/src/.../core/AppShortcutsManager.kt
AppShortcutsManager
X.19: Created AppShortcutsManager - updates top-3 recent resources as dynamic launcher shortcuts
2026-03-23 17:54:12
app_v2/src/main/AndroidManifest.xml
MainActivity
X.19: Added shortcuts meta-data to launcher activity
2026-03-23 17:54:19
app_v2/src/.../ui/main/MainActivity.kt
MainActivity
X.19: Added ACTION_OPEN_FAVORITES, ACTION_BROWSE_RESOURCE constants + intent handling for app shortcuts
2026-03-23 17:54:26
app_v2/src/.../ui/main/MainViewModel.kt
MainViewModel
X.19: Injected AppShortcutsManager, added openResourceDirect(), trigger shortcut refresh on resource load
2026-03-23 17:54:32
app_v2/src/.../data/local/db/ResourceDao.kt
ResourceDao
X.19: Added getRecentResourcesSync(limit) query for dynamic shortcuts
2026-03-23 18:54:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
Added BackupFavorite DTO, favorites field to BackupPayload, bumped CURRENT_VERSION to 2
2026-03-23 18:54:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Added toBackupFavorites() and toFavoritesEntity() methods, updated toBackupPayload() with favorites param
2026-03-23 18:54:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupToGoogleDriveUseCase.kt
BackupToGoogleDriveUseCase
Injected FavoritesDao, collect favorites in backup, added favoritesCount to BackupResult, updated README texts
2026-03-23 18:54:38
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RestoreFromGoogleDriveUseCase.kt
RestoreFromGoogleDriveUseCase
Injected FavoritesDao, added Step 3 favorites merge with dedup by URI, added favoritesCount to BackupInfo, favoritesAdded/Skipped to RestoreResult
2026-03-23 18:54:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt
BackupRestoreViewModel
Added favoritesCount to BackupSuccess UI state
2026-03-23 18:54:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
Updated backup success, restore confirm dialog and restore success to show favorites counts
2026-03-23 18:55:03
app_v2/src/main/res/values/strings.xml
strings
Updated backup_success, restore_confirm_message, restore_success strings to include favorites counts (EN/RU/UK)
2026-03-23 18:55:45
docs/FEATURES.md
FEATURES
Updated backup/restore descriptions to mention favorites in GDrive backup (X.17)
2026-03-23 19:02:11
app_v2/src/main/java/com/sza/fastmediasorter/core/AudioToggleTileService.kt
AudioToggleTileService
NEW: Quick Settings tile for audio play/pause toggle with MediaController integration
2026-03-23 19:02:16
app_v2/src/main/AndroidManifest.xml
AndroidManifest
Registered AudioToggleTileService with BIND_QUICK_SETTINGS_TILE permission
2026-03-23 19:02:22
app_v2/src/photos/AndroidManifest.xml
photos manifest
Removed AudioToggleTileService from photos flavor (no audio support)
2026-03-23 19:02:29
app_v2/src/main/res/drawable/ic_tile_play.xml
drawable
NEW: Play arrow vector icon for Quick Settings tile
2026-03-23 19:02:29
app_v2/src/main/res/drawable/ic_tile_pause.xml
drawable
NEW: Pause bars vector icon for Quick Settings tile
2026-03-23 19:02:29
app_v2/src/main/res/values/strings.xml
strings
Added 4 Quick Settings tile strings (EN/RU/UK)
2026-03-23 19:03:39
docs/FEATURES.md
FEATURES
Added Quick Settings Audio Tile feature entry (EN/RU/UK) for X.16
2026-03-23 19:21:42
app_v2/src/debug/java/com/sza/fastmediasorter/domain/usecase/IntegrationTestRunner.kt
IntegrationTestRunner
Moved from src/main to src/debug source set (4471 LOC removed from production)
2026-03-23 19:21:48
app_v2/src/debug/java/com/sza/fastmediasorter/ui/settings/IntegrationTestViewModel.kt
IntegrationTestViewModel
Moved from src/main to src/debug source set
2026-03-23 19:21:53
app_v2/src/debug/java/com/sza/fastmediasorter/ui/settings/IntegrationTestDialog.kt
IntegrationTestDialog
Moved from src/main to src/debug source set
2026-03-23 19:21:58
app_v2/src/release/java/com/sza/fastmediasorter/domain/usecase/IntegrationTestRunner.kt
IntegrationTestRunner
Created no-op release stub (Context-only injection, empty methods)
2026-03-23 19:22:04
app_v2/src/release/java/com/sza/fastmediasorter/ui/settings/IntegrationTestViewModel.kt
IntegrationTestViewModel
Created no-op release stub (empty HiltViewModel)
2026-03-23 19:22:12
app_v2/src/release/java/com/sza/fastmediasorter/ui/settings/IntegrationTestDialog.kt
IntegrationTestDialog
Created no-op release stub (isAvailable()=false)
2026-03-23 19:24:26
app_v2/src/main/java/com/sza/fastmediasorter/worker/WorkManagerScheduler.kt
WorkManagerScheduler
Added BackoffPolicy.EXPONENTIAL (30s) to all 4 workers: TrashCleanup, NetworkFilesSync, OrphanCleanup, PendingRevocation
2026-03-23 19:24:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ScheduleNetworkSyncUseCase.kt
ScheduleNetworkSyncUseCase
Added BackoffPolicy.EXPONENTIAL (30s) to sync work request
2026-03-23 19:31:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt
StandalonePlayerViewModel
Injected FavoritesUseCase + ResourceRepository; added isFavorite state, toggleFavorite(), checkFavoriteStatus(), findResourceForPath()
2026-03-23 19:31:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Added 4 file operation buttons: Delete (with confirm dialog), Share (FileProvider for file:// URIs), Favorite toggle, Open in FMS (resolve path to BrowseActivity)
2026-03-23 19:31:54
app_v2/src/main/res/drawable/ic_open_in_browse.xml
ic_open_in_browse
Created Material open_in_new vector icon for Open in FMS button
2026-03-23 19:32:00
app_v2/src/main/res/values/strings.xml
strings
Added 5 standalone player file operation strings (EN/RU/UK): confirm_delete_standalone, file_deleted, delete_permission_denied, share_via, open_in_fms
2026-03-23 19:33:05
docs/FEATURES.md
FEATURES
Added Standalone player file operations feature entry (EN/RU/UK) for III.11
2026-03-23 19:39:05
app_v2/build.gradle.kts
build.gradle.kts
X.12 KAPT to KSP: added KSP plugin, migrated Hilt (2x) + Room to ksp(), kept Glide on kapt, simplified kapt block, changed kaptAndroidTest to kspAndroidTest
2026-03-23 20:23:48
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AudioMetadataCacheRepository.kt
AudioMetadataCacheRepository
IX.6: Reduced MAX_CACHE_BYTES 10GB to 500MB, added TTL_MS 30d, cleanupExpired method, touch-on-read LRU in readMetadata
2026-03-23 20:23:53
app_v2/src/main/java/com/sza/fastmediasorter/worker/OrphanCleanupWorker.kt
OrphanCleanupWorker
IX.6: Injected AudioMetadataCacheRepository, added cleanAudioMetadataCache step calling cleanupExpired + trimIfNeeded
2026-03-23 20:23:59
app_v2/src/test/java/com/sza/fastmediasorter/data/repository/AudioMetadataCacheRepositoryTest.kt
AudioMetadataCacheRepositoryTest
IX.6: Added tests for cleanupExpired removing stale files and readMetadata touch-on-read LRU
2026-03-23 22:45:10
app_v2/src/main/java/com/sza/fastmediasorter
IntegrationTestDialog/ViewModel/Runner
Remove duplicate debug-only classes from src/main (were also in src/debug, causing Redeclaration compile error)
2026-03-23 23:28:00
app_v2/src/main/res/values
strings.xml / strings-ru / strings-uk
Restore 18 missing trigger hint strings (setting_support_, setting_ _desc, cb_play_to_end_desc, save_audio_metadata_locally_desc) in all 3 languages
2026-03-23 23:46:26
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxAuthPlugin.kt
DropboxAuthPlugin
Switch from legacy OAuth2 to PKCE auth to fix Dropbox security alert
2026-03-24 00:09:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCloudAuthManager.kt
BrowseCloudAuthManager
Switch Dropbox re-auth in Browse from legacy OAuth2 to PKCE via dropboxClient.startPkceAuthentication
2026-03-24 01:51:45
app_v2/src/lite/AndroidManifest.xml,app_v2/src/photos/AndroidManifest.xml,app_v2/src/legacy/AndroidManifest.xml
manifest overlays
Remove Dropbox AuthActivity from non-cloud flavors to fix SDK security alert when multiple flavors installed
2026-03-24 02:34:14
app_v2/build.gradle.kts,app_v2/src/debug/res/values/strings.xml
debug build type
Add dedicated Dropbox app key for debug build to fix SDK security alert when debug+release both installed
2026-03-24 02:58:56
scripts/builders/
build-*.ps1, dev/build-with-version.ps1
Add APK copy step to c:\GD\tc\SZA_APP\ after each build
2026-03-24 11:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
checkLocalPermissionsOnStartup
Bug fix: always show storage permission dialog instead of silent toast so user can navigate to Settings
2026-03-24 11:42:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt
getTargetLanguageCode/translateDirect
Bug fix: restore real translationTargetLanguage from settings (was hardcoded ru); remove requireWifi() from model download so translation works on mobile data
2026-03-24 11:42:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
ForwardingPlayer.seekToNext/seekToPrevious
Bug fix: use Int.MAX_VALUE fallback when duration is C.TIME_UNSET so STATE_ENDED fires correctly for hardware Next button
2026-03-24 11:54:17
app_v2/src/main/java/com/sza/fastmediasorter/core/util/PermissionHelper.kt
checkStoragePermissions
Bug fix: API 29 (Android 10) now only requires READ_EXTERNAL_STORAGE - WRITE is deprecated and unrequestable on that API level
2026-03-24 11:54:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
loadAudioCoverArt
Bug fix: catch IllegalArgumentException at debug level for cover art extraction (expected for deleted/inaccessible files, not a real error)
2026-03-24 11:54:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt
extractMetadata
Bug fix: catch IllegalArgumentException at debug level (expected for inaccessible files)
2026-03-24 11:54:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
submitList callback
Bug fix: demote cold-start RecyclerView range warning from W to D - child attach retry handles it
2026-03-24 11:54:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
getMimeTypeFromPath
Bug fix: use ContentResolver.getType() for content:// URIs instead of extension parsing
2026-03-24 21:34:35
app_v2/src/main/AndroidManifest.xml
StandaloneAudioPlayer
Add ACTION_MAIN+CATEGORY_APP_MUSIC intent-filter for RoleManager.ROLE_MUSIC eligibility
2026-03-24 21:35:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Fix isAlreadyDefaultPlayer to check ROLE_MUSIC; use RoleManager.ROLE_MUSIC for audio
2026-03-24 21:35:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Enable aliases synchronously before requesting ROLE_MUSIC from welcome screen
2026-03-24 22:04:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Fix build: use ROLE_MUSIC string literal instead of API-31 constant
2026-03-24 23:05:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerManager.kt
DefaultPlayerManager
Fix ComponentName class arg: use NAMESPACE not applicationId (debug suffix breaks alias lookup)
2026-03-24 23:37:27
app_v2/src/main/AndroidManifest.xml
MediaButtonRestartReceiver
Add missing manifest declaration (enabled=false by default, toggled by isPrimaryMediaPlayer)
2026-03-24 23:51:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Restore probe-file Open With/Always flow for set-default-player; replaces ROLE_MUSIC-only approach
2026-03-25 00:04:32
app_v2/src/main/res/layout/page_welcome_default_player.xml
DefaultPlayerPage
Add Always hint text below description on default player welcome page
2026-03-25 00:15:59
app_v2/src/main/res/layout-land/activity_player_unified.xml
pdfControlsLayout include
fix: PDF controls invisible on direct landscape open - add layout_width/height to include tag so constraint attributes are applied
2026-03-25 00:44:10
app_v2/src/main/res/layout-land/activity_player_unified.xml
pdfControlsLayout position
fix: move pdfControlsLayout inside mediaContentArea FrameLayout in landscape - was outside causing it to render below/behind destination panels instead of overlaying the PDF
2026-03-25 22:14:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
fix: override shouldEnableEdgeToEdge()=false - was inheriting BaseActivity default=true causing transparent status bar with no insets handling (toolbar/command panel overlapping status bar when opening files externally)
2026-03-25 22:52:07
app_v2/src/main/res/layout/fragment_settings_audio.xml
switchSearchAudioCoversOnline, switchSearchCoversOnlyWifi
Add subtitle descriptions to 2 toggles
2026-03-25 22:52:16
app_v2/src/main/res/layout/fragment_settings_video.xml
switchShowVideoThumbnails
Add subtitle description to video thumbnails toggle
2026-03-25 22:52:26
app_v2/src/main/res/layout/fragment_settings_images.xml
switchLoadFullSizeImages, switchCropImagesToFullscreen, switchDynamicBackground, switchSlideshowBackgroundMusic
Add subtitle descriptions to 4 toggles
2026-03-25 22:52:29
app_v2/src/main/res/layout/fragment_settings_documents.xml
switchShowTextLineNumbers
Add subtitle description to line numbers toggle
2026-03-25 23:39:43
app_v2/src/main/res/layout/activity_player_unified.xml
29 player buttons
Apply selector_player_button_tint pressed state (keep btnBack + btnExitEpubFullscreen white)
2026-03-25 23:39:50
app_v2/src/main/res/layout-land/activity_player_unified.xml
29 player buttons
Apply selector_player_button_tint pressed state (landscape)
2026-03-25 23:39:55
app_v2/src/main/res/layout/activity_browse.xml
btnResourceAction + 6 operation buttons
Apply selector_player_button_tint pressed state
2026-03-25 23:39:56
app_v2/src/main/res/layout/item_media_file.xml
btnFavorite + 5 operation buttons
Add selector_player_button_tint tint for pressed state
2026-03-25 23:40:00
app_v2/src/main/res/layout/item_media_file_grid_operations.xml
btnCopyItem/Move/Rename/Delete
Add xmlns:app and selector_player_button_tint tint
2026-03-25 23:40:00
app_v2/src/main/res/layout/dialog_translation_settings.xml
btnSwapLanguages
Add selector_player_button_tint tint for pressed state
2026-03-25 23:40:06
app_v2/src/main/res/layout-land/player_pdf_controls_overlay_content.xml
all 6 buttons
Apply selector tints: white->selector_player_button_tint, green->selector_pdf_nav_green_tint, blue->selector_pdf_nav_blue_tint
2026-03-25 23:40:12
app_v2/src/main/res/layout-land/player_epub_controls_overlay_content.xml
all 6 buttons
Apply selector tints: white->selector_player_button_tint, green/blue->custom selectors
2026-03-25 23:40:12
app_v2/src/main/res/color/selector_pdf_nav_green_tint.xml
new file
Color selector: #4CAF50 default, #FF3333 on pressed
2026-03-25 23:40:17
app_v2/src/main/res/color/selector_pdf_nav_blue_tint.xml
new file
Color selector: #2196F3 default, #FF3333 on pressed
2026-03-25 23:46:27
app_v2/src/main/res/layout/custom_player_controls.xml
exo_next_file
Restore: 2x wide (96dp), red circle selector icon, remove rotation+tint (regression fix)
2026-03-25 23:58:19
app_v2/src/main/res/layout/custom_player_controls.xml
exo_repeat/prev/rewind/play/forward/speed/audio/subtitle/pip
Restore selector_player_button_tint on 9 buttons (regression from 0b26b39)
2026-03-26 00:05:40
app_v2/src/main/res/layout/activity_player_unified.xml
btnOcrImageCmd
Restore selector_player_button_tint on OCR image button (portrait)
2026-03-26 00:05:44
app_v2/src/main/res/layout-land/activity_player_unified.xml
btnOcrImageCmd
Restore selector_player_button_tint on OCR image button (landscape)
2026-03-26 00:05:49
app_v2/src/main/res/layout/fragment_settings_audio.xml
switchSupportAudio,switchEnablePhotosDuringAudio,layoutSaveAudioMetadataLocally
Restore 3 missing subtitle wrappers + re-add layoutSaveAudioMetadataLocally toggle (regression from 0b26b39)
2026-03-26 00:05:53
app_v2/src/main/res/values/strings.xml
save_audio_metadata_locally
Restore missing title string (regression from 0b26b39)
2026-03-26 00:05:54
app_v2/src/main/res/values-ru/strings.xml
save_audio_metadata_locally
Restore missing RU title string
2026-03-26 00:05:54
app_v2/src/main/res/values-uk/strings.xml
save_audio_metadata_locally
Restore missing UK title string
2026-03-26 00:05:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
AudioSettingsFragment
Restore switchSaveAudioMetadataLocally binding, onResume, setupDefaultPlayerButton, observeData visibility (regression from 0b26b39)
2026-03-26 00:06:03
app_v2/src/main/res/layout/fragment_settings_video.xml
switchSupportVideos
Restore subtitle wrapper (regression from 0b26b39)
2026-03-26 00:06:03
app_v2/src/main/res/layout/fragment_settings_images.xml
switchSupportImages,switchSupportGifs
Restore subtitle wrappers (regression from 0b26b39)
2026-03-26 00:06:03
app_v2/src/main/res/layout/fragment_settings_documents.xml
switchSupportText
Restore subtitle wrapper (regression from 0b26b39)
2026-03-26 00:40:52
app_v2/src/main/res/values-v35/themes.xml
Theme.FastMediaSorter.Base
Fix deprecated Window.setStatusBarColor Play Store warning: override BottomSheetDialog enableEdgeToEdge=false on API 35+ (system handles it)
2026-03-26 00:46:13
app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt
ResourceLaunchWidgetConfigActivity
Add enableEdgeToEdge() to fix Play Store edge-to-edge warning (only activity not extending BaseActivity)
2026-03-26 15:10:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
searchInYoutubeMusic
Add Search in YouTube Music feature for audio files (landscape button + portrait overflow menu item)
2026-03-26 17:57:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
Fix: exclude VIDEO from slideshow panel-hide logic to align UI with gesture zones
2026-03-26 18:48:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
PlayerControlsSetupManager
Fix nullable btnSearchYoutubeMusicCmd compile error (not in landscape layout)
2026-03-26 18:48:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
showSleepTimerDialog
Add toast notifications for sleep timer set and cancelled
2026-03-26 19:15:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Refactor: extract 6 callback impl classes to callbacks/ package to reduce Activity size
2026-03-26 19:15:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerState
Refactor: add isPhotoSlideshowActive computed property; replace scattered VIDEO/AUDIO exclusion checks in DialogUiStateManager, TouchZoneGestureManager, PlayerActivity
2026-03-26 19:18:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Refactor: extract 6 callback impl classes to callbacks/ package (3576→3000 lines)
2026-03-26 19:30:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Fixed applyEdgeToEdgeInsets: capture original paddings to prevent accumulation, fix wrong base padding fields, add requestApplyInsets() so listener fires after deferred setupViews()
2026-03-26 22:17:51
app_v2/src/main/res/values*/strings.xml
settings_tab_destinations
Rename Sort tab to Operations (EN/RU/UK) and refactor DestinationsSettingsFragment to OperationsSettingsFragment
2026-03-27 00:36:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/model
ScheduledOperation,ScheduledOpType,FileTypeFilter,TimeFilter
Step 1: Add domain models for Scheduled Operations feature
2026-03-27 00:38:25
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db
ScheduledOperationEntity,ScheduledOperationDao,AppDatabase,DatabaseModule
Step 2: Add Room entity+DAO for scheduled_operations, Migration(18->19), register in DB and DI
2026-03-27 00:39:26
app_v2/src/main/java/com/sza/fastmediasorter
ScheduledOperationRepository,ScheduledOperationRepositoryImpl,RepositoryModule
Step 3: Add ScheduledOperationRepository interface, impl with entity mapping, DI binding
2026-03-27 00:43:21
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase
GetScheduledOperationsUseCase,UpsertScheduledOperationUseCase,UpdateScheduledOperationUseCase,DeleteScheduledOperationUseCase,ClearScheduledOperationsUseCase,AppendToScheduledLogUseCase,GetScheduledOperationsLogUseCase,ClearScheduledOperationsLogUseCase
Step 4: Add all CRUD and log use cases for Scheduled Operations
2026-03-27 00:44:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase
ExecuteScheduledOperationUseCase
Step 5: Add ExecuteScheduledOperationUseCase with file/time filtering, per-file MOVE atomicity, log output
2026-03-27 00:50:56
app_v2/src/main/java/com/sza/fastmediasorter/worker,app_v2/src/main/AndroidManifest.xml,app_v2/src/main/res/values*/strings.xml
ScheduledOperationsWorker,ScheduledOperationsBootReceiver,WorkManagerScheduler,AndroidManifest
Step 6: Add Worker+BootReceiver, extend WorkManagerScheduler (scheduleOperation/runNow/cancelOperation/rescheduleAll), Manifest permissions+receiver+service, all 3 locales strings
2026-03-27 00:55:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Add battery optimization permission dialog in welcome flow (Step 6.5)
2026-03-27 00:55:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Add battery optimization permission button in settings (Step 6.5)
2026-03-27 00:57:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/ScheduledOperationsViewModel.kt
ScheduledOperationsViewModel
Create ScheduledOperationsViewModel (Step 7)
2026-03-27 01:03:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/ScheduledOperationsAdapter.kt
ScheduledOperationsAdapter
Create RecyclerView adapter for scheduled operations list (Step 9)
2026-03-27 01:03:37
app_v2/src/main/res/layout/item_scheduled_operation.xml
item_scheduled_operation
Create item layout for scheduled operations list (Step 9)
2026-03-27 01:03:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Create add/edit dialog for scheduled operations (Step 10)
2026-03-27 01:03:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledLogDialog.kt
ScheduledLogDialog
Create log viewer dialog for scheduled operations (Step 11)
2026-03-27 01:03:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
Add Scheduled Operations section to Operations settings tab (Step 12)
2026-03-27 01:03:37
app_v2/src/main/res/layout/fragment_settings_destinations.xml
fragment_settings_destinations
Add Scheduled Operations card to Operations settings layout (Step 12)
2026-03-27 01:08:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt
ExecuteScheduledOperationUseCase
Add pre-flight checks: log+skip if no files, probe target reachability before work
2026-03-27 01:11:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt
ExecuteScheduledOperationUseCase
Refactor logging: per-file entries in ops log, Timber debug-only for file details, release logs only run event
2026-03-27 01:13:48
docs/FEATURES.md
FEATURES
Add section 22: Scheduled File Operations (EN)
2026-03-27 01:13:48
docs/FEATURES_RU.md
FEATURES_RU
Add section 22: Scheduled File Operations (RU)
2026-03-27 01:13:48
docs/FEATURES_UK.md
FEATURES_UK
Add section 22: Scheduled File Operations (UK)
2026-03-27 01:20:59
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DeleteResourceUseCase.kt
DeleteResourceUseCase
Step 14: cancel WorkManager tasks for scheduled ops when resource is deleted
2026-03-27 01:25:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupPayload
Add BackupScheduledOperation, bump CURRENT_VERSION to 3
2026-03-27 01:26:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt
ExportSettingsUseCase
Export ScheduledOperations to XML version 3.0
2026-03-27 01:26:03
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Import ScheduledOperations from XML v3+ with WorkManager reschedule
2026-03-27 01:28:37
docs/README.md
Key Features
Add Scheduled Operations feature bullet and usage scenario 11
2026-03-27 01:28:37
docs/README_RU.md
Key Features
Add Scheduled Operations feature bullet (RU)
2026-03-27 01:28:37
docs/README_UK.md
Key Features
Add Scheduled Operations feature bullet (UK)
2026-03-27 01:28:37
docs/FAQ.md
Scheduled Operations
Add Scheduled Operations FAQ section
2026-03-27 01:28:37
docs/FAQ_RU.md
Scheduled Operations
Add Scheduled Operations FAQ section (RU)
2026-03-27 01:28:38
docs/FAQ_UK.md
Scheduled Operations
Add Scheduled Operations FAQ section (UK)
2026-03-27 01:35:38
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Add toBackupScheduledOperation and toScheduledOperation mappers
2026-03-27 01:35:38
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupToGoogleDriveUseCase.kt
BackupToGoogleDriveUseCase
Include ScheduledOperations in Google Drive backup payload
2026-03-27 01:35:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RestoreFromGoogleDriveUseCase.kt
RestoreFromGoogleDriveUseCase
Restore ScheduledOperations from Google Drive backup v3+
2026-03-27 01:44:45
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Add enableScheduledOperations toggle field
2026-03-27 01:44:45
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupSettings
Add enableScheduledOperations to BackupSettings
2026-03-27 01:44:46
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Map enableScheduledOperations in toBackupSettings and toAppSettings
2026-03-27 01:44:46
app_v2/src/main/res/layout/fragment_settings_destinations.xml
fragment_settings_destinations
Add switchEnableScheduledOps toggle and containerScheduledContent
2026-03-27 01:44:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
Wire enableScheduledOperations toggle with containerScheduledContent visibility
2026-03-27 01:44:46
app_v2/src/main/res/layout/dialog_scheduled_operation.xml
dialog_scheduled_operation
Add tvReadOnlySourceHint and tvNextRun views
2026-03-27 01:44:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Read-only detection, auto-fill target, next-run preview
2026-03-27 01:44:47
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Call rescheduleAll on startup when enableScheduledOperations is true
2026-03-27 01:52:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
Subscribe to resources Flow in observeData to keep StateFlow warm for dialog
2026-03-27 01:53:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Default start time = current time for new ops, add TimePickerDialog via clock button
2026-03-27 01:56:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Default interval 24h 00m for new ops, add NumberPicker dialog via clock button
2026-03-27 02:07:10
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Persist enableScheduledOperations to DataStore (was missing - toggled back to false on restart)
2026-03-27 02:13:03
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScheduledOperation.kt
ScheduledOperation
Add overwrite field to fix scheduled COPY failing when file already exists
2026-03-27 02:13:06
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
DB v19→v20: add overwrite column to scheduled_operations
2026-03-27 02:18:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
SettingsViewModel
Wire enableScheduledOperations toggle to cancelAllScheduledOperations/rescheduleAll
2026-03-27 02:30:54
app_v2/src/main/res/layout/dialog_scheduled_log.xml
ScheduledLogDialog
Make log text selectable (textIsSelectable + NestedScrollView)
2026-03-27 02:35:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt
ExecuteScheduledOperationUseCase
Per-file logging for COPY/MOVE/DELETE; skip existing files silently instead of logging UI error string
2026-03-27 03:10:23
app_v2/src/release/AndroidManifest.xml
release manifest overlay
Hide FOREGROUND_SERVICE_DATA_SYNC, FOREGROUND_SERVICE_MEDIA_PLAYBACK, BootReceiver for Play Store submission
2026-03-27 03:10:23
app_v2/build.gradle.kts
buildTypes
Add ENABLE_SCHEDULED_OPERATIONS and ENABLE_BACKGROUND_AUDIO flags (true=debug, false=release)
2026-03-27 03:14:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledLogDialog.kt
ScheduledLogDialog
Add Copy button to copy log to clipboard
2026-03-27 13:29:45
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Fix release log: startup info now WARN level, add settings dump on startup
2026-03-27 13:29:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Fix release log: playback start and file metadata now logged at WARN level
2026-03-27 14:03:12
app_v2/src/main/res/layout/activity_welcome.xml
btnNext/btnFinish
Fix invisible Next/Finish buttons on welcome screen - replace M3 TonalButton with filled MaterialComponents.Button + colorPrimary tint
2026-03-27 14:05:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
applyEdgeToEdgeInsets
Fix Next/Finish buttons covered by system nav bar: force inset re-dispatch via requestApplyInsets after post{} delay
2026-03-27 16:47:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
ProvisionDefaultResourcesUseCase
Fix: provision virtual resources with isWritable=true so Delete/Move/Rename work on first launch
2026-03-27 21:56:12
app_v2/src/main/res/layout/dialog_copy_to.xml
dialog_copy_to
Remove redundant dialog title tvDialogTitle from file operation destination dialog
2026-03-27 22:03:54
app_v2/src/main/res/layout/activity_add_resource.xml
layoutLocalFolder
Wrap local folder section in NestedScrollView to fix btnAddToResources hidden behind OS navigation bar (edge-to-edge)
2026-03-27 22:16:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Request POST_NOTIFICATIONS on first run when ENABLE_SCHEDULED_OPERATIONS is true (Android 13+)
2026-03-27 22:16:18
app_v2/src/main/res/layout/fragment_settings_destinations.xml
containerScheduled
Add btnScheduledNotificationPermission button in scheduled section (shown when permission missing)
2026-03-27 22:16:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
Check and request POST_NOTIFICATIONS + battery optimization when enabling scheduled operations toggle
2026-03-27 22:38:02
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Lower default videoSizeMin from 1MB to 100KB
2026-03-28 02:11:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerImageTranslationManager.kt
PlayerImageTranslationManager
Extract image translation/OCR logic from PlayerActivity (Step 7)
2026-03-28 02:11:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt
PlayerShareManager
Extract share/external player logic from PlayerActivity (Step 8)
2026-03-28 02:11:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
Add showAudioTrackDialog/showSubtitleTrackDialog (Step 9)
2026-03-28 02:11:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Split initializeManagers into 10 sub-methods; delegate translation/share/dialog to managers (Steps 7-10)
2026-03-28 02:32:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
Extract showError/handleEvent/showCloudAuthError/showUnsupportedFormatError from PlayerActivity
2026-03-28 02:32:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
Add showEncodingDialog/showReaderSettingsDialog/showSleepTimerDialog (Plan Step 14)
2026-03-28 02:32:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Delegate error/event/dialog methods to PlayerEventHandler and PlayerDialogHelper; 226 lines removed
2026-03-28 03:39:48
app_v2/src/main/java/com/sza/fastmediasorter/worker/WorkManagerScheduler.kt
WorkManagerScheduler
IX.4: Add BackoffPolicy.EXPONENTIAL to ScheduledOperationsWorker one-time requests (schedule + runNow)
2026-03-28 04:05:06
wear/src/main/res/values-ru/strings.xml
Wear strings-ru
VIII.3: Add Russian localization for Wear OS (52 strings)
2026-03-28 04:05:07
wear/src/main/res/values-uk/strings.xml
Wear strings-uk
VIII.3: Add Ukrainian localization for Wear OS (52 strings)
2026-03-28 04:29:23
.claude/commands/spec.md
skill
Add /spec slash command for specification writing
2026-03-28 04:34:43
PLAN/spec_background-thumbnail-preload.md
spec
Add specification for X.11 - Background Thumbnail Preload
2026-03-28 04:37:03
PLAN/spec_cast-chromecast.md
spec
Add specification for X.2
2026-03-28 04:37:53
.claude/commands/spec.md
spec command
Enlarge spec skill with project requirements, flavor/API scope, architecture compliance, testing, accessibility, ADR sections
2026-03-28 04:37:57
CLAUDE.md
project rules
Add mandatory /spec command rule for all PLAN/spec_*.md file creation/updates
2026-03-28 04:43:12
PLAN/spec_duplicate_detection.md
spec
Add specification for X.1 Duplicate Detection
2026-03-28 04:44:43
PLAN/spec_decompose-giant-files.md
spec
Add specification for IV.1
2026-03-28 04:57:16
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Add enableThumbnailPreload + thumbnailPreloadWifiOnly fields (X.11)
2026-03-28 04:57:26
app_v2/.../data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Add DataStore keys for thumbnail preload settings (X.11)
2026-03-28 04:57:29
app_v2/.../worker/ThumbnailExtractorHelper.kt
ThumbnailExtractorHelper
New: extract thumbnail from network file without Glide (X.11)
2026-03-28 04:57:30
app_v2/.../worker/ThumbnailPreloadWorker.kt
ThumbnailPreloadWorker
New: background thumbnail pre-generation HiltWorker (X.11)
2026-03-28 04:57:34
app_v2/.../worker/WorkManagerScheduler.kt
WorkManagerScheduler
Add scheduleThumbnailPreload/cancel methods (X.11)
2026-03-28 04:57:35
app_v2/.../worker/NetworkFilesSyncWorker.kt
NetworkFilesSyncWorker
Inject WorkManagerScheduler; trigger thumbnail preload after successful sync (X.11)
2026-03-28 04:57:42
app_v2/.../domain/usecase/BackupData.kt
BackupData
Add enableThumbnailPreload + thumbnailPreloadWifiOnly to BackupSettings (X.11)
2026-03-28 04:57:43
app_v2/.../domain/usecase/BackupMapper.kt
BackupMapper
Map enableThumbnailPreload + thumbnailPreloadWifiOnly in both directions (X.11)
2026-03-28 04:57:46
app_v2/.../domain/usecase/ExportSettingsUseCase.kt
ExportSettingsUseCase
Export enableThumbnailPreload + thumbnailPreloadWifiOnly as XML (X.11)
2026-03-28 04:57:47
app_v2/.../domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Parse enableThumbnailPreload + thumbnailPreloadWifiOnly from XML (X.11)
2026-03-28 04:57:50
app_v2/src/main/res/values/strings.xml
strings
Add thumbnail preload EN strings (X.11)
2026-03-28 04:57:51
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add thumbnail preload RU strings (X.11)
2026-03-28 04:57:52
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add thumbnail preload UK strings (X.11)
2026-03-28 04:57:56
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
Add thumbnail preload toggle rows (X.11)
2026-03-28 04:57:58
app_v2/.../ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Add thumbnail preload toggle + Wi-Fi only sub-toggle UI logic (X.11)
2026-03-28 13:44:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Fix filter dialog: hide parent cell when checkbox is hidden (GIF/EPUB labels were visible without checkbox, looking disabled)
2026-03-28 13:44:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter
Fix PDF thumbnails: remove LOW-memory gate that blocked all PDF/EPUB previews in list and grid views; network PDFs already protected by size limits
2026-03-28 14:45:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
fix: apply window insets immediately via getRootWindowInsets() to prevent nav buttons being covered by system bars
2026-03-28 14:48:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
fix: apply window insets immediately via getRootWindowInsets() so toolbarContainer/tabs are not hidden behind system bar
2026-03-28 16:46:30
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
Backup and Restore Google Drive buttons placed in one row
2026-03-28 17:06:50
app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LoggingHelper.kt
LoggingHelper / FileLoggingTree
Add crash handler: installCrashHandler(), writeCrashSynchronously(), hasCrashFiles()
2026-03-28 17:06:55
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Install crash handler in attachBaseContext, warn on startup if previous crash detected
2026-03-28 20:29:18
app_v2/src/main/res/layout-land/activity_player_unified.xml
btnSearchYoutubeMusicCmd
fix: add missing btnSearchYoutubeMusicCmd to landscape layout - caused crash on landscape devices (Android 8.1 car headunit) via PlayerBindingSafeViews.required() throwing IllegalStateException
2026-03-28 20:52:15
PLAN/spec_cast-chromecast.md
spec
Revise specification for X.2 - expand Cast to IMAGE/GIF/AUDIO/VIDEO; fix LAN IP bug
2026-03-28 20:59:00
.claude/commands/doc-update.md
doc-update skill
Add /doc-update skill: comprehensive documentation update checklist for all project doc touchpoints
2026-03-28 21:02:55
.claude/commands/doc-update.md
doc-update skill
Add website landing pages (index.html/ru/uk) and root README.md as group G and F6 doc touchpoints
2026-03-28 21:07:22
app_v2/build.gradle.kts
build
Add Cast SDK, MediaRouter, NanoHTTPD dependencies
2026-03-28 21:07:41
app_v2/src/main/java/com/sza/fastmediasorter/core/cast/CastOptionsProvider.kt
CastOptionsProvider
Add CastOptionsProvider for Cast SDK entry point
2026-03-28 21:08:19
app_v2/src/main/java/com/sza/fastmediasorter/core/cast/LocalCastProxyServer.kt
LocalCastProxyServer
Add NanoHTTPD proxy bound to LAN IP for Cast receiver
2026-03-28 21:09:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
CastMediaManager
Add CastMediaManager for IMAGE/GIF/AUDIO/VIDEO Chromecast output
2026-03-28 21:09:53
app_v2/src/main/AndroidManifest.xml
AndroidManifest
Register CastOptionsProvider meta-data for Cast device discovery
2026-03-28 21:10:09
app_v2/src/main/res/menu/overflow_menu_player.xml
menu
Add Cast to Chromecast overflow menu item
2026-03-28 21:11:14
app_v2/src/main/res/values/strings.xml
strings
Add Cast string resources (EN)
2026-03-28 21:11:14
app_v2/src/main/res/values-ru/strings.xml
strings
Add Cast string resources (RU)
2026-03-28 21:11:15
app_v2/src/main/res/values-uk/strings.xml
strings
Add Cast string resources (UK)
2026-03-28 21:11:32
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Initialise Cast SDK in Application.onCreate()
2026-03-28 21:12:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Add Cast menu item visibility, click routing, and onCastClicked interface method
2026-03-28 21:13:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Implement onCastClicked delegation to PlayerActivity
2026-03-28 21:13:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Add isCasting/castDeviceName to PlayerState, CastStateChanged event, updateCastState()
2026-03-28 21:14:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Wire CastMediaManager: init, castCurrentMedia(), release in onDestroy
2026-03-28 21:14:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
Handle CastStateChanged event with Toast feedback
2026-03-28 21:15:13
app_v2/proguard-rules.pro
proguard
Add Cast SDK, MediaRouter and NanoHTTPD keep rules
2026-03-28 21:16:14
docs/FEATURES.md
FEATURES
Add Cast to Chromecast feature entry (EN)
2026-03-28 21:16:14
docs/FEATURES_RU.md
FEATURES_RU
Add Cast to Chromecast feature entry (RU)
2026-03-28 21:16:14
docs/FEATURES_UK.md
FEATURES_UK
Add Cast to Chromecast feature entry (UK)
2026-03-28 21:17:09
docs/TECH_STACK.md
TECH_STACK
Add Cast SDK, MediaRouter, NanoHTTPD to tech stack
2026-03-28 21:17:09
dev/PROJECT_OPERATIONS_INDEX.md
PROJECT_OPERATIONS_INDEX
Add Cast output feature path (core/cast/ + CastMediaManager)
2026-03-28 21:17:10
PLAN/spec_cast-chromecast.md
spec
Mark spec X.2 as Implemented
2026-03-28 21:22:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Fix updateCastState: use it.copy() and sendEvent() (BaseViewModel API)
2026-03-28 21:22:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
CastMediaManager
Fix resolveAndSend: detect local vs remote via path prefix, not resourceType
2026-03-28 21:36:09
app_v2/src/main/res/values/strings.xml
strings
Shorten cast_to_chromecast label to ‘Cast to…’ (EN/RU/UK)
2026-03-28 21:52:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt
SmbOperationsUseCase.detectMediaType
Fix: remove IllegalArgumentException throw for heic/heif/avif; classify as MediaType.IMAGE
2026-03-28 21:52:57
app_v2/src/main/java/com/sza/fastmediasorter/core/util/HeifSupportUtils.kt
HeifSupportUtils
New: API-level guard utility for HEIC (API28+) and AVIF (API31+) decode support
2026-03-28 21:52:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager.displayImage
Add pre-flight HeifSupportUtils check; show localized error on unsupported API level
2026-03-28 21:52:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter.loadThumbnail
Add pre-flight HeifSupportUtils check for IMAGE/GIF thumbnails in list and grid views
2026-03-28 21:52:58
app_v2/src/test/java/com/sza/fastmediasorter/core/util/HeifSupportUtilsTest.kt
HeifSupportUtilsTest
New: unit tests for HeifSupportUtils covering heic/heif/avif API-level combinations
2026-03-28 22:56:22
app_v2/src/main/res/layout-land/page_welcome_enhanced.xml
page_welcome_enhanced
Add landscape layout for Enhanced welcome pages (icon left, content right)
2026-03-28 23:26:11
.claude/commands/build.md
build skill
Add /build slash command for build system reference
2026-03-29 00:03:48
app_v2/src/main/AndroidManifest.xml
StandaloneImageSender,StandaloneAudioSender,StandaloneVideoSender
Add missing ACTION_SEND activity-aliases to main manifest; were only in lite overlay causing IAE on standard/debug builds
2026-03-29 00:23:41
app_v2/src/main/res/values/strings.xml
strings
Rename ‘Search in YouTube Music’ to ‘In YouMusic’; add RU/UK translations; add cast_to_chromecast label
2026-03-29 00:23:41
app_v2/src/main/res/drawable/ic_cast.xml
ic_cast
Add Material cast vector drawable for Chromecast button
2026-03-29 00:23:41
app_v2/src/main/res/layout/activity_player_unified.xml
btnCastCmd
Add btnCastCmd ImageButton to portrait and landscape player layouts
2026-03-29 00:23:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Wire btnCastCmd visibility in landscape (image/video + Wi-Fi); register in commandPanelButtons()
2026-03-29 00:55:23
app_v2/src/main/res/values/themes.xml
Theme.FastMediaSorter.App
Extracted core branding styles for Android 15 compatibility
2026-03-29 00:55:46
app_v2/src/main/res/values-night/themes.xml
Theme.FastMediaSorter.App
Extracted core branding styles for Android 15 compatibility (Night Mode)
2026-03-29 00:55:51
app_v2/src/main/res/values-v35/themes.xml
BottomSheetDialog
Fixed Edge-to-Edge for Android 15 and restored branding
2026-03-29 01:09:44
PLAN/spec_landscape_dialogs.md
spec
Expand specification VIII.4 to full template with flavor scope, architecture, ADRs, and 28-step implementation plan
2026-03-29 01:12:22
app_v2/src/main/res/values/dimens.xml
dimens
Add landscape dialog dimension resources (dialog_landscape_max_height, dialog_landscape_list_max_height)
2026-03-29 01:25:43
app_v2/src/main/res/layout-land/dialog_sort.xml
layout-land
Add landscape layout for dialog_sort (constrained RV height)
2026-03-29 01:25:48
app_v2/src/main/res/layout-land/dialog_resource_type_selector.xml
layout-land
Add landscape layout for dialog_resource_type_selector
2026-03-29 01:25:48
app_v2/src/main/res/layout-land/dialog_network_delete_confirmation.xml
layout-land
Add landscape layout for dialog_network_delete_confirmation
2026-03-29 01:25:48
app_v2/src/main/res/layout-land/dialog_file_copy_progress.xml
layout-land
Add landscape layout for dialog_file_copy_progress
2026-03-29 01:25:48
app_v2/src/main/res/layout-land/dialog_file_operation_progress.xml
layout-land
Add landscape layout for dialog_file_operation_progress
2026-03-29 01:25:53
app_v2/src/main/res/layout-land/dialog_filter_resource.xml
layout-land
Add landscape layout for dialog_filter_resource (buttons at top)
2026-03-29 01:25:53
app_v2/src/main/res/layout-land/dialog_scrollable_text.xml
layout-land
Add landscape layout for dialog_scrollable_text (explicit maxHeight)
2026-03-29 01:25:53
app_v2/src/main/res/layout-land/dialog_log_view.xml
layout-land
Add landscape layout for dialog_log_view (reduced height)
2026-03-29 01:25:53
app_v2/src/main/res/layout-land/dialog_folder_selection.xml
layout-land
Add landscape layout for dialog_folder_selection
2026-03-29 01:25:58
app_v2/src/main/res/layout-land/dialog_translation_settings.xml
layout-land
Add landscape layout for dialog_translation_settings
2026-03-29 01:25:59
app_v2/src/main/res/layout-land/dialog_epub_reader_settings.xml
layout-land
Add landscape layout for dialog_epub_reader_settings
2026-03-29 01:25:59
app_v2/src/main/res/layout-land/dialog_image_edit.xml
layout-land
Add landscape layout for dialog_image_edit (btnClose at top)
2026-03-29 01:25:59
app_v2/src/main/res/layout-land/dialog_gif_editor.xml
layout-land
Add landscape layout for dialog_gif_editor (btnClose at top)
2026-03-29 01:25:59
app_v2/src/main/res/layout-land/dialog_player_settings.xml
layout-land
Add landscape layout for dialog_player_settings (title+buttons at top)
2026-03-29 01:26:06
app_v2/src/main/res/layout-land/dialog_copy_to.xml
layout-land
Add landscape layout for dialog_copy_to (layoutDestinations in NestedScrollView)
2026-03-29 01:26:06
app_v2/src/main/res/layout-land/dialog_network_discovery.xml
layout-land
Add landscape layout for dialog_network_discovery (rvHosts capped at landscape height)
2026-03-29 01:26:06
app_v2/src/main/res/layout-land/dialog_resource_picker.xml
layout-land
Add landscape layout for dialog_resource_picker (buttons at top)
2026-03-29 01:26:06
app_v2/src/main/res/layout-land/dialog_scheduled_log.xml
layout-land
Add landscape layout for dialog_scheduled_log (reduced scroll height)
2026-03-29 01:26:10
app_v2/src/main/res/layout-land/dialog_slideshow_settings.xml
layout-land
Add landscape layout for dialog_slideshow_settings (ConstraintLayout in NestedScrollView)
2026-03-29 01:26:10
app_v2/src/main/res/layout-land/dialog_scheduled_operation.xml
layout-land
Add landscape layout for dialog_scheduled_operation (buttons pinned outside scroll)
2026-03-29 01:26:11
app_v2/src/main/res/layout-land/dialog_color_picker.xml
layout-land
Add landscape layout for dialog_color_picker (buttons at top, RV capped)
2026-03-29 01:27:52
docs/FEATURES.md
FEATURES
Add landscape-adaptive dialogs bullet to Settings section
2026-03-29 01:27:52
docs/FEATURES_RU.md
FEATURES_RU
Add landscape-adaptive dialogs bullet to Settings section (RU)
2026-03-29 01:27:52
docs/FEATURES_UK.md
FEATURES_UK
Add landscape-adaptive dialogs bullet to Settings section (UK)
2026-03-29 01:28:05
PLAN/spec_landscape_dialogs.md
spec_landscape_dialogs
Mark spec as Implemented
2026-03-29 22:41:03
PLAN/spec_standalone_player_file_ops.md
spec
Update III.11 spec: reflect implemented state, lifecycle fix, API matrix, accessibility, ADRs
2026-03-29 22:41:07
PLAN/spec_standalone_player_delete_fix.md
spec
Add BUG-III.11 spec: delete API-level correctness (isDocumentUri, API 29, API 30+)
2026-03-29 22:44:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix delete: isDocumentUri check + API 29 RecoverableSecurityException + API 30+ createDeleteRequest + disable button on SecurityException
2026-03-29 22:57:52
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/MediaExtensions.kt
MediaExtensions
Added missing avi to VIDEO extensions set
2026-03-29 22:57:52
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
ProvisionDefaultResourcesUseCase
Fix isWritable=false for virtual resources
2026-03-29 22:57:53
app_v2/src/test/java/com/sza/fastmediasorter/data/repository/AudioMetadataCacheRepositoryTest.kt
AudioMetadataCacheRepositoryTest
Fix Robolectric SDK config and cache file paths in tests
2026-03-29 22:57:53
app_v2/src/test/java/com/sza/fastmediasorter/util/VirtualPathUtilsTest.kt
VirtualPathUtilsTest
Update test to expect 6 virtual paths including CAMERA_PHOTOS
2026-03-29 23:02:49
app_v2/src/main/java/com/sza/fastmediasorter/util/BinaryFileTypeDetector.kt
BinaryFileTypeDetector
Add avi to OTHER binary set - not supported as video
2026-03-29 23:02:50
app_v2/src/test/java/com/sza/fastmediasorter/domain/model/MediaExtensionsTest.kt
MediaExtensionsTest
Fix avi assertions - treat as binary not video
2026-03-29 23:16:03
app_v2/src/main/java/com/sza/fastmediasorter/core/AudioToggleTileService.kt
AudioToggleTileService
Fix StartActivityAndCollapseDeprecated lint: extend @Suppress to include lint rule ID
2026-03-29 23:16:03
app_v2/src/main/res/layout/widget_camera_photos.xml
widget_camera_photos
Fix UseAppTint lint: add xmlns:app, replace android:tint with app:tint
2026-03-29 23:16:03
app_v2/src/main/res/layout/widget_preview_resource_launch.xml
widget_preview_resource_launch
Fix UseAppTint lint: replace android:tint with app:tint
2026-03-29 23:16:04
app_v2/src/main/res/layout/widget_random_music.xml
widget_random_music
Fix UseAppTint lint: add xmlns:app, replace android:tint with app:tint
2026-03-29 23:16:04
app_v2/src/main/res/layout/widget_resource_launch.xml
widget_resource_launch
Fix UseAppTint lint: replace android:tint with app:tint
2026-03-29 23:16:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
Fix StringFormatInvalid lint: remove unused args from getString for non-format strings
2026-03-29 23:16:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Fix StringFormatInvalid lint: remove unused resourceName arg from dont_show_again getString
2026-03-29 23:16:04
app_v2/src/main/res/values/strings.xml
strings
Fix StringFormatMatches lint: google_sign_in_failed change %1$s to %1$d (all 3 locales)
2026-03-29 23:16:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Fix StringFormatMatches lint: add missing favoritesCount/favoritesAdded/favoritesSkipped args to backup/restore getString calls
2026-03-29 23:17:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix isFavorite lifecycle: move collect to observeFavoriteState() with repeatOnLifecycle(STARTED) + update contentDescription
2026-03-29 23:17:27
app_v2/src/main/res/values/strings.xml
strings
Add cd_add_to_favorites / cd_remove_from_favorites accessibility strings (EN/RU/UK)
2026-03-29 23:24:50
PLAN/spec_now_playing_ui.md
spec
Update specification for III.13 Now Playing UI to full template
2026-03-29 23:25:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/model/MediaItemWithMeta.kt
MediaItemWithMeta
Add MediaItemWithMeta data class for playlist passthrough with metadata
2026-03-29 23:25:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
AudioServiceController
Add playAudioPlaylistWithMetadata with per-item MediaMetadata
2026-03-29 23:26:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingViewModel.kt
NowPlayingViewModel
Add NowPlayingViewModel with MediaController state flow and position poll
2026-03-29 23:26:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/QueueTrackAdapter.kt
QueueTrackAdapter
Add QueueTrackAdapter for Now Playing queue panel
2026-03-29 23:27:36
app_v2/src/main/res/layout/view_mini_now_playing.xml
layout
Add mini Now Playing bar layout
2026-03-29 23:27:36
app_v2/src/main/res/layout/item_queue_track.xml
layout
Add queue track item row layout
2026-03-29 23:27:36
app_v2/src/main/res/layout/bottom_sheet_now_playing.xml
layout
Add Now Playing bottom sheet layout
2026-03-29 23:28:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingBottomSheetFragment.kt
NowPlayingBottomSheetFragment
Add Now Playing bottom sheet fragment with queue panel
2026-03-29 23:29:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager
Add NowPlayingManager for mini bar and Now Playing sheet orchestration
2026-03-29 23:32:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Wire NowPlayingManager: instantiate after audioServiceController, call onStart() in onResume
2026-03-29 23:32:37
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Add mini Now Playing bar include stub above bottom panels
2026-03-29 23:32:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Route local audio through NowPlayingManager.startPlayback() with playlist metadata
2026-03-29 23:33:44
app_v2/src/main/res/values/strings.xml
strings
Add Now Playing UI strings EN
2026-03-29 23:33:44
app_v2/src/main/res/values-ru/strings.xml
strings
Add Now Playing UI strings RU
2026-03-29 23:33:44
app_v2/src/main/res/values-uk/strings.xml
strings
Add Now Playing UI strings UK
2026-03-29 23:33:44
app_v2/src/main/res/values/dimens.xml
dimens
Add mini Now Playing bar dimension values
2026-03-29 23:36:07
docs/FEATURES.md
FEATURES
Add Now Playing UI feature entry (III.13) EN
2026-03-29 23:36:07
docs/FEATURES_RU.md
FEATURES_RU
Add Now Playing UI feature entry (III.13) RU
2026-03-29 23:36:07
docs/FEATURES_UK.md
FEATURES_UK
Add Now Playing UI feature entry (III.13) UK
2026-03-29 23:36:07
index.html
index.html
Add Now Playing UI to key features list EN
2026-03-29 23:36:08
index-ru.html
index-ru.html
Add Now Playing UI to key features list RU
2026-03-29 23:36:08
index-uk.html
index-uk.html
Add Now Playing UI to key features list UK
2026-03-29 23:36:19
PLAN/spec_now_playing_ui.md
spec
Mark spec III.13 as Implemented
2026-03-29 23:48:34
app_v2/src/main/res/layout/bottom_sheet_now_playing.xml
bottom_sheet_now_playing
Removed duplicate android:importantForAccessibility attribute from View
2026-03-29 23:50:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/QueueTrackAdapter.kt
QueueTrackAdapter
Fixed colorAccent reference
2026-03-29 23:50:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager
Fixed ViewMiniNowPlayingBinding nullability mismatch
2026-03-29 23:53:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager
Fixed unresolved reference ic_play_arrow to ic_play
2026-03-29 23:57:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingViewModel.kt
NowPlayingViewModel
Migrated deprecated seekToMediaItem and nextMediaItem calls to newer Media3 equivalents
2026-03-29 23:57:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
AudioPlaybackService
Removed overrides of removed seekToNextMediaItem / seekToPreviousMediaItem from ForwardingPlayer
2026-03-30 01:10:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt
FileOperationUseCase
Refactored skipped files handling on overwrite=false to prevent artificial failures
2026-03-30 01:10:15
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/BaseFileOperationHandler.kt
BaseFileOperationHandler
Refactored skipped files handling on overwrite=false to prevent artificial failures
2026-03-30 01:10:17
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt
ExecuteScheduledOperationUseCase
Adopted skippedCount logic from underlying use cases to report clean SKIP logs
2026-03-30 10:29:12
app_v2/src/release/AndroidManifest.xml
AndroidManifest (release)
Restore FOREGROUND_SERVICE_MEDIA_PLAYBACK and AudioPlaybackService foregroundServiceType - crash fix for Android 14+ (API 34+)
2026-03-30 11:19:42
app_v2/src/main/res/layout/fragment_settings_general.xml
containerPermissions
Merge media+notification buttons into one row; reduce all permission button textSize to 10sp; rename all 5 permission buttons
2026-03-30 11:19:45
app_v2/src/main/res/layout-land/fragment_settings_general.xml
containerPermissions
Add notification+battery buttons missing in landscape; merge media+notification into one row; textSize 10sp on all permission buttons
2026-03-30 11:19:49
app_v2/src/main/res/values/strings.xml
grant_*_permission
Rename 5 permission button strings to short captions (EN/RU/UK)
2026-03-30 12:49:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt
FileOperationUseCase
Decompose: extract local ops to dedicated classes; facade reduced 1198->511 lines
2026-03-30 12:49:55
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalCopyFileOperation.kt
LocalCopyFileOperation
New: extracted local file copy logic from FileOperationUseCase (142 lines)
2026-03-30 12:49:55
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalMoveFileOperation.kt
LocalMoveFileOperation
New: extracted local file move logic from FileOperationUseCase (196 lines)
2026-03-30 12:49:55
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalRenameFileOperation.kt
LocalRenameFileOperation
New: extracted local file rename logic from FileOperationUseCase (68 lines)
2026-03-30 12:49:55
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalDeleteFileOperation.kt
LocalDeleteFileOperation
New: extracted local delete + MediaStore/SAF helpers from FileOperationUseCase (267 lines)
2026-03-30 16:09:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Decompose: extract track/subtitle selection to VideoTrackSelectionManager; 1729->1535 lines
2026-03-30 16:09:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoTrackSelectionManager.kt
VideoTrackSelectionManager
New: audio/subtitle track selection and styling extracted from VideoPlayerManager (208 lines)
2026-03-30 16:37:40
PLAN/spec_duplicate_detection.md
spec
Enforce/improve spec X.1: fix SmbClient ref, AppStartupInitializer error, deleteHashEntry gap; add 12-question pre-impl questionnaire
2026-03-30 20:52:37
PLAN/spec_duplicate_detection.md
spec
Update algorithm: SHA-256+64KB → MD5+4KB quick hash; rename PREFIX_HASH→QUICK_HASH throughout
2026-03-30 21:12:22
PLAN/spec_duplicate_detection.md
spec
Complete spec rewrite: CLOUD included, Resource Ops menu in Browse, size-based deletion, all Q1-Q12 resolved, Tier 5
2026-03-30 21:12:22
PLAN/IMPROVEMENT_ROADMAP.md
roadmap
Move X.1 from Tier 4 to Tier 5 (29 steps, 26 files)
2026-03-30 22:17:28
app_v2/src/main/res/layout/item_duplicate_group.xml
layout
Add layout for duplicate group item
2026-03-30 22:17:42
app_v2/src/main/res/layout/item_duplicate_file.xml
layout
Add layout for duplicate file item inside group
2026-03-30 22:17:57
app_v2/src/main/res/layout/fragment_duplicates.xml
layout
Add layout for DuplicatesFragment
2026-03-30 22:17:59
app_v2/src/main/res/layout/activity_duplicates.xml
layout
Add layout for DuplicatesActivity
2026-03-30 22:19:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesActivity.kt
DuplicatesActivity
Add DuplicatesActivity
2026-03-30 22:19:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesFragment.kt
DuplicatesFragment
Add DuplicatesFragment
2026-03-30 22:20:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Add deleteBySize method for duplicate detection feature
2026-03-30 22:21:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Add ResourceOpsMenuManager
2026-03-30 22:22:20
app_v2/src/main/res/layout/activity_browse.xml
activity_browse.xml
Add Resource Operations button
2026-03-30 22:22:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Wire Resource Operations menu button
2026-03-30 22:22:41
app_v2/src/main/AndroidManifest.xml
AndroidManifest
Declare DuplicatesActivity
2026-03-31 00:20:06
app_v2/src/main/res/values/strings.xml
strings.xml
Add duplicate operations strings (EN/RU/UK)
2026-03-31 01:50:47
app_v2/src/main/res/values/strings.xml
strings.xml
Added missing duplicate detection string resources for English
2026-03-31 01:50:47
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
Added missing duplicate detection string resources for Russian
2026-03-31 01:50:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Added safe calls to nullable btnResourceOps
2026-03-31 01:50:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesFragment.kt
DuplicatesFragment
Added explicit parameter types for setPositiveButton lambda
2026-03-31 20:59:44
PLAN/tasks/task_1_3_archive_selected.md
task_1_3
Detailed developer specification for archiving feature
2026-03-31 23:34:13
PLAN/tasks/task_1_4_create_folder.md
task_1_4_create_folder
Refined and detailed task specification for Create Folder feature
2026-04-01 02:05:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.onDestroy
Fix crash: clear RecyclerView scroll listeners before super.onDestroy() to prevent binding NPE during view detachment
2026-04-01 02:26:53
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
MediaFile
Added lastModified field (Long, default 0L) for duplicate auto-selection by oldest file
2026-04-01 02:26:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel.createFolder
Fixed createDirectoryUseCase call - added missing resource parameter
2026-04-01 02:27:04
app_v2/src/main/res/values/strings.xml
strings.xml (EN)
Removed duplicate create_folder_* strings; added action_delete_smaller_than / action_delete_larger_than
2026-04-01 02:27:04
app_v2/src/main/res/values-uk/strings.xml
strings.xml (UK)
Fixed unescaped apostrophes; replaced legacy duplicate detection keys with canonical action_* naming; added all missing duplicate scan strings
2026-04-01 02:27:11
app_v2/src/main/res/values-uk/strings.xml
strings.xml (UK)
Fixed unescaped apostrophes; replaced legacy duplicate detection keys with canonical action_* naming; added missing duplicate scan strings
2026-04-01 02:30:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.onPause/onResume
Detach PlayerView player=null from MediaController in onPause when service audio active; re-attach in onResume. Prevents TextureView surface loss from pausing AudioPlaybackService ExoPlayer (background audio fix)
2026-04-01 02:30:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager.reattachServicePlayerToView
Added internal reattachServicePlayerToView(); made bindServicePlayerToView internal for PlayerActivity.onResume re-binding after background
2026-04-01 02:32:10
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
Replace action_delete_smaller_than + action_delete_larger_than with unified action_delete_by_size menu item
2026-04-01 02:32:22
app_v2/src/main/res/values/strings.xml
strings EN/RU/UK
Add delete_by_size string set (13 keys) and error_deletion_failed to all 3 locales
2026-04-01 02:32:22
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DeleteByFileSizeUseCase.kt
DeleteByFileSizeUseCase
Refactor: split into scan()+execute(), fix network path wrapping, keep legacy invoke() for compat
2026-04-01 02:32:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Add ShowDeleteBySizePreview event, scanBySize(), executeBySizeDeleteConfirmed() methods with localized messages
2026-04-01 02:32:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Refactor: unified delete-by-size dialog (condition+value+unit), confirmation dialog with no-trash warning, remove old smaller/larger dialogs
2026-04-01 02:32:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Handle ShowDeleteBySizePreview event - delegate to resourceOpsMenuManager.showDeleteBySizeConfirm()
2026-04-01 02:35:02
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/DuplicateHashRepositoryImpl.kt
DuplicateHashRepositoryImpl
Fix cache key: replaced file.createdDate with file.lastModified to match DuplicateHashCacheEntity column semantics
2026-04-01 02:35:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicateGroupAdapter.kt
DuplicateGroupAdapter.GroupViewHolder
Fix: FileAdapter created once in ViewHolder init instead of on every bind(); use lambda for selectedPaths to always reflect current state
2026-04-01 02:35:02
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DetectDuplicatesUseCase.kt
DetectDuplicatesUseCase
Fix: always map all resources including id==0 to avoid wrong resource fallback during hash computation
2026-04-01 02:35:10
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/DuplicateHashRepositoryImpl.kt
DuplicateHashRepositoryImpl
Fix cache key: replaced file.createdDate with file.lastModified to match DuplicateHashCacheEntity column semantics
2026-04-01 02:35:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicateGroupAdapter.kt
GroupViewHolder
Fix: FileAdapter created once in ViewHolder init via lambda; eliminates GC pressure from per-bind recreation
2026-04-01 02:35:19
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DetectDuplicatesUseCase.kt
DetectDuplicatesUseCase
Fix: always map all resources incl. id==0 to avoid wrong resource fallback during hash computation
2026-04-01 02:41:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager.showDeleteBySizeConfirm
Fix newline replace bug in preview dialog; style Delete button red
2026-04-01 02:41:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel.scanBySize
Add setLoading(true/false) and scanning toast around DeleteByFileSizeUseCase.scan()
2026-04-01 02:45:06
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DeleteByFileSizeUseCase.kt
DeleteByFileSizeUseCase.execute
Review fix: execute() now returns FileOperationResult directly (PermissionRequired/AuthRequired support); legacy invoke() adapts to DeleteResult
2026-04-01 02:45:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel.executeBySizeDeleteConfirmed
Review fix: handle all FileOperationResult branches incl. PermissionRequired+AuthenticationRequired; remove extra Toast during scan
2026-04-01 02:45:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Review fix: remove unused imports MaterialButton/ResourceType; use MaterialColors.getColor(colorError) for warning text and positive button
2026-04-01 03:01:17
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ArchiveFilesUseCase.kt
ArchiveFilesUseCase
New: archives selected local files to ZIP via ZipOutputStream+Flow; 64KB buffer; content:// and file:// support; cancellation cleanup; generateUniqueFile collision avoidance (task_1_3)
2026-04-01 03:01:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel.archiveSelectedFiles
New: archiveSelectedFiles(archiveName, destPath) + cancelArchive(); new BrowseEvent.ArchiveProgress/ArchiveSuccess/ArchiveError; local-only guard (task_1_3)
2026-04-01 03:01:17
app_v2/src/main/res/layout/activity_browse.xml
layoutOperations.btnArchive
New: added btnArchive ImageButton to layoutOperations panel alongside btnShare (task_1_3)
2026-04-01 03:01:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.showArchiveConfigurationDialog
New: archive btn click/visibility, showArchiveConfigurationDialog, showArchiveProgressDialog, archive event handlers (ArchiveProgress/Success/Error) (task_1_3)
2026-04-01 03:01:17
app_v2/src/main/res/values/strings.xml
strings (EN/RU/UK)
New: archive_* string resources in all 3 locales (task_1_3)
2026-04-01 03:01:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ArchiveFilesUseCase.kt
ArchiveFilesUseCase
New: archives selected local files to ZIP; Flow; 64KB buffer; content:// and file:// support; cancellation cleanup (task_1_3)
2026-04-01 03:01:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel.archiveSelectedFiles
New: archiveSelectedFiles()+cancelArchive(); BrowseEvent.ArchiveProgress/Success/Error; local-only guard (task_1_3)
2026-04-01 03:01:33
app_v2/src/main/res/layout/activity_browse.xml
layoutOperations.btnArchive
New: btnArchive ImageButton in bottom operations panel (task_1_3)
2026-04-01 03:01:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.showArchiveConfigurationDialog
New: archive btn wiring, config dialog, progress dialog, event handlers (task_1_3)
2026-04-01 03:01:33
app_v2/src/main/res/values/strings.xml
strings EN/RU/UK
New: archive_* resources in all 3 locales (task_1_3)
2026-04-01 03:09:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager.showMenu/showCreateFolderDialog
Hide action_create_folder when showSubfoldersAsItems=false or isReadOnly=true; replace EditText with TextInputLayout+live validation, OK button disabled until name is valid
2026-04-01 03:09:27
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/LocalTransferProvider.kt
LocalTransferProvider.createDirectory
Added MediaStoreNotifier.notifyFile() after mkdirs() on legacy storage paths
2026-04-01 03:11:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager imports
Restore missing android.widget.EditText import (used by showDeleteBySizeDialog after FIX-2 refactor)
2026-04-01 03:13:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager.showCreateFolderDialog
Fix compile error: TextInputLayout.LayoutParams -> LinearLayout.LayoutParams for inputEdit
2026-04-01 03:15:25
PLAN/tasks/task_1_5_automation_source.md
task_1_5_automation_source
Revised spec: corrected to Activity-based navigation (no NavController/SafeArgs), correct feature flag pattern, added prefilledSourceId approach
2026-04-01 03:15:25
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
Add action_automate_resource menu item (task_1_5)
2026-04-01 03:15:26
app_v2/src/main/res/values/strings.xml
strings EN
Add menu_automate_source string EN (task_1_5)
2026-04-01 03:15:26
app_v2/src/main/res/values-ru/strings.xml
strings RU
Add menu_automate_source string RU (task_1_5)
2026-04-01 03:15:26
app_v2/src/main/res/values-uk/strings.xml
strings UK
Add menu_automate_source string UK (task_1_5)
2026-04-01 03:15:35
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
Add action_automate_resource menu item (task_1_5)
2026-04-01 03:15:35
app_v2/src/main/res/values/strings.xml
strings_EN
Add menu_automate_source string EN (task_1_5)
2026-04-01 03:15:35
app_v2/src/main/res/values-ru/strings.xml
strings_RU
Add menu_automate_source string RU (task_1_5)
2026-04-01 03:15:35
app_v2/src/main/res/values-uk/strings.xml
strings_UK
Add menu_automate_source string UK (task_1_5)
2026-04-01 03:15:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel.scheduledOperationsEnabled
Add scheduledOperationsEnabled: Boolean property backed by cachedSettings (task_1_5)
2026-04-01 03:15:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager.showMenu
Add isScheduleEnabled + onAutomateSource params; handle action_automate_resource click (task_1_5)
2026-04-01 03:15:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.btnResourceOps
Pass isScheduleEnabled+onAutomateSource to showMenu; launch SettingsActivity with EXTRA_SOURCE_RESOURCE_ID (task_1_5)
2026-04-01 03:15:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity.EXTRA_SOURCE_RESOURCE_ID
Add companion const + navigate to tab 3 when opened from Browse via EXTRA_SOURCE_RESOURCE_ID (task_1_5)
2026-04-01 03:15:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog.prefilledSourceId
Add prefilledSourceId ctor param + applyPrefilledSource() to auto-fill source dropdown (task_1_5)
2026-04-01 03:15:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment.checkAndOpenAutomateDialog
onResume: check EXTRA_SOURCE_RESOURCE_ID extra, consume it, open ScheduledOperationDialog with prefilledSourceId (task_1_5)
2026-04-01 03:22:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment.checkAndOpenAutomateDialog
Add runtime guard: settings.enableScheduledOperations check alongside BuildConfig flag (task_1_5 fix)
2026-04-01 03:27:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/AddResourceAsDestinationUseCase.kt
AddResourceAsDestinationUseCase
New UseCase: marks current resource as Quick Sort destination using isDestination flag
2026-04-01 03:30:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel.addCurrentResourceAsDestination
Add flow for adding current resource as Quick Sort destination; emit ResourceAddedAsDestination/ShowError
2026-04-01 03:30:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager.showMenu
Add action_add_to_receivers visibility and click handling via onAddToDestinations callback
2026-04-01 03:30:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.btnResourceOps/events
Wire add-to-destination callback and handle ResourceAddedAsDestination with Snackbar + Settings shortcut
2026-04-01 03:30:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity.EXTRA_INITIAL_TAB
Add EXTRA_INITIAL_TAB and open requested tab when provided
2026-04-01 03:30:43
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
Add action_add_to_receivers menu item
2026-04-01 03:30:43
app_v2/src/main/res/values/strings.xml
strings EN
Add menu_add_receiver/msg_added_as_receiver/btn_edit_receiver strings
2026-04-01 03:30:43
app_v2/src/main/res/values-ru/strings.xml
strings RU
Add menu_add_receiver/msg_added_as_receiver/btn_edit_receiver strings
2026-04-01 03:30:43
app_v2/src/main/res/values-uk/strings.xml
strings UK
Add menu_add_receiver/msg_added_as_receiver/btn_edit_receiver strings
2026-04-01 03:46:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
DocumentPrintManager
New: print manager for PDF/IMAGE/TEXT via system PrintManager; network files cached to cacheDir, temp file cleaned up in onFinish()
2026-04-01 03:46:16
app_v2/src/main/res/drawable/ic_print.xml
ic_print
New: Material Design printer vector icon for overflow menu
2026-04-01 03:46:16
app_v2/src/main/res/menu/overflow_menu_player.xml
menu_print
New: added menu_print item (PDF/TEXT/IMAGE only) to overflow player menu
2026-04-01 03:46:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelCallback.onPrintClicked
New: added onPrintClicked() to callback interface; icon tint, visibility (PDF/TEXT/IMAGE), click routing in overflow menu
2026-04-01 03:46:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
onPrintClicked
New: implements onPrintClicked() - delegates to activity.printManager.printCurrentFile()
2026-04-01 03:46:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.printManager
New: added printManager lateinit field; initialized in initNetworkAndTranslation alongside shareManager
2026-04-01 03:46:16
app_v2/src/main/res/values/strings.xml
menu_print/error_print_*
New: added menu_print, error_print_unavailable, print_job_label, error_print_file_too_large, error_print_download_failed (EN)
2026-04-01 03:46:16
app_v2/src/main/res/values-ru/strings.xml
menu_print/error_print_*
New: added print strings in Russian
2026-04-01 03:46:16
app_v2/src/main/res/values-uk/strings.xml
menu_print/error_print_*
New: added print strings in Ukrainian
2026-04-01 03:46:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
DocumentPrintManager
New: print manager for PDF/IMAGE/TEXT via system PrintManager; network files cached; temp file cleaned in onFinish
2026-04-01 03:46:29
app_v2/src/main/res/drawable/ic_print.xml
ic_print
New: Material Design printer vector icon
2026-04-01 03:46:29
app_v2/src/main/res/menu/overflow_menu_player.xml
menu_print
New: added menu_print item (PDF/TEXT/IMAGE) to overflow player menu
2026-04-01 03:46:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelCallback.onPrintClicked
New: added onPrintClicked() callback; icon tint; visibility (PDF/TEXT/IMAGE); click handler
2026-04-01 03:46:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
onPrintClicked
New: implements onPrintClicked() -> activity.printManager.printCurrentFile()
2026-04-01 03:46:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.printManager
New: printManager field initialized alongside shareManager
2026-04-01 03:46:30
app_v2/src/main/res/values/strings.xml
menu_print strings
New: print strings EN (menu_print, error_print_unavailable, print_job_label, error_print_file_too_large, error_print_download_failed)
2026-04-01 03:46:30
app_v2/src/main/res/values-ru/strings.xml
menu_print strings
New: print strings RU
2026-04-01 03:46:30
app_v2/src/main/res/values-uk/strings.xml
menu_print strings
New: print strings UK
2026-04-01 03:46:39
app_v2/src/main/res/menu/overflow_menu_player.xml
menu_print
New: added menu_print item (PDF/TEXT/IMAGE) to overflow player menu
2026-04-01 03:46:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
onPrintClicked
New: added onPrintClicked() to callback; icon tint; visibility logic; click handler
2026-04-01 03:46:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
onPrintClicked
New: implements onPrintClicked() -> activity.printManager.printCurrentFile()
2026-04-01 03:46:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
printManager
New: printManager field initialized in initNetworkAndTranslation
2026-04-01 03:46:46
app_v2/src/main/res/values/strings.xml
print strings EN
New: menu_print, error_print_unavailable, print_job_label, error_print_file_too_large, error_print_download_failed (EN)
2026-04-01 03:46:46
app_v2/src/main/res/values-ru/strings.xml
print strings RU
New: print strings Russian
2026-04-01 03:46:46
app_v2/src/main/res/values-uk/strings.xml
print strings UK
New: print strings Ukrainian
2026-04-01 03:46:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
onPrintClicked
New: implements onPrintClicked() -> activity.printManager.printCurrentFile()
2026-04-01 03:46:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
printManager
New: printManager field initialized in initNetworkAndTranslation
2026-04-01 03:46:54
app_v2/src/main/res/values/strings.xml
print strings EN
New: menu_print, error_print_unavailable, print_job_label, error_print_file_too_large, error_print_download_failed
2026-04-01 03:46:54
app_v2/src/main/res/values-ru/strings.xml
print strings RU
New: print strings Russian
2026-04-01 03:46:54
app_v2/src/main/res/values-uk/strings.xml
print strings UK
New: print strings Ukrainian
2026-04-01 03:46:58
app_v2/src/main/res/values/strings.xml
print strings EN
New: menu_print, error_print_unavailable, print_job_label, error_print_file_too_large, error_print_download_failed
2026-04-01 03:47:01
app_v2/src/main/res/values-ru/strings.xml
print strings RU
New: print strings Russian
2026-04-01 03:47:01
app_v2/src/main/res/values-uk/strings.xml
print strings UK
New: print strings Ukrainian
2026-04-01 03:50:17
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExtractArchiveUseCase.kt
ExtractArchiveUseCase
Added ZIP extraction Flow with progress percent, cancel support, zip-bomb/path-traversal guards, and SAF content:// output support
2026-04-01 03:50:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel extraction flow
Added extraction state/events and methods prepareExtraction/extractArchive/cancelExtraction; local+ZIP checks, auto target folder suffixing, and post-success refresh
2026-04-01 03:50:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity archive click handling
Intercept BINARY_ARCHIVE ZIP click, show extract confirm dialog, progress dialog with percent, and success Snackbar with Open action
2026-04-01 03:50:17
app_v2/src/main/res/values/strings.xml
strings.xml
Added EN unarchive strings (dialog, progress, errors, open action)
2026-04-01 03:50:17
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
Added RU unarchive strings (dialog, progress, errors, open action)
2026-04-01 03:50:17
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml
Added UK unarchive strings (dialog, progress, errors, open action)
2026-04-01 03:50:17
docs/FEATURES.md
FEATURES EN
Added user-facing feature bullet for ZIP extraction on click in Browse with percent progress and Open action
2026-04-01 03:50:17
docs/FEATURES_RU.md
FEATURES RU
Added user-facing feature bullet for ZIP extraction on click in Browse
2026-04-01 03:50:17
docs/FEATURES_UK.md
FEATURES UK
Added user-facing feature bullet for ZIP extraction on click in Browse
2026-04-01 03:53:36
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl.getSettings
Changed DataStore fallback for enableScheduledOperations from false to true so clean installs default scheduled operations to enabled
2026-04-01 03:53:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings.enableScheduledOperations
Changed domain default for enableScheduledOperations from false to true to keep initial state and reset defaults consistent
2026-04-01 03:53:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData.enableScheduledOperations
Changed backup/import model default for enableScheduledOperations from false to true for consistency with app defaults
2026-04-01 03:53:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase settings fallback
Changed missing enableScheduledOperations import fallback from false to true so legacy backups inherit new default
2026-04-01 03:53:36
app_v2/build.gradle.kts
release ENABLE_SCHEDULED_OPERATIONS
Enabled scheduled operations BuildConfig flag in release builds so automation UI is available outside debug
2026-04-01 03:53:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
onPrintClicked
Fix lint: Uri.parse() -> .toUri() KTX extension (UseKtx warning)
2026-04-01 03:55:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExtractArchiveUseCase.kt
ExtractArchiveUseCase fallback/cancel/no-space
Review fix: charset fallback now triggers only for charset-like errors; cancellation and no-space errors no longer retry extraction; added explicit no_space mapping
2026-04-01 03:55:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel extraction mapping
Review fix: map no_space extraction error to localized message and make ZIP suffix stripping case-insensitive when resolving target folder
2026-04-01 03:55:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity extraction progress dialog
Review fix: switched extraction progress UI to existing FileOperationProgressDialog with delayed show and cancellation callback
2026-04-01 03:55:34
app_v2/src/main/res/values/strings.xml
strings.xml unarchive
Review fix: added EN keys unarchive_progress_entry and unarchive_error_no_space
2026-04-01 03:55:34
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml unarchive
Review fix: added RU keys unarchive_progress_entry and unarchive_error_no_space
2026-04-01 03:55:34
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml unarchive
Review fix: added UK keys unarchive_progress_entry and unarchive_error_no_space
2026-04-01 12:17:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager.showPdfPage
Fix: close currentPdfPage immediately after render() so PdfRendererWrapper can open pages for thumbnail navigation
2026-04-01 12:31:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfThumbnailAdapter.kt
PdfThumbnailAdapter
Increase thumbnail render size: WIDTH 100->300, MAX_DIM 200->500, cache 50->30
2026-04-01 12:31:09
app_v2/src/main/res/layout/item_pdf_thumbnail.xml
item_pdf_thumbnail
Fix thumbnail scaleType centerInside->fitCenter, height 150->170dp for better fill
2026-04-01 12:52:26
scripts/utils/search-log.ps1
search-log.ps1
Fixed .Count crash on non-array results when -Top/-Last used with -Context; wrap results in @() to ensure array type
2026-04-01 12:53:34
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
SmbMediaScanner
Fixed ClassCastException on API<29: replaced MediaMetadataRetriever().use{} with explicit try/finally using release()/close() based on Build.VERSION
2026-04-01 12:58:19
scripts/utils/search-log.ps1
search-log.ps1
Major improvement: added -Exceptions, -Unique, -Stats, -Thread, -ProcessFilter, -CaseSensitive; fixed context mode to use index-based matching; added line numbers; Write-Out buffer makes -OutFile work in all modes; expanded .SYNOPSIS docs
2026-04-01 13:03:29
.github/prompts/spec.prompt.md
spec.prompt.md
Add VS Code Copilot prompt: Specification Writer (mirrors .claude/commands/spec.md)
2026-04-01 13:03:29
.github/prompts/doc-update.prompt.md
doc-update.prompt.md
Add VS Code Copilot prompt: Documentation Update (mirrors .claude/commands/doc-update.md)
2026-04-01 13:03:29
.github/prompts/log-reader.prompt.md
log-reader.prompt.md
Add VS Code Copilot prompt: Log Reader analyst (mirrors .claude/commands/log-reader.md)
2026-04-01 13:03:29
.github/prompts/build.prompt.md
build.prompt.md
Add VS Code Copilot prompt: Build Guide (mirrors .claude/commands/build.md)
2026-04-01 13:03:29
.github/prompts/git.prompt.md
git.prompt.md
Add VS Code Copilot prompt: Git Guide (mirrors .claude/commands/git.md)
2026-04-01 13:03:29
.github/copilot-instructions.md
copilot-instructions.md
Add Skill Rules table with mandatory auto-invoke triggers for spec/doc-update/log-reader/build/git prompts
2026-04-01 13:08:42
app_v2/src/main/res/layout/activity_browse.xml
layoutOperations
Fix: changed initial visibility from visible to gone to prevent empty panel flash on Activity start
2026-04-01 13:08:46
app_v2/src/main/res/layout-land/activity_browse.xml
layoutOperations + btnArchive
Fix: changed initial visibility from visible to gone; added missing btnArchive button to landscape layout (was only in portrait)
2026-04-01 14:14:18
app_v2/src/main/res/layout/activity_browse.xml
layoutOperations buttons tint
Fix: changed all layoutOperations buttons tint from @color/selector_player_button_tint (white, invisible on white colorSurface) to ?attr/colorControlNormal (theme-adaptive, matches landscape layout)
2026-04-01 14:54:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseEvent.ArchiveError
Add exception field to ArchiveError event; pass exception from ArchiveProgress.Error in sendEvent call
2026-04-01 14:54:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.ArchiveError handler
Fix: replace Toast with showError() so ArchiveError respects showDetailedErrors setting (dialog instead of fleeting toast)
2026-04-01 14:56:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.btnArchive visibility
Fix: hide btnArchive when resource is not LOCAL (SMB/SFTP/FTP/cloud not supported for ZIP)
2026-04-01 15:17:30
app_v2/src/main/res/layout/activity_add_resource.xml
btnAddToResources
Fix: move btnAddToResources outside NestedScrollView to ConstraintLayout bottom - always visible above Android nav bar
2026-04-01 15:25:01
app_v2/src/main/res/layout/activity_browse.xml
btnResourceAction, btnShare
Fix: both buttons now use selector_themed_button_tint for visibility in light and dark modes
2026-04-01 15:35:24
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt
applyFlavorMediaTypeRestrictions
Fix: BINARY_ARCHIVE/DISK/EXE/OTHER now return true so ZIP files are not stripped before scanner call
2026-04-01 15:40:54
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
isAllFilesMode
Fix: size==7 -> size>=7 so BINARY types in supportedTypes (11 total) still trigger allFiles protocol mode
2026-04-01 15:40:54
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt
isAllFilesMode
Fix: size==7 -> size>=7 (same as SMB fix)
2026-04-01 15:40:54
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpMediaScanner.kt
isAllFilesMode
Fix: size==7 -> size>=7 (same as SMB fix)
2026-04-01 15:40:54
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudMediaScanner.kt
isAllFilesMode
Fix: size==7 -> size>=7 (same as SMB fix)
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/FileTypeFilter.kt
FileTypeFlags
Replaced FileTypeFilter enum with FileTypeFlags bitmask object (ALL_FILES=1,IMAGES=2,AUDIO=4,VIDEO=8,DOCUMENTS=16)
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScheduledOperation.kt
ScheduledOperation
Replaced fileTypeFilter:FileTypeFilter with fileTypeMask:Int=FileTypeFlags.DEFAULT
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ScheduledOperationEntity.kt
ScheduledOperationEntity
Column file_type_filter(String) -> file_type_mask(Int)
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
Version 21->22, added MIGRATION_21_22 with CASE SQL for enum->bitmask conversion
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
Registered MIGRATION_21_22
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ScheduledOperationRepositoryImpl.kt
ScheduledOperationRepositoryImpl
Updated mapping: FileTypeFilter->FileTypeFlags bitmask
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt
ExecuteScheduledOperationUseCase
Added buildEffectiveResource()+matchesTypeMask(); ALL_FILES activates isAllFilesMode in scanners
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Replaced dropdown with 5 checkboxes; added setupFileTypeInterlock(), buildFileTypeMask(), applyFileTypeMask()
2026-04-01 16:11:07
app_v2/src/main/res/layout/dialog_scheduled_operation.xml
dialog_scheduled_operation
Replaced AutoCompleteTextView with LinearLayout+5 CheckBoxes for file type mask
2026-04-01 16:11:07
app_v2/src/main/res/layout-land/dialog_scheduled_operation.xml
dialog_scheduled_operation (land)
Same checkbox UI as portrait
2026-04-01 16:11:07
app_v2/src/main/res/values/strings.xml
strings
Updated filter strings EN; added scheduled_ops_filter_select_at_least_one
2026-04-01 16:11:07
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Updated filter strings RU
2026-04-01 16:11:07
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Updated filter strings UK
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt
ExportSettingsUseCase
fileTypeFilter.name -> fileTypeMask integer in XML export
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Parse fileTypeMask (new) with fallback to legacy fileTypeFilter tag via fromLegacyName()
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/ScheduledOperationsAdapter.kt
ScheduledOperationsAdapter
Replaced when(fileTypeFilter) with buildFileTypeMaskLabel() bitmask display
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupScheduledOperation
fileTypeFilter:String->nullable; added fileTypeMask:Int? for JSON backup format v3
2026-04-01 16:11:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Replaced FileTypeFilter with FileTypeFlags; backward-compat JSON import via fromLegacyName()
2026-04-01 16:11:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/FileTypeFilter.kt
FileTypeFlags
Replaced FileTypeFilter enum with FileTypeFlags bitmask object (ALL_FILES=1,IMAGES=2,AUDIO=4,VIDEO=8,DOCUMENTS=16)
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScheduledOperation.kt
ScheduledOperation
Replaced fileTypeFilter:FileTypeFilter with fileTypeMask:Int=FileTypeFlags.DEFAULT
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ScheduledOperationEntity.kt
ScheduledOperationEntity
Column file_type_filter(String) -> file_type_mask(Int)
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
Version 21->22, added MIGRATION_21_22 with CASE SQL for enum->bitmask conversion
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
Registered MIGRATION_21_22
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ScheduledOperationRepositoryImpl.kt
ScheduledOperationRepositoryImpl
Updated mapping FileTypeFilter->FileTypeFlags bitmask
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt
ExecuteScheduledOperationUseCase
Added buildEffectiveResource()+matchesTypeMask(); ALL_FILES activates isAllFilesMode in scanners
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Replaced dropdown with 5 checkboxes; added setupFileTypeInterlock buildFileTypeMask applyFileTypeMask
2026-04-01 16:11:32
app_v2/src/main/res/layout/dialog_scheduled_operation.xml
dialog_scheduled_operation
Replaced AutoCompleteTextView with LinearLayout+5 CheckBoxes for file type mask
2026-04-01 16:11:32
app_v2/src/main/res/layout-land/dialog_scheduled_operation.xml
dialog_scheduled_operation (land)
Same checkbox UI as portrait
2026-04-01 16:11:32
app_v2/src/main/res/values/strings.xml
strings
Updated filter strings EN; added scheduled_ops_filter_select_at_least_one
2026-04-01 16:11:32
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Updated filter strings RU
2026-04-01 16:11:32
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Updated filter strings UK
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt
ExportSettingsUseCase
fileTypeFilter.name -> fileTypeMask integer in XML export
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Parse fileTypeMask (new) with fallback to legacy fileTypeFilter tag
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/ScheduledOperationsAdapter.kt
ScheduledOperationsAdapter
Replaced when(fileTypeFilter) with buildFileTypeMaskLabel() bitmask display
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupScheduledOperation
fileTypeFilter->nullable; added fileTypeMask:Int? for JSON backup forward compat
2026-04-01 16:11:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Replaced FileTypeFilter with FileTypeFlags; backward-compat JSON import via fromLegacyName()
2026-04-01 16:11:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScheduledOperation.kt
ScheduledOperation
Replaced fileTypeFilter:FileTypeFilter with fileTypeMask:Int=FileTypeFlags.DEFAULT
2026-04-01 16:11:41
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
Version 21->22 MIGRATION_21_22 with CASE SQL enum->bitmask
2026-04-01 16:11:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/ScheduledOperationsAdapter.kt
ScheduledOperationsAdapter
Replaced when(fileTypeFilter) with buildFileTypeMaskLabel() bitmask display
2026-04-01 16:11:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Replaced FileTypeFilter with FileTypeFlags; backward-compat JSON import
2026-04-01 16:23:12
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/FileTypeFilter.kt
FileTypeFlags
Fix compatibility: legacy enum ALL now maps to ALL_MEDIA (30), not ALL_FILES
2026-04-01 16:23:12
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
MIGRATION_21_22
Fix compatibility: DB migration maps legacy file_type_filter=’ALL’ to 30 (all media), not 31
2026-04-01 16:23:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Sanitize file type mask by flavor; clear hidden checkbox states and prevent persisting unsupported flags
2026-04-01 16:23:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/ScheduledOperationsAdapter.kt
ScheduledOperationsAdapter
Fix invalid zero-mask label: show ‘(none)’ instead of ‘All files’
2026-04-01 16:23:13
app_v2/src/main/res/values/strings.xml
scheduled_op_filter_none
Add EN string for empty/invalid scheduled operation type mask
2026-04-01 16:23:13
app_v2/src/main/res/values-ru/strings.xml
scheduled_op_filter_none
Add RU string for empty/invalid scheduled operation type mask
2026-04-01 16:23:13
app_v2/src/main/res/values-uk/strings.xml
scheduled_op_filter_none
Add UK string for empty/invalid scheduled operation type mask
2026-04-01 16:43:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Prevented RecyclerView layout-time crash by deferring notifyItemRangeChanged via safe helper
2026-04-01 16:54:51
app_v2/src/main/java/com/sza/fastmediasorter/utils/MediaStoreNotifier.kt
MediaStoreNotifier
Do not log JobCancellationException as scan failure; rethrow CancellationException in notifyFileAwait
2026-04-01 20:45:23
app_v2/src/main/res/layout/activity_browse.xml
layoutControls
Moved resource ops button before play and made play fill remaining right space
2026-04-01 20:45:23
app_v2/src/main/res/layout-land/activity_browse.xml
layoutControls
Added resource ops button before play and made play fill remaining right space
2026-04-01 20:51:04
app_v2/src/main/res/layout-land/page_welcome_default_player.xml
welcome_default_player
Prioritized text/actions and added full-page scroll; made icon secondary for compact landscape screens
2026-04-01 22:02:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesActivity.kt
DuplicatesActivity
Added EXTRA_RESOURCE_ID and EXTRA_AUTO_DELETE constants; pass args to DuplicatesFragment via Bundle
2026-04-01 22:02:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesViewModel.kt
DuplicatesViewModel
Added pinnedResourceId to state, autoDeleteMode field, initWithResource() and applyPinnedResource() methods
2026-04-01 22:02:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesFragment.kt
DuplicatesFragment
Read launch args, call initWithResource(); sort chips with pinned resource first; auto-delete on ScanComplete when autoDeleteMode=true
2026-04-01 22:02:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Split action_find_duplicates and action_delete_duplicates into separate branches; pass EXTRA_RESOURCE_ID and EXTRA_AUTO_DELETE via Intent
2026-04-01 22:02:20
docs/FEATURES.md,docs/FEATURES_RU.md,docs/FEATURES_UK.md
FEATURES docs
Updated duplicate detection description: documented two distinct modes and context-aware resource pre-selection
2026-04-01 22:06:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel.removeFiles
Fixed: now also updates MediaFilesCacheManager and cachedFileListRepository (DB) and totalFileCount to prevent ghost files after deletion
2026-04-01 22:21:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
applyEdgeToEdgeInsets
Fix: add requestApplyInsets() to force re-dispatch after post{} - insets were missed on first frame; also fixed accumulating toolbar padding
2026-04-01 22:24:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Skip missing-file dialog when initial path exists in unfiltered list but is filtered by media type
2026-04-01 22:31:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Respect resource.allFiles in Player file filtering to avoid type-based exclusion
2026-04-01 22:33:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Exclude binary types from Player list while honoring resource allFiles for supported formats
2026-04-01 22:59:18
app_v2/src/main/res/layout-land/page_welcome_default_player.xml
welcome_default_player
Restored 2-column landscape layout; kept instruction hint visible on left and compact buttons on right
2026-04-01 23:29:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager
Fixed ViewBinding initialization for miniNowPlayingBar include layout - use ViewMiniNowPlayingBinding.bind() instead of direct cast
2026-04-01 23:36:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Fixed exhaustive when expression for LogExportHelper.ExportResult in shareLogs() method
2026-04-01 23:38:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager
Added Android 8 (API 26) compatibility - handle null nested binding with fallback to manually binding included layout view
2026-04-01 23:38:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager.init()
Added detailed Timber debugging logs for Android 8 binding initialization flow
2026-04-01 23:50:33
app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LogExportHelper.kt
LogExportHelper
Add SaveSuccess result + writeZipToUri() for SAF-based local save
2026-04-01 23:50:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Replace btnExportLogs with btnShareLogs + btnSaveLogs; add saveLogsLauncher (ACTION_CREATE_DOCUMENT)
2026-04-01 23:50:45
app_v2/src/main/res/layout/fragment_settings_general.xml
layout/fragment_settings_general
Replace btnExportLogs with LinearLayout row: btnShareLogs + btnSaveLogs (portrait + landscape)
2026-04-02 00:02:17
app_v2/src/main/res/layout-land/fragment_settings_general.xml
GoogleDriveBackupRestoreLayout
Placed Backup and Restore buttons on one row in landscape layout
2026-04-02 00:06:25
gradle.properties
android.enableR8.fullMode / android.defaults.buildfeatures.resvalues
Remove 2 deprecated AGP options: enableR8.fullMode=false (default now true) and resvalues=true (no resValue usage); restore builtInKotlin=false+newDsl=false with kapt->KSP migration note
2026-04-02 00:09:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SyncMediaStoreUseCase.kt
SyncMediaStoreUseCase
Treat CancellationException separately in per-file MediaStore notification loop to avoid false error logging
2026-04-02 00:19:05
app_v2/src/main/res/layout/item_media_file.xml
item_media_file
Fix: replace selector_player_button_tint (hardcoded white) with selector_themed_button_tint (adaptive) on all 6 action buttons - invisible on light background
2026-04-02 00:19:08
app_v2/src/main/res/layout/item_media_file_grid_operations.xml
item_media_file_grid_operations
Fix: replace selector_player_button_tint with selector_themed_button_tint on all 4 grid operation buttons - invisible on light background
2026-04-02 00:19:21
app_v2/src/main/res/values/strings.xml
menu_add_receiver
Rename: ‘Add to Quick Sort’ → ‘Add to Sort List’ (EN), ‘В получатели’ → ‘В список сортировки’ (RU), ‘До отримувачів’ → ‘До списку сортування’ (UK)
2026-04-02 00:23:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
action_add_to_receivers visibility
Hide ‘Add to Sort List’ menu item for predefined resources (virtual paths like ‘All Videos’)
2026-04-02 00:24:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
ResourceAdapter
Hide copy action for predefined virtual resources in edit actions
2026-04-02 00:40:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
playLocalVideoInternal
Use showFileNotFound callback instead of showError when local file is missing; log changed to WARN level
2026-04-02 00:40:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
showFileNotFound
Add gentle info AlertDialog (no copy-to-clipboard) for deleted/missing file case in player
2026-04-02 00:40:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
showFileNotFound
Implement new PlayerCallback.showFileNotFound delegate
2026-04-02 00:40:25
app_v2/src/main/res/values/strings.xml
player_file_not_found_message
Add player_file_not_found_message string (EN/RU/UK) for deleted file gentle notice
2026-04-02 01:59:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Fix: skip MediaPlayer fallback for network paths (smb/sftp/ftp/cloud) - setDataSource with smb:// fails immediately with what=1 extra=MIN_VALUE; now shows ExoPlayer format error directly instead of confusing double-fail
2026-04-02 02:15:14
app_v2/build.gradle.kts
release ENABLE_SCHEDULED_OPERATIONS
Disabled ENABLE_SCHEDULED_OPERATIONS in release builds (set false) - scheduled ops UI/Automation menu hidden until Google Play approves permissions
2026-04-02 02:25:31
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/NetworkCredentialsDao.kt
getByServerAndShare
Fix: broaden SQL to match server stored with or without port suffix (e.g. ‘192.168.1.110’ OR ‘192.168.1.110:445’) - prevents credential lookup failure when user entered host:port in server field
2026-04-02 02:25:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
addSmbResourceManually
Fix: strip port from server field before saving credentials to prevent host:port being stored in server column
2026-04-02 02:38:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
syncWithCache
Fix: skip root-cache overwrite when in subfolder mode - reload loadDirectoryContents(currentPath) instead to prevent list reset to root while breadcrumb keeps subfolder path
2026-04-02 10:58:37
index.html
full-features-panel
Added auto-loading full feature list section (marked.js fetch docs/FEATURES.md)
2026-04-02 10:58:37
index-ru.html
full-features-panel
Added auto-loading full feature list section (fetch docs/FEATURES_RU.md, RU)
2026-04-02 10:58:37
index-uk.html
full-features-panel
Added auto-loading full feature list section (fetch docs/FEATURES_UK.md, UK)
2026-04-02 10:58:37
styles.css
full-features-panel
Added styles for full feature list panel and rendered markdown content
2026-04-02 11:56:23
PLAN/spec_toselectfolder.md
spec_toselectfolder
Corrected As-Is analysis: main panel buttons already destination-agnostic; added MediaFileAdapter hasDestinations gate as primary change target; fixed BrowseActionBarManager (stub); corrected SFTP/FTP client paths; updated flow diagrams and class responsibilities table; clarified SettingsRepository as persistence layer
2026-04-02 11:59:05
docs/FEATURES.md
Section 2.10 + Section 11.7
Fixed 2 doc inaccuracies: removed false 10K thumbnail auto-disable claim; replaced EPUB System Default theme with correct OLED Black
2026-04-02 11:59:05
docs/FEATURES_RU.md
Section 2.10 + Section 11.7
RU mirror: same 2 doc fixes (thumbnails + EPUB themes)
2026-04-02 11:59:05
docs/FEATURES_UK.md
Section 2.10 + Section 11.7
UK mirror: same 2 doc fixes (thumbnails + EPUB themes)
2026-04-02 12:18:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
executeOperationToPath
Fixed executeOperationToPath: replaced incompatible FileCopyProgressDialog with toast-based approach matching executeMoveDirectly pattern
2026-04-02 12:18:12
app_v2/src/main/res/layout-land/dialog_copy_to.xml
btnSelectFolder
Added btnSelectFolder to landscape layout variant to fix nullable ViewBinding compile error
2026-04-02 12:18:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
executeOperationToPath
Fixed executeOperationToPath: replaced incompatible FileCopyProgressDialog with toast-based approach
2026-04-02 12:18:18
app_v2/src/main/res/layout-land/dialog_copy_to.xml
btnSelectFolder
Added btnSelectFolder to landscape dialog layout variant to fix nullable ViewBinding compile error
2026-04-02 12:18:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
hasDestinations-gate
Removed hasDestinations gate from per-item copy/move buttons in list and grid ViewHolders
2026-04-02 12:18:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
lastSelected*Folder
Added 7 lastSelected*Folder fields for per-resource-type folder picker persistence
2026-04-02 12:18:31
app_v2/src/main/res/layout/dialog_copy_to.xml
btnSelectFolder
Added btnSelectFolder (OutlinedButton) between layoutDestinations and btnCancel
2026-04-02 12:18:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
onSelectFolderClicked
Added onSelectFolderClicked callback param; dialog stays open when no destinations (shows Select Folder only)
2026-04-02 12:18:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
onFolderPickerRequested
Added onFolderPickerRequested to FileOperationCallbacks interface; wired in showCopyDialog + showMoveDialogInternal
2026-04-02 12:18:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
folderPickerLauncher
Added folderPickerLauncher (OpenDocumentTree) + PendingFolderPickerOp + onFolderPickerRequested callback
2026-04-02 12:18:31
app_v2/src/main/java/com/sza/fastmediasorter/core/util/UriPathResolver.kt
NEW
NEW: Utility to resolve document tree content URIs to real filesystem paths
2026-04-02 12:18:38
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
lastSelected*Folder
Added 7 lastSelectedXFolder fields for per-resource-type folder picker persistence
2026-04-02 12:18:38
app_v2/src/main/res/layout/dialog_copy_to.xml
btnSelectFolder
Added btnSelectFolder OutlinedButton between layoutDestinations and btnCancel
2026-04-02 12:18:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
onSelectFolderClicked
Added onSelectFolderClicked param; dialog stays open when no destinations
2026-04-02 12:18:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
onFolderPickerRequested
Added onFolderPickerRequested to FileOperationCallbacks; wired in showCopyDialog and showMoveDialogInternal
2026-04-02 12:18:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
folderPickerLauncher
Added folderPickerLauncher OpenDocumentTree + PendingFolderPickerOp + onFolderPickerRequested
2026-04-02 12:18:38
app_v2/src/main/java/com/sza/fastmediasorter/core/util/UriPathResolver.kt
NEW-FILE
NEW: Utility resolving document tree content URIs to real filesystem paths
2026-04-02 12:18:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
onSelectFolderClicked
Added onSelectFolderClicked param; dialog stays open when no destinations
2026-04-02 12:18:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
folderPickerLauncher
Added folderPickerLauncher OpenDocumentTree + PendingFolderPickerOp + onFolderPickerRequested
2026-04-02 12:18:46
app_v2/src/main/java/com/sza/fastmediasorter/core/util/UriPathResolver.kt
NEW-FILE
NEW: Utility resolving document tree content URIs to real filesystem paths
2026-04-02 12:23:25
PLAN/spec_create-subfolder.md
spec
Add specification: Browse Create Subfolder & Subfolder Item Operations
2026-04-02 12:28:35
PLAN/spec_create-subfolder-menu.md
spec
Add specification: Browse Create Subfolder menu action (Tier 1 quick win)
2026-04-02 12:28:35
PLAN/spec_subfolder-item-operations.md
spec
Add specification: Browse subfolder item operations - copy/move/rename/delete (Tier 3)
2026-04-02 12:34:59
app_v2/src/.../ui/browse/BrowseActivity.kt
BrowseActivity
Fix: save URI string (not path) for lastSelectedLocalFolder; add writability validation; launch local folder picker for non-LOCAL resources
2026-04-02 12:35:03
app_v2/src/.../data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Add DataStore key + read/write for lastSelectedLocalFolder (was missing - field never persisted)
2026-04-02 12:35:07
app_v2/src/.../domain/model/AppSettings.kt
AppSettings
Remove 6 unused per-type lastSelected*Folder fields (Phase 3 not implemented); update lastSelectedLocalFolder comment
2026-04-02 12:35:12
app_v2/src/main/res/values/strings.xml
strings.xml
Add error_folder_not_writable and select_folder_network_hint strings (EN/RU/UK)
2026-04-02 12:39:40
app_v2/src/.../ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Add VirtualPath guard to canCreateFolder: hide Create Folder for virtual resources (all_video, all_images, etc.)
2026-04-02 12:39:43
app_v2/src/test/.../ui/browse/managers/CanCreateFolderGuardTest.kt
CanCreateFolderGuardTest
Add unit tests for canCreateFolder guard: virtual paths, read-only, showSubfoldersAsItems
2026-04-02 12:40:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Add VirtualPath guard to canCreateFolder condition; update comment
2026-04-02 12:40:47
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManagerTest.kt
ResourceOpsMenuManagerTest
Add unit tests for canCreateFolder guard (virtual path, read-only, null, happy path)
2026-04-02 12:40:47
docs/FEATURES.md
Section 2 Browsing
Add bullet: Create subfolder from Browse menu
2026-04-02 12:40:47
docs/FEATURES_RU.md
Section 2 Browsing
Add bullet (RU): Create subfolder from Browse menu
2026-04-02 12:40:47
docs/FEATURES_UK.md
Section 2 Browsing
Add bullet (UK): Create subfolder from Browse menu
2026-04-02 12:40:53
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManagerTest.kt
ResourceOpsMenuManagerTest
Add unit tests for canCreateFolder guard (virtual path, read-only, null, happy path)
2026-04-02 12:40:53
docs/FEATURES.md
Section 2 Browsing
Add bullet: Create subfolder from Browse menu
2026-04-02 12:40:53
docs/FEATURES_RU.md
Section 2 Browsing
Add bullet (RU): Create subfolder from Browse menu
2026-04-02 12:40:53
docs/FEATURES_UK.md
Section 2 Browsing
Add bullet (UK): Create subfolder from Browse menu
2026-04-02 12:42:52
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManagerTest.kt
ResourceOpsMenuManagerTest
Use LocalMediaScanner virtual path constants in canCreateFolder guard tests
2026-04-02 12:42:52
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/managers/CanCreateFolderGuardTest.kt
CanCreateFolderGuardTest
Remove duplicate canCreateFolder guard test class; keep canonical ResourceOpsMenuManagerTest
2026-04-02 12:56:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Add renameDirectory(); partition deleteSelectedFiles() by isDirectory; inject DeleteDirectoriesUseCase + UnifiedFileOperationHandler
2026-04-02 12:56:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
Partition copy/move by isDirectory; add dirOperationHandler param; add onShowMessage/onShowError to FileOperationCallbacks
2026-04-02 12:56:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Add onDirectoryRenameConfirmed to DialogCallbacks; route directory rename to showRenameDirectoryDialog
2026-04-02 12:56:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Inject UnifiedFileOperationHandler; wire onDirectoryRenameConfirmed; add onShowMessage/onShowError; pass dirOperationHandler to manager
2026-04-02 12:56:16
app_v2/src/main/res/values/strings.xml
strings
Add msg_folder_renamed, delete_folder_confirm, delete_n_folders_confirm, error_cross_protocol_dir_not_supported, operation_completed, error_some_operations_failed
2026-04-02 12:56:16
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add RU translations for 6 new directory-operation strings
2026-04-02 12:56:16
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add UK translations for 6 new directory-operation strings
2026-04-02 13:06:49
app_v2/src/main/java/.../BrowseFileOperationsManager.kt
BrowseFileOperationsManager
Fix: Select Folder now dispatches dirItems via onFolderPickerRequested; executeMoveDirectly partitions by isDirectory; cross-protocol UnsupportedOperationException shows localized error_cross_protocol_dir_not_supported
2026-04-02 13:06:49
app_v2/src/main/java/.../BrowseDialogHelper.kt
BrowseDialogHelper
Fix: showDeleteConfirmation uses folder-specific strings (delete_folder_confirm / delete_n_folders_confirm) when dirs selected
2026-04-02 13:06:49
app_v2/src/main/java/.../BrowseActivity.kt
BrowseActivity
Fix: PendingFolderPickerOp carries dirItems; folderPickerLauncher dispatches dir copy/move via unifiedFileOperationHandler
2026-04-02 13:06:49
app_v2/src/test/.../DeleteDirectoriesUseCaseTest.kt
DeleteDirectoriesUseCaseTest
New: 5 unit tests for DeleteDirectoriesUseCase (empty, single, aggregate, partial-error, all-fail)
2026-04-02 13:06:49
app_v2/src/test/.../UnifiedFileOperationHandlerDirectoryTest.kt
UnifiedFileOperationHandlerDirectoryTest
New: 8 unit tests for directory ops (delete, rename, copy, move, cross-protocol, unregistered protocol)
2026-04-02 13:55:34
app_v2/src/.../data/repository/CachedFileListRepository.kt
CachedFileListRepository
Fixed R8 crash: replaced anonymous TypeToken with TypeToken.getParameterized() to survive minification
2026-04-02 13:55:34
wear/src/.../data/preferences/NetworkSourceRepositoryImpl.kt
NetworkSourceRepositoryImpl
Fixed R8 crash: replaced anonymous TypeToken with TypeToken.getParameterized() to survive minification
2026-04-02 14:15:05
app_v2/src/.../ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
Fixed WindowLeaked: added safeShow() with lifecycle check, BadTokenException guard, and dialog tracking via activeDialogs list
2026-04-02 14:15:05
app_v2/src/.../ui/player/PlayerActivity.kt
PlayerActivity
Added dialogHelper.dismissAll() in onDestroy to prevent WindowLeaked on activity destruction
2026-04-02 14:22:49
app_v2/src/.../ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
Fixed WindowLeaked in ShowMissingFileDialog and showFileNotFound: added isFinishing/isDestroyed check + BadTokenException guard
2026-04-02 14:29:34
app_v2/src/.../ui/player/PlayerViewModel.kt
PlayerViewModel
Replaced blocking ShowMissingFileDialog with auto-cleanup + non-blocking ShowMissingFileInfo toast; removed handleMissingFileRefresh()
2026-04-02 14:29:34
app_v2/src/.../ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
Replaced ShowMissingFileDialog modal dialog with ShowMissingFileInfo toast - fixes WindowLeaked
2026-04-02 14:29:34
app_v2/src/main/res/values/strings.xml
strings
Added file_not_found_playing_from_start string for non-blocking missing file notification
2026-04-02 14:34:00
app_v2/src/.../ui/dialog/ErrorDialog.kt
ErrorDialog
Added Activity lifecycle check + BadTokenException catch in show()
2026-04-02 14:34:00
app_v2/src/.../ui/dialog/TooltipDialog.kt
TooltipDialog
Added Activity lifecycle check + BadTokenException catch in show()
2026-04-02 14:34:00
app_v2/src/.../ui/common/DialogUtils.kt
DialogUtils
Added Activity lifecycle check + BadTokenException catch in showScrollableDialog()
2026-04-02 14:34:00
app_v2/src/.../ui/main/MainActivity.kt
MainActivity
Added isFinishing guard to ConfirmRescanWithVirtualResources, showDeleteConfirmation, showStoragePermissionRequestDialog
2026-04-02 14:34:00
app_v2/src/.../ui/welcome/WelcomeActivity.kt
WelcomeActivity
Added isFinishing guard to requestBatteryOptimizationIfNeeded and showPermissionDeniedDialog
2026-04-02 14:34:00
app_v2/src/.../ui/duplicates/DuplicatesFragment.kt
DuplicatesFragment
Added isAdded guard for ShowNetworkWarning event dialog and delete confirmation dialog
2026-04-02 14:34:00
app_v2/src/.../core/ui/BaseFragment.kt
BaseFragment
Added safeShowDialog() helper method with isAdded + BadTokenException guard
2026-04-02 14:34:00
app_v2/src/.../util/FragmentExt.kt
FragmentExt
New file: safeShowDialog() and canShowDialog() extension functions for Fragment
2026-04-02 14:34:00
app_v2/src/.../ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Added isAdded + isFinishing guard in showSetDefaultDialogForType()
2026-04-02 14:39:53
app_v2/src/main/res/values/themes.xml
Theme.FastMediaSorter
Added android:windowDisablePreview=true to disable launch icon preview
2026-04-02 14:39:53
app_v2/src/main/res/values-night/themes.xml
Theme.FastMediaSorter
Added android:windowDisablePreview=true for night theme
2026-04-02 14:39:53
app_v2/src/main/res/values-v31/themes.xml
Theme.FastMediaSorter
Added android:windowDisablePreview=true for API 31+
2026-04-02 14:39:53
app_v2/src/main/res/values-night-v31/themes.xml
Theme.FastMediaSorter
Added android:windowDisablePreview=true for night theme API 31+
2026-04-02 14:45:59
app_v2/src/main/java/com/sza/fastmediasorter/core/util/PathUtils.kt
PathUtils
Fixed safeParseUri: encode % as %25 before # and ? to prevent double-decoding on paths containing literal percent signs
2026-04-02 14:46:05
app_v2/src/.../ui/player/PlayerViewModel.kt
PlayerViewModel.loadMediaFiles
Fixed subfolder mismatch: detect when cache has root files but initialFilePath is from subdirectory, reload from correct directory
2026-04-02 14:46:08
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
SmbDataSource
Fixed double-decoding bug: replaced uri.path (pre-decoded by Android) with uri.encodedPath before Uri.decode() for correct round-trip with % in filenames
2026-04-02 14:46:08
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Fixed Drive API query injection: escape backslash and apostrophe in fileName before inserting into name=’…’ query string (2 places: resolveFileIdFromName + fileExists)
2026-04-02 14:46:08
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt
MediaStoreRepositoryImpl
Fixed SQLite LIKE wildcard injection: escape % and _ in folder path with ESCAPE ‘' to prevent matching files outside the target folder
2026-04-02 14:46:08
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpClient.kt
FtpClient
Fixed FTP non-ASCII filename encoding: added controlEncoding=UTF-8 to all 6 FTPClient initialization points (getConnectionForExoPlayer, connect, testConnection, uploadFileWithNewConnection, executeWithNewConnection, openFileStreamWithNewConnection)
2026-04-02 14:58:17
app_v2/src/main/res/values/strings.xml
virtual_comment_*
Added comment strings for all 6 virtual resources (EN)
2026-04-02 14:58:17
app_v2/src/main/res/values-ru/strings.xml
virtual_comment_*
Added comment strings for all 6 virtual resources (RU)
2026-04-02 14:58:17
app_v2/src/main/res/values-uk/strings.xml
virtual_comment_*
Added comment strings for all 6 virtual resources (UK)
2026-04-02 14:58:17
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
ProvisionDefaultResourcesUseCase
Populate comment field for all virtual resources on first launch
2026-04-02 14:58:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel.buildVirtualResource
Populate comment field when adding virtual resources via buttons
2026-04-02 16:05:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorActivity.kt
ResourceEditorActivity
Added requestApplyInsets() after insets listener registration to fix status/nav bar overlap (toolbar back button and bottom content were hidden behind system bars)
2026-04-02 16:06:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Added requestApplyInsets() to fix nav bar padding not applied on first frame (rvResources)
2026-04-02 16:06:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt
DropboxFolderPickerActivity
Added requestApplyInsets() to fix nav bar padding not applied on first frame (rvFolders)
2026-04-02 16:06:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt
GoogleDriveFolderPickerActivity
Added requestApplyInsets() to fix nav bar padding not applied on first frame (rvFolders)
2026-04-02 16:06:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt
OneDriveFolderPickerActivity
Added requestApplyInsets() to fix nav bar padding not applied on first frame (rvFolders)
2026-04-05 01:31:27
PLAN/spec_standalone-player-video-ux.md
spec
Add specification for III.14 standalone player video UX parity
2026-04-05 01:40:33
PLAN/spec_standalone-player-position.md
spec
Add specification for III.18 standalone player playback position resume
2026-04-05 01:42:20
PLAN/spec_standalone-player-lifecycle.md
spec
Add specification for III.15 standalone player lifecycle wake lock and error feedback
2026-04-05 01:44:17
PLAN/spec_standalone-player-video-controls.md
spec
Add specification for III.16 standalone player video controls speed tracks gestures fullscreen
2026-04-06 00:24:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandalonePlayerLifecycleManager.kt
StandalonePlayerLifecycleManager
New lifecycle manager for standalone player (onResume/onPause/onDestroy delegation)
2026-04-06 00:24:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Add lifecycle hooks, keepScreenOn wake lock, ExoPlayer error listener, explicit controllerShowTimeoutMs
2026-04-06 00:24:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wire StandalonePlayerLifecycleManager; add onResume/onPause overrides
2026-04-06 00:24:54
app_v2/src/main/res/values/strings.xml
strings
Add EN error strings for standalone player playback failures
2026-04-06 00:24:54
app_v2/src/main/res/values-ru/strings.xml
strings
Add RU error strings for standalone player playback failures
2026-04-06 00:24:54
app_v2/src/main/res/values-uk/strings.xml
strings
Add UK error strings for standalone player playback failures
2026-04-06 00:24:55
docs/FEATURES.md
StandalonePlayer
Document lifecycle, wake lock, error feedback
2026-04-06 00:24:55
docs/FEATURES_RU.md
StandalonePlayer
Document lifecycle, wake lock, error feedback (RU)
2026-04-06 00:24:55
docs/FEATURES_UK.md
StandalonePlayer
Document lifecycle, wake lock, error feedback (UK)
2026-04-06 00:28:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioFocusManager.kt
AudioFocusManager
New: audio focus request/release with API 26+ and legacy support
2026-04-06 00:28:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt
PictureInPictureManager
Refactor: replace VideoPlayerManager param with getPlayer/onPlay/onPause lambdas for standalone reuse
2026-04-06 00:28:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Update PictureInPictureManager constructor call to lambda-based API
2026-04-06 00:28:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Add AudioFocusManager integration; add getExoPlayer() and isVideoPlaying() for PiP wiring
2026-04-06 00:28:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wire PictureInPictureManager: pipManager field, onUserLeaveHint, onPictureInPictureModeChanged, release
2026-04-06 00:28:14
app_v2/src/main/AndroidManifest.xml
StandalonePlayerActivity
Add android:supportsPictureInPicture=true
2026-04-06 00:28:14
docs/FEATURES.md
StandalonePlayer
Document PiP (Android 12+) and audio focus management features
2026-04-06 00:28:14
docs/FEATURES_RU.md
StandalonePlayer
Document PiP and audio focus (RU)
2026-04-06 00:28:14
docs/FEATURES_UK.md
StandalonePlayer
Document PiP and audio focus (UK)
2026-04-06 00:29:02
app_v2/src/main/AndroidManifest.xml
StandalonePlayerActivity
Add supportsPictureInPicture=true
2026-04-06 00:37:07
app_v2/src/main/AndroidManifest.xml
StandalonePlayerActivity
Add screenOrientation=sensor, FullScreen theme, keyboardHidden configChange
2026-04-06 00:37:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Add setupWindowAndInsets(), onConfigurationChanged(), WindowCompat/ViewCompat insets wiring for UX parity with PlayerActivity
2026-04-06 00:39:18
docs/FEATURES.md
Standalone player section
Add video UX parity bullet (insets + sensor rotation)
2026-04-06 00:39:18
docs/FEATURES_RU.md
Standalone player section
Add video UX parity bullet (RU)
2026-04-06 00:39:18
docs/FEATURES_UK.md
Standalone player section
Add video UX parity bullet (UK)
2026-04-06 00:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneVideoControlsManager.kt
StandaloneVideoControlsManager
New: speed/audio/subtitle button setup and track visibility for standalone video
2026-04-06 00:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneVideoTouchDelegate.kt
StandaloneVideoTouchDelegate
New: GestureDetector for brightness/volume/seek/double-tap/single-tap in standalone video
2026-04-06 00:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandalonePlayerSettingsManager.kt
StandalonePlayerSettingsManager
New: speed/audio/subtitle dialogs + subtitle styling for standalone player
2026-04-06 00:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFullscreenManager.kt
StandaloneFullscreenManager
New: fullscreen immersive toggle (WindowInsetsController API 30+ / systemUiVisibility fallback)
2026-04-06 00:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Add onVideoReady callback to show()/playVideo() for manager setup hook
2026-04-06 00:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wire StandaloneVideoControlsManager, StandaloneVideoTouchDelegate, StandalonePlayerSettingsManager, StandaloneFullscreenManager on video load
2026-04-06 00:40:03
app_v2/src/main/res/values/strings.xml
strings
Add cd_playback_speed, cd_audio_track, cd_subtitle_track EN content descriptions
2026-04-06 00:40:03
app_v2/src/main/res/values-ru/strings.xml
strings
Add cd_playback_speed, cd_audio_track, cd_subtitle_track RU
2026-04-06 00:40:03
app_v2/src/main/res/values-uk/strings.xml
strings
Add cd_playback_speed, cd_audio_track, cd_subtitle_track UK
2026-04-06 00:41:01
docs/FEATURES.md
StandalonePlayer
Document video controls: speed, tracks, gestures, fullscreen
2026-04-06 00:41:01
docs/FEATURES_RU.md
StandalonePlayer
Document video controls (RU)
2026-04-06 00:41:01
docs/FEATURES_UK.md
StandalonePlayer
Document video controls (UK)
2026-04-06 00:44:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
III.18: Add playback position save/restore for standalone video (getPosition on load, periodic 5s save, save on pause/destroy)
2026-04-06 00:44:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix Unresolved binding.bottomPanelsContainer: replace with root.findViewById (landscape-only view not in portrait binding)
2026-04-06 00:44:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
III.18: Add playback position save/restore for standalone video (getPosition on load, 5s periodic save, save on pause/destroy)
2026-04-06 00:44:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix: replace binding.bottomPanelsContainer (not in portrait binding) with root.findViewById for landscape-only view
2026-04-06 00:54:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
UseKtx: Uri.parse() -> toUri() in showImage/showGif/playVideo/playAudio; add ERROR_CODE_PARSING_CONTAINER_MALFORMED error case
2026-04-06 00:54:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
UseKtx: Uri.parse() -> toUri() in 3 places; fix binding.bottomPanelsContainer->root.findViewById; suppress UnsafeIntentLaunch false positive
2026-04-06 00:54:48
app_v2/lint.xml
lint.xml
Add UnsafeIntentLaunch path suppression for StandalonePlayerActivity (Open With handler false positive)
2026-04-06 00:54:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
UseKtx: Uri.parse() -> toUri() in showImage/showGif/playVideo/playAudio; add ERROR_CODE_PARSING_CONTAINER_MALFORMED error case
2026-04-06 00:54:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
UseKtx: Uri.parse() -> toUri(); binding.bottomPanelsContainer -> root.findViewById (ViewBinding include fix); class-level SuppressLint for UnsafeIntentLaunch false positive
2026-04-06 00:55:00
app_v2/lint.xml
lint.xml
Add UnsafeIntentLaunch path suppression for StandalonePlayerActivity (Open With handler, false positive)
2026-04-06 01:14:26
app_v2/src/main/AndroidManifest.xml
StandalonePlayerActivity
Add screenOrientation=sensor, FullScreen theme, keyboardHidden configChange
2026-04-06 01:14:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Add setupWindowAndInsets() and onConfigurationChanged for edge-to-edge insets and rotation support
2026-04-06 01:14:26
docs/FEATURES.md
StandalonePlayer
Document rotation + insets fix
2026-04-06 01:14:26
docs/FEATURES_RU.md
StandalonePlayer
Document rotation + insets fix (RU)
2026-04-06 01:14:26
docs/FEATURES_UK.md
StandalonePlayer
Document rotation + insets fix (UK)
2026-04-07 23:26:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix: performClick() now fires only on ACTION_UP in video touch listener; suppress ClickableViewAccessibility lint
2026-04-07 23:34:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NetworkFileManager.kt
NetworkFileManager
Fix prepareFileForRead: handle content:// URIs from external intents (copy to temp file)
2026-04-07 23:40:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Added copyPageTextToClipboard(): OCR current page and copy to clipboard without switching views
2026-04-07 23:40:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Show menu_copy_text for PDF files (routes to OCR clipboard copy)
2026-04-07 23:40:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Route onCopyTextClicked to pdfViewerManager.copyPageTextToClipboard() for PDF files
2026-04-07 23:45:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Show btnCopyTextCmd for PDF in landscape mode
2026-04-07 23:45:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Set btnCopyTextCmd click handler to copyPageTextToClipboard() on PDF open
2026-04-07 23:45:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Restore btnCopyTextCmd click handler in displayText() to fix PDF→text switching
2026-04-07 23:48:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Add URL link detection via ML Kit OCR + handlePdfTap for opening links in browser
2026-04-07 23:48:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerGestureSetupManager.kt
PlayerGestureSetupManager
Forward PDF single-tap to pdfViewerManager.handlePdfTap for link opening
2026-04-08 00:01:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Replace OCR-based URL detection with native PdfRendererPreV.getLinkContents() (API 35+)
2026-04-08 00:19:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Extract 10 init* methods to PlayerManagerInitializer, 4 factory methods to PlayerViewerFactory; 2465->1640 lines (-33%); 18 fields+1 method visibility private->internal
2026-04-09 02:00:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
New: consolidates all 10 init*() manager initialization methods extracted from PlayerActivity, 658 lines
2026-04-09 02:00:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt
PlayerViewerFactory
New: factory for 4 lazy viewer managers extracted from PlayerActivity, 152 lines
2026-04-09 02:05:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Add missing lifecycleScope import; fix isInitialized access via activity helper
2026-04-09 02:05:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt
PlayerViewerFactory
Add missing lifecycleScope import; fix isInitialized access via activity helper
2026-04-09 02:05:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Expose isTranslationButtonManagerInitialized helper getter for external access
2026-04-09 13:24:10
PLAN/spec_decompose-giant-files.md
spec_decompose-giant-files
Updated Sprint 2 status: PlayerActivity 1642 lines, new helpers PlayerManagerInitializer+PlayerViewerFactory documented
2026-04-09 13:24:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
PlayerKeyboardHandler
Extended handleGenericMotionEvent to cover EPUB+navigation scroll; added onEpubScrollDelta/onNavigationScroll callbacks; removed duplication with onGenericMotionEvent
2026-04-09 13:24:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
PlayerKeyboardCallbackImpl
Implement onEpubScrollDelta and onNavigationScroll callbacks
2026-04-09 13:24:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Absorbed onDestroy manager releases, saveCurrentPlaybackPosition, setupBackPressHandler from PlayerActivity
2026-04-09 13:24:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Decompose round 2: removed onGenericMotionEvent (44L), onDestroy body (38L), saveCurrentPlaybackPosition (28L), setupBackPressHandler (33L) -> 1642->1475 lines
2026-04-09 13:38:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseInlineAudioManager.kt
BrowseInlineAudioManager
Extract inline audio playback logic from BrowseViewModel (Wave 1 IV.1)
2026-04-09 13:38:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Delete stale inline audio methods after BrowseInlineAudioManager extraction
2026-04-09 13:48:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseArchiveManager.kt
BrowseArchiveManager
Extract archive/extraction logic from BrowseViewModel (Wave 1 IV.1)
2026-04-09 13:48:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Delegate archive/extraction to BrowseArchiveManager, remove ~245 lines
2026-04-09 18:24:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileObserverManager.kt
BrowseFileObserverManager
Extract file observer + rename logic from BrowseViewModel (Wave 1 IV.1)
2026-04-09 18:24:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Delegate FileObserver to BrowseFileObserverManager, remove ~220 lines
2026-04-09 19:59:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt
BrowseNavigationManager
Extract subfolder navigation + directory cache from BrowseViewModel (Wave 1 IV.1)
2026-04-09 19:59:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Delegate navigation to BrowseNavigationManager, remove ~500 lines
2026-04-09 19:59:58
PLAN/spec_decompose-giant-files.md
spec
Update Wave 1 progress: BrowseViewModel 4010→2764 lines, 4 managers extracted
2026-04-09 21:08:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteManager.kt
BrowseDeleteManager
Extract delete logic from BrowseViewModel into BrowseDeleteManager (Wave 1 IV.1)
2026-04-09 21:08:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire BrowseDeleteManager: replace 5 delete methods with delegates, add deleteManager instance
2026-04-09 21:16:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortFilterManager.kt
BrowseSortFilterManager
Extract sort/filter logic from BrowseViewModel into BrowseSortFilterManager (Wave 1 IV.1)
2026-04-09 21:16:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire BrowseSortFilterManager: replace setSortMode/toggleDisplayMode/setFilter/applyFilter/sortFiles with delegates
2026-04-09 21:33:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOpenManager.kt
BrowseFileOpenManager
Extract openFile helpers from BrowseViewModel (Wave 1 IV.1)
2026-04-09 21:33:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire BrowseFileOpenManager; drop openFile helpers; fix stray brace
2026-04-09 21:43:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDirectoryOpsManager.kt
BrowseDirectoryOpsManager
Extract createFolder and renameDirectory from BrowseViewModel (Wave 1 IV.1)
2026-04-09 21:43:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire BrowseDirectoryOpsManager and remove inline folder create/rename logic
2026-04-09 21:43:15
PLAN/spec_decompose-giant-files.md
spec_decompose-giant-files
Update Wave 1 progress: BrowseViewModel 4010->2178 lines, 8 managers extracted including directory ops
2026-04-09 21:47:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateSyncManager.kt
BrowseStateSyncManager
Extract favorites loading, cache sync, and resource settings drift checks from BrowseViewModel (Wave 1 IV.1)
2026-04-09 21:47:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire BrowseStateSyncManager and remove inline loadFavorites/syncWithCache/checkAndReloadIfResourceChanged logic
2026-04-09 21:47:47
PLAN/spec_decompose-giant-files.md
spec_decompose-giant-files
Update Wave 1 progress: BrowseViewModel 4010->1940 lines, 9 managers extracted including state sync
2026-04-09 22:39:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Restore missing toggleFavorite API after decomposition to fix BrowseActivity unresolved reference
2026-04-09 22:49:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRefreshManager.kt
BrowseRefreshManager
Extract reloadFiles refresh pipeline from BrowseViewModel (hard reset, trash cleanup, MediaStore sync, cache clear, forced rescan)
2026-04-09 22:49:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire BrowseRefreshManager and replace inline reloadFiles body with delegation
2026-04-09 22:49:53
PLAN/spec_decompose-giant-files.md
spec_decompose-giant-files
Update Wave 1 progress: BrowseViewModel 4010->1901 lines, 10 managers extracted including refresh manager
2026-04-09 23:23:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseLoadingAuxManager
Extract handleLoadingError/enrichAudioMetadata/schedulePlayerWarmup from BrowseViewModel (Wave 1 IV.1)
2026-04-09 23:24:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire BrowseLoadingAuxManager; remove playerWarmupJob/audioMetadataEnrichmentJob fields; replace 3 methods with delegates
2026-04-09 23:44:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
BrowseResourceLoadManager
Extract loadResource/loadMediaFiles pipeline from BrowseViewModel (Wave 1 IV.1)
2026-04-09 23:44:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire BrowseResourceLoadManager; replace loadResource/loadMediaFiles/loadMediaFilesStandard/loadMediaFilesWithPagination/updateResourceMetadataAfterBrowse with delegates; remove 18 unused imports (Wave 1 IV.1)
2026-04-09 23:45:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Fix loadResource/loadMediaFiles delegates to cancel previous jobs before delegating to resourceLoadManager
2026-04-09 23:46:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
BrowseResourceLoadManager
Remove dead local-var cancel in loadResource (job lifecycle managed by BrowseViewModel delegate)
2026-04-10 01:19:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileListMutationManager.kt
BrowseFileListMutationManager
Extract file-list mutation logic from BrowseViewModel (Wave 1)
2026-04-10 01:19:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceStateManager.kt
BrowseResourceStateManager
Extract resource state persistence logic from BrowseViewModel (Wave 1)
2026-04-10 01:19:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRefreshManager.kt
BrowseRefreshManager
Add cleanupTrashOnBackground + network SMB trash cleanup (Wave 1)
2026-04-10 01:19:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Wire fileListMutationManager + resourceStateManager; remove 13 extracted methods (Wave 1)
2026-04-10 02:14:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseState.kt
BrowseState
Extract BrowseState+ExtractionState to standalone file (Wave 1)
2026-04-10 02:14:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseEvent.kt
BrowseEvent
Extract BrowseEvent sealed class to standalone file (Wave 1)
2026-04-10 02:14:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt
BrowseNavigationManager
Move DirectoryCacheEntry into NavigationManager (Wave 1)
2026-04-10 02:14:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLifecycleSetupManager.kt
BrowseLifecycleSetupManager
Extract init setup methods from BrowseViewModel (Wave 1)
2026-04-10 02:14:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Final Wave 1 cleanup: 957->683 lines, all init logic delegated to managers
2026-04-10 02:16:00
PLAN/spec_decompose-giant-files.md
spec
Update Wave 1 status to COMPLETE; BrowseViewModel 4010->683 lines
2026-04-10 02:35:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
BrowseResourceLoadManager
Fix recursive type checking: qualify updateResourceMetadata and startFileObserver with this@
2026-04-10 02:35:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Fix recursive type checking: extract launchSubfolderReload helper to break type inference cycle
2026-04-10 03:33:45
PLAN/spec_decompose-giant-files.md
PLAN/spec_decompose-giant-files.md
Updated progress tracking for Wave 4 Data Layer (local operations extracted) and BrowseActivity lines reduction
2026-04-10 09:53:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler
Extract event dispatch from BrowseActivity.observeData()
2026-04-10 09:53:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
BrowseStateUiUpdater
Extract state→UI binding from BrowseActivity state collector
2026-04-10 09:53:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseButtonSetupHelper.kt
BrowseButtonSetupHelper
Extract toolbar button click setup from BrowseActivity.setupViews()
2026-04-10 09:53:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEdgeToEdgeHelper.kt
BrowseEdgeToEdgeHelper
Extract edge-to-edge insets logic from BrowseActivity
2026-04-10 09:53:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLifecycleHelper.kt
BrowseLifecycleHelper
Extract scroll restore and storage permission from BrowseActivity lifecycle
2026-04-10 09:53:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Wave 1.5: reduce from 2872 to 1680 lines via manager extraction
2026-04-10 12:13:56
PLAN/spec_decompose-giant-files.md
SpecUpdate
Updated decomposition progress and file lengths
2026-04-10 12:16:20
PLAN/spec_decompose-giant-files.md
SpecUpdate
Reprioritized decomposition waves based on file size descending
2026-04-10 12:25:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Decomposed BrowseActivity into BrowseLauncherManager and BrowseManagerInitializer, reduced from 1342 to 297 lines
2026-04-10 12:25:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLauncherManager.kt
BrowseLauncherManager
Created new manager to encapsulate all ActivityResultLaunchers from BrowseActivity
2026-04-10 12:25:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Created new orchestrator to extract the massive setupViews logic from BrowseActivity
2026-04-10 14:42:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Removed observeViewModel and exposed isMediaLoaderManagerInitialized
2026-04-10 14:42:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Used isMediaLoaderManagerInitialized instead of accessing backing field
2026-04-10 15:03:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt; app_v2/src/main/res/values*/strings.xml
MainActivity
Added ‘Updated to ###’ Toast hint on first launch after an app update
2026-04-10 15:10:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Fixed java.lang.IllegalStateException: LifecycleOwner is attempting to register while current state is RESUMED by extracting BrowseLauncherManager initialization to onCreate
2026-04-10 15:38:56
app_v2/src/main/java/com/sza/fastmediasorter/core/util/NetworkFileDownloader.kt
NetworkFileDownloader
Fixed missing host-level SMB credential fallback in downloadFromSmb: now calls getCredentialsByHost() when share-specific lookup returns null, mirroring SmbOperationStrategy behaviour
2026-04-10 15:50:53
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt
SearchLyricsUseCase
Fixed missing host-level SMB credential fallback in downloadFromSmb: now calls getCredentialsByHost() when share-specific lookup returns null, mirroring SmbOperationStrategy behaviour
2026-04-10 16:10:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchAudioCoverUseCase.kt
SearchAudioCoverUseCase
Add metadataArtist/metadataTitle params; try ID3 metadata as primary query before filename fallback for cover art search
2026-04-10 16:11:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Extract ID3 artist/title from MediaMetadataRetriever (local) and ExoPlayer mediaMetadata (network); pass to searchAudioCoverUseCase as priority metadata
2026-04-10 16:54:22
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/BackgroundAudioExitBehavior.kt
BackgroundAudioExitBehavior
New enum: ASK / ALWAYS_STOP / ALWAYS_CONTINUE for background audio exit behavior
2026-04-10 16:54:22
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Added backgroundAudioExitBehavior field (default ASK)
2026-04-10 16:54:22
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Added KEY_BACKGROUND_AUDIO_EXIT_BEHAVIOR DataStore key with read/write
2026-04-10 16:54:22
app_v2/src/main/res/values/strings.xml
strings.xml
Added 7 new strings for background audio exit behavior (dialog + settings)
2026-04-10 16:54:22
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
Added layoutExitBehaviorSection with RadioGroup (Ask/AlwaysStop/AlwaysContinue)
2026-04-10 16:54:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
AudioSettingsFragment
Added setupExitBehaviorSection(), updateExitBehaviorVisibility(); observeData syncs radio group
2026-04-10 16:54:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Added backgroundAudioExitBehavior to PlayerState; added updateExitBehavior() method
2026-04-10 16:54:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Refactored exitPlayerWithAudioCheck() to when-expression; added showExitAudioDialog() with 4 items
2026-04-10 16:54:30
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/BackgroundAudioExitBehavior.kt
BackgroundAudioExitBehavior
New enum: ASK / ALWAYS_STOP / ALWAYS_CONTINUE for background audio exit behavior
2026-04-10 16:54:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Added backgroundAudioExitBehavior field (default ASK)
2026-04-10 16:54:39
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Added KEY_BACKGROUND_AUDIO_EXIT_BEHAVIOR DataStore key with read/write
2026-04-10 16:54:39
app_v2/src/main/res/values/strings.xml
strings.xml
Added 7 new strings for background audio exit behavior
2026-04-10 16:54:39
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
Added layoutExitBehaviorSection with RadioGroup (Ask/AlwaysStop/AlwaysContinue)
2026-04-10 16:54:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
AudioSettingsFragment
Added setupExitBehaviorSection, updateExitBehaviorVisibility; observeData syncs radio group
2026-04-10 16:54:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Added backgroundAudioExitBehavior to PlayerState; added updateExitBehavior() method
2026-04-10 16:54:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Refactored exitPlayerWithAudioCheck() to when-expression; added showExitAudioDialog() with 4 items
2026-04-10 16:54:47
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Added backgroundAudioExitBehavior field (default ASK)
2026-04-10 16:54:47
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Added KEY_BACKGROUND_AUDIO_EXIT_BEHAVIOR DataStore key with read/write
2026-04-10 16:54:55
app_v2/src/main/res/values/strings.xml
strings.xml
Added 7 new strings for background audio exit behavior
2026-04-10 16:54:55
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
Added layoutExitBehaviorSection with RadioGroup (Ask/AlwaysStop/AlwaysContinue)
2026-04-10 16:54:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
AudioSettingsFragment
Added setupExitBehaviorSection, updateExitBehaviorVisibility; observeData syncs radio group
2026-04-10 16:54:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Added backgroundAudioExitBehavior to PlayerState; added updateExitBehavior() method
2026-04-10 16:54:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Refactored exitPlayerWithAudioCheck() to when-expression; added showExitAudioDialog() with 4 items
2026-04-10 17:36:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Show toast ‘Ждите результат перевода…’ after user confirms language model download
2026-04-10 18:00:05
PLAN/spec_cloud-early-auth-check.md
spec
Add specification LOG-01: cloud early auth check for Dropbox/OneDrive before scan
2026-04-10 18:00:05
PLAN/spec_tablayout-mode-gravity-fix.md
spec
Add specification LOG-02: TabLayout MODE_SCROLLABLE+GRAVITY_FILL conflict fix
2026-04-10 18:00:05
PLAN/spec_recyclerview-layout-warnings.md
spec
Add specification LOG-03: RecyclerView no-adapter and StaticLayout maxLineHeight warnings
2026-04-10 23:00:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
BrowseResourceLoadManager
Add unified cloud early-auth check for Dropbox/OneDrive before scan
2026-04-10 23:00:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Inject DropboxClient + OneDriveRestClient for cloud early-auth check
2026-04-10 23:02:00
app_v2/src/main/res/layout/item_resource_grid.xml
tvResourceName
Add includeFontPadding=true to fix StaticLayout maxLineHeight=-1 warning
2026-04-10 23:02:00
app_v2/src/main/res/layout/item_resource.xml
tvResourceComment
Add includeFontPadding=true to fix StaticLayout maxLineHeight=-1 warning
2026-04-10 23:04:42
docs/FEATURES_RU.md
FEATURES_RU.md
Localized Subfolder Operations description
2026-04-10 23:04:42
docs/FEATURES_UK.md
FEATURES_UK.md
Localized Subfolder Operations description
2026-04-10 23:04:42
maestro/smoke/browse_subfolder_ops.yaml
Maestro Smoke Test
Added E2E test for subfolder operations
2026-04-10 23:07:30
docs/FEATURES_UK.md
FEATURES_UK
Add subfolder operations bullet (copy/move/rename/delete) to §2 Browsing
2026-04-10 23:08:43
app_v2/src/main/res/layout/activity_main.xml
tabResourceTypes
Remove tabGravity=fill from XML; fix MODE_SCROLLABLE+GRAVITY_FILL conflict
2026-04-10 23:08:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
createTabs
Set tabGravity co-located with tabMode to eliminate W-level TabLayout warning
2026-04-10 23:26:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
BrowseResourceLoadManager
Add unified cloud early-auth check for Dropbox/OneDrive before scan
2026-04-10 23:54:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Fix background audio exit dialog: remove .setMessage() conflict with .setItems()
2026-04-11 00:05:09
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt
SearchLyricsUseCase
Added album metadata extraction and caching
2026-04-11 00:05:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LyricsManager.kt
LyricsManager
Added Artist - Album - Title header to lyrics viewer
2026-04-11 00:45:19
app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseViewModel.kt
BaseViewModel
Fix race condition: updateState() now uses MutableStateFlow.update() for atomic read-modify-write
2026-04-11 00:55:14
app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseViewModel.kt
BaseViewModel
Add missing import for MutableStateFlow.update extension
2026-04-11 01:07:24
app_v2/build.gradle.kts
build.gradle.kts
Fixed KT-73255 compiler warnings regarding annotation targets by adding -Xannotation-default-target=param-property
2026-04-11 01:15:38
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt
MediaStoreRepositoryImpl
Fix EPUB files missing from All Documents virtual resource: add DISPLAY_NAME LIKE extension fallback to MediaStore query
2026-04-11 01:55:28
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt
MediaStoreRepositoryImpl
Add DATA LIKE fallback to EPUB MediaStore query + debug log of selection string
2026-04-11 01:55:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter.ListViewHolder+GridViewHolder
Add signature+dontAnimate to local PDF Glide calls to fix disk-cache hit and remove placeholder flash
2026-04-11 02:28:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
ListViewHolder+GridViewHolder
Replace .transition(withCrossFade) with .dontAnimate() for IMAGE/VIDEO (local+network+cloud); add .dontAnimate() to EPUB local/network and PDF network in both ViewHolders - fixes thumbnail flicker on disk-cache hits
2026-04-11 02:28:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
ListViewHolder+GridViewHolder
Replace all 12 .transition(withCrossFade(100)) with .dontAnimate() for IMAGE/VIDEO (cloud/network/local) - fixes thumbnail flicker on disk-cache hits
2026-04-11 02:29:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
ListViewHolder+GridViewHolder
Replace .transition(withCrossFade) with .dontAnimate() for IMAGE/VIDEO; add .dontAnimate() to EPUB and PDF-network - fixes thumbnail flicker on disk-cache hits
2026-04-11 02:29:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
ListViewHolder+GridViewHolder
Replace 12x .transition(withCrossFade(100)) with .dontAnimate() for IMAGE/VIDEO (cloud/network/local) - fixes thumbnail flicker on disk-cache hits
2026-04-11 02:46:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Added showPdfPreviousPage/showPdfNextPage/showPdfFirstPage delegates for standalone PDF navigation
2026-04-11 02:46:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix: wire PDF prev/next/home buttons in standalone mode; hide btnSlideshowCmd (irrelevant for single-file open)
2026-04-11 03:12:28
app_v2/src/main/java/com/sza/fastmediasorter/utils/PdfExportHelper.kt
PdfExportHelper
Fix NoClassDefFoundError on API<29: split saveBitmapToDownloads into API29+ (MediaStore.Downloads) and legacy (direct file write) paths
2026-04-11 03:24:21
PLAN/spec_pdf-epub-text-selection.md
spec
Add specification NEW.1: PDF & EPUB text selection with Copy / Translate / Search Google
2026-04-11 03:25:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Added EPUB delegate methods: showEpubPreviousChapter/Next/First, TOC, font size, reader settings, cross-search, exitFullscreen
2026-04-11 03:25:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix: wire all EPUB control buttons in standalone mode via setupEpubButtons()
2026-04-11 03:32:28
PLAN/spec_pdf-epub-text-selection.md
spec
Update spec NEW.1: unified DocumentSelectionActionModeCallback for TXT+EPUB+PDF; TXT added as baseline
2026-04-11 03:37:55
PLAN/spec_standalone-doc-translator-parity.md
spec
Add specification NEW.2: Standalone Player Document Translator Parity (EPUB/PDF btn visible but not wired)
2026-04-11 03:38:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager.playAudio
Fix: removed AudioFocusManager from playAudio() - double-focus conflict with ExoPlayer in AudioPlaybackService caused immediate stop on every play attempt
2026-04-11 03:40:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter
Fix thumbnail cache consistency: add signature to local EPUB (List+Grid), add dontAnimate to Cloud IMAGE+VIDEO (List+Grid)
2026-04-11 03:45:14
PLAN/spec_standalone-doc-search-parity.md
spec
Add specification NEW.3: Standalone Player Document Search Parity (PDF/TXT btn unwired, EPUB BottomSheet vs inline panel)
2026-04-11 03:48:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Add toggleEpubTranslation(), togglePdfTranslation(), isEpubActive() delegate methods
2026-04-11 03:48:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wire btnTranslateEpubCmd and btnTranslatePdfCmd; add orientation-aware EPUB translator visibility
2026-04-11 03:49:19
docs/FEATURES.md
FEATURES
Add translator-parity note for standalone mode
2026-04-11 03:49:19
docs/FEATURES_RU.md
FEATURES_RU
Add translator-parity note for standalone mode
2026-04-11 03:49:19
docs/FEATURES_UK.md
FEATURES_UK
Add translator-parity note for standalone mode
2026-04-11 03:51:55
maestro/smoke/standalone_doc_translator.yaml
MaestroSmoke
Add smoke test for standalone EPUB/PDF translator button
2026-04-11 03:52:40
PLAN/spec_standalone-doc-rename-parity.md
spec
Add specification NEW.4: Standalone Player Rename Button Parity - btnRenameCmd visible but unwired; requires DocumentsContract.renameDocument() for SAF URIs, ContentResolver.update() for MediaStore; capability check before showing button
2026-04-11 03:53:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Add epubViewerManagerProvider/pdfViewerManagerProvider/textViewerManagerProvider for SearchControlsManager wiring
2026-04-11 03:53:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wire SearchControlsManager in standalone: PDF/TXT/EPUB inline search panel + remove BottomSheet EPUB search listener
2026-04-11 03:54:45
docs/FEATURES.md
FEATURES
Add inline search panel standalone parity bullet (PDF/EPUB/TXT)
2026-04-11 03:54:46
docs/FEATURES_RU.md
FEATURES_RU
Add inline search panel standalone parity bullet (PDF/EPUB/TXT)
2026-04-11 03:54:46
docs/FEATURES_UK.md
FEATURES_UK
Add inline search panel standalone parity bullet (PDF/EPUB/TXT)
2026-04-11 03:59:17
app_v2/src/main/res/values/strings.xml
strings
Add rename_failed_generic string for standalone rename error
2026-04-11 03:59:20
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add RU rename_failed_generic
2026-04-11 03:59:20
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add UK rename_failed_generic
2026-04-11 03:59:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt
StandalonePlayerViewModel
Add onRenameComplete(newUri, newName) for standalone rename state update
2026-04-11 03:59:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wire btnRenameCmd: capability check via DocumentsContract/MediaStore, standalone rename dialog, onRenameComplete state update
2026-04-11 03:59:32
docs/FEATURES.md
FEATURES
Add standalone rename via SAF/MediaStore
2026-04-11 03:59:32
docs/FEATURES_RU.md
FEATURES_RU
Add standalone rename via SAF/MediaStore
2026-04-11 03:59:32
docs/FEATURES_UK.md
FEATURES_UK
Add standalone rename via SAF/MediaStore
2026-04-11 03:59:38
PLAN/spec_standalone-audio-rename-parity.md
spec
Add specification NEW.5: Standalone Player Audio Rename Parity (MP3/FLAC/OGG/WAV/M4A) - same root as NEW.4; adds SAF URI hot-swap via StandaloneViewManager.updateAudioMediaItem() and replaceMediaItem() to prevent ExoPlayer buffering failure after rename
2026-04-11 04:03:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Add updateAudioMediaItem(newUri) for hot-swap after SAF rename without interrupting playback
2026-04-11 04:03:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wire audio URI update in performStandaloneRename: call viewManager.updateAudioMediaItem when SAF URI changes
2026-04-11 04:03:19
docs/FEATURES.md
FEATURES
Expand standalone rename note: includes audio files (MP3/FLAC/OGG/WAV/M4A), hot-swap ExoPlayer source
2026-04-11 04:03:19
docs/FEATURES_RU.md
FEATURES_RU
Expand rename note: включает аудиофайлы, горячая замена источника ExoPlayer
2026-04-11 04:03:19
docs/FEATURES_UK.md
FEATURES_UK
Expand rename note: включає аудіофайли, гаряча заміна джерела ExoPlayer
2026-04-11 04:03:27
app_v2/src/main/res/values/strings.xml
strings
Add rename_failed_generic string for standalone rename error
2026-04-11 04:04:00
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add RU rename_failed_generic
2026-04-11 04:04:01
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add UK rename_failed_generic
2026-04-11 04:04:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt
StandalonePlayerViewModel
Add onRenameComplete(newUri, newName) for standalone rename state update
2026-04-11 04:04:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wire btnRenameCmd: capability check via DocumentsContract, standalone rename dialog, onRenameComplete state update; fix contentLoaded guard to prevent viewer reload on rename
2026-04-11 04:04:01
docs/FEATURES.md
FEATURES
Add standalone rename via SAF/MediaStore
2026-04-11 04:04:02
docs/FEATURES_RU.md
FEATURES_RU
Add RU standalone rename via SAF/MediaStore
2026-04-11 04:04:02
docs/FEATURES_UK.md
FEATURES_UK
Add UK standalone rename via SAF/MediaStore
2026-04-11 04:05:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix performStandaloneRename: MediaStore ContentResolver.update() result check - return null on 0 rows to correctly report failure instead of silently showing success
2026-04-11 04:08:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
PagingMediaFileAdapter
Remove UTF-8 BOM that was introduced during dontAnimate() refactor
2026-04-11 04:08:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Move togglePdfTranslation() to translation group next to toggleEpubTranslation()
2026-04-11 04:14:31
app_v2/src/main/res/values/strings.xml
strings
Add action_translate_selection, action_search_google, pdf_text_mode_enter, pdf_text_extracting, pdf_text_empty (EN/RU/UK)
2026-04-11 04:14:34
app_v2/src/main/res/menu/document_selection_menu.xml
document_selection_menu
New ActionMode menu for TXT/EPUB/PDF text selection (Translate + Search in Google)
2026-04-11 04:14:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentSelectionActionModeCallback.kt
DocumentSelectionActionModeCallback
New: unified ActionMode.Callback for TXT/EPUB/PDF selection; adds Translate and Search in Google items
2026-04-11 04:14:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Set customSelectionActionModeCallback on tvTextContent; add translateSelectedText() for selection-only translation
2026-04-11 04:14:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Add EpubSelectionBridge JS interface + selectionchange injection + setCustomSelectionActionModeCallback + handleTranslateSelection()
2026-04-11 04:14:54
app_v2/src/main/res/layout/layout_pdf_text_selection_overlay.xml
layout_pdf_text_selection_overlay
New: PDF text selection overlay layout with SelectableTextView + progress + close button
2026-04-11 04:14:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt
PdfTextSelectionManager
New: manages PDF text selection overlay; OCR fallback on API<35, native getTextContents() on API 35+
2026-04-11 04:15:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Wire up PdfTextSelectionManager; add btnSelectTextPdf visibility; exit text mode on page change and renderer close
2026-04-11 04:15:08
app_v2/src/main/res/layout/player_pdf_controls_overlay_content.xml
player_pdf_controls_overlay_content
Add btnSelectTextPdf (T button) before btnSearchPdf in PDF controls bar
2026-04-11 04:15:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
PlayerBindingSafeViews
Add btnSelectTextPdf nullable accessor
2026-04-11 04:15:16
docs/FEATURES.md
FEATURES
Add text selection menu bullets for PDF (T button), EPUB (ActionMode), and TXT (ActionMode) sections
2026-04-11 04:15:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt
PdfTextSelectionManager
Fix overlay never shown: set view.isVisible=true after addView()
2026-04-11 04:15:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager.showChapter
Reset selectionBridge.lastSelectedText on chapter change to avoid stale selection
2026-04-11 04:20:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Remove redundant btnTranslateEpubCmd listener from setupEpubButtons() - now owned by SearchControlsManager (ADR-4)
2026-04-11 04:20:14
maestro/smoke/standalone_doc_search.yaml
MaestroSmoke
Add smoke test for standalone PDF inline search panel (open panel, input query, assert counter, close)
2026-04-11 04:20:46
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModelTest.kt
StandalonePlayerViewModelTest
Add onRenameComplete tests: no-op when null, updates name/path/contentUri, preserves type/size
2026-04-11 04:22:52
app_v2/proguard-rules.pro
proguard-rules
Add @JavascriptInterface keepclassmembers rule; fixes EpubSelectionBridge silent failure in release builds
2026-04-11 04:22:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentSelectionActionModeCallback.kt
openGoogleSearch
Wrap startActivity in try-catch ActivityNotFoundException to prevent crash when no browser installed
2026-04-11 04:28:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Remove invalid setCustomSelectionActionModeCallback call on WebView (TextView-only API); add comment for future Activity.startActionMode hookup
2026-04-11 04:28:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt
PdfTextSelectionManager
Fix API 35 PdfPageTextContent property name: .value -> .text
2026-04-11 04:33:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Add getSelectionActionModeCallback() - exposes DocumentSelectionActionModeCallback for Activity.startActionMode hookup
2026-04-11 04:33:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Add getEpubSelectionActionModeCallback() delegating to EpubViewerManager
2026-04-11 04:33:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Override startActionMode to inject Translate/SearchGoogle into WebView floating text-selection ActionMode when EPUB is active
2026-04-11 13:52:55
app_v2/src/main/res/values/strings.xml
translation_downloading_wait
Fix: replace hardcoded Russian string with English translation
2026-04-11 13:52:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt
setupOcrFontSpinners
Fix: replace hardcoded Russian arrays with getString(R.string.*) for font size/family spinners
2026-04-11 14:03:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Added play()/pause()/isMediaPlaying() to support PiP for audio (AudioServiceController)
2026-04-11 14:03:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt
PictureInPictureManager
buildPipParams: use isVideoPlaying() lambda instead of getPlayer()?.isPlaying (fixes audio PiP button state)
2026-04-11 14:03:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
onPause: skip lifecycle pause in PiP mode; pipManager lambdas use viewManager.play/pause/isMediaPlaying
2026-04-11 14:03:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
onPause: skip lifecycle pause in PiP mode; pipManager lambdas use viewManager.play/pause/isMediaPlaying
2026-04-11 14:03:36
app_v2/src/main/res/values/strings.xml
strings
Add 25 missing string resources for localization (music errors, duplicates, settings, translation model, permissions, TTS, viewer errors)
2026-04-11 14:03:36
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add Russian translations for 25 new string resources
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BackgroundMusicManager.kt
BackgroundMusicManager
Replace 4 hardcoded Russian strings with R.string resources
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesFragment.kt
DuplicatesFragment
Replace hardcoded EN AlertDialog titles and TextView text with R.string resources
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Replace hardcoded EN AlertDialog strings with R.string resources
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Replace hardcoded EN AlertDialog strings with R.string resources
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
SettingsViewModel
Replace hardcoded EN Toast strings with R.string resources
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Replace hardcoded EN Toast permission_denied with R.string resource
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler
Replace hardcoded EN Toast with R.string.failed_to_request_permission
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Replace hardcoded EN Toast with R.string.failed_to_request_permission
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
Replace 3 hardcoded EN Toast strings with R.string resources
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TtsReadAloudManager.kt
TtsReadAloudManager
Replace hardcoded EN Toast with R.string.tts_not_available
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
PlaybackSettingsFragment
Replace hardcoded EN Toast with R.string.error_init_settings
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
PlayerControlsSetupManager
Replace hardcoded EN Toast with R.string.error_with_message
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Replace hardcoded EN translation_failed text with R.string resource
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Replace hardcoded EN Empty PDF text with R.string.pdf_empty
2026-04-11 14:03:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Replace hardcoded EN files scanned text with R.string.files_scanned_count format string
2026-04-11 14:05:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Fix: use binding.root.context instead of bare context for getString in coroutine scope
2026-04-11 14:05:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TtsReadAloudManager.kt
TtsReadAloudManager
Fix: add missing import com.sza.fastmediasorter.R
2026-04-11 14:05:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
SettingsViewModel
Fix: add missing import com.sza.fastmediasorter.R
2026-04-11 14:05:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt
OtherMediaSettingsFragment
Fix: add missing import com.sza.fastmediasorter.R
2026-04-11 14:12:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt
PictureInPictureManager
onPipModeChanged: call showController() on PiP exit so controller/PiP button becomes visible again
2026-04-11 14:14:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt
PictureInPictureManager
Fix PiP play/pause buttons: setPackage() on PendingIntent (Android 14+ implicit broadcast blocker); register receiver before enterPiP
2026-04-11 14:16:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Fix PiP in internal player: onPlay/onPause/isVideoPlaying lambdas now handle audio via audioServiceController
2026-04-11 14:20:28
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
enablePictureInPicture default changed false->true (PiP now on by default like standalone player)
2026-04-11 14:20:28
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
enablePictureInPicture fallback default changed false->true
2026-04-11 14:24:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt
PlayerObserverManager
setupPipButton: always true - enablePictureInPicture setting has no UI toggle, consistent with standalone
2026-04-11 14:24:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
onUserLeaveHint: enablePip=true hardcoded, remove dead enablePictureInPicture dependency
2026-04-11 14:29:46
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Add PiP toggle switch (switchEnablePip, layoutPip) visible on API 31+
2026-04-11 14:29:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Wire PiP toggle: show on API 31+, bind to enablePictureInPicture setting
2026-04-11 14:29:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt
PictureInPictureManager
Add isEnabled property; setupPipButton updates isEnabled for onUserLeaveHint routing
2026-04-11 14:29:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
observePipSettings(): subscribe to settings flow and apply to pipManager; onUserLeaveHint uses pipManager.isEnabled
2026-04-11 14:29:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt
PlayerObserverManager
Reverted: setupPipButton uses settings.enablePictureInPicture (setting now has UI toggle)
2026-04-11 14:29:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Reverted: onUserLeaveHint uses settings.enablePictureInPicture again
2026-04-11 14:29:47
app_v2/src/main/res/values/strings.xml
strings
Add setting_enable_pip, setting_enable_pip_desc (EN)
2026-04-11 14:29:47
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add setting_enable_pip, setting_enable_pip_desc (RU)
2026-04-11 14:29:47
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add setting_enable_pip, setting_enable_pip_desc (UK)
2026-04-11 15:00:59
app_v2/src/main/res/layout/fragment_settings_playback.xml
containerPlayerUI
Moved PiP toggle from Video tab to Playback > Player UI section
2026-04-11 15:01:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
PlaybackSettingsFragment
Wired PiP toggle (API 31+ visibility, observe/update setting)
2026-04-11 15:01:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Removed PiP toggle (moved to Playback tab)
2026-04-11 15:40:31
app_v2/src/main/res/drawable/splash_icon_empty.xml
splash_icon_empty
Created empty transparent vector drawable to suppress system splash icon on API 31+
2026-04-11 15:40:31
app_v2/src/main/res/values-v31/themes.xml
Theme.FastMediaSorter
Fixed windowSplashScreenAnimatedIcon: replaced invalid color ref with proper transparent drawable
2026-04-11 15:40:31
app_v2/src/main/res/values-night-v31/themes.xml
Theme.FastMediaSorter
Fixed windowSplashScreenAnimatedIcon: replaced invalid color ref with proper transparent drawable (night)
2026-04-11 15:40:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
ListViewHolder.loadThumbnail
Fixed DiskCacheStrategy.DATA -> RESOURCE for local video thumbnails + added listener with recordLoad()
2026-04-11 16:37:24
app_v2/src/main/res/values-v31/themes.xml
Theme.FastMediaSorter
Removed windowSplashScreenAnimatedIcon override: system now shows launcher icon centered (not full-screen) on splash
2026-04-11 16:37:24
app_v2/src/main/res/values-night-v31/themes.xml
Theme.FastMediaSorter
Removed windowSplashScreenAnimatedIcon override for night mode: fixes black splash screen
2026-04-11 23:10:12
app_v2/src/main/res/values-v31/themes.xml
Theme.FastMediaSorter
Removed windowDisablePreview from v31 theme - conflicts with Splash Screen API on Android 12+
2026-04-11 23:10:12
app_v2/src/main/res/values-night-v31/themes.xml
Theme.FastMediaSorter
Removed windowDisablePreview from night-v31 theme - conflicts with Splash Screen API on Android 12+
2026-04-11 23:24:45
app_v2/src/main/res/values-v31/themes.xml
Theme.FastMediaSorter
Changed splash background from white to #F5F5F5 (light gray) to reduce flash on startup
2026-04-11 23:38:31
app_v2/src/main/res/drawable/ic_logo.png
ic_logo
Added SZA logo (black on transparent) for light theme
2026-04-11 23:38:31
app_v2/src/main/res/drawable-night/ic_logo.png
ic_logo
Added SZA logo (white on transparent) for dark theme
2026-04-11 23:38:31
app_v2/src/main/res/values-v31/themes.xml
windowSplashScreenAnimatedIcon
Changed splash icon from empty to ic_logo
2026-04-11 23:38:31
app_v2/src/main/res/values-night-v31/themes.xml
windowSplashScreenAnimatedIcon
Changed splash icon from empty to ic_logo (night)
2026-04-11 23:38:31
app_v2/src/main/res/layout/fragment_settings_general.xml
ivContactLogo
Added SZA logo ImageView next to version/email info in settings
2026-04-11 23:38:31
index.html
footer/email-card
Added SZA logo to contact card and footer near email (EN)
2026-04-11 23:38:31
index-ru.html
footer/email-card
Added SZA logo to contact card and footer near email (RU)
2026-04-11 23:38:31
index-uk.html
footer/email-card
Added SZA logo to contact card and footer near email (UK)
2026-04-11 23:51:56
app_v2/src/main/res/drawable/ic_splash_logo.xml
ic_splash_logo
Created 108dp layer-list wrapper for splash screen icon (PNG too small for API31+ splash)
2026-04-11 23:51:56
app_v2/src/main/res/values-v31/themes.xml
windowSplashScreenAnimatedIcon
Changed splash icon reference from ic_logo to ic_splash_logo (108dp wrapper)
2026-04-11 23:51:56
app_v2/src/main/res/values-night-v31/themes.xml
windowSplashScreenAnimatedIcon
Changed splash icon reference from ic_logo to ic_splash_logo (108dp wrapper, night)
2026-04-12 00:05:22
app_v2/src/main/res/layout/view_mini_now_playing.xml
view_mini_now_playing
Fix white strip in player: change background from colorSurface to black, update divider/title/icon to white for player-consistent dark style
2026-04-12 00:06:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Fix: displayTranslatedText was no-op in standalone PDF/EPUB - now shows AlertDialog with result and copy button
2026-04-12 02:40:53
app_v2/build.gradle.kts
release buildType
Enable ENABLE_SCHEDULED_OPERATIONS=true and ENABLE_BACKGROUND_AUDIO=true for release build
2026-04-12 02:51:03
app_v2/src/main/res/layout/dialog_scheduled_operation.xml
dialog_scheduled_operation
Group conditions (checkboxes+time filter+overwrite) in card, compact 2-col grid, reduce margins
2026-04-12 02:56:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesActivity.kt
DuplicatesActivity
Add enableEdgeToEdge() for Android 15 edge-to-edge enforcement
2026-04-12 02:56:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesFragment.kt
DuplicatesFragment
Apply nav bar insets to rvDuplicates and fabDeleteSelected for edge-to-edge
2026-04-12 02:58:31
app_v2/src/main/res/layout/fragment_settings_destinations.xml
tvNoScheduledOps
Change no-destinations hint text color to colorError (red)
2026-04-12 02:58:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
Show ‘Add destinations first’ hint only when destinations list is empty
2026-04-12 19:01:04
app_v2/src/main/res/layout/activity_main.xml
AppBarLayout
Added android:fitsSystemWindows for proper status bar handling on tablet landscape
2026-04-12 19:01:14
app_v2/src/main/res/layout/activity_settings.xml
ConstraintLayout
Added android:fitsSystemWindows for system insets handling on tablet
2026-04-12 19:01:14
app_v2/src/main/res/layout/activity_add_resource.xml
MaterialToolbar
Added android:fitsSystemWindows for status bar inset handling
2026-04-12 19:28:16
app_v2/src/main/res/raw/keep.xml
Resource Shrinking
Add keep.xml to preserve ic_logo drawable in release build
2026-04-12 19:28:17
app_v2/proguard-rules.pro
ProGuard Rules
Keep all drawable resources to prevent R8 shrinking
2026-04-12 19:39:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Add syncAudioServiceIndex() to sync ViewModel on ExoPlayer auto-advance
2026-04-12 19:39:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Fix: call syncAudioServiceIndex before onAudioServiceReady in onMediaItemTransition(REASON_AUTO)
2026-04-12 19:39:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
AudioServiceController
Make playAudioPlaylistWithMetadata idempotent: skip setMediaItems if already at correct index
2026-04-12 19:55:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Add currentSelectedPaths() for sync selection read from selectionManager
2026-04-12 19:55:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Fix inline item buttons (delete/copy/move/rename): use currentSelectedPaths() to avoid async state lag
2026-04-12 20:39:05
app_v2/src/main/res/values/strings.xml
strings.xml
Added EN string resources for Compact Elements feature
2026-04-12 20:39:12
app_v2/src/main/res/values-ru/strings.xml
strings.xml (RU)
Added RU localization for Compact Elements
2026-04-12 20:39:12
app_v2/src/main/res/values-uk/strings.xml
strings.xml (UK)
Added UK localization for Compact Elements
2026-04-12 20:39:12
app_v2/src/main/res/layout/fragment_settings_general.xml
layout
Added Compact Elements switch to General Settings
2026-04-12 20:39:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Bound Compact Elements UI to ViewModel state
2026-04-12 20:44:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
Implemented compact elements scaling for player command panel and overlays
2026-04-12 20:44:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Propagated useCompactElements state to player UI layer
2026-04-12 20:44:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
BrowseStateUiUpdater
Enhanced breadcrumb and filter scaling for compact mode
2026-04-12 21:06:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
PagingMediaFileAdapter
Add compact elements support: useCompactElements field, setUseCompactElements(), 0.5x thumbnail/text/padding in ListViewHolder.bind
2026-04-12 21:06:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer.updateDisplayMode
Halve grid iconSize when useCompactElements=true so span count doubles automatically
2026-04-12 21:07:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity.observeData
Call resourceAdapter.setUseCompactElements from settings observer to apply compact mode on Main screen
2026-04-12 21:40:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCompactElementsManager.kt
PlayerCompactElementsManager
New: extracted player compact-elements text overlay scaling (apply/restore) from PlayerDialogAndUiStateManager per spec
2026-04-12 21:40:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
Refactor: delegate compact overlay scaling to PlayerCompactElementsManager.apply/restore
2026-04-12 21:40:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter.ListViewHolder
Fix: add action-button LayoutParams scaling (12dp compact vs 24dp normal); tvFileInfo 10sp->9sp (x0.75)
2026-04-12 21:40:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
PagingMediaFileAdapter
Fix: tvFileInfo compact 10sp->9sp (x0.75 per spec)
2026-04-12 21:40:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Feat: grid ItemDecoration spacing (4dp normal / 2dp compact); refreshGridSpacing() called on settings change and layout switch
2026-04-12 21:40:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
PagingMediaFileAdapter
Fix: tvFileInfo compact 10sp->9sp (x0.75 per spec)
2026-04-12 21:40:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Feat: grid ItemDecoration spacing (4dp normal / 2dp compact); refreshGridSpacing() called on settings change and layout switch
2026-04-12 21:47:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerState
Fix: restore missing showCommandPanel field (accidentally removed when useCompactElements was added)
2026-04-12 21:47:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Fix: safe calls (?.) for nullable switchCompactElements and iconHelpCompactElements bindings
2026-04-12 22:18:23
app_v2/src/main/res/layout-land/fragment_settings_general.xml
Settings General (landscape)
Add SZA logo ImageView before version TextView (was missing in landscape layout)
2026-04-12 22:37:23
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbClient.kt
SmbClient
Fix: re-throw CancellationException in scan catches instead of logging as error
2026-04-12 22:37:23
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
SmbMediaScanner
Fix: suppress Error log for CancellationException in scan error handlers
2026-04-12 22:53:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt
BrowseObserverManager.observeSettings
Fix: propagate useCompactElements to adapter on every settings change; also trigger grid span recalc when compact flag changes
2026-04-12 22:53:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer.updateDisplayMode
Fix: remove erroneous iconSize halving; pass settings.useCompactElements to BrowseRecyclerViewManager
2026-04-12 22:53:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRecyclerViewManager.kt
BrowseRecyclerViewManager.updateDisplayMode
Add isCompactMode param: halve effectiveIconSizeDp for grid span calc only; adapter keeps full iconSize
2026-04-12 23:56:26
maestro/smoke/standalone_doc_search.yaml
standalone_doc_search
Fix Maestro 2.x compat: replace openFile+rotateToLandscape with launchApp intent+setOrientation; fix appId missing .debug
2026-04-12 23:56:31
maestro/smoke/browse_subfolder_ops.yaml
browse_subfolder_ops
Fix Maestro 2.x compat: replace pressBack with back
2026-04-13 00:02:54
maestro/run-tests.ps1
run-tests.ps1
Set JAVA_HOME to JDK 21 before maestro.bat to bypass system Java 8 (RedHat) on PATH
2026-04-13 00:41:11
app_v2/src/main/res/values/dimens.xml
dimens
Add control_button_size_compact and toolbar_row_height_compact for compact mode toolbar scaling
2026-04-13 00:41:54
app_v2/src/main/res/layout/activity_settings.xml
titleRow
Add id=titleRow to portrait title LinearLayout for compact mode targeting
2026-04-13 00:41:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
Apply compact toolbar: portrait reduces titleRow+tabLayout height; landscape reduces container height by 35%
2026-04-13 00:41:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Apply compact toolbar: control buttons bar padding+height reduced in compact mode
2026-04-13 00:50:43
app_v2/src/main/res/layout/fragment_settings_destinations.xml
cardScheduled
Fix Scheduled Operations card styling: add cardCornerRadius, cardElevation, contentPadding, and horizontal margins to match other group cards
2026-04-13 00:51:52
app_v2/src/main/res/layout/fragment_settings_general.xml
btnBatteryOptimizationPermission
Remove marginTop from battery optimization button to eliminate white space
2026-04-13 00:52:59
app_v2/src/main/res/layout/fragment_settings_general.xml
debugLogsExport
Remove marginTop from debug logs export buttons container to eliminate white space
2026-04-13 01:00:47
app_v2/build.gradle.kts
defaultConfig
Move owner trigger string to local.properties BuildConfig field to hide it from VCS
2026-04-13 01:00:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Replace hardcoded sza trigger with BuildConfig.OWNER_TRIGGER from local.properties
2026-04-13 01:23:04
app_v2/src/main/res/layout/fragment_settings_general.xml
permissionsLayout
Remove marginTop from second permissions row (Manage Media) to eliminate white space above battery button
2026-04-13 01:25:01
app_v2/src/main/java/com/sza/fastmediasorter/core/util/LocaleHelper.kt
LocaleHelper
Add markReturnToSettings/consumeReturnToSettings for post-restart navigation
2026-04-13 01:25:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Mark return-to-settings flag before language/cache/import restarts
2026-04-13 01:25:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Redirect to SettingsActivity on startup when return-to-settings flag is set
2026-04-13 01:25:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
ResourceAdapter
Hide lock icon on virtual aggregate resources in list and grid layouts
2026-04-13 01:35:11
app_v2/src/main/res/layout-land/dialog_scheduled_operation.xml
dialog_scheduled_operation (land)
Group Conditions into MaterialCardView with 2-col GridLayout; move containerOverwrite inside the group (mirrors portrait layout)
2026-04-13 01:38:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Fix landscape: constrain dialog window to 90% screen height so Save/Cancel buttons are always visible
2026-04-13 01:38:42
app_v2/src/main/res/layout-land/dialog_scheduled_operation.xml
dialog_scheduled_operation (land)
Fix buttons cut off: outer LinearLayout match_parent, NestedScrollView weight=1 (no maxHeight)
2026-04-13 01:59:16
app_v2/src/main/java/com/sza/fastmediasorter/core/util/UriPathResolver.kt
UriPathResolver
Fix: handle Downloads provider docId without colon separator (maps to DIRECTORY_DOWNLOADS)
2026-04-13 02:17:53
app_v2/src/main/java/com/sza/fastmediasorter/worker/WorkManagerScheduler.kt
WorkManagerScheduler.runNow
Add setExpedited(RUN_AS_NON_EXPEDITED_WORK_REQUEST) to runNow - fixes setForeground() failure on Android 12+ when app is backgrounded
2026-04-13 02:17:57
app_v2/src/main/java/com/sza/fastmediasorter/worker/ScheduledOperationsWorker.kt
ScheduledOperationsWorker
Override getForegroundInfo() required by WorkManager for expedited work requests
2026-04-13 02:30:42
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt
SmbOperationsUseCase.testSftpConnection
Re-throw CancellationException before generic catch to stop false SFTP error logs on worker cancellation
2026-04-13 02:30:45
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt
ExecuteScheduledOperationUseCase
Re-throw CancellationException in invoke() outer catch and checkTargetReachability (replaced runCatching); add CancellationException import
2026-04-13 03:01:13
app_v2/build.gradle.kts
dependencies
Upgrade Material 1.12.0->1.13.0, AppCompat 1.6.1->1.7.0, Core-KTX 1.12.0->1.13.0 to fix deprecated setStatusBarColor/setNavigationBarColor on API 35
2026-04-13 03:01:19
app_v2/src/main/res/values-v35/themes.xml
Theme.App.BottomSheetDialog.EdgeToEdgeCompat
Updated comment: enableEdgeToEdge=true now uses non-deprecated WindowInsetsControllerCompat path in Material 1.13.0+
2026-04-13 03:17:10
app_v2/build.gradle.kts
dependencies
Add androidx.print for PrintHelper support
2026-04-13 03:17:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/widgets/IpAddressEditText.kt
IpAddressEditText
Fix editTextStyle attribute reference to use android.R.attr
2026-04-13 03:17:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/widgets/NetworkPathEditText.kt
NetworkPathEditText
Fix editTextStyle attribute reference to use android.R.attr
2026-04-13 03:17:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LanguageBadgeDrawable.kt
LanguageBadgeDrawable
Fix theme color resolution to use android.R.attr
2026-04-13 03:32:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Fix: pass smbClient/sftpClient/ftpClient/credentialsRepository/unifiedCache/cloudClients to PlayerMediaLoaderManager so SMB pre-cache works for background music
2026-04-13 11:24:20
app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LoggingHelper.kt
FileLoggingTree
Fix: fall back to filesDir when getExternalFilesDir returns null to ensure log files are always created
2026-04-13 11:24:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Fix: use requireActivity() for exportLogs to reliably start share chooser Activity
2026-04-13 14:52:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager
Use contentUri/file Uri fallback for service audio playlist items to prevent invalid local path URIs on Android 8.1
2026-04-13 15:28:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Skip background-audio exit dialog when service audio is paused and stop silently on back
2026-04-13 15:34:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioWaveParticleView.kt
AudioWaveParticleView
Added 360-degree directional wave rendering with direction-biased particles and startup ramp
2026-04-13 16:23:02
PLAN/memory-leaks-potential-research.md
memory-leaks-potential-research
Add Section 19: static code audit results for 15 components - 13 SAFE, 1 WARNING (UnifiedFileCache), 1 NOT FOUND (SSHJClientPool)
2026-04-13 16:35:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Add PdfViewerManager.close() call in onDestroy(); fixes native PdfRenderer leak (ML-001)
2026-04-13 16:36:27
PLAN/tasks/
task-ML-001..011
Create 11 technical tasks for confirmed memory/resource leaks: PdfViewerManager not released, GlobalScope in OneDrive, FTP temp dir, SftpDataSource stream leak, dialog scopes, UnifiedFileCache size limit, TempFileManager sweep, SFTP race condition, unscoped coroutines, WebViewDatabase cleanup, ConnectionThrottleManager SupervisorJob
2026-04-13 16:37:30
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Replace GlobalScope with injected applicationScope; fixes coroutine cancellation + Activity retention leak (ML-002)
2026-04-13 16:40:43
PLAN/tasks/README.md
memory-leak-tasks
Research complete: 11 tasks created (2 CRITICAL, 5 HIGH, 4 MEDIUM), 2 already implemented (ML-001 PDF-manager, ML-002 OneDrive-GlobalScope), remaining 9 pending
2026-04-13 16:41:02
app_v2/src/main/java/com/sza/fastmediasorter/data/network/FtpFileOperationHandler.kt
FtpFileOperationHandler
Add context.cacheDir to File.createTempFile() in copyFtpToFtp; fixes system temp disk leak (ML-003)
2026-04-13 16:43:39
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
SftpDataSource
Add rawStream cleanup in catch block; fixes orphaned InputStream leak on open() exception (ML-004)
2026-04-13 16:50:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
FileOperationDestinationDialog
Add SupervisorJob + onDetachedFromWindow() cleanup to prevent scope leak on dialog dismiss (ML-005)
2026-04-13 16:50:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSettingsManager.kt
PlayerSettingsManager
Add SupervisorJob + release() method to prevent stale Activity reference after destroyed (ML-005)
2026-04-13 16:50:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Add playerSettingsManager?.release() call in onDestroy() to cleanup coroutine scope (ML-005)
2026-04-13 16:50:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ResourcePickerDialog.kt
ResourcePickerDialog
Remove dead/unused CoroutineScope field; use lifecycleScope.launch exclusively (ML-005)
2026-04-13 16:53:42
app_v2/src/main/java/com/sza/fastmediasorter/core/cache/UnifiedFileCache.kt
UnifiedFileCache
Add DEFAULT_MAX_CACHE_SIZE_BYTES (500MB) constant + evictIfNeeded() LRU eviction; prevents unbounded cache growth (ML-006)
2026-04-13 16:57:46
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Inject TempFileManager + call cleanupOldTempFiles() on startup + cleanupAllTempFiles() on TRIM_MEMORY_COMPLETE (ML-007)
2026-04-13 16:57:46
app_v2/src/main/java/com/sza/fastmediasorter/domain/transfer/TempFileManager.kt
TempFileManager
Enhance cleanupOldTempFiles() to scan all temp patterns: temp_, ftp_copy_, bridge_, audio_meta_ (ML-007)
2026-04-13 17:01:41
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient
Fix TOCTOU race condition in getConnectionForExoPlayer: move connectionPool read inside exoPlayerPoolLock (ML-008)
2026-04-13 17:05:46
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Add cleanupScope with SupervisorJob; cancel on close() to prevent orphaned coroutines (ML-009)
2026-04-13 17:05:46
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient
Add cleanupScope for idle connection maintenance; prevents orphaned cleanup coroutines (ML-009)
2026-04-13 17:05:46
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/NetworkCredentialsRepositoryImpl.kt
NetworkCredentialsRepositoryImpl
Inject applicationScope for test credential loading; eliminate orphaned init coroutine (ML-009)
2026-04-13 17:05:46
app_v2/src/main/java/com/sza/fastmediasorter/worker/ScheduledOperationsBootReceiver.kt
ScheduledOperationsBootReceiver
Use goAsync() + pendingResult.finish() to ensure rescheduleAll() completes before broadcast dies (ML-009)
2026-04-13 17:16:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Added WebViewDatabase.clearHttpAuthUsernamePassword() in release() to prevent credential data retention (ML-010)
2026-04-13 17:16:43
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Fixed malformed comment - ‘leanup scope’ to ‘// Cleanup scope’ (build fix)
2026-04-13 17:16:43
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/NetworkCredentialsRepositoryImpl.kt
NetworkCredentialsRepositoryImpl
Fixed missing @param:ApplicationScope annotation on applicationScope parameter (Hilt build fix)
2026-04-13 17:20:44
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
ConnectionThrottleManager
Replaced bare Job() with SupervisorJob() in managerScope to prevent scope cancellation cascade on exceptions (ML-011)
2026-04-13 18:04:03
PLAN/tasks/README.md
memory-leak-all-complete
ALL 11 TASKS COMPLETE (2026-04-13): 2 CRITICAL + 5 HIGH + 4 MEDIUM fixes implemented. Next: validation testing (LeakCanary, device stress tests)
2026-04-13 21:20:06
app_v2/src/main/res/layout/activity_settings.xml
SettingsActivity
Reduce header vertical size: title row 56dp→48dp, tabs 56dp→40dp
2026-04-13 21:41:56
app_v2/src/main/java/com/sza/fastmediasorter/di/GlideAppModule.kt
GlideAppModule
Fix: Explicitly create cache directory at init to ensure it exists before CacheStatusHelper checks at startup
2026-04-13 21:41:56
app_v2/src/main/java/com/sza/fastmediasorter/core/util/CacheStatusHelper.kt
CacheStatusHelper
Fix: Support persistent Glide cache by relying on early directory creation in GlideAppModule
2026-04-13 21:41:56
PLAN/spec_log_diagnosis_and_investigation.md
spec
Add diagnostic specification for log analysis and cache/process kill investigation
2026-04-13 21:58:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Fix: Stop AudioPlaybackService before process kill to prevent OS-triggered restart (double startup bug)
2026-04-13 21:58:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Fix: Add path normalization helper to resolve symlinks and canonical paths for reliable cache lookups (fixes subfolder mismatch warnings)
2026-04-13 22:19:01
app_v2/src/main/res/layout/bottom_sheet_now_playing.xml
bottom_sheet_now_playing
Fix FATAL EXCEPTION: remove invalid BottomSheetBehavior XML tag (not a View)
2026-04-13 22:23:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
Fixed fullscreen mode: added ExoPlayer controller hide/show logic to automatically hide bottom media controls when entering fullscreen, and show them when exiting fullscreen (FIX-FS-001)
2026-04-13 22:32:16
scripts/utils/search-log.ps1
search-log
Improve: track continuation lines, extract startup banner in Summary, detect beginning of crash, pattern search in continuations
2026-04-13 23:41:48
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
NetworkVideoFrameDecoder
Fix 1+2: dedup in-flight WEBM extractions + suppress failed-cache if ThumbnailCache already has entry
2026-04-13 23:55:26
app_v2/src/main/res/layout/activity_settings.xml
activity_settings
Reduce header and tabs height by 50%: titleRow 48dp→24dp, tabLayout 40dp→20dp, buttons 48dp→24dp
2026-04-13 23:55:26
app_v2/src/main/res/values/dimens.xml,app_v2/src/main/res/values-sw320dp/dimens.xml,app_v2/src/main/res/values-sw480dp/dimens.xml,app_v2/src/main/res/values-sw600dp/dimens.xml,app_v2/src/main/res/values-sw720dp/dimens.xml
dimens
Reduce toolbar_row_height_compact by 50% across all size qualifiers (36dp→18dp, 32dp→16dp, 40dp→20dp, 44dp→22dp)
2026-04-14 00:02:25
app_v2/src/main/res/layout/activity_settings.xml
activity_settings
Extreme compact mode: titleRow 24dp→16dp, tabLayout 20dp→16dp, buttons 24dp→16dp, title font 12sp with 2dp padding, tab font 10sp
2026-04-14 00:02:25
app_v2/src/main/res/values/themes.xml
themes
Add TabLayoutCompactTextStyle with 10sp font for compact settings tabs
2026-04-14 00:02:29
app_v2/src/main/res/values/dimens.xml
dimens
Ultra-compact toolbar: all toolbar_row_height_compact set to 12dp (was 18/16/20/22dp)
2026-04-14 00:42:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
ForwardingPlayer
Fix: override isCommandAvailable/getAvailableCommands so Next button always shows in notification
2026-04-14 01:38:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
AudioPlaybackService
Fix unresolved ‘Commands’ import - use Player.Commands (nested class) instead of non-existent top-level androidx.media3.common.Commands
2026-04-14 03:12:44
docs/FEATURES.md
FEATURES.md
Added section 23: Apps FMS Can Replace - Competitor Comparison (EN)
2026-04-14 03:12:47
docs/FEATURES_RU.md
FEATURES_RU.md
Added section 23: competitor comparison with popular apps (RU)
2026-04-14 03:12:50
docs/FEATURES_UK.md
FEATURES_UK.md
Added section 23: competitor comparison with popular apps (UK)
2026-04-14 10:09:48
PLAN/spec_wear_resource_sync.md
spec
Improve spec III.6: add flavor scope, ADRs, SyncResultScreen, phone UI detail, accessibility, fix section numbering
2026-04-14 10:53:16
PLAN/spec_wear_master.md
spec
Create Wear OS master plan: unified strategic + tactical spec for all 4 phases
2026-04-14 11:03:15
app_v2/build.gradle.kts
dependencies
P1-01: Add play-services-wearable:18.1.0 for phone-side Wearable Data Layer
2026-04-14 11:03:49
wear/domain/model/WearSyncPayload.kt
WearSyncPayload
P1-02: Add Wearable Data Layer sync payload models
2026-04-14 11:04:23
wear/domain/model/NetworkSource.kt
NetworkSource
P1-03: Add domain and sshPrivateKey fields
2026-04-14 11:04:23
wear/domain/repository/NetworkSourceRepository.kt
NetworkSourceRepository
P1-04: Add upsertSource method
2026-04-14 11:04:23
wear/data/preferences/NetworkSourceRepositoryImpl.kt
NetworkSourceRepositoryImpl
P1-05: Implement upsertSource with merge-key dedup
2026-04-14 11:05:12
app_v2/domain/repository/WearableDataLayerRepository.kt
WearableDataLayerRepository
P1-06: Add WearableDataLayerRepository interface
2026-04-14 11:05:12
app_v2/data/wear/WearableDataLayerRepositoryImpl.kt
WearableDataLayerRepositoryImpl
P1-06: Add WearableDataLayerRepository implementation
2026-04-14 11:05:12
app_v2/core/di/RepositoryModule.kt
RepositoryModule
P1-07: Bind WearableDataLayerRepository in Hilt module
2026-04-14 11:06:04
app_v2/domain/usecase/SendResourcesToWatchUseCase.kt
SendResourcesToWatchUseCase
P1-08: Send network resources to watch via Data Layer
2026-04-14 11:06:04
wear/domain/usecase/ImportNetworkSourcesUseCase.kt
ImportNetworkSourcesUseCase
P1-09: Import sync payload into watch repository with dedup
2026-04-14 11:07:22
app_v2/service/PhoneWearListenerService.kt
PhoneWearListenerService
P1-10: Add WearableListenerService for phone-side sync events
2026-04-14 11:07:22
app_v2/src/main/AndroidManifest.xml
PhoneWearListenerService
P1-11: Register PhoneWearListenerService in phone manifest
2026-04-14 11:07:22
wear/data/wear/WatchWearListenerService.kt
WatchWearListenerService
P1-12: Add WearableListenerService for watch-side data receive
2026-04-14 11:07:22
wear/src/main/AndroidManifest.xml
WatchWearListenerService
P1-13: Register WatchWearListenerService + VIBRATE permission in wear manifest
2026-04-14 11:10:01
app_v2/ui/settings/WearSyncViewModel.kt
WearSyncViewModel
P1-14: Add ViewModel for Wear sync state management
2026-04-14 11:10:01
app_v2/ui/settings/helpers/BeamAnimationDialog.kt
BeamAnimationDialog
P1-15: Add beam animation dialog with pulsing rings
2026-04-14 11:10:01
app_v2/ui/settings/fragments/WearSyncSettingsFragment.kt
WearSyncSettingsFragment
P1-16: Add Wear Companion settings screen
2026-04-14 11:10:01
app_v2/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
P1-16: Hook Wear Companion button into General settings
2026-04-14 11:10:01
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
P1-16: Add Wear Companion button to General settings layout
2026-04-14 11:13:10
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/viewmodel/NetworkSourcesViewModel.kt
NetworkSourcesViewModel
P1-19: Add requestSyncFromPhone, syncState, SyncState sealed class
2026-04-14 11:14:16
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/NetworkSourcesScreen.kt
NetworkSourcesScreen
P1-20: Add Sync from Phone chip, syncState indicator, SyncState wiring
2026-04-14 11:14:40
wear/src/main/java/com/sza/fastmediasorter/wear/MainActivity.kt
MainNavigation
P1-21: Add sync_transfer and sync_result routes to Wear navigation
2026-04-14 11:15:38
wear/src/main/java/com/sza/fastmediasorter/wear/data/wear/WatchWearListenerService.kt
WatchWearListenerService
P1-22: Add haptic feedback on sync completion
2026-04-14 11:15:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/BeamAnimationDialog.kt
BeamAnimationDialog
P1-22: Add haptic vibration on Success state
2026-04-14 11:17:43
wear/src/main/res/values/strings.xml
strings
P1-23: Add Wear sync string resources (EN)
2026-04-14 11:17:49
wear/src/main/res/values-ru/strings.xml
strings-ru
P1-23: Add Wear sync string resources (RU)
2026-04-14 11:17:52
wear/src/main/res/values-uk/strings.xml
strings-uk
P1-23: Add Wear sync string resources (UK)
2026-04-14 11:17:57
app_v2/src/main/res/values/strings.xml
strings
P1-23: Add phone-side Wear sync strings (EN)
2026-04-14 11:18:00
app_v2/src/main/res/values-ru/strings.xml
strings-ru
P1-23: Add phone-side Wear sync strings (RU)
2026-04-14 11:18:03
app_v2/src/main/res/values-uk/strings.xml
strings-uk
P1-23: Add phone-side Wear sync strings (UK)
2026-04-14 11:20:16
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
SendResourcesToWatchUseCaseTest
P1-24: Add unit tests for SendResourcesToWatchUseCase
2026-04-14 11:20:19
wear/src/test/java/com/sza/fastmediasorter/wear/domain/usecase/ImportNetworkSourcesUseCaseTest.kt
ImportNetworkSourcesUseCaseTest
P1-24: Add unit tests for ImportNetworkSourcesUseCase
2026-04-14 11:20:22
wear/build.gradle.kts
wear build
P1-24: Add kotlinx-coroutines-test dependency for unit tests
2026-04-14 11:21:05
docs/FEATURES.md
FEATURES
P1-25: Add one-tap network source sync feature entry (Wear OS section)
2026-04-14 11:21:08
docs/FEATURES_RU.md
FEATURES_RU
P1-25: Add one-tap sync entry (RU)
2026-04-14 11:21:11
docs/FEATURES_UK.md
FEATURES_UK
P1-25: Add one-tap sync entry (UK)
2026-04-14 11:21:25
PLAN/spec_wear_master.md
spec_wear_master
P1-24/25 marked complete - Phase 1 fully done
2026-04-14 12:11:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Wrap saveLogsLauncher.launch in try-catch for ActivityNotFoundException; add showSaveLogsNotSupportedDialog fallback to share action
2026-04-14 12:11:12
app_v2/src/main/AndroidManifest.xml
AndroidManifest
Add block for ACTION_CREATE_DOCUMENT (SAF package visibility on API 30+)
2026-04-14 12:11:17
app_v2/src/main/res/values/strings.xml
strings
Add save_logs_not_supported string (EN/RU/UK) for SAF fallback dialog
2026-04-14 12:20:35
wear/src/main/java/com/sza/fastmediasorter/wear/ui/settings/SettingsViewModel.kt
SettingsViewModel
Replaced parallel settings collectors with combined flow to avoid state races
2026-04-14 12:20:35
wear/src/main/java/com/sza/fastmediasorter/wear/domain/repository/NetworkSourceRepository.kt
NetworkSourceRepository
Added reactive observeSources API for network source updates
2026-04-14 12:20:35
wear/src/main/java/com/sza/fastmediasorter/wear/data/preferences/NetworkSourceRepositoryImpl.kt
NetworkSourceRepositoryImpl
Backed source storage with reactive state flow and emitted updates after mutations
2026-04-14 12:20:35
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/viewmodel/NetworkSourcesViewModel.kt
NetworkSourcesViewModel
Switched source loading to reactive observation and added retryLoad
2026-04-14 12:20:35
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/NetworkSourcesScreen.kt
NetworkSourcesScreen
Retry action now calls view model retryLoad
2026-04-14 12:20:35
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
SendResourcesToWatchUseCaseTest
Removed unstable JVM test per request
2026-04-14 12:21:04
PLAN/spec_wear_master.md
spec_wear_master
Marked Phase 4 complete and updated reactive repository design note to StateFlow
2026-04-14 12:25:11
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
SendResourcesToWatchUseCaseTest
Restored wear sync JVM test using fakes instead of mocks
2026-04-14 12:25:11
PLAN/spec_wear_master.md
spec_wear_master
Marked Phase 3 UX polish checklist complete
2026-04-14 12:25:11
docs/FEATURES.md
FEATURES
Documented Wear UX polish and reactive source refresh
2026-04-14 12:25:11
docs/FEATURES_RU.md
FEATURES_RU
Documented Wear UX polish and reactive source refresh (RU)
2026-04-14 12:25:11
docs/FEATURES_UK.md
FEATURES_UK
Documented Wear UX polish and reactive source refresh (UK)
2026-04-14 12:27:53
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
SendResourcesToWatchUseCaseTest
Aligned fake credentials with real JVM password fallback paths
2026-04-14 12:29:51
PLAN/spec_wear_master.md
spec_wear_master
Marked Phase 2 partial progress and refreshed Phase 2/3/4 implementation status notes
2026-04-14 12:31:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioWaveParticleView.kt
AudioWaveParticleView
Fix blank screen on slow tablets: defer startAnimation() via pendingStart flag until onSizeChanged fires; auto-reduce wave/particle count on isLowRamDevice
2026-04-14 12:46:14
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/viewmodel/AddNetworkSourceUiState.kt
AddNetworkSourceUiState
Added protocol-aware UI state for watch network source creation
2026-04-14 12:46:14
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/viewmodel/AddNetworkSourceViewModel.kt
AddNetworkSourceViewModel
Added protocol-aware add-source view model with validation, test, and save flows
2026-04-14 12:46:14
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/viewmodel/SmbConnectionViewModel.kt
SmbConnectionViewModel
Marked legacy SMB-only view model as deprecated
2026-04-14 12:47:57
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/AddNetworkSourceScreen.kt
AddNetworkSourceScreen
Added protocol-aware watch screen for SMB FTP and SFTP source creation
2026-04-14 12:47:57
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/AddSmbScreen.kt
AddSmbScreen
Redirected legacy SMB screen to AddNetworkSourceScreen
2026-04-14 12:47:57
wear/src/main/java/com/sza/fastmediasorter/wear/MainActivity.kt
MainActivity
Added add_network_source route and mapped add_smb alias to new screen
2026-04-14 12:48:43
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/NetworkSourcesScreen.kt
NetworkSourcesScreen
Switched add buttons to generic add_network_source label
2026-04-14 12:48:43
wear/src/main/res/values/strings.xml
strings
Added AddNetworkSource strings and validation messages (EN/RU/UK)
2026-04-14 12:50:36
PLAN/spec_wear_master.md
spec_wear_master
Marked Phase 2 complete and refreshed Wear add-source status
2026-04-14 12:50:36
docs/FEATURES.md
FEATURES
Documented on-watch SMB FTP SFTP source creation and delete flow
2026-04-14 12:50:36
docs/FEATURES_RU.md
FEATURES_RU
Documented on-watch SMB FTP SFTP source creation and delete flow (RU)
2026-04-14 12:50:36
docs/FEATURES_UK.md
FEATURES_UK
Documented on-watch SMB FTP SFTP source creation and delete flow (UK)
2026-04-14 13:48:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OpenSourceLicensesFragment.kt
OpenSourceLicensesFragment
TASK-01: Wrap ACTION_VIEW browser intent in try-catch ActivityNotFoundException with URL Toast fallback
2026-04-14 13:48:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileInfoDialog.kt
FileInfoDialog
TASK-02: Wrap Google Maps ACTION_VIEW intent in try-catch ActivityNotFoundException with Toast fallback
2026-04-14 13:48:16
app_v2/src/main/res/values/strings.xml
strings
Add no_maps_app_available string resource
2026-04-14 13:48:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
TASK-10: Wrap importSettingsFileLauncher.launch in try-catch ActivityNotFoundException
2026-04-14 13:48:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
TASK-12: Wrap importFileLauncher.launch in try-catch ActivityNotFoundException with Snackbar fallback
2026-04-14 13:48:24
app_v2/src/main/res/values/strings.xml
strings
Add no_maps_app_available string resource
2026-04-14 13:48:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
TASK-10: Wrap importSettingsFileLauncher.launch in try-catch ActivityNotFoundException
2026-04-14 13:48:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
TASK-12: Wrap importFileLauncher.launch in try-catch ActivityNotFoundException with Snackbar fallback
2026-04-14 13:58:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Fix: btnToggleView always visible in landscape mode (was hidden when resources <= 10 and not in grid mode)
2026-04-14 14:59:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
New: priority-driven portrait layout planner; PlayerCommand enum with 34 commands across Groups 2-3; buildActiveCommands + planLayout producing LayoutResult(barCommands, overflowCommands, showOverflowButton)
2026-04-14 14:59:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Refactor: replace binary portrait branch with adaptive width-based layout via CommandPanelLayoutPlanner; dynamic priority-ordered overflow menu built programmatically; add barViewForCommand, resolveAvailableCenterWidthPx, countVisibleRightGroupButtons; post updateOrientation for accurate width; remove redundant isLandscapeMode guards; Phase 6 parity decision documented (Share/Info/Slideshow/Favorite stay in fixed right group)
2026-04-14 16:47:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Hide ‘Already set as default’ button (GONE) when app is already default player, instead of disabling it, to save horizontal space
2026-04-14 16:52:49
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback
Refactor Default Media Player group: wrap two toggles (Primary Media Player + Accept Shared Files) in single horizontal row with equal weights, matching Player UI and Touch Zones groups pattern for better landscape space usage
2026-04-14 16:58:18
app_v2/src/main/res/drawable/ic_watch.xml
ic_watch
Fix: align tint to colorOnSurface, consistent with other project icons
2026-04-14 17:04:38
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general-land
Fix: Add missing btnWearCompanion to landscape layout
2026-04-14 17:04:41
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
Fix: Replace missing ic_watch drawable with system drawable
2026-04-14 17:06:03
app_v2/src/main/res/drawable/ic_watch.xml
ic_watch
Add Material watch vector icon with clock hands
2026-04-14 17:14:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/WearSyncSettingsFragment.kt
WearSyncSettingsFragment
Fix: Convert Fragment to BottomSheetDialogFragment so it renders above ViewPager2
2026-04-14 17:14:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Fix: Show WearSyncSettingsFragment via .show() not replace() transaction
2026-04-14 17:53:20
wear/build.gradle.kts
WearAppModule
Fix KSP build failure: align Hilt version 2.50->2.57.2 to match app_v2 and hilt-android-gradle-plugin
2026-04-14 18:02:41
wear/src/main/java/com/sza/fastmediasorter/wear/ui/settings/SettingsViewModel.kt
SettingsViewModel
Fix compile error: replace 7-arg combine() with list-based combine() (kotlinx supports max 5 typed args)
2026-04-14 18:07:58
wear/src/main/java/com/sza/fastmediasorter/wear/di/WearAppModule.kt
WearAppModule
Add @Provides for Gson singleton; fix Hilt MissingBinding error in WatchWearListenerService
2026-04-14 18:15:42
scripts/builders/build-wear-release.PS1
build-wear-release
Add Wear OS release build script (mirror of debug variant)
2026-04-14 22:08:40
app_v2/src/main/res/layout/dialog_scheduled_operation.xml
ScheduledOperationDialog
Remove Operation label; add collapsible Conditions group; add tilSource id for validation
2026-04-14 22:12:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
ScheduledOperationDialog
Add setupConditionsCollapse, setupSaveButtonState with real-time Source/Target error and Save button disable
2026-04-14 22:13:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
Fix automate dialog source prefill: wait for resources StateFlow to emit before opening dialog
2026-04-14 22:22:36
PLAN/spec_tts-pdf-epub-selection.md
spec
Add specification for TTS Read Aloud - PDF, EPUB, and selected text
2026-04-14 22:40:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt
PdfTextSelectionManager
Expose extractPageTextForTts() wrapper (internal); add onReadAloud constructor param; pass to DocumentSelectionActionModeCallback
2026-04-14 22:40:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Add TTS Read Aloud support: ttsManager field, toggleReadAloud(), speakText(), stopTtsOnPageChange(), releaseTts(); stop TTS on page navigation; release in close()
2026-04-14 22:40:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Wire EpubTtsDelegate: add ttsDelegate field, toggleReadAloud(), stopTtsOnChapterChange(); stop TTS on chapter navigation; release in release()
2026-04-14 22:40:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Show READ_ALOUD command for PDF and EPUB (was text-only)
2026-04-14 22:40:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Dispatch onReadAloudClicked() to PDF/EPUB managers based on current file type
2026-04-14 22:40:28
app_v2/src/main/res/menu/document_selection_menu.xml
document_selection_menu
Add action_read_aloud_selection menu item to text selection floating ActionMode
2026-04-14 22:40:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentSelectionActionModeCallback.kt
DocumentSelectionActionModeCallback
Add showReadAloud param + onReadAloud lambda; handle action_read_aloud_selection in onActionItemClicked
2026-04-14 22:40:28
app_v2/src/main/res/values/strings.xml
strings
Add action_read_aloud_selection and epub_text_empty_tts string resources (EN)
2026-04-14 22:40:28
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add action_read_aloud_selection and epub_text_empty_tts string resources (RU)
2026-04-14 22:40:28
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add action_read_aloud_selection and epub_text_empty_tts string resources (UK)
2026-04-14 22:40:28
docs/FEATURES.md
FEATURES
Add TTS Read Aloud bullets for PDF and EPUB sections
2026-04-14 22:40:28
docs/FEATURES_RU.md
FEATURES_RU
Add TTS Read Aloud bullets for PDF and EPUB sections (RU)
2026-04-14 22:40:28
docs/FEATURES_UK.md
FEATURES_UK
Add TTS Read Aloud bullets for PDF and EPUB sections (UK)
2026-04-14 22:40:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt
PdfTextSelectionManager
Expose extractPageTextForTts() wrapper (internal); add onReadAloud ctor param; pass to DocumentSelectionActionModeCallback
2026-04-14 22:40:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Add TTS Read Aloud: ttsManager, toggleReadAloud(), speakText(), stopTtsOnPageChange(), releaseTts(); stop on page nav; release in close()
2026-04-14 22:42:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Wire EpubTtsDelegate: add ttsDelegate, toggleReadAloud(), stopTtsOnChapterChange(); stop TTS on chapter nav; release in release()
2026-04-14 22:42:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Show READ_ALOUD command for PDF and EPUB file types (was text-only)
2026-04-14 22:42:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Dispatch onReadAloudClicked() to PDF/EPUB managers by current file type
2026-04-14 22:42:52
app_v2/src/main/res/menu/document_selection_menu.xml
document_selection_menu
Add action_read_aloud_selection item to text selection floating ActionMode
2026-04-14 22:42:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentSelectionActionModeCallback.kt
DocumentSelectionActionModeCallback
Add showReadAloud param + onReadAloud lambda; handle action_read_aloud_selection
2026-04-14 22:43:02
app_v2/src/main/res/values/strings.xml
strings
Add action_read_aloud_selection and epub_text_empty_tts string resources (EN)
2026-04-14 22:43:05
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add action_read_aloud_selection and epub_text_empty_tts string resources (RU)
2026-04-14 22:43:08
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add action_read_aloud_selection and epub_text_empty_tts string resources (UK)
2026-04-14 22:43:12
docs/FEATURES.md
FEATURES
Add TTS Read Aloud bullets for PDF and EPUB sections (EN)
2026-04-14 22:43:12
docs/FEATURES_RU.md
FEATURES_RU
Add TTS Read Aloud bullets for PDF and EPUB sections (RU)
2026-04-14 22:43:12
docs/FEATURES_UK.md
FEATURES_UK
Add TTS Read Aloud bullets for PDF and EPUB sections (UK)
2026-04-14 22:46:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt
PdfTextSelectionManager
Remove duplicate extractPageTextForTts; expose internal extractPageTextForTts for PdfTtsDelegate
2026-04-14 22:46:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTtsDelegate.kt
PdfTtsDelegate
New delegate: TTS Read Aloud for PDF pages (extracts text via PdfTextSelectionManager)
2026-04-14 22:46:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubTtsDelegate.kt
EpubTtsDelegate
New delegate: TTS Read Aloud for EPUB chapters (extracts text via WebView JS innerText)
2026-04-14 22:46:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Wire PdfTtsDelegate: toggleReadAloud/speakText/stopTtsOnPageChange/releaseTts; remove duplicate ttsManager
2026-04-14 22:46:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Wire EpubTtsDelegate: toggleReadAloud + stopTtsOnChapterChange in navigation; release in release()
2026-04-14 22:46:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Add READ_ALOUD command for PDF and EPUB file types
2026-04-14 22:46:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Dispatch onReadAloudClicked to PDF/EPUB managers by file type
2026-04-14 22:46:43
app_v2/src/main/res/menu/document_selection_menu.xml
document_selection_menu
Add Read Aloud item to text selection ActionMode menu
2026-04-14 22:46:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentSelectionActionModeCallback.kt
DocumentSelectionActionModeCallback
Add showReadAloud param and onReadAloud lambda; handle action_read_aloud_selection
2026-04-14 22:46:44
app_v2/src/main/res/values/strings.xml
strings
Add action_read_aloud_selection and epub_text_empty_tts string resources (EN/RU/UK)
2026-04-14 22:52:28
PLAN/spec_lyrics-selection-context-menu.md
spec
Add specification for lyrics viewer selection context menu (Read Aloud)
2026-04-14 22:59:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LyricsManager.kt
LyricsManager
Add Read Aloud context menu to lyrics viewer via DocumentSelectionActionModeCallback
2026-04-14 23:01:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager
Hide mini Now Playing bar during VIDEO playback (updateBarVisibility/onStart now accept MediaType)
2026-04-14 23:01:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.onResume
Pass current MediaType to nowPlayingManager.onStart() to suppress NowPlaying bar for video
2026-04-14 23:26:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
AudioPlaybackService.onPlayerError
Stop service on ExoPlayer SOURCE_ERROR (stale unified_network_cache file after LRU eviction)
2026-04-14 23:30:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
AudioServiceController
Add connectForStatus() for read-only service connection without starting playback
2026-04-14 23:30:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager.updateBarVisibility
Rework to use connectForStatus() async connect + playbackState check before showing bar
2026-04-14 23:30:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingViewModel.kt
NowPlayingViewModel.NowPlayingState
Add isLoading flag; set false after connect() completes or fails
2026-04-14 23:30:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingBottomSheetFragment.kt
NowPlayingBottomSheetFragment
Show ProgressBar while isLoading=true, hide content until MediaController connects
2026-04-14 23:30:05
app_v2/src/main/res/layout/bottom_sheet_now_playing.xml
bottom_sheet_now_playing
Add progressNowPlayingLoading ProgressBar to Panel A
2026-04-14 23:30:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
AudioServiceController
Add connectForStatus() for read-only service connection without starting playback
2026-04-14 23:30:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager.updateBarVisibility
Rework to use connectForStatus() async + playbackState check before showing mini bar
2026-04-14 23:30:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingViewModel.kt
NowPlayingViewModel.NowPlayingState
Add isLoading field; cleared after connect() resolves or fails
2026-04-14 23:30:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingBottomSheetFragment.kt
NowPlayingBottomSheetFragment
Show ProgressBar while isLoading=true, hide content views until MediaController connects
2026-04-14 23:30:23
app_v2/src/main/res/layout/bottom_sheet_now_playing.xml
bottom_sheet_now_playing
Add progressNowPlayingLoading ProgressBar to Panel A
2026-04-14 23:49:59
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Fix Yo (Ё) usage and typos in Russian UI strings: 14 fixes (Ещё, Изменён, сохранён, надёжного, Каждое, лёгкой, объёма, удалён×2, Зелёный, Удалить typo, жесты typo, Кожное typo)
2026-04-14 23:50:04
docs/*_RU.md
docs-ru
Fix Yo (Ё) usage throughout Russian docs: FEATURES_RU (26 fixes), TROUBLESHOOTING_RU (4), TERMS_OF_SERVICE_RU (5), HOW_TO_RU (3), README_RU (1), FAQ_RU (1), LIMITATIONS_RU (2)
2026-04-14 23:50:53
AGENTS.md,.github/copilot-instructions.md
ai-rules
Add Author Style section: Yo (Ё) and ellipsis (..) rules for all AI agents
2026-04-15 00:11:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Add showNowPlayingPanel field (default false)
2026-04-15 00:11:25
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Add KEY_SHOW_NOW_PLAYING_PANEL: read and write showNowPlayingPanel setting
2026-04-15 00:11:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel.PlayerState
Add showNowPlayingPanel to PlayerState; propagate from settings in loadSettings()
2026-04-15 00:11:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager
Hide mini-bar for AUDIO type (not just VIDEO) and when showPanel=false; add showPanel param to onStart/updateBarVisibility
2026-04-15 00:11:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.onResume
Pass showNowPlayingPanel from state to nowPlayingManager.onStart()
2026-04-15 00:11:25
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
Add switchShowNowPlayingPanel row inside layoutExitBehaviorSection
2026-04-15 00:11:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
AudioSettingsFragment
Add listener and observer sync for switchShowNowPlayingPanel
2026-04-15 00:11:25
app_v2/src/main/res/values/strings.xml
strings
Add show_now_playing_panel_title/summary (EN/RU/UK)
2026-04-15 00:34:41
index.html
Usage Scenarios
Add two new scenario cards: Scheduled Camera Backup to PC (SMB) and Auto-Clean Downloads (scheduler)
2026-04-15 00:34:41
index-ru.html
Usage Scenarios
Add RU translations for Camera Backup and Downloads Cleanup scenario cards
2026-04-15 00:34:41
index-uk.html
Usage Scenarios
Add UK translations for Camera Backup and Downloads Cleanup scenario cards
2026-04-15 11:54:09
PLAN/spec_improve-howto.md
spec
Add specification for HOWTO improvement - dummy-level scenario guides
2026-04-15 12:16:05
docs/howto/index.md
howto-index
Add scenarios index EN
2026-04-15 12:16:06
docs/howto/index-ru.md
howto-index-ru
Add scenarios index RU
2026-04-15 12:16:06
docs/howto/index-uk.md
howto-index-uk
Add scenarios index UK
2026-04-15 12:16:13
docs/howto/scenario-smb-setup.md
scenario-smb-setup
Add SMB setup scenario guide EN/RU/UK
2026-04-15 12:16:13
docs/howto/scenario-photo-frame.md
scenario-photo-frame
Add digital photo frame scenario guide EN/RU/UK
2026-04-15 12:16:14
docs/howto/scenario-download-organizer.md
scenario-download-organizer
Add download organizer Quick Sort scenario guide EN/RU/UK
2026-04-15 12:16:21
docs/howto/scenario-car-music.md
scenario-car-music
Add car music player scenario guide EN/RU/UK
2026-04-15 12:16:21
docs/howto/scenario-home-cinema.md
scenario-home-cinema
Add home cinema VR scenario guide EN/RU/UK
2026-04-15 12:16:21
docs/howto/scenario-camera-backup.md
scenario-camera-backup
Add scheduled camera backup scenario guide EN/RU/UK
2026-04-15 12:16:33
docs/howto/SCREENSHOTS.md
screenshots-guide
Add screenshot shooting guide for 28 how-to slots
2026-04-15 12:16:33
index.html
index
Add Scenario Guides card to User Guides section
2026-04-15 12:16:33
index-ru.html
index-ru
Add Scenario Guides card RU
2026-04-15 12:16:34
index-uk.html
index-uk
Add Scenario Guides card UK
2026-04-15 12:16:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Update in-app Help URL to point to HOW-TO scenarios index
2026-04-15 13:03:32
docs/howto/
howto guides (all 18 files)
Rewrote all 6 scenario guides + index in EN/RU/UK to ‘for dummies’ level: added WHY explanations, plain-language tech term definitions, time estimates, quick-pick navigation, USB power note, AP Isolation explanation, Microsoft account note, double-tap gesture, VR install steps
2026-04-15 13:37:33
app_v2/src/main/AndroidManifest.xml
SettingsActivity
Add parentActivityName=MainActivity to fix Back going to home screen
2026-04-15 13:37:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
Fix Back nav: isTaskRoot check + explicit MainActivity launch when stack is empty; route backButton and Escape through onBackPressedDispatcher
2026-04-15 13:39:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Fix language spinner spurious onItemSelected: set isUpdatingSpinner=true before setAdapter, release via post{}
2026-04-15 13:39:56
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Fix language default: use LocaleHelper.getLanguage() instead of hardcoded en when DataStore has no saved language
2026-04-15 14:59:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/DynamicBackgroundProcessor.kt
DynamicBackgroundProcessor
Fix letterbox bars: limit vertical lines to actual bar height (0..imgTop, imgBottom..sh) instead of half-screen; fixes wide photos in landscape showing incorrect vertical extent
2026-04-15 15:04:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/DynamicBackgroundProcessor.kt
DynamicBackgroundProcessor
Fix wrong screen dims: use backgroundView own size as fallback; caller now passes ImageView dimensions not full-screen
2026-04-15 15:04:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Fix dynamic background: pass view.width/view.height instead of currentDeviceWidth/Height to DynamicBackgroundProcessor
2026-04-15 15:43:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceFormViewModel.kt
ResourceFormViewModel
Add refreshStatistics() to reload lastBrowseDate/lastSyncDate from DB on resume
2026-04-15 15:43:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment
Call refreshStatistics() on onResume so stats update when returning from Browse
2026-04-15 16:49:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
addSmbResourceManually/addSftpFtpResource/addSftpResourceWithKey
Bug fix: add profile param to all three ViewModel methods; MediaResource now persists the Quick Setup preset selected by user
2026-04-15 16:49:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
addSmbResourceManually/addSftpResource
Bug fix: pass smbProfilePreset/sftpProfilePreset to all ViewModel calls so selected preset is saved to DB
2026-04-15 17:18:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
AudioServiceController
Added playAudioWithMetadata() to set title/artist in MediaItem so notification shows track name instead of app name
2026-04-15 17:18:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Fixed cloud/network audio playAudio->playAudioWithMetadata so notification title shows filename instead of ‘FastMediaSorter is running’
2026-04-15 17:18:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Fixed standalone audio playAudio->playAudioWithMetadata so notification shows track name
2026-04-15 17:21:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Fixed onMediaItemTransition: now handles REASON_SEEK (user NEXT/PREV from notification) and REASON_REPEAT in addition to REASON_AUTO so UI syncs correctly
2026-04-15 17:33:34
app_v2/src/main/java/com/sza/fastmediasorter/core/di/AppModule.kt
AppModule.provideOkHttpClient
Chucker: disabled notification (showNotification=false) to stop 200-spam; added Timber.e interceptor for 4xx/5xx errors only
2026-04-15 17:37:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Added pushArtworkToNotification(): updates system notification album art via replaceMediaItem(); called after embedded cover, ExoPlayer artwork, and iTunes/Glide load
2026-04-15 17:59:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Fix VIDEO_LIBRARY preset: Audio was incorrectly checked for both SMB and SFTP
2026-04-15 18:18:27
app_v2/src/main/res/values/strings.xml
strings
Add how_to_guides string (EN/RU/UK) for new How-To Guides button in Settings
2026-04-15 18:18:27
app_v2/src/main/res/layout/fragment_settings_general.xml
containerDocLinks
Add btnHowToGuides button (portrait + landscape layouts)
2026-04-15 18:18:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Wire btnHowToGuides click - opens HOW_TO.html (EN/RU/UK)
2026-04-15 18:27:47
docs/FAQ.md
FAQ
Add HOW_TO, Quick Start, Troubleshooting links to footer
2026-04-15 18:27:47
docs/FAQ_RU.md
FAQ_RU
Add HOW_TO_RU, Quick Start, Troubleshooting links to footer
2026-04-15 18:27:47
docs/FAQ_UK.md
FAQ_UK
Add HOW_TO_UK, Quick Start, Troubleshooting links to footer
2026-04-15 18:34:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetDestinationsUseCase.kt
GetDestinationsUseCase
Exclude virtual:// paths from all destination lists (copy/move dialog)
2026-04-15 18:40:24
app_v2/src/main/res/layout/item_media_file.xml
item_media_file
Double action button size: 24dp -> 48dp, padding 6dp -> 12dp
2026-04-15 18:40:30
app_v2/src/main/res/layout/item_media_file_grid_operations.xml
item_media_file_grid_operations
Double action button size: 24dp -> 48dp, padding 0dp -> 12dp
2026-04-15 22:13:10
app_v2/src/main/res/layout/item_media_file.xml
item_media_file
Fix action button size to 32dp (was 24dp), respect adapter override
2026-04-15 22:13:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter
Update runtime button size override: normal=32dp, compact=16dp (was 24/12)
2026-04-15 22:20:11
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperations.kt
SmbFileOperations.readPartialFile
Fix integer overflow when fileSize > 2GB: coerceIn on Long before toInt()
2026-04-15 22:22:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager.withConnection
Add allowRetry param: thumbnail calls skip retry/delay cycle
2026-04-15 22:22:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperations.kt
SmbFileOperations.readPartialFile,readFileBytesRange
Thread allowRetry flag through to withConnection
2026-04-15 22:22:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbClient.kt
SmbClient.readFileBytesRange
Thread allowRetry flag through to SmbFileOperations
2026-04-15 22:22:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkMediaDataSource.kt
NetworkMediaDataSource.readFromSmb
Pass allowRetry=false for thumbnail SMB reads
2026-04-15 22:24:53
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient.readFileBytesRange
Add allowRetry param: thumbnail reads skip SFTP reconnect retry
2026-04-15 22:24:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkMediaDataSource.kt
NetworkMediaDataSource.readFromSftp
Pass allowRetry=false for thumbnail SFTP reads
2026-04-15 23:06:12
app_v2/src/main/res/layout/item_media_file.xml
item_media_file
Restored text constraints to endOf parent so action buttons overlay text instead of pushing it left
2026-04-15 23:30:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortFilterManager.kt
BrowseSortFilterManager.applyFilter
Fix: applyFilter uses in-memory cache fast-path to avoid triggering SMB scan that wiped displayed files after cache hit
2026-04-15 23:37:21
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Fix SMB transient TCP timeout treated as non-retriable: CONNECTIVITY_CHECK_TIMEOUT_MS 1500->3000, removed isUnreachable from non-retriable set, added skipConnectivityCheck on retry attempt
2026-04-15 23:53:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
ListViewHolder/GridViewHolder.loadThumbnailOnly
Fixed thumbnail spam: skip in audio-only mode (GONE view); update lastLoadedKey after fast-path returns to prevent re-trigger on next scroll-stop
2026-04-15 23:54:02
app_v2/src/main/res/layout/item_media_file.xml
item_media_file layout
Moved action buttons (Favorite/Copy/Move/Rename/Delete/Play) to bottom row aligned with tvFileInfo; tvFileInfo end now anchors to btnFavorite to prevent name overlap
2026-04-16 00:16:30
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt
SmbOperationsUseCase.testConnection
Propagate original exception instead of wrapping in generic Exception - preserves SocketTimeoutException type for NetworkErrorClassifier
2026-04-16 00:16:35
app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorClassifier.kt
NetworkErrorClassifier.classify
Add recursive cause-chain traversal before fallback - fixes misclassification of wrapped exceptions (IOException wrapping SocketTimeoutException showed wrong SMB local-network error)
2026-04-16 00:48:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Added 20s withTimeout to preCacheNetworkAudio to prevent 40s hang on SMB Connection reset; re-post loading indicator on pre-cache fallback to direct streaming
2026-04-16 00:51:57
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkMediaDataSource.kt
NetworkMediaDataSource
Fix intermittent SMB/SFTP ‘Server unreachable’: changed allowRetry=false to allowRetry=true for readFileBytesRange calls (transient TCP failures now trigger one retry)
2026-04-16 00:52:00
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager.withConnection
Fix: first fresh connection attempt now uses normal timeouts; degraded client only on retry (was always degraded when allowRetry=true)
2026-04-16 01:07:21
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Increased SMBJ transaction timeout (CONNECTION_TIMEOUT_DEGRADED_MS) from 8s to 20s to prevent premature TimeoutException during paged QUERY_DIRECTORY on slow NAS; added getUserFriendlyMessage case for SMBRuntimeException(TimeoutException)
2026-04-16 01:22:47
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Replaced 2-tier (normal/degraded) SMBJ client selection with 3-tier adaptive (fast 5s/medium 10s/slow 20s) based on ConnectionThrottleManager.getSmbjClientTier()
2026-04-16 01:22:47
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
ConnectionThrottleManager
Added speedMbpsCache, setLastSpeedMbps(), SmbjClientTier enum, getSmbjClientTier() for adaptive SMBJ transaction timeout selection
2026-04-16 01:22:47
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/NetworkSpeedTestUseCase.kt
NetworkSpeedTestUseCase
Store readSpeedMbps in ConnectionThrottleManager.setLastSpeedMbps() after each speed test to enable adaptive SMBJ timeout tier selection
2026-04-16 01:22:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
ConnectionThrottleManager
Added speedMbpsCache, setLastSpeedMbps(), SmbjClientTier enum, getSmbjClientTier() for adaptive SMBJ timeout tier
2026-04-16 01:22:53
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/NetworkSpeedTestUseCase.kt
NetworkSpeedTestUseCase
Store readSpeedMbps via ConnectionThrottleManager.setLastSpeedMbps() after speed test
2026-04-16 01:27:29
app_v2/src/main/res/layout/item_media_file.xml
tvFileInfo
Buttons now overlay info text row (removed btnFavorite end constraint, use parent end) - saves vertical space
2026-04-16 01:35:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ErrorDialog.kt
ErrorDialog
show() now returns AlertDialog? to allow callers to track and dismiss the dialog
2026-04-16 01:35:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
Track activeDialog from ErrorDialog.show(); onDestroy() dismisses it to fix WindowLeaked crash
2026-04-16 01:35:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.onDestroy
Call eventHandler.onDestroy() before lifecycleManager.onDestroy() to dismiss open dialogs
2026-04-16 01:46:38
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Fix Broken pipe: evict stale pool entry before fresh connect; retry once on TransportException (SMBJ internal connection cache purge); add isTransportOrBrokenPipe() helper and invalidateExoPlayerConnection() API
2026-04-16 01:46:42
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
SmbDataSource
Fix Broken pipe: retry openFile() once after invalidating stale pooled connection (isConnected flag does not detect TCP-level silent drops); add isTransportOrBrokenPipe() helper
2026-04-16 01:56:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity.checkResourceAvailability
Widen resume availability-check timeout from 5s to 12s: cold SMB connect needs TCP(3s)+SMBJ(5s)=8s worst-case
2026-04-16 01:56:44
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbClient.kt
SmbClient.testConnection
Rethrow CancellationException (never swallow outer timeout); add kotlinx.coroutines.TimeoutCancellationException and Timed-out substring to isTimeout detection
2026-04-16 01:56:44
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager.withConnection
Rethrow CancellationException in fresh-connection retry loop before delay() to avoid false retry logs when outer timeout already fired
2026-04-16 02:15:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager.extractTextFromCurrentChapter
EPUB OCR no-text: Timber.e->d (not an error); direct Toast instead of callback.showError to bypass 15s ToastThrottler for user-initiated button press
2026-04-16 02:15:42
app_v2/src/main/res/layout-land/player_pdf_controls_overlay_content.xml
tvPdfPageIndicator
Fixed: restore page indicator visibility in landscape (was 0dp x 0dp / gone)
2026-04-16 02:15:42
app_v2/src/main/res/layout/activity_player_unified.xml
btnPdfThumbnailsCmd
Added: PDF thumbnails button to command panel (landscape mode)
2026-04-16 02:15:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
btnPdfThumbnailsCmd
Added: safe view accessor for btnPdfThumbnailsCmd
2026-04-16 02:15:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
updateCommandAvailability
Added: btnPdfThumbnailsCmd visibility for PDF in landscape mode
2026-04-16 02:15:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
setupPdfControls
Added: click listener for btnPdfThumbnailsCmd -> showThumbnailNavigation()
2026-04-16 02:45:09
docs/howto/screenshots/
screenshots
Added 29 named screenshots from store_assets + do-step1: pf-step1/2/5/6, dl-step1/3/4/5/6/7, car-step3/4/6/done, hc-step3/5, cb-step3/4/5/6, smb-step1..8
2026-04-16 02:45:15
docs/howto/*.md
howto scenario guides
Replaced 30+ [SCREENSHOT:] placeholders with actual image links across all 18 scenario MD files (EN/RU/UK)
2026-04-16 02:51:09
docs/howto/*.md
howto scenario guides
Removed all remaining [SCREENSHOT:] placeholders (pf-step3/4, car-step1/2/5, hc-step2, cb-step2/7) from 18 MD files - screenshots not essential for initial publish
2026-04-16 10:30:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Fix SMB/SFTP/FTP audio pre-cache failing due to credentials lookup mismatch; pass credentialsId from resource into preCacheNetworkAudio and download*Full methods
2026-04-16 10:39:53
app_v2/src/main/res/layout/fragment_settings_general.xml
containerDocLinks
Replace horizontal LinearLayout with ConstraintLayout+Flow for doc links - wraps to multiple lines on narrow portrait screens
2026-04-16 10:44:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter.ListViewHolder
Increase compact button size: 16dp -> 24dp (0.75x normal) - 16dp with 6dp XML padding left only ~4dp icon area
2026-04-16 10:45:21
app_v2/src/main/res/layout/item_media_file.xml
item_media_file
Change action button padding: 6dp -> 2dp for all 6 buttons (btnFavorite, btnCopyItem, btnMoveItem, btnRenameItem, btnDeleteItem, btnPlayInline)
2026-04-16 20:20:03
scripts/mcp/docs-search-mcp/package.json
docs-search-mcp
Add package manifest for local Docs Search MCP server
2026-04-16 20:20:03
scripts/mcp/docs-search-mcp/server.js
docs-search-mcp
Implement local MCP tools: docs_search, docs_list_mirrors, docs_read with EN/RU/UK awareness
2026-04-16 20:20:03
scripts/mcp/docs-search-mcp/README.md
docs-search-mcp
Add setup and usage guide for Docs Search MCP
2026-04-16 20:20:03
.vscode/mcp.json
mcp config
Register local docs-search MCP stdio server for workspace
2026-04-16 20:20:46
scripts/mcp/docs-search-mcp/package-lock.json
docs-search-mcp
Add npm lockfile for reproducible local MCP dependency install
2026-04-16 20:22:17
scripts/mcp/gradle-mcp/server.js
fastmediasorter-gradle
Add safe allowlist Gradle MCP server (fixed tool set, workspace-only cwd, timeout, output normalization/truncation, pipeline tool)
2026-04-16 20:22:17
scripts/mcp/gradle-mcp/package.json
fastmediasorter-gradle-mcp
Add Node package manifest for Gradle MCP server
2026-04-16 20:22:17
scripts/mcp/gradle-mcp/README.md
Gradle MCP docs
Add setup and VS Code mcp.json configuration for safe Gradle MCP tools
2026-04-16 20:22:18
.vscode/mcp.json
MCP config
Add filesystem RW/RO servers scoped to workspace and secure gradle_safe MCP server entry
2026-04-16 20:22:18
scripts/mcp/gradle-mcp-server.mjs
gradle-mcp-server
Add custom Gradle MCP wrapper with strict allowlist and safe gradlew execution
2026-04-16 20:22:37
scripts/mcp/docs-search-mcp/server.js
docs-search-mcp
Add MCP tool docs_diff_mirrors to compare EN/RU/UK mirrors by heading structure and missing languages
2026-04-16 20:22:37
scripts/mcp/docs-search-mcp/README.md
docs-search-mcp
Document docs_diff_mirrors tool usage and parameters
2026-04-16 20:26:54
.vscode/mcp.json
MCP config
Switch gradle_safe to scripts/mcp/gradle-mcp/server.js and add timeout/output env limits
2026-04-16 20:27:01
scripts/mcp/gradle-mcp/package-lock.json
gradle-mcp dependencies
Generate package-lock.json after npm install for deterministic dependency versions
2026-04-16 20:29:18
scripts/mcp/docs-search-mcp/server.js
docs-search-mcp
Extend docs_diff_mirrors with density mode (length/sections), mode selector and lagThreshold
2026-04-16 20:29:18
scripts/mcp/docs-search-mcp/README.md
docs-search-mcp
Document docs_diff_mirrors density mode and new parameters mode/lagThreshold
2026-04-16 20:29:59
scripts/mcp/gradle-mcp/server.js
fastmediasorter-gradle
Fix cmd.exe execution format for .bat allowlist commands (remove over-escaped quoted path)
2026-04-16 20:30:35
scripts/mcp/docs-search-mcp/server.js
docs-search-mcp
Sort docs_diff_mirrors output by density severity in mode=density so worst mirrors appear first
2026-04-16 20:30:35
scripts/mcp/docs-search-mcp/README.md
docs-search-mcp
Document that mode=density output is ordered by lag severity
2026-04-16 20:41:10
maestro/run-tests.ps1
MaestroRunner
Pruned unsupported suites; keep smoke+critical only and update valid options
2026-04-16 20:41:10
scripts/utils/run-maestro-smoke.ps1
MaestroSmokeScript
Removed stress suite from supported options and fail fast on -Stress
2026-04-16 20:41:10
maestro
MaestroTests
Removed non-easy-fixable flows; reduced active inventory to 4 smoke + 2 critical
2026-04-16 20:41:26
scripts/utils/run-maestro-smoke.ps1
MaestroSmokeScript
Updated usage comments to remove stress mode and document supported suites
2026-04-16 20:51:26
maestro/critical/file_operations.yaml
file_operations.yaml
Made critical file-operations flow resilient by removing hardcoded folder/file assumptions
2026-04-16 20:51:26
maestro/critical/settings.yaml
settings.yaml
Made settings critical flow resilient with optional navigation selectors
2026-04-16 20:52:01
maestro/critical/file_operations.yaml
file_operations.yaml
Fixed Maestro syntax by removing unsupported optional flag from back command
2026-04-16 21:05:28
temp/mcp_smoke_check_gradle.mjs
MCP smoke-check helper
Add temporary stdio MCP probe script for handshake diagnostics
2026-04-16 21:05:28
temp/mcp_smoke_check_gradle_sdk_client.mjs
MCP smoke-check helper
Add SDK-based MCP smoke-check script for gradle_assemble_debug dry-run and gradle_run_pipeline execution
2026-04-16 23:21:35
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModelTest.kt
StandalonePlayerViewModelTest
Pin Robolectric SDK to 34 via @Config to bypass targetSdk 35 picker mismatch
2026-04-17 01:10:10
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified.xml (land)
Added missing btnPdfThumbnailsCmd required by PlayerBindingSafeViews to prevent player crash on landscape devices
2026-04-17 13:54:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Added closeTextViewerFromBackPress() for single back-press exit from TXT reader
2026-04-17 13:54:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Fixed double back-button issue: back handler now calls TextViewerManager.closeTextViewerFromBackPress() for complete cleanup
2026-04-17 14:08:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Fixed: closeTextViewerFromBackPress() now skips exitFullscreenMode() - back handler calls exitPlayerWithAudioCheck() for proper navigation
2026-04-17 14:08:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Fixed: Back handler now falls through to exitPlayerWithAudioCheck() after text viewer cleanup (removes blank screen)
2026-04-17 14:28:02
app_v2/src/main/res/values/dimens.xml
resource_server_width
Expanded Server IP field width from 180dp to 184dp for better visibility
2026-04-17 14:29:45
app_v2/src/main/res/layout/activity_add_resource.xml
tilSmbServer
Added minHeight=64dp to Server IP TextInputLayout field for better height visibility
2026-04-17 15:20:31
PLAN/spec_player-filename-autohide.md
spec
Rewrite player filename auto-hide specification to repo template and align it with actual player helper architecture
2026-04-17 15:21:02
PLAN/spec_player-filename-autohide.md
spec
Cleaned duplicated legacy header from rewritten player filename auto-hide specification
2026-04-17 15:42:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Fixed filename overlay fullscreen detection to use actual top command panel visibility so audio auto-hide works
2026-04-17 15:42:09
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManagerTest.kt
FilenameOverlayAutoHideManagerTest
Replaced Kotlin assert usage with JUnit assertEquals so timeout checks fail reliably in unit tests
2026-04-17 15:42:25
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManagerTest.kt
FilenameOverlayAutoHideManagerTest
Replaced Kotlin assert usage with JUnit assertEquals so timeout checks fail reliably in unit tests
2026-04-17 15:42:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManager.kt
FilenameOverlayAutoHideManager
NEW: Handler-based overlay auto-hide manager; type-specific timeouts (TEXT=5s, PDF/EPUB=10s, others=15s); fade animation; fullscreen guard; lifecycle hooks
2026-04-17 15:42:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
Wire FilenameOverlayAutoHideManager into updatePanelVisibility; command-panel and fullscreen branches delegate to manager instead of forcing isVisible
2026-04-17 15:42:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerUiStateCoordinator.kt
PlayerUiStateCoordinator
Add Callback methods onFilenameOverlayFileShown/onFilenameOverlayPauseInteraction; track previousIsPaused delta; fire callbacks after updatePanelVisibility
2026-04-17 15:42:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerUiStateCoordinatorCallbackImpl.kt
PlayerUiStateCoordinatorCallbackImpl
Implement onFilenameOverlayFileShown and onFilenameOverlayPauseInteraction delegating to filenameOverlayManager
2026-04-17 15:42:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Construct and wire FilenameOverlayAutoHideManager; add isVisible import; wire zoom interaction lambda from ImageLoadingManager to overlay manager
2026-04-17 15:42:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerLifecycleManager.kt
PlayerLifecycleManager
Add onHostPause/onHostResume/cancel hooks for FilenameOverlayAutoHideManager in lifecycle callbacks
2026-04-17 15:42:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageLoadingManager.kt
ImageLoadingManager
Add onZoomInteraction lambda; isPhotoViewImageLoaded flag prevents load-time false positives from PhotoView scale listener; Glide listeners set flag on ready
2026-04-17 15:42:26
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManagerTest.kt
FilenameOverlayAutoHideManagerTest
NEW: 17 MockK unit tests covering timeout mapping, fullscreen guard, pause/zoom re-show, lifecycle pause/resume, and cancel
2026-04-17 15:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManager.kt
FilenameOverlayAutoHideManager
NEW: Handler-based overlay auto-hide manager; type-specific timeouts (TEXT=5s PDF/EPUB=10s others=15s); fade animation; fullscreen guard; lifecycle hooks
2026-04-17 15:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
Wire FilenameOverlayAutoHideManager into updatePanelVisibility; command-panel and fullscreen branches delegate to manager
2026-04-17 15:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerUiStateCoordinator.kt
PlayerUiStateCoordinator
Add Callback methods onFilenameOverlayFileShown/PauseInteraction; track previousIsPaused delta; fire callbacks after updatePanelVisibility
2026-04-17 15:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerUiStateCoordinatorCallbackImpl.kt
PlayerUiStateCoordinatorCallbackImpl
Implement overlay callback methods delegating to filenameOverlayManager
2026-04-17 15:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Construct FilenameOverlayAutoHideManager; add isVisible import; wire zoom interaction lambda from ImageLoadingManager
2026-04-17 15:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerLifecycleManager.kt
PlayerLifecycleManager
Add onHostPause/onHostResume/cancel hooks for FilenameOverlayAutoHideManager
2026-04-17 15:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageLoadingManager.kt
ImageLoadingManager
Add onZoomInteraction lambda; isPhotoViewImageLoaded flag prevents load-time false positives; Glide listeners set flag on ready
2026-04-17 15:42:40
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManagerTest.kt
FilenameOverlayAutoHideManagerTest
NEW: 17 MockK unit tests covering timeout mapping fullscreen guard pause/zoom re-show lifecycle and cancel
2026-04-17 15:42:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManager.kt
FilenameOverlayAutoHideManager
NEW: Handler-based overlay auto-hide manager with type-specific timeouts TEXT=5s PDF/EPUB=10s others=15s; fade animation; fullscreen guard; lifecycle hooks
2026-04-17 15:42:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManager.kt
FilenameOverlayAutoHideManager
NEW: Handler-based overlay auto-hide manager type-specific timeouts TEXT=5s PDF/EPUB=10s others=15s
2026-04-17 15:43:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
Wire FilenameOverlayAutoHideManager into updatePanelVisibility; command-panel and fullscreen branches delegate to manager
2026-04-17 15:43:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerUiStateCoordinator.kt
PlayerUiStateCoordinator
Add Callback methods onFilenameOverlayFileShown/PauseInteraction; track previousIsPaused delta; fire callbacks after updatePanelVisibility
2026-04-17 15:43:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerUiStateCoordinatorCallbackImpl.kt
PlayerUiStateCoordinatorCallbackImpl
Implement onFilenameOverlayFileShown and onFilenameOverlayPauseInteraction delegating to filenameOverlayManager
2026-04-17 15:43:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Construct FilenameOverlayAutoHideManager; add isVisible import; wire zoom lambda from ImageLoadingManager to overlay manager
2026-04-17 15:43:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerLifecycleManager.kt
PlayerLifecycleManager
Add onHostPause/onHostResume/cancel hooks for FilenameOverlayAutoHideManager in lifecycle callbacks
2026-04-17 15:43:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageLoadingManager.kt
ImageLoadingManager
Add onZoomInteraction lambda; isPhotoViewImageLoaded flag prevents load-time false positives; Glide listeners set flag on resource ready
2026-04-17 15:43:43
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManagerTest.kt
FilenameOverlayAutoHideManagerTest
NEW: 17 MockK unit tests covering timeout mapping fullscreen guard pause/zoom re-show lifecycle and cancel
2026-04-17 15:43:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerUiStateCoordinator.kt
PlayerUiStateCoordinator
Add Callback methods onFilenameOverlayFileShown/PauseInteraction; track previousIsPaused delta
2026-04-17 15:43:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerUiStateCoordinatorCallbackImpl.kt
PlayerUiStateCoordinatorCallbackImpl
Implement onFilenameOverlayFileShown and onFilenameOverlayPauseInteraction delegating to filenameOverlayManager
2026-04-17 15:43:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Construct FilenameOverlayAutoHideManager; add isVisible import; wire zoom lambda from ImageLoadingManager
2026-04-17 15:43:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerLifecycleManager.kt
PlayerLifecycleManager
Add onHostPause/onHostResume/cancel hooks for FilenameOverlayAutoHideManager
2026-04-17 15:43:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageLoadingManager.kt
ImageLoadingManager
Add onZoomInteraction lambda; isPhotoViewImageLoaded flag prevents load-time false positives from PhotoView scale listener
2026-04-17 15:43:56
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManagerTest.kt
FilenameOverlayAutoHideManagerTest
NEW: 17 MockK unit tests covering timeout mapping fullscreen guard pause/zoom re-show lifecycle and cancel
2026-04-17 15:44:03
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManagerTest.kt
FilenameOverlayAutoHideManagerTest
Replaced timeout asserts with JUnit assertEquals in the committed test file and revalidated the focused overlay test suite
2026-04-17 16:57:24
docs/FEATURES_RU.md
FEATURES_RU.md
Synced with EN rewrite: advantage-focused, removed obvious items, trimmed competitor tables
2026-04-17 16:57:24
docs/FEATURES_UK.md
FEATURES_UK.md
Synced with EN rewrite: advantage-focused, removed obvious items, trimmed competitor tables
2026-04-17 17:08:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt
PlayerObserverManager
Included isPaused in the UI observation key so pause/resume triggers updateUI and filename overlay re-show logic
2026-04-17 17:47:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Synced ViewModel pause state from AudioPlaybackService playWhenReady so audio filename overlay reappears after pause
2026-04-17 18:05:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ExoPlayerControlsManager.kt
ExoPlayerControlsManager
Replaced bottom speed/audio/subtitle quick actions with unified Control entry point
2026-04-17 18:05:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Added tabbed video Control dialog with volume audio subtitles hue brightness and speed
2026-04-17 18:05:44
app_v2/src/main/res/layout/custom_player_controls.xml
custom_player_controls.xml
Inserted Control button after Next track and removed standalone speed audio subtitle buttons
2026-04-17 18:05:44
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified layouts
Added video color overlay support for Control dialog hue presets
2026-04-17 18:05:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
Added unified video Control dialog launcher with video-only guard
2026-04-17 18:05:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Rewired ExoPlayer bottom control callback to unified Control dialog
2026-04-17 18:05:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Restricted bottom Control button visibility to video files
2026-04-17 18:05:58
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified.xml land
Added video color overlay support for Control dialog hue presets
2026-04-17 18:05:58
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control.xml
Added tabbed dialog layout for video Control pages
2026-04-17 18:05:58
app_v2/src/main/res/values/strings.xml
strings.xml
Added Control dialog tab and slider labels
2026-04-17 18:06:22
app_v2/src/main/res/values-ru/strings.xml
strings.xml ru
Added Russian labels for video Control dialog tabs and sliders
2026-04-17 18:06:22
app_v2/src/main/res/values-uk/strings.xml
strings.xml uk
Added Ukrainian labels for video Control dialog tabs and sliders
2026-04-17 18:08:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneVideoControlsManager.kt
StandaloneVideoControlsManager
Moved standalone speed audio subtitle actions behind the new Control button menu
2026-04-17 18:08:38
docs/FEATURES.md
FEATURES.md
Added tabbed video Control dialog entry to video player feature inventory
2026-04-17 18:08:38
docs/FEATURES_RU.md
FEATURES_RU.md
Added Russian entry for the tabbed video Control dialog
2026-04-17 18:08:39
docs/FEATURES_UK.md
FEATURES_UK.md
Added Ukrainian entry for the tabbed video Control dialog
2026-04-17 18:12:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Routed video command-panel Edit action to the unified Control dialog
2026-04-17 18:12:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
PlayerKeyboardCallbackImpl
Routed video keyboard Edit action to the unified Control dialog
2026-04-17 18:13:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Fix mute toggle: now updates volume label and button text on click; set seekSpeed.max programmatically from speedSteps.size
2026-04-17 18:17:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlPreferences.kt
PlaybackControlPreferences
Centralized shared preference keys for the video Control dialog
2026-04-17 18:17:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoColorProcessor.kt
VideoColorProcessor
Added Media3-based HUE effect processor for video color adjustments
2026-04-17 18:17:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Composed stereo and HUE Media3 effects and persisted hue across player recreation
2026-04-17 18:17:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Replaced HUE presets with a precise degree slider backed by Media3 video effects
2026-04-17 18:17:35
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control.xml
Changed HUE tab UI from preset radios to a degree slider
2026-04-17 18:17:43
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified.xml
Removed obsolete HUE overlay view after switching to Media3 color processing
2026-04-17 18:17:43
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified.xml land
Removed obsolete HUE overlay view after switching to Media3 color processing
2026-04-17 18:17:44
app_v2/src/main/res/values/strings.xml
strings.xml
Replaced HUE preset labels with a degree-based HUE value label
2026-04-17 18:17:44
app_v2/src/main/res/values-ru/strings.xml
strings.xml ru
Replaced HUE preset labels with a degree-based HUE value label
2026-04-17 18:17:44
app_v2/src/main/res/values-uk/strings.xml
strings.xml uk
Replaced HUE preset labels with a degree-based HUE value label
2026-04-17 18:28:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoColorProcessor.kt
VideoColorProcessor
Added Media3 brightness effect support so hue and brightness share one GPU video pipeline
2026-04-17 18:28:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Persisted and composed Media3 brightness with stereo and HUE effects in the unified video effect chain
2026-04-17 18:28:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Moved brightness control to Media3 effect state and added reset actions for HUE brightness and speed
2026-04-17 18:28:26
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control.xml
Added reset buttons for HUE brightness and speed inside the Control dialog
2026-04-17 18:28:26
app_v2/src/main/res/values/strings.xml
strings.xml
Changed Control dialog brightness label to signed offset format for neutral-centered Media3 brightness
2026-04-17 18:28:27
app_v2/src/main/res/values-ru/strings.xml
strings.xml ru
Changed Control dialog brightness label to signed offset format for neutral-centered Media3 brightness
2026-04-17 18:28:27
app_v2/src/main/res/values-uk/strings.xml
strings.xml uk
Changed Control dialog brightness label to signed offset format for neutral-centered Media3 brightness
2026-04-17 18:32:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Exposed shared brightness progress API so gestures and Control dialog use the same Media3 brightness state
2026-04-17 18:32:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Switched Control dialog brightness handling to VideoPlayerManager shared Media3 brightness progress API
2026-04-17 18:32:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoTouchDelegate.kt
VideoTouchDelegate
Moved gesture brightness control to VideoPlayerManager so gestures and dialog share the same Media3 brightness model
2026-04-17 18:40:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Added standalone HUE and brightness Media3 effect state so standalone video matches the main Control dialog pipeline
2026-04-17 18:40:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneVideoControlsManager.kt
StandaloneVideoControlsManager
Replaced standalone popup control menu with the unified Control dialog entry point
2026-04-17 18:40:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wired standalone video controls and gestures to the unified Control dialog and shared Media3 color state
2026-04-17 18:40:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlaybackControlDialogFragment.kt
StandalonePlaybackControlDialogFragment
Added standalone tabbed video Control dialog with volume audio subtitles HUE brightness speed and reset actions
2026-04-17 18:40:33
docs/FEATURES.md
FEATURES.md
Updated video Control dialog feature entry to include standalone parity and GPU color controls
2026-04-17 18:40:33
docs/FEATURES_RU.md
FEATURES_RU.md
Updated video Control dialog feature entry to include standalone parity and GPU color controls
2026-04-17 18:40:34
docs/FEATURES_UK.md
FEATURES_UK.md
Updated video Control dialog feature entry to include standalone parity and GPU color controls
2026-04-17 21:20:41
PLAN/spec_adaptive-playback-strategy.md
spec_adaptive-playback-strategy
Expanded spec with detailed 9-step developer implementation plan for Phase 1 MVP
2026-04-17 22:39:40
app_v2/src/main/res/drawable/ic_search.xml
ic_search
NEW: Custom VectorDrawable replacing @android:drawable/ic_menu_search
2026-04-17 22:39:44
app_v2/src/main/res/drawable/
ic_skip_next,ic_skip_previous,ic_fast_forward,ic_fast_rewind,ic_info,ic_add,ic_toc,ic_error_outline,ic_lock
NEW: 9 VectorDrawable icons replacing @android:drawable/ic_media_* and ic_menu_* system drawables
2026-04-17 22:39:52
app_v2/src/main/res/layout/
20+ layout XML files
Replaced all @android:drawable/ system icon references with custom VectorDrawable icons (ic_menu_, ic_media_ , arrow_, stat_ )
2026-04-17 22:39:52
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
Replaced all system drawables in player overflow menu with custom VectorDrawables
2026-04-17 22:39:52
app_v2/src/main/res/menu/resource_item_actions.xml
resource_item_actions
Replaced all system drawables in resource actions menu with custom VectorDrawables
2026-04-17 22:39:52
dev/design_button_system_spec.md
design_button_system_spec
NEW: Technical design specification for designer - button icon system (groups, sizes, formats, acceptance criteria)
2026-04-17 22:39:52
temp/button_audit_2026-04-17.md
button_audit
NEW: Complete button asset inventory - 110+ icons catalogued by group with tint system
2026-04-17 22:39:59
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
Replaced all system drawables in player overflow menu with custom VectorDrawables
2026-04-17 22:40:04
app_v2/src/main/res/menu/resource_item_actions.xml
resource_item_actions
Replaced all system drawables in resource actions menu with custom VectorDrawables
2026-04-17 22:40:04
dev/design_button_system_spec.md
design_button_system_spec
NEW: Technical design specification for designer - button icon system
2026-04-17 22:40:04
temp/button_audit_2026-04-17.md
button_audit
NEW: Complete button asset inventory - 110+ icons catalogued by group with tint system
2026-04-17 22:40:13
dev/design_button_system_spec.md
design_button_system_spec
NEW: Technical design specification for designer – button icon system (groups, sizes, formats, acceptance criteria)
2026-04-17 22:40:13
temp/button_audit_2026-04-17.md
button_audit
NEW: Complete button asset inventory – 110+ icons catalogued by group with tint system
2026-04-17 22:40:13
PLAN/fix-graphical-elements.md
fix-graphical-elements
Phase 1+4 complete: 10 new VectorDrawables created, all @android:drawable/ic_menu_* button usages replaced, inventory and design spec produced
2026-04-17 22:46:26
PLAN/DESIGN/
designer_package
NEW: Created designer handoff package - README, button_audit, design_button_system_spec
2026-04-17 22:58:44
app_v2/src/main/res/drawable/
ic_search,ic_skip_next,ic_skip_previous,ic_fast_forward,ic_fast_rewind,ic_info,ic_toc,ic_error_outline,ic_lock
Updated pathData in 9 placeholder icons with designer-provided vectors
2026-04-17 23:02:19
PLAN/DESIGN/
Icons
Created 10 MD3 SVG icons
2026-04-17 23:16:59
app_v2/src/main/res/drawable/
ic_search..ic_lock (10 files)
Integrated designer SVG paths into all 10 VectorDrawable icons; ic_search now uses arc commands, ic_toc redesigned with left dots
2026-04-17 23:26:17
PLAN/DESIGN/
Icons
Created 42 MD3 SVG icons
2026-04-17 23:38:11
app_v2/src/main/res/drawable/
ic_*.xml (21 files)
Integrated 42 designer SVGs into VectorDrawable XMLs: updated pathData for arrows, move, undo, redo, view_grid, pip, check_circle, refresh, zoom_in/out, select/deselect_all, rename, repeat_one, edit_20, resource icons
2026-04-17 23:39:57
PLAN/fix-graphical-elements.md
fix-graphical-elements spec
Updated status to Phase 5 (Testing), marked designer assets delivery criterion complete
2026-04-17 23:42:46
app_v2/src/main/res/layout/
9 XML files
Removed UTF-8 BOM from activity_player_unified, activity_browse, dialog_folder_browser, dialog_scrollable_text, item_media_file_grid_operations, item_media_file, item_resource - caused NullPointerException in Android DataBinding XML parser
2026-04-18 00:29:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Fixed OU false-positive: removed OU from AR heuristic (range 0.50-0.65 was catching portrait 9:16 video). OU now detected only via Matroska metadata.
2026-04-18 00:29:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Added effectsPipelineActive guard in applyConfiguredVideoEffects() to avoid redundant setVideoEffects(emptyList()) calls that reset GPU pipeline and cause black screen on pause.
2026-04-18 00:38:41
app_v2/src/main/res/values/strings.xml, values-ru/strings.xml, values-uk/strings.xml
playback_control_hue_value, playback_control_brightness_value
Fixed UnknownFormatConversionException crash: changed %+1 to %1$+d - argument index must precede flags in Java String.format
2026-04-18 00:40:42
app_v2/src/main/res/drawable/ic_view_grid.xml
ic_view_grid
Changed from filled squares to hollow (outlined) squares with fillType=evenOdd to visually distinguish from ic_select_all (which also uses filled squares + checkmark)
2026-04-18 00:48:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Made Control dialog media-aware so audio shows only volume and speed while video keeps full tabs
2026-04-18 00:48:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
Allowed unified Control dialog for both video and audio playback types
2026-04-18 00:48:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Routed audio Edit action to the unified Control dialog instead of legacy player settings
2026-04-18 00:48:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
PlayerKeyboardCallbackImpl
Routed keyboard audio Edit action to the unified Control dialog instead of legacy player settings
2026-04-18 00:48:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ExoPlayerControlsManager.kt
ExoPlayerControlsManager
Kept bottom Control button visible for both audio and video playback
2026-04-18 00:48:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Updated Control button visibility logic to support audio playback as well as video
2026-04-18 00:48:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Refreshes bottom Control button when service-backed audio player binds to PlayerView
2026-04-18 00:52:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Added active playback speed API so standalone Control can drive audio and video through the current player.
2026-04-18 00:52:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wired standalone Control for audio and video, and guarded the dialog to open only for supported media types.
2026-04-18 00:52:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlaybackControlDialogFragment.kt
StandalonePlaybackControlDialogFragment
Made standalone Control dialog media-aware so audio shows only volume and speed while video keeps full tabs.
2026-04-18 00:54:27
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Added explicit Done button so Control dialog has a visible close action while settings still apply live.
2026-04-18 00:54:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Wired explicit Done button to dismiss the Control dialog after live-applied changes.
2026-04-18 00:54:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlaybackControlDialogFragment.kt
StandalonePlaybackControlDialogFragment
Wired explicit Done button to dismiss the standalone Control dialog after live-applied changes.
2026-04-18 00:54:28
app_v2/src/main/res/values/strings.xml
strings
Added playback_control_done label for explicit Control dialog close action.
2026-04-18 00:54:28
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Added playback_control_done label for explicit Control dialog close action.
2026-04-18 00:54:29
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Added playback_control_done label for explicit Control dialog close action.
2026-04-18 00:58:14
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Changed Control tabs from scrollable to fixed fill so all tabs can stay visible on phone-width screens.
2026-04-18 00:58:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Enabled two-line fixed tab labels so all main player Control tabs fit on narrow phones.
2026-04-18 00:58:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlaybackControlDialogFragment.kt
StandalonePlaybackControlDialogFragment
Enabled two-line fixed tab labels so all standalone Control tabs fit on narrow phones.
2026-04-18 01:11:15
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Replaced cramped top tabs with a left-side vertical section selector and added a dedicated 3D video section to the shared Control dialog layout.
2026-04-18 01:11:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Switched Control navigation from top tabs to a vertical left-side selector and restored live 3D stereo controls for video playback.
2026-04-18 01:11:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlaybackControlDialogFragment.kt
StandalonePlaybackControlDialogFragment
Switched standalone Control navigation from top tabs to a vertical left-side selector while keeping audio/video section filtering.
2026-04-18 01:27:30
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Moved DONE button to top-right of title row; wrapped all 4 SeekBars in FrameLayout(200dp)+rotation=-90 for vertical sliders
2026-04-18 01:27:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Added preventScrollIntercept() ext on all 4 rotated seekbars to block ScrollView gesture steal
2026-04-18 01:27:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlaybackControlDialogFragment.kt
StandalonePlaybackControlDialogFragment
Same preventScrollIntercept() wiring for 4 rotated seekbars
2026-04-18 01:27:30
app_v2/src/main/res/values/strings.xml
strings
Renamed section tab labels: Brightness->Light, Subtitles->Subs, 3D Video->3D (all 3 locales)
2026-04-18 01:34:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VerticalSeekBar.kt
VerticalSeekBar
NEW: custom SeekBar subclass with onMeasure/onDraw/onTouchEvent overrides for true vertical orientation; replaces View.rotation approach which broke touch interaction
2026-04-18 01:34:47
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Replaced FrameLayout+SeekBar(rotation=-90) with VerticalSeekBar for all 4 sliders
2026-04-18 01:34:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Removed preventScrollIntercept() (now handled inside VerticalSeekBar.onTouchEvent)
2026-04-18 01:34:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlaybackControlDialogFragment.kt
StandalonePlaybackControlDialogFragment
Same: removed preventScrollIntercept(), using VerticalSeekBar
2026-04-18 01:39:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlPreferences.kt
PlaybackControlPreferences
Added KEY_SPEED constant for persisting Control-dialog playback speed across video changes
2026-04-18 01:39:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Fixed speed reset on video change: setPlaybackSpeed() now persists to prefs; applyPlayerSettings() restores saved speed instead of always applying default 1.0x
2026-04-18 02:01:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoVideoProcessor.kt
StereoVideoProcessor
Implemented actual Crop effects for SBS (left-eye crop -1..0) and OU (top-eye crop 0..1) instead of null pass-through; updated class doc
2026-04-18 02:01:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Added flush seekTo(currentPosition) after setVideoEffects() in applyConfiguredVideoEffects() to force Media3 1.2.x to apply HUE/Brightness/stereo changes on already-playing video
2026-04-18 02:01:21
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoVideoProcessorTest.kt
StereoVideoProcessorTest
Updated GL effect tests: SBS_FULL/SBS_HALF/OU now assert non-null Crop instance; added assertNotNull import
2026-04-18 02:17:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Fixed TexturePool crash on HUE/Brightness change: debounced applyConfiguredVideoEffects() with 80ms handler, coalescing rapid slider calls into a single setVideoEffects() to avoid Media3 1.2.x GL pipeline race
2026-04-18 02:39:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Hidden STEREO tab from activeSections (placeholder Crop effects replaced with OpenXR spec)
2026-04-18 02:39:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
Added one-shot Toast on 3D auto-detection (SBS/OU) suggesting File info -> Open with; resets on each new file via onBeforeVideoLoad
2026-04-18 02:39:35
app_v2/src/main/res/values/strings.xml
player_3d_detected_toast
Added player_3d_detected_toast string in EN/RU/UK for 3D detection toast
2026-04-18 02:42:25
dev/spec_openxr_3d_player.md
spec_openxr_3d_player
Added OpenXR 3D player specification: architecture, JNI layer, UV mapping, device support, implementation phases
2026-04-18 03:05:45
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Full research update: SDK 1.1.58, Android XR manifest requirements, PICO standard loader note, composition layers (cylinder/equirect2), 16KB page size, sources table
2026-04-18 03:26:57
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Added comparison table: LibVLC in-app playback vs OpenXR VR strategy
2026-04-18 03:31:37
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Fixed markdown table separator style in newly added comparison section
2026-04-18 03:47:18
app_v2/src/main/res/values/strings.xml
strings.xml
Added missing player_3d_detected_toast resource for release build
2026-04-18 03:47:20
app_v2/src/main/res/values-ru/strings.xml
strings.xml
Added Russian player_3d_detected_toast resource for release build
2026-04-18 03:47:22
app_v2/src/main/res/values-uk/strings.xml
strings.xml
Added Ukrainian player_3d_detected_toast resource for release build
2026-04-18 03:48:35
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Updated spec for separate VR flavor, standard-to-VR recommendation flow, and phone fallback message in VR flavor
2026-04-18 03:48:44
app_v2/src/main/res/values/strings.xml
strings.xml
Removed duplicate player_3d_detected_toast entry and kept canonical resource
2026-04-18 03:48:46
app_v2/src/main/res/values-ru/strings.xml
strings.xml
Removed duplicate Russian player_3d_detected_toast entry and kept canonical resource
2026-04-18 03:48:47
app_v2/src/main/res/values-uk/strings.xml
strings.xml
Removed duplicate Ukrainian player_3d_detected_toast entry and kept canonical resource
2026-04-18 03:53:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VerticalSeekBar.kt
VerticalSeekBar
Added auto-orientation detection: vertical in portrait, standard horizontal in landscape (checks Configuration.ORIENTATION_LANDSCAPE at construction)
2026-04-18 03:53:30
app_v2/src/main/res/layout-land/dialog_playback_control.xml
dialog_playback_control (land)
NEW: landscape layout with horizontal RadioGroup nav at top + horizontal VerticalSeekBar sliders; all IDs match portrait layout for shared ViewBinding
2026-04-18 03:54:35
app_v2/src/main/res/values/strings.xml
player_3d_detected_toast
Added missing 3D detection toast string for player callback build fix
2026-04-18 03:54:35
app_v2/src/main/res/values-ru/strings.xml
player_3d_detected_toast
Added Russian translation for missing 3D detection toast string
2026-04-18 03:54:35
app_v2/src/main/res/values-uk/strings.xml
player_3d_detected_toast
Added Ukrainian translation for missing 3D detection toast string
2026-04-18 03:57:26
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Restructured spec into flavor/library/UI phases and documented why VR should use a separate activity instead of reusing PlayerActivity
2026-04-18 03:58:34
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Fixed malformed dependency section in VR spec and made rendering flow backend-agnostic via VrPlaybackEngine surface
2026-04-18 04:03:19
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Added shared contracts, flavor/publication matrix, and backend ADR criteria for VR specification
2026-04-18 04:11:17
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Rewrote VR/OpenXR spec into final implementation-grade structure with scope, architecture, ADRs, testing and implementation plan
2026-04-18 04:12:13
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Fixed markdown spacing and finalized implementation-grade VR/OpenXR specification formatting
2026-04-18 13:28:03
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Clarified 5 architectural gaps: vr=product flavor (not separate module), VrPlaybackEngine.prepare(surface) bootstrap order, Meta Horizon Store manifest, ADR-2 backend gate criteria (LibVLC arm64 pre-build), VrControlOverlayManager controller ray-cast input
2026-04-18 13:33:44
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Added dual-store distribution: Meta Horizon Store + Google Play (Android XR). Union Manifest strategy (required=false on all XR features). New section 3.3 Distribution Matrix. Updated manifest budget 60→80 lines, risk table, ADR-3, impl step 3.
2026-04-18 13:45:52
PLAN/tasks/
tasks/
Created 6 tactical phase files: 00_OVERVIEW (dashboard), 01_foundation, 02_shared_contracts, 03_standard_cta, 04_vr_engine, 05_quality_release. Updated spec Section 13 with phase table + links.
2026-04-18 14:14:16
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Major spec update: stereo image viewing (SBS/OU photos) promoted to primary use-case; VrOpenXrRenderManager gets renderImage() path; VrStereoRenderer covers both video+image; 3DVR dialog covers both types; Goals updated; 16 manual test cases; feature descriptions updated EN/RU/UK; removed from Out of Scope; Wear OS excluded from vr APK; branding section added; build scripts + docs sections added
2026-04-18 14:36:52
PLAN/take_a_snapshot.md
spec
Expanded snapshot-saving feature specification
2026-04-18 14:36:54
dev/take_a_snapshot_task_definition_ru.md
task-definition
Added Russian task definition for video snapshot feature
2026-04-18 14:36:55
temp/take_a_snapshot_research.md
research
Added research notes for video snapshot feature
2026-04-18 14:40:15
PLAN/take_a_snapshot.md
spec
Fixed spec: restored sections 10.3+11, added flavor scope, remote video Snackbar behavior, unit test criteria
2026-04-18 14:43:09
PLAN/take_a_snapshot.md
spec
Reworked frame capture: PixelCopy from PlayerView surface (any source), removed local-only restriction, added DRM/background risks
2026-04-18 14:50:22
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Added Section 5.9: stereoscopic screenshot - captureStereoSnapshot() in VrOpenXrRenderManager, VrStereoSnapshotManager, integration with SaveVideoFrameUseCase pipeline from take_a_snapshot.md
2026-04-18 14:58:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Added videoSnapshotResourceId: Long? field for Save Frame destination
2026-04-18 14:58:24
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Added KEY_VIDEO_SNAPSHOT_RESOURCE_ID DataStore key, read and write for videoSnapshotResourceId
2026-04-18 14:58:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt
SaveVideoFrameManager
NEW: TextureView.getBitmap() frame capture, PNG save to local destination resource or Downloads fallback
2026-04-18 14:58:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Added SAVE_FRAME(610) enum entry and VIDEO-only buildActiveCommands entry
2026-04-18 14:58:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Added onSaveFrameClicked() to CommandPanelCallback interface and routing in showOverflowMenu
2026-04-18 14:58:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Implemented onSaveFrameClicked() delegating to activity.saveVideoFrameManager
2026-04-18 14:58:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Added snapshot resource picker UI, observeData snapshot section, help icon
2026-04-18 14:58:36
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Added snapshot destination resource selector block with help icon
2026-04-18 14:58:36
app_v2/src/main/res/drawable/ic_save_frame.xml
ic_save_frame
NEW: camera vector drawable for Save Frame command
2026-04-18 14:58:36
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
Added menu_save_frame item
2026-04-18 14:58:36
app_v2/src/main/res/values/strings.xml
strings
Added Save Frame strings: menu_save_frame, video_snapshot_resource_, save_frame_ , tooltip_video_snapshot_*
2026-04-18 14:58:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt
SaveVideoFrameManager
NEW: TextureView frame capture + PNG save to local destination resource or Downloads
2026-04-18 14:58:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/DestinationPickerDialog.kt
DestinationPickerDialog
NEW: destination-only resource picker dialog (reuses dialog_resource_picker layout)
2026-04-18 14:58:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Added SAVE_FRAME(610) VIDEO-only overflow command
2026-04-18 14:58:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Added onSaveFrameClicked() to interface + overflow menu routing
2026-04-18 14:58:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Implemented onSaveFrameClicked() via saveVideoFrameManager
2026-04-18 14:58:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Added snapshot resource picker + observeData snapshot section
2026-04-18 14:58:57
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Added Save Frame destination resource selector UI block
2026-04-18 14:58:57
app_v2/src/main/res/values/strings.xml
strings.xml
Added Save Frame EN strings
2026-04-18 14:58:57
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
Added Save Frame RU strings
2026-04-18 14:58:57
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml
Added Save Frame UK strings
2026-04-18 14:58:58
app_v2/src/main/res/drawable/ic_save_frame.xml
ic_save_frame
NEW: camera vector drawable for Save Frame command
2026-04-18 14:58:58
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
Added menu_save_frame item
2026-04-18 15:04:08
PLAN/spec_openxr_3d_player.md
spec_openxr_3d_player
Added Section 7a: full inventory of player commands and operations for VR - inherited (bar/overflow/nav), excluded by type, and 2 VR-specific overrides (Fullscreen, Save Frame)
2026-04-18 15:09:46
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Added videoSnapshotFormat: String = PNG field (Save Frame format setting)
2026-04-18 15:09:57
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Added KEY_VIDEO_SNAPSHOT_FORMAT, read/write videoSnapshotFormat (PNG/JPG)
2026-04-18 15:09:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
Added videoSnapshotFormat: String = PNG
2026-04-18 15:09:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Map videoSnapshotFormat in toBackupSettings and toAppSettings
2026-04-18 15:09:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt
ExportSettingsUseCase
Export videoSnapshotFormat to XML
2026-04-18 15:09:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Import videoSnapshotFormat from XML backup
2026-04-18 15:09:57
app_v2/src/main/res/values/strings.xml
strings EN
Added snapshot_format_label/png/jpg strings
2026-04-18 15:09:57
app_v2/src/main/res/values-ru/strings.xml
strings RU
Added snapshot_format_label/png/jpg strings
2026-04-18 15:09:57
app_v2/src/main/res/values-uk/strings.xml
strings UK
Added snapshot_format_label/png/jpg strings
2026-04-18 15:09:57
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Added RadioGroup PNG/JPG format selector inside snapshot section
2026-04-18 15:09:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Wire rgSnapshotFormat RadioGroup: listener + observeData check state
2026-04-18 15:09:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt
SaveVideoFrameManager
Format-aware capture (PNG/JPG 85%), video-position filename, overwrite existing
2026-04-18 15:10:06
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Added KEY_VIDEO_SNAPSHOT_FORMAT, read/write videoSnapshotFormat PNG/JPG
2026-04-18 15:10:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
Added videoSnapshotFormat: String = PNG
2026-04-18 15:10:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Map videoSnapshotFormat in toBackupSettings and toAppSettings
2026-04-18 15:10:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt
ExportSettingsUseCase
Export videoSnapshotFormat to XML backup
2026-04-18 15:10:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Import videoSnapshotFormat from XML backup
2026-04-18 15:10:15
app_v2/src/main/res/values/strings.xml
strings EN/RU/UK
Added snapshot_format_label, snapshot_format_png, snapshot_format_jpg strings
2026-04-18 15:10:15
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Added RadioGroup PNG/JPG format selector inside snapshot section
2026-04-18 15:10:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Wire rgSnapshotFormat RadioGroup: listener and observeData check state
2026-04-18 15:10:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt
SaveVideoFrameManager
Format-aware capture PNG/JPG 85%, video-position filename, overwrite existing files
2026-04-18 15:12:40
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Normalized videoSnapshotFormat read/write to JPG or PNG only
2026-04-18 15:12:40
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Normalize imported videoSnapshotFormat to JPG or PNG default
2026-04-18 15:12:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
SettingsViewModel
Reset video snapshot destination and format in resetMediaSection
2026-04-18 15:12:40
app_v2/src/main/res/values/strings.xml
strings EN
Removed duplicated Save Frame block and updated tooltip for PNG/JPG format
2026-04-18 15:12:40
app_v2/src/main/res/values-ru/strings.xml
strings RU
Updated Save Frame tooltip for PNG/JPG format
2026-04-18 15:12:40
app_v2/src/main/res/values-uk/strings.xml
strings UK
Updated Save Frame tooltip for PNG/JPG format
2026-04-18 15:21:48
app_v2/src/main/res/values/strings.xml
strings EN
Removed duplicate no_destinations_available and unified destination-resource wording
2026-04-18 15:21:49
app_v2/src/main/res/values-ru/strings.xml
strings RU
Removed duplicate no_destinations_available and unified destination-resource wording
2026-04-18 15:21:49
app_v2/src/main/res/values-uk/strings.xml
strings UK
Removed duplicate no_destinations_available and unified destination-resource wording
2026-04-18 15:22:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt
SaveVideoFrameManager
Added missing androidx.lifecycle.lifecycleScope import for build fix
2026-04-18 15:40:37
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
SmbDataSource
Fix: SMBRuntimeException(got interrupted) from SMBJ SequenceWindow now correctly treated as normal player-close interruption, not error
2026-04-18 15:47:07
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
Fixed 5 toggler desc TextViews: text_size_small (14sp) -> toggler_desc_text_size (12sp) to enforce -2sp rule
2026-04-18 15:47:07
app_v2/src/main/res/layout/fragment_settings_images.xml
fragment_settings_images
Fixed 6 toggler desc TextViews: text_size_small (14sp) -> toggler_desc_text_size (12sp) to enforce -2sp rule
2026-04-18 15:47:07
app_v2/src/main/res/layout/fragment_settings_documents.xml
fragment_settings_documents
Fixed 2 toggler desc TextViews: text_size_small (14sp) -> toggler_desc_text_size (12sp) to enforce -2sp rule
2026-04-18 15:47:07
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Fixed 2 toggler desc TextViews: text_size_small (14sp) -> toggler_desc_text_size (12sp) to enforce -2sp rule
2026-04-18 15:49:49
docs/ARCHITECTURE.md
ARCHITECTURE.md
Added UI Patterns: Trigger Row section (Pattern A switch, Pattern B checkbox) with dimen reference table
2026-04-18 15:49:49
.github/copilot-instructions.md
copilot-instructions
Added UI_TRIGGER_ROW strict constraint enforcing canonical trigger row patterns app-wide
2026-04-18 15:54:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Made Save Frame a low-priority bar-capable video command instead of overflow-only
2026-04-18 15:54:17
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Added btnSaveFrameCmd to player command bar center group
2026-04-18 15:54:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
PlayerBindingSafeViews
Added safe binding accessor for btnSaveFrameCmd
2026-04-18 15:54:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Wired Save Frame command bar button and enabled it for video in portrait and landscape
2026-04-18 16:00:24
.github/copilot-instructions.md
copilot-instructions
Added mandatory UI ambiguity gate and /ui-clarify trigger before implementation
2026-04-18 16:00:24
CLAUDE.md
CLAUDE.md
Added mandatory UI ambiguity gate and /ui-clarify trigger before implementation
2026-04-18 16:00:24
AGENTS.md
AGENTS.md
Added UI ambiguity gate to prevent implementation before UI decisions are resolved
2026-04-18 16:00:24
dev/AGENT_WORKFLOW.md
AGENT_WORKFLOW
Added UI/UX clarification gate and required decision table before implementation
2026-04-18 16:00:24
.github/prompts/ui-clarify.prompt.md
ui-clarify prompt
Added mandatory prompt to enumerate and block unresolved UI ambiguities
2026-04-18 16:10:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseLoadingAuxManager
Clear lastBrowseDate when cloud auth fails to prevent orphaned resources from auto-reopening on next startup
2026-04-18 16:11:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper.showCloudAuthenticationDialog
Fix provider name in message (not always Google); replace Copy Error button with Remove Resource
2026-04-18 16:11:00
app_v2/src/main/res/values/strings.xml
strings.xml
Add remove_resource string; fix cloud_auth_dialog_message to accept provider name as second arg
2026-04-18 16:14:59
app_v2/src/main/res/layout-land/activity_player_unified.xml
btnSaveFrameCmd
Add missing btnSaveFrameCmd to landscape layout - caused crash on PlayerActivity startup (Required view not found)
2026-04-18 17:23:43
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified (landscape)
Add missing miniNowPlayingBar include - fix NowPlayingManager getting null miniBar on landscape orientation
2026-04-18 17:32:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.setupViews
Fix uninterpolated Timber log string: \ -> interpolated
2026-04-18 17:37:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/DestinationPickerDialog.kt
DestinationPickerDialog
Added localOnly param: filters to ResourceType.LOCAL only, for snapshot destination picker
2026-04-18 17:37:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment.setupSnapshotResourcePicker
Pass localOnly=true to DestinationPickerDialog to hide network/cloud resources
2026-04-18 17:46:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt
SaveVideoFrameManager
Universal frame save via FileOperationUseCase: supports all resource types (Local/SMB/SFTP/FTP/Cloud)
2026-04-18 17:46:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Inject fileOperationUseCase for SaveVideoFrameManager
2026-04-18 17:46:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Pass fileOperationUseCase to SaveVideoFrameManager constructor
2026-04-18 17:46:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/DestinationPickerDialog.kt
DestinationPickerDialog
Reverted localOnly filter: all resource types now supported for frame save
2026-04-18 17:46:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Removed localOnly=true: all destination types now selectable for snapshot
2026-04-18 17:59:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Changed default videoSnapshotFormat from PNG to JPG
2026-04-18 17:59:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
Changed default videoSnapshotFormat from PNG to JPG
2026-04-18 17:59:20
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Changed videoSnapshotFormat fallback from PNG to JPG, accept both valid values
2026-04-18 18:08:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileInfoDialog.kt
FileInfoDialog
Fix: duration 0:00 for SMB video - update tvVideoDuration/tvAudioDuration from async DetailedMediaInfo; add aspect ratio, audio channels/bitrate to video section
2026-04-18 18:08:19
app_v2/src/main/res/layout/dialog_file_info.xml
dialog_file_info
Add tvVideoAspectRatio, tvVideoAudioChannels, tvVideoAudioBitrate views to video metadata section
2026-04-18 18:08:19
app_v2/src/main/res/values/strings.xml
strings
Add video_aspect_ratio_label, video_audio_channels_label, video_audio_bitrate_label, audio_channels_mono, audio_channels_stereo
2026-04-18 18:10:49
app_v2/src/main/res/layout-land/dialog_file_info.xml
dialog_file_info (land)
Add tvVideoAspectRatio, tvVideoAudioChannels, tvVideoAudioBitrate - required for non-null ViewBinding
2026-04-18 18:17:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.showFileInfo
Enrich MediaFile with live ExoPlayer duration/videoSize before opening FileInfoDialog (fixes empty metadata for SMB MP4 with moov at EOF)
2026-04-18 18:51:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
Added ShowVrInstallCta event handling - MaterialAlertDialog with Play Store CTA
2026-04-18 18:51:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
Removed unused Toast and R imports after CTA refactor
2026-04-18 18:51:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/playback/VrPlaybackSource.kt
VrPlaybackSource
VR playback source model - URI + optional title/mimeType
2026-04-18 18:51:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/playback/VrPlaybackEngine.kt
VrPlaybackEngine
VR playback engine interface; Surface passed via prepare(), not as property (ADR-2)
2026-04-18 18:51:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/playback/ExoVrPlaybackEngine.kt
ExoVrPlaybackEngine
ExoPlayer-based VR playback engine - no second media engine per spec
2026-04-18 18:51:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
OpenXR session scaffold - instance/system/session/swapchain lifecycle
2026-04-18 18:51:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer
Per-eye stereo renderer scaffold - UV-crop shader for SBS/OU, cinema mode for 2D
2026-04-18 18:51:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrControlOverlayManager.kt
VrControlOverlayManager
VR overlay manager - controller ray-cast, PlaybackCommandSet forVrPlayback
2026-04-18 18:51:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrModule.kt
VrModule
Added VrPlaybackEngine Hilt binding to ExoVrPlaybackEngine
2026-04-18 18:51:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Wired VR host: XR runtime check, phone fallback, VrPlaybackEngine injection, overlay commands
2026-04-18 18:51:34
app_v2/src/vr/java/com/sza/fastmediasorter/vr/playback/VrPlaybackEngine.kt
VrPlaybackEngine
VR playback engine interface; Surface passed via prepare(), not as property (ADR-2)
2026-04-18 18:51:37
app_v2/src/vr/java/com/sza/fastmediasorter/vr/playback/ExoVrPlaybackEngine.kt
ExoVrPlaybackEngine
ExoPlayer-based VR playback engine - no second media engine per spec
2026-04-18 18:51:41
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
OpenXR session scaffold - instance/system/session/swapchain lifecycle
2026-04-18 18:51:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer
Per-eye stereo renderer scaffold - UV-crop shader for SBS/OU, cinema mode for 2D
2026-04-18 18:51:49
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrControlOverlayManager.kt
VrControlOverlayManager
VR overlay manager - controller ray-cast, PlaybackCommandSet forVrPlayback
2026-04-18 18:51:52
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrModule.kt
VrModule
Added VrPlaybackEngine Hilt binding to ExoVrPlaybackEngine
2026-04-18 18:51:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Wired VR host: XR runtime check, phone fallback, VrPlaybackEngine injection, overlay commands
2026-04-18 22:20:42
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Fix: check XR runtime BEFORE super.onCreate to avoid full PlayerActivity init on phones; cache loadLibrary result
2026-04-18 22:20:47
app_v2/src/vr/java/com/sza/fastmediasorter/vr/playback/ExoVrPlaybackEngine.kt
ExoVrPlaybackEngine
Fix: ensure ExoPlayer create/release on main thread via withContext(Dispatchers.Main); add @Singleton scope; remove unused import
2026-04-18 22:20:51
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPhoneFallbackActivity.kt
VrPhoneFallbackActivity
Fix: add Open Standard button with Play Store fallback; convert hardcoded px padding to dp; add TalkBack contentDescription
2026-04-18 22:20:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
Fix: wrap VR CTA dialog show() in try-catch for BadTokenException safety
2026-04-18 22:36:23
scripts/builders/build-vr-debug.ps1
build-vr-debug
New: VR debug build script (assembleVrDebug + copy to DOWNLOADS + zip to GDrive)
2026-04-18 22:36:26
scripts/builders/build-vr-device.ps1
build-vr-device
New: VR device build script (assembleVrDebug + ADB install on Quest + logcat capture)
2026-04-18 22:36:29
scripts/builders/build-vr-release.ps1
build-vr-release
New: VR release APK script (assembleVrRelease for Meta Horizon Store)
2026-04-18 22:36:33
scripts/builders/build-vr-aab.ps1
build-vr-aab
New: VR AAB+APK release script (bundleVrRelease + assembleVrRelease for Google Play / Android XR)
2026-04-18 22:36:38
scripts/builders/README.md
builders/README
Added VR build scripts section (debug, device, release, AAB)
2026-04-18 22:36:41
docs/DEV_OPS.md
DEV_OPS
Added VR flavor build commands and VR column to feature flags table
2026-04-18 22:36:45
docs/FEATURES.md
FEATURES.md
Added 3D stereo detection and VR edition feature bullets to Video Player section
2026-04-18 22:36:50
docs/FEATURES_RU.md
FEATURES_RU.md
Added 3D stereo detection and VR edition feature bullets (RU)
2026-04-18 22:36:50
docs/FEATURES_UK.md
FEATURES_UK.md
Added 3D stereo detection and VR edition feature bullets (UK)
2026-04-18 22:36:55
docs/VR_EDITION.md
VR_EDITION
New: VR edition overview doc (EN) - features, differences, build commands, distribution
2026-04-18 22:36:55
docs/VR_EDITION_RU.md
VR_EDITION_RU
New: VR edition overview doc (RU)
2026-04-18 22:36:55
docs/VR_EDITION_UK.md
VR_EDITION_UK
New: VR edition overview doc (UK)
2026-04-18 22:37:01
docs/VR_SIDELOAD.md
VR_SIDELOAD
New: Quest sideloading guide (EN) - ADB setup, build, install, wireless ADB
2026-04-18 22:37:01
docs/VR_SIDELOAD_RU.md
VR_SIDELOAD_RU
New: Quest sideloading guide (RU)
2026-04-18 22:37:01
docs/VR_SIDELOAD_UK.md
VR_SIDELOAD_UK
New: Quest sideloading guide (UK)
2026-04-18 22:37:04
docs/MODULE_SELECTION.md
MODULE_SELECTION
Added vr flavor to module table, run configurations, and build commands
2026-04-18 22:41:40
app_v2/src/main/res/values/themes.xml
Theme.FastMediaSorter.App
Remove windowDisablePreview=true - fixes black screen on cold start (day theme)
2026-04-18 22:41:40
app_v2/src/main/res/values-night/themes.xml
Theme.FastMediaSorter.App
Remove windowDisablePreview=true - fixes black screen on cold start (night theme)
2026-04-18 23:32:26
app_v2/src/vr/res/mipmap-*
VR launcher icons
Generated VR flavor launcher icons (all 5 densities): arrows + purple VR badge overlay
2026-04-18 23:32:26
scripts/utils/generate-vr-icons.ps1
generate-vr-icons
New: script to regenerate VR icons from standard base with VR badge
2026-04-18 23:36:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Add collapsible sections (Conditions/MediaTypes/Additional) for SMB+SFTP; add cbSmbShowSubfoldersAsItems + cbSftpShowSubfoldersAsItems; SharedPrefs-backed state per type+orientation
2026-04-18 23:36:27
app_v2/src/main/res/layout/activity_add_resource.xml
activity_add_resource
Restructure SMB+SFTP sections into 3 collapsible MaterialCardView groups each; move SFTP Test Connection after auth block; add Show Subfolders checkboxes
2026-04-18 23:36:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
Add showSubfoldersAsItems param to addSmbResourceManually, addSftpFtpResource, addSftpResourceWithKey and wire through to MediaResource creation
2026-04-18 23:36:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/ResourceEditorFragment.kt
ResourceEditorFragment
Scope section state keys by resource type+orientation via sectionStateKey(); replace static KEY_SECTION_* constants with SECTION_* IDs
2026-04-18 23:36:27
app_v2/src/main/res/layout/fragment_resource_editor.xml
fragment_resource_editor
Move Test Connection block inside groupNetwork after password row, before domain/share/path (spec F5.2/F5.3)
2026-04-18 23:36:27
app_v2/src/main/res/values/strings.xml
strings.xml
Add label_additional_options string (EN)
2026-04-18 23:36:27
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
Add label_additional_options translation (RU: Дополнительные параметры)
2026-04-18 23:36:27
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml
Add label_additional_options translation (UK: Додаткові параметри)
2026-04-18 23:36:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/NetworkDiscoveryDialog.kt
NetworkDiscoveryDialog
Fix pre-existing null-safety error: btnStopScan absent in layout-land variant, use safe-call operator
2026-04-18 23:39:11
app_v2/src/main/java/.../ui/welcome/WelcomeActivity.kt
WelcomeActivity
Added VR-exclusive welcome page (3D/VR capabilities) gated by SUPPORT_VR_PLAYER; made pageBackgrounds mutable list
2026-04-18 23:39:11
app_v2/src/vr/res/values/strings.xml
VR strings EN
Added welcome_title_1 VR override and VR welcome page strings (title, description, 3 feature cards)
2026-04-18 23:39:11
app_v2/src/vr/res/values-ru/strings.xml
VR strings RU
Added welcome_title_1 VR override and VR welcome page strings (RU)
2026-04-18 23:39:18
app_v2/src/vr/res/values-uk/strings.xml
VR strings UK
Added welcome_title_1 VR override and VR welcome page strings (UK)
2026-04-18 23:39:18
app_v2/src/main/res/drawable/welcome_hero_vr.xml
welcome_hero_vr
New: VR headset hero vector drawable for welcome page
2026-04-18 23:39:18
app_v2/src/main/res/drawable/ic_stereo_3d.xml
ic_stereo_3d
New: stereo 3D icon for VR welcome feature card
2026-04-18 23:39:18
app_v2/src/main/res/drawable/ic_vr_headset.xml
ic_vr_headset
New: VR headset icon for welcome feature card
2026-04-18 23:39:18
app_v2/src/main/res/drawable/ic_vr_formats.xml
ic_vr_formats
New: VR formats icon for welcome feature card
2026-04-18 23:39:23
app_v2/src/main/res/values/strings.xml
strings.xml EN
Added VR welcome page strings (welcome_vr_title/description/features) for compilation
2026-04-18 23:39:23
app_v2/src/main/res/values/colors.xml
colors.xml
Added welcome_page_8_background (Deep Purple 50) for VR welcome page
2026-04-18 23:44:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel.addSmbResourceManually
Skip write test for isReadOnly=true resources; skip speed test for non-writable resources - fixes spurious SMB auto-reset toast on read-only SMB add
2026-04-18 23:44:08
app_v2/src/main/res/values/strings.xml
strings.xml
Added msg_scan_again, msg_no_shares_found, msg_share_scan_failed, msg_select_share for share scan UI
2026-04-18 23:44:08
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
Added RU translations for share scan strings
2026-04-18 23:44:08
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml
Added UK translations for share scan strings
2026-04-18 23:44:08
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DiscoverNetworkResourcesUseCase.kt
DiscoverNetworkResourcesUseCase
Made class open; made getLocalIpAddress internal open for test subclassing
2026-04-18 23:44:08
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/DiscoverNetworkResourcesUseCaseTest.kt
DiscoverNetworkResourcesUseCaseTest
New unit tests: subnet extraction, port probe logic, fallback filtering, cancellation
2026-04-18 23:44:15
app_v2/src/main/res/values/strings.xml
strings.xml
Added msg_scan_again, msg_no_shares_found, msg_share_scan_failed, msg_select_share for share scan UI
2026-04-18 23:44:21
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
Added RU translations for share scan strings
2026-04-18 23:44:21
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml
Added UK translations for share scan strings
2026-04-18 23:44:21
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DiscoverNetworkResourcesUseCase.kt
DiscoverNetworkResourcesUseCase
Made class open; getLocalIpAddress internal open for test subclassing
2026-04-18 23:44:21
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/DiscoverNetworkResourcesUseCaseTest.kt
DiscoverNetworkResourcesUseCaseTest
New unit tests: subnet extraction, port probe logic, fallback filtering, cancellation
2026-04-18 23:46:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Added VR settings fields: vrAutoDetectFormat, vrForcedFormat, vrRenderingMode, vrRememberFileFormat (spec 5.7)
2026-04-18 23:46:37
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Added VR settings DataStore keys and read/write logic (spec 5.7)
2026-04-18 23:46:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupSettings
Added VR settings to BackupSettings for backup/restore support
2026-04-18 23:46:44
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Added VR settings to toBackupSettings/toAppSettings mapping
2026-04-18 23:46:44
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Added VR settings section (auto-detect switch, forced format/rendering mode spinners, remember format switch)
2026-04-18 23:46:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Added VR settings block: setupVrSettings() + observeData VR bindings, gated by SUPPORT_VR_PLAYER
2026-04-18 23:46:49
app_v2/src/main/res/values/strings.xml
strings.xml EN
Added VR Settings strings: section title, labels, descriptions, help, spinner arrays (spec 5.7)
2026-04-18 23:46:49
app_v2/src/main/res/values-ru/strings.xml
strings.xml RU
Added VR Settings strings in Russian (spec 5.7)
2026-04-18 23:46:49
app_v2/src/main/res/values-uk/strings.xml
strings.xml UK
Added VR Settings strings in Ukrainian (spec 5.7)
2026-04-18 23:53:32
app_v2/src/main/java/.../ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Enabled STEREO tab in VR flavor with 3DVR controls (rendering mode chips, IPD slider, content type label) per spec §5.8
2026-04-18 23:53:35
app_v2/src/main/java/.../ui/player/PlaybackControlPreferences.kt
PlaybackControlPreferences
Added VR rendering mode and IPD preference keys
2026-04-18 23:53:39
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Added VR-only controls to stereo section: content type label, rendering mode chips, IPD slider; enabled OU radio button
2026-04-18 23:53:43
app_v2/src/main/java/.../ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
VR flavor now shows toast when 3D content auto-detected instead of silently logging
2026-04-18 23:53:46
app_v2/src/main/res/values/strings.xml
strings
Added VR 3DVR tab strings (EN/RU/UK): content type, rendering mode, IPD labels; removed OU coming-soon suffix
2026-04-18 23:59:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel.addSmbResourceManually
Show informational ‘read-only’ message instead of generic success when isReadOnly=true
2026-04-18 23:59:51
app_v2/src/main/res/values/strings.xml
smb_resource_added_readonly
Added EN string for read-only SMB resource added message
2026-04-18 23:59:51
app_v2/src/main/res/values-ru/strings.xml
smb_resource_added_readonly
Added RU string for read-only SMB resource added message
2026-04-18 23:59:51
app_v2/src/main/res/values-uk/strings.xml
smb_resource_added_readonly
Added UK string for read-only SMB resource added message
2026-04-19 00:00:20
scripts/builders/build-and-push-all.ps1
build-and-push-all
Add VR flavor to all-builds script: update header comment and enumerate all 10 variants explicitly (5 flavors x Debug/Release)
2026-04-19 00:33:30
gradle.properties
kotlin.daemon.jvm.options
Increase Kotlin daemon heap 2g→4g to fix OOM in ControlFlowGraph builder during parallel flavor compilation of VideoPlayerManager.kt (1735 lines)
2026-04-19 00:44:11
scripts/builders/build-and-push-all.ps1
build-and-push-all
Add Wear OS to master build script: :wear:assembleDebug + :wear:assembleRelease tasks, artifact copy with metadata.json fallback, GD zip, tc copy
2026-04-19 00:54:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager refactor
Split 1735-line VideoPlayerManager.kt into orchestrator (709 lines) + 8 helper extension-function files to fix Kotlin daemon OOM during parallel compilation
2026-04-19 00:54:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/
New helper files
Created PlayerSetupHelper, LocalPlaybackHelper, SmbPlaybackHelper, SftpPlaybackHelper, FtpPlaybackHelper, CloudPlaybackHelper, PlaybackPositionHelper, PlaybackHealthHelper as extension functions on VideoPlayerManager
2026-04-19 00:54:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
Fix seekForward/seekBackward imports
Added explicit imports for seekForward/seekBackward extension functions from helpers package after VideoPlayerManager refactor
2026-04-19 01:11:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceHelper.kt
AddResourceHelper.preFillResourceData
Add missing showSubfoldersAsItems + disableThumbnails pre-fill for SMB/SFTP/FTP copy flow (option parity fix)
2026-04-19 01:14:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Added detectFromFilename(): word-boundary regex pattern matching for 3dh/sbs/lr/ou/3dv/tb/hsbs/180x180 - highest-priority detection path for commercial VR MP4 without Matroska tags
2026-04-19 01:14:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
onTracksChanged: filename detection now runs BEFORE format/AR detection; applyStereoEffect: added BuildConfig.SUPPORT_VR_PLAYER guard - VR flavor passes full SBS/OU frame to VrStereoRenderer, skipping ExoPlayer Crop
2026-04-19 01:14:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Added stereoMode StateFlow observer in onCreate - propagates ViewModel stereo changes to VrStereoRenderer.setStereoMode() for correct per-eye UV-crop on Quest
2026-04-19 01:14:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Added detectFromFilename(): word-boundary regex pattern matching for 3dh/sbs/lr/ou/3dv/tb/hsbs/180x180 - highest-priority detection path for commercial VR MP4 without Matroska tags
2026-04-19 01:14:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
onTracksChanged: filename detection now runs BEFORE format/AR detection; applyStereoEffect: added SUPPORT_VR_PLAYER guard - VR passes full SBS frame to VrStereoRenderer, skipping ExoPlayer Crop
2026-04-19 01:14:11
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Added stereoMode StateFlow observer in onCreate: propagates ViewModel stereo mode to VrStereoRenderer.setStereoMode() for per-eye UV-crop on Quest
2026-04-19 01:49:17
PLAN/spec_vr-3d-image-viewing.md
spec
Add specification for VR 3D image viewing (SBS/OU stereo detection + crop rendering)
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/StereoImageCropTransformation.kt
impl
NEW: Glide BitmapTransformation for SBS/OU stereo image crop (left half / top half)
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/StaticImageRenderer.kt
impl
Add setStereoMode(StereoMode) to StaticImageRenderer interface
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/DualSurfaceStaticImageRenderer.kt
impl
Implement setStereoMode + apply StereoImageCropTransformation in Glide load chain
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/NoOpStaticImageRenderer.kt
impl
Add no-op setStereoMode to satisfy StaticImageRenderer interface
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
impl
Add setStereoMode pass-through to underlying renderer
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
impl
Add image stereo detection (filename + vrForcedFormat override) before displayImage
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
impl
Add vrForcedFormatCached field + mapVrForcedFormat helper for image stereo pipeline
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
impl
Expand 3D tab visibility: show when stereo content detected (not just VR flavor)
2026-04-19 01:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
impl
Add stereoMode collector for image re-rendering on 3D tab mode switch
2026-04-19 01:57:09
docs/FEATURES.md
docs
Add 3D Image Viewing feature entry (EN)
2026-04-19 01:57:09
docs/FEATURES_RU.md
docs
Add 3D Image Viewing feature entry (RU)
2026-04-19 01:57:09
docs/FEATURES_UK.md
docs
Add 3D Image Viewing feature entry (UK)
2026-04-19 02:42:02
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrVideoSurfaceTextureBridge.kt
VrVideoSurfaceTextureBridge
New: OES texture + SurfaceTexture + Surface factory for ExoPlayer→GL pipeline
2026-04-19 02:42:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer
Rewritten: GLSL shader program, VBO quad, per-eye UV-crop rendering
2026-04-19 02:42:09
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Updated: bridge integration, initializeVrRenderPipeline(), renderVrFrame()
2026-04-19 02:42:14
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
Added: bindSwapchainFramebuffer() stub, swapchainLength, isActive(), expanded KDoc
2026-04-19 02:42:19
PLAN/spec_vr-3d-video-viewing.md
spec_vr-3d-video-viewing
New: Spec for VR 3D video viewing (SBS/OU stereo via GLES UV-crop)
2026-04-19 03:15:47
PLAN/vr-doc.md
vr-doc
Создан исследовательский документ: VR 3D видео форматы, детекция, OpenXR composition layers, стратегия рендеринга 360/180/SBS/OU
2026-04-19 03:37:16
PLAN/spec_vr-360-spherical-video.md
spec_vr-360-spherical-video
Created implementation spec for 360°/VR180 spherical video support in VR flavor: StereoMode enum extension, StereoDetector 360° patterns, MP4 st3d/sv3d box parsing, OpenXR Equirect2KHR + CylinderKHR layers, 5-phase rollout plan
2026-04-19 04:09:45
PLAN/spec_vr-360-spherical-video.md
spec_vr-360-spherical-video
Updated spec from questionnaire: status Draft→Confirmed, StereoMode360 in src/vr/, MP4 boxes priority inverted (MP4>filename, ADR-04), AR heuristic added for 4K, two RadioGroups UI decision, UI ambiguity checklist closed, ADR-03..06 added, Phase 1 steps updated, Phase 6 photo360 added
2026-04-19 12:54:05
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/StereoMode.kt
StereoMode
Phase 2: spherical constants (EQUIRECT_360*, EQUIRECT_180 *, VR180_FISHEYE_SBS, CYLINDER_180) + isSpherical/isStereoscopic/is180Only predicates
2026-04-19 12:54:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Phase 2: filename patterns for 360/VR180/Cylinder/equirect; narrow AR heuristic with resolution floor
2026-04-19 12:54:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/StereoDetectionFacade.kt
StereoDetectionFacadeImpl
Phase 2: isStereoContent now uses isStereoscopic() predicate - covers spherical SBS/OU/fisheye
2026-04-19 12:54:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/PlayerEntryCoordinator.kt
PlayerEntryCoordinatorImpl
Phase 2: VR install CTA triggers on spherical content in standard flavor
2026-04-19 14:38:22
app_v2/src/vr/cpp/CMakeLists.txt
CMakeLists.txt
Gate all OpenXR code behind option(ENABLE_OPENXR OFF) so non-vr flavors skip find_package during CMake configure
2026-04-19 14:38:25
app_v2/build.gradle.kts
vr flavor cmake
Add -DENABLE_OPENXR=ON to vr flavor cmake arguments (non-vr flavors leave flag absent, fixing CXX1429 configure failure)
2026-04-19 14:41:46
app_v2/src/vr/cpp/CMakeLists.txt
CMakeLists.txt
Suppress AGP ‘unused variable’ CMake warnings for non-VR flavors: early return with explicit dereference of CMAKE_LIBRARY/RUNTIME_OUTPUT_DIRECTORY and CMAKE_EXPORT_COMPILE_COMMANDS
2026-04-19 14:42:51
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
Added onSessionReady callback param; invoked on GL thread after nativeInitialize succeeds, before render loop
2026-04-19 14:42:55
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Phase 1 wiring: XrRenderCallback lambda, onResume/onPause XR lifecycle, renderVrFrameForEye (per-eye), initializeVrRenderPipeline release-before-reinit
2026-04-19 14:53:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
AudioPlaybackService
Add currentResourceId/currentInitialIndex companion vars; set sessionActivity PendingIntent on MediaSession so notification body tap navigates to player via MainActivity.ACTION_RESUME_PLAYER
2026-04-19 14:53:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager.playLocalAudioViaService
Store resource.id + currentIndex in AudioPlaybackService companion before starting playback so notification contentIntent can restore correct player screen
2026-04-19 14:53:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Add ACTION_RESUME_PLAYER + onNewIntent override + openAudioPlayerFromNotification() - navigates to PlayerActivity on notification body tap during background audio playback
2026-04-19 14:54:29
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
Fixed Phase 1 lifecycle races: prevent duplicate initialize(), add stopRequested/startup guards, run GL cleanup on render thread before EGL teardown
2026-04-19 14:54:29
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Fixed Phase 1 GL lifecycle: move bridge/renderer release to render thread via onSessionStopped; avoid main-thread GLES cleanup
2026-04-19 14:55:12
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Fixed VR build failure: removed duplicate XR_USE_* macro definitions already supplied by CMake compile definitions
2026-04-19 14:57:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/StereoDetectionFacade.kt
StereoDetectionFacade
Fix Phase 2 regression: treat spherical mono/stereo as VR-worthy in isStereoContent, not only stereoscopic modes
2026-04-19 14:58:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity.onCreate
Fix Android 8.1 task-stack-clear bug: when AudioPlaybackService.isRunning on fresh launch (ACTION_MAIN), redirect to PlayerActivity via FLAG_ACTIVITY_REORDER_TO_FRONT before shouldAttemptResume()
2026-04-19 14:58:05
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/contracts/StereoDetectionFacadeTest.kt
StereoDetectionFacadeTest
Add regression tests covering spherical mono/stereo detection through the shared facade
2026-04-19 14:58:05
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/entry/PlayerEntryCoordinatorTest.kt
PlayerEntryCoordinatorTest
Add regression tests verifying VR CTA routing for spherical mono image/video content
2026-04-19 15:05:40
scripts/builders/build-debug.PS1
build-debug
Add Windows kapt incrementalData lock recovery: stop daemons, clear kapt/kotlin temp outputs, retry once with –no-daemon –no-build-cache
2026-04-19 15:05:40
scripts/builders/clean-gradle-caches.ps1
clean-gradle-caches
Stop Gradle daemons before deleting .gradle/build directories so Windows file locks do not block cleanup
2026-04-19 15:10:07
dev/build-with-version.ps1
build-with-version
Add Windows kapt incrementalData lock recovery: stop daemons, clear kapt/kotlin temp outputs, retry once with –no-daemon –no-build-cache
2026-04-19 15:10:10
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoDetectorTest.kt
StereoDetectorTest
Fix test-infra issue: remove unnecessary Robolectric runner/config so detector tests run as plain JVM JUnit and avoid unstable Android test executor path
2026-04-19 15:10:10
PLAN/spec_vr-master.md
spec_vr-master
Sync master VR spec with completed Phase 1 and Phase 2 state; remove outdated OpenXR TODO notes and mark next remaining milestone accurately
2026-04-19 15:11:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Align 360 OU aspect-ratio heuristic with Phase 2 expectations: accept 3840x3840 masters via dedicated OU width floor
2026-04-19 15:23:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/Mp4SpatialMetadataReader.kt
Mp4SpatialMetadataReader
Added dependency-free MP4 Spatial Media parser for Phase 3
2026-04-19 15:23:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Added authoritative MP4 spatial metadata detection before filename and AR heuristics
2026-04-19 15:23:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Moved video stereo detection off main thread to support MP4 box parsing
2026-04-19 15:23:43
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoDetectorTest.kt
StereoDetectorTest
Added Phase 3 regression coverage for MP4 metadata priority
2026-04-19 15:23:43
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/Mp4SpatialMetadataReaderTest.kt
Mp4SpatialMetadataReaderTest
Added unit tests for MP4 st3d and sv3d parsing
2026-04-19 15:26:11
PLAN/tasks/phase_03_mp4_spatial_boxes.md
phase_03_mp4_spatial_boxes
Marked Phase 3 complete and documented MP4 spatial metadata implementation
2026-04-19 15:26:11
PLAN/spec_vr-master.md
spec_vr-master
Synced master VR spec to Phase 3 completion and MP4 spatial metadata support
2026-04-19 15:26:11
docs/FEATURES.md
FEATURES.md
Documented MP4 Spatial Media auto-detection for 360 degree video
2026-04-19 15:26:11
docs/FEATURES_RU.md
FEATURES_RU.md
Documented MP4 Spatial Media auto-detection for 360 degree video in Russian
2026-04-19 15:26:11
docs/FEATURES_UK.md
FEATURES_UK.md
Documented MP4 Spatial Media auto-detection for 360 degree video in Ukrainian
2026-04-19 15:26:57
PLAN/tasks/phase_03_mp4_spatial_boxes.md
phase_03_mp4_spatial_boxes
Removed duplicate acceptance criterion after Phase 3 doc sync
2026-04-19 18:53:56
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoDetectorTest.kt
StereoDetectorTest
Fix deprecated createTempDir -> createTempDirectory (kotlin.io.path)
2026-04-19 18:55:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrLayerType.kt
VrLayerType
Added stable VR layer type enum shared with native OpenXR bridge
2026-04-19 18:55:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrLayerDescriptor.kt
VrLayerDescriptor
Added shared VR layer descriptor with UV and geometry fields for OpenXR composition layers
2026-04-19 18:55:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrLayerFactory.kt
VrLayerFactory
Implemented layer factory mapping StereoMode and rendering mode to projection, quad, equirect, or cylinder layers
2026-04-19 18:55:46
app_v2/src/test/java/com/sza/fastmediasorter/vr/render/VrLayerFactoryTest.kt
VrLayerFactoryTest
Added regression coverage for Phase 4 layer mapping and legacy rendering mode parsing
2026-04-19 18:55:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrModule.kt
VrModule
Bound injectable VR layer factory for phase 4 layer selection
2026-04-19 18:55:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrNative.kt
OpenXrNative
Added JNI bridge entry for runtime layer configuration
2026-04-19 18:55:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
Added layer descriptor propagation from Kotlin to native OpenXR session
2026-04-19 18:55:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer
Switched per-eye UV selection to descriptor-driven Phase 4 layer model
2026-04-19 18:55:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Integrated layer factory, rendering mode preference listener, and live descriptor updates
2026-04-19 18:55:46
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative.cpp
Extended xrEndFrame submission with configurable quad, equirect2, and cylinder composition layers
2026-04-19 18:57:54
PLAN/tasks/phase_04_layer_factory.md
phase_04_layer_factory
Marked Phase 4 complete and documented implemented layer factory and native composition-layer routing
2026-04-19 18:57:54
PLAN/spec_vr-master.md
spec_vr-master
Updated master VR roadmap to mark Phase 4 complete and list implemented layer-factory stack
2026-04-19 18:57:54
docs/FEATURES.md
FEATURES.md
Updated VR feature inventory with implemented OpenXR layer-factory routing details
2026-04-19 18:57:54
docs/FEATURES_RU.md
FEATURES_RU.md
Updated VR feature inventory with implemented OpenXR layer-factory routing details (RU)
2026-04-19 18:57:54
docs/FEATURES_UK.md
FEATURES_UK.md
Updated VR feature inventory with implemented OpenXR layer-factory routing details (UK)
2026-04-19 19:03:02
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrRenderContext.kt
VrRenderContext
Added immutable XR frame context carrying layer type, eye, render mode, target size, and source aspect for Phase 5 renderer dispatch
2026-04-19 19:03:02
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer
Refactored renderer to build layer-aware render plans, keep spherical paths flat, and letterbox cinema quad via viewport policy
2026-04-19 19:03:02
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Updated XR render callback to pass full VrRenderContext including target size and source aspect into renderer
2026-04-19 19:03:02
app_v2/src/test/java/com/sza/fastmediasorter/vr/render/VrStereoRendererTest.kt
VrStereoRendererTest
Added focused Phase 5 unit tests for projection, equirect, cylinder, and cinema viewport dispatch
2026-04-19 19:04:35
PLAN/tasks/phase_05_sphere_cylinder_render.md
phase_05_sphere_cylinder_render
Marked Phase 5 complete and documented implemented layer-aware renderer dispatch and validation scope
2026-04-19 19:04:35
PLAN/spec_vr-master.md
spec_vr-master
Updated master VR roadmap to mark Phase 5 complete and advance next milestone to Phase 6
2026-04-19 19:04:35
docs/FEATURES.md
FEATURES.md
Updated VR feature inventory to describe implemented flat-pixel spherical and cylinder renderer dispatch
2026-04-19 19:04:35
docs/FEATURES_RU.md
FEATURES_RU.md
Updated VR feature inventory to describe implemented flat-pixel spherical and cylinder renderer dispatch (RU)
2026-04-19 19:04:35
docs/FEATURES_UK.md
FEATURES_UK.md
Updated VR feature inventory to describe implemented flat-pixel spherical and cylinder renderer dispatch (UK)
2026-04-19 19:10:17
app_v2/src/main/java/com/sza/fastmediasorter/vr/render/VrRenderContext.kt
VrRenderContext,VrEye
Move pure data types from src/vr to src/main for test visibility
2026-04-19 19:10:17
app_v2/src/main/java/com/sza/fastmediasorter/vr/render/VrRenderPlanner.kt
VrRenderPlanner
Extract pure UV/viewport computation from VrStereoRenderer for unit testing without GL context
2026-04-19 19:10:17
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer
Delegate buildRenderPlan/calculateUvParams/calculateCinemaViewport to VrRenderPlanner
2026-04-19 19:10:17
app_v2/src/test/java/com/sza/fastmediasorter/vr/render/VrStereoRendererTest.kt
VrStereoRendererTest
Update test subject from VrStereoRenderer to VrRenderPlanner (pure-Kotlin testable class)
2026-04-19 19:24:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ExifPhotoSphereReader.kt
ExifPhotoSphereReader
Added GPano XMP reader for local Photo Sphere metadata fallback in still-image stereo detection
2026-04-19 19:24:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Added detectForImage() with GPano XMP fallback and half-sphere inference for local panoramas
2026-04-19 19:24:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Switched image stereo detection to XMP-aware still-image path using MediaFile dimensions
2026-04-19 19:24:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrPhotoSphereRenderer.kt
VrPhotoSphereRenderer
Added VR static bitmap renderer with GL texture upload, layer-aware UV dispatch, and texture-size downsampling
2026-04-19 19:24:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Mirrored still images into XR via VrPhotoSphereRenderer and synced image stereo detection with current file state
2026-04-19 19:24:38
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoDetectorPhotoSphereTest.kt
StereoDetectorPhotoSphereTest
Added regression coverage for GPano XMP image detection fallback and 180 degree inference
2026-04-19 19:24:38
app_v2/src/test/java/com/sza/fastmediasorter/vr/render/VrPhotoSphereRendererTest.kt
VrPhotoSphereRendererTest
Added unit coverage for static panorama texture downsampling math
2026-04-19 19:25:47
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/render/VrPhotoSphereRendererTest.kt
VrPhotoSphereRendererTest
Moved vr-only renderer test into testVr source set so standard unit tests do not compile vr-only classes
2026-04-19 19:26:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Prioritized GPano half-sphere metadata over square-image AR heuristic so VR180 mono photos do not misclassify as 360 OU
2026-04-19 19:31:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ExifPhotoSphereReader.kt
ExifPhotoSphereReader
Fix regex: \s/\d in raw strings matched literal chars, not whitespace/digits - single backslash now correct
2026-04-19 19:31:10
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/ExifPhotoSphereReaderTest.kt
ExifPhotoSphereReaderTest
Add 12 unit tests covering ProjectionType regex, int field extraction, is180Projection
2026-04-19 19:40:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Phase 7: added effective/detected stereo state and remembered VR format persistence helpers
2026-04-19 19:40:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
Phase 7: removed VR auto-detect toast and aligned video stereo reset/apply flow
2026-04-19 19:40:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Phase 7: routed image stereo detection through shared ViewModel effective mode
2026-04-19 19:40:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Phase 7: added flat+spherical stereo controls with override switch and manual format toast
2026-04-19 19:40:09
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Phase 7: accepted spherical VR forced-format values from DataStore
2026-04-19 19:40:09
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Phase 7: corrected VR forced-format and remember-format setting comments
2026-04-19 19:40:09
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Phase 7: added dual stereo groups and override switch in portrait dialog
2026-04-19 19:40:09
app_v2/src/main/res/layout-land/dialog_playback_control.xml
dialog_playback_control
Phase 7: added dual stereo groups and override switch in landscape dialog
2026-04-19 19:40:09
app_v2/src/main/res/values/strings.xml
strings.xml
Phase 7: added spherical stereo labels and extended VR forced-format entries
2026-04-19 19:40:09
app_v2/src/main/res/values-ru/strings.xml
strings.xml
Phase 7: added RU spherical stereo labels and updated VR forced-format entries
2026-04-19 19:40:09
app_v2/src/main/res/values-uk/strings.xml
strings.xml
Phase 7: added UK spherical stereo labels and updated VR forced-format entries
2026-04-19 19:41:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Phase 7: fixed stereo dialog syntax regression after dual-group implementation
2026-04-19 19:46:12
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/StereoFormatOverrideEntity.kt
StereoFormatOverrideEntity
Phase 7: added per-file Room entity for remembered VR stereo overrides
2026-04-19 19:46:12
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/StereoFormatOverrideDao.kt
StereoFormatOverrideDao
Phase 7: added DAO for per-file VR stereo override lookup and upsert
2026-04-19 19:46:12
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
Phase 7: added stereo override table and Room migration 22->23
2026-04-19 19:46:12
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
Phase 7: provided stereo override DAO and migration wiring
2026-04-19 19:46:12
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Phase 7: restored per-file Room remember-format semantics in settings comment
2026-04-19 19:46:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Phase 7: switched remember-format flow from global setting to per-file Room overrides
2026-04-19 19:46:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
Phase 7: pass file path into stereo reset for per-file override resolution
2026-04-19 19:46:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Phase 7: pass image path into stereo reset for per-file override resolution
2026-04-19 20:05:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Phase 8: split VR forced format into flat and spherical settings
2026-04-19 20:05:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
Phase 8: bumped backup schema and added split VR forced-format fields
2026-04-19 20:05:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Phase 8: migrated backup import-export for split VR forced-format settings
2026-04-19 20:05:15
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Phase 8: added legacy-compatible DataStore migration for flat and spherical VR forced formats
2026-04-19 20:05:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Phase 8: added separate flat and spherical VR forced-format spinners
2026-04-19 20:05:15
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Phase 8: added second VR forced-format spinner and updated labels
2026-04-19 20:05:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Phase 8: applied family-aware VR forced-format resolution
2026-04-19 20:05:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VrForcedFormatResolver.kt
VrForcedFormatResolver
Phase 8: added helper for flat versus spherical VR forced-format priority
2026-04-19 20:05:15
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VrForcedFormatResolverTest.kt
VrForcedFormatResolverTest
Phase 8: added focused unit coverage for split VR forced-format resolution
2026-04-19 20:05:15
app_v2/src/main/res/values/strings.xml
strings.xml
Phase 8: split VR settings strings and arrays into flat and spherical options
2026-04-19 20:05:15
app_v2/src/main/res/values-ru/strings.xml
strings.xml
Phase 8: split RU VR settings strings and arrays into flat and spherical options
2026-04-19 20:05:15
app_v2/src/main/res/values-uk/strings.xml
strings.xml
Phase 8: split UK VR settings strings and arrays into flat and spherical options
2026-04-19 20:08:56
PLAN/tasks/phase_08_settings_360.md
phase_08_settings_360
Phase 8: marked VR split forced-format task as implemented with validation note
2026-04-19 20:08:56
docs/FEATURES.md
FEATURES
Phase 8: documented split flat and spherical VR forced-format settings
2026-04-19 20:08:56
docs/FEATURES_RU.md
FEATURES_RU
Phase 8: documented split flat and spherical VR forced-format settings in Russian
2026-04-19 20:08:56
docs/FEATURES_UK.md
FEATURES_UK
Phase 8: documented split flat and spherical VR forced-format settings in Ukrainian
2026-04-19 20:09:34
PLAN/spec_vr-master.md
spec_vr-master
Phase 8: synced master VR spec with split flat and spherical forced-format settings
2026-04-19 20:09:34
PLAN/tasks/phase_07_dialog_spherical.md
phase_07_dialog_spherical
Phase 8: updated Phase 7 task note to reference split VR settings
2026-04-19 20:10:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
resolveStereoFamily
Fix: explicit flat modes (SBS/OU/MONO) now return FLAT directly instead of falling back to detectedStereoMode
2026-04-19 20:18:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Phase 9: added overridable Save Frame entrypoint for flavor-specific snapshot backends
2026-04-19 20:18:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Phase 9: routed Save Frame through PlayerActivity backend selection
2026-04-19 20:18:39
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrNative.kt
OpenXrNative
Phase 9: added JNI snapshot request and consume bindings
2026-04-19 20:18:39
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
Phase 9: exposed stereo snapshot request and polling API
2026-04-19 20:18:39
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrStereoSnapshotManager.kt
VrStereoSnapshotManager
Phase 9: added VR stereo SBS snapshot capture and save manager
2026-04-19 20:18:39
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Phase 9: delegated Save Frame to VR stereo snapshot manager
2026-04-19 20:18:39
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Phase 9: added OpenXR swapchain stereo snapshot readback support
2026-04-19 20:19:19
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/capture/VrStereoSnapshotManagerTest.kt
VrStereoSnapshotManagerTest
Phase 9: added focused VR unit test for stereo snapshot file naming
2026-04-19 20:19:19
app_v2/src/main/res/values/strings.xml
strings.xml
Phase 9: added VR stereo snapshot toast and snackbar strings
2026-04-19 20:19:19
app_v2/src/main/res/values-ru/strings.xml
strings.xml
Phase 9: added RU VR stereo snapshot toast and snackbar strings
2026-04-19 20:19:19
app_v2/src/main/res/values-uk/strings.xml
strings.xml
Phase 9: added UK VR stereo snapshot toast and snackbar strings
2026-04-19 20:21:17
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/capture/VrStereoSnapshotManagerTest.kt
VrStereoSnapshotManagerTest
Phase 9: aligned VR snapshot test with current MediaFile constructor
2026-04-19 20:22:28
PLAN/tasks/phase_09_stereo_snapshot.md
phase_09_stereo_snapshot
Phase 9: marked stereo snapshot task implemented and added validation commands
2026-04-19 20:22:28
PLAN/spec_vr-master.md
spec_vr-master
Phase 9: marked stereo snapshot complete in VR master spec
2026-04-19 20:22:28
docs/FEATURES.md
FEATURES
Phase 9: refined VR feature inventory entry with stereo snapshot save/open details
2026-04-19 20:22:28
docs/FEATURES_RU.md
FEATURES_RU
Phase 9: refined RU VR feature inventory entry with stereo snapshot save/open details
2026-04-19 20:22:28
docs/FEATURES_UK.md
FEATURES_UK
Phase 9: refined UK VR feature inventory entry with stereo snapshot save/open details
2026-04-19 20:36:05
app_v2/src/vr/cpp/OpenXrNative.cpp
StereoSnapshot
Fix data race: changed ready from plain bool to std::atomic with release/acquire ordering
2026-04-19 20:36:08
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
StereoSnapshotPixels
Override equals/hashCode to use contentEquals for IntArray fields (data class value semantics)
2026-04-19 20:36:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/commands/PlayerCommandOverrides.kt
PlayerCommandOverrides
Phase 10: added optional player command override contracts for flavor-specific behavior
2026-04-19 20:36:20
app_v2/src/main/java/com/sza/fastmediasorter/di/PlayerCommandOverrideModule.kt
PlayerCommandOverrideModule
Phase 10: added optional Hilt bindings for VR player command overrides
2026-04-19 20:36:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Phase 10: injected flavor-specific fullscreen save-frame and system-ui command hooks
2026-04-19 20:36:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Phase 10: routed fullscreen and save-frame buttons through override hooks
2026-04-19 20:36:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/commands/VrFullscreenCommandOverride.kt
VrFullscreenCommandOverride
Phase 10: added VR fullscreen no-op command with toast feedback
2026-04-19 20:36:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/commands/VrSaveFrameCommandOverride.kt
VrSaveFrameCommandOverride
Phase 10: added VR save-frame command bound to stereo snapshot capture
2026-04-19 20:36:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/commands/VrSystemUiCommandOverride.kt
VrSystemUiCommandOverride
Phase 10: added VR system-ui command bound to control overlay toggle
2026-04-19 20:36:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrModule.kt
VrModule
Phase 10: bound VR command overrides via Hilt
2026-04-19 20:36:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Phase 10: wired system-ui override to controller keys and OpenControls routing
2026-04-19 20:36:20
app_v2/src/main/res/values/strings.xml
strings.xml
Phase 10: added EN VR fullscreen command toast
2026-04-19 20:36:20
app_v2/src/main/res/values-ru/strings.xml
strings.xml
Phase 10: added RU VR fullscreen command toast
2026-04-19 20:36:20
app_v2/src/main/res/values-uk/strings.xml
strings.xml
Phase 10: added UK VR fullscreen command toast
2026-04-19 20:36:36
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/ui/VrControlOverlayManagerTest.kt
VrControlOverlayManagerTest
Phase 10: added focused VR unit test for control overlay state and command filtering
2026-04-19 20:37:22
docs/FEATURES.md
FEATURES.md
Moved VR capabilities into a dedicated VR Edition section and renumbered sections
2026-04-19 20:37:22
docs/FEATURES_RU.md
FEATURES_RU.md
Moved VR capabilities into a dedicated VR section and renumbered sections
2026-04-19 20:37:22
docs/FEATURES_UK.md
FEATURES_UK.md
Moved VR capabilities into a dedicated VR section and renumbered sections
2026-04-19 20:39:12
PLAN/tasks/phase_10_vr_commands.md
phase_10_vr_commands
Phase 10: marked VR command override task implemented with validation commands
2026-04-19 20:39:12
PLAN/spec_vr-master.md
spec_vr-master
Phase 10: marked VR command overrides complete in master spec
2026-04-19 20:39:12
docs/FEATURES.md
FEATURES
Phase 10: documented VR fullscreen and system-ui command behavior
2026-04-19 20:39:12
docs/FEATURES_RU.md
FEATURES_RU
Phase 10: documented RU VR fullscreen and system-ui command behavior
2026-04-19 20:39:12
docs/FEATURES_UK.md
FEATURES_UK
Phase 10: documented UK VR fullscreen and system-ui command behavior
2026-04-19 20:59:17
app_v2/build.gradle.kts
disableNativeBuild()
Fix: set abiFilters=arm64-v8a for non-VR flavors - was empty (all ABIs), causing standard APK to be 3-4x larger than vr
2026-04-19 21:43:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.createIntent
Fix: use BuildConfig.PLAYER_ACTIVITY_CLASS to route to VrPlayerActivity in vr flavor instead of hardcoded PlayerActivity::class.java
2026-04-19 21:43:17
app_v2/build.gradle.kts
productFlavors
Fix: add PLAYER_ACTIVITY_CLASS buildConfigField per flavor (vr=VrPlayerActivity, others=PlayerActivity)
2026-04-19 21:45:05
app_v2/src/main/res/layout/dialog_playback_control.xml
sectionStereo3d
3D VR tab: portrait layout - Flat and Spherical radio groups now side-by-side (2-column) instead of single vertical stack
2026-04-19 21:45:09
app_v2/src/main/res/layout-land/dialog_playback_control.xml
sectionStereo3d
3D VR tab: landscape layout - two-column compact layout (Flat|Spherical), 36dp minHeight rows, 11sp hint, 13sp section labels
2026-04-19 21:53:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Fix: add missing BuildConfig import for PLAYER_ACTIVITY_CLASS in createIntent
2026-04-19 22:22:51
app_v2/src/vr/cpp/OpenXrNative.cpp
createSessionAndSwapchains
BUG FIX: add missing xrGetGraphicsRequirementsOpenGLESKHR call before xrCreateSession (fixes XR_ERROR_GRAPHICS_REQUIREMENTS_CHECK_MISSING -50); add LOGD macro + xrSessionStateName/xrEventTypeName helpers; verbose logging throughout: loader init, extension enumeration, system properties, EGL binding, swapchain FBO status, session state transitions, pollEvents, renderFrame throttled every 300 frames, xrEndFrame result check, nativeRunFrame idle loop throttle
2026-04-19 22:27:26
app_v2/src/vr/cpp/OpenXrNative.cpp
createSessionAndSwapchains
FIX: replace PFN_xrGetGraphicsRequirementsOpenGLESKHR (undefined in this SDK version) with local typedef PFN_GetGfxReqsGLES - fixes C++ compiler error, VR debug build now green
2026-04-19 22:31:39
app_v2/build.gradle.kts
ndkVersion
Upgrade NDK 25.1.8937393 -> 27.2.12479018 (r27c) for 16 KB page size aligned libc++_shared.so (Google Play requirement Android 15+)
2026-04-19 22:34:06
app_v2/src/vr/cpp/CMakeLists.txt
openxr_native
Add target_link_options -Wl,-z,max-page-size=16384 for 16 KB LOAD segment alignment (Google Play requirement Android 15+)
2026-04-19 22:58:39
app_v2/src/vr/AndroidManifest.xml
VrPlayerActivity
Added android:launchMode=singleTask to prevent dual VrPlayerActivity instances (dual audio / dual decoder bug)
2026-04-19 22:58:42
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Added onNewIntent (singleTask recreation), early Log.e diagnostic, ExoPlayer surface clear in onPause, fixed null-safe setVideoSurface logging
2026-04-19 23:15:32
app_v2/src/vr/AndroidManifest.xml
VrPlayerActivity
Add com.oculus.supportedDevices + com.oculus.vr.focusaware to fix OpenXR broker authorization on HorizonOS v67+
2026-04-19 23:15:40
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
Increase INIT_TIMEOUT_MS 5000->12000 - xrCreateInstance takes 5.4s on cold boot
2026-04-19 23:15:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager.closeEpubBook
Catch SecurityException from WebView.loadUrl on HorizonOS/Quest where system prefs are denied
2026-04-19 23:28:47
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
X button (left controller) exits immersive; remove per-frame aspect ratio logs; add Log.e on XR session failure
2026-04-19 23:28:53
app_v2/src/vr/cpp/OpenXrNative.cpp
enumerateAndCreateInstance
Remove per-extension LOGD loop (68 lines/session); keep count summary only
2026-04-19 23:39:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity.dispatchKeyEvent
Menu button (left controller three-stripe) opens PlaybackControlDialog instead of VR overlay
2026-04-19 23:41:00
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback
Replace cardDefaultPlayer with collapsible Behaviour group; add switchResumeOnNextLaunch
2026-04-19 23:41:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
PlaybackSettingsFragment
Wire Behaviour section: collapsible group, switchResumeOnNextLaunch
2026-04-19 23:41:10
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Add resumeOnNextLaunch field (default true)
2026-04-19 23:41:10
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Add KEY_RESUME_ON_NEXT_LAUNCH: read/write resumeOnNextLaunch (default true)
2026-04-19 23:41:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Gate attemptResumePlayback on resumeOnNextLaunch setting
2026-04-19 23:58:30
.vscode/mcp.json
filesystem_ro
Replace Docker-based filesystem_ro MCP startup with a local Node read-only server
2026-04-19 23:58:30
scripts/mcp/docs-search-mcp/filesystem-ro-server.js
filesystem_ro
Add local read-only MCP server to avoid Docker dependency on Windows
2026-04-20 00:00:04
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Force-stop player on XR init failure, explicit VR exit, and onNewIntent recreation to prevent background audio
2026-04-20 00:26:00
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Fix subclass access to PlayerActivity lifecycleManager by removing invalid lateinit initialization check in VR playback stop path
2026-04-20 00:39:23
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Route audio, ordinary 2D video, and flat MONO playback in VR flavor to standard PlayerActivity; delay XR init until media classification is known
2026-04-20 00:55:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler
Route flat video and audio directly to standard player before VR launch
2026-04-20 01:08:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler
Fix: route all non-video files, including photos, to standard player to avoid unexpected immersive launch in vr flavor
2026-04-20 01:08:35
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Fix: fallback all non-video content to standard PlayerActivity so photos do not auto-enter immersive mode
2026-04-20 01:30:06
PLAN/spec_vr-panel-and-immersive.md
spec_vr-panel-and-immersive
Update VR panel/immersive spec with VR-only Disable 3D/VR setting, hidden 3D page behavior, and global routing override
2026-04-20 01:38:22
app_v2/build.gradle.kts
dependencies
Add media3-decoder-ffmpeg:1.2.1 for DTS/DTS-HD SW audio decoding
2026-04-20 01:38:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt
createPlayer
Enable EXTENSION_RENDERER_MODE_PREFER so FFmpeg audio renderer is used for unsupported codecs
2026-04-20 01:38:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
onPlayerError
Variant B: audio DecoderInit failure disables audio track and resumes video instead of skipping file
2026-04-20 01:38:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoTrackSelectionManager.kt
getAvailableAudioTracks
Mark unsupported audio tracks with warning emoji in track picker dialog
2026-04-20 01:38:22
app_v2/src/main/res/values/strings.xml
warning_audio_format_unsupported
Add EN/RU/UK string for audio format unsupported toast
2026-04-20 01:38:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt
createPlayer
Enable EXTENSION_RENDERER_MODE_PREFER so FFmpeg audio renderer is used for unsupported codecs
2026-04-20 01:38:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
onPlayerError
Variant B: audio DecoderInit failure disables audio track and resumes video without skipping file
2026-04-20 01:38:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoTrackSelectionManager.kt
getAvailableAudioTracks
Mark unsupported audio tracks with warning emoji in track picker dialog
2026-04-20 01:38:29
app_v2/src/main/res/values/strings.xml
warning_audio_format_unsupported
Add EN/RU/UK string for audio format unsupported toast
2026-04-20 01:38:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoTrackSelectionManager.kt
getAvailableAudioTracks
Mark unsupported audio tracks with warning emoji in track picker dialog
2026-04-20 01:38:32
app_v2/src/main/res/values/strings.xml
warning_audio_format_unsupported
Add EN/RU/UK strings for audio format unsupported toast
2026-04-20 01:38:35
app_v2/src/main/res/values/strings.xml
warning_audio_format_unsupported
Add EN/RU/UK strings for audio format unsupported toast
2026-04-20 01:40:25
app_v2/build.gradle.kts
media3-decoder-ffmpeg
Remove media3-decoder-ffmpeg: prebuilt Maven artifact does not include DTS decoder (patent restriction), dependency had no effect
2026-04-20 01:40:28
app_v2/src/.../PlayerSetupHelper.kt
DefaultRenderersFactory
Remove EXTENSION_RENDERER_MODE_PREFER: has no effect without FFmpeg extension on classpath
2026-04-20 01:41:20
app_v2/src/vr/AndroidManifest.xml
AndroidManifest
Phase B: remove VR intent-filter from VrPlayerActivity; add VR entry on MainActivity (panel mode fix)
2026-04-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Phase D: add disable3dVr flag (VR global kill-switch, default false)
2026-04-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Phase D: add KEY_VR_DISABLE_3D read/write for disable3dVr setting
2026-04-20 01:41:20
app_v2/src/main/res/values/strings.xml
strings
Phase D: add settings_vr_disable_3d EN strings
2026-04-20 01:41:20
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Phase D: add settings_vr_disable_3d RU strings
2026-04-20 01:41:20
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Phase D: add settings_vr_disable_3d UK strings
2026-04-20 01:41:20
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback
Phase D: add layoutDisable3dVr / switchDisable3dVr row in Behaviour section (VR-only, gone by default)
2026-04-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
PlaybackSettingsFragment
Phase D: wire switchDisable3dVr toggle (visible only in VR flavor)
2026-04-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler
Phase C: add disable3dVr kill-switch check in shouldLaunchStandardPlayer
2026-04-20 01:41:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Phase C: add disable3dVr kill-switch check in shouldUseStandardPlayer
2026-04-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Phase E: hide STEREO tab when disable3dVr=true (ARG_DISABLE_3D_VR bundle arg + newInstance factory)
2026-04-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
Phase E: read disable3dVr asynchronously and pass to PlaybackControlDialogFragment.newInstance
2026-04-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
Phase D: add nullable disable3dVr field to BackupSettings (null-safe restore from old backups)
2026-04-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
Phase D: serialize/deserialize disable3dVr in backup (null falls back to current setting)
2026-04-20 01:45:07
PLAN/spec_ffmpeg-custom-build-dts.md
spec_ffmpeg-custom-build-dts
New spec: custom FFmpeg build with DTS decoder (libdca) for Quest 3 sideload; covers build env, NDK r25c, legal risk, flavor scope, phasing 16-32h
2026-04-20 01:57:06
app_v2/proguard-rules.pro
Dropbox ProGuard rules
Replace blanket -keep com.dropbox.core.** with targeted rules - allows R8 to strip unused team/teamcommon API (GroupSummary), eliminating dex2oat ‘Method processed more than once’ warning in release builds
2026-04-20 02:11:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity.shouldAttemptResume
Block resume-on-launch for VR flavor: SUPPORT_VR_PLAYER=true skips DB resume to prevent auto-entry into immersive XR mode on app start
2026-04-20 02:21:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity.attemptResumePlayback
Block only PLAYER-type resume on VR flavor (not ALL resume); browser resume stays functional; clears stale resume state
2026-04-20 02:21:12
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity.dispatchKeyEvent
Add KEYCODE_BUTTON_B as exit fallback; make KEYCODE_BACK always exit immersive (not only when overlay visible)
2026-04-20 02:21:19
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity.dispatchKeyEvent
Add KEYCODE_BUTTON_B as exit fallback; make KEYCODE_BACK always exit immersive (not only when overlay visible)
2026-04-20 02:45:23
PLAN/spec_vr-mvp-day1.md
spec_vr-mvp-day1
Add MVP Day 1 spec: build VR flavor, deploy on Quest 3, validate panel mode + immersive 3D rendering
2026-04-20 02:50:53
PLAN/spec_vr-3d-rendering-research.md
VR Immersive Controls Spec
Added sections 11-12: Void vs Passthrough environment modes, full Quest controller mapping (OpenXR XrActionSet), implementation priorities
2026-04-20 14:32:59
PLAN/spec_vr-mvp-day1.md
VrPlayerActivity/OpenXrNative
VR Day 1 spec: verified build success, manifest, and native libs for Quest 3 validation
2026-04-20 16:43:32
PLAN/spec_ffmpeg-custom-build-dts.md
Section 16
Added extended codec scope: APE/WMA/WavPack/TTA/DSD/ATRAC3, Maven av1/vpx artifacts, player improvements (loudness, chapters, seek thumb, HDR tonemapping, ASS subs)
2026-04-20 16:54:00
PLAN/spec_ffmpeg-custom-build-dts.md
Section 16.1
Removed patent-encumbered codecs: WMA Pro, WMA Lossless (MS IP), ATRAC3 (Sony IP), RealAudio (RealNetworks IP)
2026-04-20 17:23:45
PLAN/spec_ffmpeg-custom-build-dts.md
Section 14
Resolved Q2 (build env confirmed), deferred Q3 (player improvements), expanded Q1 with DTS patent licensing details: Xperi contact, pricing info, VR-only vs store distribution risk
2026-04-20 17:28:47
PLAN/spec_ffmpeg-custom-build-dts.md
Sections 9,14.3,ADR-002,16.4
Revised DTS legal analysis: VLC precedent (500M installs, no Xperi action), EU/RU SW patents not recognized; DTS now approved for all audio flavors incl standard; updated flavor scope table and ADR-002
2026-04-20 17:39:02
PLAN/spec_ffmpeg-custom-build-dts.md
Sections 8,9,14.3,15,16.4,Phase4
Added vr-unlicensed flavor (ADB sideload fallback); two-tier VR strategy (vr=Meta Store attempt, vr-unlicensed=sideload); Malta/EU developer jurisdiction note; ADR-004; updated all matrices
2026-04-20 17:58:54
app_v2/build.gradle.kts
productFlavors / dependencies
Added vrUnlicensed flavor (ADB sideload, always DTS); ENABLE_DTS_DECODER flag per flavor; sourceSets to share src/vr/ with vrUnlicensed; AV1+VPX Maven deps; local AAR placeholder (commented)
2026-04-20 17:58:54
app_v2/src/main/java/.../player/helpers/PlayerSetupHelper.kt
createPlayer
Gate EXTENSION_RENDERER_MODE_PREFER on BuildConfig.ENABLE_DTS_DECODER; added BuildConfig import
2026-04-20 17:58:54
scripts/builders/build-ffmpeg-dts.sh
(new file)
WSL2 FFmpeg build script: DTS + APE/WMA/WavPack/TTA/DSD/Musepack + JNI bridge + AAR packaging
2026-04-20 17:58:54
PLAN/spec_ffmpeg-custom-build-dts.md
Status / Phase 4 / §12
Status updated to In Progress; Phase 4 items marked done; §12 CI item marked done
2026-04-20 18:35:21
temp/fix_ndk_symlinks.py
(new file)
Fix NDK r25c symlinks broken by Python zipfile extraction (reads external_attr, recreates real symlinks)
2026-04-20 18:35:21
temp/run_build_ffmpeg.sh
(new file)
WSL2 Phase 2-3: runs media3 build_ffmpeg.sh with DTS+extended decoders for all ABIs
2026-04-20 18:35:21
scripts/builders/build-ffmpeg-dts.sh
check_deps/build_jni_bridge
Fixed: NDK path=Linux NDK in ~/; nasm/pkg-config not needed for ARM; zip replaced by python3; JNI script path updated to libraries/decoder_ffmpeg/src/main/jni/
2026-04-20 18:49:37
temp/build_aar.py
(new file)
Windows Python script: compile media3 decoder_ffmpeg Java sources + package AAR with libffmpegJNI.so (arm64+armeabi-v7a); output app_v2/libs/fms-ffmpeg-dts.aar (4917 KB)
2026-04-20 18:49:37
app_v2/build.gradle.kts
dependencies
Enable fms-ffmpeg-dts.aar for standard/legacy/vr/vrUnlicensed flavors; comment out media3-decoder-av1/vpx (source-only, not on Maven)
2026-04-20 21:13:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Add missing init for touchZoneSetupManager and audioMetadataManager (lateinit crash fix)
2026-04-20 21:13:41
scripts/builders/build-ffmpeg-dts.sh
build-ffmpeg-dts.sh
Fix Python heredoc env var export (STAGING_DIR/AAR_PATH); fix typo Fallingeting
2026-04-20 21:36:41
app_v2/src/vr/AndroidManifest.xml
AndroidManifest(vr)
Fix empty screen on Quest 3: change MainActivity category from VR to 2D - VR category forced immersive/exclusive mode, 2D category shows correct flat panel
2026-04-20 22:20:28
PLAN/spec_browse-file-drag-reorder.md
spec
Add specification for browse file drag-to-reorder in MANUAL sort mode
2026-04-20 22:20:31
PLAN/spec_player-audio-metadata-info.md
spec
Add specification for audio metadata info fix (duration + album + sample rate)
2026-04-20 22:20:42
PLAN/spec_player-speed-range.md
spec
Add specification for extending playback speed range to 3.0x
2026-04-20 22:20:43
PLAN/spec_player-volume-control.md
spec
Add specification for volume control improvements (50%/MAX buttons, MUTE highlight)
2026-04-20 22:20:43
PLAN/spec_player-random-nav-button.md
spec
Add specification for random file navigation button in player command bar
2026-04-20 22:25:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Promote single overflow bar-capable command to command bar, hide overflow button
2026-04-20 22:27:09
app_v2/src/main/java/com/sza/fastmediasorter/core/util/MediaMetadataHelper.kt
DetailedMediaInfo
Add audioAlbum and sampleRate fields; extract METADATA_KEY_ALBUM and METADATA_KEY_SAMPLERATE in extractVideoAudioInfo
2026-04-20 22:27:10
app_v2/src/main/java/com/sza/fastmediasorter/core/util/SafUriExtractor.kt
SafUriExtractor
Add audioTitle, audioArtist, audioAlbum, sampleRate extraction in extractVideoAudioInfo; include in returned DetailedMediaInfo
2026-04-20 22:27:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileInfoDialog.kt
FileInfoDialog
displayAudioInfo: always show tvAudioDuration with placeholder instead of hiding; updateDetailedInfo: add album and sampleRate display
2026-04-20 22:27:10
app_v2/src/main/res/layout/dialog_file_info.xml
dialog_file_info
Add tvAudioAlbum and tvAudioSampleRate TextViews to audio metadata section
2026-04-20 22:27:10
app_v2/src/main/res/values/strings.xml
strings
Add audio_album_label, audio_sample_rate_label, loading_placeholder string resources
2026-04-20 22:35:16
app_v2/src/main/res/layout/item_resource.xml
item_resource
Added ivDragHandle (48x48dp, gone by default) for drag-to-reorder
2026-04-20 22:35:16
app_v2/src/main/res/layout/item_resource_grid.xml
item_resource_grid
Added ivDragHandle (40x40dp, gone by default) for drag-to-reorder in grid mode
2026-04-20 22:35:16
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceDao.kt
ResourceDao
Added updateAllDisplayOrders() transaction for batch display order persistence
2026-04-20 22:35:16
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResourceRepository.kt
ResourceRepository
Added updateResourcesDisplayOrder() interface method for drag reorder
2026-04-20 22:35:16
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
ResourceRepositoryImpl
Implemented updateResourcesDisplayOrder() - maps list index to displayOrder and calls DAO
2026-04-20 22:35:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceOrderManager.kt
ResourceOrderManager
Added saveResourceOrder() for batch reorder persistence after drag gesture
2026-04-20 22:35:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
ResourceAdapter
Added DragStartListener interface, _items shadow list, moveItem(), getDragOrderedList(), drag handle binding in both ViewHolders
2026-04-20 22:35:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
MainViewModel
Added saveResourceOrder() - persists drag order via orderManager and sets MANUAL sort mode
2026-04-20 22:35:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceItemTouchCallback.kt
ResourceItemTouchCallback
New file: ItemTouchHelper.Callback for drag-to-reorder (list+grid, handle-only drag, ADR-2 live/final split)
2026-04-20 22:35:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Wired ResourceItemTouchCallback + ItemTouchHelper + DragStartListener in setupViews()
2026-04-20 22:35:16
app_v2/src/main/res/values/strings.xml
strings
Added drag_handle_description string (EN)
2026-04-20 22:35:16
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Added drag_handle_description string (RU)
2026-04-20 22:35:16
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Added drag_handle_description string (UK)
2026-04-20 22:36:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.observeData
Call updateDragHandleVisibility when sortMode changes in state collector
2026-04-20 22:36:22
docs/FEATURES.md
FEATURES
Add drag-to-reorder manual sort feature to EN/RU/UK docs
2026-04-20 22:42:04
app_v2/src/main/res/layout-land/dialog_file_info.xml
dialog_file_info(layout-land)
Add landscape audio album and sample rate views for file info dialog
2026-04-20 22:42:08
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add RU audio album, sample rate, and loading placeholder strings for file info dialog
2026-04-20 22:42:11
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add UK audio album, sample rate, and loading placeholder strings for file info dialog
2026-04-20 22:45:43
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlannerTest.kt
CommandPanelLayoutPlannerTest
Fix single-overflow promotion test to exercise real spill-to-overflow scenario
2026-04-20 22:50:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Add random navigation button wiring and profile-based visibility
2026-04-20 22:50:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationManager.kt
PlayerNavigationManager
Add random file navigation from player command bar
2026-04-20 22:50:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Add jumpToIndex helper for non-sequential player navigation
2026-04-20 22:50:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Handle random navigation command panel callback
2026-04-20 22:50:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerUiStateCoordinator.kt
PlayerUiStateCoordinator
Disable random player navigation button for single-file lists
2026-04-20 22:50:48
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Add random navigation button to portrait player command bar
2026-04-20 22:50:48
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified
Add random navigation button to landscape player command bar
2026-04-20 22:50:48
app_v2/src/main/res/values/strings.xml
strings
Add random file accessibility string
2026-04-20 22:50:48
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add random file accessibility string
2026-04-20 22:50:48
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add random file accessibility string
2026-04-20 22:50:48
app_v2/src/main/res/drawable/ic_random_nav.xml
ic_random_nav
Add dice icon for random file navigation
2026-04-20 22:50:48
docs/FEATURES.md
FEATURES
Document random player navigation for audio and photo libraries
2026-04-20 22:50:48
docs/FEATURES_RU.md
FEATURES_RU
Document random player navigation for audio and photo libraries
2026-04-20 22:50:48
docs/FEATURES_UK.md
FEATURES_UK
Document random player navigation for audio and photo libraries
2026-04-20 22:52:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Add random navigation button to player command panel and show it only for audio/photo library profiles
2026-04-20 22:52:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationManager.kt
PlayerNavigationManager
Add random file navigation that jumps to a non-current file from the active player list
2026-04-20 22:52:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Add jumpToIndex() helper for random player navigation while preserving resume state sync
2026-04-20 22:52:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Wire random command-panel button clicks to PlayerNavigationManager
2026-04-20 22:52:18
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Add btnRandomCmd to portrait player command panel
2026-04-20 22:52:18
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified(layout-land)
Add btnRandomCmd to landscape player command panel
2026-04-20 22:52:19
app_v2/src/main/res/drawable/ic_random_nav.xml
ic_random_nav
Add random navigation icon drawable for the player command panel
2026-04-20 22:52:19
app_v2/src/main/res/values/strings.xml
strings
Add random_file_description string for the player random navigation button
2026-04-20 22:52:27
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add RU random_file_description string for the player random navigation button
2026-04-20 22:52:27
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add UK random_file_description string for the player random navigation button
2026-04-20 22:52:28
docs/FEATURES.md
FEATURES
Document random file jump button in player for audio and photo libraries
2026-04-20 22:52:28
docs/FEATURES_RU.md
FEATURES_RU
Document random file jump button in player for audio and photo libraries (RU)
2026-04-20 22:52:28
docs/FEATURES_UK.md
FEATURES_UK
Document random file jump button in player for audio and photo libraries (UK)
2026-04-20 22:55:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Extend speed range from 2.0x to 3.0x (add 2.5x, 3.0x steps)
2026-04-20 23:03:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Add 50% and MAX volume presets with mute state sync and accessibility
2026-04-20 23:03:23
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Add volume preset buttons and emphasize mute action in portrait dialog
2026-04-20 23:03:23
app_v2/src/main/res/layout-land/dialog_playback_control.xml
dialog_playback_control
Add volume preset buttons and emphasize mute action in landscape dialog
2026-04-20 23:03:23
app_v2/src/main/res/values/strings.xml
strings
Add volume preset and mute state accessibility strings
2026-04-20 23:03:23
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add volume preset and mute state accessibility strings
2026-04-20 23:03:23
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add volume preset and mute state accessibility strings
2026-04-20 23:03:23
app_v2/src/main/res/color/btn_mute_toggle_state.xml
btn_mute_toggle_state
Add selected-state tint for mute button emphasis
2026-04-20 23:04:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Reorder sort dialog options: RANDOM first, MANUAL after SIZE, TYPE below DURATION
2026-04-20 23:06:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Expose explicit sort dialog order for tests and restore DATE_TAKEN modes
2026-04-20 23:06:54
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelperTest.kt
BrowseDialogHelperTest
Add unit tests for sort dialog order completeness and priority positions
2026-04-20 23:09:39
app_v2/src/main/res/drawable/ic_sort_random.xml
ic_sort_random
Add dice icon drawable for RANDOM sort mode
2026-04-20 23:09:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortMenuManager.kt
BrowseSortMenuManager
Centralize RANDOM sort icon mapping
2026-04-20 23:09:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Show RANDOM sort mode with dice icon in sort dialog
2026-04-20 23:10:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Render RANDOM sort icon on active browse sort button
2026-04-20 23:10:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity.observeData
Refresh active sort button icon when sort mode changes
2026-04-20 23:12:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Add dedicated RANDOM reshuffle callback from sort dialog
2026-04-20 23:12:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogCallbacksImpl.kt
BrowseDialogCallbacksImpl
Delegate RANDOM reshuffle callback to BrowseViewModel
2026-04-20 23:12:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Wire RANDOM reshuffle callback in browse dialog initializer
2026-04-20 23:12:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortFilterManager.kt
BrowseSortFilterManager
Add seed-aware RANDOM reshuffle handling with non-repeat fallback
2026-04-20 23:12:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/filelist/BrowseFileListManager.kt
BrowseFileListManager
Make RANDOM sorting deterministic when a seed is provided
2026-04-20 23:12:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Expose reshuffleRandom action for repeated RANDOM selections
2026-04-20 23:12:51
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/filelist/BrowseFileListManagerTest.kt
BrowseFileListManagerTest
Add unit test for seed-based RANDOM browse sorting
2026-04-20 23:37:50
scripts/builders/build-ffmpeg-dts.sh
build-ffmpeg-dts.sh
Fix 16 KB page alignment: NDK r25c -> r27c, add -Wl,-z,max-page-size=16384 to FFmpeg ldflags and JNI bridge APP_LDFLAGS
2026-04-20 23:37:50
app_v2/build.gradle.kts
dependencies
Update fms-ffmpeg-dts.aar comment: note NDK r27c + 16 KB flag requirement
2026-04-20 23:41:48
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
SortMode
Reorder sort menu: RANDOM to top, MANUAL after SIZE, TYPE below DURATION
2026-04-20 23:43:01
app_v2/src/main/res/drawable/ic_sort_random.xml
ic_sort_random
Redesign: filled dice body with 3 diagonal pip cutouts (evenOdd), replaces thin outline style
2026-04-20 23:43:01
app_v2/src/main/res/drawable/ic_random_nav.xml
ic_random_nav
Redesign: filled dice body with 3 diagonal pip cutouts (evenOdd), replaces scanning-target shape
2026-04-21 00:08:59
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Pin apiVersion to XR_MAKE_VERSION(1,0,34): Meta Quest runtime 1.1.x does not expose xrGetGraphicsRequirementsOpenGLESKHR when apiVersion>=1.1.0 (result=-7), causing XR session init failure
2026-04-21 00:24:20
scripts/builders/build-ffmpeg-dts.sh
build-ffmpeg-dts.sh
Replace unzip dependency with Python AAR extraction fallback and update header to r27c for 16 KB rebuilds
2026-04-21 00:24:30
PLAN/spec_player-print-button.md
spec_player-print-button
Create spec: Print button in player command panel (portrait+landscape, PDF/TEXT/IMAGE/GIF, local+remote)
2026-04-21 00:25:17
PLAN/spec_translate-button-badge-restore.md
spec
Add spec X.14: restore language badge icon on translation buttons (PDF/TXT/EPUB/Image)
2026-04-21 00:28:20
app_v2/build.gradle.kts
dependencies/flavors
Temporarily remove stale non-16KB fms-ffmpeg-dts.aar from standard/legacy/vr and keep it only in vrUnlicensed until rebuilt with 16 KB alignment
2026-04-21 00:28:33
dev/TASK_VR_3D_IMMERSIVE_INVESTIGATION_2026-04-21.md
TASK_VR_3D_IMMERSIVE_INVESTIGATION_2026-04-21
Log investigation doc update for VR 3D immersive issue research
2026-04-21 00:28:35
PLAN/spec_vr-3d-image-immersive-handoff.md
spec_vr-3d-image-immersive-handoff
Log VR 3D immersive handoff spec update
2026-04-21 00:28:37
temp/vr_3d_immersive_failure_research_2026-04-21.md
vr_3d_immersive_failure_research_2026-04-21
Log temporary VR 3D immersive failure research artifact for traceability
2026-04-21 00:36:32
PLAN/spec_ffmpeg-dts-16kb-rebuild.md
spec
Add specification for COMPLIANCE.16KB permanent FFmpeg DTS 16 KB rebuild and re-enable workflow
2026-04-21 00:39:30
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrLaunchRoute.kt
VrLaunchRoute
Add VR 3D image immersive routing with explicit fallback errors
2026-04-21 00:39:32
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
VrRouteDecisionHelper
Decide VR 3D image immersive routing and explicit fallback errors
2026-04-21 00:39:34
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Handle VR 3D image immersive routing explicit fallback errors
2026-04-21 00:39:36
app_v2/src/test/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelperTest.kt
VrRouteDecisionHelperTest
Add tests for VR 3D image immersive routing and explicit fallback errors
2026-04-21 00:39:38
app_v2/src/main/res/values/strings.xml
strings
Add strings for VR 3D image immersive routing fallback errors
2026-04-21 00:39:40
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add RU strings for VR 3D image immersive routing fallback errors
2026-04-21 00:39:43
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add UK strings for VR 3D image immersive routing fallback errors
2026-04-21 00:39:47
docs/FEATURES.md
FEATURES
Document VR 3D image immersive routing and explicit fallback errors
2026-04-21 00:39:50
docs/FEATURES_RU.md
FEATURES_RU
Document VR 3D image immersive routing and explicit fallback errors
2026-04-21 00:40:07
docs/FEATURES_UK.md
FEATURES_UK
Document VR 3D image immersive routing and explicit fallback errors
2026-04-21 00:41:14
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Fix missing R import for VR immersive fallback string resources
2026-04-21 00:43:14
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelperTest.kt
VrRouteDecisionHelperTest
Fix MediaFile test fixture for VR route decision helper compile
2026-04-21 00:45:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LanguageBadgeDrawable.kt
LanguageBadgeDrawable
Default forcedColor changed to Color.WHITE - ensures badge text is visible on dark player background
2026-04-21 00:45:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Fix translation button badge: clear imageTintList before setImageDrawable; replace imageTintList with alpha for active/inactive state
2026-04-21 00:45:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Fix translation button badge: replace imageTintList solid-color with alpha in toggleTranslation and forceTranslate
2026-04-21 00:45:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Fix translation button badge: add alpha state sync in updateTranslateButtonIcon alongside existing imageTintList=null
2026-04-21 00:45:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationButtonManager.kt
TranslationButtonManager
Set alpha=0.55f on translation buttons after icon update so inactive state is visible before first toggle
2026-04-21 00:45:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Change PRINT command barCapable=true: now appears on command bar when space permits, otherwise spills to overflow
2026-04-21 00:45:34
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Add btnPrintCmd ImageButton to portrait adaptive command bar (after btnSaveFrameCmd)
2026-04-21 00:45:34
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified
Add btnPrintCmd ImageButton to landscape command bar (after btnSaveFrameCmd)
2026-04-21 00:45:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
PlayerBindingSafeViews
Register val btnPrintCmd for safe view access
2026-04-21 00:45:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Wire btnPrintCmd: click listener, getOverflowableButtons, barViewForCommand, landscape visibility
2026-04-21 00:45:34
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
SendResourcesToWatchUseCaseTest
Fix pre-existing build error: add updateResourcesDisplayOrder stub to FakeResourceRepository
2026-04-21 00:45:34
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelperTest.kt
VrRouteDecisionHelperTest
Move from src/test/ to src/testVr/ - fix pre-existing compilation error (vr source set not in standard flavor)
2026-04-21 00:45:34
docs/FEATURES.md
FEATURES
Add Print bullet in PDF Viewer section: portrait/landscape, PDF/TEXT/IMAGE, remote file caching
2026-04-21 00:45:34
docs/FEATURES_RU.md
FEATURES_RU
Add Print bullet in PDF Viewer section (RU)
2026-04-21 00:45:34
docs/FEATURES_UK.md
FEATURES_UK
Add Print bullet in PDF Viewer section (UK)
2026-04-21 00:45:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Change PRINT barCapable to true: bar-first, overflow on space shortage
2026-04-21 00:45:49
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Add btnPrintCmd ImageButton to portrait adaptive command bar
2026-04-21 00:45:49
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified_land
Add btnPrintCmd ImageButton to landscape command bar
2026-04-21 00:45:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
PlayerBindingSafeViews
Register val btnPrintCmd for safe view access
2026-04-21 00:45:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Wire btnPrintCmd: click, getOverflowableButtons, barViewForCommand, landscape visibility
2026-04-21 00:45:49
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
SendResourcesToWatchUseCaseTest
Fix pre-existing: add updateResourcesDisplayOrder stub to FakeResourceRepository
2026-04-21 00:45:49
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelperTest.kt
VrRouteDecisionHelperTest
Fix pre-existing: move to testVr source set (not compiled for standard flavor)
2026-04-21 00:45:49
docs/FEATURES.md
FEATURES
Add Print bullet in PDF Viewer section: portrait+landscape, PDF/TEXT/IMAGE, remote caching
2026-04-21 00:45:49
docs/FEATURES_RU.md
FEATURES_RU
Add Print bullet in PDF Viewer section (RU)
2026-04-21 00:45:49
docs/FEATURES_UK.md
FEATURES_UK
Add Print bullet in PDF Viewer section (UK)
2026-04-21 00:45:57
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Add btnPrintCmd portrait bar
2026-04-21 00:45:57
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified
Add btnPrintCmd landscape bar
2026-04-21 00:45:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
PlayerBindingSafeViews
Register btnPrintCmd
2026-04-21 00:45:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Wire btnPrintCmd: click, overflow list, barView, landscape visibility
2026-04-21 00:45:57
docs/FEATURES.md
FEATURES
Add Print feature bullet (EN)
2026-04-21 00:45:57
docs/FEATURES_RU.md
FEATURES_RU
Add Print feature bullet (RU)
2026-04-21 00:45:57
docs/FEATURES_UK.md
FEATURES_UK
Add Print feature bullet (UK)
2026-04-21 01:21:01
app_v2/libs/fms-ffmpeg-dts.aar
app_v2
Rebuilt fms-ffmpeg-dts.aar with NDK r25c + -Wl,-z,max-page-size=16384. All LOAD segments now Align=0x4000 (16 KB). arm64-v8a only. libffmpegJNI.so verified in standard debug APK. DTS restored in standard/legacy/vr/vrUnlicensed flavors.
2026-04-21 01:21:05
app_v2/build.gradle.kts
app_v2
Restored ENABLE_DTS_DECODER=true for standard/legacy/vr flavors. Added standardImplementation/legacyImplementation/vrImplementation for fms-ffmpeg-dts.aar. Removed temporary 16 KB compliance fallback comments.
2026-04-21 01:43:38
app_v2/src/vr/cpp/OpenXrNative.cpp
createSessionAndSwapchains
xrGetGraphicsRequirementsOpenGLESKHR lookup failure treated as non-fatal (Meta Quest HorizonOS v69+ workaround) - was crashing XR session init with result=-7
2026-04-21 01:43:43
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
stereoMode observer
Fixed race: AUTO/UNKNOWN stereoMode no longer directly resolves to MONO in renderer - defers to resolvePlaybackRoute so filename-detected VR stereo is not overridden
2026-04-21 01:50:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
fallbackToFlatCinemaMode
XR session failure now falls back to flat 2D panel (keeps playback, shows toast) instead of stopping and closing the activity - allows user to access settings to fix stereo format
2026-04-21 01:50:44
app_v2/src/main/res/values/strings.xml
vr_xr_fallback_flat_mode
Add EN string for flat cinema mode fallback toast
2026-04-21 01:50:44
app_v2/src/main/res/values-ru/strings.xml
vr_xr_fallback_flat_mode
Add RU string for flat cinema mode fallback toast
2026-04-21 01:50:44
app_v2/src/main/res/values-uk/strings.xml
vr_xr_fallback_flat_mode
Add UK string for flat cinema mode fallback toast
2026-04-21 02:06:30
app_v2/src/vr/cpp/OpenXrNative.cpp
createSessionAndSwapchains
Add 3-step fallback for xrGetGraphicsRequirementsOpenGLESKHR: instance-procaddr -> XR_NULL_HANDLE -> dlsym(libopenxr_loader.so). Fixes xrCreateSession -50 on Meta Quest HorizonOS v69+
2026-04-21 02:13:53
app_v2/build.gradle.kts
vr cmake arguments
Add -DFMS_BUILD_REVISION=2 to force new CMake config hash (avoids stale .tmp lock from aborted builds)
2026-04-21 02:13:56
app_v2/build.gradle.kts
vr cmake arguments
Add -DFMS_BUILD_REVISION=2 to force new CMake config hash (avoids stale .tmp lock from aborted builds)
2026-04-21 02:20:23
app_v2/src/vr/cpp/OpenXrNative.cpp
enumerateAndCreateInstance
Bump apiVersion 1.0.34→1.1.0: loader spec 1.1 skips -50 requirements check for apiVersion>=1.1.0
2026-04-21 02:23:05
app_v2/build.gradle.kts
vr cmake arguments
Increment FMS_BUILD_REVISION=2→3 (force new CMake hash dir, avoid stale .tmp lock)
2026-04-21 02:23:05
scripts/builders/build-vr-debug.ps1
build-vr-debug
Add pre-build cleanup: Remove-Item all *.tmp in cxx/Debug before Gradle to prevent stale lock errors
2026-04-21 02:43:20
PLAN/spec_vr-panel-window-size.md
spec_vr-panel-window-size
New spec: VR panel default large landscape window + size persistence for all flavors
2026-04-21 02:49:01
app_v2/src/main/java/com/sza/fastmediasorter/core/xr/XrDeviceDetector.kt
XrDeviceDetector
New: runtime VR/XR headset detector (headtracking feature + FEATURE_VR_MODE_HIGH_PERFORMANCE + manufacturer fallback), main source set, all flavors
2026-04-21 02:49:01
app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrPanelSizePreference.kt
VrPanelSizePreference
New: SharedPreferences-backed VR panel size persistence (DEFAULT 1920x1080, MIN 800x400)
2026-04-21 02:49:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Apply VR panel window size (1920x1080 landscape) before super.onCreate; persist size on onConfigurationChanged
2026-04-21 02:49:01
app_v2/src/vr/AndroidManifest.xml
MainActivity <layout>
Add as first-launch fallback for Quest panel mode
2026-04-21 02:49:01
app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrPanelSizePreferenceTest.kt
VrPanelSizePreferenceTest
New: unit tests for save/load/hasUserSize/MIN guard
2026-04-21 02:49:01
app_v2/src/test/java/com/sza/fastmediasorter/core/xr/XrDeviceDetectorTest.kt
XrDeviceDetectorTest
New: unit tests for headset detection via features
2026-04-21 02:49:53
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Fix OpenXR GLES requirements lookup: use correct xrGetOpenGLESGraphicsRequirementsKHR symbol instead of swapped-name lookup
2026-04-21 02:49:54
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Reset xrInitializationRequested after flat fallback so stereo mode changes can retry XR init
2026-04-21 02:49:54
app_v2/src/vr/AndroidManifest.xml
AndroidManifest(vr)
Correct OpenXR GLES requirements function name in Quest-specific runtime comments
2026-04-21 03:03:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Fix VR window resize: remove fixed window.attributes.width/height (was locking HorizonOS panel resize), keep only requestedOrientation=LANDSCAPE
2026-04-21 03:03:37
app_v2/src/main/AndroidManifest.xml
MainActivity <layout>
Add for all flavors on Quest, add screenLayout to configChanges
2026-04-21 03:12:56
scripts/utils/search-log.ps1
search-log
Add auto-detection and native support for all 3 log formats: LOGCAT (standard), JSON (.logcat AS export), TIMBER (device export). No conversion step needed.
2026-04-21 03:12:56
scripts/utils/convert-log.ps1
convert-log
New: standalone log format converter - normalizes JSON .logcat and Timber device exports to standard logcat text for archival or grep.
2026-04-21 03:12:56
.github/prompts/log-reader.prompt.md
log-reader skill
Expand skill: add Format Detection section with full spec of all 3 formats (LOGCAT/JSON/TIMBER), format-specific analysis notes, convert-log.ps1 usage, updated auto-summary procedure.
2026-04-21 03:13:00
scripts/utils/search-log.ps1
search-log
Add auto-detection and native support for all 3 log formats: LOGCAT, JSON (.logcat AS export), TIMBER (device export)
2026-04-21 03:13:03
scripts/utils/convert-log.ps1
convert-log
New script: standalone log format converter - normalizes JSON .logcat and Timber device exports to standard logcat text
2026-04-21 03:13:03
.github/prompts/log-reader.prompt.md
log-reader skill
Expand skill with Format Detection section (LOGCAT/JSON/TIMBER specs), format-specific notes, convert-log usage
2026-04-21 03:13:09
scripts/utils/convert-log.ps1
convert-log
New: standalone log format converter for JSON .logcat and Timber device exports
2026-04-21 03:13:09
.github/prompts/log-reader.prompt.md
log-reader skill
Expand skill: Format Detection section for all 3 log types, format-specific analysis notes, convert-log usage
2026-04-21 10:26:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
AdapterThumbnailLoader
Wave 3: extracted unified thumbnail loading from MediaFileAdapter (List+Grid ViewHolders)
2026-04-21 10:26:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterFileInfoFormatter.kt
AdapterFileInfoFormatter
Wave 3: extracted text formatting helpers from ListViewHolder
2026-04-21 10:26:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter
Wave 3: delegate thumbnail loading to AdapterThumbnailLoader, text formatting to AdapterFileInfoFormatter
2026-04-21 11:18:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt
GeneralSettingsSectionsHelper
Extracted expandable section logic from GeneralSettingsFragment
2026-04-21 11:19:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsResetHelper.kt
GeneralSettingsResetHelper
Extracted reset/SMB-connection helpers from GeneralSettingsFragment
2026-04-21 11:19:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt
GeneralSettingsLogHelper
Extracted log/version-info helpers from GeneralSettingsFragment
2026-04-21 11:19:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsPermissionsHelper.kt
GeneralSettingsPermissionsHelper
Extracted permission button logic from GeneralSettingsFragment
2026-04-21 11:19:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsImportExportHelper.kt
GeneralSettingsImportExportHelper
Extracted settings import/export logic from GeneralSettingsFragment
2026-04-21 11:19:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCredentialHelper.kt
GeneralSettingsCredentialHelper
Extracted test-credential import logic from GeneralSettingsFragment
2026-04-21 11:19:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCacheHelper.kt
GeneralSettingsCacheHelper
Extracted cache management logic from GeneralSettingsFragment
2026-04-21 11:19:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsBackupHelper.kt
GeneralSettingsBackupHelper
Extracted backup/restore UI logic from GeneralSettingsFragment
2026-04-21 11:19:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt
GeneralSettingsObserversHelper
Extracted settings/sync state observers from GeneralSettingsFragment
2026-04-21 11:19:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
GeneralSettingsViewSetupHelper
Extracted full setupViews body (switches, spinners, buttons) from GeneralSettingsFragment
2026-04-21 11:19:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Wave 3: decomposed 2358-line fragment to 209 lines via 10 helper classes
2026-04-21 11:51:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Wave 3: extracted AudioInfoDisplayHelper, ImagePreloadHelper, AudioCoverArtLoader; reduced 2241->1305 lines
2026-04-21 11:51:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioInfoDisplayHelper.kt
AudioInfoDisplayHelper
NEW: extracted from ImageLoadingManager - audio info overlay (metadata line, file-info, ExoPlayer format)
2026-04-21 11:51:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImagePreloadHelper.kt
ImagePreloadHelper
NEW: extracted from ImageLoadingManager - adjacent image preloading with PriorityPrefetchQueue
2026-04-21 11:51:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt
AudioCoverArtLoader
NEW: extracted from ImageLoadingManager - cover art loading (embedded/ExoPlayer/online search/cache)
2026-04-21 11:51:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Remove internal preloadJobs map (ownership moved to ImagePreloadHelper)
2026-04-21 11:51:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Remove preloadJobs arg from ImageLoadingManager construction
2026-04-21 11:55:36
PLAN/spec_vr-panel-window-size.md
spec_vr-panel-window-size
Archived to temp/spec_done - implementation complete
2026-04-21 11:58:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
VrRouteDecisionHelper
Fix flat-stereo routing: only isSpherical triggers immersive; SBS/OU stays in panel per spec ADR-10
2026-04-21 11:58:22
PLAN/spec_vr-master.md
spec_vr-master
Update §3 Implemented: panel/immersive routing, manifest, xrGfxReqs fix, disable3dVr, dialog gate, controller keys
2026-04-21 12:04:20
PLAN/spec_ffmpeg-custom-build-dts.md
spec
Marked Complete: Phases 1-3 done (AAR built NDK r25c+16KB), Phase 4 code done; hardware tests deferred; archived to temp/spec_done/
2026-04-21 12:04:27
PLAN/spec_ffmpeg-dts-16kb-rebuild.md
spec
Marked Complete: NDK r25c+max-page-size=16384, all LOAD Align=0x4000, DTS restored all flavors; archived to temp/spec_done/
2026-04-21 12:49:39
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
VrRouteDecisionHelper
Restored route: stereoscopic flat SBS/OU must enter immersive (Quest panel is monoscopic)
2026-04-21 12:49:39
PLAN/spec_vr-master.md
spec_vr-master
Updated ADR: only plain 2D falls back to panel; any stereo/spherical routes to immersive
2026-04-21 12:49:39
scripts/utils/synth_vr_test_media.py
synth_vr_test_media
New: PIL-based synthesizer producing 11 StereoMode test patterns under test_media/3dvr/
2026-04-21 12:49:39
scripts/utils/setup_test_media_vr.ps1
setup_test_media_vr
New: VR counterpart of setup_test_media.ps1 that pushes 3DVR sweep to headset with manifest
2026-04-21 12:49:39
app_v2/src/debug/java/com/sza/fastmediasorter/domain/usecase/IntegrationTestRunner.kt
IntegrationTestRunner
Added vr-only 3DVR sweep section: manifest presence, readability, routing, hints, coverage
2026-04-21 12:49:39
app_v2/src/debug/java/com/sza/fastmediasorter/ui/settings/IntegrationTestDialog.kt
IntegrationTestDialog
Wired chipThreeDVr with visibility gated on BuildConfig.SUPPORT_VR_PLAYER
2026-04-21 12:49:39
app_v2/src/main/res/layout/dialog_integration_test.xml
dialog_integration_test
Added 3DVR sweep chip (hidden by default; shown only in vr flavor)
2026-04-21 12:56:55
PLAN/spec_adaptive-playback-strategy.md
spec
Rewrite adaptive playback spec: pre-cache seconds formula + visible progress indicator
2026-04-21 13:11:47
PLAN/spec_adaptive-playback-strategy.md
spec
Physics-based pre-cache formula (v2) + NOT_VIABLE offload to Downloads/FMS/streaming + cleanup flow
2026-04-21 14:32:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Decompose 2074→405 lines: extract ConnectionManager, ScanManager, FormManager
2026-04-21 14:32:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
New: cloud auth (GDrive/Dropbox/OneDrive), SMB/SFTP connection test, account picker, dialog helpers
2026-04-21 14:32:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceScanManager.kt
AddResourceScanManager
New: local folder picker, SAF, folder browser, path selection, SSH key loading
2026-04-21 14:32:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt
AddResourceFormManager
New: profile presets, checkbox interactions, collapsible sections, media type init, SMB/SFTP resource builders
2026-04-21 16:14:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PrefetchCacheMultiplier.kt
PrefetchCacheMultiplier
Created: LESS/AUTO/MORE enum with DEFAULT=AUTO and fromName helper for pre-cache duration override
2026-04-21 16:14:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PrefetchPlan.kt
PrefetchPlan + Protocol + StreamViabilityState + PrefetchDerivation
Created domain models for adaptive pre-cache strategy (spec §5)
2026-04-21 16:14:39
app_v2/src/main/java/com/sza/fastmediasorter/core/util/DeviceCapabilityProbe.kt
DeviceCapabilityProbe
Created singleton that reports cache byte budget (min of heap15%, storage 25%, 256MB cap) + MemoryTier
2026-04-21 16:15:08
app_v2/src/main/java/com/sza/fastmediasorter/domain/playback/PrefetchFormula.kt
PrefetchFormula
Created: pure physics-based pre-cache formula targetSec=safetyMargin/(1-bitrate/speed), with viability thresholds 0.7/0.9 and device+file clamps
2026-04-21 16:15:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchProgressTracker.kt
PrefetchProgressTracker
Created: Player.Listener that polls bufferedPosition at 4Hz and emits escalation events on 2nd/4th stall (+0.1/+0.2 ratio inflation)
2026-04-21 16:15:08
app_v2/src/test/java/com/sza/fastmediasorter/domain/playback/PrefetchFormulaTest.kt
PrefetchFormulaTest
Added 21 unit tests covering the 7 worked examples from spec §5.4 plus viability/device/file/multiplier boundaries
2026-04-21 16:15:08
app_v2/src/test/java/com/sza/fastmediasorter/core/util/DeviceCapabilityProbeTest.kt
DeviceCapabilityProbeTest
Added Robolectric invariant tests (non-negative, <= absolute cap, <= heap and storage fractions)
2026-04-21 16:15:08
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchProgressTrackerTest.kt
PrefetchProgressTrackerTest
Added 14 coroutine tests for markReady/recordStall/escalation/polling/attach/detach behaviour
2026-04-21 16:18:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
Decompose 1827 -> 554 lines (-70%); extract 6 coordinators + bridge + finalizer (Smb/SftpFtp/SftpKey/Virtual/NetworkScan)
2026-04-21 16:19:56
PLAN/spec_decompose-giant-files.md
spec_decompose-giant-files
Mark AddResourceViewModel complete (1827 -> 554); record 7 new helper files; update Wave 4 queue and sprint plan
2026-04-21 16:21:17
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/StreamingCacheEntry.kt
StreamingCacheEntry
Room entity for streaming-offload cache with index on lastPlayedAt
2026-04-21 16:21:24
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/StreamingCacheDao.kt
StreamingCacheDao
DAO for streaming cache (lookup, upsert, touch, prune, observe)
2026-04-21 16:21:30
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
Bumped to v24; added StreamingCacheEntry + MIGRATION_23_24
2026-04-21 16:21:37
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
Registered MIGRATION_23_24 and StreamingCacheDao provider
2026-04-21 16:21:43
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/StreamingCacheRepository.kt
StreamingCacheRepository
Domain interface for streaming-offload cache per spec 5.7
2026-04-21 16:21:50
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/StreamingCacheRepositoryImpl.kt
StreamingCacheRepositoryImpl
Repository impl; SHA-256 hash PK; content-URI vs File split for scoped storage
2026-04-21 16:21:57
app_v2/src/main/java/com/sza/fastmediasorter/core/di/RepositoryModule.kt
RepositoryModule
Bound StreamingCacheRepositoryImpl to StreamingCacheRepository
2026-04-21 16:24:55
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/StreamOffloadUseCase.kt
StreamOffloadUseCase
Downloads stream-offload copy via SMB/SFTP/FTP/Cloud; Flow; free-space gate; partial cleanup; DB record
2026-04-21 16:26:37
app_v2/src/main/java/com/sza/fastmediasorter/worker/StreamingCacheStartupGcWorker.kt
StreamingCacheStartupGcWorker
Startup HiltWorker: verifyAndPrune plus TTL eviction of stream-offload cache entries
2026-04-21 16:26:40
app_v2/src/main/java/com/sza/fastmediasorter/worker/WorkManagerScheduler.kt
WorkManagerScheduler
Added scheduleStreamingCacheGc() OneTimeWork enqueue with unique-name KEEP dedup
2026-04-21 16:26:44
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Invoke scheduleStreamingCacheGc() on startup maintenance path
2026-04-21 16:29:09
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/StreamingCacheCleanupMode.kt
StreamingCacheCleanupMode
New enum for Ask/AutoDelete/AutoKeep cleanup policy
2026-04-21 16:29:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Added prefetchCacheMultiplier/streamingCacheCleanupMode/streamingCacheTtlDays fields
2026-04-21 16:29:17
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Persist prefetch multiplier, streaming cleanup mode, streaming TTL days
2026-04-21 16:30:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchPolicyManager.kt
PrefetchPolicyManager
Gathers runtime inputs (speed, device budget, user multiplier, protocol) and delegates to PrefetchFormula
2026-04-21 16:30:43
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
ConnectionThrottleManager
Exposed getLastSpeedMbps(resourceKey) for PrefetchPolicyManager consumption
2026-04-21 16:38:18
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/OffloadModels.kt
OffloadOffer, CleanupPromptRequest
VM-facing DTOs for stream offload offer dialog and local-copy cleanup prompt (C.3)
2026-04-21 16:38:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Expose prefetchPlan/offloadOffer/offloadProgress/cleanupPrompt flows + accept/decline/cancel/switchToLocal/requestCleanupIfNeeded methods (C.3)
2026-04-21 16:39:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Add prefetchProgress pass-through StateFlow + bindPrefetchTracker/unbindPrefetchTracker (C.3)
2026-04-21 16:42:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchLoadControlFactory.kt
PrefetchLoadControlFactory
Shared LoadControl builder that accepts PrefetchPlan, falls back to legacy per-protocol constants (C.4)
2026-04-21 16:42:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Add activePrefetchPlan field + setPrefetchPlan setter (C.4)
2026-04-21 16:42:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt
PlayerSetupHelper
Route createPlayer LoadControl through PrefetchLoadControlFactory (C.4)
2026-04-21 16:42:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
SmbPlaybackHelper
LoadControl via PrefetchLoadControlFactory (C.4)
2026-04-21 16:42:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
SftpPlaybackHelper
LoadControl via PrefetchLoadControlFactory (C.4)
2026-04-21 16:42:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
FtpPlaybackHelper
LoadControl via PrefetchLoadControlFactory (C.4)
2026-04-21 16:42:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt
CloudPlaybackHelper
LoadControl via PrefetchLoadControlFactory with cloud defaults (C.4)
2026-04-21 16:51:38
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
FileOperationType
Added ARCHIVE enum value for destination-picker-only mode (captures picked folder without running an operation)
2026-04-21 16:51:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
FileOperationDestinationDialog
Support ARCHIVE mode: archiving header string, hide Select Folder button, early-return after onDestinationSelected
2026-04-21 16:51:56
app_v2/src/main/res/values/strings.xml
strings
Added archiving_n_files_from_folder (EN) for ARCHIVE destination picker
2026-04-21 16:52:00
app_v2/src/main/res/values-ru/strings.xml
strings
Added archiving_n_files_from_folder (RU)
2026-04-21 16:52:04
app_v2/src/main/res/values-uk/strings.xml
strings
Added archiving_n_files_from_folder (UK)
2026-04-21 16:52:09
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
Added action_archive item between action_delete_by_size and action_create_folder
2026-04-21 16:52:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Handle action_archive (hidden for non-local, disabled when no selection); honor isDestinationsFull for add_to_receivers visibility
2026-04-21 16:52:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Wire archive-menu flow: pre-fetch isDestinationsFull, open destination picker in ARCHIVE mode, hand chosen path to archiveDialogManager.showArchiveConfigurationDialog
2026-04-21 16:52:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseErrorDisplayManager.kt
BrowseErrorDisplayManager
Exhaustive-when fix for new FileOperationType.ARCHIVE (no undo snackbar for picker-only type)
2026-04-21 16:52:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/undo/BrowseUndoManager.kt
BrowseUndoManager
Exhaustive-when fix for FileOperationType.ARCHIVE (bail out in saveOperation and undoLastOperation)
2026-04-21 16:52:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/UndoOperationManager.kt
UndoOperationManager
Exhaustive-when fix for FileOperationType.ARCHIVE (empty description for picker-only type)
2026-04-21 17:31:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Wire prefetch settings observer + inject StreamingCacheRepository + add prefetchHelper
2026-04-21 17:31:48
app_v2/src/main/res/layout-land/fragment_settings_general.xml
layout-land/fragment_settings_general
Add prefetch cache / streaming cleanup / TTL dropdowns + clear button (landscape)
2026-04-21 17:31:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
SettingsSearchIndex
Register 4 new prefs: prefetch_cache, streaming_cleanup, streaming_ttl, clear_streaming_cache
2026-04-21 17:31:48
app_v2/src/main/res/values/strings.xml
strings
Add Phase D strings: prefetch cache, streaming TTL/cleanup, offload dialog, cleanup prompt (EN)
2026-04-21 17:31:48
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add Phase D strings RU: prefetch cache, streaming TTL/cleanup, offload dialog, cleanup prompt
2026-04-21 17:31:48
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add Phase D strings UK: prefetch cache, streaming TTL/cleanup, offload dialog, cleanup prompt
2026-04-21 17:31:48
maestro/smoke/video_prefetch_indicator.yaml
video_prefetch_indicator
Add smoke flow: prefetch overlay pill appears and auto-dismisses during network video
2026-04-21 17:31:48
maestro/critical/video_offload_flow.yaml
video_offload_flow
Add critical flow: full offload accept + progress + cleanup prompt path
2026-04-21 17:31:48
docs/FEATURES.md
FEATURES
Document adaptive pre-cache playback strategy feature (EN)
2026-04-21 17:31:48
docs/FEATURES_RU.md
FEATURES_RU
Document adaptive pre-cache playback strategy feature (RU)
2026-04-21 17:31:48
docs/FEATURES_UK.md
FEATURES_UK
Document adaptive pre-cache playback strategy feature (UK)
2026-04-21 17:33:38
app_v2/src/main/res/values/strings.xml
strings
Add missing Phase D strings: prefetch overlay pill, offload dialog row labels (EN)
2026-04-21 17:33:38
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add missing Phase D strings: prefetch overlay pill, offload dialog row labels (RU)
2026-04-21 17:33:38
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add missing Phase D strings: prefetch overlay pill, offload dialog row labels (UK)
2026-04-21 17:42:59
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PrefetchCacheMultiplier.kt
PrefetchCacheMultiplier
Add comment: LESS side-effect hides overlay and suppresses offload offer
2026-04-21 17:42:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/views/PrefetchOverlayView.kt
PrefetchOverlayView
Add isOverlayEnabled flag; update/showLocalCopyMode guarded by it
2026-04-21 17:42:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Expose prefetchCacheMultiplier StateFlow for overlay gate in PlayerPrefetchManager
2026-04-21 17:42:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerPrefetchManager.kt
PlayerPrefetchManager
Observe prefetchCacheMultiplier; gate overlay and offload offer when LESS
2026-04-21 17:42:59
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
Add helperText to tilPrefetchCache (portrait)
2026-04-21 17:42:59
app_v2/src/main/res/layout-land/fragment_settings_general.xml
layout-land/fragment_settings_general
Add helperText to tilPrefetchCache (landscape)
2026-04-21 17:42:59
app_v2/src/main/res/values/strings.xml
strings
Add pref_prefetch_cache_helper EN
2026-04-21 17:42:59
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add pref_prefetch_cache_helper RU
2026-04-21 17:42:59
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add pref_prefetch_cache_helper UK
2026-04-21 17:57:30
app_v2/src/main/res/values/themes.xml
Theme.FastMediaSorter.Transparent
Add transparent theme for ReceiveShareActivity
2026-04-21 17:57:30
app_v2/src/main/res/values/strings.xml
receive_share_*
Add receive_share strings for share receiver UI
2026-04-21 17:57:30
app_v2/src/main/AndroidManifest.xml
ReceiveShareActivity, StandaloneTextSender
Redirect ACTION_SEND aliases to ReceiveShareActivity; add StandaloneTextSender alias; register ReceiveShareActivity
2026-04-21 17:57:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerManager.kt
sendAliasesForFlavor
Include .StandaloneTextSender in share receiver alias list
2026-04-21 17:57:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
New: intercept ACTION_SEND intents, cache streams/text to temp, show Copy-to dialog
2026-04-21 22:19:24
app_v2/build.gradle.kts
android{}
Suppress DEPRECATION on android{} block (newDsl=false locked by kapt); srcDirs() -> srcDir() for vrUnlicensed sourceSet
2026-04-21 22:19:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
onConfigurationChanged
Move @Suppress(DEPRECATION) to actual deprecated API call line (defaultDisplay.getRealSize)
2026-04-21 22:19:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt
NowPlayingManager.miniBar
Remove dead null-check on non-nullable miniNowPlayingBar binding; remove unused ViewGroup import
2026-04-21 22:44:03
PLAN/spec_dedup-shared-utils.md
spec
Add specification for IV.3 - Eliminate Code Duplication
2026-04-21 23:16:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/CloudFolderItem.kt
CloudFolderItem
Extract CloudFolderItem to standalone file (was in GoogleDriveFolderPickerViewModel)
2026-04-21 23:16:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/CloudFolderItemBinding.kt
CloudFolderItemBinding
Add sealed binding abstraction for 3 cloud folder adapters
2026-04-21 23:16:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/CloudFolderAdapter.kt
CloudFolderAdapter
Consolidate GoogleDrive/Dropbox/OneDrive adapters into one generic adapter
2026-04-21 23:16:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt
GoogleDriveFolderPickerActivity
Switch to CloudFolderAdapter
2026-04-21 23:16:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt
DropboxFolderPickerActivity
Switch to CloudFolderAdapter
2026-04-21 23:16:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt
OneDriveFolderPickerActivity
Switch to CloudFolderAdapter
2026-04-21 23:16:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerViewModel.kt
GoogleDriveFolderPickerViewModel
Remove CloudFolderItem (moved to standalone file)
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/utils/LifecycleExtensions.kt
LifecycleExtensions
Add collectOnLifecycle extension to replace repeatOnLifecycle boilerplate
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt
OtherMediaSettingsFragment
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
Replace single-flow repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/NetworkDiscoveryDialog.kt
NetworkDiscoveryDialog
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingBottomSheetFragment.kt
NowPlayingBottomSheetFragment
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt
GeneralSettingsObserversHelper
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsBackupHelper.kt
GeneralSettingsBackupHelper
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationButtonManager.kt
TranslationButtonManager
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:39:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Replace repeatOnLifecycle with collectOnLifecycle
2026-04-21 23:43:04
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/StrategyUtils.kt
StrategyUtils
Add safeIo helper to deduplicate IO try-catch in transfer strategies
2026-04-21 23:43:04
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/LocalOperationStrategy.kt
LocalOperationStrategy
Apply safeIo to simple exists/isDirectory/writeFile methods
2026-04-21 23:43:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileDiffCallback.kt
MediaFileDiffCallback
Extract shared DiffUtil.ItemCallback from MediaFileAdapter and PagingMediaFileAdapter
2026-04-21 23:43:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter
Remove inner MediaFileDiffCallback, reference shared class
2026-04-21 23:43:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
PagingMediaFileAdapter
Remove duplicate MediaFileDiffCallback, use shared class
2026-04-22 00:02:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt
GoogleDriveFolderPickerActivity
Remove stale kotlinx.coroutines.launch import
2026-04-22 00:02:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt
DropboxFolderPickerActivity
Remove stale kotlinx.coroutines.launch import
2026-04-22 00:02:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt
OneDriveFolderPickerActivity
Remove stale kotlinx.coroutines.launch import
2026-04-22 03:29:42
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Add getLaunchId() static method so Meta XR runtime can register clientLaunchId and grant FOCUSED session state (true immersive mode)
2026-04-22 03:29:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.createIntent
Forward com.oculus.vrshell.launch_id from source Activity intent to VrPlayerActivity intent so launch token survives MainActivity -> VrPlayerActivity navigation
2026-04-22 11:32:05
scripts/builders/install-vr-to-device.ps1
install-vr-to-device
New script: install VR debug/release APK WITHOUT auto-launch so developer can start from Quest Library (required for valid vrshell launch_id and FOCUSED XR session state)
2026-04-22 11:32:05
docs/DEV_OPS.md
DEV_OPS
Add Quest Debugging section documenting that ADB/Studio/MQDH launches bypass HorizonOS shell and prevent FOCUSED state - workflow: install-only + tap from Library + attach debugger
2026-04-22 11:32:05
scripts/builders/README.md
builders/README
Document install-vr-to-device.ps1 and clarify build-vr-device.ps1 is smoke-tests-only (no FOCUSED)
2026-04-22 11:32:05
CLAUDE.md
CLAUDE
Add VR install-only commands to Build Commands section with cross-reference to DEV_OPS.md Quest Debugging
2026-04-22 11:37:28
scripts/builders/install-vr-debug-to-device.ps1
install-vr-debug-to-device
Split install-vr-to-device.ps1 into two dedicated scripts; debug variant (adb install -r -d, package vr.debug)
2026-04-22 11:37:28
scripts/builders/install-vr-release-to-device.ps1
install-vr-release-to-device
Split install-vr-to-device.ps1 into two dedicated scripts; release variant (adb install -r, package vr)
2026-04-22 11:37:28
a.ps1
a
Add ivrd / ivr aliases for VR debug/release install-only scripts
2026-04-22 11:37:28
scripts/builders/README.md
builders/README
Replace parameterized install-vr-to-device with separate install-vr-debug/release-to-device entries and a.ps1 aliases
2026-04-22 11:37:28
docs/DEV_OPS.md
DEV_OPS
Update Quest Debugging workflow to reference install-vr-debug-to-device / install-vr-release-to-device + a.ps1 ivrd/ivr aliases
2026-04-22 11:37:28
CLAUDE.md
CLAUDE
Update Build Commands to reference install-vr-debug-to-device / install-vr-release-to-device + a.ps1 ivrd/ivr aliases
2026-04-22 11:51:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/InlinePlaybackAnimator.kt
InlinePlaybackAnimator
Extracted inline-play button animation state from MediaFileAdapter.ListViewHolder (-45 LOC)
2026-04-22 11:51:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterDragController.kt
AdapterDragController
Extracted drag-to-reorder state (shadow list, listener, handles visibility) from MediaFileAdapter
2026-04-22 11:51:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter
Delegated inline animations to InlinePlaybackAnimator and drag-reorder to AdapterDragController (1157 -> 1095 LOC)
2026-04-22 12:02:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManualOrderCoordinator.kt
BrowseManualOrderCoordinator
Extracted MANUAL sort-mode ordering (sortFiles, applyManualOrder, saveManualOrder, currentDirPath) from BrowseViewModel
2026-04-22 12:02:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseShutdownCoordinator.kt
BrowseShutdownCoordinator
Extracted onCleared cleanup + buildNetworkResourceKey from BrowseViewModel
2026-04-22 12:02:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Delegated manual-order + shutdown to new coordinators (736 -> 699 LOC, target <=700 reached)
2026-04-22 12:13:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinator.kt
PlayerStereoModeCoordinator
Extracted stereo-mode pipeline (StateFlows + setStereoMode/setAutoDetected/resetForNewFile/rememberIfEnabled/applySettings) from PlayerViewModel
2026-04-22 12:13:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Delegated stereo mode to PlayerStereoModeCoordinator (1939 -> 1797 LOC)
2026-04-22 12:17:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDeleteUndoCoordinator.kt
PlayerDeleteUndoCoordinator
Extracted delete/undo/rename-reload flow (deleteCurrentFile/saveUndo/undoLast/clearExpired + restoreLocalFile/restoreNetworkFile) from PlayerViewModel
2026-04-22 12:17:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Delegated delete/undo to PlayerDeleteUndoCoordinator (1797 -> 1477 LOC)
2026-04-22 12:20:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerPrefetchOffloadCoordinator.kt
PlayerPrefetchOffloadCoordinator
Extracted adaptive pre-cache + stream-offload orchestration (flows, offload job, local-copy swap, cleanup prompt) from PlayerViewModel
2026-04-22 12:20:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Delegated prefetch/offload to PlayerPrefetchOffloadCoordinator (1477 -> 1321 LOC)
2026-04-22 13:16:22
app_v2/build.gradle.kts
productFlavors.disableNativeBuild
Added -PincludeX86 opt-in to extend abiFilters with x86/x86_64 for emulator debugging (Android 8.1 / API 27 AVD is x86-only). Default builds stay arm64-only.
2026-04-22 14:23:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt
PlayerMediaFilesLoader
Wave 4.1: NEW coordinator, owns loadSettings + loadMediaFiles pipeline extracted from PlayerViewModel (normalizePath/isPlayerBrowsableFile inlined)
2026-04-22 14:23:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Wave 4.1: delegate loadSettings/loadMediaFiles/reloadFiles/cancelLoading to PlayerMediaFilesLoader; VM 1321 -> 966 LOC
2026-04-22 14:23:25
PLAN/spec_decompose-giant-files.md
spec_decompose-giant-files
Add completed-waves table; open Wave 4 plan targeting PlayerViewModel via 5 coordinator extractions
2026-04-22 15:13:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationCoordinator.kt
PlayerNavigationCoordinator
Wave 4.2: NEW coordinator, owns next/prev/jump/sync/lookahead/adjacent + saveLastViewedFile (debounced+immediate)
2026-04-22 15:13:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Wave 4.2: delegate navigation methods to PlayerNavigationCoordinator; VM 966 -> 688 LOC (target reached)
2026-04-22 15:13:34
PLAN/spec_decompose-giant-files.md
spec_decompose-giant-files
Mark Wave 4.1+4.2 complete (VM 1321 -> 688); next candidate Wave 5 = MainActivity
2026-04-22 16:25:11
app_v2/build.gradle.kts
productFlavors.disableNativeBuild
Auto-enable x86/x86_64 abiFilters for any debug task (Android Studio Run, assembleXxxDebug). Release/staging builds stay arm64-only. -PincludeX86 remains as manual override for non-debug builds.
2026-04-22 16:30:24
app_v2/build.gradle.kts
buildTypes.debug/release
Moved abiFilters from productFlavors to buildTypes. Debug = arm64+x86+x86_64 (runs on any AVD API 27-35). Release/staging = arm64-only (Play distribution unchanged). VR flavors keep their own flavor-level arm64 restriction.
2026-04-22 16:48:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Fix NPE on PlayerActivity launch: move init{} below mediaFilesLoader/navigationCoordinator property initializers (Wave 4.1 regression)
2026-04-22 16:58:14
build.gradle.kts
buildscript
Sync stale comments: AGP 8.7.3/Kotlin 1.9.24 -> AGP 9.2.0/Kotlin 2.2.10 (actual pinned versions)
2026-04-22 16:58:23
dev/TECH_REQUIREMENTS.md
Platform & SDK / Version History
Sync to current stack: AGP 9.2.0, Kotlin 2.2.10, Gradle 9.4.1, NDK 27.2.12479018, KSP 2.3.2, Hilt 2.57.2
2026-04-22 17:18:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
DocumentPrintManager
Rewrite: accept MediaFile, resolve via NetworkFileManager.prepareFileForRead to support any resource type (local, content://, SMB/SFTP/FTP, Drive/Dropbox/OneDrive); delete broken downloadToCache; add structured logging
2026-04-22 17:18:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Fix: pass MediaFile to printManager.printCurrentFile instead of building a schemeless Uri from path (root cause of ‘Не удалось загрузить файл для печати’)
2026-04-22 17:22:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
DocumentPrintManager
Fix: remove temp-file cleanup after print - NetworkFileManager returns UnifiedFileCache entries for network/cloud; deleting them would poison the shared cache. OS manages cacheDir itself
2026-04-22 17:47:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
DocumentPrintManager
Fix crash IllegalStateException ‘Can print only from an activity’: resolve PrintManager via ContextCompat.getSystemService, dispatch pm.print via activity.runOnUiThread, guard with isFinishing/isDestroyed + try/catch to show snackbar instead of crashing
2026-04-22 19:58:01
app_v2/src/main/java/com/sza/fastmediasorter/core/util/PdfInfoParser.kt
PdfInfoParser
New zero-dependency parser for PDF /Info dict (title/author/subject/keywords/creator/producer/dates/version)
2026-04-22 19:58:03
app_v2/src/main/java/com/sza/fastmediasorter/core/util/DocumentMetadataExtractor.kt
DocumentMetadataExtractor
extractPdfInfo now populates title/author/version/creator/producer/subject/keywords/creation+mod dates via PdfInfoParser
2026-04-22 19:58:04
app_v2/src/main/java/com/sza/fastmediasorter/core/util/SafUriExtractor.kt
SafUriExtractor
extractPdfInfo now streams URI through PdfInfoParser to populate PDF metadata for content:// sources
2026-04-22 20:20:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Fix MP3 speed slider no-op when background audio is OFF: route to VideoPlayerManager.ExoPlayer unless AudioPlaybackService is active
2026-04-22 20:35:38
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Tag PooledConnection with ConnectionConsumer (SCANNER/PLAYER) and force fresh SMB connection for ExoPlayer when a pooled entry was created by the scanner - prevents ExoPlayer hang on silently-dropped SCANNER TCP socket
2026-04-22 20:35:52
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
SmbDataSource
Add 12s watchdog around open() via cached daemon executor: on timeout invalidate the pooled ExoPlayer connection (closing the socket unblocks the background worker) and throw IOException so ExoPlayer exits STATE_BUFFERING instead of spinning forever
2026-04-22 21:48:51
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
SmbDataSource
Add 15s read watchdog symmetric to open watchdog: wrap each readInternal chunk in Future.get(15s); on timeout invalidate the pooled ExoPlayer connection and throw IOException so ExoPlayer emits onPlayerError instead of hanging in STATE_BUFFERING on silent SMB socket drop mid-stream
2026-04-22 22:28:17
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general
Optimized System settings layout in landscape mode by grouping items into two columns
2026-04-22 22:36:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFullscreenManager.kt
StandaloneFullscreenManager
Replaced deprecated SYSTEM_UI_FLAG_* with WindowInsetsControllerCompat to resolve Google Play Console edge-to-edge API deprecation warnings on Android 15
2026-04-22 22:43:50
app_v2/build.gradle.kts
build.release.ndk.abiFilters
Restore multi-ABI release (arm64-v8a + armeabi-v7a + x86 + x86_64) - recover ~5.2k devices lost by prior arm64-only restriction
2026-04-22 22:53:22
docs/VR_EDITION.md
VR_EDITION
Add Technical Constraints section (ABI arm64-only, OpenXR runtime, no Wear, dual distribution, fallback screen)
2026-04-22 22:53:26
docs/VR_EDITION_RU.md
VR_EDITION_RU
Mirror: add Technical Constraints section (RU)
2026-04-22 22:53:29
docs/VR_EDITION_UK.md
VR_EDITION_UK
Mirror: add Technical Constraints section (UK)
2026-04-22 22:53:33
docs/LIMITATIONS.md
LIMITATIONS
Add VR Edition subsection under Functional Constraints (hardware, distribution, Wear caveat)
2026-04-22 22:53:37
docs/LIMITATIONS_RU.md
LIMITATIONS_RU
Mirror: add VR Edition subsection (RU)
2026-04-22 22:53:40
docs/LIMITATIONS_UK.md
LIMITATIONS_UK
Mirror: add VR Edition subsection (UK)
2026-04-22 23:02:04
PLAN/spec_ffmpeg-dts-multi-abi.md
spec
Add specification for multi-ABI FFmpeg/DTS AAR build (arm64-v8a + armeabi-v7a + x86 + x86_64)
2026-04-22 23:14:53
scripts/builders/build-ffmpeg-dts.sh
build-ffmpeg-dts
Multi-ABI support: ABIS includes arm64-v8a + armeabi-v7a + x86 + x86_64; added x86/x86_64 case arms; per-ABI 16 KB alignment loop
2026-04-22 23:14:57
scripts/builders/build-ffmpeg-dts-wsl.ps1
build-ffmpeg-dts-wsl
Update post-build hint to enumerate all 4 ABIs in readelf verification loop
2026-04-22 23:15:00
PLAN/spec_ffmpeg-dts-multi-abi.md
spec
Status Draft -> Approved; start implementation
2026-04-22 23:24:04
scripts/builders/build-ffmpeg-dts.sh
build_ffmpeg_abi
Fix: make distclean before each configure. Prevents mixed-ABI libavcodec.a when looping over multiple ABIs (stale .o from previous arch poisoned link step)
2026-04-22 23:24:09
scripts/builders/build-ffmpeg-dts-wsl.ps1
build-ffmpeg-dts-wsl
Simplify post-build hint (removed PowerShell-incompatible nested quoting for WSL loop)
2026-04-22 23:39:11
app_v2/libs/fms-ffmpeg-dts.aar
fms-ffmpeg-dts.aar
Regenerated multi-ABI AAR: 4 slices (arm64-v8a 7.68MB, armeabi-v7a 6.87MB, x86 6.61MB, x86_64 7.58MB); all 16 KB aligned; 11 MB compressed total
2026-04-22 23:39:15
scripts/builders/build-ffmpeg-dts.sh
verify_16kb_alignment
Fix: use readelf -lW (wide) so 64-bit ELF LOAD rows stay on a single line and Align is visible to the regex. Also add project/temp AAR fallback for classes.jar source
2026-04-22 23:42:42
app_v2/build.gradle.kts
vr/vrUnlicensed.externalNativeBuild.cmake.abiFilters
Restrict CMake configure to arm64-v8a for VR flavors. Needed because release buildType now has multi-ABI abiFilters - without this, AGP tried to configure openxr_native for armv7/x86/x86_64 where the OpenXR loader AAR has no slices
2026-04-22 23:47:47
app_v2/build.gradle.kts
productFlavors.disableNativeBuild + release/debug.ndk
Move abiFilters from buildType to flavor level. AGP merges buildType+flavor as UNION (not intersection), so buildType-level list was leaking non-VR ABIs into VR AABs. Non-VR flavors get all 4 ABIs; vr/vrUnlicensed get arm64-v8a only
2026-04-22 23:49:05
PLAN/spec_ffmpeg-dts-multi-abi.md
spec
Status Approved -> Implemented; added Implementation Notes (4 findings) and validation results for both standard and vr AABs
2026-04-23 00:16:42
app_v2/proguard-rules.pro
ProGuard
Keep XrRenderCallback + OpenXrNative to fix R8 obfuscation of JNI onRenderEye lookup (VR release fallback to flat mode)
2026-04-23 00:52:47
PLAN/spec_vr-3dvr-toggle-button.md
spec
Add spec for VR 3DVR panel<->immersive toggle button + Media3 1.2.1 effects deferral fix
2026-04-23 00:59:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Add videoSizeKnown/pendingEffectsApply flags; reset on playVideo; fire deferred effects in onVideoSizeChanged
2026-04-23 00:59:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt
PlayerSetupHelper
Defer applyConfiguredVideoEffects until videoSizeKnown; reset flags in createPlayer
2026-04-23 00:59:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Mirror Media3 1.2.1 effects deferral fix: standaloneVideoSizeKnown/standalonePendingEffects flags + onVideoSizeChanged listener
2026-04-23 01:10:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Add on3dVrToggleClicked callback, btn3dVrCmd wiring, VR_3D command visibility and overflow handling
2026-04-23 01:10:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
PlayerBindingSafeViews
Add btn3dVrCmd accessor
2026-04-23 01:10:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Add VR_3D PlayerCommand to enum and buildActiveCommands
2026-04-23 01:10:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Implement on3dVrToggleClicked delegating to activity.handle3dVrToggleClicked
2026-04-23 01:10:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Add open handle3dVrToggleClicked no-op for VrPlayerActivity override
2026-04-23 01:10:24
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Add 3DVR toggle: forceImmersiveThisLaunch, VrToggleButtonManager wiring, THUMBL key, switch panel/immersive methods, EXTRA_FORCE_IMMERSIVE
2026-04-23 01:10:24
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
VrRouteDecisionHelper
Add userForcedImmersive parameter to decide() - bypasses stereo-detection gate for user-initiated 3DVR toggle
2026-04-23 01:10:24
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrToggleButtonManager.kt
VrToggleButtonManager
New class: manages 3DVR toggle button icon/description state and delegates route-switch to lambdas
2026-04-23 01:10:24
app_v2/src/main/res/layout/activity_player_unified.xml
layout
Add btn3dVrCmd ImageButton after btnSaveFrameCmd (portrait)
2026-04-23 01:10:24
app_v2/src/main/res/layout-land/activity_player_unified.xml
layout-land
Add btn3dVrCmd ImageButton after btnSaveFrameCmd (landscape)
2026-04-23 01:10:24
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
Add menu_3d_vr item for 3DVR toggle in portrait overflow
2026-04-23 01:10:24
app_v2/src/main/res/drawable/ic_vr_3d.xml
ic_vr_3d
New drawable: VR headset icon for 3DVR enter button
2026-04-23 01:10:24
app_v2/src/main/res/drawable/ic_vr_exit.xml
ic_vr_exit
New drawable: VR exit arrow icon for 3DVR exit button
2026-04-23 01:10:24
app_v2/src/main/res/values/strings.xml
strings
Add vr_toggle_enter_description and vr_toggle_exit_description (EN)
2026-04-23 01:10:24
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add vr_toggle_enter_description and vr_toggle_exit_description (RU)
2026-04-23 01:10:24
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add vr_toggle_enter_description and vr_toggle_exit_description (UK)
2026-04-23 01:13:46
docs/FEATURES.md
FEATURES
Add 3DVR toggle button feature (VR edition section)
2026-04-23 01:13:46
docs/FEATURES_RU.md
FEATURES_RU
Add 3DVR toggle button feature (VR edition section, RU)
2026-04-23 01:13:46
docs/FEATURES_UK.md
FEATURES_UK
Add 3DVR toggle button feature (VR edition section, UK)
2026-04-23 01:41:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Add onPlayerCreated callback for VR surface race fix
2026-04-23 01:41:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt
PlayerSetupHelper
Invoke onPlayerCreated after fresh ExoPlayer is ready
2026-04-23 01:41:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Fix VR black-screen race: pending surface queue + flushPendingVrSurfaceIfReady; fix button state to flip only after actual VR render start; reset vrRenderingActive on forceStop
2026-04-23 01:41:22
app_v2/src/main/res/layout/activity_player_unified.xml
layout
Move btn3dVrCmd next to btnEditCmd (right after Control button)
2026-04-23 01:41:22
app_v2/src/main/res/layout-land/activity_player_unified.xml
layout-land
Move btn3dVrCmd next to btnEditCmd (landscape)
2026-04-23 01:41:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Re-prioritize VR_3D to 211 so it sits adjacent to EDIT in portrait adaptive layout
2026-04-23 02:13:01
docs/WHATS_NEW.md
WHATS_NEW
Add EN What is New doc for release 2.60.422.246
2026-04-23 02:13:01
docs/WHATS_NEW_RU.md
WHATS_NEW_RU
Add RU What is New doc for release 2.60.422.246
2026-04-23 02:13:01
docs/WHATS_NEW_UK.md
WHATS_NEW_UK
Add UK What is New doc for release 2.60.422.246
2026-04-23 02:13:01
docs/DOCS_MAP.md
DOCS_MAP
Add What is New links (EN/RU/UK) to docs map
2026-04-23 02:13:01
index.html
index.html
Add What is New card to EN landing page User Guides section
2026-04-23 02:13:01
index-ru.html
index-ru.html
Add What is New card to RU landing page
2026-04-23 02:13:02
index-uk.html
index-uk.html
Add What is New card to UK landing page
2026-04-23 02:29:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Wave 5: extracted MainResumePlaybackHelper, MainResourceTabsManager, MainStoragePermissionsHelper, MainLayoutChromeManager (1330 -> 887 LOC, under 1000 cap)
2026-04-23 02:35:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment
Wave 7: extracted ResourceEditorOutcomeRenderer (1057 -> 978 LOC, under 1000 cap)
2026-04-23 02:38:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Wave 8: extracted PlayerMediaViewVisibilityHelper (1002 -> 967 LOC)
2026-04-23 02:42:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt
TranslationManager
Wave 9: extracted TranslationTextUtils (1011 -> 961 LOC)
2026-04-23 02:47:17
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Wave 10: extracted SmbErrorClassifier (1099 -> 1500OC, at cap)
2026-04-23 02:53:43
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
DropboxClient
Wave 11: extracted DropboxClientUtils (1181 -> 981 LOC)
2026-04-23 17:36:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Wave 12: extracted StandaloneFileOperationsHandler (1129 -> 845 LOC)
2026-04-23 17:39:48
PLAN/spec_standalone-vs-inapp-player-parity.md
spec
Add parity spec III.15 comparing standalone vs in-app player; documents every code-level divergence and unification path via PlayerHostCapabilities + SharedDeleteUndoCoordinator
2026-04-23 17:42:56
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
CloudFileOperationHandler
Wave 13: extracted CloudFileOperationPathUtils + CloudToCloudTransferHelper (1222 -> 997 LOC)
2026-04-23 17:50:20
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbClient.kt
SmbClient
Wave 14: extracted SmbClientErrorFormatter + SmbShareDiscoveryHelper (1291 -> 954 LOC)
2026-04-23 17:54:54
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient
Wave 15a (partial): extracted SftpConnectionTester (1311 -> 1189 LOC; still over cap, channel-pool refactor deferred)
2026-04-23 18:01:17
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Wave 16a (partial): extracted OneDriveRestClientUtils (1433 -> 1349 LOC; still over cap, MSAL/HTTP refactor deferred)
2026-04-23 18:25:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Wave 17a (partial): extracted ImageLoadingDiagnostics (1304 -> 1239 LOC; still over cap)
2026-04-23 18:28:24
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Wave 18a (partial): extracted GoogleDriveRestClientUtils (1452 -> 1386 LOC; still over cap)
2026-04-23 20:35:49
dev/CATALOG/
tooling
Add CATALOG database: PS1 scanner extracts class/function metadata into JSONL source of truth + Markdown view (755 app_v2 + 54 wear classes). Preserves manual role/status/function descriptions across re-scans.
2026-04-23 21:15:19
dev/CATALOG/ + CLAUDE.md + .claude/commands/catalog.md
tooling
Add CATALOG CRUD scripts (set/query/remove), /catalog skill, and CLAUDE.md rules (research step 2, mandatory skill, post-change sync).
2026-04-23 21:36:17
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpClient.kt
FtpClient
Wave 19a (partial): extracted FtpStandaloneOperations (1603 -> 1177 LOC; still over cap)
2026-04-23 21:45:53
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpClient.kt
FtpClient
Wave 19 (full): also extracted FtpDirectoryScanner + FtpExoPlayerPool (1603 -> 905 LOC, under cap)
2026-04-23 21:51:42
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient
Wave 20: extracted SftpConnectionPool (1155 -> 627 LOC, well under cap)
2026-04-23 22:08:58
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Wave 16 (full): extracted OneDriveAuthCoordinator (1349 -> 896 LOC, under cap)
2026-04-23 22:11:20
PLAN/spec_standalone-vs-inapp-player-parity.md
spec
Pivot spec to full unification: one player pipeline for portrait/landscape/standalone; delete 8 Standalone* classes; standalone becomes thin URI-resolving adapter
2026-04-23 22:27:23
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Wave 21 (partial): extracted GoogleDriveAuthCoordinator (1452 -> 1102 LOC; still over cap)
2026-04-23 22:38:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/VideoPlayerHandle.kt
VideoPlayerHandle
Add interface exposing ExoPlayer + track selector for shared player pipeline (spec III.15 Phase 1a)
2026-04-23 22:38:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlayerHostCapabilities.kt
PlayerHostCapabilities
Add capability-contract interface unifying in-app + standalone player surfaces (spec III.15 Phase 1a)
2026-04-23 23:12:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/VideoPlayerHandle.kt
VideoPlayerHandle
Expand interface: add track selection, hue/brightness, playback speed methods
2026-04-23 23:12:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlayerHostCapabilities.kt
PlayerHostCapabilities
Expand interface: add stereo flows, setStereoMode, rememberStereoModeIfEnabled, isAudioServiceActive, showMessage, requestFinishAfterDelete
2026-04-23 23:12:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Unify dialog: replace PlayerActivity cast with PlayerHostCapabilities; works on all three player surfaces
2026-04-23 23:12:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Implement PlayerHostCapabilities; add inner PlayerActivityVideoHandle routing audio-service and video-player operations
2026-04-23 23:12:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt
StandalonePlayerViewModel
Add PlayerStereoModeCoordinator; expose stereoMode, detectedStereoMode, setStereoMode, rememberStereoModeIfEnabled, showMessage
2026-04-23 23:12:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Implement PlayerHostCapabilities; switch showPlaybackControlDialog to unified PlaybackControlDialogFragment; add inner StandaloneVideoPlayerHandle
2026-04-23 23:12:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlaybackControlDialogFragment.kt
StandalonePlaybackControlDialogFragment
Delete: superseded by unified PlaybackControlDialogFragment via PlayerHostCapabilities
2026-04-23 23:47:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Fix: remove redundant same-package import for VideoTrackSelectionManager
2026-04-23 23:47:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt
StandalonePlayerViewModel
Fix: call resetStereoModeForNewFile after loadFromUri to trigger DB lookup for remembered stereo mode
2026-04-24 00:52:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity.onResume
Fix crash: guard tabsManager.isInitialized in onResume - tabsManager is deferred via post{} in BaseActivity and can be uninitialized on first onResume on VR (Quest 3)
2026-04-24 01:22:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt, app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VRSHELL_DEBUG tracing
Add VRSHELL_DEBUG tracing: dump every intent extra in MainActivity.onCreate, log whether PlayerActivity.createIntent found and forwarded launch_id from source Activity, log VrPlayerActivity onCreate extras + getLaunchId() return. Diagnoses why OpenXR session never reaches FOCUSED state on HorizonOS
2026-04-24 01:43:27
PLAN/spec_decompose-giant-files.md
PLAN/spec_decompose-giant-files.md
Updated progress of decomposition with new line counts (2026-04-24) and refreshed priority score tables
2026-04-24 01:44:52
PLAN/spec_vr-hybrid-app-model.md
spec
Add specification VR-HYBRID-1: migrate VR flavor to Meta Hybrid App Model (task split + intent-filter with com.oculus.intent.category.VR) so OpenXR reaches FOCUSED; remove dead launch_id code paths
2026-04-24 01:53:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity.onCreate
Remove VRSHELL_DEBUG diagnostic block - launch_id key confirmed not used by HorizonOS (see spec_vr-hybrid-app-model.md)
2026-04-24 01:54:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.createIntent
Remove VRSHELL_DEBUG block + dead launch_id forwarding (key never set by HorizonOS); drop unused android.app.Activity import
2026-04-24 01:59:18
PLAN/spec_vr-hybrid-app-model.md
spec
Fix VR hybrid app spec after audit: unify task-transition design and browse/result contracts
2026-04-24 02:07:35
PLAN/spec_vr-hybrid-app-model.md
spec
Refine VR-HYBRID-1 - sync line numbers/LOC to current code, drop already-completed launch_id/VRSHELL_DEBUG cleanup, strengthen black-screen risk rationale, add ADR-5 for MainResumePlaybackHelper
2026-04-24 02:10:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransition.kt
feature
VR-HYBRID-1: add VrTaskTransition helper for Meta Hybrid App Model task swap (panel<->immersive)
2026-04-24 02:11:15
app_v2/src/vr/AndroidManifest.xml
config
VR-HYBRID-1: add VR intent-filter + taskAffinity to VrPlayerActivity, empty taskAffinity on VrPhoneFallbackActivity
2026-04-24 02:12:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
feature
VR-HYBRID-1: route exit paths (exitVrAndStopPlayback + launchVrFailureRecovery.shouldFinish) through VrTaskTransition.exitImmersiveToPanel; annotate fallback paths
2026-04-24 02:13:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
feature
VR-HYBRID-1: wrap 4 PlayerActivity.createIntent call sites with VrTaskTransition.shouldEnterImmersiveTask/enterImmersive
2026-04-24 02:13:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
feature
VR-HYBRID-1: route VR-target player launches through VrTaskTransition.enterImmersive; keep result contract for standard-player intents
2026-04-24 02:14:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
feature
VR-HYBRID-1: wrap slideshow-startup createIntent call with VrTaskTransition.shouldEnterImmersiveTask/enterImmersive
2026-04-24 02:16:12
docs/DEV_OPS.md
docs
VR-HYBRID-1: rewrite Quest Debugging section for hybrid-app task split; drop launch_id theory; add historical note
2026-04-24 02:17:19
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransitionTest.kt
test
VR-HYBRID-1: add JVM unit tests for VrTaskTransition.shouldEnterImmersiveTask (flavor-agnostic invariants)
2026-04-24 02:18:21
dev/CATALOG/app_v2.jsonl
catalog
VR-HYBRID-1: scan refresh + annotate VrTaskTransition (role=task-swap helper, status=new)
2026-04-24 02:20:07
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModelTest.kt
test
Drive-by: pass stereoFormatOverrideDao mock into StandalonePlayerViewModel ctor to unblock test compilation (pre-existing DI change made before VR-HYBRID-1 session)
2026-04-24 13:46:31
PLAN/spec_vr-immersive-controls.md
spec
UX spec for VR immersive-mode controller mapping (controls/zoom/volume/re-center/dialog)
2026-04-24 14:00:27
PLAN/spec_keyboard-mouse-coverage.md
spec
Draft UX spec: keyboard and mouse coverage audit across all activities and dialogs
2026-04-24 14:00:39
PLAN/spec_vr-immersive-controls.md
spec
Rewrite UX spec: root cause (missing OpenXR actions), add BT keyboard/mouse layers, Touch-controller paths
2026-04-24 14:04:56
PLAN/spec_vr-immersive-controls.md
spec
Add Quest 2/Pro device support (touch_controller + touch_pro_controller profiles); link future specs
2026-04-24 14:04:56
PLAN/spec_vr-hand-tracking.md
spec
New backlog spec: VR hand-tracking (XR_EXT_hand_tracking + XR_META_hand_tracking_aim)
2026-04-24 14:04:57
PLAN/spec_player-keybinding-remapping.md
spec
New backlog spec: player keybinding remapping UI in playback settings
2026-04-24 14:04:57
PLAN/spec_gamepad-support.md
spec
New backlog spec: gamepad support app-wide (browser + player + dialogs)
2026-04-24 14:08:56
PLAN/spec_vr-immersive-controls.md
spec
Reframe BT keyboard layer: DOS/NC -> Windows/VLC -> YouTube -> media keys hierarchy; 3-level seek
2026-04-24 14:15:56
PLAN/spec_keyboard-mouse-coverage.md
spec
Update UX spec: NC-primary keybindings with Ctrl+ duplicates, user docs section added
2026-04-24 14:16:49
PLAN/spec_vr-immersive-controls.md
spec
Expand §4.2 with Ctrl+ file-op shortcuts (Del, Ctrl+R/C/X/I/Y) and add user documentation deliverable to §11
2026-04-24 14:25:57
PLAN/spec_vr-immersive-controls.md
spec_vr-immersive-controls
Fixed ellipsis punctuation from ‘…’ to ‘..’ according to style guidelines
2026-04-24 14:31:11
PLAN/spec_gamepad-support.md
Gamepad Spec
Strengthened specification and translated to English
2026-04-24 14:34:35
PLAN/spec_keyboard-mouse-coverage.md
spec
Rewrite keyboard/mouse spec to full template: scope, architecture, testing, ADRs, implementation steps
2026-04-24 14:43:01
PLAN/plan_gamepad-support.md
Gamepad Plan
Created step-by-step implementation plan with prompts
2026-04-24 14:43:12
PLAN/spec_vr-immersive-controls-tech.md
spec
Add technical implementation specification for VR immersive controls (3-layer input: OpenXR + keyboard + mouse, HUD, file ops panel)
2026-04-24 14:47:07
PLAN/spec_keyboard-mouse-coverage-impl.md
spec
Create implementation-grade keyboard/mouse spec with concrete architecture, files, phases and rollout gates
2026-04-24 14:47:07
PLAN/tasks_keyboard_mouse_coverage/00_OVERVIEW.md
plan
Add overview dashboard for keyboard/mouse rollout phases and validation gates
2026-04-24 14:47:07
PLAN/tasks_keyboard_mouse_coverage/01_input_core.md
plan
Add Phase 1 tactical file for shared input layer, focus ring and F1 help
2026-04-24 14:47:07
PLAN/tasks_keyboard_mouse_coverage/02_primary_surfaces.md
plan
Add Phase 2 tactical file for main, browse, player and standalone parity
2026-04-24 14:47:07
PLAN/tasks_keyboard_mouse_coverage/03_secondary_surfaces.md
plan
Add Phase 3 tactical file for settings, dialogs, pickers and secondary activities
2026-04-24 14:47:07
PLAN/tasks_keyboard_mouse_coverage/04_docs_validation.md
plan
Add Phase 4 tactical file for docs, mirrors, validation and release gate
2026-04-24 14:48:35
PLAN/tasks_keyboard_mouse_coverage/MASTER_PROMPT.md
plan
Add single-developer master prompt for keyboard/mouse rollout handoff
2026-04-24 14:48:58
PLAN/spec_player-keybinding-remapping.md
Spec: Player Keybinding
Rewrote in English and enhanced technical depth (data structures, UI gates, OpenXR details)
2026-04-24 14:54:11
PLAN/spec_vr-hand-tracking.md
Specification
Enhanced and translated VR hand tracking spec to English, adding technical depth and OpenXR specifics
2026-04-24 14:57:41
PLAN/spec_vr-hand-tracking-tech.md
Specification
Create technical specification for VR hand tracking implementation
2026-04-24 15:02:05
PLAN/spec_vr-immersive-controls-tech.md
spec
Fix JNI signature, DI conflict, unreachable code, and style issues
2026-04-24 15:21:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlaybackCommandModel.kt
code
Add VR-specific PlaybackCommand variants for immersive controls
2026-04-24 15:21:56
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/XrInputEventType.kt
code
Add XrInputEventType and XrHand constants mirroring C++ enum
2026-04-24 15:21:56
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/XrInputCallback.kt
code
Add XrInputCallback interface for OpenXR controller input events
2026-04-24 15:24:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputAction.kt
InputAction
Create semantic input action sealed interface (Phase 1)
2026-04-24 15:24:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputSurface.kt
InputSurface
Create surface profile enum (Phase 1)
2026-04-24 15:24:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpEntry.kt
InputHelpEntry
Create F1 help entry model (Phase 1)
2026-04-24 15:24:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpLinkResolver.kt
InputHelpLinkResolver
Map surface to docs URL (Phase 1)
2026-04-24 15:24:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpRegistry.kt
InputHelpRegistry
Central registry of F1 help entries (Phase 1)
2026-04-24 15:24:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpDialogFragment.kt
InputHelpDialogFragment
Shared F1 help dialog fragment (Phase 1)
2026-04-24 15:24:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/FocusRingHelper.kt
FocusRingHelper
Visible focus ring for keyboard-driven surfaces (Phase 1)
2026-04-24 15:29:12
app_v2/src/vr/cpp/OpenXrNative.cpp
code
Implement OpenXR input system: ActionSet + 13 Actions, Touch/TouchPro bindings, per-frame syncInputActions with edge detection and hysteresis, haptic output, JNI nativeSetInputCallback and nativeTriggerHaptic
2026-04-24 15:29:12
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrNative.kt
code
Declare nativeSetInputCallback and nativeTriggerHaptic JNI externals
2026-04-24 15:29:12
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
code
Pass XrInputCallback to native after XR session init
2026-04-24 15:29:39
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler
Refactor into semantic dispatcher with surface profiles (Phase 1)
2026-04-24 15:29:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MouseEventHandler.kt
MouseEventHandler
Add wheel, hover, XButton, semantic action emission (Phase 1)
2026-04-24 15:29:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/FocusManager.kt
FocusManager
Add InputAction support, range selection hooks, FocusRingHelper integration (Phase 1)
2026-04-24 15:29:50
app_v2/src/test/java/com/sza/fastmediasorter/util/KeyboardShortcutHandlerTest.kt
KeyboardShortcutHandlerTest
JVM unit tests for surface-aware keyboard parser (Phase 1)
2026-04-24 15:29:50
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/input/InputHelpRegistryTest.kt
InputHelpRegistryTest
Unit tests for F1 help registry and link resolver (Phase 1)
2026-04-24 15:29:50
app_v2/src/main/res/values/strings.xml
strings.xml
Add kbm_help_* string resources for F1 dialog (Phase 1)
2026-04-24 15:29:50
app_v2/src/main/res/values-ru/strings.xml
strings.xml (ru)
Add Russian kbm_help_* strings (Phase 1)
2026-04-24 15:29:50
app_v2/src/main/res/values-uk/strings.xml
strings.xml (uk)
Add Ukrainian kbm_help_* strings (Phase 1)
2026-04-24 15:34:31
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
code
Add VrControllerInputManager: unified 3-layer input router to PlaybackCommand (OpenXR + BT keyboard + BT mouse)
2026-04-24 15:34:31
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrZoomManager.kt
code
Add VrZoomManager: grip analog and discrete keyboard zoom with 0.3x-3.0x clamp
2026-04-24 15:34:31
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudIndicatorManager.kt
code
Add VrHudIndicatorManager: auto-dismiss HUD slots for pause/volume/seek/file/zoom/recenter
2026-04-24 15:34:31
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrCheatsheetOverlayManager.kt
code
Add VrCheatsheetOverlayManager: first-run auto-show and manual toggle cheatsheet
2026-04-24 15:34:31
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRecentDestinationsPrefs.kt
code
Add VrRecentDestinationsPrefs: SharedPreferences-backed recent copy/move destinations (MRU, max 10)
2026-04-24 15:34:31
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrFileOpsOverlayManager.kt
code
Add VrFileOpsOverlayManager: file ops panel with copy/move/delete/rename/info and recent destinations
2026-04-24 15:34:31
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrControlOverlayManager.kt
code
Implement VrControlOverlayManager: View-based playback overlay with auto-hide and 7 command buttons
2026-04-24 15:39:18
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
code
Wire VrControllerInputManager, VrZoomManager, VrHud, VrCheatsheet, VrFileOps into VR player; extend handleVrCommand for all immersive commands
2026-04-24 15:42:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrModule.kt
code
Add Hilt @Provides for VrRecentDestinationsPrefs
2026-04-24 15:42:44
app_v2/src/main/res/values/strings.xml
resources
Add VR immersive controls strings: HUD, file ops, overlay, cheatsheet (EN)
2026-04-24 15:42:44
app_v2/src/main/res/values-ru/strings.xml
resources
Add VR immersive controls strings RU
2026-04-24 15:42:44
app_v2/src/main/res/values-uk/strings.xml
resources
Add VR immersive controls strings UK
2026-04-24 15:44:16
app_v2/src/test/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManagerTest.kt
test
Add unit tests for VrControllerInputManager: 3-layer routing (OpenXR + keyboard + mouse)
2026-04-24 15:44:16
app_v2/src/test/java/com/sza/fastmediasorter/vr/ui/VrZoomManagerTest.kt
test
Add unit tests for VrZoomManager: clamp, discrete steps, grip delta
2026-04-24 19:20:25
docs/FEATURES.md
docs
Add VR Immersive Controls to feature list EN
2026-04-24 19:20:25
docs/FEATURES_RU.md
docs
Add VR Immersive Controls to feature list RU
2026-04-24 19:20:25
docs/FEATURES_UK.md
docs
Add VR Immersive Controls to feature list UK
2026-04-24 19:20:25
docs/VR_CONTROLS.md
docs
Add user-facing VR controls documentation EN
2026-04-24 19:20:25
docs/VR_CONTROLS_RU.md
docs
Add user-facing VR controls documentation RU
2026-04-24 19:20:25
docs/VR_CONTROLS_UK.md
docs
Add user-facing VR controls documentation UK
2026-04-24 19:21:23
dev/CATALOG/app_v2.jsonl
catalog
Sync catalog after VR immersive controls implementation
2026-04-24 19:21:23
dev/CATALOG/app_v2.md
catalog
Sync catalog markdown after VR immersive controls
2026-04-24 19:24:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt
KeyboardNavigationHandler
Wired Main surface to shared keyboard help and focus primitives
2026-04-24 19:24:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Hooked F1 help dialog and focus reset into Phase 1 Main surface flow
2026-04-24 19:24:50
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/MouseEventHandlerTest.kt
MouseEventHandlerTest
Added shared mouse semantics unit coverage for right click middle click and wheel modifiers
2026-04-24 19:24:50
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/FocusManagerTest.kt
FocusManagerTest
Added shared focus navigation unit coverage for page home end and range extension
2026-04-24 19:49:16
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
code
Allow first analog volume/zoom event immediately by using safe rate-limit sentinels
2026-04-24 19:49:16
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManagerTest.kt
test
Convert VR input router test to plain JVM with mocked Handler to remove Robolectric temp-db cleanup crash
2026-04-24 19:49:16
app_v2/src/test/java/com/sza/fastmediasorter/core/util/DeviceCapabilityProbeTest.kt
test
Convert DeviceCapabilityProbeTest to mock-based JVM test to avoid Application/Room temp-db cleanup failure on Windows
2026-04-24 19:49:16
PLAN/tasks_keyboard_mouse_coverage/00_OVERVIEW.md
plan
Update Phase 1 status: VR source-set blocker resolved, remaining standard test failures are unrelated
2026-04-24 19:49:16
PLAN/tasks_keyboard_mouse_coverage/01_input_core.md
plan
Update Phase 1 validation note after resolving VR test-source-set blocker
2026-04-24 19:56:19
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Fix: state.fileCount -> state.files.size (field does not exist on PlayerState)
2026-04-24 19:56:19
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
VrControllerInputManager
Fix: remove non-existent KEYCODE_BUTTON_PRIMARY/SECONDARY/TERTIARY; mouse clicks moved to ACTION_BUTTON_PRESS in onMotionEvent
2026-04-24 19:56:19
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManagerTest.kt
VrControllerInputManagerTest
Verify: exists in testVr source set, uses MotionEvent.BUTTON_* correctly, 7 tests 0 failures
2026-04-24 19:56:19
PLAN/tasks_keyboard_mouse_coverage/01_input_core.md
Phase1Gate
Close phase gate: testStandardDebugUnitTest passes for all 43 shared input tests
2026-04-24 20:17:07
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler
Phase 2: add mapMain (suppresses bare F2-F5 for legacy path) and mapBrowse (Backspace -> BackOneLevel) surface variants; route MAIN and BROWSE to dedicated mappers
2026-04-24 20:17:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt
KeyboardNavigationHandler
Phase 2: add onEditResourceClick callback; handle CopySelection, RenameSelection, DeleteSelection in dispatchSharedAction
2026-04-24 20:17:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Phase 2: wire onEditResourceClick in KeyboardNavigationHandler construction (PIN check then ResourceEditorActivity)
2026-04-24 20:17:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/KeyboardNavigationManager.kt
KeyboardNavigationManager
Phase 2: full rewrite - replaced raw key-code branching with KeyboardShortcutHandler(BROWSE) + InputAction dispatch; expanded callback interface with showCreateFolderDialog, showHelp, showContextMenu, extendSelectionUp/Down
2026-04-24 20:17:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Phase 2: wire 5 new KeyboardNavigationCallbacks (createFolder, help, contextMenu, extendSelection)
2026-04-24 20:17:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Phase 2: make showCreateFolderDialog public so BrowseManagerInitializer can call it from keyboard shortcut
2026-04-24 20:17:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
PlayerKeyboardHandler
Phase 2: remove viewModel parameter; add PlayerKeyboardCallback interface with 20+ methods; add KeyboardShortcutHandler(PLAYER) pre-pass so all InputAction types dispatch through callback; host-agnostic
2026-04-24 20:17:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
PlayerKeyboardCallbackImpl
Phase 2: implement 8 new callback methods (mute, fullscreen, volume, help, document search, save frame, context menu, next/prev/favourite/undo)
2026-04-24 20:17:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Phase 2: update PlayerKeyboardHandler constructor call - remove viewModel arg, pass PlayerKeyboardCallbackImpl instead
2026-04-24 20:17:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Phase 2: add keyboardHandler field; wire PlayerKeyboardHandler with anonymous callback covering all player/doc/volume/fullscreen/help actions; add onKeyDown + dispatchGenericMotionEvent overrides
2026-04-24 20:17:46
app_v2/src/test/java/com/sza/fastmediasorter/util/KeyboardShortcutHandlerTest.kt
KeyboardShortcutHandlerTest
Phase 2: add tests for mapMain (bare F2-F5 null, F7/F8/color keys), mapBrowse (Backspace->BackOneLevel, ForwardDel->Delete)
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler
Added Ctrl+F5 browse refresh mapping
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt
KeyboardNavigationHandler
Stopped consuming unsupported main undo and redo shortcuts
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/KeyboardNavigationManager.kt
KeyboardNavigationManager
Wired browse undo shortcut through semantic input dispatch
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
MediaFileAdapter
Routed secondary mouse button to context menu callback instead of range selection
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Anchored browse mouse context menu and connected undo callback
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
PlayerKeyboardHandler
Added shared pointer handling and gated unsupported player shortcuts
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
PlayerKeyboardCallbackImpl
Declared supported player copy move shortcuts and hardened document search callback
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Forwarded generic pointer events through shared player handler
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Forwarded generic pointer events through shared player handler
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Exposed current standalone player for keyboard volume controls
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFullscreenManager.kt
StandaloneFullscreenManager
Added fullscreen toggle helper for keyboard shortcut parity
2026-04-24 20:35:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsKeyboardNavigationManager.kt
SettingsKeyboardNavigationManager
Fixed PageJump property mismatch blocking Kotlin compile
2026-04-24 20:35:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsKeyboardNavigationManager.kt
SettingsKeyboardNavigationManager
Phase 3: new class - settings keyboard delegate using KeyboardShortcutHandler(SETTINGS); handles tab switch, focus, Escape, Ctrl+F search, F1 help via callback interface
2026-04-24 20:35:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
Phase 3: replace inline onKeyDown with SettingsKeyboardNavigationManager; add Ctrl+F search and F1 help via InputHelpDialogFragment
2026-04-24 20:35:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/DialogKeyboardDelegate.kt
DialogKeyboardDelegate
Phase 3: new utility - wires Enter=confirm and Escape=dismiss onto any Dialog or DialogFragment via setOnKeyListener
2026-04-24 20:36:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/DeleteDialog.kt
DeleteDialog
Phase 3: apply DialogKeyboardDelegate - Enter confirms delete, Escape dismisses
2026-04-24 20:36:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/RenameDialog.kt
RenameDialog
Phase 3: apply DialogKeyboardDelegate - Enter applies rename, Escape dismisses
2026-04-24 20:36:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/FilterResourceDialog.kt
FilterResourceDialog
Phase 3: apply DialogKeyboardDelegate in onStart - Enter applies filter, Escape dismisses
2026-04-24 20:36:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceKeyboardDelegate.kt
AddResourceKeyboardDelegate
Phase 3: new delegate for AddResourceActivity - Escape=back, F1=help via InputSurface.ADD_RESOURCE
2026-04-24 20:36:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Phase 3: wire AddResourceKeyboardDelegate - Escape exits, F1 shows help
2026-04-24 20:36:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/CloudFolderPickerKeyboardDelegate.kt
CloudFolderPickerKeyboardDelegate
Phase 3: new shared delegate for all 3 cloud folder pickers - Enter=confirm, Backspace/BACK=up, Escape=cancel, F1=help
2026-04-24 20:36:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt
DropboxFolderPickerActivity
Phase 3: wire CloudFolderPickerKeyboardDelegate
2026-04-24 20:36:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt
GoogleDriveFolderPickerActivity
Phase 3: wire CloudFolderPickerKeyboardDelegate
2026-04-24 20:36:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt
OneDriveFolderPickerActivity
Phase 3: wire CloudFolderPickerKeyboardDelegate
2026-04-24 20:36:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesActivity.kt
DuplicatesActivity
Phase 3: add onKeyDown - Escape=back, F1=InputHelpDialogFragment(DUPLICATES)
2026-04-24 20:36:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorActivity.kt
ResourceEditorActivity
Phase 3: add onKeyDown - Ctrl+S=save via fragment, Escape=back, F1=help(RESOURCE_EDITOR)
2026-04-24 20:36:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment
Phase 3: add public performSave() delegating to viewModel.onSave() with media permission check
2026-04-24 20:36:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
Phase 3: add onKeyDown - Escape=cancel (finish)
2026-04-24 20:36:24
app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt
ResourceLaunchWidgetConfigActivity
Phase 3: add onKeyDown - Escape=cancel (finish)
2026-04-24 20:36:24
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Phase 3: guard BT keyboard in dispatchKeyEvent - skip vrInputManager for SOURCE_KEYBOARD events to prevent double-dispatch with PlayerActivity.keyboardHandler
2026-04-24 20:40:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/DialogKeyboardDelegate.kt
DialogKeyboardDelegate
Expanded dialog keyboard contract to shared semantic actions with help, toggle, and focus movement
2026-04-24 20:43:59
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler
Added cloud picker refresh and backspace mappings to the shared parser
2026-04-24 20:43:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/CloudFolderPickerKeyboardDelegate.kt
CloudFolderPickerKeyboardDelegate
Routed cloud picker open and refresh actions through focused control callbacks
2026-04-24 20:43:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt
GoogleDriveFolderPickerActivity
Made keyboard open act on the focused control and wired refresh callback
2026-04-24 20:43:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt
DropboxFolderPickerActivity
Made keyboard open act on the focused control and wired refresh callback
2026-04-24 20:43:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt
OneDriveFolderPickerActivity
Made keyboard open act on the focused control and wired refresh callback
2026-04-24 20:46:19
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler
Added add-resource activation mapping for Space through the shared parser
2026-04-24 20:46:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceKeyboardDelegate.kt
AddResourceKeyboardDelegate
Wired open-current and focus movement callbacks for keyboard form navigation
2026-04-24 20:46:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Forwarded add-resource keyboard activation and focus traversal through the delegate
2026-04-24 20:56:26
docs/FEATURES.md
FEATURES
Add full keyboard/mouse coverage bullets: all-surface nav, NC shortcuts, TV color keys, F1 help, settings keyboard nav
2026-04-24 20:56:29
docs/FEATURES_RU.md
FEATURES_RU
Add full keyboard/mouse coverage bullets (RU): all-surface nav, NC shortcuts, TV color keys, F1 help, settings keyboard nav
2026-04-24 20:56:30
docs/FEATURES_UK.md
FEATURES_UK
Add full keyboard/mouse coverage bullets (UK): all-surface nav, NC shortcuts, TV color keys, F1 help, settings keyboard nav
2026-04-24 20:57:22
PLAN/spec_keyboard-mouse-coverage-impl.md
spec_keyboard-mouse-coverage-impl
Status: Draft -> Implemented 2026-04-24
2026-04-24 20:57:22
PLAN/tasks_keyboard_mouse_coverage/00_OVERVIEW.md
00_OVERVIEW
Check off FEATURES.md docs item in Final Exit Checklist
2026-04-24 21:05:16
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler
Moved main-screen function key parsing into shared semantics and aligned refresh mappings
2026-04-24 21:05:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt
KeyboardNavigationHandler
Removed broad raw main key branching and bound refresh to semantic actions
2026-04-24 21:05:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Dropped obsolete main-screen settings shortcut wiring from keyboard handler setup
2026-04-24 21:05:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
PlayerKeyboardHandler
Restored media-button debounce before shared semantic dispatch
2026-04-24 21:05:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpRegistry.kt
InputHelpRegistry
Aligned main-screen F1 help entries with the actually supported keyboard contract
2026-04-24 21:12:25
app_v2/src/test/java/com/sza/fastmediasorter/util/KeyboardShortcutHandlerTest.kt
KeyboardShortcutHandlerTest
Aligned MAIN-surface parser expectations with the repaired semantic contract and refresh mappings
2026-04-24 21:24:06
app_v2/src/vr/cpp/OpenXrNative.cpp
code
Forward-declare input-system helpers (setupActionSet et al.) so createSessionAndSwapchains compiles
2026-04-24 21:24:11
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/ui/VrControlOverlayManagerTest.kt
test
Align overlay dispatch test with forVrPlayback() accepting file operations; add drop-case for VolumeStep
2026-04-24 21:39:48
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/GamepadAction.kt
Gamepad Support
Add GamepadAction sealed class (PlayerAction + BrowserAction) for plan_gamepad-support phase 1.1
2026-04-24 21:39:53
app_v2/src/main/java/com/sza/fastmediasorter/core/input/GamepadInputManager.kt
Gamepad Support
Add GamepadInputManager: translates gamepad KeyEvent + MotionEvent to GamepadAction with deadzone 0.15 and rate-limiting (phase 1.2)
2026-04-24 21:39:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
Gamepad Support
Wire GamepadInputManager into PlayerActivity: dispatchKeyEvent + dispatchGenericMotionEvent route PlayerAction to existing keyboard callbacks; exitPlayerWithAudioCheck made open for VR override (phase 2.1)
2026-04-24 21:39:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
Gamepad Support
Expose PlayerKeyboardHandler.callback as internal so gamepad routing in PlayerActivity can reuse the same callback surface
2026-04-24 21:40:00
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
Gamepad Support
Replace hardcoded KEYCODE_BUTTON_X/B handling with GamepadInputManager (via super); override exitPlayerWithAudioCheck to route through VrTaskTransition so gamepad B / keyboard Escape exit immersive correctly (phase 2.2)
2026-04-24 21:40:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
Gamepad Support
Add gamepad dispatchKeyEvent override: A/B/X/Y/Start/L1-R1 route BrowserActions to existing UI; D-pad focus handled by Android default (phase 3.2)
2026-04-24 21:40:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
Gamepad Support
Add gamepad dispatchKeyEvent override: A=select, B=back, X=multi-select, Y=context menu, Start=filter, L1/R1=view toggle (phase 3.2)
2026-04-24 21:40:08
app_v2/src/main/res/layout/item_folder.xml
Gamepad Support
Add android:focusable=true so folder list rows can receive D-pad focus (phase 3.1)
2026-04-24 21:40:09
docs/FEATURES.md
Gamepad Support
Add FEATURES bullet describing gamepad support mapping in EN/RU/UK mirrors (phase 4.2)
2026-04-24 21:59:34
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VR keyboard routing
Route only VR-exclusive keyboard shortcuts through VrControllerInputManager before PlayerActivity to restore recenter/zoom/immersive actions without double-dispatch.
2026-04-24 21:59:34
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
VR keyboard routing
Add a predicate for VR-exclusive keyboard shortcuts so only recenter/zoom/immersive keys bypass the base player keyboard handler.
2026-04-24 21:59:34
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManagerTest.kt
VR keyboard routing tests
Add regression coverage for VR-exclusive keyboard shortcut interception to protect against keyboard dead-code routing regressions.
2026-04-24 22:08:51
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Added explicit gamepad focusability flags for playback dialog controls (portrait)
2026-04-24 22:08:51
app_v2/src/main/res/layout-land/dialog_playback_control.xml
dialog_playback_control_land
Added explicit gamepad focusability flags for playback dialog controls (landscape)
2026-04-24 22:08:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Made runtime-created audio/subtitle radio buttons explicitly focusable for D-pad and gamepad navigation
2026-04-24 22:13:31
app_v2/src/vr/AndroidManifest.xml
spec_vr-hand-tracking-tech
Add com.oculus.permission.HAND_TRACKING + oculus.software.handtracking uses-feature (Layer E prerequisite).
2026-04-24 22:13:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/XrInputEventType.kt
spec_vr-hand-tracking-tech
Add POINTER_CLICK_DOWN/UP, SWIPE_L/R/U/D, DOUBLE_PINCH event types and XrInputSource enum (CONTROLLER/HAND).
2026-04-24 22:13:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/XrInputCallback.kt
spec_vr-hand-tracking-tech
Extend onInputEvent with source parameter; add onPointerMove(hand,ndcX,ndcY) default method for hand-tracking aim stream.
2026-04-24 22:13:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrNative.kt
spec_vr-hand-tracking-tech
Document new callback contract (onInputEvent(IIFI)V + optional onPointerMove(IFF)V).
2026-04-24 22:13:50
app_v2/src/vr/cpp/OpenXrNative.cpp
spec_vr-hand-tracking-tech
Add HandSystem (Layer E): init/sync/destroy hand tracking, XR_EXT_hand_tracking + META/FB aim + microgestures extension probe, ray-plane intersection with pinch hysteresis + aim-freeze, modality gate that suppresses hand events within 2s of controller activity, JNI callback caches onInputEvent(IIFI)V and optional onPointerMove(IFF)V.
2026-04-24 22:13:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
spec_vr-hand-tracking-tech
Add source-aware dispatch, SoundPool-free audio feedback via AudioManager.FX_KEY_CLICK for pinch clicks, SeekMicro/VolumeStep routing for thumb swipes, double-pinch to TogglePausePlay; pointerMoveSink fanout to VrHandRayManager.
2026-04-24 22:13:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHandRayManager.kt
spec_vr-hand-tracking-tech
New Layer E manager: translates NDC aim ray -> decor-view coords, renders cursor dot, dispatches ACTION_HOVER_MOVE/DOWN/UP MotionEvents (<=150 LOC per spec).
2026-04-24 22:13:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec_vr-hand-tracking-tech
Wire VrHandRayManager: construct alongside VrControllerInputManager, pass audioManager + onPointerEvent, bind pointerMoveSink; release in onDestroy.
2026-04-24 22:31:38
app_v2/src/vr/cpp/OpenXrNative.cpp
spec_vr-hand-tracking-tech (audit)
Audit fixes: aim-extension guard covers both META and FB, extension-name macros always available, emit CLICK_UP + off-plane pointer on tracking loss / SYSTEM_GESTURE / modality-gate transition, gate COMPUTED bit before reading any aim status.
2026-04-24 22:31:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHandRayManager.kt
spec_vr-hand-tracking-tech (audit)
Audit fixes: released flag guards onPointerMove/onPointerClick against stale Runnables after release, bringToFront so cursor stays above overlays, first-frame cursor anchored by CURSOR_PX constant instead of layout width.
2026-04-24 22:31:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec_vr-hand-tracking-tech (audit)
Audit fix: detach pointerMoveSink BEFORE releasing VrHandRayManager so queued main-thread runnables from xr-render-thread cannot resurrect decor overlay.
2026-04-24 22:33:12
PLAN/spec_player-keybinding-remapping.md
Spec: Player Keybinding
Updated spec with centralized default map file, fullscreen UI, functional groups, and hierarchical return-to-default
2026-04-24 22:38:41
PLAN/spec_player-keybinding-remapping.md
spec
Rewrite keybinding-remapping spec at strategic level: four pillars (Defaults Map File, Functional Groups, Fullscreen Dialog, Hierarchical Reset), remove tactical Kotlin/DB details, drop reference to deleted VR spec
2026-04-24 22:45:23
.claude/commands/spec.md
spec
Add Section 15 Verification Criteria, extend Status lifecycle, add Verification column to implementation steps
2026-04-24 22:45:23
.claude/commands/spec-check.md
spec-check
New skill: audit implementation of a spec file and produce PLAN audit report
2026-04-24 22:52:42
PLAN/spec_player-keybinding-phase1-preparation.md
spec
Add Phase 1 (Preparation & Inventory) tactical spec: 17 input engines catalogued across keyboard/gamepad/mouse/touch/media/VR, 4 parallel command models identified (InputAction, GamepadAction, PlaybackCommand, XrInputEventType), complete trigger catalogue, unbound-command candidates, refactor order, cross-cutting concerns (debounce/rate-limit/deadzone/thread-affinity), exit criteria for Phase 2 handoff
2026-04-24 22:54:15
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
spec_vr-hand-tracking-tech (audit)
Preserve command source across VR input paths and tag keyboard/mouse/hand/controller commands separately for haptic gating.
2026-04-24 22:54:15
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec_vr-hand-tracking-tech (audit)
Gate immersive haptics to real XR controller commands only; suppress haptics for hand, keyboard, mouse and UI-triggered commands.
2026-04-24 22:54:15
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManagerTest.kt
spec_vr-hand-tracking-tech (audit test)
Update VR router tests to the 4-arg XrInputCallback contract and assert command-source propagation for controller, hand, keyboard and mouse paths.
2026-04-24 22:58:21
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
spec_vr-hand-tracking-tech (audit fix)
Restore SystemClock import after removing only the double-pinch timing heuristic; rate-limit helpers still depend on it.
2026-04-24 22:59:13
app_v2/src/vr/cpp/OpenXrNative.cpp
spec_vr-hand-tracking-tech (audit fix)
Preserve the shared native double-pinch timer when the other hand drops tracking so DOUBLE_PINCH still resolves on the visible hand within the gesture window.
2026-04-24 22:59:30
app_v2/src/vr/cpp/OpenXrNative.cpp
spec_vr-hand-tracking-tech
Move DOUBLE_PINCH ownership into native OpenXR hand polling: detect the second pinch-down within 300ms and suppress the second pointer-click pair while emitting XR_EVT_DOUBLE_PINCH.
2026-04-24 22:59:30
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
spec_vr-hand-tracking-tech
Remove the Kotlin time-window double-pinch heuristic; POINTER_CLICK is now a pure audio-plus-pointer bridge and DOUBLE_PINCH is consumed only from native events.
2026-04-24 22:59:30
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManagerTest.kt
spec_vr-hand-tracking-tech
Add regression coverage for native-driven DOUBLE_PINCH dispatch and keep the VR router test aligned with the simplified Kotlin hand-click path.
2026-04-24 23:02:33
.claude/commands/spec.md
spec
Rewrite as strategic-only spec (Russian, high-level; no class-level detail); extend Status lifecycle
2026-04-24 23:02:33
.claude/commands/spec-tech.md
spec-tech
New skill: tactical multi-phase plan in PLAN/spec_/ with INDEX + PHASE_NN files
2026-04-24 23:02:33
.claude/commands/spec-check.md
spec-check
Extend to dual-mode audit: strategic, tactical (all phases or subset), flag-controlled
2026-04-24 23:02:33
.claude/commands/spec-fix.md
spec-fix
New skill: consume audit report and apply conservative mechanical fixes to repo
2026-04-24 23:02:33
.claude/commands/spec-update.md
spec-update
New skill: cross-model iterative refinement of spec files with revision history
2026-04-24 23:06:57
.claude/commands/spec-update.md
spec-update
Add Status gate: abort when spec locked for implementation (In Progress / later); –force-locked override with audit trail
2026-04-24 23:10:07
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Fix microgestures fallback guard so VR native builds against Khronos headers that expose only the extension macro without META typedefs.
2026-04-24 23:10:25
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Remove unused local microgesture fallback flags so the VR native shim passes clang -Werror with Khronos headers.
2026-04-25 00:39:10
.claude/commands/spec-dev.md
spec-dev
New skill: agentic developer executor for tactical phases with stop-on-ambiguity discipline and progress-marker management
2026-04-25 00:51:09
PLAN/spec_player-keybinding-phase1-preparation.md
spec-update
Refinement pass by claude-opus-4-7 (focus: all six). ACCEPT 2 (removed time-estimate violations), REVIEW 3 (clarified engine-count math, made Task 3 Done-when and exit-criteria item 7 verifiable), DISCUSS 3 (file relocation, missing INDEX, parent-spec stray char).
2026-04-25 01:09:29
PLAN/spec_player-keybinding-remapping.md
spec-tech
Fix H1 typo; flip strategic status Draft -> Approved (prep for tactical)
2026-04-25 01:22:56
PLAN/spec_player-keybinding-remapping/INDEX.md
spec-tech
Create tactical plan index for player-keybinding-remapping (8 phases)
2026-04-25 01:22:56
PLAN/spec_player-keybinding-remapping/PHASE_01__preparation-inventory.md
spec-tech
Phase 01: Preparation & Inventory (derived from standalone phase-1 file)
2026-04-25 01:22:57
PLAN/spec_player-keybinding-remapping/PHASE_02__foundation.md
spec-tech
Phase 02: Foundation (CommandId, InputTrigger, repo, defaults asset, DI)
2026-04-25 01:22:57
PLAN/spec_player-keybinding-remapping/PHASE_03__keyboard-migration.md
spec-tech
Phase 03: Keyboard migration (K1-K4 consume KeyBindingManager)
2026-04-25 01:22:57
PLAN/spec_player-keybinding-remapping/PHASE_04__input-devices-migration.md
spec-tech
Phase 04: Gamepad/Mouse/Media-button migration
2026-04-25 01:22:57
PLAN/spec_player-keybinding-remapping/PHASE_05__vr-migration.md
spec-tech
Phase 05: VR migration (V1 consumes manager; C++ untouched)
2026-04-25 01:22:57
PLAN/spec_player-keybinding-remapping/PHASE_06__remapping-ui.md
spec-tech
Phase 06: Remapping UI (settings entry + fullscreen dialog + capture)
2026-04-25 01:22:58
PLAN/spec_player-keybinding-remapping/PHASE_07__reset-conflict-polish.md
spec-tech
Phase 07: Hierarchical reset + conflict policy + polish
2026-04-25 01:22:58
PLAN/spec_player-keybinding-remapping/PHASE_08__docs-catalog-cleanup.md
spec-tech
Phase 08: Docs + catalog + cleanup
2026-04-25 01:22:58
PLAN/spec_player-keybinding-remapping.md
spec-tech
Move strategic status Approved -> Tactical; link tactical plan
2026-04-25 01:30:24
app_v2/src/vr/cpp/OpenXrNative.cpp, app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrNative.kt, app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt, app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
vr
Forward native OpenXR diagnostics via nativeDrainLog -> Timber so XR init failures appear in fastmediasorter_*.log; auto-route to standard PlayerActivity when XR init fails so user is not stuck in unusable headset panel UI
2026-04-25 01:40:02
app_v2/src/vr/cpp/OpenXrNative.cpp
vr
Fix xrCreateInstance failure with XR_ERROR_EXTENSION_DEPENDENCY_NOT_ENABLED on Horizon OS v74+: gate XR_META_hand_tracking_microgestures on XR_META_hand_tracking_aim presence (FB alias no longer accepted), and fall back to graphics-only extension set when dependency error still occurs
2026-04-25 02:02:49
PLAN/spec_player-keybinding-remapping.md
spec-tech
Resolve all 10 UI Ambiguity Gate items (strategic §10)
2026-04-25 02:02:49
PLAN/spec_player-keybinding-remapping/INDEX.md
spec-tech
Mark all 10 Pre-Implementation Blockers resolved; fix lint MD060/MD036
2026-04-25 02:24:08
PLAN/spec_vr-immersive-hud-gl.md
spec
Add strategic specification for VR immersive HUD via OpenXR composition layer
2026-04-25 02:31:37
PLAN/spec_vr-immersive-hud-gl.md
spec
Approve strategic spec; resolve research §6.2 (update cadence) and §6.5 (first-run HUD cheatsheet); fix defaults for §6.1, §6.3, §6.4
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl/INDEX.md
spec-tech
Create tactical plan for vr-immersive-hud-gl
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl/PHASE_01__foundations.md
spec-tech
Phase 01: foundations
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl/PHASE_02__composition-layer.md
spec-tech
Phase 02: composition-layer
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl/PHASE_03__bitmap-upload.md
spec-tech
Phase 03: bitmap-upload
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl/PHASE_04__scene-composer.md
spec-tech
Phase 04: scene-composer
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl/PHASE_05__event-routing.md
spec-tech
Phase 05: event-routing
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl/PHASE_06__transitional-guard.md
spec-tech
Phase 06: transitional-guard
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup
2026-04-25 02:41:44
PLAN/spec_vr-immersive-hud-gl.md
spec-tech
Move strategic status to Tactical; link tactical plan
2026-04-25 03:06:57
app_v2/build.gradle.kts
spec-vr-immersive-hud-gl
P01: VR_UI_COMPOSITION_LAYER_ENABLED BuildConfig flag for vr/vrUnlicensed flavors
2026-04-25 03:06:57
app_v2/src/vr/cpp/OpenXrNative.cpp
spec-vr-immersive-hud-gl
P01-03: HUD swapchain fields, JNI lifecycle stubs, viewSpace, XrCompositionLayerQuad, real bitmap upload via AndroidBitmap
2026-04-25 03:06:57
app_v2/src/vr/cpp/CMakeLists.txt
spec-vr-immersive-hud-gl
P03: link jnigraphics for AndroidBitmap_lockPixels
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrNative.kt
spec-vr-immersive-hud-gl
P01: external decls for HUD swapchain lifecycle + bitmap upload
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
spec-vr-immersive-hud-gl
P01: HUD swapchain pass-throughs
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudRenderer.kt
spec-vr-immersive-hud-gl
P03: VrHudRenderer (new)
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudState.kt
spec-vr-immersive-hud-gl
P04: VrHudState + RepeatMode + ActionBadge (new)
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneComposer.kt
spec-vr-immersive-hud-gl
P04: VrHudSceneComposer Canvas painter (new)
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
spec-vr-immersive-hud-gl
P05: VrHudSceneDriver GL backend of VrHudSink (new)
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudSink.kt
spec-vr-immersive-hud-gl
P05: VrHudSink interface (new)
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudIndicatorManager.kt
spec-vr-immersive-hud-gl
P05: implement VrHudSink; add showActionBadge/showRepeatMode/showBannerText/updateProgress
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrCheatsheetOverlayManager.kt
spec-vr-immersive-hud-gl
P06: route first-run cheatsheet through HUD banner when immersive UI is locked
2026-04-25 03:06:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-vr-immersive-hud-gl
P05-06: HUD pipeline wiring + 2 Hz progress ticker + isImmersiveUiLocked guard
2026-04-25 03:06:57
app_v2/src/main/res/values/strings.xml
spec-vr-immersive-hud-gl
P06: vr_hud_guard_file_ops, vr_hud_guard_controls, vr_hud_first_run_cheat (EN)
2026-04-25 03:06:57
app_v2/src/main/res/values-ru/strings.xml
spec-vr-immersive-hud-gl
P06: vr_hud_guard_* + first_run_cheat (RU)
2026-04-25 03:06:57
app_v2/src/main/res/values-uk/strings.xml
spec-vr-immersive-hud-gl
P06: vr_hud_guard_* + first_run_cheat (UK)
2026-04-25 03:06:57
docs/FEATURES.md
spec-vr-immersive-hud-gl
P07: VR Immersive HUD bullet
2026-04-25 03:06:57
docs/FEATURES_RU.md
spec-vr-immersive-hud-gl
P07: пункт «Иммерсивный HUD»
2026-04-25 03:06:57
docs/FEATURES_UK.md
spec-vr-immersive-hud-gl
P07: пункт «Іммерсивний HUD»
2026-04-25 03:06:57
dev/CATALOG/app_v2.jsonl
spec-vr-immersive-hud-gl
P07: regen via scan.ps1 (VR src/vr/* not covered by scanner - main only)
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl__audit_2026-04-25.md
spec-check
Audit vr-immersive-hud-gl: Partial (31 PASS / 9 WARN / 0 FAIL / 7 MANUAL)
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl.md
spec-check
Advance status to Partial; link audit report
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl/PHASE_01__foundations.md
spec-check
Flip phase header to Done
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl/PHASE_02__composition-layer.md
spec-check
Flip phase header to Done
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl/PHASE_03__bitmap-upload.md
spec-check
Flip phase header to Done
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl/PHASE_04__scene-composer.md
spec-check
Flip phase header to Done
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl/PHASE_05__event-routing.md
spec-check
Flip phase header to Done
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl/PHASE_06__transitional-guard.md
spec-check
Flip phase header to Done
2026-04-25 03:13:41
PLAN/spec_vr-immersive-hud-gl/PHASE_07__docs-catalog-cleanup.md
spec-check
Flip phase header to Done
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl__fix_2026-04-25.md
spec-fix
Fix-up run for vr-immersive-hud-gl: 7 auto / 8 manual follow-ups
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl__audit_2026-04-25.md
spec-fix
Annotate audit with FIXED / FOLLOW-UP tags
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl/PHASE_01__foundations.md
spec-fix
Flip 5 step Status to done
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl/PHASE_02__composition-layer.md
spec-fix
Flip 5 step Status to done
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl/PHASE_03__bitmap-upload.md
spec-fix
Flip 4 step Status to done
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl/PHASE_04__scene-composer.md
spec-fix
Flip steps 4.1 and 4.2 to done; 4.3 / 4.4 left as EXEMPT
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl/PHASE_05__event-routing.md
spec-fix
Flip 5 step Status to done
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl/PHASE_06__transitional-guard.md
spec-fix
Flip steps 6.1 / 6.2 / 6.3 to done; 6.4 left MANUAL
2026-04-25 03:18:52
PLAN/spec_vr-immersive-hud-gl/PHASE_07__docs-catalog-cleanup.md
spec-fix
Flip 5 step Status to done
2026-04-25 03:59:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudRenderer.kt
VrHudRenderer
Added throttled HUD visibility/upload diagnostics for immersive VR troubleshooting
2026-04-25 04:12:59
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative HUD layer
Fixed immersive HUD to present the actual uploaded swapchain image instead of hardcoded index 0
2026-04-25 04:14:08
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative HUD layer
Removed accidental compile-breaking insertion from stereo snapshot glReadPixels while keeping HUD swapchain index fix
2026-04-25 04:23:53
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative HUD layer
Reverted invalid HUD imageArrayIndex change that caused xrEndFrame failures, frozen video, and stuck VR exit flow
2026-04-25 04:53:25
app_v2/src/vr/cpp/OpenXrNative.cpp
VR HUD
Fix HUD invisible: move glTexSubImage2D to render thread via hudPendingPixels staging buffer; nativeUploadHudBitmap now only memcpy+sets flag, renderFrame drains on GL-owning thread
2026-04-25 04:53:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
VR 3D toggle
Fix 3D toggle button in panel mode: handle3dVrToggleClicked() now relaunches VrPlayerActivity via VrTaskTransition with EXTRA_FORCE_IMMERSIVE=true
2026-04-25 05:00:40
app_v2/build.gradle.kts
defaultConfig
Fix versionName typo: 2.65.4250.454 -> 2.60.4250.454 (April=04, YM must be 60 not 65)
2026-04-25 05:00:40
wear/build.gradle.kts
defaultConfig
Replace dynamic LocalDateTime version computation with hardcoded values; remove unused time imports; sync version with app_v2 (2.60.4250.454, code 26042504)
2026-04-25 05:00:40
dev/build-with-version.ps1
Invoke-VersionedBuild
Add wear/build.gradle.kts update step so both app_v2 and wear get the same version on every versioned build
2026-04-25 05:00:50
app_v2/build.gradle.kts
defaultConfig
Fix versionName typo: 2.65.4250.454 -> 2.60.4250.454 (April=04, YM must be 60 not 65)
2026-04-25 05:00:58
wear/build.gradle.kts
defaultConfig
Replace dynamic LocalDateTime version computation with hardcoded values matching app_v2; remove unused java.time imports; versionCode=26042504, versionName=2.60.4250.454
2026-04-25 05:00:58
dev/build-with-version.ps1
version update block
Add wear/build.gradle.kts sync step: both app_v2 and wear now receive the same versionName; wear uses 8-digit code (yyMMddHH)
2026-04-25 05:01:14
dev/build-with-version.ps1
version update block
Add wear/build.gradle.kts sync step: both app_v2 and wear now receive the same versionName; wear uses 8-digit code (yyMMddHH)
2026-04-25 05:21:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneComposer.kt
draw()
Fix HUD upside-down: wrap all draw calls in canvas.save()+scale(1f,-1f) to correct GL texture Y-axis flip; add drawStereoModeLabel()
2026-04-25 05:21:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudState.kt
stereoModeLabel
Add stereoModeLabel: String? = null field for stereo-mode HUD badge (2D, 360 SBS, VR180, etc.)
2026-04-25 05:21:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudSink.kt
reportActivity/showStereoModeLabel
Add reportActivity() and showStereoModeLabel(label) to VrHudSink interface
2026-04-25 05:21:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudIndicatorManager.kt
reportActivity/showStereoModeLabel
Add no-op stubs for reportActivity() and showStereoModeLabel() in view-overlay fallback
2026-04-25 05:21:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
auto-hide/reportActivity
Auto-hide HUD after 15s idle: fix anySlotActive (isPaused==true only), remove updateProgress visibilityWindow extension, add reportActivity() with 15s delayed clear, add showStereoModeLabel(), add persistedIsPaused tracking
2026-04-25 05:21:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
userForcedPanel/SBS_FULL fix
Add userForcedPanel param: returns STANDARD_PANEL_FALLBACK for spherical/SBS content when user taps panel toggle; fix SBS_FULL bug: forced-immersive on 2D content now uses MONO not SBS_FULL
2026-04-25 05:21:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
EXTRA_FORCE_PANEL/reportActivity/stereoLabel
Add EXTRA_FORCE_PANEL const, forcePanelThisLaunch field, pass to routeDecisionHelper; add reportActivity() on key ACTION_UP and handleVrCommand(); throttled reportActivity() in onGenericMotionEvent (1Hz); add applyStereoModeToVrRenderers call to showStereoModeLabel with StereoMode.toHudLabel() mapping
2026-04-25 05:21:17
app_v2/src/vr/.../VrHudSceneComposer.kt
draw()
Fix HUD upside-down: canvas Y-flip via save/scale(1f,-1f)/restore; add drawStereoModeLabel()
2026-04-25 05:21:17
app_v2/src/vr/.../VrHudState.kt
data class
Add stereoModeLabel: String? = null field
2026-04-25 05:21:17
app_v2/src/vr/.../VrHudSink.kt
interface
Add reportActivity() and showStereoModeLabel() to interface
2026-04-25 05:21:17
app_v2/src/vr/.../VrHudIndicatorManager.kt
impl
Add no-op stubs for reportActivity() and showStereoModeLabel()
2026-04-25 05:21:17
app_v2/src/vr/.../VrHudSceneDriver.kt
auto-hide
15s idle auto-hide: fix anySlotActive, remove updateProgress visibility extension, add reportActivity/showStereoModeLabel/persistedIsPaused
2026-04-25 05:21:17
app_v2/src/vr/.../VrRouteDecisionHelper.kt
decide()
Add userForcedPanel param; fix forced-immersive SBS_FULL bug (use MONO for 2D content)
2026-04-25 05:21:17
app_v2/src/vr/.../VrPlayerActivity.kt
multiple
EXTRA_FORCE_PANEL const+field; pass to decide(); reportActivity on key/command/motion; showStereoModeLabel on mode change; StereoMode.toHudLabel() mapping
2026-04-25 05:21:21
VrHudSceneComposer.kt
draw
Fix HUD Y-flip via canvas scale; add drawStereoModeLabel
2026-04-25 05:21:27
VrHudState.kt
data class
Add stereoModeLabel: String? = null field for HUD badge
2026-04-25 05:21:27
VrHudSink.kt
interface
Add reportActivity() and showStereoModeLabel() to interface
2026-04-25 05:21:27
VrHudIndicatorManager.kt
overrides
Add no-op stubs: reportActivity, showStereoModeLabel
2026-04-25 05:21:27
VrHudSceneDriver.kt
auto-hide
15s idle auto-hide: fix anySlotActive, remove updateProgress window extension, add reportActivity/showStereoModeLabel/persistedIsPaused
2026-04-25 05:21:27
VrRouteDecisionHelper.kt
decide
Add userForcedPanel param; fix forced-immersive SBS_FULL bug (use MONO for 2D)
2026-04-25 05:21:27
VrPlayerActivity.kt
multiple
EXTRA_FORCE_PANEL; reportActivity on key/command/motion; showStereoModeLabel on mode change; toHudLabel() mapping
2026-04-25 05:21:35
VrHudState.kt
stereoModeLabel
Add stereoModeLabel: String? = null field for HUD badge
2026-04-25 05:21:35
VrHudSink.kt
interface
Add reportActivity() and showStereoModeLabel()
2026-04-25 05:21:35
VrHudIndicatorManager.kt
stubs
No-op stubs for reportActivity and showStereoModeLabel
2026-04-25 05:21:35
VrHudSceneDriver.kt
auto-hide
15s idle auto-hide + reportActivity + showStereoModeLabel + persistedIsPaused
2026-04-25 05:21:35
VrRouteDecisionHelper.kt
decide
userForcedPanel param + fix SBS_FULL->MONO for forced-immersive 2D
2026-04-25 05:21:35
VrPlayerActivity.kt
multi
EXTRA_FORCE_PANEL + reportActivity on events + showStereoModeLabel + toHudLabel()
2026-04-25 12:01:32
PLAN/spec_vr-immersive-toggle.md
spec
Add strategic specification for ad-hoc vr-immersive-toggle
2026-04-25 12:07:21
PLAN/spec_vr-immersive-toggle/INDEX.md
spec-tech
Create tactical plan for vr-immersive-toggle
2026-04-25 12:07:21
PLAN/spec_vr-immersive-toggle/PHASE_01__resource-rename.md
spec-tech
Phase 01: resource-rename
2026-04-25 12:07:21
PLAN/spec_vr-immersive-toggle/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-04-25 12:07:21
PLAN/spec_vr-immersive-toggle.md
spec-tech
Move strategic status to Tactical; link tactical plan
2026-04-25 12:12:05
app_v2/src/main/res/drawable/ic_vr_3d.xml
vr-immersive-toggle
Replace 3D glyph with enter-arrow in ic_vr_3d
2026-04-25 12:13:24
app_v2/src/main/res/values/strings.xml
vr-immersive-toggle
Rename vr_toggle_enter/exit_description: Watch in 3D VR -> Immersive view / Exit 3D VR -> Exit immersive
2026-04-25 12:13:24
app_v2/src/main/res/values-ru/strings.xml
vr-immersive-toggle
RU: rename vr_toggle strings to В иммерсив / Из иммерсива
2026-04-25 12:13:24
app_v2/src/main/res/values-uk/strings.xml
vr-immersive-toggle
UK: rename vr_toggle strings to В іммерсив / З іммерсиву
2026-04-25 12:14:56
PLAN/spec_player-keybinding-remapping/INDEX.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all)
2026-04-25 12:28:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
vr-immersive-toggle
Update comment: 3DVR toggle -> immersive toggle
2026-04-25 12:28:39
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrToggleButtonManager.kt
vr-immersive-toggle
Update KDoc: Watch in 3D VR -> Immersive view
2026-04-25 12:28:43
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
vr-immersive-toggle
Update comments: 3DVR toggle button -> immersive toggle button
2026-04-25 12:29:39
docs/FEATURES.md
vr-immersive-toggle
Update VR Edition: 3DVR toggle button -> Immersive mode toggle, note 2D support
2026-04-25 12:29:43
docs/FEATURES_RU.md
vr-immersive-toggle
RU: Update VR Edition immersive toggle description
2026-04-25 12:29:43
docs/FEATURES_UK.md
vr-immersive-toggle
UK: Update VR Edition immersive toggle description
2026-04-25 12:29:48
PLAN/spec_vr-immersive-toggle.md
vr-immersive-toggle
Move strategic status to Tactical; link tactical plan
2026-04-25 12:30:48
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrToggleButtonManager.kt
vr-immersive-toggle
Update KDoc first line: 3DVR toggle button -> immersive toggle button
2026-04-25 12:30:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
vr-immersive-toggle
Update KDoc: 3DVR toggle button -> immersive toggle button
2026-04-25 12:35:48
PLAN/spec_vr-immersive-toggle__audit_2026-04-25.md
spec-check
Audit vr-immersive-toggle
2026-04-25 12:35:48
PLAN/spec_vr-immersive-toggle.md
spec-check
Advance status to Verified
2026-04-25 12:35:48
PLAN/spec_vr-immersive-toggle/INDEX.md
spec-check
Audit complete - all phases Verified
2026-04-25 12:35:49
PLAN/spec_vr-immersive-toggle/PHASE_02__docs-catalog-cleanup.md
spec-check
Tick Phase Done Criteria checkboxes
2026-04-25 12:47:10
temp/phase1/engine-paths-verified.txt
spec-tech-phase1
Phase 1 artefact: engine path verification
2026-04-25 12:47:10
temp/phase1/trigger-catalogue-raw.txt
spec-tech-phase1
Phase 1 artefact: trigger catalogue raw grep
2026-04-25 12:47:10
temp/phase1/emitted-actions.txt
spec-tech-phase1
Phase 1 artefact: emitted action inventory
2026-04-25 12:47:10
temp/phase1/debounce-literals.md
spec-tech-phase1
Phase 1 artefact: debounce / deadzone literals
2026-04-25 12:47:10
temp/phase1/new-engines-scan.txt
spec-tech-phase1
Phase 1 artefact: new-engines scan
2026-04-25 12:47:10
temp/phase1/commandid-candidates.md
spec-tech-phase1
Phase 1 artefact: CommandId candidate list
2026-04-25 12:47:10
temp/phase1/defaults-seed.md
spec-tech-phase1
Phase 1 artefact: default-binding seed table
2026-04-25 12:50:23
.claude/commands/spec-all.md
skill
Add /spec-all full pipeline orchestrator skill
2026-04-25 13:00:33
app_v2/src/main/assets/input/default_bindings.json
spec-dev 02.2
Create Defaults Map File asset: 70 binding entries, schema_version=1, keyboard/gamepad/mouse/vr triggers per command
2026-04-25 13:12:37
PLAN/spec_player-keybinding-remapping/PHASE_02__foundation.md
spec-update
Fix path data/db->data/local/db (5 occurrences), CommandId type->String in Steps 02.5/02.6, N+1 template->24_25 in Step 02.3 Verification
2026-04-25 13:15:02
app_v2/src/main/java/com/sza/fastmediasorter/data/input/InputBindingEntity.kt
spec-dev 02.3
Create Room entity for input_bindings table (PK: command_id+device+slot)
2026-04-25 13:15:02
app_v2/src/main/java/com/sza/fastmediasorter/data/input/InputBindingDao.kt
spec-dev 02.3
Create Room DAO for input_bindings: observeAll/upsert/deleteByCommand/deleteAll
2026-04-25 13:15:02
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
spec-dev 02.3
Bump DB version 24->25, add InputBindingEntity to entities, add inputBindingDao accessor, add MIGRATION_24_25
2026-04-25 13:15:02
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
spec-dev 02.3
Register MIGRATION_24_25 in Room.databaseBuilder
2026-04-25 13:16:29
app_v2/src/main/java/com/sza/fastmediasorter/data/input/DefaultsMapLoader.kt
spec-dev 02.4
Create DefaultsMapLoader: reads assets/input/default_bindings.json, deserializes triggers, returns List (synchronous)
2026-04-25 13:17:38
app_v2/src/main/java/com/sza/fastmediasorter/data/input/InputBindingRepository.kt
spec-dev 02.5
Create InputBindingRepository: observeResolvedBindings (merge defaults+overrides), setOverride, clearOverride, clearAll
2026-04-25 13:17:38
app_v2/src/main/java/com/sza/fastmediasorter/data/input/InputBindingDao.kt
spec-dev 02.5
Add deleteByCommandAndDevice query (needed by clearOverride)
2026-04-25 13:18:21
.claude/commands/spec-all.md
spec-all
Add forward-bias rules: spec self-correction, out-of-scope side-specs, revised hard-stop table
2026-04-25 13:18:27
app_v2/src/main/java/com/sza/fastmediasorter/core/input/KeyBindingManager.kt
spec-dev 02.6
Create KeyBindingManager: @Volatile indexes, resolve()/resolveKeyAction(), @ApplicationScope launchIn, O(1) hot path
2026-04-25 13:19:37
app_v2/src/main/java/com/sza/fastmediasorter/di/InputBindingModule.kt
spec-dev 02.7
Create Hilt module: provides InputBindingDao from AppDatabase (other classes use @Inject constructor)
2026-04-25 13:21:01
app_v2/src/test/java/com/sza/fastmediasorter/core/input/KeyBindingManagerTest.kt
spec-dev 02.8
Create unit test: 3 test cases for resolve() - override/default/unknown trigger, MockK + UnconfinedTestDispatcher
2026-04-25 14:04:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
camera-capture-command
Add disableCameraCapture + skipCameraFilenameDialog settings fields
2026-04-25 14:05:31
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
camera-capture-command
Add KEY_DISABLE_CAMERA_CAPTURE + KEY_SKIP_CAMERA_FILENAME_DIALOG DataStore keys
2026-04-25 14:06:01
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
camera-capture-command
Add disableCameraCapture + skipCameraFilenameDialog to BackupData
2026-04-25 14:06:33
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
camera-capture-command
Add disableCameraCapture + skipCameraFilenameDialog to BackupMapper
2026-04-25 14:06:56
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt
camera-capture-command
Export disableCameraCapture + skipCameraFilenameDialog in XML backup
2026-04-25 14:07:23
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
camera-capture-command
Import disableCameraCapture + skipCameraFilenameDialog from XML backup
2026-04-25 14:07:48
app_v2/src/main/res/drawable/ic_camera_capture.xml
camera-capture-command
Add camera capture icon (photo_camera Material vector)
2026-04-25 14:08:15
app_v2/src/main/res/layout/activity_browse.xml
camera-capture-command
Add btnCameraCapture button to Browse top command bar (visibility=gone initially)
2026-04-25 14:08:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseButtonSetupHelper.kt
camera-capture-command
Add onCameraCaptureClicked callback + click listener for btnCameraCapture
2026-04-25 14:14:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
spec-dev
Step 02.4: add isCameraCaptureVisible companion helper + updateCameraCaptureVisibility instance method
2026-04-25 14:15:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt
spec-dev
Step 02.5: add observeCameraCaptureVisibility() combining settings+state → sets btnCameraCapture visibility
2026-04-25 14:20:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt
spec-dev
Phase 03: create BrowseCameraCaptureManager - launcher registration, temp file, filename dialog, save routing (DCIM/local), upload fallback TODO
2026-04-25 14:29:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
spec-dev
Phase 04: add cameraCaptureManager init, onCameraCaptureClicked(), onCapturedFileSaved() delegates
2026-04-25 14:29:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseEvent.kt
spec-dev
Phase 04: add ScrollToFile event
2026-04-25 14:29:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
spec-dev
Phase 04: add scrollToFileAfterRefresh() - waits for file in state then emits ScrollToFile event
2026-04-25 14:29:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
spec-dev
Phase 04: add onScrollToFile callback + handle ScrollToFile event
2026-04-25 14:29:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
spec-dev
Phase 04: wire onScrollToFile lambda in BrowseEventHandler + update onCameraCaptureClicked stub
2026-04-25 14:37:35
app_v2/src/main/res/layout/fragment_settings_playback.xml
camera-capture-command
Phase 05: add switchDisableCameraCapture + rowSkipCameraFilename switch rows after containerDeleteConfirm
2026-04-25 14:37:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
camera-capture-command
Phase 05: wire switchDisableCameraCapture + switchSkipCameraFilenameDialog listeners and observer with rowSkipCameraFilename subordination
2026-04-25 14:37:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
camera-capture-command
Phase 05: add setting_disable_camera_capture + setting_skip_camera_filename_dialog entries to SettingsSearchRegistry
2026-04-25 14:40:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt
camera-capture-command
Add BrowseCameraCaptureManager: camera capture button in Browse, saves to resource root or DCIM, filename dialog, 2 settings
2026-04-25 14:51:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
camera-capture-command
Phase 02: add isCameraCaptureVisible companion + updateCameraCaptureVisibility for btnCameraCapture visibility logic
2026-04-25 14:51:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt
camera-capture-command
Phase 02: add observeCameraCaptureVisibility() combining settings+state to drive btnCameraCapture visibility
2026-04-25 14:51:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
camera-capture-command
Phase 04: add cameraCaptureManager field + onCameraCaptureClicked + onCapturedFileSaved
2026-04-25 14:51:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
camera-capture-command
Phase 04: handle BrowseEvent.ScrollToFile via onScrollToFile lambda wired in BrowseManagerInitializer
2026-04-25 14:51:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseEvent.kt
camera-capture-command
Phase 04: add ScrollToFile(fileName) event for post-capture scroll-to-position
2026-04-25 14:51:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
camera-capture-command
Phase 04: add scrollToFileAfterRefresh - waits for file in state then emits BrowseEvent.ScrollToFile
2026-04-25 14:51:52
app_v2/src/main/res/values/strings.xml
camera-capture-command
Phase 06: add setting_disable_camera_capture + setting_skip_camera_filename_dialog EN strings
2026-04-25 14:51:52
app_v2/src/main/res/values-ru/strings.xml
camera-capture-command
Phase 06: add setting_disable_camera_capture + setting_skip_camera_filename_dialog RU strings
2026-04-25 14:51:52
app_v2/src/main/res/values-uk/strings.xml
camera-capture-command
Phase 06: add setting_disable_camera_capture + setting_skip_camera_filename_dialog UK strings
2026-04-25 14:51:52
docs/FEATURES.md
camera-capture-command
Phase 06: add Camera capture bullet to Section 3 File Operations
2026-04-25 14:51:52
docs/FEATURES_RU.md
camera-capture-command
Phase 06: add Съёмка с камеры bullet to Section 3
2026-04-25 14:51:52
docs/FEATURES_UK.md
camera-capture-command
Phase 06: add Зйомка з камери bullet to Section 3
2026-04-25 14:52:22
PLAN/spec_camera-capture-command__audit_2026-04-25.md
spec-check
Audit camera-capture-command: 38 PASS, 3 WARN (bookkeeping), 14 MANUAL - Verified after fix
2026-04-25 14:52:22
PLAN/spec_camera-capture-command.md
spec-check
Advance status to Verified
2026-04-25 14:52:22
PLAN/spec_camera-capture-command/INDEX.md
spec-check
Flip INDEX status to Done, all 6 phases confirmed
2026-04-25 14:52:22
PLAN/spec_camera-capture-command/PHASE_01__data-model.md
spec-check
Fix phase header to Done + tick all Done Criteria (bookkeeping gap from original spec-dev run)
2026-04-25 14:52:28
PLAN/spec-all_camera-capture-command_2026-04-25.md
spec-all
Full pipeline completed: camera-capture-command → Verified
2026-04-25 15:11:50
app_v2/src/main/java/com/sza/fastmediasorter/domain/input/InputTrigger.kt
InputTrigger
Add fromKeyEvent companion extension + extractModifiers helper (Phase 03 Step 03.1)
2026-04-25 15:12:00
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler
Migrate K1: resolver intercept for PLAYER/VR_PLAYER surfaces; commandIdToAction bridge; optional KeyBindingManager param (Phase 03 Step 03.2)
2026-04-25 15:12:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
PlayerKeyboardHandler
Migrate K2: full resolver-first rewrite; handleCommand media-type dispatch; scan-code fallback; debounce preserved (Phase 03 Step 03.3)
2026-04-25 15:12:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Add @Inject keyBindingManager field for K2 resolver (Phase 03)
2026-04-25 15:12:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Pass keyBindingManager to PlayerKeyboardHandler constructor (Phase 03)
2026-04-25 15:12:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Add @Inject keyBindingManager; pass to PlayerKeyboardHandler (Phase 03)
2026-04-25 15:12:25
app_v2/src/test/java/com/sza/fastmediasorter/util/KeyboardShortcutHandlerTest.kt
KeyboardShortcutHandlerTest
Add 3 resolver-override regression tests: PlayPause override, NumLock modifier strip, KEYCODE_UNKNOWN→false (Phase 03 Step 03.6)
2026-04-25 15:12:37
app_v2/src/main/res/values/strings.xml
strings
Add missing camera-capture strings (cmd_camera_capture, camera_capture_*) - OOS fix for incomplete spec_camera-capture-command
2026-04-25 15:12:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Implement onCameraCaptureClicked stub - OOS fix for incomplete spec_camera-capture-command
2026-04-25 15:33:46
app_v2/src/main/java/com/sza/fastmediasorter/domain/input/InputTrigger.kt
InputTrigger
Add fromGamepadButton and fromGamepadAxis companion helpers (Phase 04)
2026-04-25 15:33:57
app_v2/src/main/java/com/sza/fastmediasorter/core/input/GamepadInputManager.kt
GamepadInputManager
Migrate to KeyBindingManager resolver; keep BROWSER legacy; preserve rate-limiters (Phase 04)
2026-04-25 15:34:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MouseEventHandler.kt
MouseEventHandler
Inject KeyBindingManager; resolve secondary/back/forward buttons; remove BUTTON_* constants (Phase 04)
2026-04-25 15:34:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
PlayerKeyboardHandler
Pass keyBindingManager and DomainSurface.PLAYER to MouseEventHandler constructor (Phase 04)
2026-04-25 15:34:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/MediaButtonRestartReceiver.kt
MediaButtonRestartReceiver
R1 migration: replace KEYCODE_MEDIA_* whitelist with KeyBindingManager resolver; add @AndroidEntryPoint (Phase 04)
2026-04-25 15:34:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
AudioPlaybackService
R2 bridge: add dispatchCommand(commandId) single entry point for all playback actions (Phase 04)
2026-04-25 15:34:09
app_v2/src/test/java/com/sza/fastmediasorter/core/input/GamepadInputManagerTest.kt
GamepadInputManagerTest
New: 5 resolver-path unit tests; BUTTON_A, AXIS_Y deadzone, rate-limit, BROWSER legacy (Phase 04)
2026-04-25 15:48:48
app_v2/src/main/java/com/sza/fastmediasorter/domain/input/InputTrigger.kt
InputTrigger
Phase 05: add fromXrInputEvent helper + KDoc on VrEvent subclass
2026-04-25 15:48:58
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
VrControllerInputManager
Phase 05: migrate XR event dispatch to KeyBindingManager resolver; add dispatchVrCommand
2026-04-25 15:48:58
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Phase 05: pass inherited keyBindingManager to VrControllerInputManager constructor
2026-04-25 15:48:58
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManagerTest.kt
VrControllerInputManagerTest
Phase 05: seed KeyBindingManager mock; add 3 new tests for override binding, rate-limit, unknown event
2026-04-25 16:28:30
app_v2/src/main/java/com/sza/fastmediasorter/domain/input/usecase/ResetGroupUseCase.kt
ResetGroupUseCase
Phase 07: group-level reset use case
2026-04-25 16:28:30
app_v2/src/main/java/com/sza/fastmediasorter/domain/input/usecase/ResetAllUseCase.kt
ResetAllUseCase
Phase 07: global reset use case
2026-04-25 16:28:30
app_v2/src/main/java/com/sza/fastmediasorter/domain/input/usecase/DetectConflictsUseCase.kt
DetectConflictsUseCase
Phase 07: conflict detection pure function
2026-04-25 16:28:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/helpers/ResetConfirmationDialog.kt
ResetConfirmationDialog
Phase 07: reset confirmation AlertDialog wrapper
2026-04-25 16:28:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingRemapViewModel.kt
KeybindingRemapViewModel
Phase 07: add conflicts map, PendingConfirmation, reset intent handlers
2026-04-25 16:28:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingListAdapter.kt
KeybindingListAdapter
Phase 07: add group reset icon to HeaderViewHolder
2026-04-25 16:28:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingRemapActivity.kt
KeybindingRemapActivity
Phase 07: wire group/global reset confirmation dialogs
2026-04-25 16:28:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/CaptureDialogFragment.kt
CaptureDialogFragment
Phase 07: add conflict block policy, tvConflict label
2026-04-25 16:28:48
app_v2/src/main/res/layout/dialog_capture_keybinding.xml
dialog_capture_keybinding
Phase 07: add tvConflict red label for conflict block policy
2026-04-25 16:28:48
app_v2/src/main/java/com/sza/fastmediasorter/data/input/InputBindingDao.kt
InputBindingDao
Phase 07: add deleteByCommandPrefix for group-level reset
2026-04-25 16:28:48
app_v2/src/main/java/com/sza/fastmediasorter/data/input/InputBindingRepository.kt
InputBindingRepository
Phase 07: add clearAllOverridesForGroup delegating to deleteByCommandPrefix
2026-04-25 16:28:57
docs/FEATURES.md
FEATURES
Phase 08: add Remappable controls bullet to Section 7
2026-04-25 16:28:57
docs/FEATURES_RU.md
FEATURES_RU
Phase 08: add Переназначаемое управление bullet to Section 7
2026-04-25 16:28:57
docs/FEATURES_UK.md
FEATURES_UK
Phase 08: add Перепризначуване керування bullet to Section 7
2026-04-25 16:28:57
dev/CATALOG/app_v2.jsonl
catalog
Phase 08: regenerated catalog + annotated 20 keybinding classes
2026-04-25 16:35:43
PLAN/spec_player-keybinding-remapping__audit_2026-04-25.md
spec-check
Audit player-keybinding-remapping - Verified
2026-04-25 16:35:43
PLAN/spec_player-keybinding-remapping.md
spec-check
Advance status to Verified
2026-04-25 16:35:43
PLAN/spec_player-keybinding-remapping/INDEX.md
spec-check
Completion Gate confirmed - Phases 8/8 done
2026-04-25 16:36:01
PLAN/spec-all_player-keybinding-remapping_2026-04-25.md
spec-all
Full pipeline completed: player-keybinding-remapping → Verified
2026-04-25 17:23:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
DefaultPlayerHelper
Fix: wrap tryOpenProbeChooser startActivity in Intent.createChooser() in both Fragment and Activity overloads - without it the app resolves its own probe intent and opens StandalonePlayerActivity with a 1-byte garbage file, producing a black screen
2026-04-25 19:57:32
app_v2/src/main/res/layout-land/activity_browse.xml
camera-capture-command
Add btnCameraCapture to landscape layout (missed during Phase 02)
2026-04-25 20:12:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingRemapActivity.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingListAdapter.kt
keybinding remap screen
Two-column layout in landscape: GridLayoutManager(spanCount=2) with SpanSizeLookup that stretches group headers to full width
2026-04-25 20:15:13
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
Add action_camera_capture item
2026-04-25 20:15:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Add onCameraCapture/isCameraVisible params and handler to showMenu()
2026-04-25 20:15:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Route camera capture through ResourceOpsMenuManager; remove onCameraCaptureClicked callback
2026-04-25 20:15:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseButtonSetupHelper.kt
BrowseButtonSetupHelper
Remove onCameraCaptureClicked from ButtonCallbacks and setupAllButtons
2026-04-25 20:15:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
BrowseStateUiUpdater
Remove updateCameraCaptureVisibility instance method
2026-04-25 20:15:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt
BrowseObserverManager
Remove observeCameraCaptureVisibility (visibility now handled by ResourceOpsMenuManager)
2026-04-25 20:15:13
app_v2/src/main/res/layout/activity_browse.xml
activity_browse
Remove btnCameraCapture from command bar
2026-04-25 20:15:13
app_v2/src/main/res/layout-land/activity_browse.xml
activity_browse (land)
Remove btnCameraCapture from landscape command bar
2026-04-25 20:21:18
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback
Move camera capture settings from File Operations to Behaviour section
2026-04-25 23:37:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Periodic ExoPlayer recreation every 4 tracks + native heap guard (15MB) to prevent native OOM on long sessions; managerScope.cancel() in onDestroy; position save interval 5s→15s
2026-04-25 23:37:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt
AudioCoverArtLoader
Clear Glide target before setImageBitmap to recycle previous Glide-managed drawable
2026-04-25 23:54:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt
BrowseCameraCaptureManager
Replace stub network/cloud upload with onUploadFile callback; remove uploadNetwork/uploadCloud stubs
2026-04-25 23:54:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Inject LocalToFtp/Smb/SftpStrategy; wire onUploadFile callback with real transfer strategies and CloudOperationStrategy
2026-04-25 23:54:31
app_v2/src/main/res/values/strings.xml
strings
Remove dead string camera_capture_upload_not_supported (EN)
2026-04-25 23:54:31
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Remove dead string camera_capture_upload_not_supported (RU)
2026-04-25 23:54:31
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Remove dead string camera_capture_upload_not_supported (UK)
2026-04-26 00:15:37
app_v2/src/main/res/layout/activity_player_unified.xml
PlayerActivity layout
Replace with container to prevent Chromium native heap loading at layout inflation
2026-04-26 00:15:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Add getOrCreateWebView(): create WebView programmatically on first EPUB open instead of reading from binding; fixes native OOM on emulator and low-memory devices
2026-04-26 00:15:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImagePreloadHelper.kt
ImagePreloadHelper
Add native heap guard: skip preload when free native memory < 20MB to prevent OOM kill
2026-04-26 03:34:23
PLAN/spec_virtual-resource-lang-rename/INDEX.md
spec-tech
Create tactical plan for virtual-resource-lang-rename
2026-04-26 03:34:23
PLAN/spec_virtual-resource-lang-rename/PHASE_01__domain-rename.md
spec-tech
Phase 01: domain-rename (VirtualResourceDefaultNames + RenameVirtualResourcesUseCase)
2026-04-26 03:34:23
PLAN/spec_virtual-resource-lang-rename/PHASE_02__startup-wiring.md
spec-tech
Phase 02: startup-wiring (AppStartupInitializer + FastMediaSorterApp)
2026-04-26 03:34:23
PLAN/spec_virtual-resource-lang-rename/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-04-26 03:34:23
PLAN/spec_virtual-resource-lang-rename.md
spec-tech
Move strategic status to Tactical; link tactical plan
2026-04-26 04:36:52
PLAN/spec_virtual-resource-lang-rename/PHASE_01__domain-rename.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all six)
2026-04-26 04:36:52
PLAN/spec_virtual-resource-lang-rename/PHASE_02__startup-wiring.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all six)
2026-04-26 04:36:52
PLAN/spec_virtual-resource-lang-rename/PHASE_03__docs-catalog-cleanup.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all six)
2026-04-26 04:36:52
PLAN/spec_virtual-resource-lang-rename/INDEX.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all six)
2026-04-26 04:42:34
app_v2/src/main/res/layout-land/activity_player_unified.xml
EpubViewerManager
Fix epubWebView type mismatch: WebView -> FrameLayout (landscape) to match portrait layout; resolves View binding addView unresolved reference
2026-04-26 04:42:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/VirtualResourceDefaultNames.kt
VirtualResourceDefaultNames
Add hardcoded default-names table for virtual resource auto-rename
2026-04-26 04:42:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RenameVirtualResourcesUseCase.kt
RenameVirtualResourcesUseCase
Add use-case: auto-rename virtual resources on language change
2026-04-26 04:47:44
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
AppStartupInitializer
Add RenameVirtualResourcesUseCase parameter; call renameVirtualResourceNames() at startup
2026-04-26 04:47:45
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Inject RenameVirtualResourcesUseCase; pass to AppStartupInitializer
2026-04-26 04:51:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/VirtualResourceDefaultNames.kt
VirtualResourceDefaultNames
New: hardcoded default-names table for virtual resource auto-rename
2026-04-26 04:51:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RenameVirtualResourcesUseCase.kt
RenameVirtualResourcesUseCase
New: auto-rename virtual resources on language change at startup
2026-04-26 04:51:00
docs/FEATURES.md
FEATURES
Add virtual resource language sync bullet (EN)
2026-04-26 04:51:00
docs/FEATURES_RU.md
FEATURES_RU
Add virtual resource language sync bullet (RU)
2026-04-26 04:51:00
docs/FEATURES_UK.md
FEATURES_UK
Add virtual resource language sync bullet (UK)
2026-04-26 04:52:57
PLAN/spec-all_virtual-resource-lang-rename_2026-04-26.md
spec-all
Full pipeline completed: virtual-resource-lang-rename -> Verified
2026-04-26 05:05:41
app_v2/build.gradle.kts
build
Migrate applicationVariants.all to androidComponents.onVariants - eliminates 3 obsolete-API Gradle warnings (applicationVariants, testVariants, unitTestVariants)
2026-04-26 05:11:40
app_v2/src/main/res/layout/fragment_settings_playback.xml, app_v2/src/main/java/.../PlaybackSettingsFragment.kt, values*/strings.xml
Settings > Playback
Merged camera-capture and skip-filename rows into one horizontal row; added help ImageButton with TooltipDialog (EN/RU/UK) describing the camera capture mechanism
2026-04-26 05:32:24
dev/spec-list-vr-problems.md
VR/Quest 3 analysis
Created VR problem list from session log 2026-04-26: 14 issues across P1-P4 (fisheye rendering, OU unsupported, no rays, empty HUD, stereo leaks, FALLBACK, haptic, debounce)
2026-04-26 05:49:34
PLAN/spec_vr-stereo-formats.md
spec
Add strategic specification for ad-hoc VR stereo formats (VR180 Fisheye + OU/TAB rendering)
2026-04-26 05:49:37
PLAN/spec_vr-immersive-controls-panel.md
spec
Add strategic specification for ad-hoc VR immersive controls panel (rays, interactive HUD, seek)
2026-04-26 05:49:40
PLAN/spec_vr-stereo-state.md
spec
Add strategic specification for ad-hoc VR stereo state isolation and detection reliability
2026-04-26 05:49:40
PLAN/spec_vr-input-reliability.md
spec
Add strategic specification for ad-hoc VR input reliability (Cinema fallback, debounce, haptic, race conditions)
2026-04-26 06:06:39
PLAN/spec_vr-immersive-controls-panel.md
spec-update
Refinement pass by claude-sonnet-4-6: typos, class names → role descriptions, Столп Г removed, яркость added to §8
2026-04-26 06:13:50
PLAN/spec_vr-immersive-controls-panel.md
spec-update
Refinement pass 2 by claude-sonnet-4-6: R1 applied (Q1 resolved, renumbered), яркость in §2/§11, 2 DISCUSS proposals added
2026-04-26 06:36:10
PLAN/spec_vr-immersive-controls-panel/INDEX.md
spec-tech
Create tactical plan for vr-immersive-controls-panel
2026-04-26 06:36:10
PLAN/spec_vr-immersive-controls-panel/PHASE_01__overlay-controls-extension.md
spec-tech
Phase 01: overlay-controls-extension
2026-04-26 06:36:10
PLAN/spec_vr-immersive-controls-panel/PHASE_02__controller-ray-native.md
spec-tech
Phase 02: controller-ray-native
2026-04-26 06:36:10
PLAN/spec_vr-immersive-controls-panel/PHASE_03__interactive-panel-gl.md
spec-tech
Phase 03: interactive-panel-gl
2026-04-26 06:36:10
PLAN/spec_vr-immersive-controls-panel/PHASE_04__ray-hud-hit-test.md
spec-tech
Phase 04: ray-hud-hit-test
2026-04-26 06:36:10
PLAN/spec_vr-immersive-controls-panel/PHASE_05__player-command-integration.md
spec-tech
Phase 05: player-command-integration
2026-04-26 06:36:10
PLAN/spec_vr-immersive-controls-panel/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-04-26 06:36:10
PLAN/spec_vr-immersive-controls-panel.md
spec-tech
Move strategic status to Tactical; link tactical plan
2026-04-26 12:47:01
PLAN/spec_vr-stereo-formats.md
spec-update
Refinement pass by Gemini 3.1 Pro (focus: language, structure, verifiability, consistency, completeness, style)
2026-04-26 12:50:10
PLAN/spec_vr-input-reliability.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all) - 11 ACCEPT applied, 2 REVIEW proposed (P-1 class names, P-2 Tier time estimate)
2026-04-26 12:58:42
.claude/commands/spec-update.md
spec-update
Updated rules to auto-apply straightforward fixes (ACCEPT) to avoid bureaucratic stops
2026-04-26 12:59:32
PLAN/spec_vr-immersive-controls-panel/INDEX.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all, –tactical –apply-all)
2026-04-26 12:59:37
PLAN/spec_vr-immersive-controls-panel/PHASE_01__overlay-controls-extension.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all, –tactical –apply-all)
2026-04-26 12:59:43
PLAN/spec_vr-immersive-controls-panel/PHASE_02__controller-ray-native.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all, –tactical –apply-all)
2026-04-26 12:59:43
PLAN/spec_vr-immersive-controls-panel/PHASE_03__interactive-panel-gl.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all, –tactical –apply-all)
2026-04-26 12:59:43
PLAN/spec_vr-immersive-controls-panel/PHASE_04__ray-hud-hit-test.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all, –tactical –apply-all)
2026-04-26 12:59:43
PLAN/spec_vr-immersive-controls-panel/PHASE_05__player-command-integration.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all, –tactical –apply-all)
2026-04-26 12:59:43
PLAN/spec_vr-immersive-controls-panel/PHASE_06__docs-catalog-cleanup.md
spec-update
Refinement pass by claude-sonnet-4-6 (focus: all, –tactical –apply-all)
2026-04-26 13:01:41
PLAN/spec_vr-stereo-state.md
spec-update
Auto-applied ACCEPT fixes: replaced class names with architectural terms, added Revision History
2026-04-26 13:04:49
.claude/commands/spec-update.md
spec-update
Rewrite skill: removed REVIEW category, all non-structural fixes are now auto-applied (FIX), only structural changes go to DISCUSS
2026-04-26 13:09:03
.claude/commands/*.md
skills-refactoring
Injected global ANTI-BUREAUCRACY execution directives into all 12 skills and replaced verbose reporting steps with terse output rules.
2026-04-26 13:24:05
PLAN/spec_network-smb-pooling.md
spec
Add strategic specification for ad-hoc SMB playback reliability and pooling recovery
2026-04-26 13:24:05
PLAN/spec_vr-xr-cold-start.md
spec
Add strategic specification for ad-hoc VR XR cold-start latency tracking
2026-04-26 13:26:27
.claude/commands/spec.md
spec
Rewrite: remove Language section, condense Quality Rules to Constraints block
2026-04-26 13:26:27
.claude/commands/spec-update.md
spec-update
Rewrite: remove Cross-model Workflow, Failure Modes; REVIEW auto-applies; output 1-line
2026-04-26 13:26:27
.claude/commands/spec-tech.md
spec-tech
Rewrite: remove Language section, condense process steps and Quality Rules
2026-04-26 13:26:27
.claude/commands/spec-fix.md
spec-fix
Rewrite: remove pre-apply table (unless –dry-run), Failure Modes; output 1-line
2026-04-26 13:26:27
.claude/commands/spec-check.md
spec-check
Rewrite: remove Failure Modes, condense Quality Rules; output 1-line
2026-04-26 13:26:27
.claude/commands/spec-dev.md
spec-dev
Rewrite: remove mandatory preview, Will Never Do, Failure Modes; output 1-line
2026-04-26 13:26:27
.claude/commands/spec-all.md
spec-all
Rewrite: compact Stage 8 report, remove Constants table and Pipeline art
2026-04-26 13:26:27
.claude/commands/doc-update.md
doc-update
Rewrite: remove verbose Step 4 summary table, condense Quality Rules
2026-04-26 13:33:52
PLAN/spec_vr-cast-availability-guard.md
spec
Add strategic specification for Quest VR Cast availability guard and spam suppression
2026-04-26 13:33:52
PLAN/spec_browse-thumbnail-reliability.md
spec
Add strategic specification for browse thumbnail cache and frame extraction reliability
2026-04-26 13:33:52
PLAN/spec_player-lifecycle-cancellation.md
spec
Add strategic specification for player lifecycle cancellation resilience
2026-04-26 13:36:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrLaunchRoute.kt
VrLaunchRoute
Add CINEMA_IMMERSIVE route for 2D video in VR (spec_vr-input-reliability Phase 01)
2026-04-26 13:36:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
VrRouteDecisionHelper
Route plain 2D VIDEO to CINEMA_IMMERSIVE instead of STANDARD_PANEL_FALLBACK
2026-04-26 13:36:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Handle CINEMA_IMMERSIVE route in resolvePlaybackRoute()
2026-04-26 13:36:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrCommandDebouncer.kt
VrCommandDebouncer
New: centralized VR command debouncer (500ms toggle, 300ms nav windows)
2026-04-26 13:36:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
VrControllerInputManager
Integrate VrCommandDebouncer in dispatchCommand() for CONTROLLER source
2026-04-26 13:36:22
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Add meta/touch_plus_controller profile, downgrade touch_pro LOGW to LOGD, handle XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED
2026-04-26 13:36:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
Guard setHudLayerVisible() with running.get() to prevent post-release native call
2026-04-26 13:36:22
PLAN/spec_vr-input-reliability.md
spec-all
Full pipeline vr-input-reliability: 4 phases implemented, vr-debug PASS
2026-04-26 13:37:07
PLAN/SPECS_CATALOG.md
spec-catalog
Add PLAN catalog of specifications and their current states
2026-04-26 13:39:54
PLAN/spec_vr-input-reliability__audit_2026-04-26.md
spec-check
Audit vr-input-reliability: Partial (0 FAIL, 3 WARN §6 open items, 6 MANUAL)
2026-04-26 13:39:54
PLAN/spec_vr-input-reliability.md
spec-check
Status → Partial
2026-04-26 13:41:40
PLAN/spec_vr-input-reliability.md
spec-check
Status → Verified (§6 items closed, all tactical checks PASS)
2026-04-26 13:41:40
PLAN/spec-all_vr-input-reliability_2026-04-26.md
spec-all
Pipeline complete: vr-input-reliability → Verified
2026-04-26 20:46:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
spec-dev
Phase 01: unify local video DiskCacheStrategy to RESOURCE; add network video failed-cache pre-check
2026-04-26 20:47:19
app_v2/src/main/java/com/sza/fastmediasorter/utils/GlideCacheStats.kt
spec-dev
Phase 02: add thumbnailRepoCacheHits counter; fix misleading zero-disk-cache warning
2026-04-26 20:47:19
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
spec-dev
Phase 02: wire GlideCacheStats.recordThumbnailRepoHit() on ThumbnailCache hit
2026-04-26 20:48:14
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/VideoExtractionFailurePersistence.kt
spec-dev
Phase 03: new persistent failure cache for video extraction (SharedPrefs, TTL 7d, max 500)
2026-04-26 20:48:14
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkFileModelLoader.kt
spec-dev
Phase 03: wire VideoExtractionFailurePersistence into markVideoAsFailed / isVideoFailed
2026-04-26 20:49:38
PLAN/spec_browse-thumbnail-reliability.md
spec-all
Strategic spec: Status -> Tactical (browse-thumbnail-reliability)
2026-04-26 20:49:38
PLAN/spec_browse-thumbnail-reliability/INDEX.md
spec-all
Tactical plan created: browse-thumbnail-reliability (4 phases)
2026-04-26 20:49:38
dev/CATALOG/app_v2.jsonl
catalog
Catalog: add VideoExtractionFailurePersistence
2026-04-26 20:53:57
PLAN/spec_browse-thumbnail-reliability__audit_2026-04-26.md
spec-check
Audit browse-thumbnail-reliability: Partial (0 FAIL, 3 WARN - tracking only)
2026-04-26 20:53:57
PLAN/spec_browse-thumbnail-reliability.md
spec-check
Status -> Partial
2026-04-26 20:57:11
PLAN/spec_browse-thumbnail-reliability__fix_2026-04-26.md
spec-fix
Fix-up run: browse-thumbnail-reliability (3 auto-fixed, 0 follow-ups)
2026-04-26 20:57:11
PLAN/spec_browse-thumbnail-reliability__audit_2026-04-26.md
spec-fix
Annotate audit: all 3 WARNs marked FIXED
2026-04-26 21:00:35
PLAN/spec_browse-thumbnail-reliability__audit_2026-04-26_2.md
spec-check
Audit browse-thumbnail-reliability - iter 2, Outcome: Verified
2026-04-26 21:00:35
PLAN/spec_browse-thumbnail-reliability.md
spec-check
Status → Verified
2026-04-26 21:00:35
PLAN/spec_browse-thumbnail-reliability/INDEX.md
spec-check
Completion Gate closed - all 6 criteria done
2026-04-26 21:00:35
PLAN/spec-all_browse-thumbnail-reliability_2026-04-26.md
spec-all
Pipeline Verified: browse-thumbnail-reliability
2026-04-26 21:04:10
PLAN/SPECS_CATALOG.md
catalog
Update: browse-thumbnail-reliability Verified; add new audits/fix/pipeline artifacts
2026-04-26 21:25:59
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbPlaybackConnectionTracker.kt
SmbPlaybackConnectionTracker
Create: PLAYER connection lifecycle state + watchdog timestamp tracking singleton
2026-04-26 21:25:59
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
Inject SmbPlaybackConnectionTracker; clearAll on reset/network-reconnect; fix garbled close() KDoc
2026-04-26 21:25:59
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbClient.kt
SmbClient
Add playbackConnectionTracker field for SmbDataSource access
2026-04-26 21:25:59
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
SmbDataSource
Fail-fast on double watchdog; fix reopenConnection to use pool manager; extract resolveSmbPath; remove dead fields
2026-04-26 21:25:59
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbErrorClassifier.kt
SmbErrorClassifier
Add SmbPlaybackErrorCategory enum for structured playback error classification
2026-04-26 21:25:59
PLAN/spec_network-smb-pooling__audit_2026-04-26.md
spec-check
Audit network-smb-pooling: Verified (26 PASS, 2 MANUAL, 0 FAIL)
2026-04-26 21:25:59
PLAN/spec_network-smb-pooling.md
spec-check
Status → Verified
2026-04-26 21:25:59
PLAN/spec-all_network-smb-pooling_2026-04-26.md
spec-all
Pipeline Verified: network-smb-pooling
2026-04-26 21:27:01
dev/CATALOG/app_v2.jsonl
Catalog
Sync after network-smb-pooling: new SmbPlaybackConnectionTracker, updated SmbDataSource/SmbConnectionManager/SmbClient/SmbErrorClassifier
2026-04-26 21:37:04
PLAN/spec_player-lifecycle-cancellation.md
spec-all
Strategic spec approved: player-lifecycle-cancellation
2026-04-26 21:37:56
PLAN/spec_player-lifecycle-cancellation/INDEX.md
spec-all
Tactical spec created: player-lifecycle-cancellation (1 phase)
2026-04-26 21:40:30
PLAN/spec_player-lifecycle-cancellation__audit_2026-04-26.md
spec-check
Audit player-lifecycle-cancellation
2026-04-26 21:40:30
PLAN/spec_player-lifecycle-cancellation.md
spec-check
Status → Verified
2026-04-26 21:40:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
spec-all
Distinguish CancellationException from real playback failure in playVideo catch
2026-04-26 21:48:07
PLAN/spec_vr-cast-availability-guard.md
spec-all
Strategic spec approved: vr-cast-availability-guard
2026-04-26 21:49:10
PLAN/spec_vr-cast-availability-guard/INDEX.md
spec-all
Tactical spec created: vr-cast-availability-guard (4 phases)
2026-04-26 21:51:48
PLAN/spec_vr-hand-tracking.md
spec-all
Approved: vr-hand-tracking strategic spec (blocker resolved)
2026-04-26 21:51:48
PLAN/spec_vr-hand-tracking-tech.md
spec-all
Approved: vr-hand-tracking-tech tactical spec
2026-04-26 21:55:48
app_v2/build.gradle.kts
BuildConfig
Add SUPPORT_CAST flag: false for vr/vrUnlicensed, true for all other flavors
2026-04-26 21:55:48
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Guard CastContext.getSharedInstance behind BuildConfig.SUPPORT_CAST
2026-04-26 21:55:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
CastMediaManager
Early-return in init() when SUPPORT_CAST=false; log single info message
2026-04-26 21:55:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Gate CAST command behind BuildConfig.SUPPORT_CAST
2026-04-26 21:55:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Gate btnCastCmd visibility behind BuildConfig.SUPPORT_CAST
2026-04-26 21:57:44
PLAN/spec_vr-hand-tracking__audit_2026-04-26.md
spec-check
Audit vr-hand-tracking
2026-04-26 21:57:44
PLAN/spec_vr-hand-tracking.md
spec-check
Status -> Broken
2026-04-26 21:58:05
PLAN/spec_vr-cast-availability-guard__audit_2026-04-26.md
spec-check
Audit vr-cast-availability-guard
2026-04-26 21:58:05
PLAN/spec_vr-cast-availability-guard.md
spec-check
Status → Partial (3 WARN: §6 Open items not updated in strategic spec)
2026-04-26 21:59:12
PLAN/spec_vr-cast-availability-guard__fix_2026-04-26.md
spec-fix
Fix-up run: 0 auto, 3 follow-ups (§6 Open items in strategic spec)
2026-04-26 21:59:12
PLAN/spec_vr-cast-availability-guard__audit_2026-04-26.md
spec-fix
Annotate audit: 3x [FOLLOW-UP]
2026-04-26 22:00:27
PLAN/spec_vr-cast-availability-guard__audit_2026-04-26_2.md
spec-check
Audit vr-cast-availability-guard (iteration 2)
2026-04-26 22:00:27
PLAN/spec_vr-cast-availability-guard.md
spec-check
Status → Verified
2026-04-26 22:00:34
PLAN/spec_vr-cast-availability-guard.md
spec-all
Pipeline Verified: vr-cast-availability-guard
2026-04-26 22:01:21
PLAN/spec_vr-hand-tracking__fix_2026-04-26.md
spec-fix
Fix-up run: vr-hand-tracking
2026-04-26 22:01:21
PLAN/spec_vr-hand-tracking__audit_2026-04-26.md
spec-fix
Annotate audit: vr-hand-tracking
2026-04-26 22:01:21
docs/FEATURES.md
spec-fix
Add VR hand tracking bullet
2026-04-26 22:01:21
docs/FEATURES_RU.md
spec-fix
Add VR hand tracking TODO translate
2026-04-26 22:01:21
docs/FEATURES_UK.md
spec-fix
Add VR hand tracking TODO translate
2026-04-26 22:03:26
PLAN/spec_vr-hand-tracking__audit_2026-04-26_2.md
spec-check
Audit vr-hand-tracking (iter 2)
2026-04-26 22:03:26
PLAN/spec_vr-hand-tracking.md
spec-check
Status -> Broken (audit pointer updated)
2026-04-26 22:04:34
app_v2/src/main/res/values/strings.xml
VrCheatsheetOverlayManager
Add hand tracking cheatsheet strings (EN)
2026-04-26 22:04:34
app_v2/src/main/res/values-ru/strings.xml
VrCheatsheetOverlayManager
Add hand tracking cheatsheet strings (RU)
2026-04-26 22:04:34
app_v2/src/main/res/values-uk/strings.xml
VrCheatsheetOverlayManager
Add hand tracking cheatsheet strings (UK)
2026-04-26 22:04:34
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrCheatsheetOverlayManager.kt
VrCheatsheetOverlayManager
Append hand tracking section to buildContent()
2026-04-26 22:08:54
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Add missing PlaybackCommand when-branches (panel commands stub)
2026-04-26 22:08:54
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelDriver.kt
VrInteractivePanelDriver
Stub interface for controls-panel (spec_vr-immersive-controls-panel)
2026-04-26 22:10:01
PLAN/spec_vr-hand-tracking__audit_2026-04-26_3.md
spec-check
Audit vr-hand-tracking (iter 3)
2026-04-26 22:10:01
PLAN/spec_vr-hand-tracking.md
spec-check
Status -> Partial
2026-04-26 22:10:08
PLAN/spec_vr-hand-tracking.md
spec-all
Pipeline Partial: vr-hand-tracking
2026-04-26 22:25:45
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Phase 02: controller aim pose actions, syncControllerAimRay, onControllerPointerMove JNI, lastPredictedDisplayTime, aim space cleanup
2026-04-26 22:25:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/XrInputCallback.kt
XrInputCallback
Phase 02: add onControllerPointerMove default method
2026-04-26 22:25:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrNative.kt
OpenXrNative
Phase 02: add nativeSetControllerRayEnabled JNI binding
2026-04-26 22:25:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
Phase 02: add setControllerRayEnabled pass-through
2026-04-26 22:25:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrControllerRayManager.kt
VrControllerRayManager
Phase 02: new - NDC to MotionEvent bridge for controller aim ray
2026-04-26 22:25:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
VrControllerInputManager
Phase 02: add onControllerPointerMove override + controllerPointerMoveSink
2026-04-26 22:25:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Phase 02: wire VrControllerRayManager, detach controllerPointerMoveSink in onDestroy
2026-04-26 22:35:55
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudState.kt
feature
Phase 03: add panel-specific fields (brightness, speed, track, panelVisible, hoveredZoneId, seekDragFraction)
2026-04-26 22:35:55
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelRenderer.kt
feature
Phase 03: new VrInteractivePanelRenderer (panel swapchain owner)
2026-04-26 22:35:55
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelComposer.kt
feature
Phase 03: new VrInteractivePanelComposer (Canvas painter for interactive panel)
2026-04-26 22:35:55
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelDriver.kt
feature
Phase 03: new VrInteractivePanelDriver (state machine + auto-hide for GL panel)
2026-04-26 22:35:55
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrNative.kt
feature
Phase 03: add panel swapchain JNI bindings
2026-04-26 22:35:55
app_v2/src/vr/cpp/OpenXrNative.cpp
feature
Phase 03: implement panel swapchain, upload, and quad layer in xrEndFrame
2026-04-26 22:35:55
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrControlOverlayManager.kt
feature
Phase 03: delegate show/hide/toggle to VrInteractivePanelDriver when available
2026-04-26 22:43:17
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrRayPanelHitTester.kt
feature
Phase 04: new VrRayPanelHitTester (NDC -> UV ray-plane intersection)
2026-04-26 22:43:17
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrPanelHitZoneResolver.kt
feature
Phase 04: new VrPanelHitZoneResolver (UV -> zone ID, seek fraction)
2026-04-26 22:43:17
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/XrInputCallback.kt
feature
Phase 04: add onControllerPanelHover default method
2026-04-26 22:43:17
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
feature
Phase 04: wire hit-test into onControllerPointerMove; emit onControllerPanelHover
2026-04-26 22:47:28
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
feature
Phase 05: full zone->PlaybackCommand dispatch table; seek-drag debounce; live state feed to panel
2026-04-26 22:47:28
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelDriver.kt
feature
Phase 05: implement VrHudSink panel methods; confirm 10s auto-hide; rename autoHideRunnable
2026-04-26 22:47:28
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudSink.kt
feature
Phase 05: add panel state feed default methods
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelRenderer.kt
VrInteractivePanelRenderer
New: OpenXR panel swapchain owner - bitmap upload loop for GL interactive controls panel
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelComposer.kt
VrInteractivePanelComposer
New: Canvas painter for VR controls panel - 14 hit zones, Y-flip for GL coords
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelDriver.kt
VrInteractivePanelDriver
New: state machine + auto-hide driver for GL panel; implements VrHudSink
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrRayPanelHitTester.kt
VrRayPanelHitTester
New: ray-plane intersection - controller NDC to UV on panel texture
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrPanelHitZoneResolver.kt
VrPanelHitZoneResolver
New: UV to zone ID + seek fraction resolver for interactive panel hit-test
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrControllerRayManager.kt
VrControllerRayManager
New: NDC-to-MotionEvent bridge for controller aim ray → overlay touch dispatch
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrRayPanelHitTester.kt
VrRayPanelHitTester
Phase 04 wiring: attached to VrControllerInputManager via OpenXrSessionManager.attachHitTester
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
VrControllerInputManager
Phase 04: added panelHitTester/panelHoverSink/panelClickSink wiring + PAUSE_TOGGLE intercept
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudSink.kt
VrHudSink
Phase 05: added 8 default panel-feed methods (updatePanelVolume/Brightness/Speed etc.)
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Phase 05: panel command dispatch (14 zones), seek debounce, progress + volume feed to panelDriver
2026-04-26 22:54:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrControlOverlayManager.kt
VrControlOverlayManager
Phase 03: delegate show/hide/toggle to optional VrInteractivePanelDriver
2026-04-26 22:54:03
dev/CATALOG/app_v2.jsonl
Catalog
Step 6.2: manually added 6 new VR classes (Phase 02-05 deliverables) to catalog
2026-04-26 23:01:54
PLAN/spec_vr-immersive-controls-panel__audit_2026-04-26.md
spec-check
Audit vr-immersive-controls-panel
2026-04-26 23:01:54
PLAN/spec_vr-immersive-controls-panel.md
spec-check
Status → Broken (3 FAIL: GL ray, C++ line budget, updatePanelTrackLabel)
2026-04-26 23:01:54
PLAN/spec_vr-immersive-controls-panel/INDEX.md
spec-check
Status → Done, Phases 6/6 done
2026-04-26 23:12:51
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
spec-fix: add cycleAudioTrackAndUpdatePanel() - wires CycleAudioTrack command + updatePanelTrackLabel feed
2026-04-26 23:12:51
PLAN/spec_vr-immersive-controls-panel__audit_2026-04-26.md
spec-fix
Reclassify GL_LINES/line-budget to WARN; FAIL 3 fixed - outcome Broken → Partial
2026-04-26 23:12:51
PLAN/spec_vr-immersive-controls-panel.md
spec-fix
Status → Partial
2026-04-26 23:28:04
PLAN/spec_vr-stereo-formats/INDEX.md
spec-all
Tactical spec: vr-stereo-formats (2 phases: OU routing fix + fisheye undistortion shader)
2026-04-26 23:34:56
app_v2/src/main/java/com/sza/fastmediasorter/vr/render/DefaultVrLayerFactory.kt
DefaultVrLayerFactory
Fix OU routing: add standalone branch so StereoMode.OU always uses PROJECTION layer regardless of VrRenderingMode
2026-04-26 23:34:56
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer
Add equidistant fisheye undistortion GL shader for VR180_FISHEYE_SBS stereo mode
2026-04-26 23:34:56
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Promote mainHandler to member field (was local val, caused unresolved ref at line 1008/1010/1014)
2026-04-26 23:34:56
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelDriver.kt
VrInteractivePanelDriver
Add missing override modifier to updateProgress
2026-04-26 23:38:45
PLAN/spec_vr-stereo-formats__audit_2026-04-26.md
spec-check
Audit vr-stereo-formats
2026-04-26 23:38:45
PLAN/spec_vr-stereo-formats.md
spec-check
Status → Broken (FEATURES docs missing fisheye/OU TAB bullet)
2026-04-26 23:41:32
PLAN/spec_vr-stereo-state.md
spec-all
Strategic spec approved: vr-stereo-state
2026-04-26 23:42:16
PLAN/spec_vr-stereo-formats__fix_2026-04-26.md
spec-fix
Fix-up run: FEATURES EN/RU/UK bullets + §6 research items resolved
2026-04-26 23:42:16
PLAN/spec_vr-stereo-formats__audit_2026-04-26.md
spec-fix
Annotate audit
2026-04-26 23:42:16
docs/FEATURES.md
spec-fix
Add VR180 Fisheye and OU/TAB stereo bullet to §8 VR Edition
2026-04-26 23:42:16
docs/FEATURES_RU.md
spec-fix
Add TODO translate placeholder for VR180 Fisheye / OU TAB bullet
2026-04-26 23:42:16
docs/FEATURES_UK.md
spec-fix
Add TODO translate placeholder for VR180 Fisheye / OU TAB bullet
2026-04-26 23:46:24
PLAN/spec_vr-stereo-formats__audit_2026-04-26_2.md
spec-check
Audit vr-stereo-formats (pass 2)
2026-04-26 23:46:24
PLAN/spec_vr-stereo-formats.md
spec-check
Status -> Partial
2026-04-26 23:46:28
PLAN/spec_vr-stereo-formats.md
spec-all
Pipeline Partial: vr-stereo-formats
2026-04-26 23:52:42
PLAN/spec_vr-stereo-state/INDEX.md
spec-tech
Create tactical plan for vr-stereo-state
2026-04-26 23:52:42
PLAN/spec_vr-stereo-state/PHASE_01__stereo-token.md
spec-tech
Phase 01: stereo-token
2026-04-26 23:52:42
PLAN/spec_vr-stereo-state/PHASE_02__detection-path-guard.md
spec-tech
Phase 02: detection-path-guard
2026-04-26 23:52:42
PLAN/spec_vr-stereo-state/PHASE_03__settled-gl-observer.md
spec-tech
Phase 03: settled-gl-observer
2026-04-26 23:52:42
PLAN/spec_vr-stereo-state/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-04-26 23:52:42
PLAN/spec_vr-stereo-state.md
spec-tech
Status → Tactical
2026-04-26 23:56:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Phase 01: add stereo/mono filename tokens and spherical detection branches
2026-04-27 00:01:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Phase 02: detection path guard in onTracksChanged
2026-04-27 00:01:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
Phase 02: forward forFilePath to setAutoDetectedStereoMode
2026-04-27 00:01:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Phase 02: setAutoDetectedStereoMode accepts forFilePath
2026-04-27 00:01:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinator.kt
PlayerStereoModeCoordinator
Phase 02: stale-detection guard in setAutoDetectedStereoMode
2026-04-27 00:04:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Phase 03: filter AUTO from video GL stereoMode collector
2026-04-27 00:09:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Phase 01: add stereo/mono filename tokens with conflict and spherical context rules
2026-04-27 00:09:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Phase 02: detection path guard in onTracksChanged, thread forFilePath through callback
2026-04-27 00:09:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
Phase 02: forward forFilePath to setAutoDetectedStereoMode
2026-04-27 00:09:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Phase 02: setAutoDetectedStereoMode accepts forFilePath with default empty string
2026-04-27 00:09:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinator.kt
PlayerStereoModeCoordinator
Phase 02: stale-detection guard in setAutoDetectedStereoMode using forFilePath vs currentStereoOverridePath
2026-04-27 00:09:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Phase 03: filter AUTO from video GL stereoMode collector to eliminate transient GL pipeline restart
2026-04-27 00:09:55
docs/FEATURES.md
FEATURES
Phase 04: stereo isolation note and filename token list in 3D stereo detection bullet
2026-04-27 00:09:55
docs/FEATURES_RU.md
FEATURES_RU
Phase 04: stereo isolation note (RU)
2026-04-27 00:09:55
docs/FEATURES_UK.md
FEATURES_UK
Phase 04: stereo isolation note (UK)
2026-04-27 00:09:55
dev/CATALOG/app_v2.jsonl
app_v2.jsonl
Phase 04: catalog regen after vr-stereo-state implementation
2026-04-27 00:10:56
PLAN/spec_vr-stereo-state.md
spec-all
Status -> Implemented: vr-stereo-state all 4 phases done
2026-04-27 00:16:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
Extend filename tokens (hOU, TAB, RL, FullSBS, Half-SBS) and Matroska values (2=OU, 13/14=SBS_HALF)
2026-04-27 00:16:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/Mp4SpatialMetadataReader.kt
Mp4SpatialMetadataReader
Add st3d mode 3 (VR180_FISHEYE_SBS) and mode 4 (EQUIRECT_360_SBS reversed)
2026-04-27 00:16:20
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoDetectorTest.kt
StereoDetectorTest
Add tests for new filename patterns and Matroska/MP4 metadata values
2026-04-27 00:18:09
PLAN/spec_vr-stereo-state__audit_2026-04-27.md
spec-check
Audit vr-stereo-state: Verified, 36 PASS, 5 MANUAL, 0 FAIL
2026-04-27 00:18:09
PLAN/spec_vr-stereo-state.md
spec-check
Status -> Verified
2026-04-27 00:18:09
PLAN/spec_vr-stereo-state/PHASE_01__stereo-token.md
spec-check
Fix Steps done counter: 3/3
2026-04-27 00:18:09
PLAN/spec_vr-stereo-state/PHASE_02__detection-path-guard.md
spec-check
Fix Steps done counter: 5/5
2026-04-27 00:18:09
PLAN/spec_vr-stereo-state/PHASE_03__settled-gl-observer.md
spec-check
Fix Steps done counter: 2/2
2026-04-27 00:20:51
PLAN/spec_vr-xr-cold-start.md
spec-all
Strategic spec approved: vr-xr-cold-start
2026-04-27 00:27:18
PLAN/spec_vr-xr-cold-start/INDEX.md
spec-tech
Create tactical plan for vr-xr-cold-start
2026-04-27 00:27:18
PLAN/spec_vr-xr-cold-start/PHASE_01__stage-instrumentation.md
spec-tech
Phase 01: stage-instrumentation
2026-04-27 00:27:18
PLAN/spec_vr-xr-cold-start/PHASE_02__measurement-run.md
spec-tech
Phase 02: measurement-run
2026-04-27 00:27:18
PLAN/spec_vr-xr-cold-start/PHASE_03__optimization-or-backlog.md
spec-tech
Phase 03: optimization-or-backlog
2026-04-27 00:27:18
PLAN/spec_vr-xr-cold-start/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-04-27 00:27:18
PLAN/spec_vr-xr-cold-start.md
spec-tech
Status -> Tactical
2026-04-27 00:31:09
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
spec-dev
Phase 01: add VR_PERF timing markers for cold-start stages (egl_create, native_init, session_ready_cb)
2026-04-27 00:31:09
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-dev
Phase 01: add VR_PERF timing fields + initializeVrRenderPipeline + first-frame marker
2026-04-27 00:33:35
PLAN/spec_vr-xr-cold-start.md
spec-all
Pipeline Partial: vr-xr-cold-start - Phase 01 done, Phase 02 manual (Quest 3 required)
2026-04-27 00:45:44
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SmbOperationStrategy.kt
SmbOperationStrategy
Downgraded ‘using SMB host credentials’ log from W to D - expected fallback, was spamming W per file in batch ops
2026-04-27 00:56:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortMenuManager.kt
BrowseSortMenuManager
Fix: add onRandomReshuffle callback; RANDOM now reshuffles on every tap from popup menu
2026-04-27 00:56:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Wire onRandomReshuffle = { viewModel.reshuffleRandom() } in BrowseSortMenuManager init
2026-04-27 01:01:38
app_v2/src/main/res/layout/activity_browse.xml
layoutControls
Add btnPlayRandom (dice icon) before btnPlay in top command bar
2026-04-27 01:01:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseButtonSetupHelper.kt
BrowseButtonSetupHelper
Add onPlayRandomClicked to ButtonCallbacks interface + wire click + landscape label
2026-04-27 01:01:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Implement startRandomPlay: reshuffleRandom + launch PlayerActivity from position 0
2026-04-27 01:01:41
app_v2/src/main/res/values/strings.xml
strings
Add play_random / play_random_short string resources (EN/RU/UK)
2026-04-27 01:03:32
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategies/LocalToSmbStrategy.kt
LocalToSmbStrategy
Wrap copy() body in withContext(Dispatchers.IO) - fixes NetworkOnMainThreadException when uploading via camera capture from BrowseActivity (lifecycleScope runs on Main)
2026-04-27 01:09:51
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategies/LocalToFtpStrategy.kt
LocalToFtpStrategy
Wrap copy() body in withContext(Dispatchers.IO) - fixes potential NetworkOnMainThreadException (same root cause as SMB fix)
2026-04-27 01:09:51
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategies/LocalToSftpStrategy.kt
LocalToSftpStrategy
Wrap copy() body in withContext(Dispatchers.IO) - fixes potential NetworkOnMainThreadException (same root cause as SMB fix)
2026-04-27 01:15:04
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategies/LocalToFtpStrategy.kt
LocalToFtpStrategy
Fix: return@withContext label in withContext lambda (return was prohibited)
2026-04-27 01:15:04
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategies/LocalToSftpStrategy.kt
LocalToSftpStrategy
Fix: return@withContext label in withContext lambda (return was prohibited)
2026-04-27 01:15:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseButtonSetupHelper.kt
BrowseButtonSetupHelper
Fix: null-safe access on nullable btnPlayRandom (setOnClickListener and text assignment)
2026-04-27 01:24:48
app_v2/src/main/res/layout/activity_browse.xml
btnPlayRandom
Set initial visibility=gone; button shown only for single-type media libraries
2026-04-27 01:24:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
MediaResource
Added isVideoOnly() helper method (mirrors isAudioOnly/isOnlyImage pattern)
2026-04-27 01:24:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
BrowseStateUiUpdater
Added updatePlayRandomButtonVisibility() - shows btnPlayRandom only for single-type media libraries
2026-04-27 01:24:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputAction.kt
InputAction
Added PlayRandomCurrent and StartSlideshow actions for Browse surface
2026-04-27 01:24:54
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler.mapBrowse
Added Ctrl+P -> PlayRandomCurrent shortcut for Browse surface
2026-04-27 01:24:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/KeyboardNavigationManager.kt
KeyboardNavigationCallbacks
Added playRandomFiles() callback + PlayRandomCurrent dispatch
2026-04-27 01:24:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Wired playRandomFiles() callback -> startRandomPlay() in keyboard navigation callbacks
2026-04-27 01:26:07
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategies/LocalToSmbStrategy.kt
LocalToSmbStrategy
Fix: inject NetworkCredentialsRepository and resolve SMB credentials before upload (was passing empty user/password, causing STATUS_LOGON_FAILURE)
2026-04-27 01:26:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
BrowseStateUiUpdater
Fix: null-safe access on nullable btnPlayRandom.isVisible
2026-04-27 01:33:53
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategies/LocalToSmbStrategy.kt
LocalToSmbStrategy
Add getCredentialsByHost fallback in resolveConnectionInfo - fixes auth failure when credentials stored with empty shareName (mirrors SmbOperationStrategy logic)
2026-04-27 01:52:11
app_v2/src/main/res/layout/fragment_settings_general.xml
containerSystem
Reorganized System section: replaced 4 labeled dropdowns with 2x2 grid (NetworkParallelism+PrefetchCache | StreamingCleanup+StreamingTtl), removed label TextViews (hint inside dropdown is sufficient)
2026-04-27 01:56:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NetworkFileManager.kt
NetworkFileManager
prepareFileForRead: added contentUri + FileInputStream fallbacks when File.exists()=false (fixes Android/data// FUSE access + EACCES diagnostics)
2026-04-27 02:04:47
app_v2/src/main/res/layout/fragment_settings_general.xml
VR Debug build
Fix: removed UTF-8 BOM that caused ANTLR parse failure in mergeVrDebugResources / packageVrDebugResources (NullPointerException in LayoutFileParser)
2026-04-27 02:16:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Fix: preCacheNetworkAudio now rethrows CancellationException instead of logging it as Timber.e - structured cancellation (lifecycleScope destroyed mid-download) is not an error
2026-04-27 02:24:11
app_v2/src/main/res/layout-land/activity_browse.xml
btnPlayRandom
Added Play Random button (TextButton style, visibility=gone) before btnPlay; same single-type-library condition applied via BrowseStateUiUpdater
2026-04-27 02:59:29
PLAN/spec_vr-stereo-projection-mapping.md
spec
Add strategic spec for ad-hoc VR stereo projection mapping & pipeline coherence (BUG-01 from log 2026-04-27)
2026-04-27 03:01:13
PLAN/spec_vr-panel-swapchain-availability.md
spec
Add strategic spec for ad-hoc VR panel swapchain availability & command idempotency (BUG-02/03/04 from log 2026-04-27)
2026-04-27 03:02:46
PLAN/spec_vr-photo-capture-reliability.md
spec
Add strategic spec for ad-hoc VR photo capture reliability & diagnostics (BUG-05 from log 2026-04-27)
2026-04-27 03:04:21
PLAN/spec_vr-auto-immersive-setting.md
spec
Add strategic spec for ad-hoc VR auto-immersive setting (FEATURE from vr27040230.md)
2026-04-27 03:05:35
PLAN/SPECS_CATALOG.md
spec
Refresh PLAN catalog: 11 done specs archived to temp/done, 4 new ad-hoc specs from vr27040230.md log analysis
2026-04-27 03:07:51
PLAN/SPECS_CATALOG.md
spec
Trim catalog to active specs only (drop archive section)
2026-04-27 03:15:47
PLAN/spec_vr-stereo-projection-mapping.md
spec-all
Approve strategic spec; lint fixes
2026-04-27 03:21:49
PLAN/spec_vr-stereo-projection-mapping/INDEX.md
spec-tech
Create tactical plan for vr-stereo-projection-mapping
2026-04-27 03:21:49
PLAN/spec_vr-stereo-projection-mapping/PHASE_01__stereo-token-contract.md
spec-tech
Phase 01: stereo-token-contract
2026-04-27 03:21:49
PLAN/spec_vr-stereo-projection-mapping/PHASE_02__layer-descriptor-reason-audit.md
spec-tech
Phase 02: layer-descriptor-reason-audit
2026-04-27 03:21:49
PLAN/spec_vr-stereo-projection-mapping/PHASE_03__coherence-guard.md
spec-tech
Phase 03: coherence-guard
2026-04-27 03:21:49
PLAN/spec_vr-stereo-projection-mapping/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-04-27 03:21:50
PLAN/spec_vr-stereo-projection-mapping.md
spec-tech
Status -> Tactical
2026-04-27 03:29:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinator.kt
PlayerStereoModeCoordinator
vr-stereo-projection-mapping: split requested vs effective stereoMode; suppress UNKNOWN/AUTO downstream
2026-04-27 03:29:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
vr-stereo-projection-mapping: applyLayerDescriptor requires reason
2026-04-27 03:29:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
vr-stereo-projection-mapping: forward reason to updateLayerDescriptor + assertStereoCoherence guard
2026-04-27 03:29:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
vr-stereo-projection-mapping: warn on sentinel stereoMode fallback
2026-04-27 03:29:06
dev/CATALOG/app_v2.jsonl
catalog
Regenerate after vr-stereo-projection-mapping
2026-04-27 03:29:06
dev/CATALOG/app_v2.md
catalog
Regenerate after vr-stereo-projection-mapping
2026-04-27 03:29:39
PLAN/spec_vr-stereo-projection-mapping.md
spec-impl
Status -> Implemented
2026-04-27 03:29:39
PLAN/spec_vr-stereo-projection-mapping/INDEX.md
spec-impl
All 4 phases done
2026-04-27 03:30:34
PLAN/spec_vr-stereo-projection-mapping__audit_2026-04-27.md
spec-check
Audit: Verified (1 manual deferred)
2026-04-27 03:30:35
PLAN/spec_vr-stereo-projection-mapping.md
spec-all
Pipeline Verified: vr-stereo-projection-mapping
2026-04-27 03:31:25
PLAN/spec_vr-panel-swapchain-availability.md
spec-all
Approve strategic spec; lint fixes
2026-04-27 03:38:22
PLAN/spec_vr-panel-swapchain-availability/INDEX.md
spec-tech
Tactical plan for vr-panel-swapchain-availability
2026-04-27 03:38:23
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
vr-panel-swapchain-availability: createPanelSwapchain refusal diagnostics
2026-04-27 03:38:23
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelRenderer.kt
VrInteractivePanelRenderer
vr-panel-swapchain-availability: log fallback engaged + suppress repeats
2026-04-27 03:38:23
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudRenderer.kt
VrHudRenderer
vr-panel-swapchain-availability: setVisible reason parameter
2026-04-27 03:38:23
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudSink.kt
VrHudSink
vr-panel-swapchain-availability: setVisible(reason) interface
2026-04-27 03:38:23
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
VrHudSceneDriver
vr-panel-swapchain-availability: setVisible(reason) override
2026-04-27 03:38:23
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
vr-panel-swapchain-availability: traceImmersiveCommand + explicit-show + no-op reasons
2026-04-27 03:38:24
dev/CATALOG/app_v2.jsonl
catalog
Regenerate after vr-panel-swapchain-availability
2026-04-27 03:39:20
PLAN/spec_vr-panel-swapchain-availability__audit_2026-04-27.md
spec-check
Audit: Verified
2026-04-27 03:39:20
PLAN/spec_vr-panel-swapchain-availability.md
spec-all
Pipeline Verified: vr-panel-swapchain-availability
2026-04-27 03:40:07
PLAN/spec_vr-photo-capture-reliability.md
spec-all
Approve strategic spec; lint fixes
2026-04-27 03:43:44
PLAN/spec_vr-photo-capture-reliability/INDEX.md
spec-tech
Tactical plan for vr-photo-capture-reliability
2026-04-27 03:43:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/commands/VrSaveFrameCommandOverride.kt
VrSaveFrameCommandOverride
vr-photo-capture-reliability: stage=command tracing
2026-04-27 03:43:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrStereoSnapshotManager.kt
VrStereoSnapshotManager
vr-photo-capture-reliability: stage tracing across request/poll/compose/save
2026-04-27 03:43:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
vr-photo-capture-reliability: requestStereoSnapshot diagnostics
2026-04-27 03:43:45
dev/CATALOG/app_v2.jsonl
catalog
Regenerate after vr-photo-capture-reliability
2026-04-27 03:44:30
PLAN/spec_vr-photo-capture-reliability__audit_2026-04-27.md
spec-check
Audit: Verified
2026-04-27 03:44:30
PLAN/spec_vr-photo-capture-reliability.md
spec-all
Pipeline Verified: vr-photo-capture-reliability
2026-04-27 03:45:22
PLAN/spec_vr-auto-immersive-setting.md
spec-all
Approve strategic spec; lint fixes
2026-04-27 03:54:39
PLAN/spec_vr-auto-immersive-setting/INDEX.md
spec-tech
Tactical plan for vr-auto-immersive-setting
2026-04-27 03:54:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
vr-auto-immersive-setting: vrAutoImmersive field
2026-04-27 03:54:40
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
vr-auto-immersive-setting: KEY_VR_AUTO_IMMERSIVE persistence
2026-04-27 03:54:40
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
vr-auto-immersive-setting: backup field
2026-04-27 03:54:40
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
vr-auto-immersive-setting: backup mapping
2026-04-27 03:54:40
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
vr-auto-immersive-setting: switchVrAutoImmersive layout
2026-04-27 03:54:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
vr-auto-immersive-setting: switchVrAutoImmersive wiring
2026-04-27 03:54:40
app_v2/src/main/res/values/strings.xml
strings
vr-auto-immersive-setting: EN strings
2026-04-27 03:54:41
app_v2/src/main/res/values-ru/strings.xml
strings
vr-auto-immersive-setting: RU strings
2026-04-27 03:54:41
app_v2/src/main/res/values-uk/strings.xml
strings
vr-auto-immersive-setting: UK strings
2026-04-27 03:54:41
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
VrRouteDecisionHelper
vr-auto-immersive-setting: auto-immersive-disabled gate
2026-04-27 03:54:41
docs/FEATURES.md
docs
vr-auto-immersive-setting: feature entry
2026-04-27 03:54:41
docs/FEATURES_RU.md
docs
vr-auto-immersive-setting: RU feature entry
2026-04-27 03:54:42
docs/FEATURES_UK.md
docs
vr-auto-immersive-setting: UK feature entry
2026-04-27 03:54:42
dev/CATALOG/app_v2.jsonl
catalog
Regenerate after vr-auto-immersive-setting
2026-04-27 03:55:34
PLAN/spec_vr-auto-immersive-setting__audit_2026-04-27.md
spec-check
Audit: Verified
2026-04-27 03:55:34
PLAN/spec_vr-auto-immersive-setting.md
spec-all
Pipeline Verified: vr-auto-immersive-setting
2026-04-27 18:55:42
PLAN/spec_vr-fps-counter.md
spec
Add strategic spec for ad-hoc VR FPS counter HUD overlay
2026-04-27 19:08:11
PLAN/spec_settings-file-groups-rename.md
spec_settings-file-groups-rename
Ad-hoc spec: переименование и перераспределение групп настроек Файлы и данные / Операции с файлами
2026-04-27 19:09:24
PLAN/spec_panel-stereo-right-eye.md
spec
Add strategic spec for ad-hoc panel stereo right-eye crop
2026-04-27 19:12:26
PLAN/spec_link-receive-download.md
spec
Add strategic spec for ad-hoc link-receive-download
2026-04-27 19:18:34
PLAN/spec_settings-file-groups-rename.md
spec_settings-file-groups-rename
Spec updated: расширен на все группы всех вкладок; решены все открытые вопросы; Безопасный режим -> Operations; System -> Сеть и кэш
2026-04-27 19:25:51
PLAN/spec_panel-stereo-single-eye.md
spec
Rename panel stereo spec to single-eye and resolve open questions
2026-04-27 19:38:40
PLAN/spec_link-receive-download.md
spec
Resolve open questions; add auto-open setting + ADR-4/5
2026-04-27 19:43:01
PLAN/spec_settings-file-groups-rename/INDEX.md
spec-tech
Created tactical plan INDEX with 6 phases for settings group rename
2026-04-27 19:43:01
PLAN/spec_settings-file-groups-rename/PHASE_01__string-resources.md
spec-tech
Phase 01: string resource changes (new keys + renames, all 3 locales)
2026-04-27 19:43:01
PLAN/spec_settings-file-groups-rename/PHASE_02__layout-headers-portrait.md
spec-tech
Phase 02: portrait layout header updates and FILES card split
2026-04-27 19:43:01
PLAN/spec_settings-file-groups-rename/PHASE_03__layout-headers-landscape.md
spec-tech
Phase 03: landscape layout mirror of portrait changes
2026-04-27 19:43:01
PLAN/spec_settings-file-groups-rename/PHASE_04__safe-mode-migration.md
spec-tech
Phase 04: Safe Mode block migration General → Operations
2026-04-27 19:43:01
PLAN/spec_settings-file-groups-rename/PHASE_05__error-message-strings.md
spec-tech
Phase 05: error message string updates for renamed group
2026-04-27 19:43:01
PLAN/spec_settings-file-groups-rename/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: lint, catalog, changelog, feature docs finalization
2026-04-27 19:43:14
PLAN/spec_settings-file-groups-rename/INDEX.md
spec-tech
Created tactical plan INDEX with 6 phases for settings group rename
2026-04-27 19:43:14
PLAN/spec_settings-file-groups-rename/PHASE_01__string-resources.md
spec-tech
Phase 01: string resource changes (new keys + renames, all 3 locales)
2026-04-27 19:43:14
PLAN/spec_settings-file-groups-rename/PHASE_02__layout-headers-portrait.md
spec-tech
Phase 02: portrait layout header updates and FILES card split
2026-04-27 19:43:14
PLAN/spec_settings-file-groups-rename/PHASE_03__layout-headers-landscape.md
spec-tech
Phase 03: landscape layout mirror of portrait changes
2026-04-27 19:43:14
PLAN/spec_settings-file-groups-rename/PHASE_04__safe-mode-migration.md
spec-tech
Phase 04: Safe Mode block migration General to Operations
2026-04-27 19:43:14
PLAN/spec_settings-file-groups-rename/PHASE_05__error-message-strings.md
spec-tech
Phase 05: error message string updates for renamed group
2026-04-27 19:43:14
PLAN/spec_settings-file-groups-rename/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: lint, catalog, changelog, feature docs finalization
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye/INDEX.md
spec-tech
Create tactical plan for panel-stereo-single-eye
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye/PHASE_01__settings-flag.md
spec-tech
Phase 01: settings-flag
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye/PHASE_02__player-crop-gate.md
spec-tech
Phase 02: player-crop-gate
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye/PHASE_03__image-crop-gate.md
spec-tech
Phase 03: image-crop-gate
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye/PHASE_04__settings-ui.md
spec-tech
Phase 04: settings-ui
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye/PHASE_05__one-shot-toast.md
spec-tech
Phase 05: one-shot-toast
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye/PHASE_06__cast-feasibility.md
spec-tech
Phase 06: cast-feasibility
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup
2026-04-27 19:45:39
PLAN/spec_panel-stereo-single-eye.md
spec-tech
Status -> Tactical, link to tactical plan
2026-04-27 22:53:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Add panelStereoSingleEye flag with flavor-aware default (spec_panel-stereo-single-eye)
2026-04-27 22:53:34
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Persist panelStereoSingleEye via KEY_PANEL_STEREO_SINGLE_EYE
2026-04-27 22:53:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoVideoProcessor.kt
StereoVideoProcessor
Flip crop direction LEFT/TOP -> RIGHT/BOTTOM
2026-04-27 22:53:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Replace flavor gate with panelStereoSingleEye flag + VR immersive guard + toast notifier
2026-04-27 22:53:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt
PlayerViewerFactory
Pass settingsRepository and panelStereoSingleEyeNotifier to VideoPlayerManager
2026-04-27 22:53:48
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Notify VideoPlayerManager about immersive state for panel single-eye guard
2026-04-27 22:53:48
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoVideoProcessorTest.kt
StereoVideoProcessorTest
Update test names to right/bottom crop and add AUTO/UNKNOWN cases
2026-04-27 22:53:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/StaticImageRenderer.kt
StaticImageRenderer
Add setPanelStereoSingleEyeEnabled to interface
2026-04-27 22:53:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/NoOpStaticImageRenderer.kt
NoOpStaticImageRenderer
Stub setPanelStereoSingleEyeEnabled override
2026-04-27 22:53:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/StereoImageCropTransformation.kt
StereoImageCropTransformation
Flip image crop LEFT/TOP -> RIGHT/BOTTOM and bump cache ID to v2
2026-04-27 22:53:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/DualSurfaceStaticImageRenderer.kt
DualSurfaceStaticImageRenderer
Gate stereo crop by panelStereoSingleEye flag, include flag in Glide cache key, wire toast notifier
2026-04-27 22:53:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrPhotoSphereRenderer.kt
VrPhotoSphereRenderer
Stub setPanelStereoSingleEyeEnabled (VR renderer owns its own crop)
2026-04-27 22:53:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Inject PanelStereoSingleEyeNotifier and forward setPanelStereoSingleEyeEnabled to renderer
2026-04-27 22:53:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Observe panelStereoSingleEye flag and pass notifier to ImageLoadingManager
2026-04-27 22:53:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Hold session-scoped PanelStereoSingleEyeNotifier
2026-04-27 22:54:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PanelStereoSingleEyeNotifier.kt
PanelStereoSingleEyeNotifier
New session-scoped one-shot toast notifier (Phase 05)
2026-04-27 22:54:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
CastMediaManager
Add TODO(phase-06-deferred) for Cast single-eye crop
2026-04-27 22:54:05
app_v2/src/main/res/values/strings.xml
strings
Add panel single-eye 3D view title/summary and toast strings (EN)
2026-04-27 22:54:05
app_v2/src/main/res/values-ru/strings.xml
strings
Add panel single-eye 3D view strings (RU)
2026-04-27 22:54:05
app_v2/src/main/res/values-uk/strings.xml
strings
Add panel single-eye 3D view strings (UK)
2026-04-27 22:54:12
app_v2/src/main/res/layout/fragment_settings_playback.xml
layout
Add switchPanelStereoSingleEye toggle to Playback settings
2026-04-27 22:54:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
PlaybackSettingsFragment
Wire switchPanelStereoSingleEye to viewModel.updateSettings
2026-04-27 22:54:12
docs/FEATURES.md
docs
Document Panel single-eye 3D view feature
2026-04-27 22:54:12
docs/FEATURES_RU.md
docs
Translate Panel single-eye 3D view feature (RU)
2026-04-27 22:54:12
docs/FEATURES_UK.md
docs
Translate Panel single-eye 3D view feature (UK)
2026-04-27 22:54:12
dev/CATALOG/app_v2.jsonl
catalog
Regenerate after panel-stereo-single-eye implementation
2026-04-27 22:54:12
dev/CATALOG/app_v2.md
catalog
Regenerate after panel-stereo-single-eye implementation
2026-04-27 22:57:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment.toolbar
Merge resource type into toolbar title (single line) instead of subtitle to avoid truncation
2026-04-27 23:16:51
PLAN/spec_resource-icon-quick-slideshow.md
spec-all
Compact spec: resource-icon-quick-slideshow
2026-04-27 23:21:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
spec-all
Quick-slideshow icon click for AUDIO_LIBRARY/VIDEO_LIBRARY/PHOTO_STORAGE resources
2026-04-27 23:21:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
spec-all
Add startSlideshowFor(resource) for icon quick-launch
2026-04-27 23:21:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
spec-all
Wire onIconClick callback to startSlideshowFor
2026-04-27 23:21:25
app_v2/src/main/res/drawable/ripple_icon_quick_slideshow.xml
spec-all
New: borderless circular ripple for clickable resource type icon
2026-04-27 23:21:25
app_v2/src/main/res/values/strings.xml
spec-all
Add cd_resource_icon_quick_slideshow
2026-04-27 23:21:25
app_v2/src/main/res/values-ru/strings.xml
spec-all
Add cd_resource_icon_quick_slideshow (RU)
2026-04-27 23:21:25
app_v2/src/main/res/values-uk/strings.xml
spec-all
Add cd_resource_icon_quick_slideshow (UK)
2026-04-27 23:22:07
PLAN/spec_link-receive-download.md
spec-update
Refinement (claude-opus-4-7, focus: language structure verifiability consistency completeness style)
2026-04-27 23:22:17
PLAN/spec_resource-icon-quick-slideshow__audit_2026-04-27.md
spec-all
Audit Verified: resource-icon-quick-slideshow
2026-04-27 23:22:17
PLAN/spec_resource-icon-quick-slideshow.md
spec-all
Pipeline Verified: resource-icon-quick-slideshow
2026-04-27 23:24:10
temp/done/spec_panel-stereo-single-eye__audit_2026-04-27.md
spec-check
Audit panel-stereo-single-eye -> Verified
2026-04-27 23:24:10
temp/done/spec_panel-stereo-single-eye.md
spec-check
Status -> Verified; moved to temp/done
2026-04-27 23:34:14
app_v2/src/main/res/values/strings.xml
strings
Added settings_category_permissions/app_data/copy_move/safety keys; renamed system/sorting/file_operations values; updated error_file_exists_* references to Copy & Move
2026-04-27 23:34:30
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Matching RU updates: new keys + renames + error_file_exists_* RU update
2026-04-27 23:34:30
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Matching UK updates: new keys + renames + error_file_exists_* UK update
2026-04-27 23:34:30
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
Split FILES card into PERMISSIONS + APP_DATA cards; removed safe-mode block (moved to Operations)
2026-04-27 23:34:30
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general (land)
Landscape mirror of FILES card split
2026-04-27 23:34:30
app_v2/src/main/res/layout/fragment_settings_destinations.xml
fragment_settings_destinations
Added Safety & Confirmation card (safe-mode block from General); renamed File Operations header to Copy & Move (id headerCopyMove)
2026-04-27 23:34:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
GeneralSettingsViewSetupHelper
Removed safe-mode + iconHelpSafeMode listeners (moved to Operations)
2026-04-27 23:34:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt
GeneralSettingsObserversHelper
Removed safe-mode/confirmDelete/confirmMove observer bindings
2026-04-27 23:34:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt
GeneralSettingsSectionsHelper
Replaced FILES section toggle with PERMISSIONS + APP_DATA toggles
2026-04-27 23:34:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Removed setupGeneralLayouts code referencing migrated containerConfirm/layoutConfirm* views
2026-04-27 23:34:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
Added Safety & Confirmation block: switch listeners, observers, expandable section toggle; renamed Copy & Move section binding
2026-04-27 23:34:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
SettingsSearchIndex
Moved safe_mode/confirm_delete/confirm_move entries: GENERAL -> DESTINATIONS (Operations tab); added confirm_move entry
2026-04-27 23:37:15
PLAN/spec_spec-catalog.md
spec
Add strategic spec for ad-hoc spec catalog (ticketed Sxxxx)
2026-04-27 23:37:37
PLAN/spec_settings-file-groups-rename.md
spec-all
Pipeline Verified: settings-file-groups-rename - implemented and archived to temp/done
2026-04-27 23:48:57
PLAN/S0001_spec_spec-catalog.md
spec-all
Stage 0: approved spec, complexity=Full
2026-04-27 23:52:17
PLAN/S0001_spec_spec-catalog/INDEX.md
spec-all
Stage F2: tactical spec with 6 phases
2026-04-27 23:58:42
PLAN/spec-catalog.jsonl
spec-all
Stage F3 P1-P3: journal + CLI + migration of 14 specs (S0001..S0014)
2026-04-28 00:00:02
CLAUDE.md
spec-all
Stage F3 P4: add Sxxxx ticket convention, journal CLI rule, post-change step
2026-04-28 01:17:06
temp/done/spec_settings-file-groups-rename__audit_2026-04-28.md
spec-check
Audit settings-file-groups-rename: Verified (36 PASS / 0 WARN / 0 FAIL / 2 MANUAL)
2026-04-28 01:18:56
.claude/commands/
spec-all
Stage F3 P5: ticket-aware hooks added to spec/spec-tech/spec-dev/spec-check/spec-fix/spec-update/spec-all/quick
2026-04-28 01:19:42
scripts/spec_catalog/validate.ps1
spec-all
Stage F3 P6: validator (6 invariants), all-OK on current journal/FS
2026-04-28 01:21:04
PLAN/S0001_spec_spec-catalog.md
spec-all
Pipeline Verified: S0001 spec_spec-catalog (catalog system live, 14 specs migrated)
2026-04-28 01:25:24
PLAN/S0015_spec_bugfix-scheduled-ops-worker-freeze.md
spec
Add strategic spec S0015: ScheduledOperationsWorker freeze / WAKE_LOCK
2026-04-28 01:27:27
scripts/spec_catalog/sca-specs.ps1
sca-specs
Add sca-specs script: unresolved specs list ordered by created DESC
2026-04-28 01:27:30
a.ps1
a.ps1
Register ss/sca-specs commands in project launcher
2026-04-28 01:27:59
PLAN/S0016_spec_bugfix-document-print-manager-context.md
spec
Add strategic spec S0016: DocumentPrintManager IllegalStateException fix
2026-04-28 01:30:32
PLAN/S0017_spec_bugfix-smb-scanner-metadata-exception.md
spec
Add strategic spec S0017: SmbMediaScanner metadata error observability
2026-04-28 01:39:27
PLAN/S0015_spec_bugfix-scheduled-ops-worker-freeze.md
spec-all
Compact spec approved: bugfix-scheduled-ops-worker-freeze (resolved research items, added impl phases)
2026-04-28 01:42:00
app_v2/src/main/java/com/sza/fastmediasorter/worker/ScheduledOperationsWorker.kt
S0015
Remove WorkManagerScheduler dependency; rescheduling moved to WorkManagerScheduler observer
2026-04-28 01:42:00
app_v2/src/main/java/com/sza/fastmediasorter/worker/WorkManagerScheduler.kt
S0015
Add observeAndReschedule helper; break self-scheduling race by observing work SUCCEEDED state post-doWork
2026-04-28 01:45:09
PLAN/S0015_spec_bugfix-scheduled-ops-worker-freeze__audit_2026-04-28.md
spec-check
Audit bugfix-scheduled-ops-worker-freeze
2026-04-28 01:45:09
PLAN/S0015_spec_bugfix-scheduled-ops-worker-freeze.md
spec-check
Status -> Verified
2026-04-28 01:45:09
PLAN/S0015_spec_bugfix-scheduled-ops-worker-freeze.md
spec-all
Pipeline Verified: bugfix-scheduled-ops-worker-freeze
2026-04-28 01:52:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
DocumentPrintManager
Fix PrintManager context on API 26-27: use activity.getSystemService directly instead of ContextCompat; downgrade unavailable-service log to W
2026-04-28 01:55:30
PLAN/S0017_spec_bugfix-smb-scanner-metadata-exception/INDEX.md
spec-all
S0017 tactical spec: SMB scanner metadata exception observability (4 phases)
2026-04-28 01:55:57
PLAN/S0016_spec_bugfix-document-print-manager-context__audit_2026-04-28.md
spec-check
Audit S0016 bugfix-document-print-manager-context
2026-04-28 01:55:57
PLAN/S0016_spec_bugfix-document-print-manager-context.md
spec-check
Status -> Partial
2026-04-28 02:00:04
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
SmbMediaScanner
S0017: raise metadata extraction log level V->W; add AtomicInteger error counter; fire onMetadataErrors callback
2026-04-28 02:00:13
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
NetworkVideoFrameDecoder
S0017: remove redundant second getFrameAtTime fallback call; add explicit null log
2026-04-28 02:00:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ScanProgressCallback.kt
ScanProgressCallback
S0017: add onMetadataErrors(errorCount) default-noop method
2026-04-28 02:00:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseEvent.kt
BrowseEvent
S0017: add ShowMetadataWarning(errorCount) event
2026-04-28 02:00:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/loading/BrowseLoadingManager.kt
BrowseLoadingManager
S0017: add onScanMetadataErrors to LoadingCallbacks; implement onMetadataErrors in progress callback
2026-04-28 02:00:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
BrowseResourceLoadManager
S0017: implement onScanMetadataErrors - fires BrowseEvent.ShowMetadataWarning
2026-04-28 02:00:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler
S0017: handle ShowMetadataWarning - show Snackbar with localized error count
2026-04-28 02:00:13
app_v2/src/main/res/values/strings.xml
smb_metadata_errors_warning
S0017: add smb_metadata_errors_warning string (EN/RU/UK)
2026-04-28 02:01:03
PLAN/S0016_spec_bugfix-document-print-manager-context__audit_2026-04-28_2.md
spec-check
Audit S0016 iteration 2 - Verified
2026-04-28 02:01:03
PLAN/S0016_spec_bugfix-document-print-manager-context.md
spec-check
Status -> Verified
2026-04-28 02:01:03
PLAN/S0016_spec_bugfix-document-print-manager-context.md
spec-all
Pipeline Verified: bugfix-document-print-manager-context
2026-04-28 02:04:59
PLAN/S0017_spec_bugfix-smb-scanner-metadata-exception__audit_2026-04-28.md
spec-check
Audit bugfix-smb-scanner-metadata-exception
2026-04-28 02:05:00
PLAN/S0017_spec_bugfix-smb-scanner-metadata-exception.md
spec-check
Status → Verified
2026-04-28 02:07:20
PLAN/S0016_spec_bugfix-document-print-manager-context__fix_2026-04-28.md
spec-fix
Fix-up run for S0016: 1 auto-applied (audit pointer), 3 PRE-RESOLVED
2026-04-28 02:07:24
PLAN/S0016_spec_bugfix-document-print-manager-context__audit_2026-04-28.md
spec-fix
Annotate audit: 3 items marked PRE-RESOLVED
2026-04-28 02:07:28
PLAN/S0016_spec_bugfix-document-print-manager-context.md
spec-fix
Add Audit pointer under Status
2026-04-28 02:07:31
PLAN/S0003_spec_link-receive-download.md
spec-update
Refinement (claude-sonnet-4-6, focus: all)
2026-04-28 02:16:59
PLAN/S0006_spec_vr-fps-counter.md
spec-update
Refinement (Gemini 3.1 Pro, focus: language, structure, verifiability, consistency, completeness, style)
2026-04-28 02:28:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
PlayerActivity startup
Defer WebView creation to first EPUB open: moved WebView init from constructor to getOrCreateWebView(), extracted configureWebView()
2026-04-28 02:28:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerActivity startup
Remove dead pdfViewerManager/epubViewerManager constructor params; change textViewerManager to lazy provider
2026-04-28 02:28:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
PlayerActivity startup
Change pdfViewerManager, epubViewerManager, textViewerManager constructor params to lazy providers
2026-04-28 02:28:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageOcrManager.kt
PlayerActivity startup
Change textViewerManager to lazy provider
2026-04-28 02:28:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerActivity startup
Change textViewerManager to lazy provider
2026-04-28 02:28:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerActivity startup
Update all call sites to pass viewer manager providers instead of eager instances
2026-04-28 03:19:37
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
VrRouteDecisionHelper
Updated fallback routes to honor vrAutoImmersive setting for 2D videos and auto-immersive disable logic
2026-04-28 03:20:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransition.kt
VrTaskTransition
Added resumePlayerIntent parameter to exitImmersiveToPanel to allow returning to 2D player panel instead of Browse
2026-04-28 03:21:16
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Updated exitVrAndStopPlayback to return to 2D PlayerActivity panel instead of Browse
2026-04-28 03:22:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt
SaveVideoFrameManager
Caught Throwable instead of Exception to gracefully handle OutOfMemoryError during bitmap capture
2026-04-28 03:22:25
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrStereoSnapshotManager.kt
VrStereoSnapshotManager
Added CancellationException handling and gracefully handle OutOfMemoryError during bitmap composition
2026-04-28 03:22:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Rethrow CancellationException in onRenderedFirstFrame so it is not swallowed
2026-04-28 03:23:44
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
Added vrShowFps boolean flag to support VR FPS counter
2026-04-28 03:23:50
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Wired vrShowFps persistence in DataStore
2026-04-28 03:26:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Added vrShowFps switch to settings UI
2026-04-28 03:26:55
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Added switchVrShowFps for VR FPS counter
2026-04-28 03:28:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Added FPS calculation loop to renderVrFrame
2026-04-28 03:51:16
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken.md
spec
Add strategic spec S0018 for ad-hoc bugfix-vr-auto-immersive-route-broken
2026-04-28 03:53:39
PLAN/S0019_spec_vr-controls-panel-flow-restoration.md
spec
Add strategic spec S0019 for ad-hoc vr-controls-panel-flow-restoration
2026-04-28 03:55:41
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race.md
spec
Add strategic spec S0020 for ad-hoc bugfix-vr-panel-swapchain-session-race
2026-04-28 03:57:48
PLAN/S0021_spec_panel-fps-overlay-landscape.md
spec
Add strategic spec S0021 for ad-hoc panel-fps-overlay-landscape
2026-04-28 04:00:02
PLAN/S0022_spec_bugfix-camera-capture-crash.md
spec
Add strategic spec S0022 for ad-hoc bugfix-camera-capture-crash
2026-04-28 10:06:40
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken.md
spec-all
Stage F1: S0018 strategic approved
2026-04-28 10:12:37
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken/INDEX.md
spec-tech
Create tactical plan for S0018
2026-04-28 10:12:37
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken/PHASE_01__pin-route-decision-contract.md
spec-tech
Phase 01: pin route decision contract
2026-04-28 10:12:37
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken/PHASE_02__defensive-route-invariant.md
spec-tech
Phase 02: defensive route invariant
2026-04-28 10:12:37
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken/PHASE_03__settings-noop-write-guard.md
spec-tech
Phase 03: settings no-op write guard
2026-04-28 10:12:37
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken/PHASE_04__atomic-route-reason-logging.md
spec-tech
Phase 04: atomic route+reason logging
2026-04-28 10:12:37
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken/PHASE_05__on-device-validation.md
spec-tech
Phase 05: on-device validation
2026-04-28 10:12:37
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs/catalog cleanup
2026-04-28 10:12:37
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken.md
spec-tech
Status -> Tactical
2026-04-28 10:21:26
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelperTest.kt
spec-dev
S0018 phase 01: pin route decision contract via matrix tests
2026-04-28 10:21:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelper.kt
spec-dev
S0018 phases 02+04: invariant comment, atomic logTo helper
2026-04-28 10:21:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-dev
S0018 phases 02+04: defensive (route, reason) guard + atomic log via VrRouteDecision.logTo
2026-04-28 10:21:26
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
spec-dev
S0018 phase 03: idempotency guard in updateSettings
2026-04-28 10:21:26
app_v2/src/test/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImplTest.kt
spec-dev
S0018 phase 03: idempotency unit tests
2026-04-28 10:32:50
PLAN/S0023_spec_bugfix-vr-player-activity-stale-references.md
spec-all
Discovered out-of-scope dependency from S0018 F4 build gate
2026-04-28 10:36:55
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken__audit_2026-04-28.md
spec-check
Audit S0018 -> Partial
2026-04-28 10:36:55
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken.md
spec-check
Status -> Partial
2026-04-28 10:36:55
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken.md
spec-all
Pipeline Partial: S0018 (standard build PASS, vr build blocked by S0023, on-device manual deferred)
2026-04-28 12:54:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
spec-dev
S0023: add settings StateFlow + PlayerState resourceId/isSlideshowEnabled aliases
2026-04-28 12:54:22
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0023 inline fix: dedupe settings_vr_remember_format_desc
2026-04-28 12:54:22
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0023 inline fix: dedupe settings_vr_remember_format_desc
2026-04-28 12:54:22
app_v2/src/main/res/layout/fragment_settings_video.xml
spec-dev
S0023 inline fix: close LinearLayout for auto-immersive switch row
2026-04-28 12:54:22
app_v2/src/test/java/com/sza/fastmediasorter/data/network/smb/SmbConnectionManagerTest.kt
spec-dev
S0023 inline fix: add SmbPlaybackConnectionTracker mock to constructor
2026-04-28 12:55:03
PLAN/S0023_spec_bugfix-vr-player-activity-stale-references__audit_2026-04-28.md
spec-check
Audit S0023 -> Verified
2026-04-28 12:55:03
PLAN/S0023_spec_bugfix-vr-player-activity-stale-references.md
spec-all
Pipeline Verified: S0023
2026-04-28 12:55:23
PLAN/S0018_spec_bugfix-vr-auto-immersive-route-broken.md
spec-check
Status -> Verified (vr unit tests pass after S0023)
2026-04-28 14:04:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt
spec-dev
S0022 instrumentation: S0022-CAM markers throughout launch/result/save + ActivityNotFoundException + queryIntentActivities guard
2026-04-28 14:04:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
spec-dev
S0022 instrumentation: log onCameraCaptureClicked entry + null-resource guard
2026-04-28 14:07:02
PLAN/S0021_spec_panel-fps-overlay-landscape.md
spec-all
Stage F1: S0021 strategic approved
2026-04-28 14:10:26
PLAN/S0021_spec_panel-fps-overlay-landscape/INDEX.md
spec-tech
Create tactical plan for S0021
2026-04-28 14:10:26
PLAN/S0021_spec_panel-fps-overlay-landscape/PHASE_01__settings-model.md
spec-tech
Phase 01: settings model
2026-04-28 14:10:26
PLAN/S0021_spec_panel-fps-overlay-landscape/PHASE_02__settings-ui.md
spec-tech
Phase 02: settings UI
2026-04-28 14:10:26
PLAN/S0021_spec_panel-fps-overlay-landscape/PHASE_03__fps-meter.md
spec-tech
Phase 03: FPS meter
2026-04-28 14:10:26
PLAN/S0021_spec_panel-fps-overlay-landscape/PHASE_04__overlay-binding.md
spec-tech
Phase 04: overlay binding
2026-04-28 14:10:26
PLAN/S0021_spec_panel-fps-overlay-landscape/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs/catalog cleanup
2026-04-28 14:10:26
PLAN/S0021_spec_panel-fps-overlay-landscape.md
spec-tech
Status -> Tactical
2026-04-28 14:22:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
spec-dev
S0021 phase 01: add playerShowFps field
2026-04-28 14:22:32
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
spec-dev
S0021 phase 01: persist KEY_PLAYER_SHOW_FPS
2026-04-28 14:22:32
app_v2/src/main/res/values/strings.xml
spec-dev
S0021 phase 02: settings_player_show_fps EN strings
2026-04-28 14:22:32
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0021 phase 02: settings_player_show_fps RU strings
2026-04-28 14:22:32
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0021 phase 02: settings_player_show_fps UK strings
2026-04-28 14:22:32
app_v2/src/main/res/layout/fragment_settings_video.xml
spec-dev
S0021 phase 02: switchPlayerShowFps row
2026-04-28 14:22:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
spec-dev
S0021 phase 02: bind switchPlayerShowFps
2026-04-28 14:22:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerFpsMeter.kt
spec-dev
S0021 phase 03: PlayerFpsMeter (Choreographer-based)
2026-04-28 14:22:32
app_v2/src/main/res/layout/activity_player_unified.xml
spec-dev
S0021 phase 04: tvPlayerFpsOverlay portrait
2026-04-28 14:22:32
app_v2/src/main/res/layout-land/activity_player_unified.xml
spec-dev
S0021 phase 04: tvPlayerFpsOverlay landscape (binding parity)
2026-04-28 14:22:32
app_v2/src/main/res/drawable/bg_fps_overlay.xml
spec-dev
S0021 phase 04: rounded-corner overlay background
2026-04-28 14:22:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-dev
S0021 phase 04: wire PlayerFpsMeter + updatePlayerFpsOverlay
2026-04-28 14:22:32
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-dev
S0021 phase 04: suppress overlay while immersive
2026-04-28 14:22:32
docs/FEATURES.md
spec-dev
S0021 phase 05: FEATURES diagnostic FPS overlay (EN)
2026-04-28 14:22:32
docs/FEATURES_RU.md
spec-dev
S0021 phase 05: FEATURES diagnostic FPS overlay (RU)
2026-04-28 14:22:32
docs/FEATURES_UK.md
spec-dev
S0021 phase 05: FEATURES diagnostic FPS overlay (UK)
2026-04-28 14:27:11
PLAN/S0021_spec_panel-fps-overlay-landscape__audit_2026-04-28.md
spec-check
Audit S0021 -> Verified
2026-04-28 14:27:11
PLAN/S0021_spec_panel-fps-overlay-landscape.md
spec-all
Pipeline Verified: S0021
2026-04-28 15:08:31
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race.md
spec-all
Stage F1: S0020 strategic approved
2026-04-28 15:10:41
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race/INDEX.md
spec-tech
Create tactical plan for S0020
2026-04-28 15:10:41
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race/PHASE_01__native-jni-contract.md
spec-tech
Phase 01: native JNI contract
2026-04-28 15:10:41
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race/PHASE_02__kotlin-diagnostics.md
spec-tech
Phase 02: Kotlin diagnostics
2026-04-28 15:10:41
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs/catalog
2026-04-28 15:10:41
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race.md
spec-tech
Status -> Tactical
2026-04-28 15:13:03
app_v2/src/vr/cpp/OpenXrNative.cpp
spec-dev
S0020 phase 01: native panel JNI uses session-handle check (matches HUD); remove dead stored fallback; add panel ready marker
2026-04-28 15:13:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
spec-dev
S0020 phase 02: panel ready / panel never came up markers + defensive single retry
2026-04-28 15:13:03
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelRenderer.kt
spec-dev
S0020 phase 02: tighten fallback notice
2026-04-28 15:16:07
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race__audit_2026-04-28.md
spec-check
Audit S0020 -> Verified
2026-04-28 15:16:07
PLAN/S0020_spec_bugfix-vr-panel-swapchain-session-race.md
spec-all
Pipeline Verified: S0020
2026-04-28 15:40:48
PLAN/S0019_spec_vr-controls-panel-flow-restoration.md
spec-update
S0019: rewrite Open research items §6 with concrete user scenarios for owner review
2026-04-28 16:14:58
PLAN/S0019_spec_vr-controls-panel-flow-restoration.md
spec-update
S0019: integrate owner answers - full playback HUD scope, prev/next without exit, applied+3D button, in-memory context only, ADRs 4+5 added
2026-04-28 16:28:14
PLAN/S0019_spec_vr-controls-panel-flow-restoration.md
spec-update
Refinement (claude-opus-4-7, focus: cross-spec consistency S0019<->S0009): applied 5, proposed 3 DISCUSS
2026-04-28 16:37:17
PLAN/S0019_vr-controls-panel-flow-restoration.md
spec-all
Stage F1: S0019 strategic approved
2026-04-28 16:38:47
PLAN/S0024_vr-hud-ray-input.md
spec-all
S0024 created as out-of-scope dependency for S0019 interactive HUD
2026-04-28 16:43:27
PLAN/S0019_vr-controls-panel-flow-restoration/INDEX.md
spec-tech
Create tactical plan for S0019
2026-04-28 16:43:27
PLAN/S0019_vr-controls-panel-flow-restoration/PHASE_01__exit-target-redirect.md
spec-tech
Phase 01: exit target redirect
2026-04-28 16:43:27
PLAN/S0019_vr-controls-panel-flow-restoration/PHASE_02__apply-and-3d-button.md
spec-tech
Phase 02: apply-and-3D button
2026-04-28 16:43:27
PLAN/S0019_vr-controls-panel-flow-restoration/PHASE_03__immersive-prev-next.md
spec-tech
Phase 03: immersive prev/next
2026-04-28 16:43:27
PLAN/S0019_vr-controls-panel-flow-restoration/PHASE_04__hud-passive-content.md
spec-tech
Phase 04: HUD passive content
2026-04-28 16:43:27
PLAN/S0019_vr-controls-panel-flow-restoration/PHASE_05__interactive-hud-controls.md
spec-tech
Phase 05: deferred to S0024
2026-04-28 16:43:27
PLAN/S0019_vr-controls-panel-flow-restoration/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs/catalog cleanup
2026-04-28 16:43:27
PLAN/S0019_vr-controls-panel-flow-restoration.md
spec-tech
Status -> Tactical
2026-04-28 16:56:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransition.kt
spec-dev
S0019 phase 01: add exitImmersiveToFlatPlayer()
2026-04-28 16:56:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-dev
S0019 phases 01+03+04: route user-exit to flat player; immersive-safe prev/next markers; HUD passive hints (prev/next on pause, applied stereo-mode banner)
2026-04-28 16:56:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-dev
S0019 phase 02: launchImmersiveOnCurrentFile() entry point
2026-04-28 16:56:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
spec-dev
S0019 phase 02: btnApplyAnd3D click handler
2026-04-28 16:56:44
app_v2/src/main/res/layout/dialog_playback_control.xml
spec-dev
S0019 phase 02: btnApplyAnd3D portrait
2026-04-28 16:56:44
app_v2/src/main/res/layout-land/dialog_playback_control.xml
spec-dev
S0019 phase 02: btnApplyAnd3D landscape (binding parity)
2026-04-28 16:56:44
app_v2/src/main/res/values/strings.xml
spec-dev
S0019 phases 02+04: dialog_playback_apply_and_3d + vr_hud_prev_next_hint + vr_hud_applied_format (EN)
2026-04-28 16:56:44
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0019 phases 02+04: trilingual strings (RU)
2026-04-28 16:56:44
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0019 phases 02+04: trilingual strings (UK)
2026-04-28 16:56:44
docs/FEATURES.md
spec-dev
S0019 phase 06: FEATURES (EN)
2026-04-28 16:56:44
docs/FEATURES_RU.md
spec-dev
S0019 phase 06: FEATURES (RU)
2026-04-28 16:56:44
docs/FEATURES_UK.md
spec-dev
S0019 phase 06: FEATURES (UK)
2026-04-28 16:58:50
PLAN/S0019_vr-controls-panel-flow-restoration__audit_2026-04-28.md
spec-check
Audit S0019 -> Partial (Phase 05 deferred to S0024)
2026-04-28 16:58:50
PLAN/S0019_vr-controls-panel-flow-restoration.md
spec-all
Pipeline Partial: S0019 (5/6 done; Phase 05 deferred to S0024)
2026-04-28 17:03:03
scripts/spec_catalog/_lib.ps1
spec-catalog
Refactor: drop spec segment, add priority field (0..100), add Block* statuses, add stale-window helpers
2026-04-28 17:03:03
scripts/spec_catalog/insert.ps1
spec-catalog
Accept -Priority parameter (default 50, range 0..100); emit priority field
2026-04-28 17:03:03
scripts/spec_catalog/update.ps1
spec-catalog
Accept -Priority and Block* statuses
2026-04-28 17:03:03
scripts/spec_catalog/select.ps1
spec-catalog
Add priority + days-since-update columns; -MinPriority filter
2026-04-28 17:03:03
scripts/spec_catalog/delete.ps1
spec-catalog
Preserve priority on archive
2026-04-28 17:03:03
scripts/spec_catalog/validate.ps1
spec-catalog
Reject spec filenames; check priority range; flag stale specs
2026-04-28 17:03:03
scripts/spec_catalog/sca-specs.ps1
spec-catalog
Sort by priority desc and stale-days desc; show Pri / Upd / S columns; new statuses coloured
2026-04-28 17:03:03
scripts/spec_catalog/SCHEMA.md
spec-catalog
Document priority field, Block* statuses, no-_spec_ pattern, stale thresholds
2026-04-28 17:03:03
PLAN/spec-catalog.jsonl
spec-catalog
Migrate: drop spec_ prefix from name and file fields; assign priority to all 23 records
2026-04-28 17:03:03
PLAN/
spec-catalog
Rename Sxxxx_spec_.md -> Sxxxx_ .md; delete all _audit .md and __fix_ .md (abolished)
2026-04-28 17:03:03
CLAUDE.md
spec-catalog
Update Spec Catalog section: priority, Block* statuses, no audit/fix files, stale signal
2026-04-28 17:03:03
.claude/commands/spec.md
spec-catalog
Filenames without spec ; -Priority arg; Block* lifecycle
2026-04-28 17:03:03
.claude/commands/spec-tech.md
spec-catalog
Filenames without spec ; tactical paths reflect new convention
2026-04-28 17:03:03
.claude/commands/spec-dev.md
spec-catalog
Block* status gate and hard-stop transitions
2026-04-28 17:03:03
.claude/commands/spec-check.md
spec-catalog
Audit findings written to spec ‘## Last Audit’ block; no audit files
2026-04-28 17:03:03
.claude/commands/spec-fix.md
spec-catalog
Read action items from ‘## Last Audit’; annotate in place; no fix files
2026-04-28 17:03:03
.claude/commands/spec-update.md
spec-catalog
Allow Block* statuses through gate; -priority flag forwarded to update.ps1
2026-04-28 17:03:03
.claude/commands/spec-all.md
spec-catalog
Pipeline aware of Block* statuses; no audit/fix files
2026-04-28 17:15:29
scripts/spec_catalog/sca-specs.ps1
sca-specs
Replace Upd/today column with Crtd+Updated datetimes; unite Pri+Tier into Pri/T column
2026-04-28 21:52:26
PLAN/S0024_vr-hud-ray-input/INDEX.md
spec-tech
Create tactical plan for S0024 (6 phases)
2026-04-28 21:52:26
PLAN/S0024_vr-hud-ray-input/PHASE_01__hud-element-registry.md
spec-tech
Phase 01: HUD element registry
2026-04-28 21:52:26
PLAN/S0024_vr-hud-ray-input/PHASE_02__ray-hud-intersection.md
spec-tech
Phase 02: ray-vs-HUD-plane intersection
2026-04-28 21:52:26
PLAN/S0024_vr-hud-ray-input/PHASE_03__hover-state-and-redraw.md
spec-tech
Phase 03: hover state and redraw-on-change
2026-04-28 21:52:26
PLAN/S0024_vr-hud-ray-input/PHASE_04__input-dispatcher.md
spec-tech
Phase 04: input dispatcher (controller trigger + hand pinch)
2026-04-28 21:52:26
PLAN/S0024_vr-hud-ray-input/PHASE_05__idle-gate-and-feedback.md
spec-tech
Phase 05: idle gate and accessibility feedback
2026-04-28 21:52:26
PLAN/S0024_vr-hud-ray-input/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs / catalog / changelog cleanup
2026-04-28 21:52:26
PLAN/S0024_vr-hud-ray-input.md
spec-tech
S0024 status -> Tactical
2026-04-28 22:12:20
PLAN/S0024_vr-hud-ray-input.md
spec-tech
S0024 §6 - research items 1 & 3 marked Resolved (owner answers)
2026-04-28 22:12:20
PLAN/S0024_vr-hud-ray-input/INDEX.md
spec-tech
Drop pre-implementation blockers - strategic §6 fully Resolved
2026-04-28 22:12:20
PLAN/S0024_vr-hud-ray-input/PHASE_02__ray-hud-intersection.md
spec-tech
Phase 02 prereq simplified - §6.1 decision is reuse same aim-pose
2026-04-28 22:12:20
PLAN/S0024_vr-hud-ray-input/PHASE_04__input-dispatcher.md
spec-tech
Phase 04 prereq simplified - §6.3 decision is trigger=HUD click
2026-04-28 22:24:11
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudElement.kt
spec-dev
S0024 P01.1: VrHudElement data class
2026-04-28 22:24:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudElementRegistry.kt
spec-dev
S0024 P01.2: per-frame HUD element registry with O(N) hit-test
2026-04-28 22:25:43
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneComposer.kt
spec-dev
S0024 P01.3: wire VrHudElementRegistry into composer (beginFrame on each draw)
2026-04-28 22:27:10
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneComposer.kt
spec-dev
S0024 P01.4: register seek-bar as HUD_ELEMENT_SEEK_BAR
2026-04-28 22:27:10
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudElementRegistry.kt
spec-dev
S0024 P01.4: pool RectF instances; register copies into pool
2026-04-28 22:42:45
PLAN/S0006_vr-fps-counter.md
spec-all
Approved S0006 (vr-fps-counter); §6 resolved inline
2026-04-28 22:48:40
PLAN/S0006_vr-fps-counter/INDEX.md
spec-tech
Create tactical plan for S0006 (5 phases)
2026-04-28 22:48:40
PLAN/S0006_vr-fps-counter/PHASE_01__hud-top-right-placement.md
spec-tech
Phase 01: hud-top-right-placement
2026-04-28 22:48:40
PLAN/S0006_vr-fps-counter/PHASE_02__frozen-value-semantics.md
spec-tech
Phase 02: frozen-value-semantics
2026-04-28 22:48:40
PLAN/S0006_vr-fps-counter/PHASE_03__off-toggle-hud-clear.md
spec-tech
Phase 03: off-toggle-hud-clear
2026-04-28 22:48:40
PLAN/S0006_vr-fps-counter/PHASE_04__settings-disabled-when-vr-off.md
spec-tech
Phase 04: settings-disabled-when-vr-off
2026-04-28 22:48:40
PLAN/S0006_vr-fps-counter/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-04-28 22:48:40
PLAN/S0006_vr-fps-counter.md
spec-tech
Status -> Tactical (S0006)
2026-04-28 22:49:58
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneComposer.kt
spec-dev
S0006 phase-01: FPS label top-right placement
2026-04-28 22:51:18
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-dev
S0006 phase-02: frozen-last FPS value with stall guards
2026-04-28 22:52:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudSink.kt
spec-dev
S0006 phase-03: add clearFps() interface method
2026-04-28 22:52:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
spec-dev
S0006 phase-03: implement clearFps() override
2026-04-28 22:52:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-dev
S0006 phase-03: call clearFps() on vrShowFps off-transition
2026-04-28 22:53:59
app_v2/src/main/res/layout/fragment_settings_video.xml
spec-dev
S0006 phase-04: VR FPS disabled-hint TextView
2026-04-28 22:53:59
app_v2/src/main/res/values/strings.xml
spec-dev
S0006 phase-04: settings_vr_show_fps_hint_disabled (EN)
2026-04-28 22:53:59
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0006 phase-04: settings_vr_show_fps_hint_disabled (RU)
2026-04-28 22:53:59
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0006 phase-04: settings_vr_show_fps_hint_disabled (UK)
2026-04-28 22:53:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
spec-dev
S0006 phase-04: gate VR FPS row by disable3dVr
2026-04-28 22:56:24
docs/FEATURES.md
spec-dev
S0006 phase-05: VR HUD FPS counter bullet (EN)
2026-04-28 22:56:24
docs/FEATURES_RU.md
spec-dev
S0006 phase-05: VR HUD FPS counter bullet (RU)
2026-04-28 22:56:24
docs/FEATURES_UK.md
spec-dev
S0006 phase-05: VR HUD FPS counter bullet (UK)
2026-04-28 22:56:24
dev/CATALOG/app_v2.jsonl
spec-dev
S0006 phase-05: catalog regen
2026-04-28 22:56:24
dev/CATALOG/app_v2.md
spec-dev
S0006 phase-05: catalog render
2026-04-28 23:02:44
PLAN/S0006_vr-fps-counter.md
spec-check
Audit S0006 -> Partial; PASS/WARN/FAIL 13/2/0
2026-04-28 23:03:29
PLAN/S0006_vr-fps-counter.md
spec-fix
Annotate Last Audit (S0006); 2 follow-ups outside spec-fix scope
2026-04-28 23:05:09
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-fix
S0006 follow-up 1: gate FPS measurement by vrShowFps for true zero-overhead-when-off
2026-04-28 23:05:09
PLAN/S0006_vr-fps-counter.md
spec-fix
S0006 follow-up 2: rewrite §6.5 to reflect hot-apply behaviour
2026-04-28 23:05:09
docs/FEATURES.md
spec-fix
S0006 follow-up 2: VR HUD FPS counter - hot-apply text (EN)
2026-04-28 23:05:09
docs/FEATURES_RU.md
spec-fix
S0006 follow-up 2: VR HUD FPS counter - hot-apply text (RU)
2026-04-28 23:05:09
docs/FEATURES_UK.md
spec-fix
S0006 follow-up 2: VR HUD FPS counter - hot-apply text (UK)
2026-04-28 23:06:10
PLAN/S0006_vr-fps-counter.md
spec-check
Audit S0006 -> Verified; PASS/WARN/FAIL 15/0/0; 5 manual on-device
2026-04-28 23:06:37
PLAN/S0006_vr-fps-counter.md
spec-all
Pipeline Verified: S0006 (5 manual on-device items remain; journal -> BlockNeedUserTest)
2026-04-29 00:39:48
PLAN/S0025_smb-fast-fail.md
spec
Add strategic spec S0025 for ad-hoc smb-fast-fail
2026-04-29 00:42:53
PLAN/S0003_link-receive-download.md
spec-update
Refinement (claude-opus-4-7, focus: language, style, consistency)
2026-04-29 00:53:50
PLAN/S0025_smb-fast-fail.md
spec
S0025 §6 resolutions, scope expanded to no-network gate for all remote types; Status -> Approved
2026-04-29 00:59:11
PLAN/S0025_smb-fast-fail/INDEX.md
spec-tech
Create tactical plan for S0025
2026-04-29 00:59:11
PLAN/S0025_smb-fast-fail/PHASE_01__foundations.md
spec-tech
Phase 01: foundations
2026-04-29 00:59:11
PLAN/S0025_smb-fast-fail/PHASE_02__smb-integration.md
spec-tech
Phase 02: smb-integration
2026-04-29 00:59:11
PLAN/S0025_smb-fast-fail/PHASE_03__ftp-sftp-integration.md
spec-tech
Phase 03: ftp-sftp-integration
2026-04-29 00:59:11
PLAN/S0025_smb-fast-fail/PHASE_04__cloud-integration.md
spec-tech
Phase 04: cloud-integration
2026-04-29 00:59:11
PLAN/S0025_smb-fast-fail/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-04-29 00:59:11
PLAN/S0025_smb-fast-fail.md
spec-tech
Status -> Tactical
2026-04-29 01:05:59
PLAN/S0003_link-receive-download/INDEX.md
spec-tech
Create tactical plan for S0003
2026-04-29 01:05:59
PLAN/S0003_link-receive-download/PHASE_01__settings-foundation.md
spec-tech
Phase 01: settings-foundation
2026-04-29 01:05:59
PLAN/S0003_link-receive-download/PHASE_02__url-channel-branch.md
spec-tech
Phase 02: url-channel-branch
2026-04-29 01:05:59
PLAN/S0003_link-receive-download/PHASE_03__direct-file-extractor.md
spec-tech
Phase 03: direct-file-extractor
2026-04-29 01:05:59
PLAN/S0003_link-receive-download/PHASE_04__html-page-extractor.md
spec-tech
Phase 04: html-page-extractor
2026-04-29 01:05:59
PLAN/S0003_link-receive-download/PHASE_05__writer-progress-autoopen.md
spec-tech
Phase 05: writer-progress-autoopen
2026-04-29 01:05:59
PLAN/S0003_link-receive-download/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-04-29 01:05:59
PLAN/S0003_link-receive-download.md
spec-tech
Status -> Tactical
2026-04-29 01:13:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
S0003 P01: add link auto-download fields
2026-04-29 01:13:07
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
S0003 P01: persist link auto-download keys
2026-04-29 01:13:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
S0003 P01: backup schema fields
2026-04-29 01:13:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
S0003 P01: backup mapping with forward-compat
2026-04-29 01:13:07
app_v2/src/main/res/values/strings.xml
strings
S0003 P01: link autodownload strings (EN)
2026-04-29 01:13:07
app_v2/src/main/res/values-ru/strings.xml
strings
S0003 P01: link autodownload strings (RU)
2026-04-29 01:13:07
app_v2/src/main/res/values-uk/strings.xml
strings
S0003 P01: link autodownload strings (UK)
2026-04-29 01:13:07
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback
S0003 P01: link autodownload UI controls
2026-04-29 01:13:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
PlaybackSettingsFragment
S0003 P01: wire link autodownload toggles
2026-04-29 01:14:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/UrlInTextDetector.kt
UrlInTextDetector
S0003 P02: detect first http(s) URL in EXTRA_TEXT
2026-04-29 01:14:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
S0003 P02: coordinator skeleton
2026-04-29 01:14:54
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
LinkDownloadModule
S0003 P02: OkHttpClient with http(s)-only redirect guard
2026-04-29 01:14:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0003 P02: branch URL payloads to coordinator
2026-04-29 01:16:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/UrlExtractionStrategy.kt
UrlExtractionStrategy
S0003 P03: strategy contract
2026-04-29 01:16:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistry.kt
LinkExtractionRegistry
S0003 P03: ordered registry
2026-04-29 01:16:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/MediaMimeWhitelist.kt
MediaMimeWhitelist
S0003 P03: MIME/extension whitelist
2026-04-29 01:16:31
app_v2/src/main/java/com/sza/fastmediasorter/data/link/DirectFileExtractionStrategy.kt
DirectFileExtractionStrategy
S0003 P03: direct file extractor
2026-04-29 01:16:31
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
LinkDownloadStrategiesModule
S0003 P03: bind direct strategy
2026-04-29 01:17:52
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlMediaCandidate.kt
HtmlMediaCandidate
S0003 P04: candidate model
2026-04-29 01:17:52
app_v2/src/main/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicy.kt
CandidateSelectionPolicy
S0003 P04: 1MiB-priority selector
2026-04-29 01:17:52
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
HtmlPageExtractionStrategy
S0003 P04: jsoup-based html extractor
2026-04-29 01:17:52
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
LinkDownloadStrategiesModule
S0003 P04: bind html strategy
2026-04-29 01:20:11
app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkDownloadWriter.kt
LinkDownloadWriter
S0003 P05: write to resource or Downloads with fallback
2026-04-29 01:20:11
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
S0003 P05: wire registry + writer + auto-open gating
2026-04-29 01:20:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0003 P05: launch StandalonePlayerActivity on auto-open
2026-04-29 01:23:36
docs/FEATURES.md
spec-all
S0003: documented link auto-download channel
2026-04-29 01:23:36
docs/FEATURES_RU.md
spec-all
S0003: documented link auto-download channel (RU)
2026-04-29 01:23:36
docs/FEATURES_UK.md
spec-all
S0003: documented link auto-download channel (UK)
2026-04-29 01:23:36
dev/CATALOG/app_v2.jsonl
spec-all
S0003: catalogue refresh
2026-04-29 01:23:36
dev/CATALOG/app_v2.md
spec-all
S0003: catalogue refresh
2026-04-29 01:24:15
PLAN/S0003_link-receive-download.md
spec-all
Pipeline Partial: feature delivered, BlockNeedUserTest
2026-04-29 01:33:38
app_v2/src/main/java/com/sza/fastmediasorter/core/network/NetworkContextAnalyzer.kt
S0025/01.1
Add @Singleton + @Inject + hasAnyNetwork()/hasWifi() for reachability gate
2026-04-29 01:34:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceNavigationCoordinator.kt
S0025/01.2
Inject NetworkContextAnalyzer via constructor; remove manual init
2026-04-29 01:34:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0025/01.2
Add networkContextAnalyzer to Hilt constructor; propagate to ResourceNavigationCoordinator
2026-04-29 01:35:25
app_v2/src/main/java/com/sza/fastmediasorter/core/network/NetworkReachabilityGate.kt
S0025/01.3
Add NetworkReachabilityGate with requireAnyNetwork/requireWifi
2026-04-29 01:36:21
app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapper.kt
S0025/01.5
Add no-transport branch returning error_network_connection_lost
2026-04-29 01:37:06
app_v2/src/test/java/com/sza/fastmediasorter/core/network/NetworkReachabilityGateTest.kt
S0025/01.6
Add NetworkReachabilityGateTest covering all 5 gate scenarios
2026-04-29 01:55:25
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
S0025/02
Add NetworkReachabilityGate.requireWifi(‘SMB’) gate; smart retry skips degraded path on TCP precheck failure
2026-04-29 01:55:25
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbErrorClassifier.kt
S0025/02
checkConnectivity returns Boolean instead of throwing
2026-04-29 01:55:25
app_v2/src/test/java/com/sza/fastmediasorter/data/network/smb/SmbConnectionManagerTest.kt
S0025/02
Add 3 tests for Wi-Fi gate + smart retry + gate-consultation order; update constructor for new dep
2026-04-29 02:01:50
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpClient.kt
S0025/03
Inject NetworkReachabilityGate; gate connect() and getConnectionForExoPlayer with requireAnyNetwork(‘FTP’)
2026-04-29 02:01:50
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0025/03
Inject NetworkReachabilityGate; gate withConnection() and getConnectionForExoPlayer with requireAnyNetwork(‘SFTP’)
2026-04-29 02:01:50
app_v2/src/main/java/com/sza/fastmediasorter/core/di/AppModule.kt
S0025/03
Remove redundant @Provides for SftpClient and FtpClient (now constructor-injected)
2026-04-29 02:01:50
app_v2/src/test/java/com/sza/fastmediasorter/data/remote/ftp/FtpClientTest.kt
S0025/03
Add gate-denial tests for FtpClient.connect and getConnectionForExoPlayer
2026-04-29 02:01:50
app_v2/src/test/java/com/sza/fastmediasorter/data/remote/sftp/SftpClientTest.kt
S0025/03
Add gate-denial test for SftpClient.getConnectionForExoPlayer
2026-04-29 02:05:43
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
S0025/04
Inject NetworkReachabilityGate; gate tryRestoreForAccount with requireAnyNetwork(‘Cloud-Dropbox’)
2026-04-29 02:05:43
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
S0025/04
Inject NetworkReachabilityGate; gate tryRestoreFromStorage with requireAnyNetwork(‘Cloud-GDrive’)
2026-04-29 02:05:43
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
S0025/04
Inject NetworkReachabilityGate; gate authenticate() with requireAnyNetwork(‘Cloud-OneDrive’)
2026-04-29 02:05:43
app_v2/src/main/java/com/sza/fastmediasorter/core/di/AppModule.kt
S0025/04
Remove redundant @Provides for GoogleDriveRestClient (now constructor-injected)
2026-04-29 02:06:38
PLAN/S0025_smb-fast-fail.md
S0025
All 5 phases complete; Status -> Implemented. Awaiting on-device verification.
2026-04-29 03:14:09
PLAN/S0026..S0031 + S0022
specs
VR session 2026-04-29 (Quest 3) post-mortem: 6 new strategic specs (S0026 route flicker, S0027 orientation regression, S0028 multi-window, S0029 resume EOF, S0030 panel UI bugs, S0031 HUD UX gaps), S0022 enriched with empirical Quest 3 evidence (handlers=0)
2026-04-29 10:08:33
PLAN/S0022_bugfix-camera-capture-crash.md
S0022
Closed open questions #1, #3, #5 based on 2026-04-29 Quest 3 field evidence: silent abort confirmed (handlers=0), camera cmd hidden on VR per ADR-3, temp file created before handler check documented
2026-04-29 10:08:33
PLAN/S0027_bugfix-vr-immersive-orientation-inverted.md
S0027
Added §8 Field Evidence from 2026-04-29 log: VrPlayerActivity ran 0 render frames both times (fallback S0026); orientation bug cannot be confirmed from this log; S0027 blocked by S0026
2026-04-29 10:08:33
PLAN/S0028_vr-multi-window-playback.md
S0028
Added §8 Field Evidence: 4 independent PlayerActivity windows in single session confirmed; ResumeStateRepository conflict documented
2026-04-29 10:08:33
PLAN/S0029_bugfix-resume-position-end-of-file.md
S0029
Added §7 Field Evidence: completed=false never triggers in log; specific log lines cited; Q#4 partial answer (completed field exists in DataStore)
2026-04-29 10:08:33
PLAN/S0030_bugfix-panel-stereo-dialog-ui.md
S0030
Added §7 Field Evidence: PlaybackControlDialog AUTO selection observed at 02:23:03; jump behavior not explicitly logged; suggested V-level logging for next session
2026-04-29 10:08:33
PLAN/S0031_vr-immersive-hud-ux-gaps.md
S0031
Added §7 Field Evidence: VrControlOverlay:hide only (never show) in log; HUD blocked by S0026 fallback; S0031 blocked by S0026
2026-04-29 10:08:33
PLAN/S0032_bugfix-vr180-frameat-null.md
S0032
NEW SPEC: getFrameAtTime null for 7K VR180 file on Quest 3 (low native heap + decoder contention); fallback hierarchy defined; registered in spec-catalog
2026-04-29 10:09:23
PLAN/S0026_bugfix-vr-stereo-route-flicker/
S0026/F2
Tactical plan: 5 phases - extract BrowseRoutingDecision, intent-extra detected stereo, VrPlayerActivity hint consumption, unit tests, manual acceptance
2026-04-29 10:16:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRoutingDecision.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
S0026/F01
Extract BrowseRoutingDecision; honor vrAutoImmersive setting (no VR flicker on stereo files when toggle is off)
2026-04-29 10:16:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0026/F02
PlayerActivity.createIntent accepts detectedStereoMode; emits EXTRA_DETECTED_STEREO_MODE
2026-04-29 10:16:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
S0026/F03
VrPlayerActivity consumes EXTRA_DETECTED_STEREO_MODE to prime route decision before MONO short-circuit
2026-04-29 10:16:38
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRoutingDecisionTest.kt;app_v2/src/testVr/java/com/sza/fastmediasorter/vr/helpers/VrRouteDecisionHelperTest.kt
S0026/F04
Unit tests: BrowseRoutingDecision matrix (14 tests) + S0026 regression pin in VrRouteDecisionHelperTest
2026-04-29 10:16:38
app_v2/src/test/java/com/sza/fastmediasorter/data/cloud/GoogleDriveTokenRefreshTest.kt
S0026/F4-blocker
Fix pre-existing compile error: missing reachabilityGate constructor argument in GoogleDriveTokenRefreshTest
2026-04-29 10:18:48
PLAN/S0026_bugfix-vr-stereo-route-flicker.md
spec-all
Pipeline BlockNeedUserTest: S0026 - code-side criteria closed; on-device verification (Quest 3) pending
2026-04-29 12:35:56
PLAN/S0014_vr-xr-cold-start.md
spec-all
S0014 status -> BlockNeedUserTest: Phase 02 measurement on Quest 3 deferred to manual
2026-04-29 12:35:56
PLAN/S0014_vr-xr-cold-start/INDEX.md
spec-all
S0014 resume: fix stale spec_vr-xr-cold-start paths, Phase 02 steps marked manual-deferred
2026-04-29 12:35:56
PLAN/Other/ON_DEVICE_TESTS_QUEST3.md
spec-all
Update stale spec_vr-xr-cold-start references to S0014_vr-xr-cold-start
2026-04-29 12:36:12
PLAN/S0014_vr-xr-cold-start.md
spec-all
Pipeline BlockNeedUserTest: S0014 - Phase 01 done, Phase 02 awaits Quest 3 measurement run
2026-04-29 12:47:08
PLAN/S0024_vr-hud-ray-input/PHASE_01__hud-element-registry.md
spec-all
S0024 Phase 01 build gate PASS (assembleVrDebug); phase closed
2026-04-29 12:47:14
PLAN/S0033_vr-monoliths-decomposition.md
spec-all
Discovered dependency for S0024 Phase 02; OpenXrNative.cpp 3487 LOC + VrPlayerActivity.kt 1956 LOC over hard limit
2026-04-29 12:47:14
PLAN/S0024_vr-hud-ray-input.md
spec-all
S0024 status -> BlockByOtherTask (waits on S0033)
2026-04-29 12:48:32
PLAN/S0029_bugfix-resume-position-end-of-file/INDEX.md
spec-tech
Create tactical plan for S0029 (5 phases)
2026-04-29 12:48:32
PLAN/S0029_bugfix-resume-position-end-of-file/PHASE_01__completion-detector.md
spec-tech
Phase 01: PlaybackCompletionDetector + unit tests
2026-04-29 12:48:32
PLAN/S0029_bugfix-resume-position-end-of-file/PHASE_02__repo-mark-completed.md
spec-tech
Phase 02: PlaybackPositionRepository.markPlaybackCompleted
2026-04-29 12:48:33
PLAN/S0029_bugfix-resume-position-end-of-file/PHASE_03__wire-state-ended.md
spec-tech
Phase 03: VideoPlayerManager STATE_ENDED wiring
2026-04-29 12:48:33
PLAN/S0029_bugfix-resume-position-end-of-file/PHASE_04__near-end-exit-guard.md
spec-tech
Phase 04: PlayerLifecycleManager near-end exit guard
2026-04-29 12:48:33
PLAN/S0029_bugfix-resume-position-end-of-file/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs / catalog / cleanup
2026-04-29 12:48:33
PLAN/S0029_bugfix-resume-position-end-of-file.md
spec-tech
Status -> Tactical
2026-04-29 12:49:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt
S0022
Visibility guard (hasCameraHandler before menu open), handler check before temp file creation, exception wrapping (ActivityNotFoundException/SecurityException/IOException) -> Snackbar, process death saveState/restoreState
2026-04-29 12:49:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0022
Added hasCameraHandler check in onResourceOpsClicked - hides camera command when system has no camera app handler
2026-04-29 12:49:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0022
Added onSaveInstanceState/restoreState for camera capture process death survival
2026-04-29 12:49:30
app_v2/src/main/res/values/strings.xml,values-ru/strings.xml,values-uk/strings.xml
S0022
Added 4 localized error strings: camera_capture_error_no_camera_app, _permission_denied, _io, _session_expired (EN/RU/UK)
2026-04-29 12:49:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/playback/PlaybackCompletionDetector.kt
spec-dev
S0029 phase 01.1: add PlaybackCompletionDetector (near-end zone formula min(5%,5000ms))
2026-04-29 12:50:14
app_v2/src/test/java/com/sza/fastmediasorter/domain/playback/PlaybackCompletionDetectorTest.kt
spec-dev
S0029 phase 01.2: PlaybackCompletionDetector unit tests (12 cases)
2026-04-29 12:50:58
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/PlaybackPositionRepository.kt
spec-dev
S0029 phase 02.1: add markPlaybackCompleted(filePath, reason) to interface
2026-04-29 12:51:19
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/PlaybackPositionRepositoryImpl.kt
spec-dev
S0029 phase 02.2: implement markPlaybackCompleted (delete + reason-tagged ResumeState log)
2026-04-29 12:51:59
app_v2/src/test/java/com/sza/fastmediasorter/data/repository/PlaybackPositionRepositoryImplMarkCompletedTest.kt
spec-dev
S0029 phase 02.3: unit test markPlaybackCompleted (delete + exception swallow)
2026-04-29 12:54:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
spec-dev
S0029 phase 03.1: STATE_ENDED -> markPlaybackCompleted (idempotent via lastCompletedPath guard)
2026-04-29 12:54:54
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VideoPlayerManagerStateEndedTest.kt
spec-dev
S0029 phase 03.2: VideoPlayerManager STATE_ENDED test (3 cases incl. 30s/28s scenario)
2026-04-29 12:56:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
spec-dev
S0029 phase 04.1: near-end exit guard branches savePosition vs markPlaybackCompleted
2026-04-29 12:56:01
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManagerNearEndTest.kt
spec-dev
S0029 phase 04.2: near-end branch decision contract test
2026-04-29 12:56:45
docs/FEATURES.md
spec-dev
S0029 phase 05.1: add ‘watched-to-end auto-clear’ bullet (EN)
2026-04-29 12:56:45
docs/FEATURES_RU.md
spec-dev
S0029 phase 05.1: add ‘watched-to-end auto-clear’ bullet (RU)
2026-04-29 12:56:45
docs/FEATURES_UK.md
spec-dev
S0029 phase 05.1: add ‘watched-to-end auto-clear’ bullet (UK)
2026-04-29 12:57:38
PLAN/S0033_vr-monoliths-decomposition/INDEX.md
spec-tech
Create tactical plan for S0033
2026-04-29 12:57:38
PLAN/S0033_vr-monoliths-decomposition/PHASE_01__cpp-logging-and-ctx-header.md
spec-tech
Phase 01: cpp logging extraction + shared ctx header skeleton
2026-04-29 12:57:38
PLAN/S0033_vr-monoliths-decomposition/PHASE_02__cpp-lifecycle.md
spec-tech
Phase 02: cpp lifecycle subsystem extraction
2026-04-29 12:57:38
PLAN/S0033_vr-monoliths-decomposition/PHASE_03__cpp-swapchain-and-frame.md
spec-tech
Phase 03: cpp swapchain + frame loop extraction
2026-04-29 12:57:38
PLAN/S0033_vr-monoliths-decomposition/PHASE_04__cpp-input-and-hand.md
spec-tech
Phase 04: cpp input + hand-tracking extraction
2026-04-29 12:57:38
PLAN/S0033_vr-monoliths-decomposition/PHASE_05__activity-helpers.md
spec-tech
Phase 05: VrPlayerActivity decomposition into three Managers
2026-04-29 12:57:38
PLAN/S0033_vr-monoliths-decomposition/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: catalog regen + S0024 unblock
2026-04-29 12:57:38
PLAN/S0033_vr-monoliths-decomposition.md
spec-tech
Status -> Tactical
2026-04-29 12:57:53
dev/CATALOG/app_v2.jsonl
spec-dev
S0029 phase 05.2: catalog regen (new PlaybackCompletionDetector + markPlaybackCompleted method)
2026-04-29 12:57:53
dev/CATALOG/app_v2.md
spec-dev
S0029 phase 05.2: catalog markdown regen
2026-04-29 12:57:56
app_v2/src/main/res/layout/dialog_playback_control.xml
switchVrOverrideFormatType
B2 (S0030): Wrap override-format switch in canonical horizontal LinearLayout - portrait
2026-04-29 12:57:56
app_v2/src/main/res/layout-land/dialog_playback_control.xml
switchVrOverrideFormatType
B2 (S0030): Wrap override-format switch in canonical horizontal LinearLayout - landscape
2026-04-29 12:57:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
handleStereoModeSelection
B3 (S0030): Bind UI to user mode not effectiveStereoMode; show detected mode in secondary label when AUTO
2026-04-29 12:57:56
PLAN/S0030_bugfix-panel-stereo-dialog-ui/INDEX.md
spec-tech
S0030: Create tactical plan (4 phases)
2026-04-29 12:57:56
PLAN/S0030_bugfix-panel-stereo-dialog-ui.md
spec-tech
S0030: Advance status Draft -> Tactical; link tactical plan
2026-04-29 13:00:03
PLAN/S0030_bugfix-panel-stereo-dialog-ui.md
status
S0030: Advance status to Implemented
2026-04-29 13:00:25
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VideoPlayerManagerStateEndedTest.kt
spec-dev
S0029 phase 03.2 fix: explicit mockk generic for type inference
2026-04-29 13:01:19
PLAN/S0029_bugfix-resume-position-end-of-file.md
spec-dev
S0029 status -> Implemented
2026-04-29 13:01:27
app_v2/src/main/AndroidManifest.xml
VIBRATE
Add missing VIBRATE permission required by BeamAnimationDialog haptic feedback on Wear sync success
2026-04-29 13:16:05
app_v2/src/main/res/menu/document_selection_menu.xml
AppCompatResource
Fix: use app:showAsAction instead of android:showAsAction (AppCompatResource lint)
2026-04-29 13:16:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VerticalSeekBar.kt
AppCompatCustomView
Fix: extend AppCompatSeekBar instead of SeekBar (AppCompatCustomView lint)
2026-04-29 13:16:12
app_v2/src/main/res/values-ru/strings.xml,values-uk/strings.xml
StringFormatMatches
Fix: add missing %2 arg to cloud_auth_dialog_message in RU/UK locales
2026-04-29 13:16:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamingCacheCleanupHelper.kt
StringFormatMatches
Fix: pass sizeBytes as %2 arg to cleanup_prompt_body_format
2026-04-29 13:16:12
app_v2/src/main/res/menu/overflow_menu_player.xml
MenuTitle
Fix: add missing android:title to menu_search item
2026-04-29 13:18:18
PLAN/S0032_bugfix-vr180-frameat-null/INDEX.md
spec-tech
Create tactical plan for S0032
2026-04-29 13:18:18
PLAN/S0032_bugfix-vr180-frameat-null/PHASE_01__preventive-guards-logging.md
spec-tech
Phase 01: preventive-guards-logging
2026-04-29 13:18:18
PLAN/S0032_bugfix-vr180-frameat-null/PHASE_02__fallback-hierarchy.md
spec-tech
Phase 02: fallback-hierarchy
2026-04-29 13:18:18
PLAN/S0032_bugfix-vr180-frameat-null/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-04-29 13:18:18
PLAN/S0032_bugfix-vr180-frameat-null.md
spec-tech
Status -> Tactical
2026-04-29 13:18:23
app_v2/src/main/res/values-ru/strings.xml
StringFormatMatches
Fix: add missing %2 (provider name) arg to cloud_auth_dialog_message in RU locale
2026-04-29 13:18:23
app_v2/src/main/res/values-uk/strings.xml
StringFormatMatches
Fix: add missing %2 (provider name) arg to cloud_auth_dialog_message in UK locale
2026-04-29 13:18:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamingCacheCleanupHelper.kt
StringFormatMatches
Fix: pass Formatter.formatShortFileSize as %2 to cleanup_prompt_body_format
2026-04-29 13:18:23
app_v2/src/main/res/menu/overflow_menu_player.xml
MenuTitle
Fix: add missing android:title to menu_search item (MenuTitle lint)
2026-04-29 13:18:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterFileInfoFormatter.kt
ByteOrderMark
Fix: replace literal BOM char with Unicode escape \uFEFF (ByteOrderMark lint)
2026-04-29 13:19:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPosterExtractor.kt
S0032 step 01.1
Skeleton with Result/Source/SkipReason model
2026-04-29 13:19:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPosterExtractor.kt
S0032 step 01.2
Preventive skip: native heap and player-busy guards
2026-04-29 13:20:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPosterExtractor.kt
S0032 step 01.3
getFrameAtTime with reason classification (OOM/UNSUPPORTED/UNKNOWN)
2026-04-29 13:21:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0032 step 01.4
Wire VideoPosterExtractor into onRenderedFirstFrame; remove inline getFrameAtTime
2026-04-29 13:24:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPosterExtractor.kt
S0032 step 02.1
Add Glide memory-cache fallback (50ms timeout, sync-from-IO)
2026-04-29 13:25:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPosterExtractor.kt
S0032 step 02.2
Track and reuse last delivered bitmap for EXOPLAYER_LAST tier
2026-04-29 13:26:23
app_v2/src/main/res/values/strings.xml
S0032 step 02.3
Add poster_thumbnail_unavailable string
2026-04-29 13:26:23
app_v2/src/main/res/values-ru/strings.xml
S0032 step 02.3
Add poster_thumbnail_unavailable string (RU)
2026-04-29 13:26:23
app_v2/src/main/res/values-uk/strings.xml
S0032 step 02.3
Add poster_thumbnail_unavailable string (UK)
2026-04-29 13:26:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPosterExtractor.kt
S0032 step 02.3
buildPlaceholder bitmap and PLACEHOLDER tier
2026-04-29 13:27:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPosterExtractor.kt
S0032 step 02.4
Enriched logging: fallback= field with skipped/null distinction
2026-04-29 13:28:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0032 step 02.5
Wire fallback chain; widen onFirstFrameReady callback signature; reset extractor on path change
2026-04-29 13:28:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
S0032 step 02.5
triggerVideoBackground takes isPlaceholder; contentDescription on ivDynamicBackground
2026-04-29 13:28:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
S0032 step 02.5
Pass isPlaceholder flag from onFirstFrameReady
2026-04-29 13:30:51
docs/FEATURES.md
S0032 step 03.1
Player - resilient poster-frame extraction bullet
2026-04-29 13:30:51
docs/FEATURES_RU.md
S0032 step 03.1
Player - resilient poster-frame extraction bullet (RU)
2026-04-29 13:30:51
docs/FEATURES_UK.md
S0032 step 03.1
Player - resilient poster-frame extraction bullet (UK)
2026-04-29 13:32:21
dev/CATALOG/app_v2.jsonl
S0032 step 03.2
Catalog regen for VideoPosterExtractor
2026-04-29 13:32:21
dev/CATALOG/app_v2.md
S0032 step 03.2
Catalog regen for VideoPosterExtractor
2026-04-29 15:14:15
PLAN/S0034_resource-icons-system.md
spec
Add strategic spec S0034 for resource-icons-system
2026-04-29 15:25:50
PLAN/S0034_resource-icons-system.md
spec
Update S0034: resolve open questions, approve spec
2026-04-29 15:45:30
PLAN/S0034_resource-icons-system/INDEX.md
spec-tech
Create tactical plan for S0034
2026-04-29 15:45:31
PLAN/S0034_resource-icons-system/PHASE_01__designer-prompt.md
spec-tech
Phase 01: designer-prompt
2026-04-29 15:45:31
PLAN/S0034_resource-icons-system/PHASE_02__data-foundations.md
spec-tech
Phase 02: data-foundations
2026-04-29 15:45:31
PLAN/S0034_resource-icons-system/PHASE_03__icon-library-registry.md
spec-tech
Phase 03: icon-library-registry
2026-04-29 15:45:31
PLAN/S0034_resource-icons-system/PHASE_04__composite-rendering.md
spec-tech
Phase 04: composite-rendering
2026-04-29 15:45:31
PLAN/S0034_resource-icons-system/PHASE_05__assignment-logic.md
spec-tech
Phase 05: assignment-logic
2026-04-29 15:45:32
PLAN/S0034_resource-icons-system/PHASE_06__icon-selector-ui.md
spec-tech
Phase 06: icon-selector-ui
2026-04-29 15:45:32
PLAN/S0034_resource-icons-system/PHASE_07__main-screen-integration.md
spec-tech
Phase 07: main-screen-integration
2026-04-29 15:45:32
PLAN/S0034_resource-icons-system/PHASE_08__docs-catalog-cleanup.md
spec-tech
Phase 08: docs-catalog-cleanup
2026-04-29 15:45:32
PLAN/S0034_resource-icons-system.md
spec-tech
Status -> Tactical
2026-04-29 16:28:41
PLAN/S0034_resource-icons-system/DESIGNER_PROMPT.md
DESIGNER_PROMPT
Phase 01 Step 01.1: authored English designer brief for 50-icon SVG set (5 themed groups)
2026-04-29 16:28:47
PLAN/S0034_resource-icons-system/DESIGNER_PROMPT_RU.md
DESIGNER_PROMPT_RU
Phase 01 Step 01.2: authored Russian mirror of designer brief
2026-04-29 16:28:47
PLAN/S0034_resource-icons-system/ICON_INVENTORY.md
ICON_INVENTORY
Phase 01 Step 01.3: authored icon inventory checklist (50 icons, 5 sets)
2026-04-29 16:37:24
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceEntity.kt
ResourceEntity
S0034 Phase 02: add iconId column (ico-XX-NNN format) for resource icons system
2026-04-29 16:37:32
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
S0034 Phase 02: bump version 25->26 + MIGRATION_25_26 (add icon_id column)
2026-04-29 16:37:39
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
S0034 Phase 02: register MIGRATION_25_26 in Room builder
2026-04-29 16:37:45
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
MediaResource
S0034 Phase 02: add iconId field (nullable, default null)
2026-04-29 16:37:51
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
ResourceRepositoryImpl
S0034 Phase 02: pass iconId through entity<->domain mapper; implement updateIcon
2026-04-29 16:37:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResourceRepository.kt
ResourceRepository
S0034 Phase 02: add updateIcon(resourceId, iconId) contract
2026-04-29 16:38:03
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceDao.kt
ResourceDao
S0034 Phase 02: add updateIcon query (UPDATE resources SET icon_id WHERE id)
2026-04-29 16:38:09
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
FakeResourceRepository
S0034 Phase 02: implement updateIcon stub in test fake
2026-04-29 16:44:02
dev/CATALOG/app_v2.jsonl
catalog
S0034 Phase 02: regenerate catalog (scan + render via pwsh 7)
2026-04-29 16:44:02
dev/CATALOG/app_v2.md
catalog
S0034 Phase 02: render markdown catalog
2026-04-29 17:41:35
app_v2/src/main/res/drawable/ico_01_001..ico_05_020.xml
ResourceIcons
Phase 03 Step 03.1: generated 60 Android Vector Drawable XMLs (5 sets: music/video/image/docs/abstract)
2026-04-29 17:52:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconSet.kt
S0034 Phase 03.2
New enum - five themed icon sets (MUSIC/VIDEO/IMAGE/DOCS/OTHER) with setId and countInSet
2026-04-29 17:52:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconRegistry.kt
S0034 Phase 03.3
New object - constant registry mapping all 60 ico-XX-NNN ids to R.drawable.ico_XX_NNN resources
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconDefaults.kt
S0034 Phase 03.4
New object - stateless helper mapping profile/type to ResourceIconSet and virtual paths to fixed icon ids
2026-04-29 17:52:32
app_v2/src/main/res/values/dimens.xml
S0034 Phase 04
Added resource_icon_composite_size/badge_size/theme_inset + icon_picker grid dimensions
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ConnectionBadgeMapper.kt
S0034 Phase 04
New object - maps MediaResource to connection-type badge drawable (null for virtual/local)
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconComposer.kt
S0034 Phase 04
New object - composes theme icon + optional badge into LayerDrawable; falls back to legacy icon when iconId=null
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveResourceIconUseCase.kt
S0034 Phase 05
New UseCase - resolves initial ico-XX-NNN id for new/provisioned resources based on path/profile/type
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
S0034 Phase 05
Injected ResolveResourceIconUseCase; assign iconId when provisioning virtual resources on first launch
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
S0034 Phase 05
Injected ResolveResourceIconUseCase; assign default iconId when saving new resources (ADD mode)
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResourceRepository.kt
S0034 Phase 05
Added backfillMissingIcons() contract for DB migration of pre-S0034 rows
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
S0034 Phase 05
Implemented backfillMissingIcons() - assigns icons to existing rows with null iconId on startup
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0034 Phase 05
Injected ResolveResourceIconUseCase; call backfillMissingIcons() on app init after provision/migrate
2026-04-29 17:52:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
S0034 Phase 07
Replaced inline iconRes when-blocks in both List/Grid ViewHolders with ResourceIconComposer.compose()
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconSet.kt
S0034 Phase 03.2
New enum - five themed icon sets (MUSIC/VIDEO/IMAGE/DOCS/OTHER)
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconRegistry.kt
S0034 Phase 03.3
New object - maps all 60 ico-XX-NNN ids to R.drawable resources
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconDefaults.kt
S0034 Phase 03.4
New object - maps profile/type to set and virtual paths to fixed icon ids
2026-04-29 17:52:46
app_v2/src/main/res/values/dimens.xml
S0034 Phase 04
Added resource_icon_composite/badge/inset + icon_picker grid dimensions
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ConnectionBadgeMapper.kt
S0034 Phase 04
New object - connection-type badge drawable per resource
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconComposer.kt
S0034 Phase 04
New object - LayerDrawable composer: theme icon + optional badge overlay
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveResourceIconUseCase.kt
S0034 Phase 05
New UseCase - resolve initial icon id for new/provisioned resources
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
S0034 Phase 05
Assign iconId when provisioning virtual resources on first launch
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
S0034 Phase 05
Assign default iconId when saving new resources (ADD mode)
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResourceRepository.kt
S0034 Phase 05
Added backfillMissingIcons() interface contract
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
S0034 Phase 05
Implemented backfillMissingIcons() for pre-S0034 DB rows
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0034 Phase 05
Call backfillMissingIcons() on app init
2026-04-29 17:52:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
S0034 Phase 07
Replace inline iconRes blocks with ResourceIconComposer.compose()
2026-04-29 17:52:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconSet.kt
S0034 Ph03.2
New enum - five themed icon sets MUSIC/VIDEO/IMAGE/DOCS/OTHER
2026-04-29 17:53:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconRegistry.kt
S0034 Ph03.3
New object - maps all 60 ico-XX-NNN ids to R.drawable resources
2026-04-29 17:53:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconDefaults.kt
S0034 Ph03.4
New object - maps profile/type to set and virtual paths to fixed icon ids
2026-04-29 17:53:06
app_v2/src/main/res/values/dimens.xml
S0034 Ph04
Added resource_icon composite/badge/inset and icon_picker grid dimensions
2026-04-29 17:53:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ConnectionBadgeMapper.kt
S0034 Ph04
New object - connection-type badge drawable per resource type
2026-04-29 17:53:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconComposer.kt
S0034 Ph04
New object - composes LayerDrawable theme icon + optional badge
2026-04-29 17:53:06
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveResourceIconUseCase.kt
S0034 Ph05
New UseCase - resolves initial icon id for new/provisioned resources
2026-04-29 17:53:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
S0034 Ph05
Inject ResolveResourceIconUseCase; assign iconId on first-launch provisioning
2026-04-29 17:53:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
S0034 Ph05
Inject ResolveResourceIconUseCase; assign default iconId on ADD mode save
2026-04-29 17:53:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResourceRepository.kt
S0034 Ph05
Add backfillMissingIcons() interface contract
2026-04-29 17:53:07
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
S0034 Ph05
Implement backfillMissingIcons() for pre-S0034 DB rows
2026-04-29 17:53:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0034 Ph05
Inject ResolveResourceIconUseCase; call backfillMissingIcons() on app init
2026-04-29 17:53:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
S0034 Ph07
Replace both inline iconRes when-blocks with ResourceIconComposer.compose()
2026-04-29 17:53:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconRegistry.kt
S0034 Ph03.3
New object - 60-entry registry ico-XX-NNN to R.drawable
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconDefaults.kt
S0034 Ph03.4
New object - maps profile/type to set and virtual paths to fixed icon ids
2026-04-29 17:53:25
app_v2/src/main/res/values/dimens.xml
S0034 Ph04
Added resource_icon composite/badge/inset and icon_picker grid dimensions
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ConnectionBadgeMapper.kt
S0034 Ph04
New - connection-type badge drawable per resource type
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconComposer.kt
S0034 Ph04
New - LayerDrawable composer theme icon plus optional badge
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveResourceIconUseCase.kt
S0034 Ph05
New UseCase - resolves initial icon id for new resources
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
S0034 Ph05
Inject ResolveResourceIconUseCase - assign iconId on first-launch provisioning
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
S0034 Ph05
Inject ResolveResourceIconUseCase - assign iconId on ADD mode save
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResourceRepository.kt
S0034 Ph05
Add backfillMissingIcons() interface
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
S0034 Ph05
Implement backfillMissingIcons() for pre-S0034 null iconId rows
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0034 Ph05
Inject ResolveResourceIconUseCase - call backfillMissingIcons on init
2026-04-29 17:53:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
S0034 Ph07
Replace inline iconRes blocks with ResourceIconComposer.compose()
2026-04-29 17:53:37
app_v2/src/main/res/values/dimens.xml
S0034 Ph04
Added resource_icon composite/badge/inset and icon_picker dimensions
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ConnectionBadgeMapper.kt
S0034 Ph04
New - connection-type badge per resource type
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconComposer.kt
S0034 Ph04
New - LayerDrawable composer theme icon plus badge
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveResourceIconUseCase.kt
S0034 Ph05
New UseCase - resolves initial icon id
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
S0034 Ph05
Assign iconId on first-launch provision
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
S0034 Ph05
Assign iconId on ADD mode save
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResourceRepository.kt
S0034 Ph05
Add backfillMissingIcons interface
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
S0034 Ph05
Implement backfillMissingIcons
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0034 Ph05
Call backfillMissingIcons on init
2026-04-29 17:53:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
S0034 Ph07
Replace iconRes blocks with ResourceIconComposer.compose()
2026-04-29 18:14:58
app_v2/src/main/res/values/strings.xml
strings.xml / values-ru / values-uk
S0034 Phase 06: added 7 icon picker strings (EN/RU/UK) - cd_pick_resource_icon, icon_picker_title, icon_set_*
2026-04-29 18:15:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment
S0034 Phase 06: wired btnPickIcon - setupIconPicker(), updateIconPickerPreview(), renderFormData() sync, fragment result listener
2026-04-29 18:15:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
S0034 Phase 06: wired btnPickIcon - userPickedIconId field, setupIconPicker(), fragment result listener, initial preview from OTHER set
2026-04-29 18:15:09
app_v2/src/main/res/layout/fragment_resource_editor.xml
fragment_resource_editor.xml / activity_add_resource.xml
S0034 Phase 06: added android:id=pickIconAction to include tags for correct ViewBinding reference generation
2026-04-29 18:43:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconRegistry.kt
ResourceIconRegistry
S0034 Phase 03: icon id->drawable registry for 60 icons across 5 themed sets
2026-04-29 18:43:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconSet.kt
ResourceIconSet
S0034 Phase 03: enum for 5 themed icon sets (MUSIC/VIDEO/IMAGE/DOCS/OTHER)
2026-04-29 18:43:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconDefaults.kt
ResourceIconDefaults
S0034 Phase 03/05: default icon id resolution by ResourceProfile + ResourceType
2026-04-29 18:43:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/picker/IconPickerBottomSheet.kt
IconPickerBottomSheet
S0034 Phase 06: tabbed bottom-sheet icon picker with Fragment Result API
2026-04-29 18:43:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/picker/IconPickerAdapter.kt
IconPickerAdapter
S0034 Phase 06: RecyclerView adapter for 60-icon picker grid with selection ring
2026-04-29 18:43:09
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase / MIGRATION_25_26
S0034 Phase 02: DB v25->v26 - added icon_id TEXT column to resources table
2026-04-29 18:43:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconComposer.kt
ResourceIconComposer
S0034 Phase 04: composes resource icon + connection badge into a single Bitmap
2026-04-29 18:43:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ConnectionBadgeMapper.kt
ConnectionBadgeMapper
S0034 Phase 04: maps ResourceType to corner badge drawable id
2026-04-29 18:43:09
docs/FEATURES.md
FEATURES.md / FEATURES_RU.md / FEATURES_UK.md
S0034 Phase 08: added Themed resource icons bullet in all three language variants
2026-04-29 18:43:09
dev/CATALOG/app_v2.jsonl
app_v2.jsonl / app_v2.md
S0034 Phase 08: catalog regenerated - 827 records including new icon/picker classes
2026-04-29 18:47:21
PLAN/S0031_vr-immersive-hud-ux-gaps.md
spec-update
Refinement (claude-opus-4-7); applied 8 ACCEPTs, 1 DISCUSS proposed
2026-04-29 18:52:53
PLAN/S0033_vr-monoliths-decomposition.md
spec-update
Refinement (claude-sonnet-4-6, focus: all)
2026-04-29 18:52:53
PLAN/S0033_vr-monoliths-decomposition/PHASE_02__cpp-lifecycle.md
spec-update
Refinement (claude-sonnet-4-6, focus: verifiability)
2026-04-29 18:57:13
PLAN/S0028_vr-multi-window-playback.md
spec-update
Refinement (claude-sonnet-4-6, focus: language, structure, verifiability, consistency, completeness, style)
2026-04-29 21:12:14
PLAN/S0007_vr-hand-tracking/INDEX.md
S0007 tactical plan
spec-tech: created 4-phase tactical plan for VR Hand Tracking & Gesture Control
2026-04-29 21:12:14
PLAN/S0007_vr-hand-tracking/PHASE_01__verify-layer-e.md
S0007 Phase 01
spec-tech: Layer E verification checklist vs spec requirements
2026-04-29 21:12:14
PLAN/S0007_vr-hand-tracking/PHASE_02__hover-visual-feedback.md
S0007 Phase 02
spec-tech: hover cursor highlight design (VrHandRayManager)
2026-04-29 21:12:14
PLAN/S0007_vr-hand-tracking/PHASE_03__hover-click-audio.md
S0007 Phase 03
spec-tech: hover + pinch-complete audio SFX design
2026-04-29 21:12:14
PLAN/S0007_vr-hand-tracking/PHASE_04__docs-catalog-cleanup.md
S0007 Phase 04
spec-tech: docs/catalog/FEATURES cleanup phase
2026-04-29 21:12:14
PLAN/S0007_vr-hand-tracking.md
S0007 strategic spec
spec-tech: Status Approved -> Tactical, Tier 3, tactical plan link added
2026-04-29 21:12:19
PLAN/S0007_vr-hand-tracking/PHASE_01__verify-layer-e.md
S0007 Phase 01
spec-tech: Layer E verification checklist vs spec requirements
2026-04-29 21:12:19
PLAN/S0007_vr-hand-tracking/PHASE_02__hover-visual-feedback.md
S0007 Phase 02
spec-tech: hover cursor highlight design (VrHandRayManager)
2026-04-29 21:12:19
PLAN/S0007_vr-hand-tracking/PHASE_03__hover-click-audio.md
S0007 Phase 03
spec-tech: hover + pinch-complete audio SFX design
2026-04-29 21:12:19
PLAN/S0007_vr-hand-tracking/PHASE_04__docs-catalog-cleanup.md
S0007 Phase 04
spec-tech: docs/catalog/FEATURES cleanup phase
2026-04-29 21:12:19
PLAN/S0007_vr-hand-tracking.md
S0007 strategic spec
spec-tech: Status Approved -> Tactical, Tier 3, tactical plan link added
2026-04-29 21:12:22
PLAN/S0007_vr-hand-tracking/PHASE_02__hover-visual-feedback.md
S0007 Phase 02
spec-tech: hover cursor highlight design (VrHandRayManager)
2026-04-29 21:12:27
PLAN/S0007_vr-hand-tracking/PHASE_03__hover-click-audio.md
S0007 Phase 03
spec-tech: hover + pinch-complete audio SFX design
2026-04-29 21:12:27
PLAN/S0007_vr-hand-tracking/PHASE_04__docs-catalog-cleanup.md
S0007 Phase 04
spec-tech: docs/catalog/FEATURES cleanup phase
2026-04-29 21:12:27
PLAN/S0007_vr-hand-tracking.md
S0007 strategic spec
spec-tech: Status Approved -> Tactical, Tier 3, tactical plan link added
2026-04-29 21:12:31
PLAN/S0007_vr-hand-tracking/PHASE_04__docs-catalog-cleanup.md
S0007 Phase 04
spec-tech: docs/catalog/FEATURES cleanup phase
2026-04-29 21:12:31
PLAN/S0007_vr-hand-tracking.md
S0007 strategic spec
spec-tech: Status Approved -> Tactical, Tier 3, tactical plan link added
2026-04-29 21:12:35
PLAN/S0007_vr-hand-tracking.md
S0007 strategic spec
spec-tech: Status Approved -> Tactical, Tier 3, tactical plan link added
2026-04-29 23:12:02
PLAN/S0031_vr-immersive-hud-ux-gaps.md
spec-update
Applied P-1: merged Field evidence into S0031 par. 6 Q1; eliminated duplicate ## 7. header
2026-04-29 23:14:18
PLAN/S0027_bugfix-vr-immersive-orientation-inverted.md
spec-update
Refinement (claude-opus-4-7, focus: all)
2026-04-29 23:17:33
PLAN/S0027_bugfix-vr-immersive-orientation-inverted.md
spec-update
P-1 accepted: risk table → §7, Field evidence → §6.4 Resolved (claude-opus-4-7)
2026-04-29 23:18:17
PLAN/S0034_resource-icons-system.md
spec-check
Audit S0034 -> Broken; PASS/WARN/FAIL 33/2/2
2026-04-29 23:22:30
PLAN/S0034_resource-icons-system.md
spec-check
Audit S0034 -> Broken; PASS 48 / WARN 4 / FAIL 6
2026-04-29 23:27:09
PLAN/S0034_resource-icons-system.md
spec-fix
Annotate Last Audit (S0034): auto-fixed 1 (phase headers 03/04/07), partial 1 (05 header), follow-up 7
2026-04-29 23:27:09
PLAN/S0034_resource-icons-system/PHASE_03__icon-library-registry.md
spec-fix
S0034 Phase 03: mark header + all steps Done (was Not started)
2026-04-29 23:27:09
PLAN/S0034_resource-icons-system/PHASE_04__composite-rendering.md
spec-fix
S0034 Phase 04: mark header + all steps Done (was Not started)
2026-04-29 23:27:10
PLAN/S0034_resource-icons-system/PHASE_05__assignment-logic.md
spec-fix
S0034 Phase 05: mark header Done; step 05.3 done; steps 05.1/05.2/05.4/05.5 remain [ ] per audit FAILs
2026-04-29 23:27:10
PLAN/S0034_resource-icons-system/PHASE_07__main-screen-integration.md
spec-fix
S0034 Phase 07: mark header + all steps Done (was Not started)
2026-04-29 23:29:31
PLAN/S0034_resource-icons-system/PHASE_03__icon-library-registry.md
spec-fix
Flip phase header to Done, mark all 5 steps [x] done (S0034)
2026-04-29 23:29:31
PLAN/S0034_resource-icons-system/PHASE_04__composite-rendering.md
spec-fix
Flip phase header to Done, mark all 4 steps [x] done (S0034)
2026-04-29 23:29:31
PLAN/S0034_resource-icons-system/PHASE_05__assignment-logic.md
spec-fix
Flip phase header to Done; steps 05.1/02/04/05 remain [ ] pending FOLLOW-UP resolution (S0034)
2026-04-29 23:29:31
PLAN/S0034_resource-icons-system/PHASE_07__main-screen-integration.md
spec-fix
Flip phase header to Done, mark all 4 steps [x] done (S0034)
2026-04-29 23:29:32
PLAN/S0034_resource-icons-system.md
spec-fix
Annotate Last Audit (S0034): 7 FOLLOW-UP FAILs, 1 PARTIAL WARN, 1 FOLLOW-UP WARN
2026-04-29 23:37:10
PLAN/S0004_resource-icon-quick-slideshow.md
S0004
Status updated to Implemented; build PASS confirmed 2026-04-29
2026-04-29 23:42:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ResourceIconComposer.kt
ResourceIconComposer
Add ResourceIconRegistry set-first-icon fallback before legacy drawables (S0034 FAIL 04.3)
2026-04-29 23:42:13
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceDao.kt
ResourceDao
Add findResourcesWithoutIcon() query (WHERE icon_id IS NULL) for efficient backfill (S0034 FAIL 05.4)
2026-04-29 23:42:13
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
ResourceRepositoryImpl
Use findResourcesWithoutIcon() in backfillMissingIcons - avoids full table scan on every cold start (S0034)
2026-04-29 23:46:36
PLAN/S0034_resource-icons-system.md
spec-check
Audit S0034 -> Verified; PASS 57 / WARN 0 / FAIL 0
2026-04-29 23:57:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlaybackCommandModel.kt
PlaybackCommandModel
S0031 П3: added ExitTo2D command for switching from immersive to VR panel mode
2026-04-29 23:57:56
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrInteractivePanelComposer.kt
VrInteractivePanelComposer
S0031 П3: added ZONE_EXIT_TO_2D zone, Row 5 expanded from 4 to 5 buttons
2026-04-29 23:58:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
S0031 П3: wired ZONE_EXIT_TO_2D->ExitTo2D->switchToPanelPreservingPosition in dispatch tables
2026-04-29 23:58:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrControlOverlayManager.kt
VrControlOverlayManager
S0031 П3: added Exit to 2D button in view-based overlay (Row 1)
2026-04-29 23:58:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
VrHudSceneDriver
S0031 П1: added diagnostic Timber.i to setVisible for HUD activation tracing
2026-04-29 23:58:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
VrControllerInputManager
S0031 П1: added diagnostic Timber.i at TOGGLE_CONTROLS dispatch point
2026-04-29 23:58:06
app_v2/src/main/res/values/strings.xml
strings.xml
S0031 П3: added vr_overlay_btn_exit_to_2d string (EN)
2026-04-29 23:58:06
app_v2/src/main/res/values-ru/strings.xml
strings.xml
S0031 П3: added vr_overlay_btn_exit_to_2d string (RU)
2026-04-29 23:58:06
app_v2/src/main/res/values-uk/strings.xml
strings.xml
S0031 П3: added vr_overlay_btn_exit_to_2d string (UK)
2026-04-30 00:00:40
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
VrHudSceneDriver
S0031 fix: added missing import timber.log.Timber (build error)
2026-04-30 00:04:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer
S0027: fix fisheye vLens V-axis inversion - 0.5+rsin(az) to 0.5-r sin(az)
2026-04-30 00:04:42
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
OpenXrSessionManager
S0027 ADR-3: add VideoLayerGeometry log line in applyLayerDescriptor
2026-04-30 01:38:17
app_v2/src/main/res/layout/activity_add_resource.xml
activity_add_resource.xml
Fix lint IncludeLayoutParam by adding explicit include width/height for toolbar action.
2026-04-30 01:38:29
app_v2/src/main/res/layout/toolbar_icon_action.xml
toolbar_icon_action.xml
Fix lint UseAppTint by switching ImageButton tint from android:tint to app:tint.
2026-04-30 01:56:23
PLAN/S0035_android17-local-network-permission.md
spec
Add strategic spec S0035 for Android 17 local network permission
2026-04-30 02:41:24
app_v2/src/main/res/values-night/colors.xml
welcome_page_7_background, welcome_page_8_background
Add missing dark-theme welcome page backgrounds (pages 7-8) to fix invisible white text on light fallback colors
2026-04-30 02:53:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity.applyWindowInsets
Fix btnSkip marginEnd to account for right-side display cutout and nav bar insets on foldable/landscape
2026-04-30 02:57:54
PLAN/S0036_vr-android-xr-sdk-compat.md
spec
Add strategic spec S0036 for vr-android-xr-sdk-compat
2026-04-30 03:10:26
PLAN/S0037_resource-icon-ux-polish.md
S0037
Создана стратегическая спецификация: полировка иконок и бейджей ресурсов (5 подзадач)
2026-04-30 03:15:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Fix black screen: save/restore permission-flow flags (waitingPermissionForFinish etc.) across Activity recreation; restore ViewPager page in setupViewPager()
2026-04-30 03:15:59
app_v2/src/main/res/layout/activity_welcome.xml
activity_welcome
Fix black flash on startup: change root background from ?attr/colorSurface (black in dark mode) to @color/welcome_page_1_background
2026-04-30 03:18:25
PLAN/S0037_resource-icon-ux-polish/INDEX.md
S0037
Tactical plan created: 5 phases for icon/badge UX polish
2026-04-30 03:50:10
PLAN/S0041_debug-vr180-fisheye-quality-regression.md
spec-update
Spec refinement pass: 5 edits (risks section, MANUAL mark, verifiability predicates, revision history)
2026-04-30 03:53:41
PLAN/S0041_debug-vr180-fisheye-quality-regression/INDEX.md
spec-tech
Create tactical plan for debug-vr180-fisheye-quality-regression
2026-04-30 03:53:41
PLAN/S0041_debug-vr180-fisheye-quality-regression/PHASE_01__add-debug-logging.md
spec-tech
Phase 01: add-debug-logging
2026-04-30 03:53:41
PLAN/S0041_debug-vr180-fisheye-quality-regression/PHASE_02__build-and-device-test.md
spec-tech
Phase 02: build-and-device-test
2026-04-30 03:53:41
PLAN/S0041_debug-vr180-fisheye-quality-regression/PHASE_03__analyze-and-fix.md
spec-tech
Phase 03: analyze-and-fix
2026-04-30 03:53:41
PLAN/S0041_debug-vr180-fisheye-quality-regression/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-04-30 03:53:41
PLAN/S0041_debug-vr180-fisheye-quality-regression.md
spec-tech
Move strategic status to Tactical; link tactical plan
2026-04-30 03:55:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager.onTracksChanged
S0041: add VR_QUALITY_DEBUG track format log for fisheye quality investigation
2026-04-30 03:55:05
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
VrStereoRenderer.renderFisheyeQuad
S0041: add VR_QUALITY_DEBUG first-frame fisheye log (uOffset, target dimensions)
2026-04-30 03:58:19
PLAN/spec-all_debug-vr180-fisheye-quality-regression_2026-04-30.md
spec-all
Stage 5-8 complete: debug logging implemented, BUILD SUCCESSFUL; blocked on MANUAL device test
2026-04-30 10:10:51
PLAN/S0038_bugfix-vr-exit-immersive-new-window.md
spec-update
Stage 2: уточнён root cause (3 дефекта), исправлены §2/§4/§5/§6/§7, добавлена §9 Риски и Revision History
2026-04-30 10:12:11
PLAN/S0038_bugfix-vr-exit-immersive-new-window/INDEX.md
spec-tech
Create tactical plan S0038: 2 phases
2026-04-30 10:12:11
PLAN/S0038_bugfix-vr-exit-immersive-new-window/PHASE_01__apply-fixes.md
spec-tech
Phase 01: apply-fixes (3 code changes)
2026-04-30 10:12:11
PLAN/S0038_bugfix-vr-exit-immersive-new-window/PHASE_02__verify-and-test.md
spec-tech
Phase 02: verify-and-test (grep + MANUAL device test)
2026-04-30 10:13:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransition.kt
VrTaskTransition.exitImmersiveToPanel
S0038: add FLAG_ACTIVITY_SINGLE_TOP to panelIntent to prevent new window on HorizonOS
2026-04-30 10:13:51
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity.exitVrAndStopPlayback+onNewIntent
S0038: fix EXTRA_FORCE_PANEL key + replace Log.e with Timber.d in onNewIntent
2026-04-30 10:16:31
dev/CATALOG/app_v2.md
catalog-scan
S0038: catalog sync after VrTaskTransition + VrPlayerActivity edits
2026-04-30 10:16:31
PLAN/spec-all_bugfix-vr-exit-immersive-new-window_2026-04-30.md
spec-all
S0038: Stages 5-8 complete; BUILD SUCCESSFUL; blocked on MANUAL device test (Phase 02)
2026-04-30 12:17:11
PLAN/S0039_bugfix-vr-panel-swapchain-regression/INDEX.md
spec-tech
Create tactical plan for S0039
2026-04-30 12:17:19
PLAN/S0039_bugfix-vr-panel-swapchain-regression/PHASE_01__fix-panel-samplecount.md
spec-tech
Phase 01: fix-panel-samplecount
2026-04-30 12:17:19
PLAN/S0039_bugfix-vr-panel-swapchain-regression/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-04-30 12:17:19
PLAN/S0039_bugfix-vr-panel-swapchain-regression.md
spec-tech
Status → Tactical
2026-04-30 12:19:31
app_v2/src/vr/cpp/OpenXrNative.cpp
S0039
Fix: add sc.sampleCount=1 + pre-creation LOGD to createPanelSwapchainImpl; resolves xrCreateSwapchain XR_ERROR_VALIDATION_FAILURE(-1)
2026-04-30 12:22:28
PLAN/S0039_bugfix-vr-panel-swapchain-regression/PHASE_01__fix-panel-samplecount.md
spec-tech
Phase 01 done
2026-04-30 12:25:49
PLAN/S0039_bugfix-vr-panel-swapchain-regression.md
spec-check
Audit S0039 → Verified; PASS/WARN/FAIL 7/0/0; 2 manual on-device
2026-04-30 12:26:03
PLAN/S0039_bugfix-vr-panel-swapchain-regression.md
spec-all
Pipeline Verified: S0039
2026-04-30 12:26:48
PLAN/S0040_bugfix-vr-hud-button-affordance/INDEX.md
spec-tech
Create tactical plan for bugfix-vr-hud-button-affordance (S0040)
2026-04-30 12:26:48
PLAN/S0040_bugfix-vr-hud-button-affordance/PHASE_01__add-button-affordance.md
spec-tech
Phase 01: add-button-affordance
2026-04-30 12:26:48
PLAN/S0040_bugfix-vr-hud-button-affordance/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-04-30 12:26:48
PLAN/S0040_bugfix-vr-hud-button-affordance.md
spec-tech
S0040 strategic status → Tactical; link tactical plan
2026-04-30 12:28:32
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneComposer.kt
VrHudSceneComposer
S0040: add rounded-rect affordance to pause/play button; register HUD_ELEMENT_PLAY_PAUSE
2026-04-30 12:30:05
PLAN/S0040_bugfix-vr-hud-button-affordance.md
spec
S0040 status → Implemented
2026-04-30 12:33:52
PLAN/spec-all_bugfix-vr-hud-button-affordance_2026-04-30.md
spec-all
Full pipeline completed: bugfix-vr-hud-button-affordance -> Verified
2026-04-30 14:36:25
PLAN/S0028_vr-multi-window-playback.md
spec
Update S0028: integrate owner answers in §6 (all Resolved), fix §7/§9/§12 per decisions, add Priority field
2026-04-30 15:06:18
app_v2/src/vr/cpp/OpenXrCtx.h
OpenXrCtx
S0033 Phase 01 Step 01.1: add shared XR context header skeleton
2026-04-30 15:06:48
app_v2/src/vr/cpp/OpenXrLog.h
OpenXrLog
S0033 Phase 01 Step 01.2: add OpenXR logging header API
2026-04-30 15:09:32
app_v2/src/vr/cpp/OpenXrLog.h
OpenXrLog
S0033 Phase 01 Step 01.3: extend logging header with drain and diagnostic helper declarations
2026-04-30 15:09:33
app_v2/src/vr/cpp/OpenXrLog.cpp
OpenXrLog
S0033 Phase 01 Step 01.3: extract native logging buffer and diagnostic helpers
2026-04-30 15:09:33
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
S0033 Phase 01 Step 01.4: include extracted logging helpers and remove duplicate definitions
2026-04-30 15:10:36
app_v2/src/vr/cpp/CMakeLists.txt
openxr_native
S0033 Phase 01 Step 01.5: add OpenXrLog.cpp to native target and validate assembleVrDebug
2026-04-30 15:11:49
PLAN/S0040_bugfix-vr-hud-button-affordance/INDEX.md
spec-tech
S0040 tactical status -> Done; completion gate synced with executed phases
2026-04-30 15:11:56
PLAN/spec-catalog.jsonl
spec-catalog
S0040 status Draft -> Implemented
2026-04-30 15:12:42
PLAN/S0022_bugfix-camera-capture-crash.md
spec-restore
Restore strategic spec S0022 from temp/done for audit
2026-04-30 15:12:42
PLAN/S0022_bugfix-camera-capture-crash/INDEX.md
spec-restore
Restore tactical INDEX S0022 from temp/done for audit
2026-04-30 15:12:42
PLAN/S0022_bugfix-camera-capture-crash/phase-01-strings.md
spec-restore
Restore S0022 phase 01 from temp/done for audit
2026-04-30 15:12:42
PLAN/S0022_bugfix-camera-capture-crash/phase-02-visibility.md
spec-restore
Restore S0022 phase 02 from temp/done for audit
2026-04-30 15:12:42
PLAN/S0022_bugfix-camera-capture-crash/phase-03-exceptions.md
spec-restore
Restore S0022 phase 03 from temp/done for audit
2026-04-30 15:12:42
PLAN/S0022_bugfix-camera-capture-crash/phase-04-process-death.md
spec-restore
Restore S0022 phase 04 from temp/done for audit
2026-04-30 15:12:42
PLAN/S0022_bugfix-camera-capture-crash__audit_2026-04-30.md
spec-check
Audit S0022 -> Broken
2026-04-30 15:12:42
PLAN/S0022_bugfix-camera-capture-crash.md
spec-check
Advance status to Broken
2026-04-30 15:12:42
PLAN/spec-catalog.jsonl
spec-catalog
Update S0022 status to Broken after audit
2026-04-30 15:15:10
app_v2/src/vr/cpp/OpenXrCtx.h
xrnative
Moved shared XR structs and hand-tracking fallback typedefs into OpenXrCtx header for S0033 Phase 02 Step 02.1
2026-04-30 15:15:36
PLAN/S0022_bugfix-camera-capture-crash__fix_2026-04-30.md
spec-fix
Fix-up run for S0022
2026-04-30 15:15:36
PLAN/S0022_bugfix-camera-capture-crash__audit_2026-04-30.md
spec-fix
Annotate audit with FOLLOW-UP tags for S0022
2026-04-30 15:16:28
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Removed local XR shared-type block and anonymous namespace after moving shared structs into OpenXrCtx for S0033 Phase 02 Step 02.1
2026-04-30 15:17:08
app_v2/src/vr/cpp/OpenXrLifecycle.h
xrnative
Added lifecycle extraction header with explicit XrCtx-based function declarations for S0033 Phase 02 Step 02.2
2026-04-30 15:18:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt
BrowseCameraCaptureManager
S0022: surface dedicated camera_capture_error_io message for save IOException
2026-04-30 15:18:06
docs/FEATURES.md
FEATURES
S0022: document auto-hide camera command and localized in-app errors (EN)
2026-04-30 15:18:06
docs/FEATURES_RU.md
FEATURES
S0022: document auto-hide camera command and localized in-app errors (RU)
2026-04-30 15:18:06
docs/FEATURES_UK.md
FEATURES
S0022: document auto-hide camera command and localized in-app errors (UK)
2026-04-30 15:20:00
app_v2/src/vr/cpp/OpenXrLifecycle.cpp
xrnative
Moved lifecycle function bodies out of OpenXrNative into OpenXrLifecycle with explicit XrCtx parameter for S0033 Phase 02 Step 02.3
2026-04-30 15:20:36
PLAN/S0040_bugfix-vr-hud-button-affordance__audit_2026-04-30_2.md
spec-check
Audit S0040 -> Partial
2026-04-30 15:20:36
PLAN/S0040_bugfix-vr-hud-button-affordance.md
spec-check
Advance S0040 status to Partial; add audit pointer
2026-04-30 15:20:36
PLAN/spec-catalog.jsonl
spec-catalog
Update S0040 status to Partial after audit
2026-04-30 15:21:12
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Rewired JNI exports to OpenXrLifecycle and removed in-file lifecycle bodies for S0033 Phase 02 Step 02.3
2026-04-30 15:21:39
app_v2/src/vr/cpp/CMakeLists.txt
openxr_native
Added OpenXrLifecycle.cpp to the openxr_native source list for S0033 Phase 02 Step 02.4
2026-04-30 15:22:09
PLAN/S0022_bugfix-camera-capture-crash.md
S0022
Close research items #2/#4, note implementation-complete state, status -> Verified
2026-04-30 15:22:09
PLAN/S0022_bugfix-camera-capture-crash/INDEX.md
S0022
Set tactical index to BlockNeedUserTest and tick static completion items
2026-04-30 15:22:09
PLAN/S0022_bugfix-camera-capture-crash__audit_2026-04-30_2.md
spec-check
Audit S0022 -> Verified
2026-04-30 15:22:09
PLAN/spec-catalog.jsonl
spec-catalog
Update S0022 status to Verified after re-audit
2026-04-30 15:23:17
app_v2/src/vr/cpp/OpenXrSwapchain.h
xrnative
Added swapchain extraction header with canonical free-function declarations for S0033 Phase 03 Step 03.1
2026-04-30 15:23:58
dev/CATALOG/app_v2.jsonl
catalog
S0040: refresh app_v2 catalog after VrHudSceneComposer change
2026-04-30 15:23:58
dev/CATALOG/app_v2.md
catalog
S0040: render app_v2 catalog after VrHudSceneComposer change
2026-04-30 15:24:56
app_v2/src/vr/cpp/OpenXrSwapchain.cpp
xrnative
Moved swapchain lifecycle bodies out of OpenXrNative into OpenXrSwapchain for S0033 Phase 03 Step 03.2
2026-04-30 15:27:06
dev/CATALOG/scripts/scan.ps1
catalog
Include app_v2 src/vr/java in catalog scan roots
2026-04-30 15:27:06
dev/CATALOG/scripts/render.ps1
catalog
Resolve catalog source links across main and vr Kotlin roots
2026-04-30 15:27:06
dev/CATALOG/README.md
catalog
Document catalog support for app_v2 src/vr/java roots
2026-04-30 15:27:06
dev/CATALOG/app_v2.jsonl
catalog
S0040: rescan app_v2 catalog after vr-root support fix
2026-04-30 15:27:06
dev/CATALOG/app_v2.md
catalog
S0040: rerender app_v2 catalog after vr-root support fix
2026-04-30 15:27:46
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Collapsed swapchain bodies into wrappers and included OpenXrSwapchain declarations for S0033 Phase 03 Step 03.2
2026-04-30 15:28:11
PLAN/S0040_bugfix-vr-hud-button-affordance__audit_2026-04-30_3.md
spec-check
Audit S0040 -> Verified
2026-04-30 15:28:11
PLAN/S0040_bugfix-vr-hud-button-affordance.md
spec-check
Advance S0040 status to Verified
2026-04-30 15:28:11
PLAN/spec-catalog.jsonl
spec-catalog
Update S0040 status to Verified after re-audit
2026-04-30 15:33:08
app_v2/src/vr/cpp/CMakeLists.txt
openxr_native
Added OpenXrSwapchain.cpp to the openxr_native source list while progressing S0033 Phase 03
2026-04-30 15:33:44
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Removed stale kFormFactor and kSpaceType constants after swapchain extraction to restore vr build under -Werror
2026-04-30 15:35:03
PLAN/S0028_vr-multi-window-playback/INDEX.md
spec-tech
Create tactical plan for S0028
2026-04-30 15:35:03
PLAN/S0028_vr-multi-window-playback/PHASE_01__manifest-player-multi-instance.md
spec-tech
Phase 01: manifest-player-multi-instance
2026-04-30 15:35:03
PLAN/S0028_vr-multi-window-playback/PHASE_02__per-window-resume-state.md
spec-tech
Phase 02: per-window-resume-state
2026-04-30 15:35:04
PLAN/S0028_vr-multi-window-playback/PHASE_03__window-id-intent-plumbing.md
spec-tech
Phase 03: window-id-intent-plumbing
2026-04-30 15:35:04
PLAN/S0028_vr-multi-window-playback/PHASE_04__open-in-new-window-ui.md
spec-tech
Phase 04: open-in-new-window-ui
2026-04-30 15:35:04
PLAN/S0028_vr-multi-window-playback/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-04-30 15:35:04
PLAN/S0028_vr-multi-window-playback.md
spec-tech
Status -> Tactical
2026-04-30 15:40:24
PLAN/S0027_bugfix-vr-immersive-orientation-inverted.md
spec-check
Audit S0027 -> Partial; PASS/WARN/FAIL 7/4/1; restored deleted spec from commit 7d54d31^
2026-04-30 15:45:50
app_v2/src/vr/cpp/OpenXrFrame.h
xrnative
Added frame extraction header for S0033 Phase 03 Step 03.3
2026-04-30 15:45:50
app_v2/src/vr/cpp/OpenXrFrame.cpp
xrnative
Moved frame loop and render callback helpers out of OpenXrNative into OpenXrFrame for S0033 Phase 03 Step 03.3
2026-04-30 15:45:50
app_v2/src/vr/cpp/OpenXrLifecycle.cpp
xrnative
Switched lifecycle teardown to canonical swapchain free functions during S0033 Phase 03
2026-04-30 15:45:50
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Removed local frame loop helpers and rewired nativeRunFrame to OpenXrFrame for S0033 Phase 03
2026-04-30 15:45:50
app_v2/src/vr/cpp/CMakeLists.txt
openxr_native
Added OpenXrFrame.cpp to the native target for S0033 Phase 03 Step 03.5
2026-04-30 15:53:33
app_v2/src/vr/cpp/OpenXrInput.h
xrnative
Added controller input API header for S0033 Phase 04
2026-04-30 15:53:33
app_v2/src/vr/cpp/OpenXrInput.cpp
xrnative
Moved controller input and controller ray helpers out of OpenXrNative for S0033 Phase 04
2026-04-30 15:53:33
app_v2/src/vr/cpp/OpenXrHandTracking.h
xrnative
Added hand tracking API header for S0033 Phase 04
2026-04-30 15:53:33
app_v2/src/vr/cpp/OpenXrHandTracking.cpp
xrnative
Moved hand tracking subsystem out of OpenXrNative for S0033 Phase 04
2026-04-30 15:53:33
app_v2/src/vr/cpp/OpenXrFrame.cpp
xrnative
Rewired frame loop to extracted input and hand tracking APIs for S0033 Phase 04
2026-04-30 15:53:33
app_v2/src/vr/cpp/OpenXrSwapchain.cpp
xrnative
Rewired swapchain setup to extracted input and hand tracking APIs for S0033 Phase 04
2026-04-30 15:53:33
app_v2/src/vr/cpp/OpenXrLifecycle.cpp
xrnative
Rewired lifecycle teardown to extracted input and hand tracking APIs for S0033 Phase 04
2026-04-30 15:53:33
app_v2/src/vr/cpp/OpenXrNative.cpp
OpenXrNative
Removed controller input and hand tracking bodies from the native monolith for S0033 Phase 04
2026-04-30 15:53:33
app_v2/src/vr/cpp/CMakeLists.txt
openxr_native
Added OpenXrInput.cpp and OpenXrHandTracking.cpp to the native target for S0033 Phase 04
2026-04-30 15:54:01
PLAN/S0036_vr-android-xr-sdk-compat.md
spec-update
Resolve research items section 6 (Q1-Q4) and flip S0036 to Approved
2026-04-30 15:55:45
app_v2/src/main/res/values/dimens.xml
resource_icon_badge_size
S0037 P4: badge size 18dp -> 27dp (1.5x increase)
2026-04-30 15:56:21
app_v2/src/main/res/drawable/ico_02_001.xml
ico_02_001
S0037 P1: redesign as retro camcorder silhouette (evenOdd lens ring)
2026-04-30 15:56:22
app_v2/src/main/res/drawable/ic_resource_smb.xml
ic_resource_smb
S0037 P3: redesign as network folder (folder + 3 LAN nodes)
2026-04-30 15:57:09
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveResourceIconUseCase.kt
ResolveResourceIconUseCase
S0037 P2: use randomIdFor for SET_OTHER instead of fixed ico-05-001
2026-04-30 15:57:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
S0037 P2: initial icon for Other resources randomised
2026-04-30 15:57:37
PLAN/S0036_vr-android-xr-sdk-compat/INDEX.md
spec-tech
Create tactical plan for S0036 (3 phases)
2026-04-30 15:57:37
PLAN/S0036_vr-android-xr-sdk-compat/PHASE_01__manifest-xr-properties.md
spec-tech
Phase 01: vr manifest XR properties
2026-04-30 15:57:37
PLAN/S0036_vr-android-xr-sdk-compat/PHASE_02__activity-config-overlay.md
spec-tech
Phase 02: vr manifest activity configChanges overlay
2026-04-30 15:57:38
PLAN/S0036_vr-android-xr-sdk-compat/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs/catalog cleanup
2026-04-30 15:57:38
PLAN/S0036_vr-android-xr-sdk-compat.md
spec-tech
S0036 Status -> Tactical
2026-04-30 15:57:41
app_v2/src/main/res/drawable/bg_icon_button_dark.xml
bg_icon_button_dark
S0037 P5: new dark circular background for toolbar pick-icon button
2026-04-30 15:57:41
app_v2/src/main/res/layout/toolbar_icon_action.xml
btnPickIcon
S0037 P5: use dark bg + foreground ripple, remove tint
2026-04-30 16:00:32
PLAN/S0037_resource-icon-ux-polish.md
spec-check
Audit S0037 -> Verified; PASS/WARN/FAIL 13/0/0
2026-04-30 16:03:12
PLAN/S0002_decompose-giant-files.md
spec-update
Refinement (claude-opus-4-7, focus: language, structure, verifiability, consistency, completeness, style)
2026-04-30 16:05:18
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHandRayManager.kt
VrHandRayManager
S0007 Phase 02: cursor highlight on interactive hover
2026-04-30 16:06:39
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHandRayManager.kt
VrHandRayManager
S0007 Phase 03: hover-enter SFX via AudioManager
2026-04-30 16:06:43
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
S0007 Phase 03: pass audioManager to VrHandRayManager
2026-04-30 16:06:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
VrControllerInputManager
S0007 Phase 03: pinch-complete SFX on POINTER_CLICK_UP
2026-04-30 16:57:53
PLAN/S0007_vr-hand-tracking.md
spec-check
Audit S0007 -> Broken; PASS/WARN/FAIL 18/1/5
2026-04-30 17:02:33
PLAN/S0041_debug-vr180-fisheye-quality-regression.md
spec-all
Pipeline Partial: S0041 - build gate cleared (standard+vr debug), Phase 03 awaiting Quest 3 capture
2026-04-30 17:12:20
PLAN/test-android17.md
test-scenario
Android 17 test scenario for standard flavor - 12 cases (Profile A baseline + Profile B targetSdk=37) to close S0035 open items §6.1..§6.3
2026-04-30 17:12:30
PLAN/test-android.md
test-android
Add Android emulator test scenario for standard flavor (S0003/S0004/S0025/S0029/S0030 verification)
2026-04-30 18:26:47
app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt
fix: defer onResume work until setupViews() finishes
Add onResumeWithViews() hook in BaseActivity to eliminate UninitializedPropertyAccessException race when system fires onResume before deferred binding.root.post{ setupViews() } block runs. Migrated AddResourceActivity (which crashed in logs/current.log line 814), MainActivity, BrowseActivity, PlayerActivity, StandalonePlayerActivity to use the new hook; removed ad-hoc ::isInitialized guards.
2026-05-01 00:04:03
app_v2/src/main/res/drawable
ic_resource_*.xml + bg_icon_button_themed.xml
Resource type badges (LOCAL/SMB/FTP/SFTP/CLOUD/FAVORITES) repainted from Material 800 to Material 500 tones for equal visibility on light & dark themes; pick-icon toolbar button background switched from hardcoded #CC000000 to ?attr/colorSurface (renamed bg_icon_button_dark -> bg_icon_button_themed).
2026-05-01 00:19:50
PLAN/S0003_link-receive-download.md
spec-check
Audit S0003 -> Partial; PASS/WARN/FAIL 26/2/2 (missing progress dialog, catalog roles)
2026-05-01 00:47:26
.claude/commands/spec-test-device.md
spec-test-device
Add /spec-test-device skill: end-to-end on-device verification via mobile-mcp + logcat harvest
2026-05-01 01:05:59
PLAN/S0003_link-receive-download.md
spec-test-device
Device run on emulator-5554 (Android 8.1) standard-debug 2.60.5010.052: PASS 2 / FAIL 1 / SKIPPED 6 of 9 manual items. Master-OFF legacy .txt path verified; Master-ON path produced no user feedback nor file write despite URL detection. Scenario: temp/S0003_mobile_test_scenario_20260501_0051.md
2026-05-01 01:10:37
dev/CATALOG/app_v2.jsonl
spec-fix
S0003: catalogue refresh + role assignments per Phase 06.3 (coordinator/registry/contract/strategy/writer/policy/model/parser/di)
2026-05-01 01:10:37
dev/CATALOG/app_v2.md
spec-fix
S0003: render after role assignments
2026-05-01 01:10:37
PLAN/S0003_link-receive-download.md
spec-fix
Annotate Last Audit (S0003): #2 FIXED, #1/#3/#4 FOLLOW-UP
2026-05-01 01:21:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
spec-update
S0003: route Toast through applicationContext (Android 8.1 transparent-host fix) + add Timber traces around processLinkAutoDownload
2026-05-01 01:21:40
PLAN/S0003_link-receive-download/PHASE_01__settings-foundation.md
spec-update
S0003: correct Phase 01.4 pointer to BackupData.kt + BackupMapper.kt; flip header to Done
2026-05-01 01:21:40
PLAN/S0003_link-receive-download/PHASE_02__url-channel-branch.md
spec-update
S0003: flip Phase 02 header to Done (5/5)
2026-05-01 01:21:40
PLAN/S0003_link-receive-download/PHASE_03__direct-file-extractor.md
spec-update
S0003: flip Phase 03 header to Done (5/5)
2026-05-01 01:21:40
PLAN/S0003_link-receive-download/PHASE_04__html-page-extractor.md
spec-update
S0003: flip Phase 04 header to Done (4/4)
2026-05-01 01:21:40
PLAN/S0003_link-receive-download/PHASE_05__writer-progress-autoopen.md
spec-update
S0003: flip Phase 05 header to Done* (5/6, S05.3 carryover)
2026-05-01 01:21:40
PLAN/S0003_link-receive-download/PHASE_06__docs-catalog-cleanup.md
spec-update
S0003: fix set.ps1 invocation example (-Path / -Status tested); flip Phase 06 header to Done
2026-05-01 01:21:40
PLAN/S0003_link-receive-download/INDEX.md
spec-update
S0003: flip INDEX rows to Done; counter 5/6 with Phase 05 carryover note
2026-05-01 01:21:40
PLAN/S0003_link-receive-download.md
spec-update
S0003: flip M2/M7 manual items to verified; append Revision History entries for /spec-fix + /spec-update
2026-05-01 01:21:40
temp/S0003_mobile_test_scenario_20260501_0051.md
spec-update
S0003: append re-test section confirming Toast visibility on 2.60.5010.117-DEBUG
2026-05-01 01:33:27
app_v2/src/main/res/layout/activity_settings.xml
activity_settings.xml
Remove duplicate fitsSystemWindows from toolbarContainer (portrait) - IME bottom inset was applied as bottom padding, expanding the colorPrimary header by keyboard height and covering half the screen when editing fields in Media tab.
2026-05-01 01:37:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Always show resource list/grid toggle button (was hidden in portrait when <= 10 resources)
2026-05-01 01:42:16
app_v2/src/main/res/layout/activity_main.xml
activity_main.xml
Widen each top toolbar button by 4dp (paddingHorizontal=2dp on all 8 control buttons)
2026-05-01 01:59:59
PLAN/S0042_agp10-kapt-to-ksp-migration.md
spec
Add strategic spec S0042 for AGP 9/10 migration (kapt -> KSP, deprecation cleanup)
2026-05-01 02:42:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadProgressDialog.kt
LinkAutoDownloadProgressDialog
S0003 §05.3: dedicated cancellable progress dialog with LinearProgressIndicator + bytes line for the link auto-download channel
2026-05-01 02:42:43
app_v2/src/main/res/layout/dialog_link_autodownload_progress.xml
dialog_link_autodownload_progress.xml
S0003 §05.3: layout for LinkAutoDownloadProgressDialog (title + LinearProgressIndicator + bytes line + Cancel MaterialButton)
2026-05-01 02:42:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0003 §05.3: replace AlertDialog substitute with LinkAutoDownloadProgressDialog; honour user Cancel by cancelling the coordinator coroutine
2026-05-01 02:42:43
app_v2/src/main/res/values/strings.xml
strings.xml
S0003: add link_autodownload_progress_bytes format string for the dedicated progress dialog
2026-05-01 02:42:43
app_v2/src/main/res/values-ru/strings.xml
strings.xml
S0003: add link_autodownload_progress_bytes format string (RU)
2026-05-01 02:42:43
app_v2/src/main/res/values-uk/strings.xml
strings.xml
S0003: add link_autodownload_progress_bytes format string (UK)
2026-05-01 02:42:43
dev/CATALOG/app_v2.jsonl
catalog
S0003 §05.3: scan + role/status for LinkAutoDownloadProgressDialog (role=ui, status=tested)
2026-05-01 02:42:43
dev/CATALOG/app_v2.md
catalog
S0003: regenerate human-readable catalog
2026-05-01 02:48:52
docs/FEATURES_RU.md
VR Player section
S0007: hand tracking feature bullet (RU translation)
2026-05-01 02:48:52
docs/FEATURES_UK.md
VR Player section
S0007: hand tracking feature bullet (UK translation)
2026-05-01 02:48:52
dev/CATALOG/app_v2.jsonl
catalog regen
S0007 Phase 04: catalog rescan after VrHandRayManager changes
2026-05-01 02:48:52
PLAN/S0007_vr-hand-tracking/PHASE_03__hover-click-audio.md
S0007 Phase 03
S0007: build verification passed (assembleStandardDebug), phase Done
2026-05-01 02:48:52
PLAN/S0007_vr-hand-tracking/PHASE_04__docs-catalog-cleanup.md
S0007 Phase 04
S0007: docs+catalog+status cleanup, spec closed Implemented
2026-05-01 03:16:34
PLAN/S0043_bugfix-settings-window-bounds-xr.md
spec
Add strategic spec S0043 for ad-hoc bugfix-settings-window-bounds-xr
2026-05-01 03:27:51
PLAN/S0043_bugfix-settings-window-bounds-xr/INDEX.md
spec-tech
Create tactical plan for S0043
2026-05-01 03:27:57
PLAN/S0043_bugfix-settings-window-bounds-xr/PHASE_01__settings-launcher.md
spec-tech
Phase 01: settings-launcher
2026-05-01 03:28:03
PLAN/S0043_bugfix-settings-window-bounds-xr/PHASE_02__wire-callers.md
spec-tech
Phase 02: wire-callers
2026-05-01 03:28:10
PLAN/S0043_bugfix-settings-window-bounds-xr/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-01 03:28:16
PLAN/S0043_bugfix-settings-window-bounds-xr.md
spec-tech
Status -> Tactical
2026-05-01 03:35:54
app_v2/src/main/java/com/sza/fastmediasorter/core/util/SettingsIntentLauncher.kt
S0043 step 01.1
Create SettingsIntentLauncher object skeleton
2026-05-01 03:36:59
app_v2/src/main/java/com/sza/fastmediasorter/core/util/SettingsIntentLauncher.kt
S0043 step 01.2
Add computeCenteredLaunchBounds private helper
2026-05-01 03:37:58
app_v2/src/main/java/com/sza/fastmediasorter/core/util/SettingsIntentLauncher.kt
S0043 step 01.3
Add public launch(activity, intent, requestCode) overload
2026-05-01 03:38:29
PLAN/Other/test-vr.md
VR test session
Fixed log grep patterns (T01 VideoLayerGeometry tag; T05 VR_PERF instead of dead startXrInitialization), expanded T04 with 4 open S0027 manual items (§11.1/§11.2/§11.3/§11.6 incl. 5 cold-start consistency check), added T07 (S0006 FPS counter - 5 manual checks) and T08 (S0007 hand tracking - F7/F8/F10), updated report table and closing commands to cover all unclosed VR specs.
2026-05-01 03:45:30
app_v2/src/main/java/com/sza/fastmediasorter/core/util/PermissionHelper.kt
S0043 step 02.1
Route all Settings intents through SettingsIntentLauncher
2026-05-01 03:47:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
S0043 step 02.2
Replace Settings launchers with SettingsIntentLauncher + onActivityResult override
2026-05-01 03:49:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainStoragePermissionsHelper.kt
S0043 step 02.3
Drop settingsPermissionLauncher; route through SettingsIntentLauncher; add onSettingsResult
2026-05-01 03:49:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0043 step 02.3
Forward Manage Storage result to permissionsHelper.onSettingsResult
2026-05-01 03:50:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsPermissionsHelper.kt
S0043 step 02.4
Mark fire-and-forget Settings link with sweep comment
2026-05-01 03:51:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt
S0043 step 02.4
Mark fire-and-forget default-apps Settings links with sweep comment
2026-05-01 03:56:01
dev/CATALOG/app_v2.jsonl
S0043 step 03.1
Catalog regen + register SettingsIntentLauncher (role=util, status=new)
2026-05-01 03:56:07
dev/CATALOG/app_v2.md
S0043 step 03.1
Catalog render after S0043 changes
2026-05-01 03:56:36
docs/FEATURES.md
S0043
No change - internal Settings-window-bounds fix per strategic 8
2026-05-01 03:57:40
PLAN/S0043_bugfix-settings-window-bounds-xr.md
spec-dev
Status -> Implemented; awaiting XR device verification
2026-05-01 15:31:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Added Timber logs to media/battery/notifications permission launcher callbacks for permission-flow diagnostics
2026-05-01 16:17:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer.onScrollToFile
Fix camera-capture scroll race: read index from viewModel.state (not adapter.currentList lagging behind AsyncListDiffer) and post scrollToPosition to next frame so layout settles after submitList commits.
2026-05-01 18:48:04
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbPlaybackConnectionTracker.kt
SmbPlaybackConnectionTracker
Reduce SMB playback fail-fast watchdog window from 60s to 15s; add clearAllWatchdogs() for user-initiated retries
2026-05-01 18:48:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/
PlayerNavigation
Plumb manual=true through nextFile/previousFile/jumpToIndex from user-input callsites (gestures, keys, buttons, touch zones, mouse wheel, random); manual nav clears SMB playback watchdogs to bypass fail-fast lockout
2026-05-01 18:59:57
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
AtomicFileOperationStrategy
wrap temp-file cleanup in NonCancellable so cancellation no longer leaves orphan .temp_copy files on destination
2026-05-01 19:00:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
run performCopy/performMove on @ApplicationScope so file operations survive PlayerActivity destruction; gate UI callbacks with isActivityGone() and use applicationContext for Toasts
2026-05-01 19:00:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
inject @ApplicationScope CoroutineScope as fileOpsAppScope and pass it to FileOperationsHandler
2026-05-01 19:00:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
wire activity.fileOpsAppScope into FileOperationsHandler constructor
2026-05-01 19:46:05
app_v2/src/main/res/layout/custom_player_controls_large.xml,app_v2/src/main/res/values/dimens.xml,app_v2/src/main/res/values-sw600dp/dimens.xml,app_v2/src/main/res/values/themes.xml,app_v2/src/main/res/values-night/themes.xml,app_v2/src/main/res/values/attrs.xml,app_v2/src/main/res/layout/activity_player_unified.xml,app_v2/src/main/res/layout-land/activity_player_unified.xml,app_v2/src/main/res/values/strings.xml,app_v2/src/main/res/values-ru/strings.xml,app_v2/src/main/res/values-uk/strings.xml,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLayoutModePrefs.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt,app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
Player controls layout (compact vs large)
Add LargePlayerControls theme overlay + custom_player_controls_large.xml: when ‘Compact elements’ is OFF, the audio/video player progress bar gets thicker (6/8dp), the touch target grows to 48/56dp, the scrubber doubles in size, and the time text scales to 18/22sp. Toggling ‘Compact elements’ in Settings now prompts for an app restart (DefaultTimeBar reads bar/touch/scrubber sizes from XML at inflate only). PlayerLayoutModePrefs mirrors the flag in synchronous SharedPreferences so PlayerActivity/StandalonePlayerActivity can apply the theme overlay before super.onCreate; FastMediaSorterApp keeps the SP in sync with DataStore on startup.
2026-05-01 19:51:58
PLAN/S0044_settings-layout-compactness.md
spec
Add strategic spec S0044 for settings-layout-compactness
2026-05-01 22:33:23
PLAN/S0044_settings-layout-compactness.md
spec-all
Strategic spec auto-approved and refined for S0044
2026-05-01 22:35:37
PLAN/S0044_settings-layout-compactness/INDEX.md
spec-tech
Create tactical index for S0044
2026-05-01 22:35:37
PLAN/S0044_settings-layout-compactness/PHASE_01__landscape-settings-dimens.md
spec-tech
Phase 01 for S0044
2026-05-01 22:35:37
PLAN/S0044_settings-layout-compactness/PHASE_02__general-other-land-layouts.md
spec-tech
Phase 02 for S0044
2026-05-01 22:35:37
PLAN/S0044_settings-layout-compactness/PHASE_03__media-land-size-limit-rows.md
spec-tech
Phase 03 for S0044
2026-05-01 22:35:37
PLAN/S0044_settings-layout-compactness/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04 for S0044
2026-05-01 22:35:37
PLAN/S0044_settings-layout-compactness.md
spec-tech
Move S0044 strategic spec to Tactical
2026-05-01 22:36:33
app_v2/src/main/res/values-land/dimens.xml
settings dims
S0044 Phase 01 landscape settings overrides
2026-05-01 22:36:33
PLAN/S0044_settings-layout-compactness/PHASE_01__landscape-settings-dimens.md
spec-dev
S0044 Step 1.1 and 1.2 completed
2026-05-01 22:36:56
.github/prompts/spec-all.prompt.md
spec-all.prompt
Sync spec-all Copilot prompt with current Sxxxx-based orchestrator workflow
2026-05-01 22:39:50
app_v2/src/main/res/layout-land/fragment_settings_general.xml
settings layout
S0044 Phase 02 general landscape normalization
2026-05-01 22:39:51
app_v2/src/main/res/layout-land/fragment_settings_other.xml
settings layout
S0044 Phase 02 other landscape normalization
2026-05-01 22:39:51
PLAN/S0044_settings-layout-compactness/PHASE_02__general-other-land-layouts.md
spec-dev
S0044 Step 2.1 completed; Step 2.2 validated
2026-05-01 22:40:42
PLAN/S0044_settings-layout-compactness/PHASE_01__landscape-settings-dimens.md
spec-dev
S0044 Phase 01 completed after build gate
2026-05-01 22:40:42
PLAN/S0044_settings-layout-compactness/PHASE_02__general-other-land-layouts.md
spec-dev
S0044 Phase 02 completed after build gate
2026-05-01 22:40:42
PLAN/S0044_settings-layout-compactness/INDEX.md
spec-dev
S0044 index synced to 2 of 4 phases done
2026-05-01 22:41:17
PLAN/S0045_per-resource-sort-type-memory.md
spec
Add strategic spec S0045 for per-resource-sort-type-memory
2026-05-01 22:43:19
app_v2/src/main/res/layout-land/fragment_settings_audio.xml
settings layout
S0044 Phase 03 add landscape audio layout
2026-05-01 22:43:19
app_v2/src/main/res/layout-land/fragment_settings_video.xml
settings layout
S0044 Phase 03 add landscape video size row
2026-05-01 22:43:20
app_v2/src/main/res/layout-land/fragment_settings_images.xml
settings layout
S0044 Phase 03 add landscape image size row
2026-05-01 22:43:20
PLAN/S0044_settings-layout-compactness/PHASE_03__media-land-size-limit-rows.md
spec-dev
S0044 Steps 3.1-3.3 completed and validated
2026-05-01 22:49:46
PLAN/S0044_settings-layout-compactness/PHASE_03__media-land-size-limit-rows.md
spec-dev
S0044 Phase 03 completed after build gate
2026-05-01 22:49:46
PLAN/S0044_settings-layout-compactness/PHASE_04__docs-catalog-cleanup.md
spec-dev
S0044 Step 4.1 completed
2026-05-01 22:49:46
PLAN/S0044_settings-layout-compactness/INDEX.md
spec-dev
S0044 index synced to 3 of 4 phases done
2026-05-01 22:50:51
PLAN/S0044_settings-layout-compactness.md
spec-all
Pipeline Verified: S0044
2026-05-01 22:50:51
PLAN/S0044_settings-layout-compactness/PHASE_04__docs-catalog-cleanup.md
spec-dev
S0044 Phase 04 completed
2026-05-01 22:50:51
PLAN/S0044_settings-layout-compactness/INDEX.md
spec-dev
S0044 index synced to 4 of 4 phases done
2026-05-01 23:44:00
.github/prompts/spec.prompt.md
spec.prompt
Sync /spec prompt with current Sxxxx strategic spec workflow
2026-05-01 23:46:25
.github/prompts/spec-tech.prompt.md
spec-tech.prompt
Sync /spec-tech prompt with current Sxxxx tactical workflow
2026-05-01 23:46:26
.github/prompts/spec-dev.prompt.md
spec-dev.prompt
Sync /spec-dev prompt with current Sxxxx execution workflow
2026-05-01 23:46:26
.github/prompts/spec-check.prompt.md
spec-check.prompt
Sync /spec-check prompt with inline Last Audit workflow
2026-05-01 23:47:43
.github/prompts/spec-fix.prompt.md
spec-fix.prompt
Sync /spec-fix prompt with inline Last Audit fix workflow
2026-05-01 23:47:43
.github/prompts/spec-update.prompt.md
spec-update.prompt
Sync /spec-update prompt with current Sxxxx refinement workflow
2026-05-01 23:48:16
.github/copilot-instructions.md
copilot-instructions
Update spec prompt routing descriptions to Sxxxx and inline Last Audit workflow
2026-05-02 00:11:45
.github/prompts/build.prompt.md
build.prompt
Sync /build prompt with current .claude build guide
2026-05-02 00:13:03
PLAN/S0045_per-resource-sort-type-memory/INDEX.md
spec-tech
Create tactical plan for S0045
2026-05-02 00:13:03
PLAN/S0045_per-resource-sort-type-memory/PHASE_01__player-cold-start-sort.md
spec-tech
Phase 01: player-cold-start-sort
2026-05-02 00:13:04
PLAN/S0045_per-resource-sort-type-memory/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-02 00:13:04
PLAN/S0045_per-resource-sort-type-memory.md
spec-tech
Status → Tactical
2026-05-02 00:14:01
.github/prompts/doc-update.prompt.md
doc-update.prompt
Sync /doc-update prompt with current .claude documentation workflow
2026-05-02 00:14:01
.github/prompts/git.prompt.md
git.prompt
Sync /git prompt with current .claude git guide
2026-05-02 00:14:01
.github/prompts/log-reader.prompt.md
log-reader.prompt
Sync /log-reader prompt with current .claude log analysis guide
2026-05-02 00:16:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt
S0045
Phase 01: pass resource.sortMode to GetMediaFilesUseCase slow path
2026-05-02 00:16:22
docs/FEATURES.md
S0045
Add sort-memory bullet (EN)
2026-05-02 00:16:22
docs/FEATURES_RU.md
S0045
Add sort-memory bullet (RU)
2026-05-02 00:16:23
docs/FEATURES_UK.md
S0045
Add sort-memory bullet (UK)
2026-05-02 00:16:23
dev/CATALOG/app_v2.jsonl
S0045
Catalog regen after Phase 01 changes
2026-05-02 00:17:21
PLAN/S0045_per-resource-sort-type-memory.md
spec-check
Audit S0045 → Verified; PASS/WARN/FAIL 9/0/0
2026-05-02 00:31:39
PLAN/S0045_per-resource-sort-type-memory.md
spec-update
Resolve §6 open questions per owner answers; revise ADR-2 (SortMode enum encodes type+direction+MANUAL)
2026-05-02 00:31:39
PLAN/S0045_per-resource-sort-type-memory/INDEX.md
spec-all
Mark phases 01+02 done; align tactical state with completed implementation
2026-05-02 00:37:20
docs/FEATURES.md
FEATURES.md
Trim self-evident UI sugar from feature list (resource edit/delete, list/grid toggles, basic navigation, pinch-zoom, full-screen, notification controls, etc.) - keep only distinctive functionality.
2026-05-02 00:44:27
docs/FEATURES_RU.md;docs/FEATURES_UK.md
FEATURES mirrors
Sync RU/UK mirrors with EN sugar trim: drop pagination + detailed progress bullets, bump date stamp.
2026-05-02 01:11:08
PLAN/S0046_sftp-key-auth-hardening.md
spec
Add strategic spec S0046 for ad-hoc SFTP key-auth hardening (XML schema + host fingerprint pinning)
2026-05-02 01:11:12
app_v2/src/main/res/xml/sza_resources.xml
config
Rename 192.168.1.110 SFTP entries to local_; add three Home_ SFTP resources for 46.54.0.135
2026-05-02 01:25:20
PLAN/S0046_sftp-key-auth-hardening.md
spec
S0046: resolve open questions 6.1-6.4 with Best Practice answers, status Draft -> Approved
2026-05-02 01:32:03
PLAN/S0046_sftp-key-auth-hardening/INDEX.md
spec-tech
Create tactical plan for S0046
2026-05-02 01:32:03
PLAN/S0046_sftp-key-auth-hardening/PHASE_01__data-model-and-db.md
spec-tech
Phase 01: data-model-and-db
2026-05-02 01:32:04
PLAN/S0046_sftp-key-auth-hardening/PHASE_02__fingerprint-verifier-core.md
spec-tech
Phase 02: fingerprint-verifier-core
2026-05-02 01:32:04
PLAN/S0046_sftp-key-auth-hardening/PHASE_03__sftp-pin-wiring.md
spec-tech
Phase 03: sftp-pin-wiring
2026-05-02 01:32:04
PLAN/S0046_sftp-key-auth-hardening/PHASE_04__xml-schema-and-bundle.md
spec-tech
Phase 04: xml-schema-and-bundle
2026-05-02 01:32:04
PLAN/S0046_sftp-key-auth-hardening/PHASE_05__resource-form-fingerprint-ui.md
spec-tech
Phase 05: resource-form-fingerprint-ui
2026-05-02 01:32:05
PLAN/S0046_sftp-key-auth-hardening/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-05-02 01:32:05
PLAN/S0046_sftp-key-auth-hardening.md
spec-tech
Status -> Tactical
2026-05-02 01:34:08
app_v2/src/main/res/layout-land/fragment_settings_audio.xml
fragment_settings_audio (land)
S0044: replace button_height + settings_margin_standard on toggle rows with settings_item_min_height + settings_item_margin_bottom for landscape compactness
2026-05-02 01:34:11
app_v2/src/main/res/layout-land/fragment_settings_video.xml
fragment_settings_video (land)
S0044: switch toggle rows to settings_item_min_height + settings_item_margin_bottom so landscape compactness dimens actually apply
2026-05-02 01:34:14
app_v2/src/main/res/layout-land/fragment_settings_images.xml
fragment_settings_images (land)
S0044: switch toggle rows to settings_item_min_height + settings_item_margin_bottom so landscape compactness dimens actually apply
2026-05-02 01:35:06
PLAN/S0044_settings-layout-compactness.md
S0044
Revision history: media land layouts now actually consume Phase 01 compact dimens after runtime regression
2026-05-02 01:35:10
PLAN/S0044_settings-layout-compactness/INDEX.md
S0044 INDEX
Tactical index: Phase 04 closed, completion gate ticked
2026-05-02 01:35:10
PLAN/S0044_settings-layout-compactness/PHASE_04__docs-catalog-cleanup.md
S0044 Phase 04
Phase marked Done, step log records Phase-03 land compact-dimen regression fix
2026-05-02 01:40:40
app_v2/src/main/res/layout-land/fragment_settings_audio.xml
fragment_settings_audio (land)
S0044: drop weight=1 from toggle-row inner text container so the help-? icon snaps right next to the text instead of the row’s far right edge
2026-05-02 01:40:40
app_v2/src/main/res/layout-land/fragment_settings_video.xml
fragment_settings_video (land)
S0044: drop weight=1 from toggle-row inner text container so the help-? icon snaps right next to the text instead of the row’s far right edge
2026-05-02 01:40:40
app_v2/src/main/res/layout-land/fragment_settings_images.xml
fragment_settings_images (land)
S0044: drop weight=1 from toggle-row inner text container so the help-? icon snaps right next to the text instead of the row’s far right edge
2026-05-02 01:43:32
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general (portrait)
S0044: portrait toggle compactness - drop weight=1 from inner text container (snaps help-? next to text) and switch minHeight from button_height (48dp) to settings_item_min_height (36dp portrait); user-requested extension of S0044 scope to portrait orientation
2026-05-02 01:43:32
app_v2/src/main/res/layout/fragment_settings_other.xml
fragment_settings_other (portrait)
S0044: portrait toggle compactness - drop weight=1 from inner text container (snaps help-? next to text) and switch minHeight from button_height (48dp) to settings_item_min_height (36dp portrait); user-requested extension of S0044 scope to portrait orientation
2026-05-02 01:43:32
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio (portrait)
S0044: portrait toggle compactness - drop weight=1 from inner text container (snaps help-? next to text) and switch minHeight from button_height (48dp) to settings_item_min_height (36dp portrait); user-requested extension of S0044 scope to portrait orientation
2026-05-02 01:43:32
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video (portrait)
S0044: portrait toggle compactness - drop weight=1 from inner text container (snaps help-? next to text) and switch minHeight from button_height (48dp) to settings_item_min_height (36dp portrait); user-requested extension of S0044 scope to portrait orientation
2026-05-02 01:43:32
app_v2/src/main/res/layout/fragment_settings_images.xml
fragment_settings_images (portrait)
S0044: portrait toggle compactness - drop weight=1 from inner text container (snaps help-? next to text) and switch minHeight from button_height (48dp) to settings_item_min_height (36dp portrait); user-requested extension of S0044 scope to portrait orientation
2026-05-02 01:43:32
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback (portrait)
S0044: portrait toggle compactness - drop weight=1 from inner text container (snaps help-? next to text) and switch minHeight from button_height (48dp) to settings_item_min_height (36dp portrait); user-requested extension of S0044 scope to portrait orientation
2026-05-02 01:43:48
PLAN/S0044_settings-layout-compactness.md
S0044
Revision history: portrait scope extension recorded (toggle compaction + helper-? alignment in 6 portrait fragments)
2026-05-02 01:52:58
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 01:52:58
app_v2/src/main/res/layout-land/fragment_settings_other.xml
fragment_settings_other
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 01:52:58
app_v2/src/main/res/layout-land/fragment_settings_video.xml
fragment_settings_video
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 01:52:58
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 01:52:58
app_v2/src/main/res/layout/fragment_settings_destinations.xml
fragment_settings_destinations
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 01:52:58
app_v2/src/main/res/layout/fragment_settings_documents.xml
fragment_settings_documents
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 01:52:58
app_v2/src/main/res/layout/fragment_settings_other.xml
fragment_settings_other
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 01:52:58
app_v2/src/main/res/layout/fragment_settings_playback.xml
fragment_settings_playback
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 01:52:58
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
S0044: comprehensive helper alignment sweep - pulled toggle-row inner text containers to wrap_content (drops weight=1) and label-only section headers (snapshot resource, VR title) so all help-? icons snap directly next to their object instead of the row’s far right edge; covers both single-line and multiline XML formats across all settings fragments
2026-05-02 02:26:00
app_v2/src/main/res/xml/sza_resources.xml
config
Switch local_* SFTP resources from sza to media-svc (low-priv account, NTFS RX on J:\MEDIA)
2026-05-02 02:33:37
app_v2/src/main/res/values/dimens.xml
audio player
Lift audio info overlay margin from 116dp to 140dp so its drop shadow no longer overlaps exo position/duration text after the wider progress bar
2026-05-02 02:45:59
PLAN/S0047_bugfix-sftp-pool-broken-channel.md
spec
Add strategic spec S0047 for SFTP channel pool broken-channel recovery (Tier 1, Priority 90)
2026-05-02 02:49:53
PLAN/S0047_bugfix-sftp-pool-broken-channel/INDEX.md
spec-tech
Create tactical plan for S0047 (3 phases)
2026-05-02 02:49:53
PLAN/S0047_bugfix-sftp-pool-broken-channel/PHASE_01__pool-eviction-api.md
spec-tech
S0047 Phase 01: pool-eviction-api
2026-05-02 02:49:53
PLAN/S0047_bugfix-sftp-pool-broken-channel/PHASE_02__datasource-health-tracking.md
spec-tech
S0047 Phase 02: datasource-health-tracking
2026-05-02 02:49:53
PLAN/S0047_bugfix-sftp-pool-broken-channel/PHASE_03__docs-catalog-cleanup.md
spec-tech
S0047 Phase 03: docs-catalog-cleanup
2026-05-02 02:49:53
PLAN/S0047_bugfix-sftp-pool-broken-channel.md
spec-tech
S0047 Status -> Tactical
2026-05-02 03:02:56
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
pool
S0047 step 01.1: add evictExoPlayerChannel private method
2026-05-02 03:03:35
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
pool
S0047 step 01.2: extend releaseExoPlayerConnection signature with channel + broken
2026-05-02 03:03:57
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
client
S0047 step 01.3: forward releaseExoPlayerConnection(channel, broken) to pool
2026-05-02 03:05:59
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
datasource
S0047 step 02.1: add channelBroken state
2026-05-02 03:06:49
PLAN/S0048_info-dialog-extended-metadata.md
spec
Add strategic spec S0048 for info-dialog-extended-metadata
2026-05-02 03:06:50
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
datasource
S0047 step 02.2: mark channelBroken in read() and InputStream-close catches
2026-05-02 03:06:50
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
datasource
S0047 step 02.3: mark channelBroken in open() post-acquisition catch
2026-05-02 03:07:39
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
datasource
S0047 step 02.4: pass (channel, channelBroken) to releaseExoPlayerConnection
2026-05-02 03:09:30
dev/CATALOG/app_v2.jsonl
catalog
S0047 step 03.2: catalog rescan after SFTP pool/datasource API change
2026-05-02 03:09:30
dev/CATALOG/app_v2.md
catalog
S0047 step 03.2: catalog re-render
2026-05-02 03:09:59
PLAN/S0047_bugfix-sftp-pool-broken-channel.md
spec-dev
S0047 Status -> Implemented (journal -> BlockNeedUserTest pending hands-on reproduction)
2026-05-02 03:26:16
PLAN/S0048_info-dialog-extended-metadata.md
spec-update
Refinement (claude-opus-4-7, focus: completeness, consistency)
2026-05-02 03:27:48
PLAN/S0048_info-dialog-extended-metadata.md
spec-update
Accept P-1: rewrite ADR-1 to extend existing pipeline
2026-05-02 03:29:42
PLAN/S0048_info-dialog-extended-metadata.md
spec-update
Status -> Approved (user approval)
2026-05-02 03:37:19
PLAN/S0048_info-dialog-extended-metadata/INDEX.md
spec-tech
Create tactical plan for S0048
2026-05-02 03:37:19
PLAN/S0048_info-dialog-extended-metadata/PHASE_01__split-fileinfo-launch.md
spec-tech
Phase 01: split-fileinfo-launch
2026-05-02 03:37:19
PLAN/S0048_info-dialog-extended-metadata/PHASE_02__extend-audio-extractor.md
spec-tech
Phase 02: extend-audio-extractor
2026-05-02 03:37:19
PLAN/S0048_info-dialog-extended-metadata/PHASE_03__info-dialog-audio-route.md
spec-tech
Phase 03: info-dialog-audio-route
2026-05-02 03:37:19
PLAN/S0048_info-dialog-extended-metadata/PHASE_04__file-info-block.md
spec-tech
Phase 04: file-info-block
2026-05-02 03:37:19
PLAN/S0048_info-dialog-extended-metadata/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-02 03:37:19
PLAN/S0048_info-dialog-extended-metadata.md
spec-tech
Status -> Tactical
2026-05-02 04:02:28
temp/FileInfoDialog.kt.20260502-040215.bak
spec-dev
S0048 step 01.1: backup FileInfoDialog.kt before extraction
2026-05-02 04:03:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoLaunchManager.kt
spec-dev
S0048 step 01.2: extract launch logic from FileInfoDialog into FileInfoLaunchManager
2026-05-02 04:03:58
PLAN/S0049_bugfix-icon-pick-save-disabled.md
spec-all
Compact spec: S0049
2026-05-02 04:05:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceFormViewModel.kt
ResourceFormViewModel
S0049: onIconPicked now triggers recalculateState so icon change enables Save button
2026-05-02 04:05:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileInfoDialog.kt
spec-dev
S0048 step 01.3: delegate launch logic to FileInfoLaunchManager (946 -> 709 LOC)
2026-05-02 04:06:02
PLAN/S0049_bugfix-icon-pick-save-disabled.md
spec-all
Pipeline Verified: S0049
2026-05-02 04:16:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoLaunchManager.kt
FileInfoLaunchManager
Phase 01 step 01.4: build confirmed OK
2026-05-02 04:25:31
PLAN/S0050_player-black-screen-mode.md
Spec
Создана спецификация для режима чёрного экрана
2026-05-02 04:31:25
app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt
AudioMetadataLoader
S0048 Phase 02: extend AudioMetadata with technical fields, format extraction, FLAC STREAMINFO bit-depth parser, ReplayGain, cover art (PictureFrame/ApicFrame), inject AudioMetadataCacheRepository
2026-05-02 04:31:25
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AudioMetadataCacheRepository.kt
AudioMetadataCacheRepository
S0048 Phase 02: add readCoverFile(coverFileName, coverExtension): File?
2026-05-02 04:33:33
PLAN/S0041_debug-vr180-fisheye-quality-regression.md
spec-update
Refinement (claude-sonnet-4-6, focus: verifiability+consistency): §3.2 first-frame guard уточнение, §6 S0033 → In Progress
2026-05-02 04:33:33
PLAN/S0038_bugfix-vr-exit-immersive-new-window.md
spec-update
Refinement (claude-sonnet-4-6, focus: completeness+verifiability): §1 регрессия 2026-05-02 routing-via-home-intent; P-1 DISCUSS - пересмотр §2/§4/§5
2026-05-02 04:33:34
PLAN/S0024_vr-hud-ray-input.md
spec-update
Refinement (claude-sonnet-4-6, focus: consistency+completeness): §10 S0033 → In Progress, §13 field-log 2026-05-02 - visual ray indicator отсутствует, math-pass работает при locked HUD
2026-05-02 04:43:11
app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt
AudioMetadataLoader
S0048 Phase 03 Step 03.1: Add suspend fun loadDetailed for synchronous extended metadata load
2026-05-02 04:45:08
app_v2/src/main/res/layout/dialog_file_info.xml
dialog_file_info
S0048 Phase 03 Step 03.2: Add ivAudioCoverArt, tvAudioBitDepth/Lossless/ReplayGainTrack/Album to sectionAudio
2026-05-02 04:45:08
app_v2/src/main/res/layout-land/dialog_file_info.xml
dialog_file_info (land)
S0048 Phase 03 Step 03.2: Add ivAudioCoverArt, tvAudioBitDepth/Lossless/ReplayGainTrack/Album to sectionAudio
2026-05-02 04:45:08
app_v2/src/main/res/values/dimens.xml
dimens
S0048 Phase 03 Step 03.2: Add file_info_cover_art_size = 120dp
2026-05-02 04:46:15
PLAN/S0008_vr-immersive-controls-panel.md
spec-check
Audit S0008 -> Broken; PASS/WARN/FAIL 1/2/5. Top: VR_UI_COMPOSITION_LAYER_ENABLED=false блокирует весь HUD; visual ray indicator отсутствует
2026-05-02 04:46:16
PLAN/S0050_player-black-screen-mode.md
spec
Add strategic spec S0050 for player-black-screen-mode
2026-05-02 04:46:29
app_v2/src/main/res/values/strings.xml
strings
S0048 Phase 03 Step 03.3: Add audio_bit_depth_label, audio_lossless_label/values, audio_replaygain_track/album_label, audio_cover_art_cd (EN)
2026-05-02 04:46:29
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0048 Phase 03 Step 03.3: Add audio_bit_depth_label, audio_lossless_label/values, audio_replaygain_track/album_label, audio_cover_art_cd (RU)
2026-05-02 04:46:29
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0048 Phase 03 Step 03.3: Add audio_bit_depth_label, audio_lossless_label/values, audio_replaygain_track/album_label, audio_cover_art_cd (UK)
2026-05-02 04:47:25
PLAN/S0050_player-black-screen-mode.md
spec
Add strategic spec S0050 for player-black-screen-mode
2026-05-02 04:49:00
PLAN/S0009_vr-immersive-hud-gl.md
spec-check
Audit S0009 -> Partial; PASS/WARN/FAIL 5/2/0. Static OK; on-device verification §11.1/§11.2/§11.4/§11.6 pending
2026-05-02 04:50:22
PLAN/S0019_vr-controls-panel-flow-restoration.md
spec-check
Audit S0019 -> Broken; PASS/WARN/FAIL 1/2/4. Top: HUD-overlay блокирован S0008/S0024; exit-to-panel клонирует окно (S0038); apply-and-3D OK
2026-05-02 04:50:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoAudioDisplayHelper.kt
FileInfoAudioDisplayHelper
S0048 Phase 03 Step 03.4: Create helper to display extended audio metadata and cover art in info dialog
2026-05-02 04:54:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileInfoDialog.kt
FileInfoDialog
S0048 Phase 03 Step 03.5: Wire FileInfoAudioDisplayHelper - add constructor params, init helper, branch async block for AUDIO
2026-05-02 04:54:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
S0048 Phase 03 Step 03.5: Update FileInfoDialog call site to pass audioMetadataLoader/audioMetadataCacheRepository = null
2026-05-02 05:00:20
PLAN/S0050_player-black-screen-mode.md
spec-update
Refinement (claude-sonnet-4-6, focus: all)
2026-05-02 05:00:43
PLAN/S0008_vr-immersive-controls-panel/
spec-restore
Restored tactical folder (INDEX + 6 phases) from temp/done; updated INDEX with 2026-05-02 field-log + Broken status + blockers (VR_UI_COMPOSITION_LAYER_ENABLED + cursor dot)
2026-05-02 05:00:44
PLAN/S0009_vr-immersive-hud-gl/
spec-restore
Restored tactical folder (INDEX + 7 phases) from temp/done; INDEX updated with 2026-05-02 field-log confirming passive HUD pipeline live, on-device acceptance pending
2026-05-02 05:00:44
PLAN/S0019_vr-controls-panel-flow-restoration/
spec-restore
Restored tactical folder (INDEX + 6 phases) from temp/done; INDEX updated with 2026-05-02 field-log mapping each §11 criterion to current verdict + dependency chain (S0008 / S0038 / S0033)
2026-05-02 05:00:44
PLAN/Other/test-vr.md
test-vr
Updated VR test scenario for 2026-05-02: added T09 (S0008), T10 (S0009), T11 (S0019), T12 (S0024); fixed T01 fisheye-guard note; added T03 home-intent regression note; refreshed coverage table with current statuses
2026-05-02 05:00:52
dev/CATALOG/app_v2.jsonl
catalog
S0048 Phase 03: Regenerate catalog after AudioMetadataLoader.loadDetailed, FileInfoAudioDisplayHelper, FileInfoDialog constructor API changes
2026-05-02 05:05:23
PLAN/S0050_player-black-screen-mode/INDEX.md
spec-tech
Create tactical plan for S0050
2026-05-02 05:05:23
PLAN/S0050_player-black-screen-mode/PHASE_01__settings-foundation.md
spec-tech
Phase 01: settings-foundation
2026-05-02 05:05:23
PLAN/S0050_player-black-screen-mode/PHASE_02__command-panel-button.md
spec-tech
Phase 02: command-panel-button
2026-05-02 05:05:24
PLAN/S0050_player-black-screen-mode/PHASE_03__black-screen-overlay.md
spec-tech
Phase 03: black-screen-overlay
2026-05-02 05:05:24
PLAN/S0050_player-black-screen-mode/PHASE_04__keybinding-registration.md
spec-tech
Phase 04: keybinding-registration
2026-05-02 05:05:24
PLAN/S0050_player-black-screen-mode/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-02 05:05:24
PLAN/S0050_player-black-screen-mode.md
spec-tech
Status → Tactical
2026-05-02 05:05:27
app_v2/src/main/java/com/sza/fastmediasorter/core/util/MediaFilePathDescriptor.kt
MediaFilePathDescriptor
Add path decomposition utility for network/local paths (S0048 phase 04 step 1)
2026-05-02 05:06:19
app_v2/src/main/java/com/sza/fastmediasorter/core/util/MimeTypeResolver.kt
MimeTypeResolver
Add MIME resolver with MimeTypeMap + byte signature sniffing (S0048 phase 04 step 2)
2026-05-02 05:07:38
app_v2/src/main/res/layout/dialog_file_info.xml
dialog_file_info
Add structured file-info fields and copy-path button (S0048 phase 04 step 3)
2026-05-02 05:07:38
app_v2/src/main/res/layout-land/dialog_file_info.xml
dialog_file_info (land)
Add structured file-info fields and copy-path button (S0048 phase 04 step 3)
2026-05-02 05:08:59
app_v2/src/main/res/values/strings.xml
strings
Add file-info structured labels and copy-path strings (S0048 phase 04 step 4)
2026-05-02 05:08:59
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add file-info structured labels and copy-path strings RU (S0048 phase 04 step 4)
2026-05-02 05:09:00
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add file-info structured labels and copy-path strings UK (S0048 phase 04 step 4)
2026-05-02 05:11:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoFileSectionHelper.kt
FileInfoFileSectionHelper
Add structured file-info section renderer with path decomposition and copy-path (S0048 phase 04 step 5)
2026-05-02 05:12:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileInfoDialog.kt
FileInfoDialog
Wire FileInfoFileSectionHelper; remove buildPathInfoText (S0048 phase 04 step 6)
2026-05-02 05:12:59
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
MediaFile/FileAttributes
Add FileAttributes and attributes field to MediaFile (S0048 phase 04 step 6)
2026-05-02 05:17:10
docs/FEATURES.md
FEATURES
Add extended file-info dialog bullet (S0048 phase 05 step 1)
2026-05-02 05:18:10
docs/FEATURES_RU.md
FEATURES_RU
Add extended file-info dialog bullet RU (S0048 phase 05 step 2)
2026-05-02 05:18:11
docs/FEATURES_UK.md
FEATURES_UK
Add extended file-info dialog bullet UK (S0048 phase 05 step 2)
2026-05-02 05:18:56
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Regenerate catalog; set role/status for MediaFilePathDescriptor, MimeTypeResolver, FileInfoFileSectionHelper, FileInfoAudioDisplayHelper (S0048 phase 05 step 3)
2026-05-02 05:18:57
dev/CATALOG/app_v2.md
app_v2 catalog (md)
Regenerate catalog markdown (S0048 phase 05 step 3)
2026-05-02 05:20:09
PLAN/S0048_info-dialog-extended-metadata.md
S0048
Status -> Implemented (S0048 all 5 phases done)
2026-05-02 05:20:09
PLAN/S0048_info-dialog-extended-metadata/INDEX.md
S0048/INDEX
All 5 phases complete (S0048)
2026-05-02 05:31:43
PLAN/S0048_info-dialog-extended-metadata.md
spec-check
Audit S0048 -> Verified; PASS 40/WARN 1 (fixed inline)/FAIL 0; Status Implemented -> Verified
2026-05-02 05:31:44
PLAN/S0048_info-dialog-extended-metadata/INDEX.md
spec-check
Fix INDEX Status: Not started -> Done (stale metadata)
2026-05-02 06:04:16
app_v2/src/main/res/layout/fragment_settings_general.xml, app_v2/src/main/res/layout/fragment_settings_destinations.xml, app_v2/src/main/res/layout-land/fragment_settings_general.xml
Settings UI
Remove inconsistent marginTop/marginBottom between section cards in Settings General and Operations tabs (portrait and landscape) - all groups now flush, equal collapsed height
2026-05-02 06:14:46
scripts/utils/search-log.ps1
search-log.ps1
Fix crash in Summary mode for JSON-format .logcat files from emulators: handle missing physicalDevice property (emulators use emulatorDevice), add emulator device info display
2026-05-02 06:19:38
PLAN/S0051_bugfix-network-datasource-pause-cancel.md
spec
Add strategic spec S0051: network DataSource not cancelled on player pause
2026-05-02 06:19:38
PLAN/S0052_bugfix-sftp-datasource-log-spam.md
spec
Add strategic spec S0052: SFTP DataSource per-byte read log spam
2026-05-02 06:19:38
PLAN/S0053_bugfix-m2ts-bdmv-network-playback.md
spec
Add strategic spec S0053: m2ts BDMV playback failure on network sources
2026-05-02 12:54:25
PLAN/S0052_bugfix-sftp-datasource-log-spam/INDEX.md
spec-all
Tactical spec: S0052 - Phase audit done, phases 2-4 planned
2026-05-02 12:56:51
PLAN/S0053_bugfix-m2ts-bdmv-network-playback/INDEX.md
spec-tech
Create tactical plan for S0053
2026-05-02 12:56:51
PLAN/S0053_bugfix-m2ts-bdmv-network-playback/PHASE_01__informative-error.md
spec-tech
Phase 01: informative-error
2026-05-02 12:56:51
PLAN/S0053_bugfix-m2ts-bdmv-network-playback/PHASE_02__bd-ts-strip-datasource.md
spec-tech
Phase 02: bd-ts-strip-datasource
2026-05-02 12:56:51
PLAN/S0053_bugfix-m2ts-bdmv-network-playback/PHASE_03__wire-bd-ts-playback.md
spec-tech
Phase 03: wire-bd-ts-playback
2026-05-02 12:56:51
PLAN/S0053_bugfix-m2ts-bdmv-network-playback/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-02 12:56:51
PLAN/S0053_bugfix-m2ts-bdmv-network-playback.md
spec-tech
Status: Draft -> Approved -> Tactical
2026-05-02 12:58:46
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
SftpDataSource
S0052: replace per-read DEBUG spam with counter-based Timber.v(); add close() summary
2026-05-02 12:58:47
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/FtpDataSource.kt
FtpDataSource
S0052: replace per-read DEBUG spam with counter-based Timber.v(); add close() summary
2026-05-02 12:58:55
app_v2/src/main/res/values/strings.xml
S0053
Add error_bdts_format_title/message (EN)
2026-05-02 12:58:55
app_v2/src/main/res/values-ru/strings.xml
S0053
Add error_bdts_format_title/message (RU)
2026-05-02 12:58:55
app_v2/src/main/res/values-uk/strings.xml
S0053
Add error_bdts_format_title/message (UK)
2026-05-02 12:59:32
PLAN/S0052_bugfix-sftp-datasource-log-spam.md
spec-all
Pipeline Verified: S0052 - SFTP+FTP read() log spam eliminated
2026-05-02 13:01:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0053
BD-TS format error detection in onPlayerError + onBdTsFormatError() in PlayerCallback interface
2026-05-02 13:01:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
S0053
Implement onBdTsFormatError(): show AlertDialog with BD-TS format error info
2026-05-02 18:35:46
PLAN/S0051_bugfix-network-datasource-pause-cancel.md
spec-all
Strategic spec approved: S0051 bugfix-network-datasource-pause-cancel
2026-05-02 18:43:27
PLAN/S0051_bugfix-network-datasource-pause-cancel/INDEX.md
spec-all
Tactical plan created: S0051 (2 phases)
2026-05-02 18:44:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PauseAwareLoadControl.kt
spec-all/S0051
Add PauseAwareLoadControl - stops network buffering on player pause
2026-05-02 18:44:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchLoadControlFactory.kt
spec-all/S0051
Wrap DefaultLoadControl in PauseAwareLoadControl in factory
2026-05-02 18:47:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/BdTsStripDataSource.kt
S0053
New: BD-TS 192-byte packet stripper DataSource
2026-05-02 18:47:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/BdTsStripDataSourceFactory.kt
S0053
New: factory for BdTsStripDataSource
2026-05-02 18:49:21
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0050 Phase 01 Step 1.1
Add showBlackScreenButton field to AppSettings data class
2026-05-02 18:49:51
app_v2/src/main/res/values/strings.xml
S0050 Phase 01 Step 1.2
Add settings_black_screen_button_title and _desc strings (EN)
2026-05-02 18:50:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
spec-all/S0051
Register PauseAwareLoadControl as ExoPlayer listener for pause-aware buffering
2026-05-02 18:50:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
spec-all/S0051
Register PauseAwareLoadControl as ExoPlayer listener for pause-aware buffering
2026-05-02 18:50:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
spec-all/S0051
Register PauseAwareLoadControl as ExoPlayer listener for pause-aware buffering
2026-05-02 18:50:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt
spec-all/S0051
Register PauseAwareLoadControl as ExoPlayer listener for pause-aware buffering
2026-05-02 18:50:26
app_v2/src/main/res/values-ru/strings.xml
S0050 Phase 01 Step 1.3
Add settings_black_screen_button_title and _desc strings (RU)
2026-05-02 18:50:26
app_v2/src/main/res/values-uk/strings.xml
S0050 Phase 01 Step 1.3
Add settings_black_screen_button_title and _desc strings (UK)
2026-05-02 18:51:12
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0050 Phase 01 Step 1.4
Add switchShowBlackScreenButton toggle row to containerBehaviour
2026-05-02 18:51:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BdTsPlaybackHelper.kt
S0053
New: wrapForBdTs extension for DataSource.Factory
2026-05-02 18:51:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
S0053
Wire BdTsStripDataSourceFactory for .m2ts paths
2026-05-02 18:51:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
S0053
Wire BdTsStripDataSourceFactory for .m2ts paths
2026-05-02 18:51:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
S0053
Wire BdTsStripDataSourceFactory for .m2ts paths
2026-05-02 18:52:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0050 Phase 01 Step 1.5
Bind switchShowBlackScreenButton in setupViews() and observeData()
2026-05-02 18:52:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
S0050 Phase 01 Step 1.5
Add showBlackScreenButton to resetPlaybackSection()
2026-05-02 18:52:31
PLAN/S0051_bugfix-network-datasource-pause-cancel.md
spec-all
Pipeline BlockNeedUserTest: S0051 - on-device SFTP/logcat check required
2026-05-02 18:56:40
docs/FEATURES.md
S0053
Add .m2ts BD-TS playback entry (Network Sources section)
2026-05-02 18:56:40
docs/FEATURES_RU.md
S0053
Add .m2ts BD-TS playback entry (RU)
2026-05-02 18:56:40
docs/FEATURES_UK.md
S0053
Add .m2ts BD-TS playback entry (UK)
2026-05-02 18:56:40
dev/CATALOG/app_v2.jsonl
S0053
Catalog regen: BdTsStripDataSource, BdTsStripDataSourceFactory, BdTsPlaybackHelper
2026-05-02 18:57:59
app_v2/src/main/res/drawable/ic_black_screen.xml
S0050 Phase 02 Step 2.1
Create black screen button icon drawable (filled square, colorOnSurface)
2026-05-02 18:58:44
app_v2/src/main/res/menu/overflow_menu_player.xml
S0050 Phase 02 Step 2.2
Add menu_black_screen overflow item
2026-05-02 18:58:44
app_v2/src/main/res/values/strings.xml
S0050 Phase 02 Step 2.2
Add black_screen_button_title string (EN)
2026-05-02 18:58:44
app_v2/src/main/res/values-ru/strings.xml
S0050 Phase 02 Step 2.2
Add black_screen_button_title string (RU)
2026-05-02 18:58:44
app_v2/src/main/res/values-uk/strings.xml
S0050 Phase 02 Step 2.2
Add black_screen_button_title string (UK)
2026-05-02 18:59:10
app_v2/src/main/res/layout/activity_player_unified.xml
S0050 Phase 02 Step 2.3
Add btnBlackScreenCmd ImageButton as first child of center group
2026-05-02 18:59:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0050 Phase 02 Step 2.4
Add BLACK_SCREEN command (priority 195) and buildActiveCommands condition
2026-05-02 18:59:46
PLAN/S0053_bugfix-m2ts-bdmv-network-playback.md
spec-check
Audit S0053 -> Verified; PASS/WARN/FAIL 30/0/0
2026-05-02 19:00:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0050 Phase 02 Step 2.5
Add showBlackScreenButton to PlayerState data class
2026-05-02 19:00:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt
S0050 Phase 02 Step 2.5
Map showBlackScreenButton from AppSettings into PlayerState
2026-05-02 19:01:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
S0050 Phase 02 Step 2.6
Add btnBlackScreenCmd click stub in setupCommandButtons()
2026-05-02 19:01:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0050 Phase 02 Step 2.6
Add onBlackScreenClicked() to CommandPanelCallback interface and overflow dispatch
2026-05-02 19:01:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0050 Phase 02 Step 2.6
Implement onBlackScreenClicked() stub (TODO phase-03)
2026-05-02 19:11:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BlackScreenOverlayManager.kt
BlackScreenOverlayManager
S0050 Phase 03: new helper - show/hide full-screen black overlay on DecorView, touch-dismiss, file-type-auto-dismiss
2026-05-02 19:12:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
S0050 Phase 03: declare and instantiate BlackScreenOverlayManager; observe currentFile type for overlay auto-dismiss
2026-05-02 19:13:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
PlayerControlsSetupManager
S0050 Phase 03: add BlackScreenOverlayManager constructor param; replace phase-03 stub with show()
2026-05-02 19:13:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
S0050 Phase 03: pass activity.blackScreenOverlayManager to PlayerControlsSetupManager constructor
2026-05-02 19:13:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
S0050 Phase 03: replace phase-03 stub in onBlackScreenClicked with real show() call
2026-05-02 19:14:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
S0050 Phase 03: add toggleBlackScreenOverlay() public method; extend dispatchKeyEvent for volume/media key passthrough
2026-05-02 19:21:48
app_v2/src/main/assets/input/default_bindings.json
default_bindings
S0050 Phase 04: add player.black_screen command binding (key B, flavor audio_required)
2026-05-02 19:21:48
app_v2/src/main/res/values/strings.xml
strings
S0050 Phase 04: add cmd_black_screen_label EN
2026-05-02 19:21:48
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0050 Phase 04: add cmd_black_screen_label RU
2026-05-02 19:21:48
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0050 Phase 04: add cmd_black_screen_label UK
2026-05-02 19:21:48
app_v2/src/main/java/com/sza/fastmediasorter/domain/input/CommandId.kt
CommandId
S0050 Phase 04: add BLACK_SCREEN constant
2026-05-02 19:21:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
PlayerKeyboardHandler
S0050 Phase 04: add onToggleBlackScreen to callback interface; dispatch BLACK_SCREEN in handleCommand
2026-05-02 19:21:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
PlayerKeyboardCallbackImpl
S0050 Phase 04: implement onToggleBlackScreen → activity.toggleBlackScreenOverlay()
2026-05-02 19:27:06
docs/FEATURES.md
FEATURES
S0050 Phase 05: add Black Screen mode bullet to §7 Video Player and §9 Audio Player
2026-05-02 19:27:06
docs/FEATURES_RU.md
FEATURES_RU
S0050 Phase 05: add Black Screen mode bullet (RU) to §7 and §9
2026-05-02 19:27:06
docs/FEATURES_UK.md
FEATURES_UK
S0050 Phase 05: add Black Screen mode bullet (UK) to §7 and §9
2026-05-02 19:27:06
dev/CATALOG/app_v2.jsonl
app_v2-catalog
S0050 Phase 05: regen catalog + set BlackScreenOverlayManager role=overlay-manager
2026-05-02 19:33:15
PLAN/S0050_player-black-screen-mode.md
spec-check
Audit S0050 → Verified; PASS/WARN/FAIL 21/0/0; 1 manual (on-device playback continuity)
2026-05-02 21:27:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRefreshManager.kt
BrowseRefreshManager
Add syncMediaStore param to launchReload; skip MediaStore sync when triggered by ContentObserver to break infinite reload loop
2026-05-02 21:27:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Propagate syncMediaStore param through reloadFiles()
2026-05-02 21:27:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Pass syncMediaStore=false in onMediaStoreChanged callback to prevent sync feedback loop
2026-05-02 21:27:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileObserverManager.kt
BrowseFileObserverManager
Replace volatile boolean ignoringFileChanges with AtomicInteger counter to fix race condition with NonCancellable finally blocks
2026-05-02 22:16:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PauseAwareLoadControl.kt
PauseAwareLoadControl
Fix StackOverflowError: explicit onTracksSelected overrides break LoadControl.java:62-72 default-method mutual recursion caused by Kotlin by-delegate calling DefaultImpls instead of delegate
2026-05-02 22:28:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt
createPlayer
Register PauseAwareLoadControl as Player.Listener so isPlayWhenReady flag stays in sync with player state
2026-05-02 22:46:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PauseAwareLoadControl.kt
PauseAwareLoadControl
Fix StackOverflowError crash: add explicit shouldStartPlayback overrides (both overloads) to prevent infinite mutual recursion via Kotlin by-delegate for cross-calling Java default methods in LoadControl
2026-05-02 22:58:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PauseAwareLoadControl.kt
PauseAwareLoadControl
Fix shouldStartPlayback signature: Media3 1.2.1 uses (Timeline, MediaPeriodId, Long, Float, Boolean, Long), no Timeline.Window parameter
2026-05-02 23:19:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerUiStateCoordinatorCallbackImpl.kt
PlayerUiStateCoordinatorCallbackImpl
fix: remove null guard in displayEpub() that prevented lazy init of EpubViewerManager, causing black screen for epub files
2026-05-02 23:30:14
app_v2/src/main/res/layout/fragment_settings_playback.xml
layoutCameraCapture
Fix portrait overflow: split camera-capture row into two vertical rows (main toggle + skip-filename sub-toggle) to prevent 0-width measurement gap between camera and black-screen toggles
2026-05-02 23:32:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager.showChapter
fix: call getOrCreateWebView() instead of webView?.loadDataWithBaseURL() - webView was always null, causing blank content and infinite loading spinner
2026-05-02 23:40:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerUiStateCoordinatorCallbackImpl.kt
PlayerUiStateCoordinatorCallbackImpl
fix: remove null guard in displayPdf() that prevented lazy init of PdfViewerManager, causing black screen (same root cause as displayEpub fix)
2026-05-03 00:01:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Add Group 1 PlayerCommands (PREVIOUS/NEXT/DELETE/FAVORITE/SHARE/INFO/FULLSCREEN/SLIDESHOW/RANDOM, prio 10-90); add showFavorite/showRandom params to buildActiveCommands
2026-05-03 00:01:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Fix architectural gap: all buttons except Back now go through adaptive priority system; remove fixed right group; remove countVisibleRightGroupButtons; simplify resolveAvailableCenterWidthPx
2026-05-03 00:01:27
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Move right-group buttons (Prev/Next/Delete/Fav/Share/Info/Fullscreen/Slideshow/Random) into center adaptive LinearLayout; remove fixed right group
2026-05-03 00:01:27
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified-land
Move Prev/Random/Next into HorizontalScrollView; remove fixed right navigation section
2026-05-03 00:01:27
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
Add menu items for Group 1 commands: menu_previous/next/delete/favorite/share/info/fullscreen/slideshow/random
2026-05-03 00:03:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortFilterManager.kt
BrowseActivity
Show sorting progress indicator (isSorting flag + setLoading) while in-memory sort runs on IO thread; sort moved to coroutine to avoid blocking caller
2026-05-03 01:04:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Clear isSorting flag after DiffUtil completes (not after sort itself); fixes 9-11 sec no-feedback window for 12k+ file lists
2026-05-03 01:24:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Remove PREVIOUS/NEXT from adaptive enum; restore priority order DELETE=10..RANDOM=70
2026-05-03 01:24:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Fix visual order: Previous/Next fixed right anchors, subtract 3 buttons from center width
2026-05-03 01:24:46
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Move btnPreviousCmd/btnNextCmd from center group to fixed right anchors in portrait
2026-05-03 01:24:47
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
Remove menu_previous and menu_next (now fixed anchors, never overflow)
2026-05-03 01:32:55
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Fix volume preset buttons losing text in portrait: changed button row from horizontal to vertical layout so Mute/50%/MAX fit in the narrow right panel
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_02_005.xml
ico_02_005
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_04_010.xml
ico_04_010
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_05_005.xml
ico_05_005
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_03_010.xml
ico_03_010
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_02_006.xml
ico_02_006
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_04_008.xml
ico_04_008
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_05_007.xml
ico_05_007
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_04_003.xml
ico_04_003
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_03_003.xml
ico_03_003
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_02_007.xml
ico_02_007
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_03_001.xml
ico_03_001
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_03_009.xml
ico_03_009
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_03_005.xml
ico_03_005
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_02_008.xml
ico_02_008
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_02_004.xml
ico_02_004
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_03_004.xml
ico_03_004
Replaced with valid Material Icon
2026-05-03 01:47:17
app_v2/src/main/res/drawable/ico_05_019.xml
ico_05_019
Replaced with valid Material Icon
2026-05-03 01:48:15
temp/icon_catalog_for_designer.md
icon_catalog_for_designer.md
Updated catalog reflecting 17 new valid Material icons and grammar corrections
2026-05-03 01:57:37
temp/icon_catalog_for_designer.md
icon_catalog_for_designer.md
Fixed text descriptions for ico-02-006 and ico-04-008
2026-05-03 02:04:51
app_v2/build.gradle.kts
SFTP / JSch
Bump com.github.mwiede:jsch 0.2.16 -> 0.2.26 to fix ArrayIndexOutOfBoundsException in ChannelSftp.read() during ExoPlayer skip()
2026-05-03 02:08:51
PLAN/S0054_m2ts-playback-support.md
spec
Add strategic spec S0054 for m2ts-playback-support
2026-05-03 02:16:05
app_v2/src/main/res/values/strings.xml
strings.xml
Renamed ‘Don’t ask for filename’ setting string
2026-05-03 02:16:05
docs/FEATURES.md
FEATURES.md
Renamed ‘Don’t ask for filename’ setting string
2026-05-03 02:22:49
PLAN/S0054_m2ts-playback-support.md
S0054
Research complete: enriched §4 (confirmed LOCAL/Cloud gaps, wrapForBdTs extension-only risk, no tests), updated §6 (Q1 closed, Q2 refined, added Q5/Q6), updated §7 risk table with new HIGH risks
2026-05-03 02:29:44
PLAN/S0054_m2ts-playback-support.md
spec-update
Refinement (claude-sonnet-4-6, focus: all) - removed 14 class/method names from strategic spec, replaced with architectural terms
2026-05-03 02:41:07
docs/WHATS_NEW.md
v2.60.5030.230 release notes
Added What’s New block for v2.60.5030.230 (May 2026): new features and fixes sections; previous release archived below
2026-05-03 02:41:12
README.md
v2.60.5030.230 release notes
Added compact What’s New block for v2.60.5030.230 with links to full notes
2026-05-03 02:42:52
docs/WHATS_NEW_RU.md
v2.60.5030.230 release notes (RU)
Added Russian What’s New block for v2.60.5030.230; previous release archived below
2026-05-03 02:42:53
docs/WHATS_NEW_UK.md
v2.60.5030.230 release notes (UK)
Added Ukrainian What’s New block for v2.60.5030.230; previous release archived below
2026-05-03 03:03:28
docs/README.md
v2.60.5030.230 doc update
Updated Keyboard bullet (all screens + gamepad); added Camera Capture, Link Auto-Download, Single-Eye 3D bullets to Key Features
2026-05-03 03:03:28
docs/QUICK_START.md
v2.60.5030.230 doc update
Added Keybinding Remapper, Camera Capture, Link Auto-Download sections to Advanced Features
2026-05-03 03:03:28
docs/FAQ.md
v2.60.5030.230 doc update
Added Input & Controls FAQ section (keyboard/gamepad, keybindings, link download)
2026-05-03 03:03:28
docs/QUICK_START_RU.md
v2.60.5030.230 doc update
RU: same Advanced Features additions as EN
2026-05-03 03:03:28
docs/QUICK_START_UK.md
v2.60.5030.230 doc update
UK: same Advanced Features additions as EN
2026-05-03 03:03:28
docs/FAQ_RU.md
v2.60.5030.230 doc update
RU: Управление и ввод - new FAQ section
2026-05-03 03:03:28
docs/FAQ_UK.md
v2.60.5030.230 doc update
UK: Керування та введення - new FAQ section
2026-05-03 03:25:09
PLAN/S0054_m2ts-playback-support/INDEX.md
spec-tech
Create tactical plan for S0054 (7 phases, 16 steps)
2026-05-03 03:25:09
PLAN/S0054_m2ts-playback-support/PHASE_01__ts-format-detector.md
spec-tech
Phase 01: TsPacketFormat + TsPacketFormatDetector + unit tests
2026-05-03 03:25:09
PLAN/S0054_m2ts-playback-support/PHASE_02__unified-bd-ts-wiring.md
spec-tech
Phase 02: detectTsFormatSuspend; SMB/SFTP/FTP byte-level detection
2026-05-03 03:25:09
PLAN/S0054_m2ts-playback-support/PHASE_03__local-playback-fix.md
spec-tech
Phase 03: local .m2ts BD-TS detection + player recreation
2026-05-03 03:25:10
PLAN/S0054_m2ts-playback-support/PHASE_04__cloud-playback-fix.md
spec-tech
Phase 04: cloud .m2ts BD-TS detection via range request
2026-05-03 03:25:10
PLAN/S0054_m2ts-playback-support/PHASE_05__string-fixes.md
spec-tech
Phase 05: fix error_bdts_format_message; add warning_m2ts_audio_unsupported EN/RU/UK
2026-05-03 03:25:10
PLAN/S0054_m2ts-playback-support/PHASE_06__audio-track-diagnostics.md
spec-tech
Phase 06: all-unsupported audio Toast in onTracksChanged
2026-05-03 03:25:10
PLAN/S0054_m2ts-playback-support/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: FEATURES trilingual + catalog regen + dev log
2026-05-03 03:25:11
PLAN/S0054_m2ts-playback-support.md
spec-tech
Status -> Tactical; tactical plan link added
2026-05-03 03:26:11
app_v2/src/main/res/layout-land/activity_player_unified.xml
btnBlackScreenCmd
S0050: add missing Black Screen button to landscape command panel layout
2026-05-03 03:36:02
PLAN/S0057_bugfix-vr-hud-autohide-timeout.md
S0057
Создана спецификация для бага с 15-секундным таймаутом авто-скрытия HUD
2026-05-03 03:36:02
PLAN/spec-catalog.jsonl
spec-catalog
Добавлена S0057 в каталог спецификаций
2026-05-03 03:36:02
PLAN/S0008_vr-immersive-controls-panel.md
S0008
Добавлен пользовательский фидбек о невидимом HUD
2026-05-03 03:36:02
PLAN/S0038_bugfix-vr-exit-immersive-new-window.md
S0038
Добавлен пользовательский фидбек о создании нового окна при входе в иммерсив
2026-05-03 03:36:02
PLAN/S0041_debug-vr180-fisheye-quality-regression.md
S0041
Добавлен пользовательский фидбек о качестве VR180 и отсутствии логов
2026-05-03 03:59:03
PLAN/S0008_vr-immersive-controls-panel.md
spec-fix
Annotate Last Audit (S0008) - all 7 items marked FOLLOW-UP (no auto-fixes available)
2026-05-03 04:01:45
PLAN/S0041_debug-vr180-fisheye-quality-regression.md
spec-test-device
Quest 3 run + Phase 1 instrumentation extended (setStereoMode/renderQuad/layerGeom/fisheye shader FOV) shipped in v2.60.5030.358-VR-DEBUG. Resolved 2026-05-03 IDE filter mismatch anomaly. Status unchanged (BlockNeedUserTest).
2026-05-03 04:02:02
PLAN/S0057_bugfix-vr-hud-autohide-timeout/INDEX.md
spec-tech
Create tactical plan for S0057
2026-05-03 04:02:02
PLAN/S0057_bugfix-vr-hud-autohide-timeout/PHASE_01__fps-keep-alive-fix.md
spec-tech
Phase 01: fps-keep-alive-fix
2026-05-03 04:02:02
PLAN/S0057_bugfix-vr-hud-autohide-timeout/PHASE_02__motion-noise-filter.md
spec-tech
Phase 02: motion-noise-filter
2026-05-03 04:02:02
PLAN/S0057_bugfix-vr-hud-autohide-timeout/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-03 04:02:02
PLAN/S0057_bugfix-vr-hud-autohide-timeout.md
spec-tech
S0057 Status -> Tactical (link added)
2026-05-03 04:04:04
PLAN/S0041_debug-vr180-fisheye-quality-regression.md
spec-test-device
Closure of 03:49 run: target 7K file only in lobby; surrogate VR180 fisheye played, landed in PROJECTION+OU instead of EQUIRECT_2+VR180_FISHEYE_SBS - Phase 03 layer-routing lead. PASS/PARTIAL/SKIPPED 1/1/1.
2026-05-03 04:06:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
S0057
Phase 01.1: anySlotActive() no longer treats fps as standalone keep-alive - restores 15 s HUD auto-hide
2026-05-03 04:06:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
S0057
Phase 01.2: refresh anySlotActive() WHY-comment - fps does NOT extend HUD visibility on its own
2026-05-03 04:06:40
PLAN/S0056_smb-scan-slowness-investigation/INDEX.md
spec-tech
Create tactical plan for S0056
2026-05-03 04:06:40
PLAN/S0056_smb-scan-slowness-investigation/PHASE_01__adaptive-threshold.md
spec-tech
Phase 01: adaptive-threshold
2026-05-03 04:06:40
PLAN/S0056_smb-scan-slowness-investigation/PHASE_02__progress-ui-followup-spec.md
spec-tech
Phase 02: progress-ui-followup-spec
2026-05-03 04:06:40
PLAN/S0056_smb-scan-slowness-investigation/PHASE_03__on-device-verification.md
spec-tech
Phase 03: on-device-verification
2026-05-03 04:06:40
PLAN/S0056_smb-scan-slowness-investigation/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-03 04:06:40
PLAN/S0056_smb-scan-slowness-investigation.md
spec-tech
Status -> Tactical
2026-05-03 04:16:41
PLAN/S0059_predefined-recent-downloads-all-files.md
spec
Add strategic spec S0059 for predefined-recent-downloads-all-files
2026-05-03 04:30:55
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
S0057
Phase 02.2: gate reportActivity() in onGenericMotionEvent() behind 0.20 axis deadzone - filters Quest 3 controller noise
2026-05-03 04:34:27
PLAN/S0008_vr-immersive-controls-panel.md
spec-check
Audit S0008 -> Broken; PASS/WARN/FAIL 4/3/5 (tactical folder restored, FAIL items unchanged)
2026-05-03 04:34:53
PLAN/S0057_bugfix-vr-hud-autohide-timeout.md
spec-dev
S0057 Status -> Implemented (Implemented date 2026-05-03); journal -> BlockNeedUserTest pending Quest 3 manual verification per strategic 7
2026-05-03 04:36:07
PLAN/S0059_predefined-recent-downloads-all-files/INDEX.md
spec-tech
Create tactical plan for S0059
2026-05-03 04:36:07
PLAN/S0059_predefined-recent-downloads-all-files/PHASE_01__predefined-classifier.md
spec-tech
Phase 01: predefined-classifier
2026-05-03 04:36:07
PLAN/S0059_predefined-recent-downloads-all-files/PHASE_02__creation-defaults.md
spec-tech
Phase 02: creation-defaults
2026-05-03 04:36:07
PLAN/S0059_predefined-recent-downloads-all-files/PHASE_03__one-time-migration.md
spec-tech
Phase 03: one-time-migration
2026-05-03 04:36:07
PLAN/S0059_predefined-recent-downloads-all-files/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-03 04:36:08
PLAN/S0059_predefined-recent-downloads-all-files.md
spec-tech
Status -> Tactical
2026-05-03 11:35:56
PLAN/S0008_vr-immersive-controls-panel/
spec-fix
Replace stale strategic-link spec_vr- -> S0008_vr- in INDEX + 6 PHASE files (16 occurrences)
2026-05-03 11:36:00
PLAN/S0008_vr-immersive-controls-panel.md
spec-fix
Annotate Last Audit (S0008): item 6 FIXED, 7 PRE-RESOLVED, 1-5 + 8 FOLLOW-UP
2026-05-03 11:36:20
PLAN/S0057_bugfix-vr-hud-autohide-timeout.md
spec-check
Audit S0057 -> Verified; PASS/WARN/FAIL 18/0/0; 5 MANUAL items pending Quest 3 verification
2026-05-03 11:37:03
scripts/utils/fetch_organic_vr_samples.ps1
fetch_organic_vr_samples
New utility: downloads 3 public-domain VR/3D samples (BBB mono 4K, BBB OU 1080p, NASA Webb 360 mono) and derives 2 more via ffmpeg (SBS_FULL from OU, 180_mono from 360_mono). Idempotent; fills c:\Common\test_media\3dvr\ subfolders for setup_test_media_vr.ps1.
2026-05-03 11:37:26
app_v2/src/main/java/com/sza/fastmediasorter/core/metrics/ScanMetricsRecorder.kt
spec-dev
S0056 P01: adaptive SLOW SCAN threshold + extended W-log fields
2026-05-03 11:37:26
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt
spec-dev
S0056 P01: pass resource.fileCount as expectedFileCount to ScanMetricsRecorder.beginScan
2026-05-03 11:40:06
dev/CATALOG/app_v2.jsonl
spec-dev
S0056 P01: regen catalog after ScanMetricsRecorder.beginScan signature change
2026-05-03 12:43:15
PLAN/S0008_vr-immersive-controls-panel.md
spec-check
Audit S0008 -> Broken; PASS/WARN/FAIL 6/1/5 (links FIXED, trilingual PRE-RESOLVED; FAIL items unchanged)
2026-05-03 12:46:57
PLAN/S0008_vr-immersive-controls-panel.md
spec-update
Refinement (claude-opus-4-7, focus: structure, –force-locked) – P-1 + P-2 applied (class names removed from strategic body)
2026-05-03 12:47:08
PLAN/S0019_vr-controls-panel-flow-restoration.md
spec-fix
Annotate Last Audit (S0019): 4 cross-spec FAILs as FOLLOW-UP, 2 WARNs as PRE-RESOLVED (audit was stale)
2026-05-03 12:52:54
PLAN/S0019_vr-controls-panel-flow-restoration.md
spec-check
Audit S0019 -> Broken; PASS/WARN/FAIL 4/0/4 (cross-spec blockers: S0008+S0024 for HUD, S0038 P-1 for exit-clone)
2026-05-03 13:04:17
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
S0041 fisheye debug
Fix fisheye one-shot VR_QUALITY_DEBUG guard: replace dbgRenderEyeCount==0L (always false - counter already ≥1 at render time) with dedicated dbgFirstFisheyeLogged boolean, reset in setStereoMode alongside other guards
2026-05-03 13:10:43
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
spec-dev
S0033 Phase 05 Step 05.1 - extracted 11 render-pipeline functions from VrPlayerActivity into VrRenderPipelineManager (~486 LOC); state ownership moved to manager (volatile bridge surface, render flag, layer descriptor, FPS counters, HUD/panel drivers)
2026-05-03 13:13:12
app_v2/build.gradle.kts
VR_UI_COMPOSITION_LAYER_ENABLED
S0008+S0019: flip flag to true for vr+vrUnlicensed flavors - unblocks isImmersiveUiLocked() guard so OpenControls/OpenFileOps/Cheatsheet dispatch real commands instead of banner no-op
2026-05-03 13:13:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.createPanelIntent
S0019+S0038: add createPanelIntent that targets standard 2D PlayerActivity directly, bypassing VR-flavor PLAYER_ACTIVITY_CLASS override - used by VR exit-to-panel path
2026-05-03 13:13:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransition.kt
VrTaskTransition.exitImmersiveToFlatPlayer
S0019+S0038: replace home-intent recovery path with direct startActivity using REORDER_TO_FRONT|SINGLE_TOP|NEW_TASK - eliminates VrPlayerActivity->STANDARD_PANEL_FALLBACK clone-window two-hop
2026-05-03 13:13:20
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity.exitVrAndStopPlayback
S0019+S0038: switch to createPanelIntent + drop EXTRA_FORCE_PANEL - direct exit to 2D PlayerActivity, no transient panel-mode VrPlayerActivity
2026-05-03 13:15:30
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrSessionLifecycleManager.kt
spec-dev
S0033 Phase 05 Step 05.2 - extracted 16 session-lifecycle/route functions from VrPlayerActivity into VrSessionLifecycleManager (~499 LOC); state ownership: xrInitializationRequested, xrInitStartedAtMs, standardPlayerFallbackLaunched, currentStereoMode, currentRenderingMode, initialDetectedStereoModeHint, currentVrImageKey
2026-05-03 13:19:22
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrPlayerCommandRouter.kt
spec-dev
S0033 Phase 05 Step 05.3 - extracted 15 command/feedback functions from VrPlayerActivity into VrPlayerCommandRouter (~309 LOC); state ownership: currentPanelSpeed, seek-drag debouncer; seek + haptic constants live in companion
2026-05-03 13:30:24
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
spec-dev
S0033 Phase 05 Step 05.4 - wired 3 VR managers (RenderPipeline, SessionLifecycle, CommandRouter) and removed migrated function bodies; Activity 1988 -> 617 LOC; lateinit manager fields, ~30 *Internal accessors expose inherited PlayerActivity members + state to managers; handleVrCommand kept as forwarder per spec
2026-05-03 13:37:10
dev/CATALOG/app_v2.jsonl
spec-dev
S0033 Phase 06 Step 06.1 - catalog regenerated; new entries: VrRenderPipelineManager (render pipeline init/release/per-frame dispatch), VrSessionLifecycleManager (immersive session route decisions and fallbacks), VrPlayerCommandRouter (controller / hand-tracking command routing)
2026-05-03 13:37:10
dev/CATALOG/app_v2.md
spec-dev
S0033 Phase 06 Step 06.1 - rendered
2026-05-03 13:51:01
PLAN/S0033_vr-monoliths-decomposition.md
spec-dev
S0033 closed: user waived Quest 3 smoke - flipped BlockNeedUserTest -> Verified; S0024 unblocked (BlockByOtherTask -> In Progress); ready for /spec-dev S0024 Phase 02
2026-05-03 13:59:40
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudHitTester.kt
S0024 Phase 02 Step 02.1
Add VrHudHitTester (pure UV math, mirrors VrRayPanelHitTester)
2026-05-03 14:00:28
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
S0024 Phase 02 Step 02.2
Expose registry + isLayerVisible accessors for HUD ray-input
2026-05-03 14:01:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
S0024 Phase 02 Step 02.3
Add hudHitTester sink + attachHudHitTester for ray-vs-HUD-plane
2026-05-03 14:01:49
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
S0024 Phase 02 Step 02.3
Wire HUD hit-tester + currentHudHoverId in HUD bring-up
2026-05-03 14:05:39
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudHoverState.kt
S0024 Phase 03 Step 03.1
Add VrHudHoverState (id + pending-change flag, single-writer @Volatile)
2026-05-03 14:05:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudElementRegistry.kt
S0024 Phase 03 Step 03.2
Add boundsOf(id) accessor for hover-highlight painter
2026-05-03 14:05:48
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneComposer.kt
S0024 Phase 03 Step 03.2
Paint subtle hover-highlight rounded-rect around bounds of hoverId
2026-05-03 14:05:52
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneDriver.kt
S0024 Phase 03 Step 03.3
Hold VrHudHoverState; redraw on id change with hoverId pass-through
2026-05-03 14:05:57
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
S0024 Phase 03 Step 03.3
Sink writes hoverState.setCurrent and triggers driver onHoverIdChanged
2026-05-03 14:10:11
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudInteractionCallback.kt
S0024 Phase 04 Step 04.1
Add VrHudInteractionCallback fun-interface for HUD click callbacks
2026-05-03 14:10:16
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudInputDispatcher.kt
S0024 Phase 04 Step 04.2
Add VrHudInputDispatcher (latched-id, source-agnostic, drift-drop)
2026-05-03 14:10:21
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrControllerInputManager.kt
S0024 Phase 04 Step 04.3+04.4
Route controller PAUSE_TOGGLE and hand POINTER_CLICK_* to HUD dispatcher when hover != 0
2026-05-03 14:10:26
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudSceneComposer.kt
S0024 Phase 04 Step 04.5
Accept onSeekBarClick ctor param; forward to seek-bar registry.register
2026-05-03 14:10:31
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
S0024 Phase 04 Step 04.5
Wire VrHudInputDispatcher + smoke seek-bar Timber callback
2026-05-03 14:12:46
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrHudInputDispatcher.kt
S0024 Phase 05 Step 05.2
Add onClickAudioCue accessibility hook (system FX_KEY_CLICK)
2026-05-03 14:12:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
S0024 Phase 05 Step 05.2
Wire FX_KEY_CLICK audio cue into HUD dispatcher (no new asset)
2026-05-03 14:15:07
docs/FEATURES.md
S0024 Phase 06 Step 06.1
Add EN HUD ray-input bullet
2026-05-03 14:15:12
docs/FEATURES_RU.md
S0024 Phase 06 Step 06.1
Add RU HUD ray-input bullet
2026-05-03 14:15:17
docs/FEATURES_UK.md
S0024 Phase 06 Step 06.1
Add UK HUD ray-input bullet
2026-05-03 14:16:53
dev/CATALOG/app_v2.jsonl
S0024 Phase 06 Step 06.2
Catalog rescan + role/status fields for new HUD ray-input classes
2026-05-03 14:20:12
PLAN/S0024_vr-hud-ray-input.md
spec-all
Pipeline Verified: S0024 vr-hud-ray-input
2026-05-03 14:26:23
PLAN/S0061_bugfix-smb-stale-connection-invalidation.md
spec
Add strategic spec S0061 for SMB stale connection invalidation after idle
2026-05-03 14:26:24
PLAN/S0062_bugfix-speedtest-parse-end-of-string.md
spec
Add strategic spec S0062 for speedtest parser End-of-String error
2026-05-03 14:26:24
PLAN/S0063_bugfix-thumbnail-avi-smb-mediametadataretriever.md
spec
Add strategic spec S0063 for AVI/heavy thumbnail extraction wasted timeout on SMB
2026-05-03 14:26:24
PLAN/S0064_enh-smb-share-discovery-custom-names.md
spec
Add strategic spec S0064 for SMB share discovery with manual custom names
2026-05-03 14:30:59
PLAN/S0065_vr-controller-ray-visual.md
spec-all
Allocate S0065 (visible controller ray) - discovered while reviewing S0008 §11.2
2026-05-03 14:32:25
PLAN/S0061_bugfix-smb-stale-connection-invalidation.md
spec-all
Approve S0061 strategic spec for /spec-all pipeline
2026-05-03 14:34:22
app_v2/build.gradle.kts
S0008 spec-all force
Confirm VR_UI_COMPOSITION_LAYER_ENABLED=true (vr + vrUnlicensed) - guard removed; immersive panel reachable
2026-05-03 14:34:27
PLAN/S0008_vr-immersive-controls-panel.md
S0008 spec-all force
Re-audit (Broken -> BlockNeedUserTest); add S0065 dependency in S10; rewrite Last Audit
2026-05-03 14:34:32
PLAN/S0008_vr-immersive-controls-panel/INDEX.md
S0008 spec-all force
Update status, blockers log resolution, post-flag-flip re-evaluation table
2026-05-03 14:34:46
PLAN/S0008_vr-immersive-controls-panel.md
spec-all
Pipeline BlockNeedUserTest: S0008 (visible-ray work split to S0065)
2026-05-03 14:42:07
PLAN/S0061_bugfix-smb-stale-connection-invalidation/INDEX.md
spec-tech
Create tactical plan for S0061
2026-05-03 14:42:07
PLAN/S0061_bugfix-smb-stale-connection-invalidation/PHASE_01__pool-extraction-and-health-probe.md
spec-tech
S0061 Phase 01: pool-extraction-and-health-probe
2026-05-03 14:42:07
PLAN/S0061_bugfix-smb-stale-connection-invalidation/PHASE_02__pre-acquire-health-and-purge.md
spec-tech
S0061 Phase 02: pre-acquire-health-and-purge
2026-05-03 14:42:07
PLAN/S0061_bugfix-smb-stale-connection-invalidation/PHASE_03__unified-retry-policy.md
spec-tech
S0061 Phase 03: unified-retry-policy
2026-05-03 14:42:07
PLAN/S0061_bugfix-smb-stale-connection-invalidation/PHASE_04__background-lifecycle-close.md
spec-tech
S0061 Phase 04: background-lifecycle-close
2026-05-03 14:42:07
PLAN/S0061_bugfix-smb-stale-connection-invalidation/PHASE_05__diagnostic-channel.md
spec-tech
S0061 Phase 05: diagnostic-channel
2026-05-03 14:42:07
PLAN/S0061_bugfix-smb-stale-connection-invalidation/PHASE_06__docs-catalog-cleanup.md
spec-tech
S0061 Phase 06: docs-catalog-cleanup
2026-05-03 14:42:07
PLAN/S0061_bugfix-smb-stale-connection-invalidation.md
spec-tech
S0061 Status -> Tactical (research items resolved inline)
2026-05-03 14:45:20
PLAN/S0055_diagnostic-noise-cleanup/INDEX.md
S0055 tactical INDEX
S0055: created tactical plan INDEX - 4 phases, pillars A/B/C/D
2026-05-03 14:45:20
PLAN/S0055_diagnostic-noise-cleanup/PHASE_01__glide-fetcher-cancel-smb.md
S0055 PHASE_01
S0055-A/B: phase file - remove debug trace from cancel(), fix TIMEOUT→CANCELLED in fetchBytesFromSmb
2026-05-03 14:45:20
PLAN/S0055_diagnostic-noise-cleanup/PHASE_02__test-creds-log-level.md
S0055 PHASE_02
S0055-C: phase file - lower TEST_CREDS missing-file from Timber.w to Timber.d
2026-05-03 14:45:20
PLAN/S0055_diagnostic-noise-cleanup/PHASE_03__operation-cancel-log.md
S0055 PHASE_03
S0055-D: phase file - remove stack from CancellationException catch, downgrade W→I in FileOperationDestinationDialog
2026-05-03 14:45:20
PLAN/S0055_diagnostic-noise-cleanup/PHASE_04__docs-catalog-cleanup.md
S0055 PHASE_04
S0055: phase file - catalog sync, spec status update, final verification
2026-05-03 14:45:20
PLAN/S0055_diagnostic-noise-cleanup.md
S0055 strategic spec
S0055: status Draft→Tactical, added tactical plan link
2026-05-03 14:45:25
PLAN/S0055_diagnostic-noise-cleanup/PHASE_01__glide-fetcher-cancel-smb.md
S0055 PHASE_01
S0055-A/B: phase file - remove debug trace from cancel(), fix TIMEOUT→CANCELLED in fetchBytesFromSmb
2026-05-03 14:45:25
PLAN/S0055_diagnostic-noise-cleanup/PHASE_02__test-creds-log-level.md
S0055 PHASE_02
S0055-C: phase file - lower TEST_CREDS missing-file from Timber.w to Timber.d
2026-05-03 14:45:25
PLAN/S0055_diagnostic-noise-cleanup/PHASE_03__operation-cancel-log.md
S0055 PHASE_03
S0055-D: phase file - remove stack from CancellationException catch, downgrade W to I in FileOperationDestinationDialog
2026-05-03 14:45:25
PLAN/S0055_diagnostic-noise-cleanup/PHASE_04__docs-catalog-cleanup.md
S0055 PHASE_04
S0055: phase file - catalog sync, spec status update, final verification
2026-05-03 14:45:25
PLAN/S0055_diagnostic-noise-cleanup.md
S0055 strategic spec
S0055: status Draft to Tactical, added tactical plan link
2026-05-03 14:48:57
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkFileModelLoader.kt
NetworkFileDataFetcher/fetchBytesFromSmb
S0055-A: removed debug Exception(Trace) stack trace from cancel(); S0055-B: added CancellationException catch with CANCELLED label + re-throw in fetchBytesFromSmb
2026-05-03 14:48:57
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/NetworkCredentialsRepositoryImpl.kt
NetworkCredentialsRepositoryImpl.loadTestCredentials
S0055-C: Timber.w -> Timber.d for TEST_CREDS missing file (normal on end-user devices)
2026-05-03 14:48:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
FileOperationDestinationDialog.performOperation
S0055-D: onCancel Timber.w -> Timber.d; CancellationException catch Timber.w(e,…) -> Timber.i without stack
2026-05-03 14:48:57
PLAN/S0055_diagnostic-noise-cleanup.md
S0055 spec
S0055: status -> Implemented; all 4 log-noise fixes shipped, build green
2026-05-03 14:49:01
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/NetworkCredentialsRepositoryImpl.kt
NetworkCredentialsRepositoryImpl.loadTestCredentials
S0055-C: Timber.w to Timber.d for TEST_CREDS missing file
2026-05-03 14:49:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
FileOperationDestinationDialog.performOperation
S0055-D: onCancel Timber.w to Timber.d; CancellationException Timber.w(e) to Timber.i without stack
2026-05-03 14:49:01
PLAN/S0055_diagnostic-noise-cleanup.md
S0055 spec
S0055: Implemented - all 4 log-noise fixes shipped, build green
2026-05-03 14:58:44
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
ProvisionDefaultResourcesUseCase
S0059: Fresh install - Recent provisioned with allFiles=true
2026-05-03 14:58:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceVirtualCoordinator.kt
AddResourceVirtualCoordinator
S0059: allFiles=true for Recent in buildVirtualResource; detect Downloads in addManualFolder
2026-05-03 14:58:52
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MigrateS0059UseCase.kt
MigrateS0059UseCase
S0059: New - one-time migration sets allFiles=true on Recent and Downloads; recreates Recent if deleted
2026-05-03 14:58:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
MainViewModel
S0059: Inject and call MigrateS0059UseCase in init block
2026-05-03 15:00:45
.claude/commands/spec-all.md
spec-all
Rewrite: resume from any status, defer-first, autonomous chaining, block state handling
2026-05-03 15:00:48
.claude/commands/spec.md,.claude/commands/spec-tech.md,.claude/commands/spec-dev.md,.claude/commands/spec-check.md,.claude/commands/spec-fix.md
skills
Auto-approve, auto-chain, soften hard stops, defer-first behavior across all spec skills
2026-05-03 15:13:31
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
ConnectionThrottleManager
S0060: add isVideoPlayerActiveForResource() for per-server playback check in thumbnail arbitration
2026-05-03 15:13:31
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkMediaDataSource.kt
NetworkMediaDataSource
S0060: add encounteredStaleShare flag and isSmbStaleShareError() to detect DiskShare lifecycle race
2026-05-03 15:13:31
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkFileModelLoader.kt
NetworkFileDataFetcher
S0060: add transient failure cache (markVideoAsTransientlyFailed / clearTransientFailure / clearTransientFailuresForHost / isVideoPermanentlyFailed)
2026-05-03 15:13:32
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
NetworkVideoFrameDecoder
S0060: ExtractionOutcome type, failure classification (stale-share/timeout/null-frame), transient SMB errors excluded from permanent failed-cache
2026-05-03 15:13:34
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
ConnectionThrottleManager
S0060: add isVideoPlayerActiveForResource() for per-server playback check in thumbnail arbitration
2026-05-03 15:13:39
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkMediaDataSource.kt
NetworkMediaDataSource
S0060: add encounteredStaleShare flag and isSmbStaleShareError() to detect DiskShare lifecycle race
2026-05-03 15:13:39
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkFileModelLoader.kt
NetworkFileDataFetcher
S0060: transient failure cache (markVideoAsTransientlyFailed / clearTransientFailure / clearTransientFailuresForHost / isVideoPermanentlyFailed)
2026-05-03 15:13:39
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
NetworkVideoFrameDecoder
S0060: ExtractionOutcome type, failure classification stale-share/timeout/null-frame, transient SMB errors excluded from permanent failed-cache
2026-05-03 15:13:42
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
NetworkVideoFrameDecoder
S0060: ExtractionOutcome type, failure classification stale-share/timeout/null-frame, transient SMB errors excluded from permanent failed-cache
2026-05-03 15:47:11
PLAN/S0060_bugfix-smb-thumbnail-share-race.md
S0060
Updated spec: status Implemented, open questions resolved, added implementation summary and Last Audit section
2026-05-03 15:50:16
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/NetworkSpeedTestUseCase.kt
NetworkSpeedTestUseCase
S0062: add MeasurementUnavailable status + isEmptyMeasurementError helper; demote ‘End of String’ parse errors from ERROR to DEBUG; unexpected errors to WARNING
2026-05-03 15:50:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
S0062: handle MeasurementUnavailable at DEBUG; downgrade SpeedTestStatus.Error log from Timber.e to Timber.w
2026-05-03 16:06:01
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkThumbnailExtractionPolicy.kt
NetworkThumbnailExtractionPolicy
S0063: new policy object - single point of truth for formats blocked on network stream extraction (starts with AVI)
2026-05-03 16:06:08
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
NetworkVideoFrameDecoder.handles
S0063: check NetworkThumbnailExtractionPolicy in handles() - returns false for blocked extensions (AVI), skips 10s timeout
2026-05-03 16:06:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
AdapterThumbnailLoader.loadVideo
S0063: early placeholder for blocked network formats in isNetworkPath VIDEO branch with accessibility contentDescription
2026-05-03 16:06:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
PagingMediaFileAdapter.loadThumbnail
S0063: early placeholder for blocked network formats in both ListViewHolder and GridViewHolder VIDEO isNetworkPath branches
2026-05-03 16:06:08
app_v2/src/main/res/values/strings.xml
thumbnail_unavailable_network_format
S0063: new string resource for content-description of AVI/blocked network format placeholder
2026-05-03 16:06:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
AdapterThumbnailLoader.loadVideo
S0063: early placeholder for blocked network formats in isNetworkPath VIDEO branch with accessibility contentDescription
2026-05-03 16:06:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
PagingMediaFileAdapter.loadThumbnail
S0063: early placeholder for blocked network formats in both ListViewHolder and GridViewHolder VIDEO isNetworkPath branches
2026-05-03 16:06:15
app_v2/src/main/res/values/strings.xml
thumbnail_unavailable_network_format
S0063: new string resource for content-description of blocked network format placeholder
2026-05-03 16:07:04
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
S0061 Phase 02-05: pre-acquire health probe, purgeClientForHost on transport error, reconnect diagnostic, Phase 03 retry log fix
2026-05-03 16:07:04
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionPool.kt
SmbConnectionPool
S0061 Phase 04: add BACKGROUND_WORKER to ConnectionConsumer; add closeAllExceptWorker() method
2026-05-03 16:07:04
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbBackgroundLifecycleManager.kt
SmbBackgroundLifecycleManager
S0061 Phase 04: new file - ProcessLifecycle observer that closes UI SMB connections on background
2026-05-03 16:07:04
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
S0061 Phase 04: inject SmbBackgroundLifecycleManager and register with ProcessLifecycleOwner
2026-05-03 16:07:07
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
S0061 Ph02-05: pre-acquire health probe + purgeClientForHost + reconnect diagnostics + retry log
2026-05-03 16:07:12
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionPool.kt
SmbConnectionPool
S0061 Ph04: BACKGROUND_WORKER enum value + closeAllExceptWorker()
2026-05-03 16:07:12
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbBackgroundLifecycleManager.kt
SmbBackgroundLifecycleManager
S0061 Ph04: new - DefaultLifecycleObserver closing UI SMB connections on background
2026-05-03 16:07:12
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
S0061 Ph04: inject SmbBackgroundLifecycleManager + register ProcessLifecycleOwner observer
2026-05-03 16:07:20
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionPool.kt
SmbConnectionPool
S0061 Ph04: BACKGROUND_WORKER + closeAllExceptWorker()
2026-05-03 16:07:23
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbBackgroundLifecycleManager.kt
SmbBackgroundLifecycleManager
S0061 Ph04: new file - close UI SMB connections on ProcessLifecycle.onStop
2026-05-03 16:07:26
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
S0061 Ph04: inject SmbBackgroundLifecycleManager + register observer
2026-05-03 16:09:23
docs/FEATURES.md
FEATURES
S0061 Ph06: add stale SMB connection recovery bullet (EN/RU/UK)
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbShareDiscoveryHelper.kt
SmbShareDiscoveryHelper
S0064: downgrade ‘Only N share(s) found’ from Timber.w to Timber.i - diagnostic, not an error
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/NetworkCredentialsEntity.kt
NetworkCredentialsEntity
S0064: add manualShareNames: String field (pipe-separated per-server history)
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
S0064: bump DB version 26->27, add MIGRATION_26_27 (manual_share_names column)
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
S0064: register MIGRATION_26_27
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/NetworkCredentialsDao.kt
NetworkCredentialsDao
S0064: add getAllByTypeServerAndPort query
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/NetworkCredentialsRepository.kt
NetworkCredentialsRepository
S0064: add getManualShareNamesForServer + addManualShareName to interface
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/NetworkCredentialsRepositoryImpl.kt
NetworkCredentialsRepositoryImpl
S0064: implement getManualShareNamesForServer + addManualShareName
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt
SmbOperationsUseCase
S0064: saveCredentials now calls addManualShareName after update
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
S0064: ShowSharePicker event adds manualShares; add rememberManualShareName(); pass credentialsRepository to NetworkScanCoordinator
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceNetworkScanCoordinator.kt
AddResourceNetworkScanCoordinator
S0064: inject NetworkCredentialsRepository; load manual names in scanShares; emit in ShowSharePicker
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
S0064: showSharePickerDialog shows previous+auto shares + manual entry dialog
2026-05-03 16:23:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
S0064: pass manualShares to showSharePickerDialog
2026-05-03 16:23:19
app_v2/src/main/res/values/strings.xml
strings.xml EN
S0064: add smb_enter_share_manually, smb_manual_share_* strings
2026-05-03 16:23:19
app_v2/src/main/res/values-ru/strings.xml
strings.xml RU
S0064: add smb_enter_share_manually, smb_manual_share_* strings
2026-05-03 16:23:19
app_v2/src/main/res/values-uk/strings.xml
strings.xml UK
S0064: add smb_enter_share_manually, smb_manual_share_* strings
2026-05-03 16:23:26
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbShareDiscoveryHelper.kt
SmbShareDiscoveryHelper
S0064: Timber.w to Timber.i for thin share results
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/NetworkCredentialsEntity.kt
NetworkCredentialsEntity
S0064: add manualShareNames field (pipe-sep, per-server history)
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
S0064: DB 26->27, MIGRATION_26_27 adds manual_share_names column
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
S0064: register MIGRATION_26_27
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/NetworkCredentialsDao.kt
NetworkCredentialsDao
S0064: add getAllByTypeServerAndPort query
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/NetworkCredentialsRepository.kt
NetworkCredentialsRepository
S0064: add getManualShareNamesForServer + addManualShareName
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/NetworkCredentialsRepositoryImpl.kt
NetworkCredentialsRepositoryImpl
S0064: implement getManualShareNamesForServer + addManualShareName
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt
SmbOperationsUseCase
S0064: saveCredentials calls addManualShareName after update
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
S0064: ShowSharePicker.manualShares; rememberManualShareName(); inject credentialsRepository to coordinator
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceNetworkScanCoordinator.kt
AddResourceNetworkScanCoordinator
S0064: inject repo; load history in scanShares; emit with ShowSharePicker
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
S0064: showSharePickerDialog with manual+auto+enter-manually option
2026-05-03 16:23:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
S0064: pass manualShares to showSharePickerDialog
2026-05-03 16:23:35
app_v2/src/main/res/values/strings.xml
strings EN/RU/UK
S0064: smb_enter_share_manually and related dialog strings
2026-05-03 16:25:16
docs/FEATURES.md
FEATURES EN/RU/UK
S0064: add SMB share picker with manual entry bullet
2026-05-03 16:34:47
PLAN/S0065_vr-controller-ray-visual/INDEX.md
spec-tech
Create tactical plan for S0065
2026-05-03 16:34:47
PLAN/S0065_vr-controller-ray-visual/PHASE_01__ray-state-scaffolding.md
spec-tech
Phase 01: ray-state-scaffolding
2026-05-03 16:34:47
PLAN/S0065_vr-controller-ray-visual/PHASE_02__gl-resource-lifecycle.md
spec-tech
Phase 02: gl-resource-lifecycle
2026-05-03 16:34:47
PLAN/S0065_vr-controller-ray-visual/PHASE_03__capture-endpoints.md
spec-tech
Phase 03: capture-endpoints
2026-05-03 16:34:47
PLAN/S0065_vr-controller-ray-visual/PHASE_04__per-eye-draw.md
spec-tech
Phase 04: per-eye-draw
2026-05-03 16:34:47
PLAN/S0065_vr-controller-ray-visual/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-03 16:34:47
PLAN/S0065_vr-controller-ray-visual.md
spec-tech
Status: Approved -> Tactical
2026-05-03 16:36:59
app_v2/src/vr/cpp/OpenXrCtx.h
spec-dev S0065 01.1
Add RayState + RayRenderResources structs and ctx members
2026-05-03 16:37:26
app_v2/src/vr/cpp/OpenXrRayDraw.h
spec-dev S0065 01.2
Create header with ray-draw API declarations
2026-05-03 16:37:52
app_v2/src/vr/cpp/OpenXrRayDraw.cpp
spec-dev S0065 01.3
Create skeleton with shader sources and stub bodies
2026-05-03 16:38:21
app_v2/src/vr/cpp/CMakeLists.txt
spec-dev S0065 01.4
Register OpenXrRayDraw.cpp in openxr_native sources
2026-05-03 16:40:22
app_v2/src/vr/cpp/OpenXrRayDraw.cpp
spec-dev S0065 02.1
Implement initRayResources: shader compile + link + VBO/VAO setup
2026-05-03 16:40:46
app_v2/src/vr/cpp/OpenXrRayDraw.cpp
spec-dev S0065 02.2
Implement destroyRayResources: idempotent GL teardown
2026-05-03 16:41:48
app_v2/src/vr/cpp/OpenXrSwapchain.cpp
spec-dev S0065 02.3
Hook initRayResources into createSessionAndSwapchains
2026-05-03 16:41:48
app_v2/src/vr/cpp/OpenXrLifecycle.cpp
spec-dev S0065 02.3
Hook destroyRayResources at start of destroyAll
2026-05-03 16:43:40
app_v2/src/vr/cpp/OpenXrInput.cpp
spec-dev S0065 03.1
Capture controller ray endpoints into ctx.rayState; replace Phase 03 TODO
2026-05-03 16:43:54
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionPool.kt
S0061
Phase 01: extract SMB connection pool to dedicated helper
2026-05-03 16:43:54
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionHealthProbe.kt
S0061
Phase 01: structured DeadReason classifier + non-blocking liveness probe
2026-05-03 16:43:54
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbReconnectMetric.kt
S0061
Phase 05: extract reconnect-event ring buffer to dedicated helper
2026-05-03 16:43:54
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbBackgroundLifecycleManager.kt
S0061
Phase 04: ProcessLifecycleOwner observer closes UI SMB connections on background
2026-05-03 16:43:54
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
S0061
Phase 01-05: pool delegation + health probe + purge + retry + reconnect metric
2026-05-03 16:43:54
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
S0061
Phase 04: register SmbBackgroundLifecycleManager observer
2026-05-03 16:43:54
app_v2/src/main/res/values/strings.xml
S0061
Phase 05: smb_network_unstable EN
2026-05-03 16:43:54
app_v2/src/main/res/values-ru/strings.xml
S0061
Phase 05: smb_network_unstable RU
2026-05-03 16:43:54
app_v2/src/main/res/values-uk/strings.xml
S0061
Phase 05: smb_network_unstable UK
2026-05-03 16:43:54
docs/FEATURES.md
S0061
Phase 06: SMB auto-recovery feature note (EN)
2026-05-03 16:43:54
dev/CATALOG/app_v2.jsonl
S0061
Phase 06: regenerate catalog after SMB pool extraction
2026-05-03 16:43:54
dev/CATALOG/app_v2.md
S0061
Phase 06: regenerate catalog rendering
2026-05-03 16:44:36
PLAN/S0061_bugfix-smb-stale-connection-invalidation.md
spec-all
Pipeline Implemented: S0061 (BUILD SUCCESSFUL, 6/6 phases done)
2026-05-03 16:46:16
app_v2/src/vr/cpp/OpenXrHandTracking.cpp
spec-dev S0065 03.2
Capture hand-tracking ray endpoints into ctx.rayState
2026-05-03 16:47:43
app_v2/src/vr/cpp/OpenXrRayDraw.cpp
spec-dev S0065 04.1
Implement drawControllerRays: per-eye line + cursor draw
2026-05-03 16:48:17
app_v2/src/vr/cpp/OpenXrFrame.cpp
spec-dev S0065 04.2
Hook drawControllerRays per-eye after invokeRenderCallback
2026-05-03 16:52:13
docs/FEATURES.md
spec-dev S0065 05.1
Add visible controller/hand aim-ray bullet (EN)
2026-05-03 16:52:13
docs/FEATURES_RU.md
spec-dev S0065 05.1
Add visible controller/hand aim-ray bullet (RU)
2026-05-03 16:52:13
docs/FEATURES_UK.md
spec-dev S0065 05.1
Add visible controller/hand aim-ray bullet (UK)
2026-05-03 16:53:14
dev/CATALOG/app_v2.jsonl
spec-dev S0065 05.2
Regenerate app_v2 catalog (896 files indexed)
2026-05-03 16:53:14
dev/CATALOG/app_v2.md
spec-dev S0065 05.2
Regenerate app_v2 catalog markdown
2026-05-03 16:53:58
PLAN/S0065_vr-controller-ray-visual.md
spec-dev S0065
Status Tactical -> Implemented; catalog flipped to BlockNeedUserTest
2026-05-03 17:03:42
PLAN/S0062, PLAN/S0063, PLAN/S0066, PLAN/S0067
spec-catalog
S0062/S0063 scope clarification: both fixes are protocol-neutral and cover SMB/SFTP/FTP/Cloud via shared exception handler (NetworkSpeedTestUseCase) and shared decoder gate (NetworkThumbnailExtractionPolicy). New follow-ups: S0066 universal transient-classification for thumbnail failures across all network protocols; S0067 unified liveness-gate / single-retry / lifecycle hooks for FTP/SFTP/Cloud.
2026-05-03 17:05:39
PLAN/S0062, PLAN/S0063
spec-catalog
S0062 and S0063 promoted Implemented -> Verified after code audit confirmed all strategic criteria are met (verified by reading NetworkSpeedTestUseCase and NetworkThumbnailExtractionPolicy / NetworkVideoFrameDecoder.handles() source).
2026-05-03 17:10:07
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol.md
spec-all
S0067 strategic spec approved (Draft -> Approved)
2026-05-03 17:15:48
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/INDEX.md
spec-tech
Create tactical plan for S0067 (7 phases)
2026-05-03 17:15:48
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_01__gate-foundations.md
spec-tech
Phase 01: gate foundations
2026-05-03 17:15:48
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_02__smb-gate-adapter.md
spec-tech
Phase 02: SMB gate adapter
2026-05-03 17:15:48
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_03__sftp-gate.md
spec-tech
Phase 03: SFTP gate
2026-05-03 17:15:49
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_04__ftp-gate.md
spec-tech
Phase 04: FTP gate
2026-05-03 17:15:49
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_05__cloud-gate.md
spec-tech
Phase 05: Cloud gate (token-only)
2026-05-03 17:15:49
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_06__lifecycle-diagnostics.md
spec-tech
Phase 06: lifecycle observer + diagnostics
2026-05-03 17:15:49
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs + catalog cleanup
2026-05-03 17:15:49
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol.md
spec-tech
Status -> Tactical
2026-05-03 17:19:05
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/NetworkProtocol.kt
spec-dev
S0067 Phase 01.1: NetworkProtocol enum + fromUri
2026-05-03 17:19:06
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/ConsumerType.kt
spec-dev
S0067 Phase 01.2: ConsumerType enum (UI vs background)
2026-05-03 17:19:06
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/NetworkConnectionGate.kt
spec-dev
S0067 Phase 01.3-01.4: NetworkConnectionGate interface + TransientFailure classifier
2026-05-03 17:19:06
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/ConnectionGateRegistry.kt
spec-dev
S0067 Phase 01.5: ConnectionGateRegistry singleton
2026-05-03 17:19:06
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/ConnectionDiagnostics.kt
spec-dev
S0067 Phase 01.6: ConnectionDiagnostics (sliding window + InstabilityWarning flow)
2026-05-03 17:19:07
app_v2/src/main/java/com/sza/fastmediasorter/core/di/NetworkLifecycleModule.kt
spec-dev
S0067 Phase 01.6: NetworkLifecycleModule skeleton
2026-05-03 17:22:31
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_01__gate-foundations.md
spec-dev
S0067 Phase 01 done (build PASS, visibility fix on TransientFailure)
2026-05-03 17:23:30
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/INDEX.md
spec-dev
S0067 Phase 01 complete; phases 02-06 deferred pending tactical-spec refresh against actual API surfaces
2026-05-03 17:27:35
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_02__smb-gate-adapter.md
spec-update
Refine Phase 02: align with actual SmbConnectionManager API; narrow to lifecycle-only adapter (closeFor + lastRecreateMs); add SmbRecreateTracker to avoid SmbConnectionManager line-budget overflow
2026-05-03 17:30:11
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/SmbRecreateTracker.kt
spec-dev
S0067 Phase 02.1: SmbRecreateTracker (decoupled from SmbConnectionManager)
2026-05-03 17:30:11
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/SmbConnectionGate.kt
spec-dev
S0067 Phase 02.2: SmbConnectionGate (lifecycle-only adapter)
2026-05-03 17:30:11
app_v2/src/main/java/com/sza/fastmediasorter/core/di/NetworkLifecycleModule.kt
spec-dev
S0067 Phase 02.3: provideRegistry(smb) wiring
2026-05-03 17:30:11
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/PHASE_02__smb-gate-adapter.md
spec-dev
S0067 Phase 02 done (build PASS)
2026-05-03 17:31:57
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol/INDEX.md
spec-all
S0067 partial: Phases 01-02 done (BUILD PASS twice), Phases 03-06 need strategic re-scope
2026-05-03 17:41:41
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/SftpRecreateTracker.kt
spec-dev
S0067 Phase 03: SftpRecreateTracker
2026-05-03 17:41:42
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/SftpConnectionGate.kt
spec-dev
S0067 Phase 03: SftpConnectionGate (lifecycle adapter)
2026-05-03 17:41:42
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
spec-dev
S0067 Phase 03: expose disconnectAllPool() for gate closeFor
2026-05-03 17:41:42
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/FtpRecreateTracker.kt
spec-dev
S0067 Phase 04: FtpRecreateTracker
2026-05-03 17:41:42
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/FtpConnectionGate.kt
spec-dev
S0067 Phase 04: FtpConnectionGate (lifecycle adapter)
2026-05-03 17:41:43
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpClient.kt
spec-dev
S0067 Phase 04: expose cleanupIdleFtpConnections() for gate closeFor
2026-05-03 17:41:43
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/CloudRecreateTracker.kt
spec-dev
S0067 Phase 05: CloudRecreateTracker
2026-05-03 17:41:43
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/CloudConnectionGate.kt
spec-dev
S0067 Phase 05: CloudConnectionGate (token-only, no socket close per ADR-2)
2026-05-03 17:41:43
app_v2/src/main/java/com/sza/fastmediasorter/core/lifecycle/NetworkLifecycleObserver.kt
spec-dev
S0067 Phase 06: NetworkLifecycleObserver (ProcessLifecycleOwner -> closeFor(UI_*))
2026-05-03 17:41:44
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
spec-dev
S0067 Phase 06: attach NetworkLifecycleObserver
2026-05-03 17:41:44
app_v2/src/main/java/com/sza/fastmediasorter/core/di/NetworkLifecycleModule.kt
spec-dev
S0067: full provideRegistry with SMB/SFTP/FTP/Cloud (Cloud guarded by SUPPORT_CLOUD)
2026-05-03 17:41:44
app_v2/src/main/res/values/strings.xml
spec-dev
S0067 Phase 06: network_unstable_snackbar (EN)
2026-05-03 17:41:44
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0067 Phase 06: network_unstable_snackbar (RU)
2026-05-03 17:41:45
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0067 Phase 06: network_unstable_snackbar (UK)
2026-05-03 17:41:45
docs/FEATURES.md
spec-dev
S0067 Phase 07: network connection lifecycle entry (EN/RU/UK)
2026-05-03 17:41:45
dev/CATALOG/app_v2.jsonl
spec-dev
S0067 Phase 07: catalog regen with new lifecycle classes
2026-05-03 17:42:11
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol.md
spec-all
S0067 Implemented (all 7 phases done, BUILD PASS)
2026-05-03 17:46:18
PLAN/S0068_scan-progress-indicator.md
spec
Add strategic spec S0068 for scan-progress-indicator (D1 follow-up from S0056)
2026-05-03 17:47:35
PLAN/S0009_vr-immersive-hud-gl.md
spec-fix
Annotate Last Audit (S0009): 1 PRE-RESOLVED, 2 FOLLOW-UP
2026-05-03 17:47:42
PLAN/S0056_smb-scan-slowness-investigation.md
spec-dev
S0056 phase 02 step 02.2 - add S0068 forward-link to §10
2026-05-03 17:49:33
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol.md
spec-all
Approved strategic spec: S0066
2026-05-03 17:49:42
temp/S0056_on_device_verification_20260503.md
spec-dev
S0056 phase 03 step 03.1 - author on-device test scenario doc
2026-05-03 17:52:02
PLAN/S0009_vr-immersive-hud-gl.md
spec-check
Audit S0009 -> Partial; PASS/WARN/FAIL 8/2/0; 5 manual on-device
2026-05-03 17:53:55
PLAN/S0009_vr-immersive-hud-gl.md
spec-all
Pipeline BlockNeedUserTest: S0009 (Partial; 1 WARN race + 5 MANUAL on-device); §10 cross-spec note added inline
2026-05-03 17:55:29
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol/INDEX.md
spec-tech
Create tactical plan for S0066
2026-05-03 17:55:29
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol/PHASE_01__foundations-resource-key-enum.md
spec-tech
Phase 01: foundations-resource-key-enum
2026-05-03 17:55:29
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol/PHASE_02__datasource-transient-detection.md
spec-tech
Phase 02: datasource-transient-detection
2026-05-03 17:55:29
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol/PHASE_03__decoder-universal-classification.md
spec-tech
Phase 03: decoder-universal-classification
2026-05-03 17:55:29
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol/PHASE_04__clear-transient-on-deactivate.md
spec-tech
Phase 04: clear-transient-on-deactivate
2026-05-03 17:55:29
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-03 17:55:29
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol.md
spec-tech
Status -> Tactical
2026-05-03 17:56:26
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/TransientReason.kt
spec-dev
S0066: introduce TransientReason enum (Phase 01.1)
2026-05-03 17:57:16
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkResourceKey.kt
spec-dev
S0066: extractNetworkResourceKey + pathBelongsToResource (Phase 01.2)
2026-05-03 17:58:19
app_v2/src/test/java/com/sza/fastmediasorter/data/network/glide/NetworkResourceKeyTest.kt
spec-dev
S0066: unit tests for resource key extraction (Phase 01.3)
2026-05-03 18:01:37
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkMediaDataSource.kt
spec-dev
S0066: per-protocol transientFailureReason detection (Phase 02.1-02.3)
2026-05-03 18:03:01
PLAN/S0068_scan-progress-indicator.md
S0068
Revised spec to minimal approach: 2 changes only (tvProgressMessage format + immediate STOP for network), closed all open questions based on codebase research
2026-05-03 18:05:45
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
spec-dev
S0066: universal resource key + transient classification + unified log (Phase 03)
2026-05-03 18:07:30
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkFileModelLoader.kt
spec-dev
S0066: clearTransientFailuresForResource + deprecate ForHost (Phase 04.1)
2026-05-03 18:07:30
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
spec-dev
S0066: hook clearTransientFailuresForResource into deactivateVideoPlayerMode (Phase 04.2)
2026-05-03 18:10:01
docs/FEATURES.md
spec-dev
S0066: thumbnail auto-recovery feature bullet (EN)
2026-05-03 18:10:01
docs/FEATURES_RU.md
spec-dev
S0066: автоматическое восстановление превью (RU)
2026-05-03 18:10:01
docs/FEATURES_UK.md
spec-dev
S0066: автоматичне відновлення мініатюр (UK)
2026-05-03 18:11:49
dev/CATALOG/app_v2.jsonl
spec-dev
S0066: catalog scan + manual roles for new files
2026-05-03 18:11:49
dev/CATALOG/app_v2.md
spec-dev
S0066: catalog render after S0066 changes
2026-05-03 18:14:55
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol.md
spec-check
Audit S0066 -> Verified; PASS/WARN/FAIL 28/0/0; 3 manual on-device items
2026-05-03 18:15:08
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol.md
spec-all
Pipeline Verified: S0066
2026-05-03 18:49:21
PLAN/S0025_smb-fast-fail.md
spec
S0025 restored from git history and refreshed with 2026-05-03 field-log audit
2026-05-03 18:49:21
PLAN/S0027_bugfix-vr-immersive-orientation-inverted.md
spec
S0027 updated with 2026-05-03 fallback-only field-log refresh
2026-05-03 18:49:21
PLAN/S0028_vr-multi-window-playback.md
spec
S0028 updated with 2026-05-03 negative-baseline field-log audit
2026-05-03 18:49:21
PLAN/S0055_diagnostic-noise-cleanup.md
spec
S0055 refreshed with 2026-05-03 log-noise audit and S0069 follow-up note
2026-05-03 18:49:21
PLAN/S0060_bugfix-smb-thumbnail-share-race.md
spec
S0060 refreshed with 2026-05-03 field-log audit for stale-share classification
2026-05-03 18:49:21
PLAN/S0061_bugfix-smb-stale-connection-invalidation.md
spec
S0061 refreshed with 2026-05-03 SMB auth-vs-stale connection audit
2026-05-03 18:49:21
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol.md
spec
S0067 refreshed with SMB-only field-log boundary audit
2026-05-03 18:49:21
PLAN/S0069_bugfix-atomic-copy-temp-file-missing.md
spec
S0069 created for atomic copy temp-file loss after SMB transfer
2026-05-03 18:49:21
PLAN/spec-catalog.jsonl
spec-catalog
Registered S0069 and refreshed updated timestamps for touched specs
2026-05-03 19:08:43
PLAN/S0069_bugfix-atomic-copy-temp-file-missing.md
strategic-spec
S0069 advanced to Tactical and linked tactical index
2026-05-03 19:08:43
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/INDEX.md
spec-tech
S0069 tactical index created
2026-05-03 19:08:43
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_01__scope-and-ownership.md
spec-tech
S0069 phase 01 scope and ownership
2026-05-03 19:08:44
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_02__smb-cancellation-propagation.md
spec-tech
S0069 phase 02 SMB cancellation propagation
2026-05-03 19:08:44
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_03__atomic-result-contract.md
spec-tech
S0069 phase 03 atomic result contract
2026-05-03 19:08:44
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_04__postcondition-and-cleanup.md
spec-tech
S0069 phase 04 postcondition and cleanup
2026-05-03 19:08:44
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_05__regression-entrypoints-tests.md
spec-tech
S0069 phase 05 regression entrypoints and tests
2026-05-03 19:08:44
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_06__docs-catalog-cleanup.md
spec-tech
S0069 phase 06 docs catalog cleanup
2026-05-03 19:08:44
PLAN/spec-catalog.jsonl
spec-catalog
S0069 status advanced to Tactical
2026-05-03 19:12:36
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/INDEX.md
spec-update
S0069 execution blockers moved into Phase 01 ownership
2026-05-03 19:15:00
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperations.kt
SmbFileOperations.downloadFile
S0069 Step 02.1 rethrow CancellationException before SMB download failure log
2026-05-03 19:15:41
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperations.kt
SmbFileOperations.uploadFile
S0069 Step 02.2 rethrow CancellationException before SMB upload failure log
2026-05-03 19:16:32
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SmbOperationStrategy.kt
SmbOperationStrategy cancellation path
S0069 Step 02.3 rethrow CancellationException in SMB strategy helpers
2026-05-03 19:19:05
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
AtomicCopyOutcome
S0069 Step 03.1 add explicit atomic outcome model
2026-05-03 19:19:26
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
AtomicFileOperationStrategy.copyFile cancellation
S0069 Step 03.2 explicit cancellation branch before generic atomic copy error
2026-05-03 19:20:31
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
AtomicFileOperationStrategy branch helpers
S0069 Step 03.3 extract success cancelled failed helpers inside atomic layer
2026-05-03 19:23:23
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
verifyTempPostCondition
S0069 Step 04.1 add cheap temp post-condition helper
2026-05-03 19:24:47
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
temp-missing-invariant
S0069 Step 04.2 add structured invariant marker with source temp destination
2026-05-03 19:24:47
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
completeCopyOutcome
S0069 Step 04.3 collapse temp cleanup to one decision point
2026-05-03 19:27:55
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategyTest.kt
AtomicFileOperationStrategyTest scaffold
S0069 Step 05.1 create focused atomic copy test scaffold
2026-05-03 19:28:25
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategyTest.kt
AtomicFileOperationStrategy success test
S0069 Step 05.2 add success rename and destination-exists coverage
2026-05-03 19:28:58
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategyTest.kt
AtomicFileOperationStrategy negative tests
S0069 Step 05.3 add cancellation cleanup and missing-temp postcondition coverage
2026-05-03 19:53:17
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/INDEX.md
S0069 tactical index
Recorded external unit-test validation blocker for Phase 05
2026-05-03 19:53:17
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_05__regression-entrypoints-tests.md
S0069 phase 05
Recorded audit pass and unrelated unit-test compile blocker
2026-05-03 20:02:20
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
SendResourcesToWatchUseCaseTest
Added missing fake repository methods so S0069 narrow unit-test gate can compile
2026-05-03 20:08:47
PLAN/S0069_bugfix-atomic-copy-temp-file-missing.md
spec-check
Audit S0069 -> Verified; inline Last Audit updated
2026-05-03 20:08:47
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/INDEX.md
spec-check
Audit S0069 -> Verified; tactical index marked Done
2026-05-03 20:08:47
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_05__regression-entrypoints-tests.md
spec-check
Closed Phase 05 after passing narrow unit-test and compile gates
2026-05-03 20:08:48
PLAN/S0069_bugfix-atomic-copy-temp-file-missing/PHASE_06__docs-catalog-cleanup.md
spec-check
Closed Phase 06 after catalog sync and verified audit verdict
2026-05-03 20:08:57
dev/CATALOG/app_v2.jsonl
catalog
S0069: regenerate catalog after audit and transfer/test updates
2026-05-03 20:08:57
dev/CATALOG/app_v2.md
catalog
S0069: regenerate catalog after audit and transfer/test updates
2026-05-03 20:20:24
app_v2/src/test/java/com/sza/fastmediasorter/data/network/smb/SmbConnectionManagerTest.kt
SmbConnectionManagerTest
Sync stale unit-test expectations with getClient/degraded-retry path for non-VR SMB regression validation
2026-05-03 20:21:05
dev/CATALOG/app_v2.jsonl
catalog
Refresh catalog after SmbConnectionManagerTest regression validation fix
2026-05-03 20:21:05
dev/CATALOG/app_v2.md
catalog
Refresh catalog after SmbConnectionManagerTest regression validation fix
2026-05-03 20:27:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
BrowseResourceLoadManager
S0068: show STOP immediately for SMB/SFTP/FTP scans; keep delayed STOP for local/cloud
2026-05-03 20:28:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt
BrowseObserverManager
S0068: render SMB scan progress as N or N / ~M and sync progress accessibility text
2026-05-03 20:28:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseState.kt
BrowseState
S0068: update scan-cancellable state comment to match immediate network STOP behavior
2026-05-03 20:29:42
dev/CATALOG/app_v2.jsonl
catalog
Refresh catalog after S0068 browse scan progress polish
2026-05-03 20:29:42
dev/CATALOG/app_v2.md
catalog
Refresh catalog after S0068 browse scan progress polish
2026-05-03 20:29:42
docs/FEATURES.md
FEATURES
S0068: update scan-progress bullet for immediate network STOP and SMB file counter
2026-05-03 20:29:42
docs/FEATURES_RU.md
FEATURES_RU
S0068: update scan-progress bullet for immediate network STOP and SMB file counter
2026-05-03 20:29:42
docs/FEATURES_UK.md
FEATURES_UK
S0068: update scan-progress bullet for immediate network STOP and SMB file counter
2026-05-03 20:29:42
PLAN/S0068_scan-progress-indicator.md
S0068
Mark strategic spec implemented after direct S0068 browse scan progress polish
2026-05-03 20:56:02
PLAN/S0035_android17-local-network-permission.md
S0035
Promoted strategic spec status from Draft to Approved to unblock /spec-tech
2026-05-03 21:07:41
PLAN/S0035_android17-local-network-permission.md
S0035
Advanced strategic spec to Tactical and linked tactical INDEX
2026-05-03 21:07:41
PLAN/S0035_android17-local-network-permission/INDEX.md
S0035 INDEX
Created 7-phase tactical execution index for local-network permission rollout
2026-05-03 21:07:41
PLAN/S0035_android17-local-network-permission/PHASE_01__manifest-sdk-guard.md
S0035 Phase 01
Planned manifest declaration and API37 guard strategy
2026-05-03 21:07:41
PLAN/S0035_android17-local-network-permission/PHASE_02__permission-contract.md
S0035 Phase 02
Planned typed local-network permission-denied contract
2026-05-03 21:07:42
PLAN/S0035_android17-local-network-permission/PHASE_03__ui-rationale-settings.md
S0035 Phase 03
Planned trilingual rationale copy and Settings permission surface
2026-05-03 21:07:42
PLAN/S0035_android17-local-network-permission/PHASE_04__addresource-entrypoints.md
S0035 Phase 04
Planned Add Resource discovery and share-scan permission gating
2026-05-03 21:07:42
PLAN/S0035_android17-local-network-permission/PHASE_05__protocol-readers.md
S0035 Phase 05
Planned playback scanner and thumbnail reader permission gating
2026-05-03 21:07:42
PLAN/S0035_android17-local-network-permission/PHASE_06__cast-guard.md
S0035 Phase 06
Planned Cast init and chooser permission guard
2026-05-03 21:07:43
PLAN/S0035_android17-local-network-permission/PHASE_07__docs-catalog-cleanup.md
S0035 Phase 07
Planned docs catalog and spec-check cleanup phase
2026-05-03 21:07:43
PLAN/spec-catalog.jsonl
spec-catalog
Advanced S0035 journal status to Tactical after tactical plan generation
2026-05-03 22:40:22
PLAN/S0070_device-storage-info-settings.md
spec
Add strategic spec S0070 for device-storage-info-settings
2026-05-03 22:42:26
PLAN/S0070_device-storage-info-settings/INDEX.md
spec-tech
Create tactical plan for S0070
2026-05-03 22:42:26
PLAN/S0070_device-storage-info-settings/PHASE_01__domain-usecase-and-viewmodel.md
spec-tech
Phase 01: domain-usecase-and-viewmodel
2026-05-03 22:42:26
PLAN/S0070_device-storage-info-settings/PHASE_02__fragment-integration.md
spec-tech
Phase 02: fragment-integration
2026-05-03 22:42:26
PLAN/S0070_device-storage-info-settings/PHASE_03__ui-layout.md
spec-tech
Phase 03: ui-layout
2026-05-03 22:42:26
PLAN/S0070_device-storage-info-settings/PHASE_04__string-resources.md
spec-tech
Phase 04: string-resources
2026-05-03 22:42:26
PLAN/S0070_device-storage-info-settings/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-03 22:42:26
PLAN/S0070_device-storage-info-settings.md
spec-tech
Status -> Tactical
2026-05-03 22:49:16
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/DeviceStorageState.kt
feature
S0070 step 01.1: Add DeviceStorageState sealed class
2026-05-03 22:49:49
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetDeviceStorageUseCase.kt
feature
S0070 step 01.2: Add GetDeviceStorageUseCase for disk query
2026-05-03 22:52:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
feature
S0070 steps 01.3+01.4: Add deviceStorage StateFlow and refreshDeviceStorage()
2026-05-03 22:56:08
app_v2/src/main/res/values/strings.xml
feature
S0070 step 04.1: Add device storage info strings (EN)
2026-05-03 22:57:29
app_v2/src/main/res/values-ru/strings.xml
feature
S0070 step 04.2: Add device storage info strings (RU)
2026-05-03 22:57:29
app_v2/src/main/res/values-uk/strings.xml
feature
S0070 step 04.3: Add device storage info strings (UK)
2026-05-03 22:59:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
feature
S0070 phase 02: Integrate deviceStorage StateFlow and refresh button
2026-05-03 23:01:05
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
SftpDataSource
Fix ArrayIndexOutOfBoundsException: wrap JSch InputStream in FilterInputStream capping reads to 1024 bytes (JSch internal SFTP packet size) before BufferedInputStream to prevent JSch skip() bug crashing MP3 playback over SFTP
2026-05-03 23:01:34
app_v2/src/main/res/values/dimens.xml
feature
S0070 step 03.1: Add device storage layout dimensions
2026-05-03 23:01:34
app_v2/src/main/res/layout/fragment_settings_general.xml
feature
S0070 step 03.2: Add device storage info container and controls
2026-05-03 23:06:59
docs/FEATURES.md
feature
S0070 step 05.1: Add device storage info to feature list (EN)
2026-05-03 23:06:59
docs/FEATURES_RU.md
feature
S0070 step 05.2: Add device storage info to feature list (RU)
2026-05-03 23:06:59
docs/FEATURES_UK.md
feature
S0070 step 05.3: Add device storage info to feature list (UK)
2026-05-03 23:06:59
dev/CATALOG/app_v2.jsonl
catalog
S0070 step 05.4: Regenerate catalog after GetDeviceStorageUseCase, DeviceStorageState
2026-05-03 23:10:28
PLAN/S0070_device-storage-info-settings.md
spec-check
Audit S0070 -> Verified; PASS/WARN/FAIL 14/0/0
2026-05-03 23:14:52
app_v2/src/main/res/layout/fragment_settings_general.xml
containerDeviceStorageInfo
S0070 fix: remove weight from textDeviceStorageValue so refresh button sits immediately after text
2026-05-03 23:15:23
app_v2/src/main/res/layout-land/fragment_settings_general.xml
containerDeviceStorageInfo
S0070: Add device storage info row to landscape layout
2026-05-03 23:18:49
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
SftpDataSource
Transparent reconnect on transient JSch read error: one internal reconnect before propagating to ExoPlayer; downgrade close() cascade exception log from E to D when channel was already broken
2026-05-03 23:29:43
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/TsPacketFormat.kt
S0054 Phase 01 Step 01.1
Add TsPacketFormat enum (BD_192, STANDARD_188, UNKNOWN) for TS packet format detection
2026-05-03 23:30:15
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/TsPacketFormatDetector.kt
S0054 Phase 01 Step 01.2
Add TsPacketFormatDetector: pure-Kotlin object detects BD_192 vs STANDARD_188 by probing 576 bytes
2026-05-03 23:30:57
app_v2/src/test/java/com/sza/fastmediasorter/data/network/datasource/TsPacketFormatDetectorTest.kt
S0054 Phase 01 Step 01.3
Add unit tests for TsPacketFormatDetector: BD_192, STANDARD_188, UNKNOWN, short probe, all-zero
2026-05-03 23:35:11
PLAN/S0071_use-trash-setting.md
spec
Add strategic spec S0071 for use-trash-setting
2026-05-03 23:40:41
PLAN/S0071_use-trash-setting/INDEX.md
spec-tech
Create tactical plan for S0071
2026-05-03 23:40:41
PLAN/S0071_use-trash-setting/PHASE_01__settings-ui.md
spec-tech
Phase 01: settings-ui
2026-05-03 23:40:41
PLAN/S0071_use-trash-setting/PHASE_02__browse-delete-fix.md
spec-tech
Phase 02: browse-delete-fix
2026-05-03 23:40:41
PLAN/S0071_use-trash-setting/PHASE_03__player-delete-fix.md
spec-tech
Phase 03: player-delete-fix
2026-05-03 23:40:41
PLAN/S0071_use-trash-setting/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-03 23:40:41
PLAN/S0071_use-trash-setting.md
spec-tech
Status -> Tactical
2026-05-03 23:41:58
app_v2/src/main/res/values/strings.xml
S0071
Add tooltip_use_trash strings (EN)
2026-05-03 23:41:58
app_v2/src/main/res/values-ru/strings.xml
S0071
Add tooltip_use_trash strings (RU)
2026-05-03 23:41:58
app_v2/src/main/res/values-uk/strings.xml
S0071
Add tooltip_use_trash strings (UK)
2026-05-03 23:42:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BdTsPlaybackHelper.kt
S0054 Phase 02 Step 02.1
Add wrapForBdTs(TsPacketFormat) and detectTsFormatSuspend extensions for byte-level BD-TS detection
2026-05-03 23:42:56
app_v2/src/main/res/layout/fragment_settings_destinations.xml
S0071
Add layoutUseTrash row to Safety section
2026-05-03 23:43:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
S0054 Phase 02 Step 02.2
Replace wrapForBdTs(path) with byte-level detectTsFormatSuspend + wrapForBdTs(format)
2026-05-03 23:43:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
S0071
Wire switchUseTrash in Settings UI
2026-05-03 23:44:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
S0054 Phase 02 Step 02.3
Replace wrapForBdTs(path) with byte-level detectTsFormatSuspend + wrapForBdTs(format)
2026-05-03 23:44:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
S0054 Phase 02 Step 02.3
Replace wrapForBdTs(path) with byte-level detectTsFormatSuspend + wrapForBdTs(format)
2026-05-03 23:45:27
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/BdTsStripDataSource.kt
S0054 Phase 02 Step 02.4
Fix open() bdPos: use packetIndex*192 instead of +4+intraPacket; upstream now opens at BD-packet boundary
2026-05-03 23:45:27
app_v2/src/test/java/com/sza/fastmediasorter/data/network/datasource/BdTsStripDataSourceTest.kt
S0054 Phase 02 Step 02.4
Add boundary-condition unit tests for BdTsStripDataSource (single packet, two packets, bdPos, truncated)
2026-05-03 23:46:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteManager.kt
S0071
Honour useTrash setting in browse delete path
2026-05-03 23:46:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
S0071
Pass settingsRepository to BrowseDeleteManager
2026-05-03 23:48:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDeleteUndoCoordinator.kt
S0071
Honour useTrash setting in player delete path
2026-05-03 23:51:38
app_v2/src/main/AndroidManifest.xml, app_v2/src/main/java/com/sza/fastmediasorter/core/util/GmsAvailabilityChecker.kt, app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt, app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
GMS
Remove JobInfoSchedulerService from manifest to prevent ANR on outdated Google Play Services; add GmsAvailabilityChecker; show non-blocking Snackbar with update action when GMS is outdated or unavailable
2026-05-03 23:53:21
app_v2/src/main/res/values/strings.xml
strings
S0054 Phase 05: fix error_bdts_format_message (remove network-source wording), add warning_m2ts_audio_unsupported + title
2026-05-03 23:53:26
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0054 Phase 05: fix error_bdts_format_message, add warning_m2ts_audio_unsupported + title (RU)
2026-05-03 23:53:26
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0054 Phase 05: fix error_bdts_format_message, add warning_m2ts_audio_unsupported + title (UK)
2026-05-03 23:55:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LocalPlaybackHelper.kt
LocalPlaybackHelper
S0054 Phase 03: add BD-TS detection + player recreation for local .m2ts/.m2t files (non-content:// paths)
2026-05-03 23:56:06
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
spec-dev S0071
Change useTrash default from true to false
2026-05-03 23:56:06
app_v2/src/main/java/com/sza/fastmediasorter/data/local/preferences/SettingsManager.kt
spec-dev S0071
Change useTrash DataStore fallback from true to false
2026-05-03 23:56:06
app_v2/src/main/res/layout/fragment_settings_destinations.xml
spec-dev S0071
Add btnClearTrash ImageButton next to switchUseTrash in layoutUseTrash row
2026-05-03 23:56:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
spec-dev S0071
Inject CleanupTrashUseCase; add clearAllTrash() method
2026-05-03 23:56:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
spec-dev S0071
Wire btnClearTrash visibility and click handler
2026-05-03 23:59:18
docs/FEATURES.md
spec-dev S0071
Add Move to trash toggle feature bullet
2026-05-03 23:59:18
docs/FEATURES_RU.md
spec-dev S0071
Add Переключатель корзины feature bullet (RU)
2026-05-03 23:59:18
docs/FEATURES_UK.md
spec-dev S0071
Add Перемикач кошика feature bullet (UK)
2026-05-03 23:59:18
dev/CATALOG/app_v2.jsonl
spec-dev S0071
Regenerate catalog after S0071 changes
2026-05-03 23:59:18
dev/CATALOG/app_v2.md
spec-dev S0071
Render catalog after S0071 changes
2026-05-04 00:00:19
PLAN/S0071_use-trash-setting.md
spec-dev S0071
Status Implemented; update spec: default=false, Clear Trash button feature
2026-05-04 00:00:19
PLAN/S0071_use-trash-setting/INDEX.md
spec-dev S0071
All 4 phases Done (4/4)
2026-05-04 00:00:19
PLAN/S0071_use-trash-setting/PHASE_04__docs-catalog-cleanup.md
spec-dev S0071
Phase 04 Done (3/3 steps)
2026-05-04 00:02:57
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/LocalOperationStrategy.kt
LocalOperationStrategy
add @Inject constructor + @ApplicationContext to fix pre-existing Hilt MissingBinding (used by CleanupTrashUseCase, RestoreDeletedUseCase)
2026-05-04 00:02:57
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SmbOperationStrategy.kt
SmbOperationStrategy
add @Inject constructor + @ApplicationContext to fix pre-existing Hilt MissingBinding
2026-05-04 00:02:57
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SftpOperationStrategy.kt
SftpOperationStrategy
add @Inject constructor + @ApplicationContext to fix pre-existing Hilt MissingBinding
2026-05-04 00:02:58
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/FtpOperationStrategy.kt
FtpOperationStrategy
add @Inject constructor + @ApplicationContext to fix pre-existing Hilt MissingBinding
2026-05-04 00:02:58
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/CloudOperationStrategy.kt
CloudOperationStrategy
add @Inject constructor + @ApplicationContext to fix pre-existing Hilt MissingBinding
2026-05-04 00:03:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
spec-dev S0071
Fix Hilt DI: remove CleanupTrashUseCase dep, use File.deleteRecursively in clearAllTrash()
2026-05-04 00:11:44
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetDeviceStorageUseCase.kt
GetDeviceStorageUseCase
Fix: use Environment.getExternalStorageDirectory() instead of ‘/’ for correct internal storage query
2026-05-04 00:22:33
PLAN/S0073_player-copy-move-custom-path-button.md
spec
Add strategic spec S0073 for player-copy-move-custom-path-button
2026-05-04 00:30:15
PLAN/S0073_player-copy-move-custom-path-button/INDEX.md
spec-tech
Create tactical plan for S0073
2026-05-04 00:30:15
PLAN/S0073_player-copy-move-custom-path-button/PHASE_01__path-operations-extension.md
spec-tech
Phase 01: path-operations-extension
2026-05-04 00:30:15
PLAN/S0073_player-copy-move-custom-path-button/PHASE_02__player-folder-picker.md
spec-tech
Phase 02: player-folder-picker
2026-05-04 00:30:15
PLAN/S0073_player-copy-move-custom-path-button/PHASE_03__dotdot-button-ui.md
spec-tech
Phase 03: dotdot-button-ui
2026-05-04 00:30:15
PLAN/S0073_player-copy-move-custom-path-button/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-04 00:30:15
PLAN/S0073_player-copy-move-custom-path-button.md
spec-tech
Status -> Tactical
2026-05-04 00:31:26
PLAN/S0072_downloads-auto-destination.md
spec
Add strategic spec S0072 for downloads-auto-destination
2026-05-04 00:34:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
S0073 Phase 01
Add performCopyToPath/performMoveToPath + onCopyToPathSuccess/onMoveToPathSuccess to interface
2026-05-04 00:34:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0073 Phase 01
Implement onCopyToPathSuccess/onMoveToPathSuccess in FileOperationCallback anonymous object
2026-05-04 00:35:56
PLAN/S0072_downloads-auto-destination/INDEX.md
spec-tech
Create tactical plan for S0072
2026-05-04 00:35:56
PLAN/S0072_downloads-auto-destination/PHASE_01__string-and-use-case.md
spec-tech
Phase 01: string-and-use-case
2026-05-04 00:35:56
PLAN/S0072_downloads-auto-destination/PHASE_02__viewmodel-wiring.md
spec-tech
Phase 02: viewmodel-wiring
2026-05-04 00:35:56
PLAN/S0072_downloads-auto-destination/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-04 00:35:56
PLAN/S0072_downloads-auto-destination.md
spec-tech
Status -> Tactical
2026-05-04 00:36:53
app_v2/src/main/res/values/strings.xml
S0072
Add resource_name_downloads string (EN)
2026-05-04 00:37:17
app_v2/src/main/res/values-ru/strings.xml
S0072
Add resource_name_downloads string (RU)
2026-05-04 00:37:42
app_v2/src/main/res/values-uk/strings.xml
S0072
Add resource_name_downloads string (UK)
2026-05-04 00:38:28
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDownloadsDestinationUseCase.kt
S0072
New use case: auto-provision Downloads as first destination
2026-05-04 00:39:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerFolderPickerHandler.kt
S0073 Phase 02
New: player folder-picker handler for custom copy/move destination
2026-05-04 00:39:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0073 Phase 02
Add folderPickerLauncher (OpenDocumentTree) + playerFolderPickerHandler field
2026-05-04 00:39:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0073 Phase 02
Init PlayerFolderPickerHandler; implement onCustomPathPickerRequested in DestinationButtonsCallback
2026-05-04 00:39:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt
S0073 Phase 02
Add onCustomPathPickerRequested to DestinationButtonsCallback + FileOperationType import
2026-05-04 00:44:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt
spec-dev
S0073 step 03.3: remove if(!hasDestinations) panel-hiding guard
2026-05-04 00:44:45
app_v2/src/main/res/values/strings.xml
DestinationButtonsManager
Add missing btn_select_folder_description string (EN)
2026-05-04 00:44:45
app_v2/src/main/res/values-ru/strings.xml
DestinationButtonsManager
Add missing btn_select_folder_description string (RU)
2026-05-04 00:44:45
app_v2/src/main/res/values-uk/strings.xml
DestinationButtonsManager
Add missing btn_select_folder_description string (UK)
2026-05-04 00:46:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0072
Wire ProvisionDownloadsDestinationUseCase into init block
2026-05-04 00:49:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
S0073
Add performCopyToPath/performMoveToPath + callback methods
2026-05-04 00:49:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0073
Register folderPickerLauncher; add playerFolderPickerHandler field
2026-05-04 00:49:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0073
Init PlayerFolderPickerHandler; wire onCustomPathPickerRequested callback
2026-05-04 00:49:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerFolderPickerHandler.kt
S0073
New: player folder-picker handler for custom copy/move destination
2026-05-04 00:49:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt
S0073
Add .. button to Copy/Move grids; always show panels
2026-05-04 00:49:02
app_v2/src/main/res/values/strings.xml
S0073
Add btn_select_folder_description (EN)
2026-05-04 00:49:02
app_v2/src/main/res/values-ru/strings.xml
S0073
Add btn_select_folder_description (RU)
2026-05-04 00:49:02
app_v2/src/main/res/values-uk/strings.xml
S0073
Add btn_select_folder_description (UK)
2026-05-04 00:49:02
docs/FEATURES.md
S0073
Document .. folder-picker button in player panels
2026-05-04 00:49:03
docs/FEATURES_RU.md
S0073
Document .. folder-picker button in player panels (RU)
2026-05-04 00:49:03
docs/FEATURES_UK.md
S0073
Document .. folder-picker button in player panels (UK)
2026-05-04 00:51:54
PLAN/S0073_player-copy-move-custom-path-button.md
spec-check
Audit S0073 -> Verified; PASS 18 / WARN 0 / FAIL 0 / MANUAL 8
2026-05-04 00:52:45
app_v2/src/main/res/values/strings.xml
S0072
Add resource_name_downloads string (EN)
2026-05-04 00:52:45
app_v2/src/main/res/values-ru/strings.xml
S0072
Add resource_name_downloads string (RU)
2026-05-04 00:52:45
app_v2/src/main/res/values-uk/strings.xml
S0072
Add resource_name_downloads string (UK)
2026-05-04 00:52:51
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDownloadsDestinationUseCase.kt
S0072
New use case: auto-provision Downloads as first destination
2026-05-04 00:52:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0072
Wire ProvisionDownloadsDestinationUseCase into init block
2026-05-04 00:52:51
docs/FEATURES.md
S0072
Add Downloads pre-configured destination bullet
2026-05-04 00:52:51
docs/FEATURES_RU.md
S0072
Add Downloads pre-configured destination bullet (RU)
2026-05-04 00:52:51
docs/FEATURES_UK.md
S0072
Add Downloads pre-configured destination bullet (UK)
2026-05-04 00:54:45
PLAN/S0072_downloads-auto-destination.md
spec-check
Audit S0072 -> Verified; PASS/WARN/FAIL 19/0/0
2026-05-04 01:03:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt
S0073-fix
Render «..» as last button in last row, not a separate row; narrow button sizing
2026-05-04 01:07:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BdTsPlaybackHelper.kt
BdTsPlaybackHelper
Add buildBdTsMediaSourceFactory: sets FLAG_IGNORE_SPLICE_INFO_STREAM to suppress ExoPlayer SCTE-35 crash on Blu-ray TS
2026-05-04 01:07:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
SmbPlaybackHelper
Use buildBdTsMediaSourceFactory instead of bare DefaultMediaSourceFactory for BD-TS player setup
2026-05-04 01:07:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
SftpPlaybackHelper
Use buildBdTsMediaSourceFactory instead of bare DefaultMediaSourceFactory for BD-TS player setup
2026-05-04 01:07:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
FtpPlaybackHelper
Use buildBdTsMediaSourceFactory instead of bare DefaultMediaSourceFactory for BD-TS player setup
2026-05-04 01:07:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LocalPlaybackHelper.kt
LocalPlaybackHelper
Use buildBdTsMediaSourceFactory instead of bare DefaultMediaSourceFactory for BD-TS local file player setup
2026-05-04 01:15:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BdTsPlaybackHelper.kt
BdTsPlaybackHelper
Fix import: FLAG_IGNORE_SPLICE_INFO_STREAM is in DefaultTsPayloadReaderFactory (not TsExtractor) in Media3 1.2.1; use 2-arg DefaultMediaSourceFactory constructor
2026-05-04 01:19:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt
CloudPlaybackHelper
Phase 04: make suspend, add BD-TS format detection, use buildBdTsMediaSourceFactory with SCTE-35 suppression
2026-05-04 01:22:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Phase 06: add audioUnsupportedShownForPath guard + onTracksChanged audio diagnostics Toast for .m2ts files with all-unsupported audio tracks
2026-05-04 01:25:15
PLAN/S0074_copy-move-dialog-progress.md
spec
Add strategic spec S0074 for copy-move dialog progress (%, speed, ETA)
2026-05-04 01:27:49
docs/FEATURES.md
S0054
BD-TS auto-detect + audio diagnostics bullet
2026-05-04 01:27:49
docs/FEATURES_RU.md
S0054
BD-TS auto-detect + audio diagnostics bullet RU
2026-05-04 01:27:49
docs/FEATURES_UK.md
S0054
BD-TS auto-detect + audio diagnostics bullet UK
2026-05-04 01:31:02
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkFileModelLoader.kt
NetworkFileModelLoader
Add vob/ts/m2ts/mts/m2t/ifo/bup to VIDEO_EXTENSIONS to prevent NetworkFileDataFetcher from downloading and failing to validate DVD/TS container files as images
2026-05-04 01:31:07
PLAN/S0074_copy-move-dialog-progress/INDEX.md
spec-tech
Create tactical plan for S0074
2026-05-04 01:31:07
PLAN/S0074_copy-move-dialog-progress/PHASE_01__domain-total-bytes.md
spec-tech
Phase 01: domain-total-bytes
2026-05-04 01:31:07
PLAN/S0074_copy-move-dialog-progress/PHASE_02__dialog-eta-percent.md
spec-tech
Phase 02: dialog-eta-percent
2026-05-04 01:31:07
PLAN/S0074_copy-move-dialog-progress/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-04 01:31:07
PLAN/S0074_copy-move-dialog-progress.md
spec-tech
Status -> Tactical
2026-05-04 01:35:04
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt
S0074
Add totalOperationBytes to Starting, completedOperationBytes+fileSizes to executeWithProgress
2026-05-04 01:39:54
app_v2/src/main/res/layout/dialog_file_operation_progress.xml
S0074
Add tvOverallPercent and tvEta views
2026-05-04 01:39:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationProgressDialog.kt
S0074
Show overall %, ETA with moving-average, 3s throttle, 100% on completion
2026-05-04 01:39:54
app_v2/src/main/res/values/strings.xml
S0074
Add transfer_overall_progress_desc, transfer_eta_desc (EN)
2026-05-04 01:39:54
app_v2/src/main/res/values-ru/strings.xml
S0074
Add transfer_overall_progress_desc, transfer_eta_desc (RU)
2026-05-04 01:39:54
app_v2/src/main/res/values-uk/strings.xml
S0074
Add transfer_overall_progress_desc, transfer_eta_desc (UK)
2026-05-04 01:40:01
PLAN/S0075_device-reach-google-play.md
spec
Add strategic spec S0075 for device-reach-google-play
2026-05-04 01:42:20
docs/FEATURES.md
S0074
Document copy/move progress % and ETA feature (EN)
2026-05-04 01:42:20
docs/FEATURES_RU.md
S0074
RU feature doc: copy/move % and ETA
2026-05-04 01:42:20
docs/FEATURES_UK.md
S0074
UK feature doc: copy/move % and ETA
2026-05-04 01:42:20
dev/CATALOG/app_v2.jsonl
S0074
Catalog regen after Phase 02 changes
2026-05-04 01:42:20
dev/CATALOG/app_v2.md
S0074
Catalog render after Phase 02 changes
2026-05-04 01:42:53
PLAN/S0075_device-reach-google-play/INDEX.md
spec-tech
Create tactical plan for S0075
2026-05-04 01:42:53
PLAN/S0075_device-reach-google-play/PHASE_01__manifest-hardening.md
spec-tech
Phase 01: manifest-hardening
2026-05-04 01:42:53
PLAN/S0075_device-reach-google-play/PHASE_02__console-verification.md
spec-tech
Phase 02: console-verification
2026-05-04 01:42:53
PLAN/S0075_device-reach-google-play/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-04 01:42:53
PLAN/S0075_device-reach-google-play.md
spec-tech
Status -> Tactical
2026-05-04 01:47:28
docs/FEATURES.md
S0074
Document copy/move progress % and ETA feature
2026-05-04 01:47:28
docs/FEATURES_RU.md
S0074
RU feature doc: copy/move % and ETA
2026-05-04 01:47:28
docs/FEATURES_UK.md
S0074
UK feature doc: copy/move % and ETA
2026-05-04 01:49:26
PLAN/S0074_copy-move-dialog-progress.md
spec-check
Audit S0074 -> Verified; PASS/WARN/FAIL 18/0/0
2026-05-04 01:57:08
PLAN/S0054_m2ts-playback-support.md
spec-update
Refined S0054 with TS/non-TS boundary and linked S0076/S0077
2026-05-04 01:57:08
PLAN/S0054_m2ts-playback-support/INDEX.md
spec-update
Linked field-log follow-up tickets for S0054 tactical plan
2026-05-04 01:57:08
PLAN/S0076_bugfix-vob-network-playback-routing.md
spec
Add strategic spec S0076 for VOB network playback routing
2026-05-04 01:57:08
PLAN/S0077_bugfix-network-video-thumbnail-routing-bdmv-dvd.md
spec
Add strategic spec S0077 for BDMV/DVD thumbnail routing
2026-05-04 02:02:08
PLAN/S0075_device-reach-google-play.md
spec-update
Resolve §6.1 §6.2; update §6.3 VR research; fix §12 link
2026-05-04 02:02:08
PLAN/S0075_device-reach-google-play/INDEX.md
spec-update
Check off resolved blockers §6.1 §6.2; clarify §6.3
2026-05-04 02:02:08
PLAN/S0075_device-reach-google-play/PHASE_01__manifest-hardening.md
spec-update
Remove §6.2 prerequisite from Step 1.2
2026-05-04 02:05:16
app_v2/src/main/AndroidManifest.xml
S0075
Add uses-feature required=false for wifi and touchscreen; add anyDensity=true to supports-screens
2026-05-04 02:05:22
PLAN/S0077_bugfix-network-video-thumbnail-routing-bdmv-dvd
S0077
Created tactical spec: INDEX + PHASE_01 (extend blocked extensions + i18n) + PHASE_02 (catalog/devlog); status -> Tactical
2026-05-04 02:06:43
PLAN/S0075_device-reach-google-play.md
spec-dev
Status -> Implemented
2026-05-04 02:08:08
PLAN/S0075_device-reach-google-play.md
spec-check
Audit S0075 -> Partial; PASS/WARN/FAIL 12/1/0
2026-05-04 02:11:15
PLAN/S0076_bugfix-vob-network-playback-routing.md
spec-tech
Promote S0076 to Tactical and resolve research items
2026-05-04 02:11:15
PLAN/S0076_bugfix-vob-network-playback-routing/INDEX.md
spec-tech
Create tactical index for S0076
2026-05-04 02:11:15
PLAN/S0076_bugfix-vob-network-playback-routing/PHASE_01__route-foundations.md
spec-tech
Create Phase 01 for S0076
2026-05-04 02:11:15
PLAN/S0076_bugfix-vob-network-playback-routing/PHASE_02__protocol-wiring.md
spec-tech
Create Phase 02 for S0076
2026-05-04 02:11:15
PLAN/S0076_bugfix-vob-network-playback-routing/PHASE_03__error-containment.md
spec-tech
Create Phase 03 for S0076
2026-05-04 02:11:15
PLAN/S0076_bugfix-vob-network-playback-routing/PHASE_04__strings-tests.md
spec-tech
Create Phase 04 for S0076
2026-05-04 02:11:15
PLAN/S0076_bugfix-vob-network-playback-routing/PHASE_05__docs-catalog-cleanup.md
spec-tech
Create Phase 05 for S0076
2026-05-04 02:31:12
PLAN/260504vr-research.md
260504vr-research
Research audit: incident log 2026-05-03 + VR complaints #1-5 mapped to existing specs
2026-05-04 02:51:55
PLAN/260504vr-research.md
260504vr-research
Full rewrite: replaced POCO/SMB findings with Quest 3 session data; incorporated parallel research root cause (layout-land NPE); documented SBS_FULL fallback bug and S0038/S0024/S0067 confirmations
2026-05-04 02:54:44
AGENTS.md
AGENTS
Add LAYOUT_ORIENTATION mandatory rule: portrait+landscape parity for res/layout/*.xml edits
2026-05-04 02:54:44
CLAUDE.md
Strict Rules
Add rule #12 LAYOUT_ORIENTATION: portrait+landscape parity check; renumber old 12→13
2026-05-04 02:54:44
.github/copilot-instructions.md
strict_constraints
Add LAYOUT_ORIENTATION constraint after UI_AMBIGUITY_GATE
2026-05-04 02:54:44
.claude/commands/spec-dev.md
spec-dev
Add landscape parity guard to Pre-edit guards and Constraints sections
2026-05-04 02:54:44
.claude/commands/spec-tech.md
spec-tech
Add landscape parity constraint to phase file authoring rules
2026-05-04 02:54:44
.claude/commands/quick.md
quick
Add LAYOUT_ORIENTATION warning block in Step 3
2026-05-04 02:54:48
CLAUDE.md
Strict Rules
Add rule #12 LAYOUT_ORIENTATION: portrait+landscape parity check; renumber old 12->13
2026-05-04 02:54:48
.github/copilot-instructions.md
strict_constraints
Add LAYOUT_ORIENTATION constraint after UI_AMBIGUITY_GATE
2026-05-04 02:54:48
.claude/commands/spec-dev.md
spec-dev
Add landscape parity guard to Pre-edit guards and Constraints sections
2026-05-04 02:54:48
.claude/commands/spec-tech.md
spec-tech
Add landscape parity constraint to phase file authoring rules
2026-05-04 02:54:48
.claude/commands/quick.md
quick
Add LAYOUT_ORIENTATION warning block in Step 3
2026-05-04 02:54:53
.github/copilot-instructions.md
strict_constraints
Add LAYOUT_ORIENTATION constraint after UI_AMBIGUITY_GATE
2026-05-04 02:54:53
.claude/commands/spec-dev.md
spec-dev
Landscape parity guard in Pre-edit guards and Constraints
2026-05-04 02:54:53
.claude/commands/spec-tech.md
spec-tech
Landscape parity constraint in phase authoring rules
2026-05-04 02:54:53
.claude/commands/quick.md
quick
LAYOUT_ORIENTATION warning block in Step 3
2026-05-04 03:09:08
PLAN/260504vr-research.md
260504vr-research
Audit update: corrected S0038/S0024 WORKING claims; added Appendix A user feedback audit; launchFlags anomaly reclassified to HIGH severity; removed duplicate SMB tail
2026-05-04 03:09:08
PLAN/S0024_vr-hud-ray-input.md
S0024
Status Verified->Broken: first on-device Quest 3 test failed; HUD swapchain 1024x256 unreadable; depends on S0080; mechanism correct but visually unusable
2026-05-04 03:09:08
PLAN/S0038_bugfix-vr-exit-immersive-new-window.md
S0038
Status->Broken: Phase01 confirmed in log (direct startActivity); new root cause = finishAndRemoveTask() missing; BROUGHT_TO_FRONT evidence at log:4580
2026-05-04 03:09:08
PLAN/S0078_bugfix-vr-sbs-full-half-layer-factory.md
S0078
New spec: bugfix DefaultVrLayerFactory SBS_FULL/SBS_HALF -> QUAD_CINEMA fallback; remove renderMode==FULL_STEREO guard; 2-line fix
2026-05-04 03:09:08
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe.md
S0079
New spec: bugfix layout-land/dialog_file_operation_progress.xml missing tvOverallPercent/tvEta; XML-only fix
2026-05-04 03:09:08
PLAN/S0080_enh-vr-hud-swapchain-resize.md
S0080
New spec: HUD swapchain 1024x256 -> proportional to eye buffer; S0024 depends on this; also investigate supersampling option
2026-05-04 03:09:15
PLAN/S0024_vr-hud-ray-input.md
S0024
Status Verified->Broken: first on-device Quest 3 test failed; HUD swapchain 1024x256 unreadable; depends on S0080; mechanism correct but visually unusable
2026-05-04 03:09:15
PLAN/S0038_bugfix-vr-exit-immersive-new-window.md
S0038
Status->Broken: Phase01 confirmed in log; new root cause = finishAndRemoveTask() missing; BROUGHT_TO_FRONT evidence at log:4580
2026-05-04 03:09:15
PLAN/S0078_bugfix-vr-sbs-full-half-layer-factory.md
S0078
New spec: bugfix DefaultVrLayerFactory SBS_FULL/SBS_HALF QUAD_CINEMA fallback; remove renderMode guard; 2-line fix
2026-05-04 03:09:15
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe.md
S0079
New spec: bugfix layout-land missing tvOverallPercent/tvEta; XML-only fix
2026-05-04 03:09:15
PLAN/S0080_enh-vr-hud-swapchain-resize.md
S0080
New spec: HUD swapchain scale by eye buffer ratio; S0024 unblocked after this
2026-05-04 10:08:07
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkThumbnailExtractionPolicy.kt
NetworkThumbnailExtractionPolicy
S0077: added vob/m2ts/mts/m2t/ts/ifo/bup to BLOCKED_EXTENSIONS - prevents NoModelLoaderAvailableException on optical-disc network browse
2026-05-04 10:08:07
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0077: added thumbnail_unavailable_network_format RU translation (S0063 gap)
2026-05-04 10:08:07
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0077: added thumbnail_unavailable_network_format UK translation (S0063 gap)
2026-05-04 10:09:16
PLAN/S0077_bugfix-network-video-thumbnail-routing-bdmv-dvd.md
spec-check
Audit S0077 -> Verified; PASS/WARN/FAIL 9/0/0
2026-05-04 10:09:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NetworkPlaybackContainerHint.kt
S0076 Phase 01
New enum for network container classification: M2TS_TS_CANDIDATE, DVD_PS_VOB, OTHER; pure path-based helper fromPath()
2026-05-04 10:09:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BdTsPlaybackHelper.kt
S0076 Phase 01
Add shouldUseBdTsStripper(); UNKNOWN is now pass-through, stripping opt-in only for BD_192
2026-05-04 10:09:18
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/BdTsPlaybackHelperTest.kt
S0076 Phase 01
Unit tests for NetworkPlaybackContainerHint.fromPath and shouldUseBdTsStripper
2026-05-04 10:12:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
S0076 Phase 02
Replace raw extension checks with NetworkPlaybackContainerHint; DVD_PS_VOB explicit branch on pass-through
2026-05-04 10:12:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
S0076 Phase 02
Replace raw extension checks with NetworkPlaybackContainerHint; TS probe only for M2TS_TS_CANDIDATE
2026-05-04 10:12:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
S0076 Phase 02
Replace raw extension checks with NetworkPlaybackContainerHint; TS probe only for M2TS_TS_CANDIDATE
2026-05-04 10:12:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt
S0076 Phase 02
Replace isMts check with NetworkPlaybackContainerHint.fromPath for consistent container routing
2026-05-04 10:15:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0076 Phase 03
Add onNetworkContainerRouteError to PlayerCallback; branch DVD_PS_VOB route errors before generic auto-next skip
2026-05-04 10:15:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
S0076 Phase 03
Implement onNetworkContainerRouteError: show blocking dialog without delegating to handleMediaLoadErrorAndSkip
2026-05-04 10:17:07
app_v2/src/main/res/values/strings.xml
S0076 Phase 04
Add error_vob_route_title and error_vob_route_message strings (EN)
2026-05-04 10:17:07
app_v2/src/main/res/values-ru/strings.xml
S0076 Phase 04
Add error_vob_route_title and error_vob_route_message strings (RU)
2026-05-04 10:17:07
app_v2/src/main/res/values-uk/strings.xml
S0076 Phase 04
Add error_vob_route_title and error_vob_route_message strings (UK)
2026-05-04 10:17:07
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VideoPlayerManagerRouteErrorTest.kt
S0076 Phase 04
Regression tests for VOB route error path vs generic error path
2026-05-04 10:17:07
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImplTest.kt
S0076 Phase 04
Narrow unit tests for VOB route callback contract
2026-05-04 10:21:50
docs/FEATURES.md
S0076 Phase 05
Add network DVD VOB routing fix bullet to Video Player section
2026-05-04 10:21:50
docs/FEATURES_RU.md
S0076 Phase 05
Add network DVD VOB routing fix bullet (RU)
2026-05-04 10:21:50
docs/FEATURES_UK.md
S0076 Phase 05
Add network DVD VOB routing fix bullet (UK)
2026-05-04 10:21:50
dev/CATALOG/app_v2.jsonl
S0076 Phase 05
Catalog regenerated after S0076 Kotlin changes; role set for NetworkPlaybackContainerHint
2026-05-04 10:21:50
dev/CATALOG/app_v2.md
S0076 Phase 05
Catalog markdown re-rendered after S0076 changes
2026-05-04 10:25:03
PLAN/S0076_bugfix-vob-network-playback-routing.md
spec-check
Audit S0076 -> Verified; PASS/WARN/FAIL 42/0/0
2026-05-04 12:23:11
app_v2/src/main/AndroidManifest.xml
AndroidManifest.xml
S0075: add android.hardware.faketouch required=false to prevent filtering of DPAD/trackball-only devices
2026-05-04 14:31:44
app_v2/src/main/java/com/sza/fastmediasorter/vr/render/DefaultVrLayerFactory.kt
S0078
Remove renderMode==FULL_STEREO guard from SBS branch - SBS_FULL/SBS_HALF now always route to projectionDescriptor regardless of renderMode
2026-05-04 14:40:02
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe.md
spec
Add strategic spec S0079 for bugfix-file-op-progress-dialog-landscape-npe
2026-05-04 14:40:07
docs/FEATURES.md
doc-update
Add Android TV box use-case section and summary table row (S0075)
2026-05-04 14:40:07
docs/FEATURES_RU.md
doc-update
Add Android TV box use-case section and summary table row (S0075, RU)
2026-05-04 14:40:07
docs/FEATURES_UK.md
doc-update
Add Android TV box use-case section and summary table row (S0075, UK)
2026-05-04 14:40:07
index.html
doc-update
Add Android TV box usage scenario card; update meta keywords
2026-05-04 14:40:07
index-ru.html
doc-update
Add Android TV box usage scenario card (RU)
2026-05-04 14:40:07
index-uk.html
doc-update
Add Android TV box usage scenario card (UK)
2026-05-04 14:41:34
PLAN/S0081_tv-remote-key-coverage.md
spec
Add strategic spec S0081 for tv-remote-key-coverage
2026-05-04 14:42:43
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe/INDEX.md
spec-tech
Create tactical plan for S0079
2026-05-04 14:42:43
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe/PHASE_01__landscape-layout-fix.md
spec-tech
Phase 01: landscape-layout-fix
2026-05-04 14:42:43
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-04 14:42:43
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe.md
spec-tech
Status -> Tactical
2026-05-04 14:44:51
app_v2/src/main/res/layout-land/dialog_file_operation_progress.xml
S0079
Add missing tvOverallPercent and tvEta TextViews to landscape layout
2026-05-04 14:51:40
PLAN/S0081_tv-remote-key-coverage/INDEX.md
spec-tech
Create tactical plan for S0081
2026-05-04 14:51:40
PLAN/S0081_tv-remote-key-coverage/PHASE_01__manifest-leanback.md
spec-tech
Phase 01: manifest-leanback
2026-05-04 14:51:40
PLAN/S0081_tv-remote-key-coverage/PHASE_02__tv-key-routing.md
spec-tech
Phase 02: tv-key-routing
2026-05-04 14:51:40
PLAN/S0081_tv-remote-key-coverage/PHASE_03__focus-traversal.md
spec-tech
Phase 03: focus-traversal
2026-05-04 14:51:41
PLAN/S0081_tv-remote-key-coverage/PHASE_04__dpad-acceleration.md
spec-tech
Phase 04: dpad-acceleration
2026-05-04 14:51:41
PLAN/S0081_tv-remote-key-coverage/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-04 14:51:41
PLAN/S0081_tv-remote-key-coverage.md
spec-tech
Status -> Tactical
2026-05-04 14:53:17
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe.md
S0079
Status -> Implemented
2026-05-04 14:55:47
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe.md
spec-check
Audit S0079 -> Verified; PASS/WARN/FAIL 9/0/0
2026-05-04 15:02:18
app_v2/src/main/AndroidManifest.xml
AndroidManifest.xml
S0081 Phase 01: add android.software.leanback required=false
2026-05-04 15:08:59
app_v2/src/main/assets/input/default_bindings.json
default_bindings.json
S0081 Phase 02 Step 2.1: add TV remote key triggers (CHANNEL_UP/DOWN, PROG_RED/GREEN/YELLOW/BLUE, INFO)
2026-05-04 15:14:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
S0081 Phase 02 Step 2.2: inject KeyBindingManager, add TV key pre-check in dispatchKeyEvent, routeBrowserCommandId
2026-05-04 15:14:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/KeyboardNavigationManager.kt
KeyboardNavigationManager
S0081 Phase 02 Step 2.2: add internal dispatchCommandId(commandId) mapping commandId strings to InputActions
2026-05-04 15:15:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
S0081 Phase 02 Step 2.3: inject KeyBindingManager, add TV key pre-check in dispatchKeyEvent, routeMainCommandId
2026-05-04 15:15:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt
KeyboardNavigationHandler
S0081 Phase 02 Step 2.3: add internal dispatchCommandId(commandId) mapping commandId strings to InputActions
2026-05-04 15:19:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/FocusManager.kt
FocusManager
S0081 Phase 03 Step 3.1: return false at list boundary in applyAction MoveFocus branch
2026-05-04 15:20:41
app_v2/src/main/res/layout/custom_player_controls.xml
custom_player_controls.xml
S0081 Phase 03 Step 3.2: add nextFocusLeft/Right wrap-around between exo_repeat and btnPlaybackControl
2026-05-04 15:22:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/FocusManager.kt
FocusManager
S0081 Phase 04: DPAD hold acceleration via PageJump (DPAD_ACCEL_REPEAT_THRESHOLD=6)
2026-05-04 15:27:44
app_v2/src/main/AndroidManifest.xml
AndroidManifest.xml
S0081 Phase 01: add android.software.leanback required=false
2026-05-04 15:27:44
app_v2/src/main/assets/input/default_bindings.json
default_bindings.json
S0081 Phase 02: add TV remote key triggers (PROG_RED/GREEN/YELLOW/BLUE, CHANNEL_UP/DOWN)
2026-05-04 15:27:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
S0081 Phase 02: pre-check KeyBindingManager for TV keys before hardcoded fallback
2026-05-04 15:27:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
S0081 Phase 02: pre-check KeyBindingManager for TV keys before hardcoded fallback
2026-05-04 15:27:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/KeyboardNavigationManager.kt
KeyboardNavigationManager
S0081 Phase 02: add internal dispatchCommandId for TV key routing
2026-05-04 15:27:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt
KeyboardNavigationHandler
S0081 Phase 02: add internal dispatchCommandId for TV key routing
2026-05-04 15:27:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/FocusManager.kt
FocusManager
S0081 Phase 03+04: boundary escape + DPAD hold acceleration
2026-05-04 15:27:50
app_v2/src/main/res/layout/custom_player_controls.xml
custom_player_controls.xml
S0081 Phase 03: close nextFocusLeft/Right loop in player controls
2026-05-04 15:27:54
docs/FEATURES.md
FEATURES
S0081: TV remote remapping and DPAD acceleration
2026-05-04 15:27:54
docs/FEATURES_RU.md
FEATURES_RU
S0081: TV remote remapping and DPAD acceleration (RU)
2026-05-04 15:27:54
docs/FEATURES_UK.md
FEATURES_UK
S0081: TV remote remapping and DPAD acceleration (UK)
2026-05-04 15:29:18
PLAN/S0081_tv-remote-key-coverage.md
spec
S0081 Status -> Implemented
2026-05-04 15:30:41
PLAN/S0081_tv-remote-key-coverage.md
spec-check
Audit S0081 -> Verified; PASS/WARN/FAIL 24/0/0
2026-05-04 16:28:05
PLAN/S0080_enh-vr-hud-swapchain-resize.md
spec
Advance S0080 strategic spec to Approved
2026-05-04 16:34:13
PLAN/S0080_enh-vr-hud-swapchain-resize/INDEX.md
spec-tech
Create tactical plan for S0080
2026-05-04 16:34:13
PLAN/S0080_enh-vr-hud-swapchain-resize/PHASE_01__hud-swapchain-scaling.md
spec-tech
Phase 01: hud-swapchain-scaling
2026-05-04 16:34:13
PLAN/S0080_enh-vr-hud-swapchain-resize/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-04 16:34:13
PLAN/S0080_enh-vr-hud-swapchain-resize.md
spec-tech
Status -> Tactical
2026-05-04 16:35:06
temp/VrRenderPipelineManager_20260504_1634.kt
spec-dev S0080 step-1.1
Backup VrRenderPipelineManager.kt before S0080 edit
2026-05-04 16:36:07
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudRenderer.kt
spec-dev S0080 step-1.2
S0080: add HUD_WIDTH_RATIO/HUD_HEIGHT_RATIO constants, compute size from eye buffer in init
2026-05-04 16:36:38
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
spec-dev S0080 step-1.3
S0080: pass newRenderer.width/height to VrHudSceneComposer
2026-05-04 16:39:14
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrHudRenderer.kt
spec-dev S0080 step-2.1
S0080: update KDoc to reflect dynamic HUD sizing from eye buffer
2026-05-04 16:40:20
dev/CATALOG/app_v2.jsonl
spec-dev S0080 step-2.2
S0080: catalog scan after VrHudRenderer constructor change
2026-05-04 16:40:20
dev/CATALOG/app_v2.md
spec-dev S0080 step-2.2
S0080: catalog render after VrHudRenderer constructor change
2026-05-04 16:41:06
PLAN/S0080_enh-vr-hud-swapchain-resize.md
spec-dev S0080
S0080 Implemented -> BlockNeedUserTest (on-device HUD visibility test required)
2026-05-04 17:50:42
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrSessionLifecycleManager.kt
VrSessionLifecycleManager
S0038: remove prohibited Log.e(VR_BOOT) - replaced with Timber.w already present on preceding line
2026-05-04 17:53:10
app_v2/src/main/java/com/sza/fastmediasorter/core/util/PermissionHelper.kt
S0035 Phase 01 Step 01.1
Add LOCAL_NETWORK_API=37 and LOCAL_NETWORK_PERMISSION string-literal constants (compileSdk 35 guard)
2026-05-04 17:53:27
app_v2/src/main/AndroidManifest.xml
S0035 Phase 01 Step 01.2
Declare ACCESS_LOCAL_NETWORK permission with minSdkVersion=37
2026-05-04 17:54:09
app_v2/src/main/java/com/sza/fastmediasorter/core/util/PermissionHelper.kt
S0035 Phase 01 Step 01.3
Add local-network permission surface: hasLocalNetworkPermission, requestLocalNetworkPermission, routeToLocalNetworkSettings, getLocalNetworkPermissionMessage, shouldShowLocalNetworkRationale, isLocalNetworkRuntimePermissionExpected, REQUEST_CODE_LOCAL_NETWORK
2026-05-04 17:57:46
app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkExceptions.kt
S0035 Phase 02 Step 02.1
Add LocalNetworkPermissionDeniedException as distinct NetworkException subtype
2026-05-04 17:58:06
app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorClassifier.kt
S0035 Phase 02 Step 02.2
Teach classifier to preserve and create LocalNetworkPermissionDeniedException from SecurityException with ACCESS_LOCAL_NETWORK message heuristics
2026-05-04 17:59:50
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt
S0035 Phase 02 Step 02.3
Preserve LocalNetworkPermissionDeniedException through listShares, scanMediaFiles, listFiles wrappers
2026-05-04 18:01:41
app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapper.kt
S0035 Phase 02 Step 02.4
Add LocalNetworkPermissionDeniedException branch to exhaustive when expression
2026-05-04 18:03:20
app_v2/src/main/res/values/strings.xml
S0035 Phase 03 Step 03.1
Add full local_network_permission_ key set (6 keys: title, message, grant, granted, denied, open_settings)
2026-05-04 18:03:20
app_v2/src/main/res/values-ru/strings.xml
S0035 Phase 03 Step 03.1
Add full local_network_permission_ key set (6 keys) in Russian
2026-05-04 18:03:20
app_v2/src/main/res/values-uk/strings.xml
S0035 Phase 03 Step 03.1
Add full local_network_permission_ key set (6 keys) in Ukrainian
2026-05-04 18:03:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsPermissionsHelper.kt
S0035 Phase 03 Step 03.2
Replace hasInternetPermission with hasLocalNetworkPermission for btnNetworkPermission; add requestLocalNetworkPermission/routeToLocalNetworkSettings click handler
2026-05-04 18:06:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
S0035 Phase 04 Step 04.1
Add ShowLocalNetworkPermission data object to AddResourceEvent sealed class
2026-05-04 18:07:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceNetworkScanCoordinator.kt
S0035 Phase 04 Step 04.2
Gate scanNetwork() with hasLocalNetworkPermission; emit ShowLocalNetworkPermission if missing
2026-05-04 18:08:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceNetworkScanCoordinator.kt
S0035 Phase 04 Step 04.3
Gate scanShares with hasLocalNetworkPermission; emit ShowLocalNetworkPermission if missing
2026-05-04 18:08:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
S0035 Phase 04 Step 04.3
Route ShowLocalNetworkPermission event to connectionManager.showLocalNetworkPermissionRationale()
2026-05-04 18:08:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
S0035 Phase 04 Step 04.3
Add showLocalNetworkPermissionRationale() two-button dialog with requestLocalNetworkPermission/routeToLocalNetworkSettings
2026-05-04 18:13:40
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
S0035 Phase 05 Step 05.1-05.2
Add context param to SmbDataSource/Factory; gate open() with hasLocalNetworkPermission
2026-05-04 18:13:40
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
S0035 Phase 05 Step 05.1-05.2
Add context param to SftpDataSource/Factory; gate open() with hasLocalNetworkPermission
2026-05-04 18:13:40
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/FtpDataSource.kt
S0035 Phase 05 Step 05.1-05.2
Add context param to FtpDataSource/Factory; gate open() with hasLocalNetworkPermission
2026-05-04 18:13:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
S0035 Phase 05 Step 05.1
Pass context to SmbDataSourceFactory
2026-05-04 18:13:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
S0035 Phase 05 Step 05.1
Pass context to SftpDataSourceFactory
2026-05-04 18:13:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
S0035 Phase 05 Step 05.1
Pass context to FtpDataSourceFactory
2026-05-04 18:15:40
PLAN/S0028_vr-multi-window-playback.md
spec-update
Redesign: settings toggle + 3 entry points (resource card / Browse top menu / player overflow) with tear-off; Browse=full state, Player=file only; platform generalization VR→all multi-window; Q3 updated, Q6 added, ADR-4 rewritten, ADR-5/6 added
2026-05-04 18:19:22
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
S0035 Phase05 Step05.3
Add @ApplicationContext context + hasLocalNetworkPermission gate before scanFolderWithProgress
2026-05-04 18:19:29
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt
S0035 Phase05 Step05.3
Add @ApplicationContext context + hasLocalNetworkPermission gate in scanFolder and scanFolderPaged
2026-05-04 18:19:29
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpMediaScanner.kt
S0035 Phase05 Step05.3
Add @ApplicationContext context + hasLocalNetworkPermission gate in scanFolder and scanFolderPaged
2026-05-04 18:19:29
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
S0035 Phase05 Step05.3
Add hasLocalNetworkPermission gate in decode() after cache check, before MediaMetadataRetriever work
2026-05-04 18:19:29
app_v2/src/main/java/com/sza/fastmediasorter/data/glide/NetworkPdfThumbnailLoader.kt
S0035 Phase05 Step05.3
Add hasLocalNetworkPermission gate in NetworkPdfDataFetcher.loadData() before download
2026-05-04 18:19:29
app_v2/src/main/java/com/sza/fastmediasorter/data/glide/NetworkEpubCoverLoader.kt
S0035 Phase05 Step05.3
Add hasLocalNetworkPermission gate in NetworkEpubDataFetcher.loadData() before download
2026-05-04 18:23:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
S0035 Phase06 Steps06.1+06.2
Gate init() + showCastDialog() with hasLocalNetworkPermission; lazy recovery in showCastDialog
2026-05-04 18:27:35
docs/FEATURES.md
S0035 Phase07 Step07.1
Add Android 17+ local network permission bullet to section 15 Network Sources
2026-05-04 18:27:35
docs/FEATURES_RU.md
S0035 Phase07 Step07.1
Add Android 17+ local network permission bullet to section 15 (RU)
2026-05-04 18:27:35
docs/FEATURES_UK.md
S0035 Phase07 Step07.1
Add Android 17+ local network permission bullet to section 15 (UK)
2026-05-04 18:27:35
PLAN/S0035_android17-local-network-permission.md
S0035 Phase07 Step07.3
Strategic spec updated for Implemented status
2026-05-04 18:27:35
PLAN/S0035_android17-local-network-permission/INDEX.md
S0035 Phase07 Step07.3
INDEX updated: 7/7 phases done
2026-05-04 18:27:35
dev/CATALOG/app_v2.jsonl
S0035 Phase07 Step07.2
Catalog scan regenerated after S0035 implementation
2026-05-04 18:27:35
dev/CATALOG/app_v2.md
S0035 Phase07 Step07.2
Catalog render regenerated after S0035 implementation
2026-05-04 18:30:43
PLAN/S0035_android17-local-network-permission.md
spec-check
Audit S0035 -> Verified; PASS 26 / WARN 0 / FAIL 0 / MANUAL 8
2026-05-04 18:30:43
PLAN/S0035_android17-local-network-permission/INDEX.md
spec-check
INDEX closed: 7/7 phases Done, status Verified
2026-05-04 18:34:22
scripts/check_strings_localized.ps1
scripts/
Add check_strings_localized.ps1 - verifies EN/RU/UK parity for a string key prefix; exit 1 on missing keys
2026-05-04 18:34:25
CLAUDE.md
Post-Change Steps
Add step 3: mandatory string locale audit via check_strings_localized.ps1; renumber steps 4-5
2026-05-04 18:45:25
app_v2/src/main/res/layout-land/activity_browse.xml
layout-land/activity_browse
Sync layoutControls with portrait: add spaceAfterBack (id-referenced), two group-separator Spaces between ToggleView/SelectAll and DeselectAll/ResourceOps
2026-05-04 18:47:21
PLAN/S0028_vr-multi-window-playback/INDEX.md
spec-tech
Rewrite tactical plan: 7 phases (settings-gate, manifest, per-window-state, window-id-plumbing, browse-entry-points, player-tear-off, docs)
2026-05-04 18:47:21
PLAN/S0028_vr-multi-window-playback/PHASE_01__settings-platform-gate.md
spec-tech
Phase 01: settings-platform-gate
2026-05-04 18:47:21
PLAN/S0028_vr-multi-window-playback/PHASE_02__manifest-multi-instance.md
spec-tech
Phase 02: manifest-multi-instance (Browse + Player)
2026-05-04 18:47:22
PLAN/S0028_vr-multi-window-playback/PHASE_03__per-window-resume-state.md
spec-tech
Phase 03: per-window-resume-state
2026-05-04 18:47:22
PLAN/S0028_vr-multi-window-playback/PHASE_04__window-id-plumbing.md
spec-tech
Phase 04: window-id-plumbing (PlayerActivity + BrowseActivity)
2026-05-04 18:47:22
PLAN/S0028_vr-multi-window-playback/PHASE_05__browse-entry-points.md
spec-tech
Phase 05: browse-entry-points (resource card + top menu tear-off)
2026-05-04 18:47:22
PLAN/S0028_vr-multi-window-playback/PHASE_06__player-tear-off.md
spec-tech
Phase 06: player-tear-off (overflow menu)
2026-05-04 18:47:23
PLAN/S0028_vr-multi-window-playback/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup
2026-05-04 18:48:39
app_v2/src/main/res/layout-land/activity_browse.xml
layout-land/activity_browse
Fix btnShare tint in layoutOperations: sync with portrait (@color/selector_themed_button_tint)
2026-05-04 18:49:15
app_v2/src/main/res/layout/activity_player_unified.xml
topCommandPanel portrait
Fix command panel parity: move btnCopyTextCmd+btnEditTextCmd into text-actions group (after btnTextSettingsCmd); move btnRandomCmd from center group to right-group nav (between btnPreviousCmd/btnNextCmd); fix btnOcrImageCmd using wrong string key btnOcrPdfCmd_text
2026-05-04 18:49:19
app_v2/src/main/res/layout-land/activity_player_unified.xml
topCommandPanel landscape
Fix command panel parity: add missing visibility=gone to btnDeleteCmd, btnFavorite, btnSlideshowCmd, btnPreviousCmd, btnNextCmd (were VISIBLE by default in landscape but GONE in portrait)
2026-05-04 19:02:11
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0028/01.1
Add allowSeparateWindow: Boolean = false (S0028 multi-window setting)
2026-05-04 19:21:07
PLAN/S0082_chromeos-support.md
spec
Add strategic spec S0082 for Chrome OS support
2026-05-04 19:24:48
PLAN/S0028_vr-multi-window-playback/PHASE_01__settings-platform-gate.md
spec-update
Fix Steps 01.2/01.3/01.4: retarget to SettingsRepositoryImpl (direct DataStore), remove SettingsManager reference
2026-05-04 19:24:55
PLAN/S0028_vr-multi-window-playback/INDEX.md
spec-update
Fix Architecture Notes: SettingsRepositoryImpl uses DataStore directly, not SettingsManager; update Phase 01 step counter to 1/4
2026-05-04 19:27:15
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0028
Step 01.2: add KEY_ALLOW_SEPARATE_WINDOW DataStore key; wire allowSeparateWindow in getSettings()/updateSettings() with SUPPORT_VR_PLAYER default
2026-05-04 19:31:10
PLAN/S0082_chromeos-support/INDEX.md
spec-tech
Create tactical plan for S0082
2026-05-04 19:31:10
PLAN/S0082_chromeos-support/PHASE_01__env-detection-foundation.md
spec-tech
Phase 01: env-detection-foundation
2026-05-04 19:31:10
PLAN/S0082_chromeos-support/PHASE_02__saf-folder-access.md
spec-tech
Phase 02: saf-folder-access
2026-05-04 19:31:10
PLAN/S0082_chromeos-support/PHASE_03__cast-availability-guard.md
spec-tech
Phase 03: cast-availability-guard
2026-05-04 19:31:10
PLAN/S0082_chromeos-support/PHASE_04__keyboard-defaults.md
spec-tech
Phase 04: keyboard-defaults
2026-05-04 19:31:10
PLAN/S0082_chromeos-support/PHASE_05__first-launch-banner.md
spec-tech
Phase 05: first-launch-banner
2026-05-04 19:31:10
PLAN/S0082_chromeos-support/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-05-04 19:31:10
PLAN/S0082_chromeos-support.md
spec-tech
Status -> Tactical
2026-05-04 19:32:22
app_v2/src/main/res/layout/fragment_settings_video.xml
S0028
Step 01.4: add switchAllowSeparateWindow toggle (hardcoded label, TODO phase-05)
2026-05-04 19:32:22
app_v2/src/main/res/layout-land/fragment_settings_video.xml
S0028
Step 01.4: landscape parity - add switchAllowSeparateWindow toggle
2026-05-04 19:32:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
S0028
Step 01.4: add listener and observer for allowSeparateWindow toggle
2026-05-04 19:35:02
dev/CATALOG/app_v2.jsonl
S0028
Phase 01 done: rescan after AppSettings + SettingsRepositoryImpl + VideoSettingsFragment changes
2026-05-04 19:38:09
app_v2/src/vr/AndroidManifest.xml
S0028
Step 02.2: add BrowseActivity + PlayerActivity with resizeableActivity=true for multi-window support
2026-05-04 19:41:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResumeStateRepository.kt
S0028
Step 03.1: add windowId:String to saveState/getState/clearState; add WINDOW_ID_MAIN constant
2026-05-04 19:41:15
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResumeStateRepositoryImpl.kt
S0028
Step 03.2: replace lazy prefs with prefs(windowId) function; add windowId to all methods; remove @Singleton
2026-05-04 19:41:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveResumeStateUseCase.kt
S0028
Step 03.3: add windowId:String param to invoke()
2026-05-04 19:41:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetResumeStateUseCase.kt
S0028
Step 03.4: add windowId:String param to invoke()
2026-05-04 19:41:16
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ClearResumeStateUseCase.kt
S0028
Step 03.5: add windowId:String param to invoke()
2026-05-04 20:20:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
S0028 Phase 04.1: add EXTRA_WINDOW_ID, windowId field, read from intent/savedState, persist in onSaveInstanceState
2026-05-04 20:21:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
S0028 Phase 04.2: add windowId from SavedStateHandle, update clearResumeStateUseCase and saveResumeStateUseCase call sites
2026-05-04 20:21:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainResumePlaybackHelper.kt
MainResumePlaybackHelper
S0028 Phase 04.3: pass WINDOW_ID_MAIN to all getResumeStateUseCase and clearResumeStateUseCase calls
2026-05-04 20:21:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
S0028 Phase 04.4: add EXTRA_WINDOW_ID + EXTRA_SCROLL_POSITION constants, windowId field, read in onCreate, persist in onSaveInstanceState
2026-05-04 20:21:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
S0028 Phase 04.4: add windowId from SavedStateHandle and windowIdProvider lambda, wire to BrowseInlineAudioManager, BrowseResourceStateManager, BrowseLifecycleSetupManager
2026-05-04 20:21:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLifecycleSetupManager.kt
BrowseLifecycleSetupManager
S0028 Phase 04.4: add windowIdProvider constructor param, use in getResumeStateUseCase and clearResumeStateUseCase calls
2026-05-04 20:21:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceStateManager.kt
BrowseResourceStateManager
S0028 Phase 04.4: add windowIdProvider constructor param, use in clearResumeStateUseCase call
2026-05-04 20:21:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseInlineAudioManager.kt
BrowseInlineAudioManager
S0028 Phase 04.4: add windowIdProvider constructor param, use in saveResumeStateUseCase call
2026-05-04 20:33:05
app_v2/src/main/res/values/strings.xml
strings
S0028 Phase 05.1: add action_open_in_separate_window and setting_allow_separate_window EN strings
2026-05-04 20:33:05
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0028 Phase 05.1: add action_open_in_separate_window and setting_allow_separate_window RU strings
2026-05-04 20:33:05
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0028 Phase 05.1: add action_open_in_separate_window and setting_allow_separate_window UK strings
2026-05-04 20:33:05
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
S0028 Phase 05.1: replace TODO(phase-05) placeholder with @string/setting_allow_separate_window
2026-05-04 20:33:05
app_v2/src/main/res/layout-land/fragment_settings_video.xml
fragment_settings_video_land
S0028 Phase 05.1: replace TODO(phase-05) placeholder with @string/setting_allow_separate_window (landscape)
2026-05-04 20:33:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler
S0028 Phase 05.2/05.4: add openBrowseInNewWindow() and tearOffBrowse() methods with UUID windowId and FLAG_ACTIVITY_MULTIPLE_TASK
2026-05-04 20:33:05
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
S0028 Phase 05.3: add action_open_in_separate_window menu item
2026-05-04 20:33:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
S0028 Phase 05.3: add allowSeparateWindow + openBrowseInNewWindow params to showMenu(); show item when SUPPORT_VR_PLAYER && allowSeparateWindow
2026-05-04 20:33:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseActionBarManager.kt
BrowseActionBarManager
S0028 Phase 05.4: add handleSeparateWindowAction() guarded by SUPPORT_VR_PLAYER && allowSeparateWindow, calls tearOffBrowse
2026-05-04 20:50:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
S0028 Phase 06: add tearOffPlayer() - opens current file in new window, finishes current player
2026-05-04 20:50:16
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
S0028 Phase 06: add menu_open_in_separate_window item
2026-05-04 20:50:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
S0028 Phase 06: add OPEN_IN_SEPARATE_WINDOW command + allowSeparateWindow param to buildActiveCommands
2026-05-04 20:50:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
S0028 Phase 06: cache allowSeparateWindow from settings, pass to planner, dispatch onOpenInSeparateWindowClicked
2026-05-04 20:50:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
S0028 Phase 06: implement onOpenInSeparateWindowClicked -> activity.tearOffPlayer()
2026-05-04 20:54:13
docs/FEATURES.md
FEATURES
S0028 Phase 07: add Multi-Window Mode entry under VR section (EN)
2026-05-04 20:54:14
docs/FEATURES_RU.md
FEATURES_RU
S0028 Phase 07: add Multi-Window Mode entry under VR section (RU)
2026-05-04 20:54:15
docs/FEATURES_UK.md
FEATURES_UK
S0028 Phase 07: add Multi-Window Mode entry under VR section (UK)
2026-05-04 21:01:38
PLAN/S0028_vr-multi-window-playback.md
spec-check
Audit S0028 → Verified; PASS/WARN/FAIL 14/0/0
2026-05-04 21:01:38
PLAN/S0028_vr-multi-window-playback/PHASE_07__docs-catalog-cleanup.md
spec-check
Tick final /spec-check criterion → all Done Criteria [x]
2026-05-04 23:38:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity.getRequiredMediaPermissions
S0083: split API 23-28/29-32 permission branches; remove WRITE_EXTERNAL_STORAGE from API 29+ path
2026-05-04 23:38:26
PLAN/S0083_bugfix-write-perm-api29.md
spec-all
Pipeline Implemented: S0083 bugfix-write-perm-api29
2026-05-04 23:39:14
PLAN/S0083_bugfix-write-perm-api29.md
spec-check
Audit S0083 → Verified; PASS/WARN/FAIL 4/0/0
2026-05-04 23:53:57
PLAN/S0083_bugfix-write-perm-api29.md
S0083
Manual on-device checks confirmed; spec finalized Verified
2026-05-05 00:01:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
SettingsViewModel
fix: optimistic _settingsOverride in updateSettings to prevent race condition where rapid consecutive switch toggles read stale settings.value before DataStore write completes (Black Screen toggle auto-turning off)
2026-05-05 00:11:41
app_v2/src/main/res/layout/fragment_settings_playback.xml
iconHelpCameraCapture
fix: move help icon before text labels so it sits adjacent to the toggle instead of pinned to the right edge
2026-05-05 00:22:45
app_v2/src/main/java/com/sza/fastmediasorter/core/compat/ChromeOsCompat.kt
S0082
Phase 01: ARC++ environment detection utility
2026-05-05 00:22:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainStoragePermissionsHelper.kt
S0082
Phase 02: skip MANAGE_EXTERNAL_STORAGE on Chrome OS
2026-05-05 00:22:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceScanManager.kt
S0082
Phase 02: redirect quick-folder buttons and selectFolderByPath to SAF on Chrome OS
2026-05-05 00:22:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
S0082
Phase 03: expose castAvailableState StateFlow
2026-05-05 00:22:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0082
Phase 03: guard Cast button with isCastAvailable, subscribe to castAvailableState
2026-05-05 00:22:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0082
Phase 03: wire castMediaManager into commandPanelController
2026-05-05 00:22:55
app_v2/src/main/java/com/sza/fastmediasorter/data/input/DefaultsMapLoader.kt
S0082
Phase 04: add loadChromeOsDefaults keyboard bindings
2026-05-05 00:22:55
app_v2/src/main/java/com/sza/fastmediasorter/data/input/InputBindingRepository.kt
S0082
Phase 04: add hasOverrides and insertAllAsOverrides helpers
2026-05-05 00:22:55
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
S0082
Phase 04: apply Chrome OS keyboard defaults on first startup
2026-05-05 00:22:55
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
S0082
Phase 04: inject InputBindingRepository and DefaultsMapLoader for startup
2026-05-05 00:22:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainChromeOsBannerManager.kt
S0082
Phase 05: Chrome OS first-launch Snackbar banner
2026-05-05 00:22:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0082
Phase 05: wire MainChromeOsBannerManager into onResumeWithViews
2026-05-05 00:22:55
app_v2/src/main/res/values/strings.xml
S0082
Phase 05: add chromeos_banner string keys (EN)
2026-05-05 00:22:55
app_v2/src/main/res/values-ru/strings.xml
S0082
Phase 05: add chromeos_banner string keys (RU)
2026-05-05 00:22:55
app_v2/src/main/res/values-uk/strings.xml
S0082
Phase 05: add chromeos_banner string keys (UK)
2026-05-05 00:22:55
docs/FEATURES.md
S0082
Phase 06: Chrome OS platform support note
2026-05-05 00:22:55
docs/FEATURES_RU.md
S0082
Phase 06: Chrome OS platform support note (RU)
2026-05-05 00:22:55
docs/FEATURES_UK.md
S0082
Phase 06: Chrome OS platform support note (UK)
2026-05-05 00:22:55
dev/CATALOG/app_v2.jsonl
S0082
Phase 06: catalog regenerated after Chrome OS support
2026-05-05 00:27:55
PLAN/S0084_bugfix-cache-subfolder-mismatch-restore.md
spec
Add strategic spec S0084 for bugfix-cache-subfolder-mismatch-restore
2026-05-05 00:28:00
PLAN/S0082_chromeos-support.md
spec-update
Refinement (claude-sonnet-4-6, focus: completeness): ARC++ GL crop confirmed broken via logcat, added findings to §1/§4/§6/§7, 4 DISCUSS proposals
2026-05-05 00:29:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
CastMediaManager
Remove StateFlow backing field; expose castAvailableState as MutableStateFlow directly
2026-05-05 00:29:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Rename _castMediaManager -> castMediaManager to match spec predicate
2026-05-05 00:33:06
PLAN/S0084_bugfix-cache-subfolder-mismatch-restore/INDEX.md
spec-tech
Create tactical plan for S0084
2026-05-05 00:33:06
PLAN/S0084_bugfix-cache-subfolder-mismatch-restore/PHASE_01__fix-cache-miss-detection.md
spec-tech
Phase 01: fix-cache-miss-detection
2026-05-05 00:33:06
PLAN/S0084_bugfix-cache-subfolder-mismatch-restore/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-05 00:33:06
PLAN/S0084_bugfix-cache-subfolder-mismatch-restore.md
spec-tech
Status → Tactical
2026-05-05 00:34:17
PLAN/S0082_chromeos-support.md
spec-check
Audit S0082 -> Partial; PASS/WARN/FAIL 23/1/0; WARN: WorkManager rescue not in tactical plan
2026-05-05 00:34:20
PLAN/S0082_chromeos-support/INDEX.md
spec-check
Update INDEX phase statuses to Done (6/6)
2026-05-05 00:35:26
PLAN/S0085_enh-sftp-scan-performance.md
spec
Add strategic spec S0085 for enh-sftp-scan-performance
2026-05-05 00:39:21
PLAN/S0085_enh-sftp-scan-performance/INDEX.md
spec-tech
Create tactical plan for S0085
2026-05-05 00:39:21
PLAN/S0085_enh-sftp-scan-performance/PHASE_01__listfiles-attr-contract.md
spec-tech
Phase 01: listfiles-attr-contract
2026-05-05 00:39:21
PLAN/S0085_enh-sftp-scan-performance/PHASE_02__scanner-stat-elimination.md
spec-tech
Phase 02: scanner-stat-elimination
2026-05-05 00:39:21
PLAN/S0085_enh-sftp-scan-performance/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-05 00:39:21
PLAN/S0085_enh-sftp-scan-performance.md
spec-tech
Status → Tactical
2026-05-05 00:40:49
PLAN/S0086_bugfix-log-export-create-document-guard.md
spec
Add strategic spec S0086 for bugfix-log-export-create-document-guard
2026-05-05 00:42:02
PLAN/S0086_bugfix-log-export-create-document-guard/INDEX.md
spec-tech
Create tactical plan for S0086
2026-05-05 00:42:02
PLAN/S0086_bugfix-log-export-create-document-guard/PHASE_01__fix-intent-guard.md
spec-tech
Phase 01: fix-intent-guard
2026-05-05 00:42:02
PLAN/S0086_bugfix-log-export-create-document-guard/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-05 00:42:02
PLAN/S0086_bugfix-log-export-create-document-guard.md
spec-tech
Status → Tactical
2026-05-05 00:44:53
PLAN/S0087_bugfix-cover-art-glide-404-log-spam.md
spec
Add strategic spec S0087 for ad-hoc Glide 404 cover art log spam
2026-05-05 00:46:26
PLAN/S0087_bugfix-cover-art-glide-404-log-spam/INDEX.md
spec-tech
Create tactical plan for S0087
2026-05-05 00:46:26
PLAN/S0087_bugfix-cover-art-glide-404-log-spam/PHASE_01__fix-onload-failed-log.md
spec-tech
Phase 01: fix-onload-failed-log
2026-05-05 00:46:26
PLAN/S0087_bugfix-cover-art-glide-404-log-spam/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-05 00:46:26
PLAN/S0087_bugfix-cover-art-glide-404-log-spam.md
spec-tech
Status → Tactical
2026-05-05 00:56:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt
S0084
Fix cold-start cache miss log (subfolder mismatch false positive)
2026-05-05 00:56:18
docs/FEATURES.md
S0084
Update last-position-restore bullet - subfolder open behaviour
2026-05-05 00:56:18
docs/FEATURES_RU.md
S0084
Update last-position-restore bullet - subfolder open behaviour (RU)
2026-05-05 00:56:18
docs/FEATURES_UK.md
S0084
Update last-position-restore bullet - subfolder open behaviour (UK)
2026-05-05 00:56:22
docs/FEATURES.md
S0084
Update last-position-restore bullet - subfolder open behaviour
2026-05-05 00:56:27
docs/FEATURES_RU.md
S0084
Update last-position-restore bullet - subfolder open behaviour (RU)
2026-05-05 00:56:27
docs/FEATURES_UK.md
S0084
Update last-position-restore bullet - subfolder open behaviour (UK)
2026-05-05 00:56:47
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient
S0085: Add SftpFileListing data class; change listFiles() return type to Result<List>; populate attrs from LsEntry without extra stat() calls; add includeDirectories param
2026-05-05 00:56:52
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt
SftpMediaScanner
S0085: Eliminate per-file stat() calls in scanFolder/scanFolderPaged/listDirectoryContents; use SftpFileListing attrs; wire onProgress every 10 files in scanFolder; stat() fallback only for zero-size files with active min-size filter
2026-05-05 00:56:58
docs/FEATURES.md
FEATURES
S0085: Append SFTP scan performance improvement note to Secure SFTP bullet (single round-trip, progress counter)
2026-05-05 00:56:58
docs/FEATURES_RU.md
FEATURES_RU
S0085: Append SFTP scan performance improvement note to SMB/FTP/SFTP bullet (RU)
2026-05-05 00:56:58
docs/FEATURES_UK.md
FEATURES_UK
S0085: Append SFTP scan performance improvement note to SMB/FTP/SFTP bullet (UK)
2026-05-05 00:57:01
docs/FEATURES_RU.md
FEATURES_RU
S0085: Append SFTP scan performance note to SMB/FTP/SFTP bullet (RU)
2026-05-05 00:57:01
docs/FEATURES_UK.md
FEATURES_UK
S0085: Append SFTP scan performance note to SMB/FTP/SFTP bullet (UK)
2026-05-05 00:57:27
PLAN/S0084_bugfix-cache-subfolder-mismatch-restore.md
spec-check
Audit S0084 -> Verified; PASS/WARN/FAIL 14/0/0
2026-05-05 01:00:02
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt
SmbOperationsUseCase
S0085: Adapt listFiles() consumers to SftpFileListing - use listing.path, listing.size, listing.modifiedDate; trash folder filter updated
2026-05-05 01:00:03
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SftpOperationStrategy.kt
SftpOperationStrategy
S0085: Adapt listFiles() consumers to SftpFileListing - use listing.path and listing.isDirectory; eliminate stat() calls in collectSftpFiles/collectSftpFilesOnly
2026-05-05 01:00:06
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SftpOperationStrategy.kt
SftpOperationStrategy
S0085: Adapt listFiles() consumers to SftpFileListing - listing.path, listing.isDirectory; eliminate per-entry stat() in collectSftpFiles/collectSftpFilesOnly
2026-05-05 01:05:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt
S0086
Replace ActivityNotFoundException catch with resolveActivity guard in launchSaveLogs
2026-05-05 01:06:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt
AudioCoverArtLoader
S0087: suppress Glide 404 log spam in onLoadFailed - 404 -> DEBUG one-liner, other failures -> WARNING without exception chain
2026-05-05 01:30:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt
S0086
Replace ActivityNotFoundException catch with resolveActivity guard in launchSaveLogs
2026-05-05 01:34:38
PLAN/S0086_bugfix-log-export-create-document-guard__audit_2026-05-05.md
spec-check
Audit S0086 bugfix-log-export-create-document-guard - result: Partial
2026-05-05 01:34:38
PLAN/S0086_bugfix-log-export-create-document-guard.md
spec-check
Advance status to Partial (audit 2026-05-05)
2026-05-05 01:34:38
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0085
Add SftpFileListing data class; listFiles() returns attrs from ls response - no extra stat() per file
2026-05-05 01:34:38
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt
S0085
Eliminate per-file stat() in scanFolder/scanFolderPaged; wire onProgress every 10 files
2026-05-05 01:34:38
docs/FEATURES.md
S0085
Update Secure SFTP bullet - single round-trip listing + progress indicator
2026-05-05 01:34:38
docs/FEATURES_RU.md
S0085
Update Secure SFTP bullet (RU)
2026-05-05 01:34:38
docs/FEATURES_UK.md
S0085
Update Secure SFTP bullet (UK)
2026-05-05 01:34:41
PLAN/S0086_bugfix-log-export-create-document-guard.md
spec-check
Advance status to Partial (audit 2026-05-05)
2026-05-05 01:34:41
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt
S0085
Eliminate per-file stat() in scanFolder/scanFolderPaged; wire onProgress every 10 files
2026-05-05 01:34:45
docs/FEATURES.md
S0085
Update Secure SFTP bullet - single round-trip listing + progress indicator
2026-05-05 01:34:45
docs/FEATURES_RU.md
S0085
Update Secure SFTP bullet (RU)
2026-05-05 01:34:45
docs/FEATURES_UK.md
S0085
Update Secure SFTP bullet (UK)
2026-05-05 01:34:48
docs/FEATURES_RU.md
S0085
Update Secure SFTP bullet (RU)
2026-05-05 01:34:51
docs/FEATURES_UK.md
S0085
Update Secure SFTP bullet (UK)
2026-05-05 01:42:46
PLAN/S0027_bugfix-vr-immersive-orientation-inverted.md
S0027
Closed as Verified: V-axis fix confirmed in VrStereoRenderer.kt, ADR-1/2/3 implemented. Regression test spun off to S0088 (priority 15)
2026-05-05 01:56:33
app_v2/src/main/AndroidManifest.xml
AndroidManifest
Added IMAGE_CAPTURE and VIDEO_CAPTURE to queries block - fixes hasCameraHandler() returning false on API 30+ due to package visibility
2026-05-05 02:06:43
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Fix: showBlackScreenButton was not persisted to DataStore - added KEY_SHOW_BLACK_SCREEN_BUTTON, read in getSettings(), write in updateSettings()
2026-05-05 02:17:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoVideoProcessor.kt
StereoVideoProcessor
Fix: EQUIRECT_360_SBS, EQUIRECT_180_SBS, VR180_FISHEYE_SBS now get right-eye crop; EQUIRECT_360_OU gets bottom-eye crop in panel mode (previously fell through to null - both eyes visible side by side)
2026-05-05 02:17:27
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoVideoProcessorTest.kt
StereoVideoProcessorTest
Add unit tests for buildGlEffect: EQUIRECT_360_SBS, EQUIRECT_180_SBS, VR180_FISHEYE_SBS, EQUIRECT_360_OU (crop), EQUIRECT_360_MONO, EQUIRECT_180_MONO (null)
2026-05-05 02:34:41
PLAN/S0089_bugfix-save-frame-feedback.md
spec
Add strategic spec S0089 for bugfix-save-frame-feedback
2026-05-05 02:35:58
app_v2/src/main/AndroidManifest.xml
SettingsActivity
Added windowSoftInputMode=adjustPan so IME does not silently cover content
2026-05-05 02:36:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
applyWindowInsets
Handle IME inset: ViewPager bottom padding uses max(navBar, ime) to scroll content above keyboard
2026-05-05 02:36:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
setupDefaultCredentials
Call showSoftInput on focus for etDefaultUser and etDefaultPassword
2026-05-05 02:37:53
PLAN/S0089_bugfix-save-frame-feedback/INDEX.md
spec-tech
S0089: tactical plan created (2 phases)
2026-05-05 02:37:53
PLAN/S0089_bugfix-save-frame-feedback.md
spec
S0089: status -> Tactical
2026-05-05 02:39:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSmallControlsManager.kt
BrowseSmallControlsManager
Fix compact controls hiding under Chrome OS top bar: do not scale paddingTop (contains statusBar inset)
2026-05-05 02:40:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt
SaveVideoFrameManager
S0089: replace Snackbar with Toast for full-screen player visibility
2026-05-05 02:41:04
dev/CATALOG/app_v2.md
catalog
S0089: catalog regenerated after SaveVideoFrameManager change
2026-05-05 02:41:12
PLAN/S0089_bugfix-save-frame-feedback.md
S0089
S0089: status set to Implemented
2026-05-05 03:04:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
PlayerControlsSetupManager
Fix topCommandPanel hidden under Chrome OS bar: use statusBars|captionBar for top inset
2026-05-05 03:04:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix topCommandPanel Chrome OS inset (captionBar) + hide PiP button for audio files
2026-05-05 03:04:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt
PictureInPictureManager
Add isAudio param to setupPipButton: hide PiP button for audio-only files
2026-05-05 03:04:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt
PlayerObserverManager
Pass isAudio to setupPipButton in combine+updateUI to hide PiP for audio files
2026-05-05 03:04:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
StandalonePlayerActivity
Fix topCommandPanel Chrome OS inset (captionBar) + hide PiP button for audio files
2026-05-05 03:04:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt
PictureInPictureManager
Add isAudio param to setupPipButton: hide PiP button for audio-only files
2026-05-05 03:04:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt
PlayerObserverManager
Pass isAudio to setupPipButton in combine+updateUI to hide PiP for audio files
2026-05-05 03:04:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt
PictureInPictureManager
Add isAudio param to setupPipButton: hide PiP button for audio-only files
2026-05-05 03:04:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt
PlayerObserverManager
Pass isAudio to setupPipButton in combine+updateUI to hide PiP for audio files
2026-05-05 03:06:56
PLAN/S0090_bugfix-settings-default-credentials-input.md
spec-tech
Advance S0090 strategic spec to Tactical and resolve review decisions
2026-05-05 03:06:56
PLAN/S0090_bugfix-settings-default-credentials-input/INDEX.md
spec-tech
Create tactical index for S0090
2026-05-05 03:06:56
PLAN/S0090_bugfix-settings-default-credentials-input/PHASE_01__app-data-contract.md
spec-tech
Create Phase 01 tactical plan for S0090
2026-05-05 03:06:56
PLAN/S0090_bugfix-settings-default-credentials-input/PHASE_02__inline-editor-flow.md
spec-tech
Create Phase 02 tactical plan for S0090
2026-05-05 03:06:56
PLAN/S0090_bugfix-settings-default-credentials-input/PHASE_03__keyboard-guard-tests.md
spec-tech
Create Phase 03 tactical plan for S0090
2026-05-05 03:06:56
PLAN/S0090_bugfix-settings-default-credentials-input/PHASE_04__docs-catalog-cleanup.md
spec-tech
Create Phase 04 tactical plan for S0090
2026-05-05 03:07:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt
S0090
Default App Data section to expanded on first entry while preserving saved state
2026-05-05 03:08:26
app_v2/src/main/res/layout/fragment_settings_general.xml
S0090
Remove duplicate inner hints from Default User and Default Password fields in portrait layout
2026-05-05 03:08:26
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0090
Validate landscape credentials row contract against portrait hint behavior for S0090
2026-05-05 03:12:35
dev/CATALOG/app_v2.jsonl
S0090
Regenerate app_v2 catalog after Phase 01 settings changes
2026-05-05 03:12:35
dev/CATALOG/app_v2.md
S0090
Render app_v2 catalog after Phase 01 settings changes
2026-05-05 03:13:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0090
Add explicit activation helper for Default User and Default Password editors
2026-05-05 03:14:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0090
Add IME action commit path for default credentials with single OWNER_TRIGGER commit flow
2026-05-05 03:17:23
dev/CATALOG/app_v2.jsonl
S0090
Regenerate app_v2 catalog after Phase 02 settings input flow changes
2026-05-05 03:17:23
dev/CATALOG/app_v2.md
S0090
Render app_v2 catalog after Phase 02 settings input flow changes
2026-05-05 03:18:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsKeyboardNavigationManager.kt
S0090
Guard settings shortcuts when a text editor is focused
2026-05-05 03:18:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
S0090
Hide IME and clear focused text editor before handling Escape in settings
2026-05-05 03:19:59
app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/SettingsKeyboardNavigationManagerTest.kt
S0090
Add JVM regression tests for settings keyboard editor guard
2026-05-05 03:19:59
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/settings/DefaultCredentialsInputTest.kt
S0090
Add instrumentation regression test for inline Default User input
2026-05-05 03:23:43
dev/CATALOG/app_v2.jsonl
S0090
Regenerate app_v2 catalog after Phase 03 settings keyboard and test changes
2026-05-05 03:23:43
dev/CATALOG/app_v2.md
S0090
Render app_v2 catalog after Phase 03 settings keyboard and test changes
2026-05-05 03:24:14
PLAN/S0090_bugfix-settings-default-credentials-input.md
S0090
Sync strategic spec status with BlockByOtherTask after unrelated unit-test blocker
2026-05-05 10:10:21
settings.gradle.kts
buildCache
Disable local Gradle build cache on Windows to avoid RClassOutputJar cache-pack failures during resource processing
2026-05-05 10:12:21
scripts/builders/build-debug.PS1
build-debug
Broaden Gradle cache-pack recovery and resolve executionHistory path dynamically instead of hard-coding Gradle 8.11.1
2026-05-05 10:12:21
dev/build-with-version.ps1
build-with-version
Broaden Gradle cache-pack recovery and resolve executionHistory path dynamically instead of hard-coding Gradle 8.11.1
2026-05-05 10:12:21
gradle.properties
Gradle config
Update JDK/Gradle compatibility note and document Windows local build-cache disablement in settings.gradle.kts
2026-05-05 10:12:21
dev/TECH_REQUIREMENTS.md
Technical Constraints
Refresh JDK compatibility note to match the current Gradle 9.4.1 and AGP 9.2.0 toolchain
2026-05-05 10:14:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationProgressDialog.kt
FileOperationProgressDialog
Guarded delayed progress dialog summary views against pre-init access during startup callbacks
2026-05-05 10:16:15
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient.readFileBytesRange
Aligned retry branch with direct offset-open semantics and removed skip(offset) divergence
2026-05-05 11:01:30
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrPlayerCommandRouter.kt
VrPlayerCommandRouter
Routed VR SeekTo through the shared ExoPlayer authority instead of the parallel VrPlaybackEngine path
2026-05-05 11:13:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity
Introduced explicit VR playback facade methods and removed the obsolete injected VrPlaybackEngine path
2026-05-05 11:13:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrPlayerCommandRouter.kt
VrPlayerCommandRouter
Switched VR command routing to the explicit activity playback facade instead of raw manager/player access
2026-05-05 11:13:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
VrRenderPipelineManager
Replaced raw player access with the activity playback facade for progress, listener attach, and surface binding
2026-05-05 11:13:44
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrSessionLifecycleManager.kt
VrSessionLifecycleManager
Switched VR surface clearing to the activity playback facade
2026-05-05 11:13:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrModule.kt
VrModule
Removed the obsolete VrPlaybackEngine binding so VR uses the shared player authority only
2026-05-05 11:13:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/playback/VrPlaybackEngine.kt
VrPlaybackEngine
Removed the obsolete competing VR playback engine abstraction
2026-05-05 11:13:45
app_v2/src/vr/java/com/sza/fastmediasorter/vr/playback/ExoVrPlaybackEngine.kt
ExoVrPlaybackEngine
Removed the obsolete parallel ExoPlayer-based VR engine implementation
2026-05-05 11:30:31
app_v2/src/test/java/com/sza/fastmediasorter/data/remote/ftp/FtpMediaScannerTest.kt
FtpMediaScannerTest
S0090: Add context mock and PermissionHelper stub to fix compilation after context param added to FtpMediaScanner constructor
2026-05-05 11:30:36
app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/SettingsKeyboardNavigationManagerTest.kt
SettingsKeyboardNavigationManagerTest
S0090 Phase 03.2: New JVM test - escape clears focused editor before navigateBack, text editor bypasses shortcut layer
2026-05-05 11:30:40
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/settings/DefaultCredentialsInputTest.kt
DefaultCredentialsInputTest
S0090 Phase 03.2: New instrumentation test - default user accepts inline text input without triggering search overlay
2026-05-05 11:45:26
dev/CATALOG/app_v2.jsonl
GeneralSettingsLogHelper
Regenerated catalog post-commit S0086 - lastTouched updated to 2026-05-05
2026-05-05 11:45:26
PLAN/spec-catalog.jsonl
S0086
Status Partial -> Implemented after commit 455cabd
2026-05-05 13:38:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
fix: remove ime.bottom from ViewPager2 inset padding - on API<30 IME insets return stale keyboard height even when keyboard is hidden, causing content to render in top half only; adjustPan mode handles keyboard avoidance via window panning
2026-05-05 14:20:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BlackScreenOverlayManager.kt
BlackScreenOverlayManager
Enter immersive fullscreen on overlay show, restore bars on hide
2026-05-05 14:20:42
app_v2/src/main/res/values/strings.xml, values-ru/strings.xml, values-uk/strings.xml
random_file_description
Rename ‘Jump to a random file’ to ‘Random Jump’ (EN/RU/UK)
2026-05-05 14:27:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager.onPlayerError
Suppress spurious toast and track-skip when SFTP IOException is caused by InterruptedException (ExoPlayer own thread shutdown during fast track switch / file-move)
2026-05-05 14:32:14
PLAN/S0094_player-move-currently-playing.md
spec
Add strategic spec S0094 for player-move-currently-playing
2026-05-05 14:42:50
PLAN/S0094_player-move-currently-playing/INDEX.md
spec-tech
Create tactical plan for S0094
2026-05-05 14:42:50
PLAN/S0094_player-move-currently-playing/PHASE_01__path-based-removal.md
spec-tech
Phase 01: path-based-removal
2026-05-05 14:42:50
PLAN/S0094_player-move-currently-playing/PHASE_02__pre-move-stop-navigate.md
spec-tech
Phase 02: pre-move-stop-navigate
2026-05-05 14:42:50
PLAN/S0094_player-move-currently-playing/PHASE_03__service-silent-io-skip.md
spec-tech
Phase 03: service-silent-io-skip
2026-05-05 14:42:50
PLAN/S0094_player-move-currently-playing/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-05 14:42:50
PLAN/S0094_player-move-currently-playing.md
spec-tech
Status -> Tactical
2026-05-05 14:56:26
PLAN/S0094_player-move-currently-playing/PHASE_02__pre-move-stop-navigate.md
S0094
Patch phase 02: add debounce flag, onBeforeMove guard, @Suppress UNUSED_PARAMETER, resetMoveInProgress, missing verifications
2026-05-05 15:04:36
PLAN/S0094_player-move-currently-playing/PHASE_05__pre-delete-stop-navigate.md
S0094
Add Phase 05: pre-delete stop + optimistic navigate (delete-while-playing)
2026-05-05 15:04:36
PLAN/S0094_player-move-currently-playing/PHASE_06__pre-rename-in-place-update.md
S0094
Add Phase 06: pre-rename stop + in-place path update (rename-while-playing)
2026-05-05 15:04:36
PLAN/S0094_player-move-currently-playing/INDEX.md
S0094
Update index: phase count 4→6, add Phase 05 and 06
2026-05-05 15:04:36
PLAN/S0094_player-move-currently-playing/PHASE_04__docs-catalog-cleanup.md
S0094
Update deps: Phase 04 now depends on 01-03, 05, 06
2026-05-05 15:08:08
PLAN/S0094_player-move-currently-playing.md
S0094
Expand scope to delete+rename operations and all resource types (local, SMB, FTP, SFTP, Cloud); update §1,§2,§3.2,§4,§5,§8,§11
2026-05-05 15:08:08
PLAN/S0094_player-move-currently-playing/PHASE_04__docs-catalog-cleanup.md
S0094
Expand FEATURES bullets to cover move+delete+rename in all three locales
2026-05-05 15:12:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0094 Phase 01
Fix removeFileFromList to use path-based lookup instead of currentIndex
2026-05-05 15:16:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
S0094 Phase 02
Add onBeforeMove to interface; moveInProgress debounce; call onBeforeMove before IO; fix null exception message in error toast
2026-05-05 15:18:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0094 Phase 02
Implement onBeforeMove (stop+navigate); remove redundant navigation from onMoveSuccess/onMoveToPathSuccess
2026-05-05 15:20:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BackgroundMusicManager.kt
S0094 Phase 03
Silent IO skip in onPlayerError: log to Timber only, no toast when file is moved/unavailable
2026-05-05 15:24:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
S0094 Phase 05
Add onBeforeDelete callback + deleteInProgress debounce; call before IO in performDelete
2026-05-05 15:25:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0094 Phase 05
Implement onBeforeDelete (stop+navigate); remove redundant navigation from onDeleteSuccess
2026-05-05 15:35:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0094 Phase 06
Add updateRenamedFilePath: in-place path update by oldPath, keeps currentIndex
2026-05-05 15:35:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/RenameDialog.kt
S0094 Phase 06
Add onBeforeRename hook: called before IO starts, stops playback pre-rename
2026-05-05 15:35:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
S0094 Phase 06
Pass onBeforeRename hook and capture oldPath/newPath in onComplete
2026-05-05 15:35:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0094 Phase 06
Implement onBeforeRenameDialog (stop) and onRenameComplete (in-place update)
2026-05-05 15:36:52
PLAN/S0095_integration-test-review.md
spec
Add strategic spec S0095 for integration-test-review
2026-05-05 15:40:44
docs/FEATURES.md
S0094 Phase 04
Add player-move/delete/rename feature bullets (EN/RU/UK)
2026-05-05 15:41:55
PLAN/S0095_integration-test-review/INDEX.md
spec-tech
Create tactical plan for S0095
2026-05-05 15:41:55
PLAN/S0095_integration-test-review/PHASE_01__test-constants-registry.md
spec-tech
Phase 01: test-constants-registry
2026-05-05 15:41:55
PLAN/S0095_integration-test-review/PHASE_02__refactor-existing-tests.md
spec-tech
Phase 02: refactor-existing-tests
2026-05-05 15:41:55
PLAN/S0095_integration-test-review/PHASE_03__player-instrumentation-tests.md
spec-tech
Phase 03: player-instrumentation-tests
2026-05-05 15:41:55
PLAN/S0095_integration-test-review/PHASE_04__settings-ui-tests.md
spec-tech
Phase 04: settings-ui-tests
2026-05-05 15:41:55
PLAN/S0095_integration-test-review/PHASE_05__bd-ts-player-test.md
spec-tech
Phase 05: bd-ts-player-test
2026-05-05 15:41:55
PLAN/S0095_integration-test-review/PHASE_06__unit-edge-cases.md
spec-tech
Phase 06: unit-edge-cases
2026-05-05 15:41:55
PLAN/S0095_integration-test-review/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup
2026-05-05 15:41:55
PLAN/S0095_integration-test-review.md
spec-tech
Status → Tactical
2026-05-05 15:43:02
app_v2/src/androidTest/java/com/sza/fastmediasorter/TestFixtures.kt
test
Add TestFixtures object - centralized androidTest constants and createTempFile helper
2026-05-05 15:43:55
app_v2/src/androidTest/TESTING_PREREQUISITES.md
test
Add TESTING_PREREQUISITES.md - documents device setup and @NetworkRequired convention
2026-05-05 15:44:03
PLAN/S0094_player-move-currently-playing.md
spec-check
Audit S0094 → Verified; PASS/WARN/FAIL 45/0/0
2026-05-05 15:45:19
app_v2/src/androidTest/java/com/sza/fastmediasorter/data/FileOperationsInstrumentationTest.kt
test
Refactor to use TestFixtures.createTempFile; remove private createTestFile helper
2026-05-05 15:45:58
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/settings/DefaultCredentialsInputTest.kt
test
Replace hardcoded s0090-user with TestFixtures.DEFAULT_USER; remove companion constant
2026-05-05 15:48:53
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/player/PlayerFileOperationsInstrumentationTest.kt
test
Add PlayerFileOperationsInstrumentationTest - file-move invariant tests for player area
2026-05-05 15:49:34
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/player/PlayerOrientationInstrumentationTest.kt
test
Add PlayerOrientationInstrumentationTest - recreate() does not crash, RESUMED state asserted
2026-05-05 15:51:58
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorCredentialsInstrumentationTest.kt
test
Add ResourceEditorCredentialsInstrumentationTest - etName/etUsername SMB form input verification
2026-05-05 15:52:45
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/settings/CloudAuthLifecycleInstrumentationTest.kt
test
Add CloudAuthLifecycleInstrumentationTest - verifies SettingsActivity RESUMED with cleared cloud auth prefs
2026-05-05 15:54:13
app_v2/src/androidTest/assets/test_media/minimal.ts
test
Add minimal.ts - 576-byte MPEG-TS probe with sync bytes at 0/188/376 for STANDARD_188 classification
2026-05-05 15:55:01
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/player/BdTsPlaybackInstrumentationTest.kt
test
Add BdTsPlaybackInstrumentationTest - TsPacketFormatDetector STANDARD_188 assertion on assets probe
2026-05-05 15:56:09
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/filelist/BrowseFileListManagerTest.kt
test
Add empty-list sort edge cases: sortFiles_emptyList_returnsEmpty + sortFiles_emptyList_randomMode_returnsEmpty
2026-05-05 15:56:41
app_v2/src/test/java/com/sza/fastmediasorter/domain/playback/PlaybackCompletionDetectorTest.kt
test
Add zero-duration and exactlyAtThreshold edge cases to PlaybackCompletionDetectorTest
2026-05-05 15:57:18
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VideoPlayerManagerRouteErrorTest.kt
test
Add emptyPath_mapsToOther edge case - guards against NPE on empty path in NetworkPlaybackContainerHint
2026-05-05 16:03:39
PLAN/S0095_integration-test-review.md
spec-check
Audit S0095 → Verified; PASS 35 / WARN 0 / FAIL 0
2026-05-05 16:14:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationProgressDialog.kt
FileOperationProgressDialog
S0074: fix progressBar not reaching 100% on Completed - bar was stuck at last rendered value (~24%) when skipped files processed within one frame
2026-05-05 16:36:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
PlayerActivity / SFTP playback
Remove toast from EOF retry loop - silent retry until exhausted, then error_loading_media toast on skip
2026-05-05 16:50:43
app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt
AudioMetadataLoader
suppress full stack trace on Media3 MetadataRetriever failure; log exception class name only
2026-05-05 17:06:52
PLAN/S0096_browse-audio-black-screen.md
spec-all
Compact spec: S0096 browse-audio-black-screen
2026-05-05 17:10:06
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
S0096: add action_black_screen item (audio-only, first position)
2026-05-05 17:10:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
S0096: add isAudioOnly/onBlackScreenClicked params and item handler
2026-05-05 17:10:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
S0096: instantiate BlackScreenOverlayManager, pass callback to showMenu
2026-05-05 17:10:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
S0096: hide blackScreenManager overlay in onPause
2026-05-05 17:11:13
PLAN/S0096_browse-audio-black-screen.md
spec-all
Pipeline Verified: S0096 browse-audio-black-screen
2026-05-05 17:32:32
PLAN/S0075_device-reach-google-play.md
Spec S0075
Resolved open question §6.3 regarding VR manifest device reach
2026-05-05 17:32:41
PLAN/S0075_device-reach-google-play/INDEX.md
Spec S0075
Resolved §6.3 in INDEX Blockers Log
2026-05-05 17:38:12
PLAN/S0024_vr-hud-ray-input.md
S0024
Updated status to Verified after S0080 implementation
2026-05-05 17:38:22
PLAN/S0058_vr-passthrough-camera-capture/INDEX.md
spec-tech
Create tactical plan for S0058
2026-05-05 17:38:22
PLAN/S0058_vr-passthrough-camera-capture/PHASE_01__interface-hilt-wiring.md
spec-tech
Phase 01: interface-hilt-wiring
2026-05-05 17:38:22
PLAN/S0058_vr-passthrough-camera-capture/PHASE_02__vr-manifest-binding.md
spec-tech
Phase 02: vr-manifest-binding
2026-05-05 17:38:22
PLAN/S0058_vr-passthrough-camera-capture/PHASE_03__camera-capture.md
spec-tech
Phase 03: camera-capture
2026-05-05 17:38:22
PLAN/S0058_vr-passthrough-camera-capture/PHASE_04__save-ux-feedback.md
spec-tech
Phase 04: save-ux-feedback
2026-05-05 17:38:22
PLAN/S0058_vr-passthrough-camera-capture/PHASE_05__strings-localization.md
spec-tech
Phase 05: strings-localization
2026-05-05 17:38:22
PLAN/S0058_vr-passthrough-camera-capture/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-05-05 17:38:22
PLAN/S0058_vr-passthrough-camera-capture.md
spec-tech
Status Approved -> Tactical
2026-05-05 17:38:37
PLAN/S0024_vr-hud-ray-input/INDEX.md
S0024
Updated completion gate checkboxes
2026-05-05 17:39:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowsePassthroughCaptureProvider.kt
S0058-Phase01
Create BrowsePassthroughCaptureProvider interface
2026-05-05 17:40:04
app_v2/src/main/java/com/sza/fastmediasorter/di/BrowsePassthroughOptionalModule.kt
S0058-Phase01
Create BrowsePassthroughOptionalModule Hilt @BindsOptionalOf
2026-05-05 17:41:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0058-Phase01
Add passthroughProvider param to BrowseManagerInitializer
2026-05-05 17:41:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0058-Phase01
Inject Optional + pass to BrowseManagerInitializer
2026-05-05 17:41:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0058-Phase01
Route camera visibility check through passthroughProvider
2026-05-05 17:41:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0058-Phase01
Route onCameraCaptureClicked to passthrough provider when present
2026-05-05 17:48:52
app_v2/src/vr/AndroidManifest.xml
S0058-Phase02
Add horizonos.permission.HEADSET_CAMERA + camera2 feature
2026-05-05 17:49:24
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrBrowsePassthroughCaptureManager.kt
S0058-Phase02
Create VrBrowsePassthroughCaptureManager skeleton with isAvailable() Camera2 detection
2026-05-05 17:49:56
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrModule.kt
S0058-Phase02
Bind VrBrowsePassthroughCaptureManager as BrowsePassthroughCaptureProvider
2026-05-05 17:53:15
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrBrowsePassthroughCaptureManager.kt
S0058-Phase03
Add permission check + VrPermissionBridgeFragment
2026-05-05 17:56:53
PLAN/spec-catalog.jsonl
spec-catalog
Updated S0024 status to Verified
2026-05-05 17:59:24
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrBrowsePassthroughCaptureManager.kt
spec-dev S0058 step-03.4
Add shutter flash overlay: white View animated alpha 0.85→0 over 220ms after capture trigger
2026-05-05 18:02:40
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrBrowsePassthroughCaptureManager.kt
spec-dev S0058 step-04.1
Implement onJpegCaptured(): LOCAL path direct write, virtual/network via MediaStore IS_PENDING pattern
2026-05-05 18:03:04
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrBrowsePassthroughCaptureManager.kt
spec-dev S0058 step-04.2
Show Snackbar with passthrough_capture_saved message after successful JPEG save
2026-05-05 18:04:45
app_v2/src/vr/res/values/strings.xml
spec-dev S0058 step-04.3
Add 7 passthrough_capture_* placeholder strings (Phase 05 will localize EN/RU/UK)
2026-05-05 18:06:47
app_v2/src/main/res/values/strings.xml
spec-dev S0058 step-05.1
Add 7 passthrough_capture_* strings (EN) near vr_save_frame block
2026-05-05 18:06:47
app_v2/src/main/res/values-ru/strings.xml
spec-dev S0058 step-05.1
Add 7 passthrough_capture_* strings (RU) near vr_save_frame block
2026-05-05 18:06:47
app_v2/src/main/res/values-uk/strings.xml
spec-dev S0058 step-05.1
Add 7 passthrough_capture_* strings (UK) near vr_save_frame block
2026-05-05 18:06:47
app_v2/src/vr/res/values/strings.xml
spec-dev S0058 step-05.1
Remove 7 passthrough_capture_* placeholder strings (moved to main res)
2026-05-05 18:09:14
docs/FEATURES.md
S0058
Add passthrough snapshot bullet to VR Features
2026-05-05 18:09:14
docs/FEATURES_RU.md
S0058
Add passthrough snapshot bullet to VR Features (RU)
2026-05-05 18:09:14
docs/FEATURES_UK.md
S0058
Add passthrough snapshot bullet to VR Features (UK)
2026-05-05 18:10:54
dev/CATALOG/app_v2.jsonl
S0058
Catalog regen after passthrough capture classes added; roles set for 3 new files
2026-05-05 18:10:54
dev/CATALOG/app_v2.md
S0058
Catalog render after passthrough capture classes added
2026-05-05 18:13:41
PLAN/S0058_vr-passthrough-camera-capture.md
spec-check
Audit S0058 → Verified; PASS 37 / WARN 0 / FAIL 0 / MANUAL 5
2026-05-05 19:13:42
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpClient.kt
FtpClient
S0002 Wave 22: extract FtpConnectedOperations (876 -> 247 LOC); all stateful file ops moved to FtpConnectedOperations (484 LOC)
2026-05-05 23:32:12
PLAN/S0088_test-vr-video-layer-geometry-snapshot/INDEX.md
spec-tech
S0088: create tactical plan INDEX
2026-05-05 23:32:12
PLAN/S0088_test-vr-video-layer-geometry-snapshot/PHASE_01__refactor-shader-access.md
spec-tech
S0088 Phase 01: refactor-shader-access
2026-05-05 23:32:12
PLAN/S0088_test-vr-video-layer-geometry-snapshot/PHASE_02__unit-tests.md
spec-tech
S0088 Phase 02: unit-tests
2026-05-05 23:32:12
PLAN/S0088_test-vr-video-layer-geometry-snapshot/PHASE_03__docs-catalog-cleanup.md
spec-tech
S0088 Phase 03: docs-catalog-cleanup
2026-05-05 23:32:12
PLAN/S0088_test-vr-video-layer-geometry-snapshot.md
spec-tech
S0088: Status -> Tactical
2026-05-05 23:33:50
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
S0088
Step 1.1: extract fisheyeFragSrc to companion object FISHEYE_FRAG_SRC (internal val)
2026-05-05 23:34:56
PLAN/spec-catalog.jsonl
spec-check
Archive S0004 (resource-icon-quick-slideshow) - spec file missing, feature implemented
2026-05-05 23:36:28
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/render/VrStereoRendererTest.kt
S0088
Step 2.1: add fisheyeFragSrc V-axis assertion test
2026-05-05 23:37:19
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/render/VrLayerFactoryTest.kt
S0088
Step 2.2: add quadCinema/equirect180/equirect360 geometry snapshot tests
2026-05-05 23:37:30
PLAN/S0007_vr-hand-tracking.md
spec-check
Audit S0007 -> Partial; PASS/WARN/FAIL 33/1/0
2026-05-05 23:38:08
PLAN/S0007_vr-hand-tracking.md
spec-fix
Annotate Last Audit (S0007)
2026-05-05 23:38:08
PLAN/S0007_vr-hand-tracking/PHASE_01__verify-layer-e.md
spec-fix
S0007: fix F1 predicate - kHandSuppressionWindow -> kControllerIdleSwitchNs
2026-05-05 23:38:52
PLAN/S0007_vr-hand-tracking.md
spec-check
Audit S0007 -> Verified; PASS/WARN/FAIL 34/0/0
2026-05-05 23:39:40
dev/CATALOG/app_v2.jsonl
S0088
Catalog regen: VrStereoRenderer FISHEYE_FRAG_SRC added to companion object
2026-05-05 23:39:40
dev/CATALOG/app_v2.md
S0088
Catalog regen: VrStereoRenderer FISHEYE_FRAG_SRC added to companion object
2026-05-05 23:40:18
PLAN/S0025_smb-fast-fail.md
spec-check
Audit S0025 -> Partial; PASS/WARN/FAIL 12/1/0; missing NetworkReachabilityGateTest.kt
2026-05-05 23:40:43
PLAN/S0025_smb-fast-fail.md
spec-fix
Annotate Last Audit (S0025): 0 auto-fixed, 1 follow-up (NetworkReachabilityGateTest.kt)
2026-05-05 23:41:42
app_v2/src/vr/AndroidManifest.xml
spec-dev
S0036 Phase 01: add xmlns:tools namespace; declare uses-feature android.software.xr.api.spatial (required=false); add property PROPERTY_XR_ACTIVITY_START_MODE=HOME_SPACE inside application block
2026-05-05 23:42:27
PLAN/S0088_test-vr-video-layer-geometry-snapshot.md
spec-check
Audit S0088 -> Verified; PASS/WARN/FAIL 15/0/0
2026-05-05 23:44:50
app_v2/src/test/java/com/sza/fastmediasorter/core/network/NetworkReachabilityGateTest.kt
S0025
Recreate NetworkReachabilityGateTest - 5 unit scenarios for requireAnyNetwork and requireWifi
2026-05-05 23:45:55
PLAN/S0025_smb-fast-fail.md
spec-check
Audit S0025 -> Verified; PASS/WARN/FAIL 13/0/0
2026-05-05 23:46:15
app_v2/src/vr/AndroidManifest.xml
spec-dev
S0036 Phase 02: overlay configChanges (smallestScreenSize|screenLayout|density|navigation|uiMode|fontScale) for SettingsActivity and WelcomeActivity via tools:replace; extend MainActivity overlay with same set; vrDebug merged manifest verified
2026-05-05 23:46:56
PLAN/S0036_vr-android-xr-sdk-compat.md
spec-doc
S0036 known XR SDK system noise: ‘Failed to open rendernode’ (x86_64 emulator hwui artefact, won’t-fix without real device, see S0036 §6 Q3); ‘EmbeddingMixedHandler: No WindowHierarchyInfo found’ is XR Shell internal - declaring PROPERTY_XR_ACTIVITY_START_MODE=HOME_SPACE is the recommended action; residual noise is acceptable and not blocking UX (see S0036 §6 Q2).
2026-05-05 23:47:48
app_v2/src/vr/AndroidManifest.xml
spec-dev
S0036 Android XR SDK compat: declare uses-feature spatial + PROPERTY_XR_ACTIVITY_START_MODE=HOME_SPACE; overlay configChanges (smallestScreenSize|screenLayout|density|navigation|uiMode|fontScale) for Settings/Welcome/Main via tools:replace
2026-05-05 23:51:07
PLAN/S0036_vr-android-xr-sdk-compat.md
spec-check
Audit S0036 -> Verified; PASS/WARN/FAIL 14/0/0
2026-05-05 23:57:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt
S0087
Replace Timber.w with 404-aware branch in onLoadFailed
2026-05-05 23:58:55
PLAN/S0089_bugfix-save-frame-feedback.md
spec-check
Audit S0089 -> Partial; PASS 4 / WARN 1 / FAIL 0
2026-05-05 23:58:55
PLAN/S0090_bugfix-settings-default-credentials-input.md
spec-check
Audit S0090 -> Broken; PASS 7 / WARN 1 / FAIL 1
2026-05-05 23:58:56
PLAN/S0091_bugfix-file-op-progress-startup-race.md
spec-check
Audit S0091 -> Partial; PASS 3 / WARN 2 / FAIL 0
2026-05-05 23:58:56
PLAN/S0092_bugfix-sftp-range-read-retry-overflow.md
spec-check
Audit S0092 -> Partial; PASS 2 / WARN 1 / FAIL 0
2026-05-05 23:58:56
PLAN/S0093_vr-single-playback-authority.md
spec-check
Audit S0093 -> Partial; PASS 3 / WARN 2 / FAIL 0
2026-05-06 00:00:16
PLAN/S0090_bugfix-settings-default-credentials-input.md
spec-fix
Annotate Last Audit (S0090): FIXED predicate mismatch in Phase 03 Step 03.2
2026-05-06 00:00:17
PLAN/S0090_bugfix-settings-default-credentials-input/PHASE_03__keyboard-guard-tests.md
spec-fix
S0090: align grep predicate to actual camelCase method defaultUserAcceptsInlineTextInput
2026-05-06 00:02:41
PLAN/S0087_bugfix-cover-art-glide-404-log-spam.md
S0087
Status -> Implemented
2026-05-06 00:03:07
PLAN/S0090_bugfix-settings-default-credentials-input.md
spec-check
Audit S0090 -> Verified; PASS 25 / WARN 0 / FAIL 0
2026-05-06 00:04:33
PLAN/S0089_bugfix-save-frame-feedback.md
spec-fix
Annotate Last Audit (S0089): FIXED Phase 02 unchecked progress tracker
2026-05-06 00:04:33
PLAN/S0089_bugfix-save-frame-feedback/PHASE_02__docs-catalog-cleanup.md
spec-fix
S0089: mark all Phase 02 steps [x] - confirmed by CHANGELOG entries 6251-6252
2026-05-06 00:04:37
PLAN/S0087_bugfix-cover-art-glide-404-log-spam.md
spec-check
Audit S0087 -> Partial; PASS 10 / WARN 3 / FAIL 0
2026-05-06 00:05:32
PLAN/S0089_bugfix-save-frame-feedback.md
spec-check
Audit S0089 -> Verified; PASS 6 / WARN 0 / FAIL 0
2026-05-06 00:06:36
PLAN/S0087_bugfix-cover-art-glide-404-log-spam.md
spec-fix
Annotate Last Audit (S0087)
2026-05-06 00:06:36
PLAN/S0087_bugfix-cover-art-glide-404-log-spam/PHASE_01__fix-onload-failed-log.md
spec-fix
Refine Step 01.1 verification predicates to match broader implementation scope
2026-05-06 00:06:57
dev/CATALOG/app_v2.jsonl
S0091
S0091: tombstone - catalog regenerated after FileOperationProgressDialog lifecycle guard (hasSummaryViews)
2026-05-06 00:06:57
dev/CATALOG/app_v2.md
S0091
S0091: tombstone - catalog rendered after FileOperationProgressDialog lifecycle guard (hasSummaryViews)
2026-05-06 00:07:26
PLAN/S0091_bugfix-file-op-progress-startup-race.md
spec-fix
Annotate Last Audit (S0091): FIXED duplicate Completion Gate + tombstone catalog entries
2026-05-06 00:07:27
PLAN/S0091_bugfix-file-op-progress-startup-race/INDEX.md
spec-fix
S0091: remove stale unchecked Completion Gate duplicate
2026-05-06 00:08:26
PLAN/S0087_bugfix-cover-art-glide-404-log-spam.md
spec-check
Audit S0087 -> Verified; PASS 11 / WARN 0 / FAIL 0
2026-05-06 00:08:51
PLAN/S0091_bugfix-file-op-progress-startup-race.md
spec-check
Audit S0091 -> Verified; PASS 7 / WARN 0 / FAIL 0
2026-05-06 00:09:23
dev/CATALOG/app_v2.jsonl
S0092
S0092: tombstone - catalog regenerated after SftpClient.readFileBytesRange retry-path fix (removed skip(offset))
2026-05-06 00:09:23
dev/CATALOG/app_v2.md
S0092
S0092: tombstone - catalog rendered after SftpClient.readFileBytesRange retry-path fix
2026-05-06 00:09:57
PLAN/S0092_bugfix-sftp-range-read-retry-overflow.md
spec-fix
Annotate Last Audit (S0092): FIXED missing catalog tombstone entries
2026-05-06 00:11:05
PLAN/S0092_bugfix-sftp-range-read-retry-overflow.md
spec-check
Audit S0092 -> Verified; PASS 5 / WARN 0 / FAIL 0
2026-05-06 00:13:26
dev/CATALOG/app_v2.jsonl
catalog
S0093: catalog regenerated after VR playback authority consolidation (VrPlaybackEngine, ExoVrPlaybackEngine removed)
2026-05-06 00:13:35
dev/CATALOG/app_v2.md
catalog
S0093: catalog rendered after VR playback authority consolidation (VrPlaybackEngine, ExoVrPlaybackEngine removed)
2026-05-06 00:13:54
PLAN/S0093_vr-single-playback-authority.md
spec-fix
Annotate Last Audit (S0093): FIXED catalog tombstone, PRE-RESOLVED deletion entries
2026-05-06 00:16:58
PLAN/S0093_vr-single-playback-authority.md
spec-check
Audit S0093 → Verified; PASS/WARN/FAIL 22/0/0
2026-05-06 01:41:36
PLAN/S0097_gms-update-once-settings-link.md
spec-all
Strategic spec S0097: GMS update one-time snackbar + settings link
2026-05-06 01:43:31
PLAN/S0097_gms-update-once-settings-link/INDEX.md
spec-all
Tactical plan S0097: 3 phases
2026-05-06 01:48:00
app_v2/src/main/java/com/sza/fastmediasorter/core/util/GmsAvailabilityChecker.kt
S0097
Add persistent one-time warning flag (isWarningSeen/markWarningSeen via SharedPreferences)
2026-05-06 01:48:00
app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt
S0097
showGmsWarningIfNeeded: use persistent flag - snackbar shown at most once per install
2026-05-06 01:48:00
app_v2/src/main/res/layout/fragment_settings_general.xml
S0097
Add tvGmsSettingsLink banner before INTERFACE section
2026-05-06 01:48:00
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0097
Add tvGmsSettingsLink banner (landscape counterpart)
2026-05-06 01:48:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
S0097
setupGmsBanner: show GMS update link in Settings General if GMS not OK
2026-05-06 01:48:43
PLAN/S0097_gms-update-once-settings-link.md
spec-all
Pipeline Verified: S0097 - GMS update one-time snackbar + settings link
2026-05-06 01:53:43
PLAN/S0068_scan-progress-indicator.md
spec-check
Audit S0068 → Verified; PASS/WARN/FAIL 15/0/0
2026-05-06 01:55:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
SftpPlaybackHelper
Fix SFTP ExoPlayer connecting to default port 22 instead of URI port: parse serverHost/serverPort from path URI before SftpDataSourceFactory construction
2026-05-06 02:09:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
FileOperationDestinationDialog
Throttle progress Timber.d to log once per 5% instead of every ~128KB tick
2026-05-06 02:27:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseEvent.kt
BrowseEvent
Add ShowLocalNetworkPermissionRequired event
2026-05-06 02:27:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseLoadingAuxManager.handleLoadingError
Early-return for LocalNetworkPermissionDeniedException - send ShowLocalNetworkPermissionRequired, setLoading(false)
2026-05-06 02:27:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler.handleEvent
Handle ShowLocalNetworkPermissionRequired - show permission rationale dialog
2026-05-06 02:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ExoPlayerControlsManager.kt
ExoPlayerControlsManager
Fix seek buttons: route via callback (onSeekForward/onSeekBackward) instead of calling VideoPlayerManager directly; change forward seek from 30s to 10s
2026-05-06 02:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
ExoPlayerControlsManager.ExoPlayerControlsCallback
Implement onSeekForward/onSeekBackward in ExoPlayerControlsCallback with isAudioServiceActive routing so seek works via AudioPlaybackService
2026-05-06 02:40:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
PlayerKeyboardCallbackImpl
Fix keyboard seek: use getActivePlayer() instead of videoPlayerManager.seek* so audio service seek works
2026-05-06 02:40:03
app_v2/src/main/res/layout/custom_player_controls.xml
btnForward30
Update contentDescription from forward_30_seconds to forward_10_seconds to match actual 10s seek
2026-05-06 02:40:03
app_v2/src/main/res/layout/custom_player_controls_large.xml
btnForward30
Update contentDescription from forward_30_seconds to forward_10_seconds to match actual 10s seek
2026-05-06 03:28:22
PLAN/S0098_bugfix-smb-precheck-false-fail/INDEX.md
spec-tech
Create tactical plan for S0098
2026-05-06 03:28:22
PLAN/S0098_bugfix-smb-precheck-false-fail/PHASE_01__fix-precheck-logic.md
spec-tech
Phase 01: fix-precheck-logic
2026-05-06 03:28:22
PLAN/S0098_bugfix-smb-precheck-false-fail/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-06 03:28:22
PLAN/S0098_bugfix-smb-precheck-false-fail.md
spec-tech
Status → Tactical
2026-05-06 03:31:35
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionPool.kt
S0098
Add hasActiveConnectionForServer for TCP precheck bypass
2026-05-06 03:31:35
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
S0098
Skip TCP precheck when pool has live entry for same server:port
2026-05-06 03:32:45
dev/CATALOG/app_v2.jsonl
S0098
Catalog regen after SmbConnectionPool/Manager changes
2026-05-06 03:48:02
PLAN/S0099_sftp-concurrent-access-fix.md
spec
Add strategic spec S0099 for sftp-concurrent-access-fix
2026-05-06 03:51:52
PLAN/S0100_mic-recording-in-browse.md
spec
Add strategic spec S0100 for mic-recording-in-browse
2026-05-06 04:02:16
PLAN/S0099_sftp-concurrent-access-fix/INDEX.md
spec-tech
Create tactical plan for S0099
2026-05-06 04:02:16
PLAN/S0099_sftp-concurrent-access-fix/PHASE_01__session-pool-isolation.md
spec-tech
Phase 01: session-pool-isolation
2026-05-06 04:02:16
PLAN/S0099_sftp-concurrent-access-fix/PHASE_02__retry-with-backoff.md
spec-tech
Phase 02: retry-with-backoff
2026-05-06 04:02:16
PLAN/S0099_sftp-concurrent-access-fix/PHASE_03__sftp-error-strings.md
spec-tech
Phase 03: sftp-error-strings
2026-05-06 04:02:16
PLAN/S0099_sftp-concurrent-access-fix/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-06 04:02:16
PLAN/S0099_sftp-concurrent-access-fix.md
spec-tech
Status -> Tactical
2026-05-06 04:02:46
PLAN/S0100_mic-recording-in-browse/INDEX.md
spec-tech
Create tactical plan for S0100
2026-05-06 04:02:46
PLAN/S0100_mic-recording-in-browse/PHASE_01__foundations.md
spec-tech
Phase 01: foundations
2026-05-06 04:02:46
PLAN/S0100_mic-recording-in-browse/PHASE_02__recording-engine.md
spec-tech
Phase 02: recording-engine
2026-05-06 04:02:46
PLAN/S0100_mic-recording-in-browse/PHASE_03__manifest-strings.md
spec-tech
Phase 03: manifest-strings
2026-05-06 04:02:46
PLAN/S0100_mic-recording-in-browse/PHASE_04__settings-ui.md
spec-tech
Phase 04: settings-ui
2026-05-06 04:02:46
PLAN/S0100_mic-recording-in-browse/PHASE_05__browse-integration.md
spec-tech
Phase 05: browse-integration
2026-05-06 04:02:46
PLAN/S0100_mic-recording-in-browse/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-05-06 04:02:46
PLAN/S0100_mic-recording-in-browse.md
spec-tech
Status -> Tactical
2026-05-06 04:02:48
README.md
Usage Scenarios
Add scenario 11: Media Centre on Android TV Box
2026-05-06 04:02:55
docs/README_RU.md
Usage Scenarios
Add scenario 11: Media Centre on Android TV Box (RU)
2026-05-06 04:02:55
docs/README_UK.md
Usage Scenarios
Add scenario 11: Media Centre on Android TV Box (UK)
2026-05-06 04:02:55
docs/HOW_TO.md
How-To guides
Add guide: How to use FMS on Android TV box
2026-05-06 04:02:55
docs/HOW_TO_RU.md
How-To guides
Add guide: How to use FMS on Android TV box (RU)
2026-05-06 04:02:55
docs/HOW_TO_UK.md
How-To guides
Add guide: How to use FMS on Android TV box (UK)
2026-05-06 10:04:02
PLAN/S0098_bugfix-smb-precheck-false-fail.md
spec-all
Pipeline Verified: S0098 - bugfix-smb-precheck-false-fail
2026-05-06 11:19:42
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
SftpConnectionPool
S0099 Phase 01: add playbackConnectionPool for ExoPlayer session isolation, extend disconnectAll/cleanupIdleConnections to cover both pools, tag Timber calls with [PLAYBACK]/[FILE_OPS]
2026-05-06 11:24:55
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpDownloadExhaustedException.kt
SftpDownloadExhaustedException
S0099 Phase 02: new typed exception for SFTP download retry exhaustion
2026-05-06 11:24:55
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient
S0099 Phase 02: replace downloadFile() single-retry with 3-attempt exponential backoff (1s/2s/4s), add kotlinx.coroutines.delay import
2026-05-06 11:30:52
app_v2/src/main/res/values/strings.xml
strings.xml (EN)
S0099 Phase 03: add error_sftp_copy_failed_server, error_sftp_copy_access_denied, error_sftp_connection_limit
2026-05-06 11:30:52
app_v2/src/main/res/values-ru/strings.xml
strings.xml (RU)
S0099 Phase 03: add error_sftp_copy_failed_server, error_sftp_copy_access_denied, error_sftp_connection_limit
2026-05-06 11:30:52
app_v2/src/main/res/values-uk/strings.xml
strings.xml (UK)
S0099 Phase 03: add error_sftp_copy_failed_server, error_sftp_copy_access_denied, error_sftp_connection_limit
2026-05-06 11:30:52
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpFileOperationHandler.kt
SftpFileOperationHandler
S0099 Phase 03: wire SftpDownloadExhaustedException into bridge-copy error path with localized messages
2026-05-06 11:35:00
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
S0099
Add playbackConnectionPool; isolate ExoPlayer sessions from FILE_OPS sessions
2026-05-06 11:35:00
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpDownloadExhaustedException.kt
S0099
New typed exception for exhausted SFTP download retries
2026-05-06 11:35:00
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0099
Replace single-retry downloadFile with 3-attempt backoff loop
2026-05-06 11:35:00
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpFileOperationHandler.kt
S0099
Map SftpDownloadExhaustedException to user-friendly localized error in bridge copy
2026-05-06 11:35:00
app_v2/src/main/res/values/strings.xml
S0099
Add error_sftp_copy_failed_server/access_denied/connection_limit (EN)
2026-05-06 11:35:00
app_v2/src/main/res/values-ru/strings.xml
S0099
Add error_sftp_copy_failed_server/access_denied/connection_limit (RU)
2026-05-06 11:35:00
app_v2/src/main/res/values-uk/strings.xml
S0099
Add error_sftp_copy_failed_server/access_denied/connection_limit (UK)
2026-05-06 11:39:15
PLAN/S0099_sftp-concurrent-access-fix.md
spec-check
Audit S0099 -> Partial; PASS/WARN/FAIL 31/1/0; WARN: SftpFileOperationHandler.kt 430 lines vs budget 420
2026-05-06 11:39:37
PLAN/S0099_sftp-concurrent-access-fix.md
spec-fix
Annotate Last Audit (S0099): 0 auto-fixed, 1 follow-up (file budget advisory)
2026-05-06 12:09:56
PLAN/S0101_unified-permission-onboarding.md
spec
Add strategic spec S0101 for unified-permission-onboarding (research spike, wishlist)
2026-05-06 12:15:55
PLAN/S0102_spec-catalog-ergonomics.md
spec
Add strategic spec S0102 for spec-catalog-ergonomics
2026-05-06 12:18:56
PLAN/S0100_mic-recording-in-browse.md
spec-update
Refinement (claude-sonnet-4-6, focus: all) - 4 applied
2026-05-06 12:18:56
PLAN/S0100_mic-recording-in-browse/PHASE_03__manifest-strings.md
spec-update
Refinement (claude-sonnet-4-6) - Step 3.1 verification predicate clarified
2026-05-06 12:19:08
PLAN/S0101_unified-permission-onboarding.md
spec
S0101: expand with Welcome-screen concept and per-permission action buttons
2026-05-06 12:28:01
CLAUDE.md
spec-writing-style
Add Spec Writing Style and Debug Verification Tags rules to CLAUDE.md (S0102 scope)
2026-05-06 12:28:01
PLAN/S0102_spec-catalog-ergonomics.md
spec
Expand S0102 scope: spec minimalism + debug verification tags
2026-05-06 12:31:41
PLAN/S0102_spec-catalog-ergonomics.md
spec
Expand S0102 scope: add schema extension (tags, blocked_by, type) as Group 0
2026-05-06 12:43:24
PLAN/S0101_unified-permission-onboarding.md
S0101
Updated strategic specification to explicitly account for S0100 (microphone) and S0035 (local network) integration
2026-05-06 12:44:31
PLAN/S0102_spec-catalog-ergonomics.md
spec-update
Refinement (GPT-5.4, focus: structure, completeness, consistency, style, verifiability)
2026-05-06 12:49:08
PLAN/S0102_spec-catalog-ergonomics.md
spec-update
Refinement (claude-sonnet-4-6, focus: all)
2026-05-06 13:00:21
PLAN/S0102_spec-catalog-ergonomics/INDEX.md
spec-tech
Create tactical plan for S0102
2026-05-06 13:00:21
PLAN/S0102_spec-catalog-ergonomics/PHASE_01__schema-foundations.md
spec-tech
Phase 01: schema-foundations
2026-05-06 13:00:21
PLAN/S0102_spec-catalog-ergonomics/PHASE_02__read-commands.md
spec-tech
Phase 02: read-commands
2026-05-06 13:00:21
PLAN/S0102_spec-catalog-ergonomics/PHASE_03__close-command.md
spec-tech
Phase 03: close-command
2026-05-06 13:00:21
PLAN/S0102_spec-catalog-ergonomics/PHASE_04__bulk-update.md
spec-tech
Phase 04: bulk-update
2026-05-06 13:00:21
PLAN/S0102_spec-catalog-ergonomics/PHASE_05__skill-integration.md
spec-tech
Phase 05: skill-integration
2026-05-06 13:00:21
PLAN/S0102_spec-catalog-ergonomics/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-05-06 13:00:21
PLAN/S0102_spec-catalog-ergonomics.md
spec-tech
Status -> Tactical
2026-05-06 13:03:04
scripts/spec_catalog/SCHEMA.md
S0102
Phase 01.1: add Optional fields section
2026-05-06 13:03:04
scripts/spec_catalog/_lib.ps1
S0102
Phase 01.2: Write-Catalog pass-through for optional fields
2026-05-06 13:03:04
scripts/spec_catalog/update.ps1
S0102
Phase 01.3: update.ps1 copies optional fields to mutable copy
2026-05-06 13:05:06
scripts/spec_catalog/next-id.ps1
S0102
Phase 02.1: create next-id.ps1 - outputs next free S#### token
2026-05-06 13:05:06
scripts/spec_catalog/search.ps1
S0102
Phase 02.2: create search.ps1 - substring + metadata filter
2026-05-06 13:05:06
scripts/spec_catalog/stats.ps1
S0102
Phase 02.3: create stats.ps1 - catalog summary (table|json)
2026-05-06 13:06:20
scripts/spec_catalog/close.ps1
S0102
Phase 03.1: create close.ps1 - finalize spec with closed_at, Block guard
2026-05-06 13:07:38
scripts/spec_catalog/bulk-update.ps1
S0102
Phase 04.1: create bulk-update.ps1 - atomic multi-record status/priority update
2026-05-06 13:09:13
CLAUDE.md
S0102
Phase 05.1: add operator facade CLI references (next-id, search, close, stats, bulk-update)
2026-05-06 13:09:13
.claude/commands/spec.md
S0102
Phase 05.2: add next-id.ps1 note to spec-creation Catalog hooks
2026-05-06 13:09:13
.claude/commands/spec-check.md
S0102
Phase 05.3: replace update.ps1 Verified with close.ps1
2026-05-06 13:10:21
PLAN/S0102_spec-catalog-ergonomics/PHASE_06__docs-catalog-cleanup.md
S0102
Phase 06: docs-catalog-cleanup complete
2026-05-06 13:13:02
PLAN/S0102_spec-catalog-ergonomics.md
spec-check
Audit S0102 -> Verified; PASS 49/WARN 0/FAIL 0/EXEMPT 1
2026-05-06 14:42:05
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
S0100: add micRecordingEnabled + micRecordingAskFilename fields
2026-05-06 14:42:11
app_v2/build.gradle.kts
build.gradle.kts
S0100: add SUPPORT_MIC_RECORDING BuildConfig field to all 6 flavors
2026-05-06 14:42:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt
BrowseMicRecordingManager
S0100: new class - mic recording lifecycle and file save routing in Browse
2026-05-06 14:42:20
app_v2/src/main/AndroidManifest.xml
AndroidManifest
S0100: add RECORD_AUDIO permission (android:required=false)
2026-05-06 14:42:20
app_v2/src/main/res/values/strings.xml
strings.xml
S0100: add 14 mic recording string resources
2026-05-06 14:42:20
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
S0100: add 14 mic recording strings in Russian
2026-05-06 14:42:20
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml
S0100: add 14 mic recording strings in Ukrainian
2026-05-06 14:42:25
app_v2/src/main/res/layout/fragment_settings_audio.xml
fragment_settings_audio
S0100: add mic recording section with two switches
2026-05-06 14:42:25
app_v2/src/main/res/layout-land/fragment_settings_audio.xml
fragment_settings_audio-land
S0100: add mic recording section (landscape counterpart)
2026-05-06 14:42:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
AudioSettingsFragment
S0100: add mic recording section with permission handling
2026-05-06 14:42:30
app_v2/src/main/res/layout/activity_browse.xml
activity_browse
S0100: add btnMicRecord MaterialButton to command bar
2026-05-06 14:42:30
app_v2/src/main/res/layout-land/activity_browse.xml
activity_browse-land
S0100: add btnMicRecord to landscape layout
2026-05-06 14:42:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseButtonSetupHelper.kt
BrowseButtonSetupHelper
S0100: add onMicRecord touch callbacks to ButtonCallbacks interface
2026-05-06 14:42:30
app_v2/src/main/res/values/colors.xml
colors.xml
S0100: add recording_active_tint color
2026-05-06 14:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
S0100: wire BrowseMicRecordingManager, permission launcher, button visibility
2026-05-06 14:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
S0100: delegate onMicRecord touch callbacks to BrowseActivity
2026-05-06 14:42:40
docs/FEATURES.md
FEATURES.md
S0100: add microphone recording bullet
2026-05-06 14:42:40
docs/FEATURES_RU.md
FEATURES_RU.md
S0100: add microphone recording bullet (Russian)
2026-05-06 14:42:40
docs/FEATURES_UK.md
FEATURES_UK.md
S0100: add microphone recording bullet (Ukrainian)
2026-05-06 14:42:40
PLAN/S0100_mic-recording-in-browse/PHASE_03__manifest-strings.md
PHASE_03
S0100: phase file updated during implementation
2026-05-06 14:49:01
PLAN/S0103_player-top-bar-polish.md
spec
Add strategic spec S0103 for player-top-bar-polish
2026-05-06 14:49:51
PLAN/S0100_mic-recording-in-browse.md
spec-check
Audit S0100 → Verified; PASS/WARN/FAIL 54/0/0
2026-05-06 14:49:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt
BrowseMicRecordingManager
S0100 Verified: remove Timber.d debug tags
2026-05-06 14:56:46
PLAN/S0104_playback-order-mode.md
spec
Add strategic spec S0104 for playback-order-mode
2026-05-06 15:00:46
PLAN/S0103_player-top-bar-polish/INDEX.md
spec-tech
Create tactical plan for S0103
2026-05-06 15:00:46
PLAN/S0103_player-top-bar-polish/PHASE_01__command-visibility-fixes.md
spec-tech
Phase 01: command-visibility-fixes
2026-05-06 15:00:46
PLAN/S0103_player-top-bar-polish/PHASE_02__slideshow-position.md
spec-tech
Phase 02: slideshow-position
2026-05-06 15:00:46
PLAN/S0103_player-top-bar-polish/PHASE_03__sleep-timer-bar.md
spec-tech
Phase 03: sleep-timer-bar
2026-05-06 15:00:46
PLAN/S0103_player-top-bar-polish/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-06 15:00:46
PLAN/S0103_player-top-bar-polish.md
spec-tech
Status -> Tactical
2026-05-06 15:07:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0103
Fix audio exclusions for fullscreen/edit; add Timber import; debug tag S0103
2026-05-06 15:07:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0103
Add isAudio local to landscape branch; fix fullscreen/edit audio exclusions; add black screen visibility
2026-05-06 15:11:13
app_v2/src/main/res/layout/activity_player_unified.xml
S0103
Move btnSlideshowCmd to fixed anchor before nav block
2026-05-06 15:11:13
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0103
Add S0103 comment on btnSlideshowCmd fixed-anchor position
2026-05-06 15:11:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0103
Remove SLIDESHOW from adaptive buildActiveCommands set
2026-05-06 15:11:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0103
Wire slideshow as fixed anchor in portrait; update resolveAvailableCenterWidthPx
2026-05-06 15:11:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PlaybackOrderMode.kt
S0104
Add PlaybackOrderMode enum
2026-05-06 15:11:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlPreferences.kt
S0104
Add playback order prefs keys
2026-05-06 15:12:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0104
Add playbackOrderMode + shuffle management
2026-05-06 15:13:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0104
Add playbackOrderMode + shuffle management
2026-05-06 15:15:30
app_v2/src/main/res/layout/activity_player_unified.xml
S0103
Add btnSleepTimerCmd to center group
2026-05-06 15:15:30
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0103
Add btnSleepTimerCmd to landscape center group
2026-05-06 15:15:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0103
SLEEP_TIMER barCapable=true
2026-05-06 15:15:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0103
Wire btnSleepTimerCmd in getOverflowableButtons, barViewForCommand, and click listener
2026-05-06 15:16:07
PLAN/S0105_inline-audio-playback-in-browse.md
spec
Add strategic spec S0105 for inline-audio-playback-in-browse
2026-05-06 15:16:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0104
Add PlayerEvent.StopPlayback
2026-05-06 15:18:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0103
Fix audio exclusions for fullscreen/edit; SLIDESHOW removed from adaptive set; SLEEP_TIMER barCapable=true
2026-05-06 15:18:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0103
Fix landscape black-screen + audio visibility; slideshow as fixed anchor; sleep timer click listener
2026-05-06 15:18:06
app_v2/src/main/res/layout/activity_player_unified.xml
S0103
Move btnSlideshowCmd to fixed anchor before nav block; add btnSleepTimerCmd
2026-05-06 15:18:06
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0103
Add btnSleepTimerCmd; note slideshow already in correct position
2026-05-06 15:18:06
dev/CATALOG/app_v2.jsonl
S0103
Catalog regen after command panel changes
2026-05-06 15:19:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationCoordinator.kt
S0104
Mode-aware nextFile/previousFile
2026-05-06 15:19:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0104
Pass sendEvent to navigationCoordinator
2026-05-06 15:20:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationCoordinator.kt
S0104
Mode-aware previousFile
2026-05-06 15:20:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
S0104
Add applyPlaybackOrderMode()
2026-05-06 15:20:54
PLAN/S0103_player-top-bar-polish.md
spec-check
Audit S0103 -> Verified; PASS/WARN/FAIL 21/0/0
2026-05-06 15:20:54
PLAN/S0103_player-top-bar-polish/INDEX.md
spec-check
Status -> Done
2026-05-06 15:23:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
S0104
Add StopPlayback branch to event handler
2026-05-06 15:25:02
app_v2/src/main/res/values/strings.xml
S0104
Add playback order mode strings
2026-05-06 15:25:02
app_v2/src/main/res/values-ru/strings.xml
S0104
Mirror playback order strings (RU)
2026-05-06 15:25:02
app_v2/src/main/res/values-uk/strings.xml
S0104
Mirror playback order strings (UK)
2026-05-06 15:25:29
app_v2/src/main/res/drawable/ic_loop_list.xml
S0104
Add loop-list icon
2026-05-06 15:25:57
app_v2/src/main/res/menu/overflow_menu_player.xml
S0104
Add menu_playback_order item
2026-05-06 15:26:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0104
Add PLAYBACK_ORDER command
2026-05-06 15:27:06
app_v2/src/main/res/layout/activity_player_unified.xml
S0104
Add btnPlaybackOrderCmd (portrait)
2026-05-06 15:27:42
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0104
Add btnPlaybackOrderCmd (landscape)
2026-05-06 15:30:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0104
Wire playback order button
2026-05-06 15:37:28
PLAN/S0105_inline-audio-playback-in-browse/INDEX.md
spec-tech
Create tactical plan for S0105
2026-05-06 15:37:28
PLAN/S0105_inline-audio-playback-in-browse/PHASE_01__adapter-play-condition.md
spec-tech
Phase 01: adapter-play-condition
2026-05-06 15:37:28
PLAN/S0105_inline-audio-playback-in-browse/PHASE_02__stop-on-folder-navigate.md
spec-tech
Phase 02: stop-on-folder-navigate
2026-05-06 15:37:29
PLAN/S0105_inline-audio-playback-in-browse/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-06 15:37:29
PLAN/S0105_inline-audio-playback-in-browse.md
spec-tech
Status -> Tactical
2026-05-06 15:39:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
S0105
Phase 01: show inline play button for all audio files in any Browse resource
2026-05-06 15:39:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-dev S0104
Step 3.8: add onPlaybackOrderClicked(), mode restore in setupCommandPanelControls(), StopPlayback handler
2026-05-06 15:39:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
spec-dev S0104
Step 3.8: update StopPlayback branch - pause ExoPlayer/audio service + show toast
2026-05-06 15:42:17
scripts/spec_catalog/complete.ps1
S0102
Add complete.ps1 - validate + dev-log check + close in one command
2026-05-06 15:42:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0105
Phase 02: stop inline playback on folder navigation in non-audio-only resources
2026-05-06 15:42:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0105
Phase 02: stop inline playback on back-press navigation in non-audio-only resources
2026-05-06 15:43:47
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PlaybackOrderMode.kt
S0104
Add PlaybackOrderMode enum
2026-05-06 15:43:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlPreferences.kt
S0104
Add playback order prefs keys
2026-05-06 15:43:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0104
Add playbackOrderMode + shuffle management
2026-05-06 15:43:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationCoordinator.kt
S0104
Mode-aware nextFile/previousFile
2026-05-06 15:43:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
S0104
Add applyPlaybackOrderMode()
2026-05-06 15:43:47
app_v2/src/main/res/drawable/ic_loop_list.xml
S0104
Add loop-list icon
2026-05-06 15:43:47
app_v2/src/main/res/menu/overflow_menu_player.xml
S0104
Add menu_playback_order item
2026-05-06 15:43:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0104
Add PLAYBACK_ORDER command
2026-05-06 15:43:47
app_v2/src/main/res/layout/activity_player_unified.xml
S0104
Add btnPlaybackOrderCmd (portrait)
2026-05-06 15:43:47
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0104
Add btnPlaybackOrderCmd (landscape)
2026-05-06 15:43:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0104
Wire playback order button
2026-05-06 15:43:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0104
Delegate onPlaybackOrderClicked
2026-05-06 15:43:47
docs/FEATURES.md
S0104
Add playback order modes feature bullet
2026-05-06 15:43:47
docs/FEATURES_RU.md
S0104
Mirror playback order modes bullet (RU)
2026-05-06 15:43:47
docs/FEATURES_UK.md
S0104
Mirror playback order modes bullet (UK)
2026-05-06 15:43:47
dev/CATALOG/app_v2.jsonl
S0104
Regenerate after PlaybackOrderMode addition
2026-05-06 15:46:58
PLAN/S0104_playback-order-mode.md
spec-check
Audit S0104 -> Verified; PASS 25 / WARN 0 / FAIL 0 / MANUAL 9
2026-05-06 15:50:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
S0105
Phase 01: show inline play button for all audio files in any Browse resource
2026-05-06 15:50:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0105
Phase 02: stop inline playback on folder navigation in non-audio-only resources
2026-05-06 15:50:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0105
Phase 02: stop inline playback on back-press navigation in non-audio-only resources
2026-05-06 15:50:16
docs/FEATURES.md
S0105
Phase 03: expand inline mini-player entry to all Browse resources
2026-05-06 15:50:16
docs/FEATURES_RU.md
S0105
Phase 03: expand inline mini-player entry (RU)
2026-05-06 15:50:16
docs/FEATURES_UK.md
S0105
Phase 03: expand inline mini-player entry (UK)
2026-05-06 15:52:55
CLAUDE.md
S0102
Add complete.ps1 to operator facade list
2026-05-06 15:54:33
PLAN/S0105_inline-audio-playback-in-browse.md
spec-check
Audit S0105 -> Broken; PASS/WARN/FAIL 18/0/1
2026-05-06 15:55:06
docs/FEATURES_RU.md
spec-fix
S0105: align inline mini-player heading to мини-плеер (was аудио-миниплеер)
2026-05-06 15:55:06
PLAN/S0105_inline-audio-playback-in-browse.md
spec-fix
Annotate Last Audit (S0105)
2026-05-06 15:56:06
PLAN/S0105_inline-audio-playback-in-browse.md
spec-check
Audit S0105 -> Verified; PASS/WARN/FAIL 19/0/0
2026-05-06 15:58:50
scripts/spec_catalog/archive.ps1
tooling
Add archive.ps1 - move spec files to temp/done/ + set Archived status
2026-05-06 15:58:50
.claude/commands/spec-arc.md
tooling
Add spec-arc skill - archive spec to temp/done/
2026-05-06 15:58:50
CLAUDE.md
tooling
Add archive.ps1 to operator facade list
2026-05-06 16:05:02
PLAN/S0096_browse-audio-black-screen.md
spec-check
Audit S0096 → Verified; PASS 8/WARN 0/FAIL 0
2026-05-06 16:13:53
PLAN/S0101_unified-permission-onboarding.md
spec-update
Refinement (claude-sonnet-4-6, focus: all)
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding/INDEX.md
spec-tech
Create tactical plan for S0101
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding/PHASE_01__registry-domain.md
spec-tech
Phase 01: registry-domain
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding/PHASE_02__registry-impl.md
spec-tech
Phase 02: registry-impl
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding/PHASE_03__welcome-upgrade.md
spec-tech
Phase 03: welcome-upgrade
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding/PHASE_04__contextual-request.md
spec-tech
Phase 04: contextual-request
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding/PHASE_05__settings-screen.md
spec-tech
Phase 05: settings-screen
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding/PHASE_06__ad-hoc-migration.md
spec-tech
Phase 06: ad-hoc-migration
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup
2026-05-06 16:32:02
PLAN/S0101_unified-permission-onboarding.md
spec-tech
Status -> Tactical
2026-05-06 16:33:24
PLAN/S0101_unified-permission-onboarding.md
spec-tech
Add VR flavor to constraints (§3.2) and research §6.1
2026-05-06 16:54:41
PLAN/S0101_unified-permission-onboarding.md
spec-update
Resolve all §6 research items (S0101 unblocked)
2026-05-06 16:54:41
PLAN/S0101_unified-permission-onboarding/INDEX.md
spec-update
Check off all 5 blockers; reorder phases (05 before 03)
2026-05-06 16:54:41
PLAN/S0101_unified-permission-onboarding/PHASE_03__welcome-upgrade.md
spec-update
Rewrite Phase 03 for Variant B (Welcome → PermissionsManagementFragment)
2026-05-06 16:54:41
PLAN/S0101_unified-permission-onboarding/PHASE_05__settings-screen.md
spec-update
Add Grant All + Open System Settings to PermissionsManagementFragment
2026-05-06 16:56:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PermissionEntry.kt
S0101/1.1
New: PermissionEntry, PermissionGroup, PermissionStatus, PermissionGroupHeader domain models
2026-05-06 16:59:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/PermissionRegistryRepository.kt
S0101/1.2
New: PermissionRegistryRepository interface
2026-05-06 16:59:30
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ContextualRationaleRepository.kt
S0101/1.3
New: ContextualRationaleRepository interface
2026-05-06 17:04:33
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CheckPermissionStatusUseCase.kt
spec-dev/S0101/step-1.4
Create CheckPermissionStatusUseCase - returns PermissionStatus from PermissionEntry+Context, delegates special permissions to PermissionHelper
2026-05-06 17:04:58
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MarkContextualShownUseCase.kt
spec-dev/S0101/step-1.5
Create MarkContextualShownUseCase - delegates markShown/isShown to ContextualRationaleRepository
2026-05-06 17:10:48
app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt
spec-dev/S0101/step-2.1
Create PermissionRegistryRepositoryImpl - in-memory registry with SDK/flavor-gate filtering via BuildConfig reflection
2026-05-06 17:11:19
app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/ContextualRationaleRepositoryImpl.kt
spec-dev/S0101/step-2.2
Create ContextualRationaleRepositoryImpl - SharedPreferences-backed per-permission shown-once tracker
2026-05-06 17:11:51
app_v2/src/main/java/com/sza/fastmediasorter/di/PermissionModule.kt
spec-dev/S0101/step-2.3
Create PermissionModule - Hilt SingletonComponent bindings for PermissionRegistryRepository and ContextualRationaleRepository
2026-05-06 17:15:56
app_v2/src/main/res/layout/bottom_sheet_permission_rationale.xml
spec-dev/S0101/step-4.1
Create bottom_sheet_permission_rationale.xml - icon/title/desc/grant/skip layout for contextual permission rationale
2026-05-06 17:16:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/permissions/PermissionRationaleBottomSheet.kt
spec-dev/S0101/step-4.2
Create PermissionRationaleBottomSheet - BottomSheetDialogFragment with grant/skip callback and markShown
2026-05-06 17:17:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/permissions/PermissionDenialHandler.kt
spec-dev/S0101/step-4.3
Create PermissionDenialHandler - Snackbar with Open Settings action for PERMANENTLY_DENIED permissions
2026-05-06 17:17:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RequestContextualPermissionUseCase.kt
spec-dev/S0101/step-4.4
Create RequestContextualPermissionUseCase - shows PermissionRationaleBottomSheet once per permission, delegates to MarkContextualShownUseCase
2026-05-06 17:25:45
app_v2/src/main/res/layout/fragment_permissions_management.xml
spec-dev/S0101/step-5.1
Create fragment_permissions_management.xml - grant-all, open-settings, RecyclerView, continue-to-app buttons
2026-05-06 17:25:45
app_v2/src/main/res/layout/item_permission_entry.xml
spec-dev/S0101/step-5.1
Create item_permission_entry.xml - row layout for PermissionRowAdapter
2026-05-06 17:25:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionRowAdapter.kt
spec-dev/S0101/step-5.1
Create PermissionRowAdapter - Header/Entry sealed class adapter for PermissionsManagementFragment
2026-05-06 17:25:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt
spec-dev/S0101/step-5.1
Create PermissionsManagementFragment - registry-driven permission list with grant-all, single-request, denial handler
2026-05-06 17:27:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
spec-dev/S0101/step-5.2
Add Manage Permissions navigation - headerPermissions click opens PermissionsManagementFragment via fragment back stack
2026-05-06 19:47:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsPermissionsHelper.kt
spec-dev S0101 step 5.3
Replace ad-hoc permission buttons with redirect to PermissionsManagementFragment
2026-05-06 19:48:35
app_v2/src/main/res/values/strings.xml
spec-dev S0101 step 5.5
Add perm_btn_grant_all and perm_btn_open_system_settings strings (EN)
2026-05-06 19:48:35
app_v2/src/main/res/values-ru/strings.xml
spec-dev S0101 step 5.5
Add perm_btn_grant_all and perm_btn_open_system_settings strings (RU)
2026-05-06 19:48:35
app_v2/src/main/res/values-uk/strings.xml
spec-dev S0101 step 5.5
Add perm_btn_grant_all and perm_btn_open_system_settings strings (UK)
2026-05-06 19:49:34
app_v2/src/main/res/values/strings.xml
spec-dev S0101 step 5.4
Add settings_manage_permissions and settings_manage_permissions_desc strings (EN)
2026-05-06 19:49:34
app_v2/src/main/res/values-ru/strings.xml
spec-dev S0101 step 5.4
Add settings_manage_permissions and settings_manage_permissions_desc strings (RU)
2026-05-06 19:49:34
app_v2/src/main/res/values-uk/strings.xml
spec-dev S0101 step 5.4
Add settings_manage_permissions and settings_manage_permissions_desc strings (UK)
2026-05-06 19:53:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt
spec-dev S0101 step 3.1
Add fromWelcome mode, WelcomeCompleteListener interface, btn_continue_to_app wiring
2026-05-06 19:55:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
spec-dev S0101 step 3.2
Remove isPermissionsPage=true wizard page, remove hasTriggeredLastPagePermissionRequest dead code
2026-05-06 19:59:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
spec-dev S0101 step 3.3
Implement WelcomeCompleteListener, replace finishWelcome with PermissionsManagementFragment navigation, remove sequential permission chain
2026-05-06 19:59:57
app_v2/src/main/res/layout/activity_welcome.xml
spec-dev S0101 step 3.3
Add fragment_container_welcome FragmentContainerView (GONE)
2026-05-06 19:59:57
app_v2/src/main/res/layout-sw480dp/activity_welcome.xml
spec-dev S0101 step 3.3
Add fragment_container_welcome FragmentContainerView (GONE)
2026-05-06 19:59:57
app_v2/src/main/res/layout-sw720dp/activity_welcome.xml
spec-dev S0101 step 3.3
Add fragment_container_welcome FragmentContainerView (GONE)
2026-05-06 20:00:42
app_v2/src/main/res/values/strings.xml
spec-dev S0101 step 3.4
Add perm_continue_to_app string (EN)
2026-05-06 20:00:42
app_v2/src/main/res/values-ru/strings.xml
spec-dev S0101 step 3.4
Add perm_continue_to_app string (RU)
2026-05-06 20:00:42
app_v2/src/main/res/values-uk/strings.xml
spec-dev S0101 step 3.4
Add perm_continue_to_app string (UK)
2026-05-06 20:08:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
spec-dev S0101 step 6.1
Add @AndroidEntryPoint, inject RequestContextualPermissionUseCase, replace recordAudioPermissionLauncher with contextual request
2026-05-06 20:10:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsPermissionsHelper.kt
spec-dev S0101 step 6.2
Add RequestContextualPermissionUseCase + PermissionRegistryRepository, add handleNetworkPermissionAction for access_local_network
2026-05-06 20:10:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
spec-dev S0101 step 6.2
Inject RequestContextualPermissionUseCase and PermissionRegistryRepository, pass to permissionsHelper
2026-05-06 20:11:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsPermissionsHelper.kt
spec-dev S0101 step 6.3
Add handlePermissionPermanentlyDenied() delegating to PermissionDenialHandler
2026-05-06 20:18:26
docs/FEATURES.md
spec-dev
S0101 Phase 07 Step 7.1: add Permission Management bullet to section 19
2026-05-06 20:18:26
docs/FEATURES_RU.md
spec-dev
S0101 Phase 07 Step 7.1: add Управление разрешениями bullet to section 19
2026-05-06 20:18:27
docs/FEATURES_UK.md
spec-dev
S0101 Phase 07 Step 7.1: add Керування дозволами bullet to section 19
2026-05-06 20:22:45
dev/CATALOG/app_v2.jsonl
spec-dev
S0101 Phase 07 Step 7.2: catalog regen + role/status set for new permission classes
2026-05-06 20:22:46
dev/CATALOG/app_v2.md
spec-dev
S0101 Phase 07 Step 7.2: re-render catalog markdown after permission class updates
2026-05-06 20:23:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
spec-dev
S0101 Phase 07 Step 7.3: remove S0101 debug Timber tag from finishWelcome()
2026-05-06 20:23:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt
spec-dev
S0101 Phase 07 Step 7.3: remove S0101 debug Timber tag from onViewCreated()
2026-05-06 20:24:28
PLAN/S0101_unified-permission-onboarding/PHASE_07__docs-catalog-cleanup.md
spec-dev
S0101 Phase 07: all 3 steps done, phase closed
2026-05-06 20:24:28
PLAN/S0101_unified-permission-onboarding/INDEX.md
spec-dev
S0101: all 7 phases done, status -> Implemented
2026-05-06 20:32:39
PLAN/S0101_unified-permission-onboarding.md
spec-check
Audit S0101 -> Partial; PASS/WARN/FAIL 51/5/0
2026-05-06 20:34:01
PLAN/S0101_unified-permission-onboarding.md
spec-fix
Annotate Last Audit (S0101): 4 FIXED, 1 PRE-RESOLVED
2026-05-06 20:34:01
PLAN/S0101_unified-permission-onboarding/PHASE_03__welcome-upgrade.md
spec-fix
Tick all Done Criteria checkboxes (all PASS)
2026-05-06 20:34:02
PLAN/S0101_unified-permission-onboarding/PHASE_05__settings-screen.md
spec-fix
Tick all Done Criteria checkboxes (all PASS)
2026-05-06 20:34:02
PLAN/S0101_unified-permission-onboarding/PHASE_06__ad-hoc-migration.md
spec-fix
Tick all Done Criteria checkboxes (all PASS)
2026-05-06 20:34:03
PLAN/S0101_unified-permission-onboarding/PHASE_07__docs-catalog-cleanup.md
spec-fix
Tick 5 of 6 Done Criteria checkboxes; last (spec-check Verified) pending re-audit
2026-05-06 20:35:12
PLAN/S0101_unified-permission-onboarding.md
spec-check
Audit S0101 -> Verified; PASS/WARN/FAIL 52/0/0
2026-05-06 20:35:12
PLAN/S0101_unified-permission-onboarding/INDEX.md
spec-check
S0101 Completion Gate all checked; status Verified
2026-05-06 20:35:12
PLAN/S0101_unified-permission-onboarding/PHASE_07__docs-catalog-cleanup.md
spec-check
Tick final Done Criterion: spec-check Verified confirmed
2026-05-06 20:48:57
PLAN/S0106_player-image-crop.md
S0106 Specification
Created strategic specification for crop and compress commands
2026-05-06 20:58:32
PLAN/S0106_player-image-crop.md
spec-update
Refinement (claude-sonnet-4-6, focus: all)
2026-05-06 21:09:32
PLAN/S0106_player-image-crop/INDEX.md
spec-tech
Create tactical plan for S0106
2026-05-06 21:09:32
PLAN/S0106_player-image-crop/PHASE_01__foundations.md
spec-tech
Phase 01: foundations
2026-05-06 21:09:33
PLAN/S0106_player-image-crop/PHASE_02__crop-engine.md
spec-tech
Phase 02: crop-engine
2026-05-06 21:09:33
PLAN/S0106_player-image-crop/PHASE_03__crop-overlay-view.md
spec-tech
Phase 03: crop-overlay-view
2026-05-06 21:09:33
PLAN/S0106_player-image-crop/PHASE_04__player-integration.md
spec-tech
Phase 04: player-integration
2026-05-06 21:09:33
PLAN/S0106_player-image-crop/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-06 21:09:34
PLAN/S0106_player-image-crop.md
spec-tech
Status -> Tactical
2026-05-06 21:19:24
PLAN/S0106_player-image-crop/INDEX.md
spec-update
S0106 §6 resolved: no EXIF, Toast-only after crop-to-file
2026-05-06 21:19:24
PLAN/S0106_player-image-crop/PHASE_01__foundations.md
spec-update
Add crop_file_created string key
2026-05-06 21:19:24
PLAN/S0106_player-image-crop/PHASE_02__crop-engine.md
spec-update
Remove EXIF write from crop pipeline
2026-05-06 21:19:24
PLAN/S0106_player-image-crop/PHASE_04__player-integration.md
spec-update
Specify Toast-only callback for crop-to-file
2026-05-06 21:20:40
PLAN/S0107_image-draw-overlay.md
spec
Add strategic spec S0107 for image-draw-overlay
2026-05-06 21:27:05
app_v2/src/main/res/drawable/ic_crop.xml
S0106
Add ic_crop vector drawable icon for crop command
2026-05-06 21:27:11
app_v2/src/main/res/drawable/ic_crop_to_file.xml
S0106
Add ic_crop_to_file vector drawable icon for crop-to-file command
2026-05-06 21:27:16
app_v2/src/main/res/drawable/ic_compress.xml
S0106
Add ic_compress vector drawable icon for compress-copy command
2026-05-06 21:27:26
app_v2/src/main/res/values/strings.xml
S0106
Add EN string keys for image crop commands (menu_crop, menu_crop_to_file, menu_compress_copy, dialog_crop_filename_hint, crop_save_to_downloads_note, crop_file_created)
2026-05-06 21:27:31
app_v2/src/main/res/values-ru/strings.xml
S0106
Add RU translations for image crop command strings
2026-05-06 21:27:37
app_v2/src/main/res/values-uk/strings.xml
S0106
Add UK translations for image crop command strings
2026-05-06 21:27:42
app_v2/src/main/res/menu/overflow_menu_player.xml
S0106
Add menu_crop, menu_crop_to_file, menu_compress_copy items to player overflow menu
2026-05-06 21:34:50
PLAN/S0107_image-draw-overlay/INDEX.md
spec-tech
Create tactical plan for S0107
2026-05-06 21:34:50
PLAN/S0107_image-draw-overlay/PHASE_01__menu-entry.md
spec-tech
Phase 01: menu-entry
2026-05-06 21:34:50
PLAN/S0107_image-draw-overlay/PHASE_02__draw-canvas-manager.md
spec-tech
Phase 02: draw-canvas-manager
2026-05-06 21:34:50
PLAN/S0107_image-draw-overlay/PHASE_03__draw-toolbar-layout.md
spec-tech
Phase 03: draw-toolbar-layout
2026-05-06 21:34:50
PLAN/S0107_image-draw-overlay/PHASE_04__save-merge-flow.md
spec-tech
Phase 04: save-merge-flow
2026-05-06 21:34:50
PLAN/S0107_image-draw-overlay/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-06 21:34:50
PLAN/S0107_image-draw-overlay.md
spec-tech
Status -> Tactical
2026-05-06 21:36:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
S0106
Add ImageCropManager: crop engine with EXIF mapping, region decode, crop-to-file, compressed copy, filename dialog
2026-05-06 21:39:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/views/CropOverlayView.kt
S0106
Add CropOverlayView: interactive crop selection with scrim, handles, touch drag, normalized rect output
2026-05-06 21:39:34
app_v2/src/main/res/layout/player_crop_overlay_content.xml
S0106
Add portrait crop overlay layout with CropOverlayView and cancel/confirm buttons
2026-05-06 21:39:39
app_v2/src/main/res/layout-land/player_crop_overlay_content.xml
S0106
Add landscape crop overlay layout with buttons on right edge
2026-05-06 21:43:20
PLAN/S0107_image-draw-overlay.md
spec-update
Refinement: resolved Q1 (screen-resolution save) and Q3 (orientation lock in Draw Mode); removed class names from §5.3; updated §3.2, §5.1, §7; proposed ADR-4 and PHASE_02/03 revision
2026-05-06 21:43:27
PLAN/S0107_image-draw-overlay/INDEX.md
spec-update
Rotation blocker marked resolved (freeze orientation, option b); change log updated
2026-05-06 21:50:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0106
Add CROP/CROP_TO_FILE/COMPRESS_COPY enum entries and isStaticBitmap conditions in buildActiveCommands
2026-05-06 21:50:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0106
Add onCropClicked/onCropToFileClicked/onCompressCopyClicked to CommandPanelCallback and overflow handler
2026-05-06 21:50:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0106
Implement onCropClicked/onCropToFileClicked/onCompressCopyClicked callbacks
2026-05-06 21:50:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0106
Instantiate ImageCropManager alongside SaveVideoFrameManager
2026-05-06 21:50:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0106
Add imageCropManager field, enterImageCropMode, startCompressedCopy, showCropOverlay, hideCropOverlay, imageCropCallback
2026-05-06 21:58:20
docs/FEATURES.md
FEATURES.md
S0106: add Image Crop and Compress bullet to Media Player section
2026-05-06 21:58:21
docs/FEATURES_RU.md
FEATURES_RU.md
S0106: add RU Image Crop and Compress bullet to player section
2026-05-06 21:58:21
docs/FEATURES_UK.md
FEATURES_UK.md
S0106: add UK Image Crop and Compress bullet to player section
2026-05-06 22:03:20
PLAN/S0106_player-image-crop.md
spec-check
Audit S0106 -> Partial; PASS/WARN/FAIL 49/1/0
2026-05-06 22:03:43
PLAN/S0106_player-image-crop.md
spec-fix
Annotate Last Audit (S0106) - 0 auto-fixed, 1 follow-up
2026-05-06 22:12:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
S0106
Change default filename format to {baseName}_crop/shrink_yyMMdd_HHmm.{ext}
2026-05-06 22:12:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0106
Navigate to new file after crop-to-file/compress when same folder; toast only for Downloads
2026-05-06 22:12:59
PLAN/S0106_player-image-crop.md
S0106
Update §5.1G filename format and §6.2 navigation decision
2026-05-06 22:21:03
PLAN/S0106_player-image-crop.md
spec-check
Audit S0106 -> Partial; PASS/WARN/FAIL 52/1/0
2026-05-06 22:24:49
PLAN/S0107_image-draw-overlay.md
spec-check
Audit S0107 -> Broken; PASS/WARN/FAIL 14/2/2; PHASE_02 Step 2.5 and PHASE_03 prerequisites contradict orientation-freeze resolution
2026-05-06 22:26:21
PLAN/S0107_image-draw-overlay.md
spec-fix
Annotate Last Audit (S0107): 0 auto-fixed, 4 follow-up (all spec-body edits -> /spec-update)
2026-05-06 22:36:05
PLAN/S0107_image-draw-overlay.md
spec-update
Refinement (claude-sonnet-4-5, consistency, –force-locked): applied P-1+P-2, ADR-4 added to strategic s9
2026-05-06 22:36:05
PLAN/S0107_image-draw-overlay/PHASE_02__draw-canvas-manager.md
spec-update
P-2: Step 2.5 title+prompt+verification updated to orientation-lock approach; Handoff Notes corrected
2026-05-06 22:36:05
PLAN/S0107_image-draw-overlay/PHASE_03__draw-toolbar-layout.md
spec-update
P-2: Prerequisites rotation-blocker text corrected (landscape toolbar IS required)
2026-05-06 22:41:18
PLAN/S0107_image-draw-overlay.md
spec-check
Audit S0107 -> Verified; PASS/WARN/FAIL 13/0/0; spec internally clean, all phases Not started (pre-impl)
2026-05-06 23:41:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt
PlayerCropDelegate
S0106: extract crop overlay lifecycle from PlayerActivity into dedicated delegate
2026-05-06 23:41:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
S0106: slim crop section to thin delegates; add cropDelegate field (1207 -> 1083 LOC)
2026-05-06 23:41:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
S0106: instantiate PlayerCropDelegate after imageCropManager init
2026-05-06 23:41:57
PLAN/S0106_player-image-crop/INDEX.md
INDEX.md
S0106: fix stale section-6.2 note (old: toast-only; correct: navigate if same parent)
2026-05-06 23:54:18
app_v2/src/main/res/values*/dimens.xml
onboarding
Reduce welcome_icon_size by 30% across all dimens buckets (default/sw320/sw480/sw600/sw720/land) to prevent content overflow on small displays
2026-05-07 00:29:30
app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt
S0101-fix
getGroups() now uses localized R.string.perm_group_* per PermissionGroup
2026-05-07 00:29:30
app_v2/src/main/res/layout/item_permission_entry.xml
S0101-fix
Add tv_perm_entry_desc TextView for permission description display
2026-05-07 00:29:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionRowAdapter.kt
S0101-fix
Bind descriptionRes in EntryViewHolder; localized group title in HeaderViewHolder
2026-05-07 00:41:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Fix SKIP button displaced into image area on sw480dp/sw720dp layouts: apply status-bar inset to layoutTopNav padding instead of btnSkip topMargin
2026-05-07 00:41:03
app_v2/src/main/res/values*/dimens.xml
onboarding
Reduce welcome_icon_size by additional 20% across all dimens buckets (67/31/40/101/134dp)
2026-05-07 00:57:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
ui-fix
finishWelcome: hide layoutTopNav and layoutIndicator for sw480dp layout variant
2026-05-07 00:57:47
app_v2/src/main/res/layout/fragment_permissions_management.xml
ui-fix
Add fitsSystemWindows; fix btn_open_system_settings style to TextButton with colorPrimary
2026-05-07 00:57:47
app_v2/src/main/res/layout/item_permission_entry.xml
ui-fix
Restructure: vertical layout with status+button on same row
2026-05-07 00:57:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionRowAdapter.kt
ui-fix
Show localized status with ‘Status: X’ format using perm_status_* resources
2026-05-07 00:57:47
app_v2/src/main/res/values/strings.xml
ui-fix
Add perm_status_* and perm_current_status; expand perm_desc_* to 50-70% more text
2026-05-07 00:57:47
app_v2/src/main/res/values-ru/strings.xml
ui-fix
Add perm_status_* and perm_current_status RU; expand perm_desc_* RU
2026-05-07 00:57:47
app_v2/src/main/res/values-uk/strings.xml
ui-fix
Add perm_status_* and perm_current_status UK; expand perm_desc_* UK
2026-05-07 01:10:06
PLAN/S0108_welcome-language-picker.md
spec
Add strategic spec S0108 for welcome-language-picker
2026-05-07 01:16:07
PLAN/S0108_welcome-language-picker/INDEX.md
spec-tech
Create tactical plan for S0108
2026-05-07 01:16:07
PLAN/S0108_welcome-language-picker/PHASE_01__layout-language-picker.md
spec-tech
Phase 01: layout-language-picker
2026-05-07 01:16:07
PLAN/S0108_welcome-language-picker/PHASE_02__strings-resources.md
spec-tech
Phase 02: strings-resources
2026-05-07 01:16:08
PLAN/S0108_welcome-language-picker/PHASE_03__model-and-adapter.md
spec-tech
Phase 03: model-and-adapter
2026-05-07 01:16:08
PLAN/S0108_welcome-language-picker/PHASE_04__activity-integration.md
spec-tech
Phase 04: activity-integration
2026-05-07 01:16:08
PLAN/S0108_welcome-language-picker/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-07 01:16:08
PLAN/S0108_welcome-language-picker.md
spec-tech
Status → Tactical
2026-05-07 01:25:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt
ui-fix
Special permissions (MANAGE_EXTERNAL_STORAGE, MANAGE_MEDIA, BATTERY) routed to system settings intents; excluded from Grant All batch request
2026-05-07 01:25:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionRowAdapter.kt
ui-fix
GRANT button uses warning_color (orange); MANAGE/SETTINGS buttons use colorPrimary via TypedValue
2026-05-07 01:25:43
app_v2/src/main/res/values/strings.xml
ui-fix
Add welcome_language_picker_hint (missing contentDescription for language picker buttons)
2026-05-07 01:25:43
app_v2/src/main/res/values-ru/strings.xml
ui-fix
Add welcome_language_picker_hint RU
2026-05-07 01:25:43
app_v2/src/main/res/values-uk/strings.xml
ui-fix
Add welcome_language_picker_hint UK
2026-05-07 01:25:56
PLAN/S0108_welcome-language-picker.md
S0108
Run /spec-update pass: add revision history, structural proposals, and fix a strategic spec typo
2026-05-07 01:27:10
app_v2/src/main/res/layout/page_welcome_enhanced.xml
S0108
Phase 01: add language picker strip (portrait)
2026-05-07 01:27:10
app_v2/src/main/res/layout-land/page_welcome_enhanced.xml
S0108
Phase 01: add language picker strip (landscape)
2026-05-07 01:27:11
app_v2/src/main/res/values/strings.xml
S0108
Phase 02: welcome_language_picker_hint (EN) - was pre-existing
2026-05-07 01:27:11
app_v2/src/main/res/values-ru/strings.xml
S0108
Phase 02: welcome_language_picker_hint (RU) - was pre-existing
2026-05-07 01:27:11
app_v2/src/main/res/values-uk/strings.xml
S0108
Phase 02: welcome_language_picker_hint (UK) - was pre-existing
2026-05-07 01:27:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt
S0108
Phase 03: WelcomePage language picker fields + EnhancedViewHolder wiring
2026-05-07 01:29:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
S0108
Phase 04: page-0 language picker + onWelcomeLanguageSelected handler
2026-05-07 01:31:56
docs/FEATURES.md
S0108
Phase 05: add Welcome language picker bullet (EN)
2026-05-07 01:31:57
docs/FEATURES_RU.md
S0108
Phase 05: add Welcome language picker bullet (RU)
2026-05-07 01:31:57
docs/FEATURES_UK.md
S0108
Phase 05: add Welcome language picker bullet (UK)
2026-05-07 01:31:57
dev/CATALOG/app_v2.jsonl
S0108
Phase 05: catalog regen after WelcomePagerAdapter changes
2026-05-07 01:31:57
dev/CATALOG/app_v2.md
S0108
Phase 05: catalog markdown regen
2026-05-07 01:35:22
PLAN/S0108_welcome-language-picker.md
spec-check
Audit S0108 -> Verified; PASS 18 / WARN 0 / FAIL 0; removed 2 Timber debug tags
2026-05-07 01:47:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt
S0101
Grant All now also opens system settings for first denied special permission (MANAGE_EXTERNAL_STORAGE / MANAGE_MEDIA / BATTERY_OPT) one at a time
2026-05-07 01:53:34
app_v2/src/main/res/layout/fragment_permissions_management.xml
S0101
RecyclerView: scrollbars=vertical fadeScrollbars=false outsideOverlay - always-visible scroll indicator
2026-05-07 01:53:34
app_v2/src/main/res/layout/item_permission_group_header.xml
S0101
New group header layout: divider + primary-color uppercase label
2026-05-07 01:53:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionRowAdapter.kt
S0101
HeaderViewHolder: switch to item_permission_group_header layout
2026-05-07 01:53:45
app_v2/src/main/res/layout/fragment_permissions_management.xml
S0108
Replace hardcoded Welcome continue label with localized perm_continue_to_app string
2026-05-07 01:54:25
app_v2/src/main/res/layout/fragment_settings_audio.xml, app_v2/src/main/res/layout-land/fragment_settings_audio.xml
fragment_settings_audio
Fix crash: missing layout_height on inner LinearLayout (mic recording section, line 330 portrait / line 169 landscape) - caused InflateException on AudioSettingsFragment open
2026-05-07 02:01:18
app_v2/src/main/res/layout/fragment_settings_audio.xml, app_v2/src/main/res/layout-land/fragment_settings_audio.xml
fragment_settings_audio
Fix second InflateException crash: missing layout_height on second inner LinearLayout (mic ask-filename section, portrait line 362 / landscape line 177)
2026-05-07 02:45:50
PLAN/S0109_bugfix-chromeos-textinput.md
spec
Add strategic spec S0109 for bugfix-chromeos-textinput
2026-05-07 02:47:23
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
AppStartupInitializer
add micRecordingEnabled + micRecordingAskFilename to DEBUG settings dump
2026-05-07 02:49:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.onPause()
Fix permanent black screen on back press: detach ExoPlayer from PlayerView Surface when isFinishing=true to unblock ATMS window transition stalled by CCodec holding the Surface
2026-05-07 02:52:01
PLAN/S0109_bugfix-chromeos-textinput/INDEX.md
spec-tech
Create tactical plan for S0109
2026-05-07 02:52:01
PLAN/S0109_bugfix-chromeos-textinput/PHASE_01__addresource-guard.md
spec-tech
Phase 01: addresource-guard
2026-05-07 02:52:01
PLAN/S0109_bugfix-chromeos-textinput/PHASE_02__resource-editor-escape.md
spec-tech
Phase 02: resource-editor-escape
2026-05-07 02:52:02
PLAN/S0109_bugfix-chromeos-textinput/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-07 02:52:02
PLAN/S0109_bugfix-chromeos-textinput.md
spec-tech
Status -> Tactical
2026-05-07 02:53:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceKeyboardDelegate.kt
S0109
Add isTextEditorFocused guard for Chrome OS text input
2026-05-07 02:54:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
S0109
Implement isTextEditorFocused in keyboard delegate callback
2026-05-07 02:58:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
AudioSettingsFragment
fix mic recording toggle self-disable: replace requestContextualPermission (record_audio not registered) with direct ActivityResultContracts.RequestPermission launcher
2026-05-07 02:59:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorActivity.kt
S0109
Guard Escape key when text editor is focused
2026-05-07 03:03:52
docs/FEATURES.md
S0109
Chrome OS text input fix noted in keyboard navigation feature
2026-05-07 03:03:52
docs/FEATURES_RU.md
S0109
Chrome OS text input fix noted (RU)
2026-05-07 03:03:53
docs/FEATURES_UK.md
S0109
Chrome OS text input fix noted (UK)
2026-05-07 03:07:59
app_v2/src/main/res/layout/fragment_permissions_management.xml
S0101
Add ?android:attr/colorBackground to root ConstraintLayout - fixes transparent overlay over Settings tabs
2026-05-07 03:10:23
PLAN/S0109_bugfix-chromeos-textinput.md
spec-check
Audit S0109 -> Partial; PASS/WARN/FAIL 20/2/0
2026-05-07 03:11:17
PLAN/S0109_bugfix-chromeos-textinput.md
spec-fix
Annotate Last Audit (S0109): 0 auto-fixed, 2 follow-ups
2026-05-07 03:14:52
PLAN/S0109_bugfix-chromeos-textinput.md
spec-check
Audit S0109 -> Verified; PASS/WARN/FAIL 22/0/0
2026-05-07 03:16:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceKeyboardDelegate.kt
S0109
Remove S0109 debug Timber tag (Verified)
2026-05-07 10:21:32
PLAN/S0002_decompose-giant-files.md
S0002
Wave 23 + Wave 24: recorded FileInfoDialog decomposition; refreshed LOC tables; cleanup SftpOperationStrategy/FtpOperationStrategy/FileInfoDialog to ≤700
2026-05-07 11:42:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TouchZoneGestureManager.kt
TouchZoneGestureManager
Wave 25: remove 47-line commented-out onFling dead-code block; 719→671 LOC
2026-05-07 11:50:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRenameFilesAdapter.kt
BrowseRenameFilesAdapter
S0002 Wave 26: extract RenameFilesAdapter from BrowseDialogHelper to standalone class
2026-05-07 11:50:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
S0002 Wave 26: remove extracted RenameFilesAdapter inner class (733→688 LOC)
2026-05-07 12:00:51
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/CloudOperationStrategy.kt
CloudOperationStrategy
S0002 Wave 27: trim dead comments/blanks and refactor copyDirectory loop (742→684 LOC)
2026-05-07 12:05:02
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
ResourceEditorUseCase
S0002 Wave 28: extract connectionTestResultFrom helper + expression bodies (745→694 LOC)
2026-05-07 12:18:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
ResourceAdapter
S0002 Wave 29: 746→693 LOC (−53) via comment removal, expression bodies, when-block refactor
2026-05-07 12:25:03
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt
SmbOperationsUseCase
S0002 Wave 30: 746→685 LOC (−61) via KDoc collapse, section separator removal, obvious comment removal, path-block refactor
2026-05-07 12:29:43
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
SmbMediaScanner
S0002 Wave 31: 760→679 LOC (−81) via KDoc collapse, comment removal, mapNotNull guard-clause compression
2026-05-07 12:41:23
app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt
LocalMediaScanner
S0002 Wave 32: 785→698 LOC (-87): removed 6 unused imports, collapsed KDocs, removed stale writer-note blocks, refactored collectDocumentFilesRecursivelyParallel from suspend+coroutineScope to plain fun, removed null fields from MediaFile constructions, inlined hasPermission checks, compressed guard clauses, inlined childCount
2026-05-07 12:49:53
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt
SearchLyricsUseCase
S0002 Wave 33: 804→658 LOC (-146): collapsed 13 KDocs to 1-liners, removed dead searchLyricsOnline function (25 lines, never called), removed 36 obvious inline comments, cleaned downloadFrom comment noise
2026-05-07 12:59:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt
PagingMediaFileAdapter
S0002 Wave 34: 824→663 LOC (-161): collapsed class KDoc; compressed onCreateViewHolder (19→6 lines); merged file-not-found when branches in both ViewHolders (24→5 lines each, -38); inlined content:// data val (4 occurrences, -16); merged AUDIO+TEXT in List (6→2 lines), AUDIO+TEXT+EPUB in Grid (9→2 lines); simplified cloud EPUB branch (-6); compressed PDF else-branch in both ViewHolders; moved 4 shared helpers (createExtensionBitmap, getPlaceholderExtension, createPlaceholderBitmap, showGeneratedPlaceholder) from both inner classes to adapter level (-26); removed comments
2026-05-07 13:12:33
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkFileModelLoader.kt
NetworkFileModelLoader / NetworkFileDataFetcher
S0002 Wave 35: 826->693 LOC (-133). KDoc collapses, comment removal, handles refactor, buildLoadData expression body, server/port parsing compression in 3 fetch methods, clearTransientFailuresForResource compression.
2026-05-07 13:23:52
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SmbOperationStrategy.kt
SmbOperationStrategy
S0002 Wave 36: 832->667 LOC (-165). Collapsed class KDoc; compressed copyFile when-block (17->6 lines); refactored moveFile (48->25 lines, merged duplicate copy+delete paths); compressed deleteFile local block; removed stale comment; simplified createDirectory/writeFile/readFile/exists local branches; rewrote listFiles Success branch (14->4 lines); compressed parseAndFixUri to expression body; removed comments from downloadFromSmb/uploadToSmb/copySmbToSmb; merged collectSmbFiles+collectSmbFilesOnly into collectSmbEntries(filesOnly) saving 31 lines; compressed getConnectionInfo (16->6 lines); compressed resolveSmbCredentials shareCandidates (9->4 lines); removed section separators; removed comments from deleteDirectory/renameDirectory/copyDirectory; compressed destFilePath computation.
2026-05-07 13:47:02
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
S0002 Wave 37: 845→666 LOC (-179). Remove 52 section comments across companion/getSettings/updateSettings. Extract readFirst/keyFor/setOrRemove helpers. Collapse isPlayerFirstRun+getLastUsedResourceId+isTouchZoneHintShown+setTouchZoneHintShown to expression bodies. Compress decryptPassword body, defaultIconSize/maxRecipients run{} blocks.
2026-05-07 14:03:47
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
S0002 Wave 38: 900→700 LOC (-200). Collapse class KDoc; remove dead Keep import, serializeAccount/deserializeAccount methods; compress resolveOrEnsureFolder (19→8 lines); refactor findFolderByName (30→11) + ensureFolderExists (47→26) with expression bodies; compress 4 endpoint if/else patterns to ?.let; compress JSONObject blocks in rename/move/copyFile; remove verbose Timber.d in getFileMetadata/downloadFile/deleteFile/renameFile; refactor getFileInputStream (57→30); expression bodies for listFolders/getFileMetadata/deleteFile/renameFile/moveFile/fileExists/searchFiles/testConnection; getThumbnail when-block cleanup.
2026-05-07 14:30:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
S0002 Wave 39: compress 912->696 LOC (-216)
2026-05-07 14:47:56
app_v2/src/main/java/com/sza/fastmediasorter/data/network/FtpFileOperationHandler.kt
FtpFileOperationHandler
S0002 Wave 40: 938→567 LOC (−371): collapsed strategies to 1-line each; compressed executeMove branches; executeRename try-catch compressed; downloadFromFtp/uploadToFtp/deleteFromFtp/copyFtpToFtp/prepareFtpDestinationForOverwrite/parseFtpPath all compressed; removed verbose Timbers and inline comments
2026-05-07 14:55:14
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/BaseFileOperationHandler.kt
BaseFileOperationHandler
S0002 Wave 41: 939→404 LOC (−535): collapsed class KDoc+getStrategies/getStrategyForPath; executeCopy/executeMove each compressed to ~30 lines; executeDelete comment blocks removed; copyCrossProtocol 63→18 lines; moveFile/deleteFile/moveToTrash compressed; joinPath expression body; createTrashFolder collapsed; checkBatchDeletePermissionBeforeMove KDoc+filter+Timbers compressed; requestBatchDeletePermission KDoc+Timbers removed; getSafePath/buildCopyResult/buildMoveResult/buildDeleteResult all on compact 1-liners; listFiles expression body
2026-05-07 15:10:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
S0002 Wave 42
EpubViewerManager 2176→1425 LOC (-751): extracted EpubSearchAndTocPresenter (415 LOC) and EpubTranslationOverlayHelper (344 LOC)
2026-05-07 15:17:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
S0002 Wave 43
TextViewerManager 1823→1373 LOC (-450): extracted TextEditorFindReplaceManager (235 LOC) and TextTranslationOverlayManager (199 LOC)
2026-05-07 15:22:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
S0002 Wave 44
Extract PdfLinkAndSearchManager from PdfViewerManager: link detection, tap-to-open, search, OCR copy, Google Lens sharing. PdfViewerManager 1640→1407 LOC (−233)
2026-05-07 16:25:24
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
S0046
Add hostKeyFingerprint field to MediaResource domain model
2026-05-07 16:25:35
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceEntity.kt
S0046
Add host_key_fingerprint column to ResourceEntity
2026-05-07 16:25:35
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
S0046
Bump DB version 27→28, add MIGRATION_27_28 for host_key_fingerprint
2026-05-07 16:25:35
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
S0046
Register MIGRATION_27_28 in addMigrations
2026-05-07 16:25:35
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
S0046
Round-trip hostKeyFingerprint in toDomain/toEntity mappers
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration/INDEX.md
spec-tech
Create tactical plan for S0042
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration/PHASE_01__glide-to-ksp.md
spec-tech
Phase 01: glide-to-ksp
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration/PHASE_02__room-to-ksp.md
spec-tech
Phase 02: room-to-ksp
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration/PHASE_03__hilt-to-ksp.md
spec-tech
Phase 03: hilt-to-ksp
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration/PHASE_04__kapt-plugin-removal.md
spec-tech
Phase 04: kapt-plugin-removal
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration/PHASE_05__compat-flags-removal.md
spec-tech
Phase 05: compat-flags-removal
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration/PHASE_06__wear-and-sourcesets-unify.md
spec-tech
Phase 06: wear-and-sourcesets-unify
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup
2026-05-07 16:27:59
PLAN/S0042_agp10-kapt-to-ksp-migration.md
spec-tech
Status → Tactical
2026-05-07 23:21:03
PLAN/S0111_wear-bidirectional-sync.md
spec
Add strategic spec S0111 for wear-bidirectional-sync
2026-05-07 23:27:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
S0110
Fix thumbnail loading during fast scroll: assign correct placeholder immediately on scroll, use cache-only Glide requests, suppress markThumbnailAsFailed listeners during scroll
2026-05-07 23:29:44
PLAN/S0110_bugfix-thumbnails-during-scroll.md
spec-check
Audit S0110 → Verified; PASS 9 / WARN 0 / FAIL 0 / MANUAL 3
2026-05-07 23:32:08
PLAN/S0111_wear-bidirectional-sync/INDEX.md
spec-tech
Create tactical plan for S0111
2026-05-07 23:32:09
PLAN/S0111_wear-bidirectional-sync/PHASE_01__data-layer-envelope.md
spec-tech
Phase 01: data-layer-envelope
2026-05-07 23:32:09
PLAN/S0111_wear-bidirectional-sync/PHASE_02__settings-sync.md
spec-tech
Phase 02: settings-sync
2026-05-07 23:32:09
PLAN/S0111_wear-bidirectional-sync/PHASE_03__sources-watch-to-phone.md
spec-tech
Phase 03: sources-watch-to-phone
2026-05-07 23:32:09
PLAN/S0111_wear-bidirectional-sync/PHASE_04__ftp-sftp-browse.md
spec-tech
Phase 04: ftp-sftp-browse
2026-05-07 23:32:10
PLAN/S0111_wear-bidirectional-sync/PHASE_05__playback-state-remote-control.md
spec-tech
Phase 05: playback-state-remote-control
2026-05-07 23:32:10
PLAN/S0111_wear-bidirectional-sync/PHASE_06__favorites-sync.md
spec-tech
Phase 06: favorites-sync
2026-05-07 23:32:10
PLAN/S0111_wear-bidirectional-sync/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup
2026-05-07 23:32:10
PLAN/S0111_wear-bidirectional-sync.md
spec-tech
Status → Tactical
2026-05-07 23:44:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/WearEventEnvelope.kt
S0111 Phase01
Create WearEventEnvelope - versioned Data Layer transport wrapper
2026-05-07 23:44:44
app_v2/src/main/java/com/sza/fastmediasorter/service/WearDataLayerPaths.kt
S0111 Phase01
Create WearDataLayerPaths - path and eventType constants for bidirectional Data Layer
2026-05-07 23:45:08
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/WearableDataLayerRepository.kt
S0111 Phase01
Add putEnvelopeDataItem to WearableDataLayerRepository interface
2026-05-07 23:45:45
app_v2/src/main/java/com/sza/fastmediasorter/data/wear/WearableDataLayerRepositoryImpl.kt
S0111 Phase01
Inject Gson + implement putEnvelopeDataItem in WearableDataLayerRepositoryImpl
2026-05-07 23:46:25
app_v2/src/main/java/com/sza/fastmediasorter/service/PhoneWearListenerService.kt
S0111 Phase01
Add dispatch stubs for SOURCES_EXPORT, FAVORITES_DELTA, PLAYBACK_STATE in PhoneWearListenerService
2026-05-07 23:46:48
wear/src/main/java/com/sza/fastmediasorter/wear/domain/model/WearEventEnvelope.kt
S0111 Phase01
Create WearEventEnvelope mirror on watch side
2026-05-07 23:47:16
wear/src/main/java/com/sza/fastmediasorter/wear/data/wear/WearDataLayerPaths.kt
S0111 Phase01
Create WearDataLayerPaths mirror on watch side - identical path and eventType constants
2026-05-07 23:48:04
wear/src/main/java/com/sza/fastmediasorter/wear/data/wear/WatchWearListenerService.kt
S0111 Phase01
Extend WatchWearListenerService dispatch for SETTINGS_PUSH and PLAYBACK_CMD stubs
2026-05-07 23:52:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/WearEventEnvelope.kt
WearEventEnvelope
Fix unclosed block comment: /* inside KDoc treated as nested comment in Kotlin
2026-05-07 23:52:00
app_v2/src/main/java/com/sza/fastmediasorter/service/WearDataLayerPaths.kt
WearDataLayerPaths
Fix unclosed block comment: /* inside KDoc treated as nested comment in Kotlin
2026-05-07 23:53:53
dev/CATALOG/wear.jsonl
S0111 Phase01
Regenerate wear catalog after Phase 01 new classes
2026-05-07 23:53:53
dev/CATALOG/app_v2.jsonl
S0111 Phase01
Regenerate app_v2 catalog after Phase 01 new classes
2026-05-07 23:59:26
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/WearSettingsPayload.kt
S0111 Phase02
Create WearSettingsPayload - phone-to-watch settings push payload
2026-05-07 23:59:47
wear/src/main/java/com/sza/fastmediasorter/wear/domain/model/WearSettingsPayload.kt
S0111 Phase02
Create WearSettingsPayload mirror on watch side
2026-05-08 00:00:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/PushWearSettingsUseCase.kt
S0111 Phase02
Create PushWearSettingsUseCase - push watch companion settings via Data Layer envelope
2026-05-08 00:00:20
app_v2/src/main/java/com/sza/fastmediasorter/core/di/RepositoryModule.kt
S0111 Phase02
Add provideGson @Provides to RepositoryModule companion object
2026-05-08 00:00:46
wear/src/main/java/com/sza/fastmediasorter/wear/domain/usecase/ApplyWearSettingsUseCase.kt
S0111 Phase02
Create ApplyWearSettingsUseCase - apply phone-pushed settings to WearPreferencesRepository
2026-05-08 00:01:34
wear/src/main/java/com/sza/fastmediasorter/wear/data/wear/WatchWearListenerService.kt
S0111 Phase02
Wire ApplyWearSettingsUseCase into handleSettingsPush; add settingsErrorFlow to WatchSyncEvents
2026-05-08 00:02:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/WearSyncViewModel.kt
S0111 Phase02
Add pushSettings(), watchSettingsState, SettingsPushed state to WearSyncViewModel
2026-05-08 00:03:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/WearSyncSettingsFragment.kt
S0111 Phase02
Add Watch Settings collapsible section with switches, interval slider, and Push Settings button
2026-05-08 00:04:08
app_v2/src/main/res/values/strings.xml
S0111 Phase02
Add wear_settings_* and wear_push_settings string keys (EN)
2026-05-08 00:04:08
app_v2/src/main/res/values-ru/strings.xml
S0111 Phase02
Add wear_settings_* and wear_push_settings string keys (RU)
2026-05-08 00:04:08
app_v2/src/main/res/values-uk/strings.xml
S0111 Phase02
Add wear_settings_* and wear_push_settings string keys (UK)
2026-05-08 00:04:46
wear/src/main/java/com/sza/fastmediasorter/wear/ui/settings/SettingsViewModel.kt
S0111 Phase02
Add settingsErrorFlow observer and reloadSettings() to SettingsViewModel
2026-05-08 00:07:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/BeamAnimationDialog.kt
S0111 Phase02
Add SettingsPushed branch to exhaustive when expression
2026-05-08 00:07:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
Fix toolbar overlap with Chrome OS caption bar: include captionBar() inset type in applyWindowInsets() alongside statusBars()
2026-05-08 00:08:16
dev/CATALOG/app_v2.jsonl
S0111 Phase02
Regenerate app_v2 catalog after Phase 02 new classes
2026-05-08 00:08:16
dev/CATALOG/wear.jsonl
S0111 Phase02
Regenerate wear catalog after Phase 02 new classes
2026-05-08 00:12:32
wear/src/main/java/com/sza/fastmediasorter/wear/domain/model/WearSourcesExportPayload.kt
spec-dev S0111 step-3.1
Create WearSourcesExportPayload data class on watch side
2026-05-08 00:12:56
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/WearSourcesExportPayload.kt
spec-dev S0111 step-3.2
Create WearSourcesExportPayload data class on phone side (mirror)
2026-05-08 00:14:13
wear/src/main/java/com/sza/fastmediasorter/wear/domain/usecase/ExportSourcesUseCase.kt
spec-dev S0111 step-3.3
Create ExportSourcesUseCase on watch side
2026-05-08 00:15:08
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/viewmodel/NetworkSourcesViewModel.kt
spec-dev S0111 step-3.4
Add ExportState sealed class and exportToPhone() to NetworkSourcesViewModel
2026-05-08 00:16:41
wear/src/main/java/com/sza/fastmediasorter/wear/ui/network/NetworkSourcesScreen.kt
spec-dev S0111 step-3.5
Add Send to phone chip and ExportToPhoneChip to NetworkSourcesScreen
2026-05-08 00:18:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportWatchSourcesUseCase.kt
spec-dev S0111 step-3.6
Create ImportWatchSourcesUseCase on phone side
2026-05-08 00:19:37
wear/src/main/res/values/strings.xml
spec-dev S0111 step-3.7
Add wear_export_to_phone / wear_import_* localized strings
2026-05-08 00:19:37
wear/src/main/res/values-ru/strings.xml
spec-dev S0111 step-3.7
Add wear_export_to_phone / wear_import_* localized strings
2026-05-08 00:19:38
wear/src/main/res/values-uk/strings.xml
spec-dev S0111 step-3.7
Add wear_export_to_phone / wear_import_* localized strings
2026-05-08 00:19:38
app_v2/src/main/res/values/strings.xml
spec-dev S0111 step-3.7
Add wear_export_to_phone / wear_import_* localized strings
2026-05-08 00:19:38
app_v2/src/main/res/values-ru/strings.xml
spec-dev S0111 step-3.7
Add wear_export_to_phone / wear_import_* localized strings
2026-05-08 00:19:38
app_v2/src/main/res/values-uk/strings.xml
spec-dev S0111 step-3.7
Add wear_export_to_phone / wear_import_* localized strings
2026-05-08 00:20:52
app_v2/src/main/java/com/sza/fastmediasorter/service/PhoneWearListenerService.kt
spec-dev S0111 step-3.8
Wire handleSourcesExport and add watchSourcesReceivedFlow to WearSyncEvents
2026-05-08 00:21:58
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
Fix: add KEY_MIC_RECORDING_ENABLED and KEY_MIC_RECORDING_ASK_FILENAME to DataStore - fields were missing from both read and write, causing micRecordingEnabled to never persist (always reset to false on next settings emission)
2026-05-08 00:22:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/WearSyncViewModel.kt
spec-dev S0111 step-3.9
Add pendingWatchSources, acceptWatchImport, dismissWatchImport and import Card UI
2026-05-08 00:22:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/WearSyncSettingsFragment.kt
spec-dev S0111 step-3.9
Add pendingWatchSources, acceptWatchImport, dismissWatchImport and import Card UI
2026-05-08 00:25:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
GeneralSettingsViewSetupHelper
Remove showSoftInput from credential field focus listeners and activateCredentialEditor; add explicit filters=arrayOf() - fixes Chrome OS physical keyboard routing issue where IME bridge was blocking input to defaultUser/defaultPassword fields
2026-05-08 00:27:45
wear/build.gradle.kts
spec-dev S0111 step-4.1
Add commons-net:3.10.0 and jsch:0.2.17 for FTP/SFTP browse on Wear
2026-05-08 00:28:29
wear/src/main/java/com/sza/fastmediasorter/wear/data/network/ftp/FtpDataSource.kt
spec-dev S0111 step-4.2
Create FtpDataSource with commons-net FTPClient for directory listing
2026-05-08 00:29:42
wear/src/main/java/com/sza/fastmediasorter/wear/data/network/sftp/SftpDataSource.kt
spec-dev S0111 step-4.3
Create SftpDataSource with JSch for directory listing on Wear
2026-05-08 00:30:13
wear/src/main/java/com/sza/fastmediasorter/wear/di/WearAppModule.kt
spec-dev S0111 step-4.4
Add provideFtpDataSource and provideSftpDataSource bindings to WearAppModule
2026-05-08 00:33:13
wear/src/main/java/com/sza/fastmediasorter/wear/ui/browse/BrowseViewModel.kt
S0111 phase-04 step-4.5
Route FTP/SFTP in loadNetworkFiles via when(source.type) block
2026-05-08 00:39:53
wear/src/main/java/com/sza/fastmediasorter/wear/domain/model/WearPlaybackStatePayload.kt
S0111 phase-05 step-5.1
Create WearPlaybackStatePayload domain model on watch side
2026-05-08 00:39:53
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/WearPlaybackStatePayload.kt
S0111 phase-05 step-5.2
Create WearPlaybackStatePayload domain model mirror on phone side
2026-05-08 00:39:53
wear/src/main/java/com/sza/fastmediasorter/wear/domain/model/WearPlaybackCommand.kt
S0111 phase-05 step-5.3
Create WearPlaybackCommand enum on watch side
2026-05-08 00:39:53
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/WearPlaybackCommand.kt
S0111 phase-05 step-5.3
Create WearPlaybackCommand enum on phone side
2026-05-08 00:40:43
wear/src/main/java/com/sza/fastmediasorter/wear/domain/usecase/PublishPlaybackStateUseCase.kt
S0111 phase-05 step-5.4
Create PublishPlaybackStateUseCase - publishes watch playback state to phone via Data Layer
2026-05-08 00:42:06
wear/src/main/java/com/sza/fastmediasorter/wear/ui/player/audio/AudioPlayerViewModel.kt
S0111 phase-05 step-5.5
Inject PublishPlaybackStateUseCase; publish playback state on isPlaying toggle and STATE_READY/ENDED
2026-05-08 00:42:57
wear/src/main/java/com/sza/fastmediasorter/wear/ui/player/video/VideoPlayerViewModel.kt
S0111 phase-05 step-5.6
Inject PublishPlaybackStateUseCase; publish video playback state on isPlaying toggle and STATE_READY/ENDED
2026-05-08 00:43:39
wear/src/main/java/com/sza/fastmediasorter/wear/data/wear/WatchWearListenerService.kt
S0111 phase-05 step-5.7
Add WatchPlaybackCommandEvents bus; implement handlePlaybackCommand deserializing WearPlaybackCommand
2026-05-08 00:44:35
wear/src/main/java/com/sza/fastmediasorter/wear/ui/player/audio/AudioPlayerViewModel.kt
S0111 phase-05 step-5.8
Subscribe to WatchPlaybackCommandEvents.commandFlow; dispatch PLAY_PAUSE/NEXT/PREVIOUS/STOP
2026-05-08 00:44:35
wear/src/main/java/com/sza/fastmediasorter/wear/ui/player/video/VideoPlayerViewModel.kt
S0111 phase-05 step-5.9
Subscribe to WatchPlaybackCommandEvents.commandFlow; dispatch PLAY_PAUSE/NEXT/PREVIOUS/STOP
2026-05-08 00:45:06
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SendPlaybackCommandUseCase.kt
S0111 phase-05 step-5.10
Create SendPlaybackCommandUseCase - sends remote playback command to watch via Data Layer
2026-05-08 00:45:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
GeneralSettingsViewSetupHelper
Remove setOnClickListener from tilDefaultUser/etDefaultUser/tilDefaultPassword/etDefaultPassword and delete activateCredentialEditor - root cause on Chrome OS: custom listener replaced system performClick() which is where ARC establishes IME keyboard routing; TextInputLayout already forwards container clicks to inner EditText natively
2026-05-08 00:45:54
app_v2/src/main/java/com/sza/fastmediasorter/service/PhoneWearListenerService.kt
S0111 phase-05 step-5.11
Wire PLAYBACK_STATE Data Item handler; add watchPlaybackStateFlow to WearSyncEvents
2026-05-08 00:46:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/WearSyncViewModel.kt
S0111 phase-05 step-5.12
Inject SendPlaybackCommandUseCase; add watchPlaybackState flow; add sendPlaybackCommand fun
2026-05-08 00:48:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/WearSyncSettingsFragment.kt
S0111 phase-05 step-5.13
Add Now Playing card with progress bar and remote control buttons
2026-05-08 00:48:50
app_v2/src/main/res/values/strings.xml
S0111 phase-05 step-5.13
Add wear_now_playing_title, wear_playback_play_pause, wear_playback_next, wear_playback_previous strings (EN)
2026-05-08 00:48:50
app_v2/src/main/res/values-ru/strings.xml
S0111 phase-05 step-5.13
Add wear now playing strings (RU)
2026-05-08 00:48:50
app_v2/src/main/res/values-uk/strings.xml
S0111 phase-05 step-5.13
Add wear now playing strings (UK)
2026-05-08 00:55:36
wear/src/main/java/com/sza/fastmediasorter/wear/domain/model/WearFavoritesPayload.kt
spec-dev S0111 step 6.1
Create WearFavoriteDeltaItem and WearFavoritesDeltaPayload on watch side
2026-05-08 00:55:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/WearFavoritesPayload.kt
spec-dev S0111 step 6.1
Create WearFavoriteDeltaItem and WearFavoritesDeltaPayload on phone side
2026-05-08 00:56:06
wear/src/main/java/com/sza/fastmediasorter/wear/domain/repository/WearFavoritesRepository.kt
spec-dev S0111 step 6.2
Create WearFavoritesRepository interface with 5 suspend methods
2026-05-08 00:57:23
wear/src/main/java/com/sza/fastmediasorter/wear/data/repository/WearFavoritesRepositoryImpl.kt
spec-dev S0111 step 6.3
Create WearFavoritesRepositoryImpl using EncryptedSharedPreferences
2026-05-08 00:58:03
wear/src/main/java/com/sza/fastmediasorter/wear/di/WearAppModule.kt
spec-dev S0111 step 6.4
Provide WearFavoritesRepository binding in WearAppModule
2026-05-08 01:01:09
wear/src/main/java/com/sza/fastmediasorter/wear/domain/usecase/SendFavoritesDeltaUseCase.kt
spec-dev S0111 step 6.5
Create SendFavoritesDeltaUseCase - sends favorites delta to phone via MessageClient
2026-05-08 01:03:00
wear/src/main/java/com/sza/fastmediasorter/wear/ui/player/audio/AudioPlayerViewModel.kt
spec-dev S0111 step 6.6
Add isFavorite StateFlow and toggleFavorite to AudioPlayerViewModel
2026-05-08 01:04:15
wear/src/main/java/com/sza/fastmediasorter/wear/ui/player/audio/AudioPlayerScreen.kt
spec-dev S0111 step 6.7
Add favorite toggle button to AudioPlayerScreen
2026-05-08 01:06:11
wear/src/main/java/com/sza/fastmediasorter/wear/ui/player/image/ImageViewerViewModel.kt
spec-dev S0111 step 6.8
Add isFavorite StateFlow and toggleFavorite to ImageViewerViewModel
2026-05-08 01:06:11
wear/src/main/java/com/sza/fastmediasorter/wear/ui/player/image/ImageViewerScreen.kt
spec-dev S0111 step 6.8
Add favorite toggle button to ImageViewerScreen
2026-05-08 01:07:04
wear/src/main/res/values/strings.xml
spec-dev S0111 step 6.9
Add wear_toggle_favorite and wear_favorite_sent strings (EN)
2026-05-08 01:07:04
wear/src/main/res/values-ru/strings.xml
spec-dev S0111 step 6.9
Add wear_toggle_favorite and wear_favorite_sent strings (RU)
2026-05-08 01:07:04
wear/src/main/res/values-uk/strings.xml
spec-dev S0111 step 6.9
Add wear_toggle_favorite and wear_favorite_sent strings (UK)
2026-05-08 01:07:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyWatchFavoritesDeltaUseCase.kt
spec-dev S0111 step 6.10
Create ApplyWatchFavoritesDeltaUseCase - applies watch favorites delta to phone FavoritesRepository
2026-05-08 01:08:56
app_v2/src/main/java/com/sza/fastmediasorter/service/PhoneWearListenerService.kt
spec-dev S0111 step 6.11
Wire handleFavoritesDelta to ApplyWatchFavoritesDeltaUseCase in PhoneWearListenerService
2026-05-08 01:13:56
docs/FEATURES.md
spec-dev S0111 step 7.1
Add 5 new Wear OS bidirectional sync bullets to section 21
2026-05-08 01:14:34
docs/FEATURES_RU.md
spec-dev S0111 step 7.2
Add 5 new Wear OS bidirectional sync bullets to section 21 (RU)
2026-05-08 01:15:16
docs/FEATURES_UK.md
spec-dev S0111 step 7.3
Add 5 new Wear OS bidirectional sync bullets to section 21 (UK)
2026-05-08 01:15:49
dev/CATALOG/app_v2.jsonl
spec-dev S0111 step 7.4
Regenerate app_v2 catalog for S0111 Phase 07
2026-05-08 01:15:49
dev/CATALOG/wear.jsonl
spec-dev S0111 step 7.5
Regenerate wear catalog for S0111 Phase 07
2026-05-08 01:20:17
wear/src/main/java/com/sza/fastmediasorter/wear/domain/usecase/PublishPlaybackStateUseCase.kt
spec-dev S0111
S0111 step 7.6: remove Timber.d debug tag
2026-05-08 01:20:26
wear/src/main/java/com/sza/fastmediasorter/wear/domain/usecase/ExportSourcesUseCase.kt
spec-dev S0111
S0111 step 7.6: remove Timber.d debug tag
2026-05-08 01:20:26
wear/src/main/java/com/sza/fastmediasorter/wear/domain/usecase/ApplyWearSettingsUseCase.kt
spec-dev S0111
S0111 step 7.6: remove Timber.d debug tag, remove unused Timber import
2026-05-08 01:20:26
wear/src/main/java/com/sza/fastmediasorter/wear/data/network/sftp/SftpDataSource.kt
spec-dev S0111
S0111 step 7.6: remove Timber.d debug tag, remove unused Timber import
2026-05-08 01:20:27
wear/src/main/java/com/sza/fastmediasorter/wear/data/network/ftp/FtpDataSource.kt
spec-dev S0111
S0111 step 7.6: remove Timber.d debug tag, remove unused Timber import
2026-05-08 01:21:54
PLAN/S0111_wear-bidirectional-sync/PHASE_07__docs-catalog-cleanup.md
spec-dev S0111
S0111 Phase 07: all steps done, phase marked complete
2026-05-08 01:21:54
PLAN/S0111_wear-bidirectional-sync/INDEX.md
spec-dev S0111
S0111 INDEX: 7/7 phases done, status -> Done
2026-05-08 01:21:54
PLAN/S0111_wear-bidirectional-sync.md
spec-dev S0111
S0111 strategic spec: Status -> Implemented
2026-05-08 01:24:37
PLAN/S0111_wear-bidirectional-sync.md
spec-check
Audit S0111 -> Verified; PASS/WARN/FAIL 30/0/0
2026-05-08 01:24:37
PLAN/S0111_wear-bidirectional-sync/INDEX.md
spec-check
S0111 INDEX: Completion Gate closed, status Verified
2026-05-08 01:25:07
PLAN/S0112_android-tv-launcher-support.md
spec-all
Strategic spec S0112: Android TV launcher visibility + D-pad focus
2026-05-08 01:25:48
PLAN/S0112_android-tv-launcher-support/INDEX.md
spec-all
Tactical plan S0112: 3 phases - manifest, item focus, player controls
2026-05-08 01:27:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
GeneralSettingsViewSetupHelper
Added non-consuming tap-to-focus bridge for default credential fields and non-Chrome OS IME assist
2026-05-08 01:27:31
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/settings/DefaultCredentialsInputTest.kt
DefaultCredentialsInputTest
Added regression test for TextInputLayout tap routing to default credential editors
2026-05-08 01:30:06
app_v2/src/main/AndroidManifest.xml
AndroidManifest
S0112: Add LEANBACK_LAUNCHER category + android:banner for TV launcher visibility
2026-05-08 01:30:06
app_v2/src/main/res/drawable/tv_banner.xml
tv_banner
S0112: Create TV launcher banner XML placeholder (320x180dp, dark navy bg + app icon)
2026-05-08 01:30:06
app_v2/src/main/res/values/colors.xml
colors
S0112: Add tv_banner_bg color (#1A1A2E)
2026-05-08 01:30:07
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
S0112: Add Timber debug tag for TV launcher support verification
2026-05-08 01:30:20
app_v2/src/main/res/layout/item_duplicate_file.xml
item_duplicate_file
S0112: Add android:focusable=true for TV D-pad navigation
2026-05-08 01:30:20
app_v2/src/main/res/layout/item_epub_search_result.xml
item_epub_search_result
S0112: Add android:focusable=true for TV D-pad navigation
2026-05-08 01:30:20
app_v2/src/main/res/layout/item_epub_toc.xml
item_epub_toc
S0112: Add android:focusable=true for TV D-pad navigation
2026-05-08 01:30:20
app_v2/src/main/res/layout/item_duplicate_group.xml
item_duplicate_group
S0112: Add android:focusable=true for TV D-pad navigation
2026-05-08 01:30:21
app_v2/src/main/res/layout/item_scheduled_operation.xml
item_scheduled_operation
S0112: Add android:focusable=true for TV D-pad navigation
2026-05-08 01:33:34
PLAN/S0112_android-tv-launcher-support.md
spec-all
Pipeline BlockNeedUserTest: S0112 - build passed, on-device TV verification pending
2026-05-08 01:40:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/TextInputTapFocusBridge.kt
TextInputTapFocusBridge
Added shared non-consuming tap-to-focus bridge for outlined Material text inputs
2026-05-08 01:40:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
ResourceEditorFragment
Added outlined text field tap-to-focus bridge wiring for inline resource editor inputs
2026-05-08 01:40:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt
AddResourceFormManager
Added tap-to-focus bridge wiring for SMB and SFTP outlined inputs
2026-05-08 01:40:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Wired AddResource text input tap bridges during view setup
2026-05-08 01:40:37
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorCredentialsInstrumentationTest.kt
ResourceEditorCredentialsInstrumentationTest
Added TextInputLayout tap-routing regression coverage for ResourceEditor SMB fields
2026-05-08 01:40:37
app_v2/src/androidTest/java/com/sza/fastmediasorter/ui/addresource/AddResourceInputTapTest.kt
AddResourceInputTapTest
Added SMB and SFTP outlined input tap-routing regression tests
2026-05-08 01:48:22
PLAN/S0113_sftp-pool-stability.md
spec
Add strategic spec S0113: SFTP pool stability - idle eviction, duplicate downloads, recoverable error toasts
2026-05-08 01:54:46
PLAN/S0113_sftp-pool-stability/INDEX.md
spec-tech
Create tactical plan for S0113
2026-05-08 01:54:46
PLAN/S0113_sftp-pool-stability/PHASE_01__pool-active-guard.md
spec-tech
Phase 01: pool-active-guard
2026-05-08 01:54:46
PLAN/S0113_sftp-pool-stability/PHASE_02__download-dedup.md
spec-tech
Phase 02: download-dedup
2026-05-08 01:54:46
PLAN/S0113_sftp-pool-stability/PHASE_03__error-triage.md
spec-tech
Phase 03: error-triage
2026-05-08 01:54:46
PLAN/S0113_sftp-pool-stability/PHASE_04__unified-session.md
spec-tech
Phase 04: unified-session (blocked)
2026-05-08 01:54:46
PLAN/S0113_sftp-pool-stability/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-08 01:54:46
PLAN/S0113_sftp-pool-stability.md
spec-tech
Status -> Tactical
2026-05-08 02:16:49
PLAN/S0114_bugfix-smb-scan-subfolders-flat-list.md
spec
Add strategic spec S0114 for bugfix-smb-scan-subfolders-flat-list
2026-05-08 02:23:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt
S0100
Guard MediaRecorder.stop() in releaseRecorder() with isRecorderStarted flag - prevents stop failed -1007 on quick tap before recorder reaches RECORDING state
2026-05-08 02:26:40
PLAN/S0100_mic-recording-in-browse.md
spec-check
Audit S0100 -> Verified; PASS 59 / WARN 0 / FAIL 0; regression fix for isRecorderStarted guard confirmed
2026-05-08 02:27:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
S0114
Fix orphaned scan job: cancel-before-launch in loadMediaFiles()
2026-05-08 02:30:57
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
S0113
Phase 01+04: activeStreamCount guard + unified SSH session (ChannelPurpose, PooledChannel, single pooledSessions map)
2026-05-08 02:30:57
app_v2/src/main/java/com/sza/fastmediasorter/core/util/NetworkDownloadDeduplicator.kt
S0113
Phase 02: new protocol-agnostic download deduplicator object
2026-05-08 02:30:57
app_v2/src/main/java/com/sza/fastmediasorter/core/util/NetworkFileDownloader.kt
S0113
Phase 02: wrap downloadToTemp in NetworkDownloadDeduplicator.deduplicate
2026-05-08 02:30:57
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
S0113
Phase 03: JSchException retry in open() + attemptOpen() helper extracted
2026-05-08 02:30:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0113
Phase 03: suppress recoverable SFTP IO error toast when ExoPlayer not idle
2026-05-08 02:32:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
S0114
Invalidate caches when scanSubdirectories changes on resource save
2026-05-08 02:36:23
PLAN/S0113_sftp-pool-stability.md
spec-check
Audit S0113 -> Verified; PASS/WARN/FAIL 41/0/0; 5 manual on-device
2026-05-08 02:36:23
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
S0113
Remove S0113 Timber debug tags (Verified transition)
2026-05-08 02:36:23
app_v2/src/main/java/com/sza/fastmediasorter/core/util/NetworkDownloadDeduplicator.kt
S0113
Remove S0113 Timber debug tag
2026-05-08 02:36:23
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
S0113
Remove S0113 Timber debug tag
2026-05-08 02:36:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0113
Remove S0113 Timber debug tag
2026-05-08 02:36:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
S0114
Remove S0114 debug tag after verification
2026-05-08 02:36:49
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
S0114
Remove S0114 debug tag after verification
2026-05-08 02:36:49
dev/CATALOG/app_v2.jsonl
catalog
Regenerate after S0114 changes
2026-05-08 02:39:04
PLAN/S0114_bugfix-smb-scan-subfolders-flat-list.md
spec-check
Audit S0114 → Verified; PASS/WARN/FAIL 16/0/0
2026-05-08 02:44:28
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/PlaybackPositionRepositoryImpl.kt
PlaybackPositionRepositoryImpl
Never swallow CancellationException: add rethrow guard before catch(Exception) in all suspend methods
2026-05-08 02:44:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackPositionHelper.kt
PlaybackPositionHelper
Never swallow CancellationException: add rethrow guard in saveCurrentPosition catch block
2026-05-08 02:46:31
PLAN/S0115_unified-error-display.md
spec
Add strategic spec S0115 for unified-error-display
2026-05-08 02:50:05
PLAN/S0106_player-image-crop.md
bug-report
S0106 Broken: PhotoView collapses to zero-size rect on enterCropMode (display rect 360,0,360,0 after crop mode entry)
2026-05-08 02:53:24
PLAN/S0115_unified-error-display/INDEX.md
spec-tech
Create tactical plan for S0115
2026-05-08 02:53:25
PLAN/S0115_unified-error-display/PHASE_01__error-severity-model.md
spec-tech
Phase 01: error-severity-model
2026-05-08 02:53:25
PLAN/S0115_unified-error-display/PHASE_02__enhanced-error-dialog.md
spec-tech
Phase 02: enhanced-error-dialog
2026-05-08 02:53:25
PLAN/S0115_unified-error-display/PHASE_03__browse-player-wiring.md
spec-tech
Phase 03: browse-player-wiring
2026-05-08 02:53:25
PLAN/S0115_unified-error-display/PHASE_04__addresource-main-wiring.md
spec-tech
Phase 04: addresource-main-wiring
2026-05-08 02:53:25
PLAN/S0115_unified-error-display/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-08 02:53:26
PLAN/S0115_unified-error-display.md
spec-tech
Status → Tactical
2026-05-08 02:54:26
app_v2/src/main/java/com/sza/fastmediasorter/core/error/ErrorSeverity.kt
S0115/01.1
New ErrorSeverity enum (CRITICAL, DEBUG_ONLY)
2026-05-08 02:55:16
app_v2/src/main/java/com/sza/fastmediasorter/util/AppErrorNotifier.kt
S0115/01.2
New AppErrorNotifier facade (Snackbar-based, CRITICAL/DEBUG_ONLY)
2026-05-08 02:55:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager
Fix: ensureLocalSource passed file path as FileOperation.Copy destination which treats it as a directory; now uses a real temp dir and renames the downloaded file to the expected path
2026-05-08 02:55:58
app_v2/src/main/java/com/sza/fastmediasorter/util/ToastThrottler.kt
S0115/01.3
Wire showNetworkError to AppErrorNotifier when Activity provided
2026-05-08 02:59:39
app_v2/src/main/res/layout/dialog_error_detail.xml
S0115/02.1
New error detail dialog layout (portrait)
2026-05-08 02:59:40
app_v2/src/main/res/layout-land/dialog_error_detail.xml
S0115/02.1
New error detail dialog layout (landscape)
2026-05-08 03:00:52
app_v2/src/main/res/values/strings.xml
S0115/02.2
Add error_dialog_* and error_save* strings (EN)
2026-05-08 03:00:53
app_v2/src/main/res/values-ru/strings.xml
S0115/02.2
Add error_dialog_* and error_save* strings (RU)
2026-05-08 03:00:53
app_v2/src/main/res/values-uk/strings.xml
S0115/02.2
Add error_dialog_* and error_save* strings (UK)
2026-05-08 10:20:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ErrorDialog.kt
ErrorDialog
S0115: Rebuilt with dialog_error_detail layout - collapsible details, Save-to-file, Share, Copy actions
2026-05-08 10:20:45
app_v2/src/main/res/layout/dialog_error_detail.xml
dialog_error_detail
S0115: New dialog layout with selectable message, collapsible details, Save button
2026-05-08 10:20:45
app_v2/src/main/res/layout-land/dialog_error_detail.xml
dialog_error_detail
S0115: Landscape counterpart for dialog_error_detail
2026-05-08 10:20:45
app_v2/src/main/res/values/strings.xml
strings.xml
S0115: Add error_dialog_*, error_saved_to_downloads, error_log_save_failed keys
2026-05-08 10:20:45
app_v2/src/main/res/values-ru/strings.xml
strings.xml
S0115: Add Russian translations for error dialog strings
2026-05-08 10:20:46
app_v2/src/main/res/values-uk/strings.xml
strings.xml
S0115: Add Ukrainian translations for error dialog strings
2026-05-08 10:25:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseErrorDisplayManager.kt
BrowseErrorDisplayManager
S0115: Replace ToastThrottler.showNetworkError with AppErrorNotifier.show CRITICAL in showError else-branch
2026-05-08 10:25:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
S0115: Replace ToastThrottler.showNetworkError with AppErrorNotifier.show CRITICAL in showError else-branch
2026-05-08 10:31:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
S0115: Replace error Toast calls (auth failures, validation errors, showError else-branch) with AppErrorNotifier.show CRITICAL
2026-05-08 10:31:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
S0115: Replace Toast in showError else-branch with AppErrorNotifier.show CRITICAL
2026-05-08 10:35:50
docs/FEATURES.md
FEATURES.md
S0115: Add unified error display bullet to section 19 Settings
2026-05-08 10:35:50
docs/FEATURES_RU.md
FEATURES_RU.md
S0115: Add Russian unified error display bullet to section 19
2026-05-08 10:35:50
docs/FEATURES_UK.md
FEATURES_UK.md
S0115: Add Ukrainian unified error display bullet to section 19
2026-05-08 10:35:50
dev/CATALOG/app_v2.jsonl
app_v2.jsonl
S0115: Catalog regen - ErrorSeverity (core-enum), AppErrorNotifier (ui-util) entries added/updated
2026-05-08 10:41:20
PLAN/S0115_unified-error-display.md
spec-check
Audit S0115 -> Verified; PASS/WARN/FAIL 36/0/0
2026-05-08 10:41:21
app_v2/src/main/java/com/sza/fastmediasorter/util/AppErrorNotifier.kt
AppErrorNotifier
S0115 Verified: remove Timber.d debug tag
2026-05-08 10:41:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ErrorDialog.kt
ErrorDialog
S0115 Verified: remove Timber.d debug tag
2026-05-08 10:41:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseErrorDisplayManager.kt
BrowseErrorDisplayManager
S0115 Verified: remove Timber.d debug tag
2026-05-08 10:41:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
S0115 Verified: remove Timber.d debug tag
2026-05-08 10:41:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
S0115 Verified: remove Timber.d debug tag
2026-05-08 10:41:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
S0115 Verified: remove Timber.d debug tag
2026-05-08 10:47:00
PLAN/S0116_url-media-downloader.md
spec
Add strategic spec S0116 for url-media-downloader (streams, platforms, auth)
2026-05-08 10:57:23
PLAN/S0116_url-media-downloader.md
S0116
Updated spec with yt-dlp concepts, generic stream sniffing, and WebView cookie extraction
2026-05-08 11:11:47
PLAN/S0116_url-media-downloader.md
spec-update
Refined strategic spec: platform-neutral positioning, corrected streaming assumptions, single-result MVP scope
2026-05-08 11:13:36
PLAN/S0116_url-media-downloader.md
spec-update
Finalized strategic wording cleanup: platform-neutral positioning and clarified single-result/store-safe scope
2026-05-08 11:23:12
PLAN/S0116_url-media-downloader.md
spec-update
Refinement (claude-opus-4-5, focus: completeness, consistency) - noLegal flavor decision, §6.6 closed, §6.1 partial, multi-item scope, Instagram/Threads whitelist
2026-05-08 11:40:10
PLAN/S0116_url-media-downloader.md
spec
S0116: strategic deep-update - research-driven boundary redraw (capability matrix §13, HLS/DASH→MP4 via MediaMuxer in standard, generic streaming sniffer, universal WebView auth; noLegal becomes optional Phase 2)
2026-05-08 11:58:26
PLAN/S0116_url-media-downloader.md
spec
S0116 v2 strategic update: post-download UX (column M), graceful degradation to S0003 (5.4), debug logging strategy (5.5)
2026-05-08 11:58:30
PLAN/S0117_url-media-downloader-nolegal-flavor.md
spec
S0117 created: noLegal sideload-only flavor for site-specific extractors and album batch (split from S0116)
2026-05-08 12:01:28
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
SftpDataSource
Removed noisy per-read SFTP playback logging from read()
2026-05-08 12:01:29
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/FtpDataSource.kt
FtpDataSource
Removed noisy per-read FTP playback logging from read()
2026-05-08 12:01:30
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
SmbDataSource
Removed per-read SMB playback logging and kept coarse transfer summaries
2026-05-08 12:06:04
ui/browse/BrowseViewModel.kt, ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseViewModel, BrowseLoadingAuxManager
Map raw SMB IOException messages to user-friendly strings in error state view and toast; add ‘Host Unreachable’ case for Server unreachable errors
2026-05-08 12:13:48
PLAN/S0116_url-media-downloader/INDEX.md
spec-tech
Create tactical plan for S0116 (8 phases)
2026-05-08 12:13:51
PLAN/S0116_url-media-downloader/PHASE_01__foundations.md
spec-tech
S0116 Phase 01: foundations (BuildConfig, AppSettings, sealed types, Hilt skeleton)
2026-05-08 12:13:55
PLAN/S0116_url-media-downloader/PHASE_02__streaming-sniffer.md
spec-tech
S0116 Phase 02: generic streaming sniffer (m3u8/mpd in HTML/JSON-LD)
2026-05-08 12:13:59
PLAN/S0116_url-media-downloader/PHASE_03__streaming-downloader.md
spec-tech
S0116 Phase 03: streaming downloader HLS/DASH to MP4 via Media3 + MediaMuxer
2026-05-08 12:14:03
PLAN/S0116_url-media-downloader/PHASE_04__cookie-storage.md
spec-tech
S0116 Phase 04: encrypted cookie storage and OkHttp/Media3 injection
2026-05-08 12:14:06
PLAN/S0116_url-media-downloader/PHASE_05__webview-auth.md
spec-tech
S0116 Phase 05: universal WebView authentication and saved auth sessions list
2026-05-08 12:14:10
.github/agents/friendly-android-doc-writer.agent.md
Friendly Android Doc Writer
Added a workspace custom agent for friendly Android documentation, explanations, and UI copy rewriting
2026-05-08 12:14:10
PLAN/S0116_url-media-downloader/PHASE_06__post-download-ux.md
spec-tech
S0116 Phase 06: post-download UX presenter (toast vs auto-open) and s0116toast strings
2026-05-08 12:14:14
PLAN/S0116_url-media-downloader/PHASE_07__degradation-and-logging.md
spec-tech
S0116 Phase 07: graceful degradation instrumentation tests and verbose logging audit
2026-05-08 12:14:18
PLAN/S0116_url-media-downloader/PHASE_08__docs-catalog-cleanup.md
spec-tech
S0116 Phase 08: docs/FEATURES trilingual + catalog regen + final lint gates
2026-05-08 12:14:21
PLAN/S0116_url-media-downloader.md
spec-tech
S0116 status -> Tactical
2026-05-08 12:14:42
.github/agents/friendly-android-doc-writer.agent.md
Friendly Android Doc Writer
Refined agent voice rules so light irony also applies to technical explanations without reducing precision
2026-05-08 12:22:57
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Refined S0118: clarified self-ironic tone and added contextual docs, bug-report, and improvement-feedback scope
2026-05-08 12:26:37
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Refined S0118: short actionable toast-style notifications, richer helpful dialogs, and friendly recovery wording for error states
2026-05-08 12:34:13
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Closed S0118 product questions: full UI text coverage, no emoji icons, neutral legal/machine-readable texts, fixed support channels, and contextual next-step rules
2026-05-08 12:46:12
PLAN/S0116_url-media-downloader/INDEX.md
spec-tech
S0116 tactical plan: post-author audit applied across all 8 phases (interface placement, EncryptedSharedPreferences API, settings nav, instrumentation tests)
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/INDEX.md
spec-update
S0116 tactical refinement pass
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/PHASE_01__foundations.md
spec-update
S0116 tactical refinement pass
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/PHASE_02__streaming-sniffer.md
spec-update
S0116 tactical refinement pass
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/PHASE_03__streaming-downloader.md
spec-update
S0116 tactical refinement pass
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/PHASE_04__cookie-storage.md
spec-update
S0116 tactical refinement pass
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/PHASE_05__webview-auth.md
spec-update
S0116 tactical refinement pass
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/PHASE_06__post-download-ux.md
spec-update
S0116 tactical refinement pass
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/PHASE_07__degradation-and-logging.md
spec-update
S0116 tactical refinement pass
2026-05-08 12:58:05
PLAN/S0116_url-media-downloader/PHASE_08__docs-catalog-cleanup.md
spec-update
S0116 tactical refinement pass
2026-05-08 13:20:43
app_v2/build.gradle.kts
spec-dev
S0116 Phase 01 step 1: add LOG_LINK_DOWNLOAD BuildConfig flag (debug=true, release=false)
2026-05-08 13:21:34
app_v2/build.gradle.kts
spec-dev
S0116 Phase 01 step 2: re-enable media3-exoplayer-hls/dash for standard/legacy/vr/vrUnlicensed flavors
2026-05-08 13:22:24
.gitignore
.gitignore
Ignored PLAN directory in git
2026-05-08 13:23:01
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
spec-dev
S0116 Phase 01 step 4: add linkDownloadMaxResolution and linkDownloadAudioOnly fields
2026-05-08 13:24:07
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
spec-dev
S0116 Phase 01 step 5: persist linkDownloadMaxResolution + linkDownloadAudioOnly with whitelist validation
2026-05-08 13:25:11
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
spec-dev
S0116 Phase 01 step 6: add nullable linkDownloadMaxResolution + linkDownloadAudioOnly fields
2026-05-08 13:25:12
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
spec-dev
S0116 Phase 01 step 6: propagate quality preference fields in toBackup/fromBackup
2026-05-08 13:26:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/link/StreamingManifest.kt
spec-dev
S0116 Phase 01 step 7: new sealed StreamingManifest (Hls/Dash) for streaming pipeline
2026-05-08 13:26:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/link/MediaQualityPreference.kt
spec-dev
S0116 Phase 01 step 7: new MediaQualityPreference with fromSettings mapper
2026-05-08 13:26:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/UrlExtractionStrategy.kt
spec-dev
S0116 Phase 01 step 7: extend OpenResult with Streaming; extend BlockedReason with DrmProtected/StreamingDisabled/MuxFailed/AuthRequired
2026-05-08 13:26:42
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-dev
S0116 Phase 01 step 7: compile-safe placeholder branches for OpenResult.Streaming and new BlockedReason variants
2026-05-08 13:27:45
app_v2/src/main/java/com/sza/fastmediasorter/core/log/LinkDownloadTrace.kt
spec-dev
S0116 Phase 01 step 8: new LinkDownloadTrace privacy-safe logger (tag/verbose/truncateUrl/truncateCookies)
2026-05-08 13:27:45
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
spec-dev
S0116 Phase 01 step 8: marker comment for streaming/cookie/auth bindings landing in later phases
2026-05-08 13:36:52
dev/CATALOG/app_v2.jsonl
spec-dev
S0116 Phase 01: regenerated catalog with 3 new classes (StreamingManifest, MediaQualityPreference, LinkDownloadTrace)
2026-05-08 13:37:40
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlMediaCandidate.kt
spec-dev
S0116 Phase 02 step 1: add HLS_MANIFEST/DASH_MANIFEST sources and manifest field
2026-05-08 13:38:56
app_v2/src/main/java/com/sza/fastmediasorter/data/link/StreamingManifestSniffer.kt
spec-dev
S0116 Phase 02 step 2: new StreamingManifestSniffer with 4 source harvesters (meta/JSON-LD/regex/data-attr)
2026-05-08 13:40:17
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
spec-dev
S0116 Phase 02 step 3: wire StreamingManifestSniffer into harvestCandidates with debug tag
2026-05-08 13:41:46
app_v2/src/main/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicy.kt
spec-dev
S0116 Phase 02 step 4: streaming manifest fallback rule
2026-05-08 13:41:46
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
spec-dev
S0116 Phase 02 step 4: route HLS/DASH chosen candidates to OpenResult.Streaming with derived MP4 filename
2026-05-08 13:42:41
app_v2/src/test/java/com/sza/fastmediasorter/data/link/StreamingManifestSnifferTest.kt
spec-dev
S0116 Phase 02 step 5: 6 @Test cases for StreamingManifestSniffer
2026-05-08 13:46:52
app_v2/build.gradle.kts
spec-dev
S0116 Phase 03 step 1: wire streamingEnabled/streamingDisabled shared source-sets into video and lite/photos flavors
2026-05-08 13:47:44
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/streaming/StreamingPipeline.kt
spec-dev
S0116 Phase 03 step 1b: StreamingPipeline interface + PipelineOutcome sealed hierarchy in main/
2026-05-08 14:02:02
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/data/link/streaming/ManifestDrmDetector.kt
spec-dev
S0116 Phase 03 step 2: ManifestDrmDetector best-effort HLS/DASH DRM pre-flight
2026-05-08 14:03:08
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/data/link/streaming/Media3SegmentDownloader.kt
spec-dev
S0116 Phase 03 step 3: Media3SegmentDownloader (HlsDownloader/DashDownloader + per-session SimpleCache)
2026-05-08 14:04:11
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/data/link/streaming/MediaMuxerRemuxer.kt
spec-dev
S0116 Phase 03 step 4: MediaMuxerRemuxer (sample-copy AVC/HEVC/AV1 + AAC into MP4)
2026-05-08 14:04:58
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/data/link/streaming/StreamingCacheCleaner.kt
spec-dev
S0116 Phase 03 step 5: StreamingCacheCleaner (session id, sessionDir, preflight, cleanup)
2026-05-08 14:06:52
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/data/link/streaming/StreamingDownloadStrategy.kt
spec-dev
S0116 Phase 03 step 6: StreamingDownloadStrategy orchestrator (DRM->preflight->download->remux->cleanup)
2026-05-08 14:09:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-dev
S0116 Phase 03 step 7: extend Failed sealed (DrmBlocked/StreamingDisabled/MuxFailed); inject StreamingPipeline; runStreaming flow
2026-05-08 14:09:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
spec-dev
S0116 Phase 03 step 7: temporary handleLinkAutoDownloadResult branches for DrmBlocked/StreamingDisabled/MuxFailed
2026-05-08 14:10:52
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/di/StreamingModule.kt
spec-dev
S0116 Phase 03 step 8: Hilt StreamingModule binding StreamingDownloadStrategy as StreamingPipeline (video flavors)
2026-05-08 14:10:52
app_v2/src/streamingDisabled/java/com/sza/fastmediasorter/data/link/streaming/NoOpStreamingPipeline.kt
spec-dev
S0116 Phase 03 step 8: NoOpStreamingPipeline returning Disabled outcome (lite/photos)
2026-05-08 14:10:53
app_v2/src/streamingDisabled/java/com/sza/fastmediasorter/di/StreamingModule.kt
spec-dev
S0116 Phase 03 step 8: Hilt StreamingModule binding NoOpStreamingPipeline (lite/photos)
2026-05-08 14:12:28
app_v2/src/androidTest/java/com/sza/fastmediasorter/data/link/streaming/MediaMuxerRemuxerInstrumentationTest.kt
spec-dev
S0116 Phase 03 step 9: instrumentation test (3 @Test) for MediaMuxerRemuxer; placeholder fixtures with assumeTrue skip
2026-05-08 14:18:44
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStore.kt
spec-dev
S0116 Phase 04 step 1: EncryptedCookieStore (MasterKey AES256 + JSON per-domain payload)
2026-05-08 14:19:39
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadCookieJar.kt
spec-dev
S0116 Phase 04 step 2: LinkDownloadCookieJar (load-only, save no-op)
2026-05-08 14:20:50
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/AuthSessionRepository.kt
spec-dev
S0116 Phase 04 step 3: AuthSessionRepository interface + AuthSessionDomain
2026-05-08 14:20:50
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
spec-dev
S0116 Phase 04 step 3: AuthSessionRepositoryImpl (StateFlow snapshot over EncryptedCookieStore)
2026-05-08 14:22:02
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
spec-dev
S0116 Phase 04 step 4: wire LinkDownloadCookieJar into linkDownload OkHttpClient + bind AuthSessionRepository
2026-05-08 14:23:01
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/data/link/streaming/Media3SegmentDownloader.kt
spec-dev
S0116 Phase 04 step 5: inject domain cookies into Media3 DefaultHttpDataSource
2026-05-08 14:23:54
app_v2/src/test/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStoreTest.kt
spec-dev
S0116 Phase 04 step 6: 4 @Test Robolectric cases for EncryptedCookieStore contract
2026-05-08 14:28:47
PLAN/S0120_memory-growth-endurance-scenarios.md
spec
Add strategic spec S0120 for memory growth endurance scenarios
2026-05-08 14:30:35
app_v2/src/main/res/layout/fragment_permissions_management.xml
PermissionsManagementFragment
Add MaterialToolbar with back navigation to permissions screen (replaces android.R.id.content, no activity toolbar visible)
2026-05-08 14:34:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
spec-dev
S0116 Phase 05 step 2: WebViewAuthDialogFragment with cookie harvest + WebView state cleanup
2026-05-08 14:34:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthViewModel.kt
spec-dev
S0116 Phase 05 step 2: WebViewAuthViewModel forwards cookies to AuthSessionRepository
2026-05-08 14:34:35
app_v2/src/main/res/layout/dialog_webview_auth.xml
spec-dev
S0116 Phase 05 step 2: portrait WebView auth dialog layout
2026-05-08 14:34:35
app_v2/src/main/res/layout-land/dialog_webview_auth.xml
spec-dev
S0116 Phase 05 step 2: landscape WebView auth dialog layout (side-by-side)
2026-05-08 14:36:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
spec-dev
S0116 Phase 05 step 3: AuthSessionsListFragment with delete + add CTA
2026-05-08 14:36:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListViewModel.kt
spec-dev
S0116 Phase 05 step 3: AuthSessionsListViewModel
2026-05-08 14:36:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionAdapter.kt
spec-dev
S0116 Phase 05 step 3: AuthSessionAdapter (single-tap delete, ImageButton 48dp)
2026-05-08 14:36:46
app_v2/src/main/res/layout/fragment_auth_sessions_list.xml
spec-dev
S0116 Phase 05 step 3: portrait sessions list layout
2026-05-08 14:36:47
app_v2/src/main/res/layout-land/fragment_auth_sessions_list.xml
spec-dev
S0116 Phase 05 step 3: landscape sessions list layout (parity)
2026-05-08 14:36:47
app_v2/src/main/res/layout/item_auth_session.xml
spec-dev
S0116 Phase 05 step 3: auth session row item layout
2026-05-08 14:40:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsActivity.kt
spec-dev
S0116 Phase 05 step 4: AuthSessionsActivity host (sub-screen pattern for ViewPager2-based Settings)
2026-05-08 14:40:34
app_v2/src/main/res/layout/activity_auth_sessions.xml
spec-dev
S0116 Phase 05 step 4: activity_auth_sessions.xml fragment container
2026-05-08 14:40:35
app_v2/src/main/AndroidManifest.xml
spec-dev
S0116 Phase 05 step 4: register AuthSessionsActivity
2026-05-08 14:40:35
app_v2/src/main/res/layout/fragment_settings_playback.xml
spec-dev
S0116 Phase 05 step 4: row_saved_authorizations entry
2026-05-08 14:40:35
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
spec-dev
S0116 Phase 05 step 4: landscape parity copy with row_saved_authorizations
2026-05-08 14:40:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
spec-dev
S0116 Phase 05 step 4: wire row_saved_authorizations click + enable rule
2026-05-08 14:42:38
app_v2/src/main/res/values/strings.xml
spec-dev
S0116 Phase 05 step 5: EN strings for auth_sessions_, webview_auth_ , setting_saved_authorizations_*
2026-05-08 14:42:38
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0116 Phase 05 step 5: RU strings for auth_sessions_, webview_auth_
2026-05-08 14:42:38
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0116 Phase 05 step 5: UK strings for auth_sessions_, webview_auth_
2026-05-08 14:45:23
app_v2/src/main/java/com/sza/fastmediasorter/data/link/DirectFileExtractionStrategy.kt
spec-dev
S0116 Phase 05 step 6: 401/403 -> Blocked(AuthRequired)
2026-05-08 14:45:23
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
spec-dev
S0116 Phase 05 step 6: HtmlFetchResult tri-state, 401/403 -> Blocked(AuthRequired)
2026-05-08 14:45:24
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-dev
S0116 Phase 05 step 6: Result.Failed.AuthRequired variant + BlockedReason.AuthRequired mapping
2026-05-08 14:45:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
spec-dev
S0116 Phase 05 step 6: temporary AuthRequired toast (Phase 06 replaces with WebView launch)
2026-05-08 14:51:20
app_v2/src/main/res/values/strings.xml
spec-dev
S0116 Phase 06 step 1: EN s0116toast * strings (7 keys)
2026-05-08 14:51:20
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0116 Phase 06 step 1: RU s0116toast * strings
2026-05-08 14:51:20
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0116 Phase 06 step 1: UK s0116toast * strings
2026-05-08 14:52:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
spec-dev
S0116 Phase 06 step 2: LinkAutoDownloadResultPresenter (single Result UX entry point)
2026-05-08 14:54:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
spec-dev
S0116 Phase 06 step 3: delegate Result handling to LinkAutoDownloadResultPresenter
2026-05-08 14:55:21
app_v2/src/main/res/values/strings.xml
spec-dev
S0116 Phase 06 step 4: link_autodownload_open_in_player_summary mentions toast fallback
2026-05-08 14:55:21
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0116 Phase 06 step 4: RU summary mentions toast fallback
2026-05-08 14:55:21
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0116 Phase 06 step 4: UK summary mentions toast fallback
2026-05-08 14:56:33
app_v2/src/test/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenterTest.kt
spec-dev
S0116 Phase 06 step 5: 7 @Test cases for LinkAutoDownloadResultPresenter (Robolectric + ShadowToast)
2026-05-08 15:06:58
AGENTS.md
AGENTS.md
Add opt-in caveman mode rules for repo-wide agent surfaces
2026-05-08 15:06:59
CLAUDE.md
CLAUDE.md
Add optional caveman mode guidance and safety limits
2026-05-08 15:07:00
.github/copilot-instructions.md
copilot-instructions.md
Register /caveman prompt and opt-in caveman mode policy
2026-05-08 15:07:01
.github/prompts/caveman.prompt.md
caveman.prompt.md
Add /caveman prompt for opt-in terse response mode
2026-05-08 15:09:40
.gitignore
.gitignore
Unignore shared agent prompt surfaces and AGENTS.md for caveman tooling
2026-05-08 15:10:04
app_v2/build.gradle.kts
spec-dev
S0116 Phase 07 step 0: add MockWebServer androidTestImplementation
2026-05-08 15:12:11
app_v2/src/androidTest/java/com/sza/fastmediasorter/data/link/GracefulDegradationTest.kt
spec-dev
S0116 Phase 07 step 1: GracefulDegradationTest with FakeStreamingModule (3 @Test, MockWebServer)
2026-05-08 15:14:37
app_v2/src/main/java/com/sza/fastmediasorter/data/link/StreamingManifestSniffer.kt
spec-dev
S0116 Phase 07 step 2: sniff wrapper with fallback to emptyList
2026-05-08 15:14:37
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStore.kt
spec-dev
S0116 Phase 07 step 2: loadFor wrapper with fallback to emptyList
2026-05-08 15:14:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
spec-dev
S0116 Phase 07 step 2: harvestAndDismiss try/catch with dismiss-no-save fallback
2026-05-08 15:14:37
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/data/link/streaming/StreamingDownloadStrategy.kt
spec-dev
S0116 Phase 07 step 2: standardise fallback= verbose log shape
2026-05-08 15:16:35
app_v2/src/test/java/com/sza/fastmediasorter/core/log/LinkDownloadTraceTest.kt
spec-dev
S0116 Phase 07 step 4: 4 @Test cases for LinkDownloadTrace truncateUrl + truncateCookies
2026-05-08 15:16:58
PLAN/S0116_url-media-downloader/PHASE_07__degradation-and-logging.md
spec-tech
S0116 Phase 07: degradation tests + verbose logging audit verified
2026-05-08 15:20:13
docs/FEATURES.md
spec-dev
S0116 Phase 08 step 1: Extended URL download (S0116) bullet in 22 Background services
2026-05-08 15:21:46
docs/FEATURES_RU.md
spec-dev
S0116 Phase 08 step 2: RU mirror for Extended URL download (S0116) bullet
2026-05-08 15:21:46
docs/FEATURES_UK.md
spec-dev
S0116 Phase 08 step 2: UK mirror for Extended URL download (S0116) bullet
2026-05-08 15:23:16
dev/CATALOG/app_v2.jsonl
spec-dev
S0116 Phase 08 step 3: regenerate catalog with new main/ classes (11 added; flavor source-sets unindexed by design)
2026-05-08 15:26:30
.github/copilot-instructions.md
copilot-instructions.md
Register /caveman-commit and /caveman-review prompt routing
2026-05-08 15:26:31
.github/prompts/caveman-commit.prompt.md
caveman-commit.prompt.md
Add /caveman-commit prompt for terse conventional commit messages
2026-05-08 15:26:32
.github/prompts/caveman-review.prompt.md
caveman-review.prompt.md
Add /caveman-review prompt for terse code review findings
2026-05-08 15:34:10
PLAN/S0116_url-media-downloader.md
spec-check
Audit S0116 -> Verified; PASS/WARN/FAIL 26/0/0; 4 manual on-device items; 1 catalog scanner exemption documented
2026-05-08 15:35:35
app_v2/src/main/java/com/sza/fastmediasorter/core/log/LinkDownloadTrace.kt
spec-check
S0116 transition to Verified: retire Timber.d(S0116:) emission per CLAUDE.md rule (tag() now no-op, 6 call sites preserved as documented markers)
2026-05-08 15:40:31
app_v2/src/main/res/layout/activity_keybinding_remap.xml
activity_keybinding_remap.xml
Add fitsSystemWindows=true to root LinearLayout so status bar inset is applied and toolbar with back button is visible
2026-05-08 15:46:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
Fix toolbar height jump on open: register insets listener in onCreate() before first frame; remove Chrome OS captionBar() inset type
2026-05-08 15:52:14
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-all
Strategic spec approved: S0120 - resolved all 5 open questions, memory endurance scenarios
2026-05-08 15:54:15
PLAN/S0120_memory-growth-endurance-scenarios/INDEX.md
spec-all
Tactical plan created: S0120 - 4 phases (contract, tracker, integration, runbook)
2026-05-08 16:01:17
app_v2/src/main/java/com/sza/fastmediasorter/core/debug/MemoryEnduranceTracker.kt
MemoryEnduranceTracker
S0120: new debug-only memory endurance tracker - structured checkpoint logging, PLATEAU/SUSPICIOUS/FAIL verdict
2026-05-08 16:01:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/SlideshowController.kt
SlideshowController
S0120: wire MemoryEnduranceTracker checkpoints on slideshow start/transition/stop
2026-05-08 16:01:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ExoPlayerControlsManager.kt
ExoPlayerControlsManager
S0120: wire TRANSITION checkpoint on next/prev file buttons
2026-05-08 16:01:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/filelist/BrowseFileListManager.kt
BrowseFileListManager
S0120: wire SORT_CHANGE checkpoint on large-folder sort (>=500 files)
2026-05-08 16:01:23
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
AppStartupInitializer
S0120: startup Timber debug tag confirming endurance tracker wiring
2026-05-08 16:03:28
PLAN/S0119_settings-information-architecture-revision.md
spec-update
Refined S0119 strategic spec with non-regression, multi-input, theme parity, multilingual search, and responsive contracts
2026-05-08 16:05:58
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-check
Audit S0120 -> Partial; PASS/WARN/FAIL 18/3/0; 3 action items (AUD scenario name, VID endScenario, MIX coverage)
2026-05-08 16:07:07
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-fix
Annotate Last Audit (S0120): 0 auto-fixed, 3 FOLLOW-UP (method body changes: AUD scenario name, VID endScenario, MIX coverage)
2026-05-08 16:16:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
S0120: checkpoint AUD-playback vs VID-playback on auto-advance in onPlaybackEnded
2026-05-08 16:16:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
S0120: call endScenario in releasePlayer to emit SUMMARY and schedule cooldown
2026-05-08 16:16:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioSlideshowPhotoModeManager.kt
AudioSlideshowPhotoModeManager
S0120: MIX-audio-slideshow checkpoint in advancePhoto
2026-05-08 16:16:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ExoPlayerControlsManager.kt
ExoPlayerControlsManager
S0120: MIX-audio-browse detection via AudioPlaybackService.isRunning on next/prev
2026-05-08 16:18:52
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-check
Audit S0120 -> Verified; PASS/WARN/FAIL 24/0/0; all follow-ups resolved
2026-05-08 16:19:09
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
AppStartupInitializer
S0120: remove Verified-transition debug tag (spec-lifecycle rule)
2026-05-08 16:36:46
PLAN/S0118_friendly-ui-copy-revision/INDEX.md
spec-tech
Create tactical plan index for S0118
2026-05-08 16:36:47
PLAN/S0118_friendly-ui-copy-revision/PHASE_01__copy-foundations.md
spec-tech
Add Phase 01 tactical spec for S0118
2026-05-08 16:36:48
PLAN/S0118_friendly-ui-copy-revision/PHASE_02__error-projection.md
spec-tech
Add Phase 02 tactical spec for S0118
2026-05-08 16:36:48
PLAN/S0118_friendly-ui-copy-revision/PHASE_03__help-routing.md
spec-tech
Add Phase 03 tactical spec for S0118
2026-05-08 16:36:49
PLAN/S0118_friendly-ui-copy-revision/PHASE_04__settings-surface-sweep.md
spec-tech
Add Phase 04 tactical spec for S0118
2026-05-08 16:36:50
PLAN/S0118_friendly-ui-copy-revision/PHASE_05__feature-surface-sweep.md
spec-tech
Add Phase 05 tactical spec for S0118
2026-05-08 16:36:51
PLAN/S0118_friendly-ui-copy-revision/PHASE_06__locale-tests.md
spec-tech
Add Phase 06 tactical spec for S0118
2026-05-08 16:37:11
PLAN/S0118_friendly-ui-copy-revision/PHASE_04__settings-surface-sweep.md
spec-tech
Add Phase 04 tactical spec for S0118
2026-05-08 16:37:12
PLAN/S0118_friendly-ui-copy-revision/PHASE_05__feature-surface-sweep.md
spec-tech
Add Phase 05 tactical spec for S0118
2026-05-08 16:37:12
PLAN/S0118_friendly-ui-copy-revision/PHASE_06__locale-tests.md
spec-tech
Add Phase 06 tactical spec for S0118
2026-05-08 16:37:13
PLAN/S0118_friendly-ui-copy-revision/PHASE_07__docs-catalog-cleanup.md
spec-tech
Add Phase 07 tactical spec for S0118
2026-05-08 16:37:14
PLAN/S0118_friendly-ui-copy-revision.md
spec-tech
Status -> Tactical and link tactical plan for S0118
2026-05-08 16:41:59
PLAN/S0119_settings-information-architecture-revision/INDEX.md
spec-tech
Create tactical plan for S0119
2026-05-08 16:41:59
PLAN/S0119_settings-information-architecture-revision/PHASE_01__settings-inventory.md
spec-tech
Phase 01: settings-inventory
2026-05-08 16:41:59
PLAN/S0119_settings-information-architecture-revision/PHASE_02__ia-model.md
spec-tech
Phase 02: ia-model
2026-05-08 16:41:59
PLAN/S0119_settings-information-architecture-revision/PHASE_03__migration-map.md
spec-tech
Phase 03: migration-map
2026-05-08 16:41:59
PLAN/S0119_settings-information-architecture-revision/PHASE_04__multilingual-search.md
spec-tech
Phase 04: multilingual-search
2026-05-08 16:41:59
PLAN/S0119_settings-information-architecture-revision/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-08 16:41:59
PLAN/S0119_settings-information-architecture-revision.md
spec-tech
Status -> Tactical
2026-05-08 16:48:18
PLAN/S0119_settings-information-architecture-revision/docs/settings-inventory.md
S0119
Phase 01: complete settings inventory - 4 tabs, 7 anomalies, 9 behavior contracts
2026-05-08 16:51:45
PLAN/S0119_settings-information-architecture-revision/docs/ia-model.md
S0119
Phase 02: canonical IA model - surface hierarchy, entity types, placement checklist, flavor/input/theme/search contracts
2026-05-08 16:56:28
PLAN/S0119_settings-information-architecture-revision/docs/migration-map.md
spec-dev
Phase 03: create migration map with canonical placements, confirmed misplacements, search index fixes, and wave strategy
2026-05-08 17:02:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
SettingsSearchIndex
S0119 Phase 04: add localizedKeywords Map field, extend search() for EN/RU/UK alias matching, populate RU/UK aliases for all 45 registry entries
2026-05-08 17:05:30
docs/FEATURES.md
FEATURES
S0119: add multilingual settings search bullet (EN)
2026-05-08 17:05:30
docs/FEATURES_RU.md
FEATURES_RU
S0119: add multilingual settings search bullet (RU)
2026-05-08 17:05:31
docs/FEATURES_UK.md
FEATURES_UK
S0119: add multilingual settings search bullet (UK)
2026-05-08 17:06:03
PLAN/S0119_settings-information-architecture-revision/
S0119
Settings IA revision - all phases complete
2026-05-08 17:06:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
SettingsSearchIndex
S0119: remove Timber.d debug tag (spec transition to Verified)
2026-05-08 17:08:44
PLAN/S0119_settings-information-architecture-revision.md
spec-check
Audit S0119 -> Verified; PASS/WARN/FAIL 28/0/0
2026-05-08 17:09:27
PLAN/S0119_settings-information-architecture-revision/INDEX.md
spec-dev
S0119: all 5 phases done - spec Verified
2026-05-08 17:09:27
PLAN/S0119_settings-information-architecture-revision/PHASE_05__docs-catalog-cleanup.md
spec-dev
Phase 05 docs-catalog-cleanup: all steps done
2026-05-08 20:24:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/copy/UiMessageFamily.kt
S0118
Add UiMessageFamily enum - shared message family model for friendly copy contract
2026-05-08 20:24:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/copy/UiNextStep.kt
S0118
Add UiNextStep sealed interface - contextual follow-up actions (help, report, feedback)
2026-05-08 20:24:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/copy/UiMessageSpec.kt
S0118
Add UiMessageSpec data class - payload shape for S0118 friendly copy contract
2026-05-08 20:24:44
app_v2/src/main/res/values/strings.xml
S0118
Add S0118 baseline friendly_copy_ key family (EN)
2026-05-08 20:24:51
app_v2/src/main/res/values-ru/strings.xml
S0118
Add S0118 baseline friendly_copy_ key family (RU)
2026-05-08 20:24:55
app_v2/src/main/res/values-uk/strings.xml
S0118
Add S0118 baseline friendly_copy_ key family (UK)
2026-05-08 20:25:02
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/copy/UiMessageSpecTest.kt
S0118
Add UiMessageSpecTest - unit tests for copy contract invariants
2026-05-08 20:39:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/copy/UiMessageProjector.kt
S0118
Add UiMessageProjector - UI projector for UiMessageSpec rendering to Snackbar/Dialog
2026-05-08 20:39:59
app_v2/src/main/java/com/sza/fastmediasorter/core/util/FileOperationErrorFormatter.kt
S0118
Strip emoji prefixes; add formatAsSpec for friendly copy contract
2026-05-08 20:39:59
app_v2/src/main/java/com/sza/fastmediasorter/util/ConnectionErrorFormatter.kt
S0118
Add formatAsSpec wrapper returning UiMessageSpec
2026-05-08 20:39:59
app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapper.kt
S0118
Add toUiSpec wrapper returning UiMessageSpec
2026-05-08 20:40:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseErrorDisplayManager.kt
S0118
Route short error copy through UiMessageProjector.showShort
2026-05-08 20:40:04
app_v2/src/test/java/com/sza/fastmediasorter/core/util/FileOperationErrorFormatterTest.kt
S0118
Add unit tests covering emoji-strip and timeout/generic paths
2026-05-08 20:40:04
app_v2/src/test/java/com/sza/fastmediasorter/util/ConnectionErrorFormatterTest.kt
S0118
Add unit tests for ConnectionErrorFormatter and formatAsSpec
2026-05-08 20:47:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/support/SupportDestination.kt
S0118
Add SupportDestination enum - canonical S0118 follow-up channels
2026-05-08 20:47:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/support/SupportIntentFactory.kt
S0118
Add SupportIntentFactory - shared intent builder for help/report/feedback
2026-05-08 20:47:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpDialogFragment.kt
S0118
Route F1 help launch through SupportIntentFactory.openUrl
2026-05-08 20:47:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpLinkResolver.kt
S0118
Cross-reference SupportIntentFactory in KDoc
2026-05-08 20:47:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt
S0118
Route bug-report email through SupportIntentFactory
2026-05-08 20:47:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0118
Resolve user-guide URL via SupportIntentFactory
2026-05-08 20:47:30
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/support/SupportIntentFactoryTest.kt
S0118
Add unit tests covering localized help URL, mailto path, Play Store URI
2026-05-08 20:55:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCredentialHelper.kt
S0118
Replace hardcoded picker/empty-file/import-failed strings with localized keys
2026-05-08 20:55:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsResetHelper.kt
S0118
Replace hardcoded reset-failure strings with localized keys
2026-05-08 20:55:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsImportExportHelper.kt
S0118
Replace ‘Unknown error’ fallbacks with localized settings_unknown_error
2026-05-08 20:55:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0118
Replace cache-range, no-browser, network-permission hardcoded toasts with R.string keys
2026-05-08 20:55:35
app_v2/src/main/res/values/strings.xml
S0118
Add Phase 04+05 friendly copy keys (EN)
2026-05-08 20:55:36
app_v2/src/main/res/values-ru/strings.xml
S0118
Add Phase 04+05 friendly copy keys (RU)
2026-05-08 20:55:36
app_v2/src/main/res/values-uk/strings.xml
S0118
Add Phase 04+05 friendly copy keys (UK)
2026-05-08 21:02:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesFragment.kt
S0118
Replace hardcoded duplicate-delete toasts with localized friendly_copy_ keys
2026-05-08 21:07:20
app_v2/src/main/res/values-ru/strings.xml
S0118
Localize error_reason_unknown into RU
2026-05-08 21:07:20
app_v2/src/main/res/values-uk/strings.xml
S0118
Localize error_reason_unknown into UK
2026-05-08 21:07:20
app_v2/src/test/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenterTest.kt
S0118
Add friendly-copy regression test
2026-05-08 21:07:20
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/input/InputHelpRegistryTest.kt
S0118
Add S0118 support-routing test
2026-05-08 21:07:24
app_v2/src/test/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapperTest.kt
S0118
Add unit tests for network error mapping
2026-05-08 21:07:24
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/copy/FriendlyCopyParityTest.kt
S0118
Add friendly-copy parity invariants test
2026-05-08 21:12:43
docs/FEATURES.md
S0118
Add ‘Friendly UI copy and support routing’ bullet to Settings section (EN)
2026-05-08 21:12:44
docs/FEATURES_RU.md
S0118
Add ‘Friendly UI copy and support routing’ bullet to Settings section (RU)
2026-05-08 21:12:44
docs/FEATURES_UK.md
S0118
Add ‘Friendly UI copy and support routing’ bullet to Settings section (UK)
2026-05-08 21:12:44
dev/CATALOG/app_v2.jsonl
S0118
Regenerate app_v2 class catalog after S0118 phases
2026-05-08 21:12:44
dev/CATALOG/app_v2.md
S0118
Regenerate human-readable catalog
2026-05-08 21:21:05
PLAN/S0118_friendly-ui-copy-revision.md
spec-check
Audit S0118 → Verified; PASS/WARN/FAIL 41/1/0; Timber.d S0118 tags removed
2026-05-08 21:21:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/copy/UiMessageProjector.kt
S0118
Strip Timber.d S0118 verification tags on Verified transition
2026-05-08 21:43:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt
S0106
Fix crop overlay collapsing PhotoView to 0x0: mount overlay to mediaContentArea instead of vertical LinearLayout root
2026-05-08 23:04:25
PLAN/S0119_settings-information-architecture-revision/
spec-all
S0119 re-audit: fixed Phase 02 step statuses and INDEX completion gate; all 59 verifications PASS
2026-05-08 23:08:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsBackupHelper.kt
GeneralSettingsBackupHelper
Use settings_unknown_error fallback for backup sign-in launch failure
2026-05-08 23:08:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
Use settings_unknown_error fallback for backup sign-in launch failure
2026-05-08 23:08:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/ErrorDialogHelper.kt
ErrorDialogHelper
Localize default error dialog title/button labels and unknown fallback copy
2026-05-08 23:08:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerViewModel.kt
GoogleDriveFolderPickerViewModel
Replace raw picker error strings with S0118-friendly localized messages
2026-05-08 23:08:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerViewModel.kt
OneDriveFolderPickerViewModel
Replace raw picker error strings with S0118-friendly localized messages
2026-05-08 23:08:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerViewModel.kt
DropboxFolderPickerViewModel
Replace raw picker error strings with S0118-friendly localized messages
2026-05-08 23:08:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceVirtualCoordinator.kt
AddResourceVirtualCoordinator
Replace raw virtual-resource add fallback with friendly localized error copy
2026-05-08 23:08:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ErrorDialog.kt
ErrorDialog
Use localized unknown-error fallback in Throwable overload
2026-05-08 23:08:40
PLAN/S0118_friendly-ui-copy-revision.md
spec-check
Re-audit S0118 -> Broken; PASS/WARN/FAIL 9/0/3
2026-05-08 23:09:13
dev/CATALOG/app_v2.jsonl
S0118 follow-up
Regenerate app_v2 catalog after S0118 follow-up fixes
2026-05-08 23:09:13
dev/CATALOG/app_v2.md
S0118 follow-up
Render human-readable app_v2 catalog after S0118 follow-up fixes
2026-05-08 23:24:07
PLAN/S0121_settings-general-tab-wave1-visual-grouping.md
spec-all
Strategic spec S0121: Settings General Tab Wave 1 visual grouping
2026-05-08 23:25:49
PLAN/S0121_settings-general-tab-wave1-visual-grouping/INDEX.md
spec-all
Tactical plan S0121: 4 phases, portrait+landscape layout + strings
2026-05-08 23:37:37
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
S0121 M4+M5: add sub-section headers for network/cache/settings-data/cloud-backup/reset and About card in portrait layout
2026-05-08 23:37:41
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general (land)
S0121 M4+M5: add sub-section headers and About card in landscape layout
2026-05-08 23:37:47
app_v2/src/main/res/values/strings.xml
strings
S0121: add 6 sub-section header string keys (EN/RU/UK)
2026-05-08 23:39:29
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general (land)
S0121 fix: rename containerDocLinks→containerAbout in About card for consistency with portrait
2026-05-08 23:39:53
PLAN/S0121_settings-general-tab-wave1-visual-grouping.md
spec-check
Audit S0121 → Verified; PASS/WARN/FAIL 16/0/0
2026-05-08 23:46:20
PLAN/S0122_settings-ia-wave2-cross-tab-relocations.md
spec-all
Strategic spec: S0122 Settings IA Wave 2 cross-tab relocations
2026-05-08 23:49:01
app_v2/src/main/res/layout/fragment_settings_playback.xml
PlaybackSettingsFragment
S0122 M2: Remove containerDeleteConfirm (switchAllowDelete + switchConfirmDelete) from playback layout
2026-05-08 23:49:01
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
PlaybackSettingsFragment
S0122 M2: Remove containerDeleteConfirm from playback landscape layout
2026-05-08 23:49:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
PlaybackSettingsFragment
S0122 M1+M2: Remove switchAllowDelete and switchConfirmDelete listeners and observer bindings
2026-05-08 23:49:02
app_v2/src/main/res/layout/fragment_settings_destinations.xml
OperationsSettingsFragment
S0122 M1: Add switchAllowDelete row to Safety section in destinations layout
2026-05-08 23:49:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
S0122 M1: Add switchAllowDelete listener and observer binding
2026-05-08 23:49:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
SettingsSearchRegistry
S0122 M1: Update playback.allow_delete entry to destination=DESTINATIONS, sectionId=operations
2026-05-08 23:50:26
PLAN/S0122_settings-ia-wave2-cross-tab-relocations.md
spec-all
Pipeline Verified: S0122 Settings IA Wave 2 cross-tab relocations
2026-05-08 23:54:15
PLAN/S0123_settings-ia-wave3-saved-authorizations-to-general.md
spec-all
Strategic spec S0123: Settings IA Wave 3 - move rowSavedAuthorizations to General tab
2026-05-08 23:59:29
app_v2/src/main/res/layout/fragment_settings_general.xml
S0123
Add rowSavedAuthorizations to General tab Network/Credentials area
2026-05-08 23:59:29
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0123
Add rowSavedAuthorizations to General tab landscape layout
2026-05-08 23:59:30
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0123
Remove rowSavedAuthorizations from Playback tab portrait layout
2026-05-08 23:59:30
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
S0123
Remove rowSavedAuthorizations from Playback tab landscape layout
2026-05-08 23:59:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0123
Remove rowSavedAuthorizations click handler and isEnabled tie from PlaybackSettingsFragment
2026-05-08 23:59:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0123
Add setupSavedAuthorizations() - wire rowSavedAuthorizations click to AuthSessionsActivity
2026-05-08 23:59:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
S0123
Add search entry general.saved_authorizations with GENERAL destination and RU/UK keywords
2026-05-08 23:59:37
PLAN/S0123_settings-ia-wave3-saved-authorizations-to-general.md
spec-all
Pipeline Verified: S0123 - Settings IA Wave 3 rowSavedAuthorizations to General
2026-05-09 01:04:38
PLAN/S0124_rollback-s0121-sub-headers.md
spec-all
Compact spec: S0124 rollback of S0121 sub-headers
2026-05-09 01:11:19
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
S0124: rollback 5 S0121 sub-header wrappers (portrait+land); remove orphan settings_section_* strings (EN/RU/UK); preserve containerAbout
2026-05-09 01:12:17
PLAN/S0124_rollback-s0121-sub-headers.md
spec-all
Pipeline complete: S0124 Verified
2026-05-09 01:39:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/
rollback
Reverted all S0119/S0121/S0122/S0123/S0124 settings changes - General tab broke after S0124. Restored sources from HEAD + temp _234633 backups. S0116 working-tree work preserved. All 5 specs archived.
2026-05-09 01:52:56
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-check
Audit S0120 → Broken; PASS/WARN/FAIL: 19/2/5; audio endScenario missing, browse FILTER_CHANGE/FOLDER_ENTER/endScenario missing, VID startScenario implicit only
2026-05-09 01:54:13
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-fix
Annotate Last Audit (S0120)
2026-05-09 01:54:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ExoPlayerControlsManager.kt
spec-fix
S0120: replace MIX-audio-browse with VID-playback; remove dead AudioPlaybackService import
2026-05-09 01:55:42
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-check
Audit S0120 → Broken; PASS/WARN/FAIL: 20/1/5; MIX-audio-browse fixed, 5 fails remain (AUD endScenario, BRW FILTER_CHANGE/FOLDER_ENTER/endScenario, VID startScenario)
2026-05-09 01:56:31
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-fix
Annotate Last Audit (S0120): 0 auto-fixed, 6 follow-ups
2026-05-09 02:12:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
S0120
Add startScenario(AUD-playback) on connect + endScenario() on release
2026-05-09 02:12:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0120
Add startScenario(VID-playback) on first media load (exoPlayer==null guard)
2026-05-09 02:12:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
S0120
Add FOLDER_ENTER checkpoint on navigateToFolder overloads; FILTER_CHANGE on applyFilter
2026-05-09 02:12:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0120
Add endScenario() in onStop (guarded by !isChangingConfigurations) for BRW-sort
2026-05-09 02:16:10
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-check
Audit S0120 → Verified; PASS/WARN/FAIL: 30/0/0; all 5 integration gaps repaired
2026-05-09 02:20:18
docs/DEV_OPS.md
docs
Sync DEV_OPS.md to current build.gradle.kts state: add vrUnlicensed flavor, fix lite/photos/legacy feature matrix, add a.ps1 shortcuts, build types table, NDK/ABI section, extended per-flavor BuildConfig flags
2026-05-09 02:35:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager
Fix EISDIR: copyToDestination bypasses FileOperationUseCase for local paths; network paths now rename source to target filename before Copy
2026-05-09 02:40:59
app_v2/build.gradle.kts
sourceSets
Replace deprecated srcDir() with directories += file() per AGP deprecation warning
2026-05-09 02:42:29
app_v2/build.gradle.kts
sourceSets
Fix build error: directories is val MutableSet, use .add(String) not += file()
2026-05-09 02:50:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager
Fix 180deg rotation in crop/compress output: apply EXIF rotation to decoded bitmap before saving (BitmapRegionDecoder/BitmapFactory return raw unrotated pixels)
2026-05-09 02:56:29
PLAN/S0125_settings-activity-revision.md
spec
Add strategic spec S0125 for settings activity revision
2026-05-09 03:02:49
app_v2/src/main/res/menu/overflow_menu_player.xml
S0107 Phase 01 Step 1.1
Add menu_draw_overlay item to overflow menu (IMAGE only)
2026-05-09 03:02:49
app_v2/src/main/res/drawable/ic_draw_overlay.xml
S0107 Phase 01 Step 1.1
Add ic_draw_overlay vector drawable stub (pencil icon)
2026-05-09 03:04:10
app_v2/src/main/res/values/strings.xml
S0107 Phase 01 Step 1.2
Add S0107 draw overlay string keys (EN)
2026-05-09 03:04:10
app_v2/src/main/res/values-ru/strings.xml
S0107 Phase 01 Step 1.2
Add S0107 draw overlay string keys (RU)
2026-05-09 03:04:10
app_v2/src/main/res/values-uk/strings.xml
S0107 Phase 01 Step 1.2
Add S0107 draw overlay string keys (UK)
2026-05-09 03:07:56
PLAN/S0125_settings-activity-revision.md
S0125
Apply final strategic delta: add goals 11-15 (non-regression, input/theme/locale parity, affordance contract), element-bound behavior parity + theme parity constraints, code-anchored context block (SettingsActivity:349, SettingsKeyboardNavigationManager, PermissionsManagementFragment:30, OperationsSettingsFragment:437, themes.xml:3), five new 5.1 pillars, four 5.2 flow bullets, four new §6 questions + partially-resolved evidence markers, three new risk rows, ADR-7 (theme parity), ADR-8 (multilingual search as IA), criteria 13-16 + evidence block in §11
2026-05-09 03:08:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0107 Phase 01 Step 1.3
Add DRAW_OVERLAY to PlayerCommand enum and buildActiveCommands condition
2026-05-09 03:08:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0107 Phase 01 Step 1.3
Add onDrawOverlayClicked to Callback interface and click handler
2026-05-09 03:08:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0107 Phase 01 Step 1.3
Implement onDrawOverlayClicked with Timber tag and enterDrawMode call
2026-05-09 03:08:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0107 Phase 01 Step 1.3
Declare lateinit var imageDrawOverlayManager for S0107
2026-05-09 03:19:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0107 Phase 02 Steps 2.1-2.5
Full ImageDrawOverlayManager: state machine, DrawCanvasView, swipe block, orientation lock, back press
2026-05-09 03:19:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0107 Phase 02 Step 2.4
Construct ImageDrawOverlayManager in PlayerManagerInitializer
2026-05-09 03:19:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0107 Phase 02 Step 2.5
Add isDrawOverlayManagerReady helper property
2026-05-09 03:19:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
S0107 Phase 02 Step 2.5
Wire imageDrawOverlayManager.handleBackPress() in setupBackPressHandler
2026-05-09 03:23:34
PLAN/S0125_settings-activity-revision.md
S0125
Add Row layout contract to §3.2: toggle-left / text / helper-right is a preserved hard constraint, not just an observation
2026-05-09 03:25:48
app_v2/src/main/res/layout/player_draw_overlay_toolbar_content.xml
S0107 Phase 03 Step 3.1
Create portrait draw overlay toolbar layout
2026-05-09 03:25:49
app_v2/src/main/res/layout-land/player_draw_overlay_toolbar_content.xml
S0107 Phase 03 Step 3.2
Create landscape draw overlay toolbar layout
2026-05-09 03:25:49
app_v2/src/main/res/layout/activity_player_unified.xml
S0107 Phase 03 Step 3.3
Include draw_overlay_toolbar_stub in player layout
2026-05-09 03:25:49
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0107 Phase 03 Step 3.3
Include draw_overlay_toolbar_stub in landscape player layout
2026-05-09 03:25:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0107 Phase 03 Step 3.4
Implement bindToolbar with tool/color/action button listeners and selection indicator
2026-05-09 03:25:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0107 Phase 03 Step 3.4
Call bindToolbar with draw_overlay_toolbar_stub.root
2026-05-09 03:25:50
app_v2/src/main/res/drawable/ic_draw_rect.xml
S0107 Phase 03
Add ic_draw_rect vector drawable stub
2026-05-09 03:25:50
app_v2/src/main/res/drawable/ic_eraser.xml
S0107 Phase 03
Add ic_eraser vector drawable stub
2026-05-09 03:25:50
app_v2/src/main/res/drawable/draw_color_swatch.xml
S0107 Phase 03
Add draw_color_swatch oval shape drawable
2026-05-09 03:26:16
temp/S0125_baseline_20260509_0326
S0125
Baseline snapshot before settings revision: 58 .kt + 33 .xml files, commit 01042db
2026-05-09 03:31:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MergeDrawOverlayUseCase.kt
S0107 Phase 04 Step 4.1
Create MergeDrawOverlayUseCase: in-memory composite of base + overlay bitmaps, compress to ByteArray on Dispatchers.IO
2026-05-09 03:34:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0107 Phase 04 Step 4.2
Add currentDisplayedBitmap: Bitmap? property (internal set) for draw overlay merge access
2026-05-09 03:34:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
S0107 Phase 04 Step 4.2
Add onStaticImageLoaded(bitmap) to ImageLoadingCallback interface; call from static Glide onResourceReady
2026-05-09 03:34:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerImageLoadingCallbackImpl.kt
S0107 Phase 04 Step 4.2
Implement onStaticImageLoaded to set viewModel.currentDisplayedBitmap with Timber log
2026-05-09 03:35:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0107 Phase 04 Step 4.3
Implement filename AlertDialog in handleSaveRequest: default name _draw_YYMMdd_HHmm., invokes saveCallback on confirm
2026-05-09 03:40:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0107 Phase 04 Step 4.4
Add mergeDrawOverlayUseCase @Inject, setupDrawOverlaySaveCallback(): merge + write to same-dir or Downloads + cleanup
2026-05-09 03:40:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0107 Phase 04 Step 4.4
Call setupDrawOverlaySaveCallback() after bindToolbar()
2026-05-09 03:40:38
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Force-locked refinement: align stale next-step guidance and audit history with Broken state
2026-05-09 03:40:38
PLAN/S0118_friendly-ui-copy-revision/INDEX.md
spec-update
Force-locked refinement: mark Broken audit as current gate truth in tactical index
2026-05-09 03:40:39
PLAN/S0118_friendly-ui-copy-revision/PHASE_07__docs-catalog-cleanup.md
spec-update
Force-locked refinement: mark Step 07.4 Verified audit as historical only
2026-05-09 03:43:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0107 Phase 04 Step 4.5
Add onFileCreatedInCurrentDirectory(newFile): inserts new MediaFile after currentIndex and navigates to it
2026-05-09 03:43:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0107 Phase 04 Step 4.5
Call viewModel.onFileCreatedInCurrentDirectory() after save to same-dir for navigation to new file
2026-05-09 03:47:36
docs/FEATURES.md
S0107 Phase 05 Step 5.1
Add Draw annotations bullet to section 5 Image Viewer
2026-05-09 03:47:36
docs/FEATURES_RU.md
S0107 Phase 05 Step 5.1
Add Russian draw overlay feature bullet to section 5
2026-05-09 03:47:37
docs/FEATURES_UK.md
S0107 Phase 05 Step 5.1
Add Ukrainian draw overlay feature bullet to section 5
2026-05-09 03:47:46
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Force-locked refinement: trimmed S0118 strategic prose for execution
2026-05-09 03:49:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0107 Phase 05 Step 5.2
Remove Timber.d(‘S0107:’) debug tags from enterDrawMode and exitDrawMode
2026-05-09 03:49:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0107 Phase 05 Step 5.2
Remove Timber.d(‘S0107:’) debug tag from onDrawOverlayClicked
2026-05-09 03:49:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerImageLoadingCallbackImpl.kt
S0107 Phase 05 Step 5.2
Remove Timber.d(‘S0107:’) debug tag from onStaticImageLoaded + remove unused Timber import
2026-05-09 03:49:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0107 Phase 05 Step 5.2
Remove Timber.d(‘S0107: overlay merged’) debug tag from save callback
2026-05-09 03:52:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Replaced hardcoded browse error copy with resource-backed fallback mapping for S0118
2026-05-09 03:52:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortFilterManager.kt
BrowseSortFilterManager
Moved applyFilter primary error copy to resource-backed friendly browse message
2026-05-09 03:52:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseLoadingAuxManager
Replaced generic browse loading title/body copy with resource-backed friendly message
2026-05-09 04:00:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
S0118: replaced PDF export raw fallback toast detail with generic localized copy and kept exception detail in Timber
2026-05-09 04:00:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoLaunchManager.kt
FileInfoLaunchManager
S0118: replaced raw download/open failure toast detail with localized generic copy
2026-05-09 04:00:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/RenameDialog.kt
RenameDialog
S0118: replaced raw rename failure toast aggregation/detail with generic localized copy and Timber logging
2026-05-09 04:00:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LyricsManager.kt
LyricsManager
S0118: replaced generic lyrics failure raw message with localized friendly fallback
2026-05-09 04:08:22
PLAN/S0126_image-editor-output-autoname.md
spec
Add strategic spec S0126 for image editor output auto-naming unification
2026-05-09 04:11:10
PLAN/S0126_image-editor-output-autoname/INDEX.md
spec-tech
Create tactical plan for S0126
2026-05-09 04:11:10
PLAN/S0126_image-editor-output-autoname/PHASE_01__naming-generator.md
spec-tech
Phase 01: naming-generator
2026-05-09 04:11:10
PLAN/S0126_image-editor-output-autoname/PHASE_02__wire-into-managers.md
spec-tech
Phase 02: wire-into-managers
2026-05-09 04:11:10
PLAN/S0126_image-editor-output-autoname/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-09 04:11:10
PLAN/S0126_image-editor-output-autoname.md
spec-tech
Status -> Tactical
2026-05-09 04:12:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageEditorFileNamer.kt
S0126
Phase 01: add ImageEditorFileNamer utility
2026-05-09 04:15:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0107
Fix eraser strokeWidth 24f→48f; add filled GradientDrawable (OVAL, solid color, white stroke) backgrounds for color swatches in bindToolbar()
2026-05-09 04:15:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0107
Fix overlay coordinate mismatch: read photoView.displayRect before coroutine, crop+scale overlay to image region via cropOverlayToImage(); fix missing file extension for extensionless source files
2026-05-09 04:16:11
PLAN/S0127_image-player-draw-crop-immersive.md
spec
Add strategic spec S0127: image-player draw/crop immersive mode
2026-05-09 04:20:29
PLAN/S0118_friendly-ui-copy-revision.md
spec-fix
Annotate Last Audit (S0118): 0 auto-fixed, 3 follow-ups (all require non-mechanical method-body edits)
2026-05-09 04:20:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
S0126
Phase 02: use ImageEditorFileNamer for crop/compress naming
2026-05-09 04:21:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0126
Phase 02: use ImageEditorFileNamer for draw naming
2026-05-09 04:41:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt
PermissionsManagementFragment
Wrap startActivity in launchSpecialGrantSettings with try-catch for ActivityNotFoundException; add Timber.d trace and Timber.e fallback log
2026-05-09 04:47:41
gradle.properties
Gradle
Cap workers.max=8 – Android single-module build saturates at 4-6 workers; was spawning 20 idle threads (logical CPU count)
2026-05-09 04:53:48
app_v2/src/main/AndroidManifest.xml
TV device support
Override implicit hardware.microphone requirement caused by RECORD_AUDIO permission to restore Android TV eligibility on Google Play (regression: 2879 -> 9)
2026-05-09 13:05:36
docs/FEATURES.md
S0126
Phase 03: update output filename examples
2026-05-09 13:05:36
docs/FEATURES_RU.md
S0126
Phase 03: update output filename examples (RU)
2026-05-09 13:05:36
docs/FEATURES_UK.md
S0126
Phase 03: update output filename examples (UK)
2026-05-09 13:05:36
dev/CATALOG/app_v2.jsonl
S0126
Phase 03: regen catalog after ImageEditorFileNamer
2026-05-09 13:05:36
dev/CATALOG/app_v2.md
S0126
Phase 03: render catalog markdown
2026-05-09 13:06:20
PLAN/S0126_image-editor-output-autoname.md
S0126
Status -> Implemented (BlockNeedUserTest pending on-device verification)
2026-05-09 13:11:10
PLAN/S0125_settings-activity-revision.md
S0125
Added §12 with three follow-up tasks: text audit in 30-line batches, communication policy doc, wiring policy into CLAUDE.md and skills
2026-05-09 13:18:55
PLAN/S0127_image-player-draw-crop-immersive/INDEX.md
spec-tech
Create tactical plan for S0127
2026-05-09 13:18:55
PLAN/S0127_image-player-draw-crop-immersive/PHASE_01__state-foundation.md
spec-tech
Phase 01: state foundation
2026-05-09 13:18:55
PLAN/S0127_image-player-draw-crop-immersive/PHASE_02__edit-mode-callbacks.md
spec-tech
Phase 02: edit-mode callbacks
2026-05-09 13:18:56
PLAN/S0127_image-player-draw-crop-immersive/PHASE_03__immersive-controller.md
spec-tech
Phase 03: immersive controller
2026-05-09 13:18:56
PLAN/S0127_image-player-draw-crop-immersive/PHASE_04__crop-fullscreen-override.md
spec-tech
Phase 04: crop-to-fullscreen override
2026-05-09 13:18:56
PLAN/S0127_image-player-draw-crop-immersive/PHASE_05__pinch-passthrough.md
spec-tech
Phase 05: pinch passthrough
2026-05-09 13:18:56
PLAN/S0127_image-player-draw-crop-immersive/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs and catalog cleanup
2026-05-09 13:18:57
PLAN/S0127_image-player-draw-crop-immersive.md
spec-tech
Status -> Tactical
2026-05-09 13:19:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/state/PlayerImageEditMode.kt
S0127
New enum PlayerImageEditMode (NONE/DRAW/CROP)
2026-05-09 13:20:04
PLAN/S0118_friendly-ui-copy-revision.md
S0118
added section 13 with three follow-up tasks: parallel 30-line batch rewrite, communication policy doc in docs/, enforcement of policy in CLAUDE.md rules and UI-related skills
2026-05-09 13:20:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0127
Add imageEditMode field and setImageEditMode() to PlayerState/ViewModel
2026-05-09 13:23:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0127
Add editModeCallback hook for immersive mode
2026-05-09 13:23:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
S0127
Add editModeCallback hook for immersive mode
2026-05-09 13:25:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0127
Add setupEditModeCallbacks() wiring Draw+Crop edit mode to ViewModel
2026-05-09 13:25:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0127
Invoke setupEditModeCallbacks after Draw overlay setup
2026-05-09 13:27:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerImmersiveModeManager.kt
S0127
New PlayerImmersiveModeManager: hides system bars and command panels for image editor immersive modes
2026-05-09 13:28:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0127
Add lateinit immersiveModeManager
2026-05-09 13:28:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0127
Instantiate PlayerImmersiveModeManager
2026-05-09 13:29:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt
S0127
Observe imageEditMode flow and route to PlayerImmersiveModeManager
2026-05-09 13:30:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0127
Reset stale imageEditMode to NONE in setupEditModeCallbacks
2026-05-09 13:31:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt
S0127
Force FIT_CENTER scale type on PhotoView/ImageView when entering crop mode
2026-05-09 13:33:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
S0127
Suppress cropImagesToFullscreen when imageEditMode == CROP
2026-05-09 13:33:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerImageLoadingCallbackImpl.kt
S0127
Override isImageCropEditMode() in callback impl
2026-05-09 13:35:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/views/CropOverlayView.kt
S0127
Add pinchPassthroughTarget for multi-pointer routing to underlying PhotoView
2026-05-09 13:35:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt
S0127
Wire CropOverlayView.pinchPassthroughTarget to photoView
2026-05-09 13:38:10
docs/FEATURES.md
S0127
Add immersive Draw/Crop bullet
2026-05-09 13:38:11
docs/FEATURES_RU.md
S0127
Add immersive Draw/Crop bullet (RU)
2026-05-09 13:38:11
docs/FEATURES_UK.md
S0127
Add immersive Draw/Crop bullet (UK)
2026-05-09 13:39:17
dev/CATALOG/app_v2.jsonl
S0127
Catalog scan + role/status for new classes
2026-05-09 13:39:18
dev/CATALOG/app_v2.md
S0127
Catalog render after S0127 implementation
2026-05-09 13:41:05
PLAN/S0127_image-player-draw-crop-immersive.md
S0127
Status -> Implemented; awaiting on-device verification
2026-05-09 13:50:51
app_v2/src/main/res/values/strings.xml
S0118
added 15 new keys for browse error details labels and PlaybackHealthHelper MediaPlayer fallback diagnostics
2026-05-09 13:50:55
app_v2/src/main/res/values-ru/strings.xml
S0118
mirrored RU translations for new browse error labels and PlaybackHealthHelper diagnostics keys
2026-05-09 13:50:59
app_v2/src/main/res/values-uk/strings.xml
S0118
mirrored UK translations for new browse error labels and PlaybackHealthHelper diagnostics keys
2026-05-09 13:51:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortFilterManager.kt
S0118
replaced hardcoded Error/Stack trace labels in applyFilter catch block with R.string lookup; added Context constructor param and S0118 Timber tag
2026-05-09 13:51:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
S0118
replaced hardcoded Resource/Path/Type/Error/Stack trace labels in handleLoadingError details builder with R.string lookup; added S0118 Timber tag
2026-05-09 13:51:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackHealthHelper.kt
S0118
replaced hardcoded English MediaPlayer fallback diagnostics (toast, dialog header, error type, 4 issue blocks, default block, file label, fallback-failed) with R.string lookup; added S0118 Timber tag
2026-05-09 13:51:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
S0118
passed context to BrowseSortFilterManager constructor for R.string access in localized error details
2026-05-09 13:54:22
PLAN/S0120_memory-growth-endurance-scenarios.md
spec-update
Sync S0120 strategic markdown status with verified catalog state
2026-05-09 13:54:23
PLAN/S0120_memory-growth-endurance-scenarios/INDEX.md
spec-update
Sync S0120 tactical index status with verified catalog state
2026-05-09 13:54:23
PLAN/S0120_memory-growth-endurance-scenarios/phase-4-runbook.md
spec-update
Mark S0120 runbook phase as authored and done
2026-05-09 14:02:11
PLAN/S0118_friendly-ui-copy-revision.md
spec-test-device
Device run on emulator-5554 -> PASS/FAIL/SKIPPED/INCONCLUSIVE 5/0/5/3; build 2.60.5091.341-DEBUG verified, Optimize Cache Size dialog tone confirmed; 6 manual items still need real-device driving
2026-05-09 14:18:01
app_v2/src/main/res/layout-land/activity_player_unified.xml
PlayerActivity landscape
Add photoDualSurfaceContainer+photoViewSurfaceB to landscape layout - missing caused NPE in PlayerManagerInitializer.initCoreCoordination:194 on landscape launch (S0107)
2026-05-09 14:20:00
PLAN/S0118_friendly-ui-copy-revision.md
S0118
Mark all 3 FAIL action items as RESOLVED 2026-05-09
2026-05-09 14:20:00
docs/COMMUNICATION_POLICY.md
communication-policy
Create canonical UI communication policy (EN)
2026-05-09 14:20:00
docs/COMMUNICATION_POLICY_RU.md
communication-policy
Create UI communication policy mirror (RU)
2026-05-09 14:20:00
docs/COMMUNICATION_POLICY_UK.md
communication-policy
Create UI communication policy mirror (UK)
2026-05-09 14:20:05
CLAUDE.md
UI Communication Policy
Add UI Communication Policy section referencing docs/COMMUNICATION_POLICY.md
2026-05-09 14:20:05
.claude/commands/quick.md
quick
Add communication policy check to Step 3
2026-05-09 14:20:05
.claude/commands/doc-update.md
doc-update
Add C0 communication policy tone check to string resources section
2026-05-09 14:20:05
.claude/commands/spec-dev.md
spec-dev
Add hard stop 12a for communication policy violations in user strings
2026-05-09 14:20:06
.claude/commands/spec.md
spec
Add communication policy note to step 5
2026-05-09 14:20:06
.claude/commands/spec-tech.md
spec-tech
Add communication policy gate to step 5 phase writing
2026-05-09 14:20:32
docs/DOCS_MAP.md
DOCS_MAP
Add UI Communication Policy section with EN/RU/UK entries
2026-05-09 14:45:39
PLAN/S0129_bugfix-landscape-overflow-commands.md
spec
Add strategic spec S0129 for bugfix-landscape-overflow-commands
2026-05-09 14:45:44
PLAN/S0128_activity-catalog.md
spec
Add strategic spec S0128 for activity-catalog
2026-05-09 14:47:50
PLAN/S0129_bugfix-landscape-overflow-commands/INDEX.md
spec-tech
Create tactical plan for S0129
2026-05-09 14:47:50
PLAN/S0129_bugfix-landscape-overflow-commands/PHASE_01__overflow-fix.md
spec-tech
Phase 01: overflow-fix
2026-05-09 14:47:51
PLAN/S0129_bugfix-landscape-overflow-commands/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-09 14:47:51
PLAN/S0129_bugfix-landscape-overflow-commands.md
spec-tech
Status → Tactical
2026-05-09 14:51:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0129
Expose overflow-only commands in landscape mode via btnOverflowMenu
2026-05-09 14:52:25
PLAN/S0128_activity-catalog/INDEX.md
spec-tech
Create tactical plan for S0128
2026-05-09 14:52:25
PLAN/S0128_activity-catalog/PHASE_01__schema-foundation.md
spec-tech
Phase 01: schema-foundation
2026-05-09 14:52:25
PLAN/S0128_activity-catalog/PHASE_02__scan-script.md
spec-tech
Phase 02: scan-script
2026-05-09 14:52:25
PLAN/S0128_activity-catalog/PHASE_03__query-render-set.md
spec-tech
Phase 03: query-render-set
2026-05-09 14:52:26
PLAN/S0128_activity-catalog/PHASE_04__initial-population.md
spec-tech
Phase 04: initial-population
2026-05-09 14:52:26
PLAN/S0128_activity-catalog/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-09 14:52:26
PLAN/S0128_activity-catalog.md
spec-tech
Status Tactical
2026-05-09 14:52:33
dev/CATALOG/app_v2.jsonl
catalog
Regenerate after S0129 CommandPanelController change
2026-05-09 14:53:23
dev/ACTIVITY_CATALOG/scripts/.gitkeep
spec-dev S0128.01.1
Create ACTIVITY_CATALOG directory structure
2026-05-09 14:54:04
dev/ACTIVITY_CATALOG/SCHEMA.md
spec-dev S0128.01.2
Write ACTIVITY_CATALOG JSONL schema definition
2026-05-09 14:57:55
dev/ACTIVITY_CATALOG/scripts/scan.ps1
spec-dev S0128.02
Write scan.ps1 for ACTIVITY_CATALOG
2026-05-09 15:00:48
dev/ACTIVITY_CATALOG/scripts/query.ps1
spec-dev S0128.03.1
Write query.ps1 for ACTIVITY_CATALOG
2026-05-09 15:00:48
dev/ACTIVITY_CATALOG/scripts/render.ps1
spec-dev S0128.03.2
Write render.ps1 for ACTIVITY_CATALOG
2026-05-09 15:00:48
dev/ACTIVITY_CATALOG/scripts/set.ps1
spec-dev S0128.03.3
Write set.ps1 for ACTIVITY_CATALOG
2026-05-09 15:03:54
dev/ACTIVITY_CATALOG/app_v2.jsonl
spec-dev S0128.04
Initial activity data for app_v2
2026-05-09 15:03:54
dev/ACTIVITY_CATALOG/wear.jsonl
spec-dev S0128.04
Initial activity data for wear
2026-05-09 15:03:55
dev/ACTIVITY_CATALOG/app_v2.md
spec-dev S0128.04
Generated render for app_v2
2026-05-09 15:03:55
dev/ACTIVITY_CATALOG/wear.md
spec-dev S0128.04
Generated render for wear
2026-05-09 15:03:55
dev/ACTIVITY_CATALOG/scripts/set.ps1
spec-dev S0128.04
Fix exact-match logic in set.ps1
2026-05-09 15:03:55
dev/ACTIVITY_CATALOG/scripts/render.ps1
spec-dev S0128.04
Fix footer variable in render.ps1
2026-05-09 15:05:20
dev/ACTIVITY_CATALOG/README.md
spec-dev S0128.05.1
Write ACTIVITY_CATALOG README
2026-05-09 15:05:21
dev/PROJECT_OPERATIONS_INDEX.md
spec-dev S0128.05.2
Add ACTIVITY_CATALOG reference to project index
2026-05-09 15:09:49
PLAN/S0128_activity-catalog.md
spec-check
Audit S0128 -> Verified; PASS 19/WARN 0/FAIL 0
2026-05-09 15:09:49
dev/ACTIVITY_CATALOG/scripts/scan.ps1
spec-check
Fix wear noFlavors (always empty for wear module)
2026-05-09 15:09:50
dev/ACTIVITY_CATALOG/wear.jsonl
spec-check
Rescan wear after noFlavors fix
2026-05-09 15:09:50
dev/ACTIVITY_CATALOG/wear.md
spec-check
Re-render wear after noFlavors fix
2026-05-09 15:44:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Fix: Back press from permission screen (fromWelcome mode) now calls completeWelcomeFlow() instead of finishing root activity; Back on slides minimises with moveTaskToBack(true)
2026-05-09 16:19:47
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0129
Fix btnOverflowMenu contentDescription null in landscape layout
2026-05-09 16:20:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0129
Remove S0129 debug Timber tag on Verified transition
2026-05-09 16:20:39
PLAN/S0129_bugfix-landscape-overflow-commands.md
spec-check
Audit S0129 → Verified; PASS 12/WARN 0/FAIL 0
2026-05-09 16:30:20
PLAN/S0130_virtual-resource-file-operations.md
spec
Add strategic spec S0130 for virtual-resource-file-operations
2026-05-09 16:36:54
PLAN/S0130_virtual-resource-file-operations/INDEX.md
spec-tech
Create tactical plan for S0130
2026-05-09 16:36:54
PLAN/S0130_virtual-resource-file-operations/PHASE_01__util-and-provisioning.md
spec-tech
Phase 01: util-and-provisioning
2026-05-09 16:36:54
PLAN/S0130_virtual-resource-file-operations/PHASE_02__startup-migration.md
spec-tech
Phase 02: startup-migration
2026-05-09 16:36:54
PLAN/S0130_virtual-resource-file-operations/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-09 16:36:54
PLAN/S0130_virtual-resource-file-operations.md
spec-tech
Status -> Tactical
2026-05-09 16:37:38
app_v2/src/main/java/com/sza/fastmediasorter/util/VirtualPathUtils.kt
S0130
Step 01.1: add camera_photos to isAggregateVirtualPath
2026-05-09 16:38:09
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
S0130
Step 01.2: set isWritable from isAggregateVirtualPath in provisioning
2026-05-09 16:38:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceVirtualCoordinator.kt
S0130
Step 01.3: set isWritable from isAggregateVirtualPath in user-add virtual resource flow
2026-05-09 16:39:26
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
S0130
Step 01.4: add S0130 Timber debug tag to createVirtualResource
2026-05-09 16:39:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceVirtualCoordinator.kt
S0130
Step 01.4: add S0130 Timber debug tag to buildVirtualResource
2026-05-09 16:42:15
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
S0130
Step 02.1: add fixVirtualAggregateWritableFlag startup fixer
2026-05-09 16:42:37
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
S0130
Step 02.2: call fixVirtualAggregateWritableFlag from initialize
2026-05-09 16:45:31
dev/CATALOG/app_v2.jsonl
S0130
Step 03.1: catalog regen after VirtualPathUtils and AppStartupInitializer changes
2026-05-09 16:46:03
app_v2/src/main/java/com/sza/fastmediasorter/util/VirtualPathUtils.kt
S0130
Phase 03 final dev log: VirtualPathUtils (isAggregateVirtualPath + camera_photos)
2026-05-09 16:46:03
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
S0130
Phase 03 final dev log: isWritable from isAggregateVirtualPath
2026-05-09 16:46:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceVirtualCoordinator.kt
S0130
Phase 03 final dev log: isWritable from isAggregateVirtualPath
2026-05-09 16:46:03
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
S0130
Phase 03 final dev log: fixVirtualAggregateWritableFlag
2026-05-09 16:49:42
PLAN/S0130_virtual-resource-file-operations.md
spec-check
Audit S0130 -> Partial; PASS/WARN/FAIL 17/1/0
2026-05-09 16:50:45
PLAN/S0130_virtual-resource-file-operations.md
spec-fix
Annotate Last Audit (S0130): WARN Step 01.4 -> [FIXED]
2026-05-09 16:50:45
PLAN/S0130_virtual-resource-file-operations/PHASE_01__util-and-provisioning.md
spec-fix
Fix Step 01.4 predicate: exactly twice -> at least twice
2026-05-09 16:52:07
PLAN/S0130_virtual-resource-file-operations.md
spec-check
Audit S0130 -> Verified; PASS/WARN/FAIL 18/0/0
2026-05-09 16:57:46
dev/TASK_2026-05-09_S0117_nolegal_implementation.md
task-definition
Document S0117 implementation entry conditions and proposed defaults
2026-05-09 16:57:47
dev/TASK_2026-05-09_S0117_nolegal_implementation.md
task-definition
Document S0117 implementation entry conditions and proposed defaults
2026-05-09 17:20:58
app_v2/build.gradle.kts
build.gradle.kts
Add noLegal flavor, source set wiring, and isolated NewPipe dependency scope for S0117
2026-05-09 17:23:14
PLAN/S0117_url-media-downloader-nolegal-flavor.md
spec-tech
Advance S0117 strategic spec to Tactical and close implementation defaults
2026-05-09 17:23:14
PLAN/S0117_url-media-downloader-nolegal-flavor/INDEX.md
spec-tech
Create tactical plan for S0117
2026-05-09 17:23:14
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_01__flavor-foundation.md
spec-tech
Capture completed foundation phase for S0117
2026-05-09 17:23:14
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_02__site-resolver.md
spec-tech
Create S0117 phase 02 site resolver plan
2026-05-09 17:23:14
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_03__batch-coordinator.md
spec-tech
Create S0117 phase 03 batch coordinator plan
2026-05-09 17:23:14
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_04__license-ui.md
spec-tech
Create S0117 phase 04 license UI plan
2026-05-09 17:23:14
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_05__docs-catalog-cleanup.md
spec-tech
Create S0117 phase 05 docs and catalog cleanup plan
2026-05-09 17:34:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager.resolveDestinationPath
S0106: fix ENOENT crash when saving crop from virtual resource - fallback to Downloads for virtual:// paths
2026-05-09 17:36:42
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/UrlExtractionStrategy.kt
UrlExtractionStrategy
Add S0117 batch contract for site-resolved child URLs
2026-05-09 17:36:42
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistry.kt
LinkExtractionRegistry
Prioritize S0117 site resolver ahead of generic strategies
2026-05-09 17:36:42
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
Add S0117 sequential batch execution and summary results
2026-05-09 17:36:42
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/NewPipeOkHttpDownloader.kt
NewPipeOkHttpDownloader
Bridge NewPipe extractor requests onto the app OkHttp stack
2026-05-09 17:36:42
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/NewPipeSiteExtractionStrategy.kt
NewPipeSiteExtractionStrategy
Add S0117 noLegal NewPipe-backed site resolver for streams and batches
2026-05-09 17:36:42
app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalLinkDownloadModule.kt
NoLegalLinkDownloadModule
Bind S0117 site resolver only in the noLegal flavor
2026-05-09 17:36:42
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistryTest.kt
LinkExtractionRegistryTest
Cover S0117 site-first strategy ordering
2026-05-09 17:36:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadProgressDialog.kt
LinkAutoDownloadProgressDialog
Show S0117 batch item progress state
2026-05-09 17:36:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
Project S0117 batch summary into toast and dialog UX
2026-05-09 17:36:42
app_v2/src/test/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenterTest.kt
LinkAutoDownloadResultPresenterTest
Add S0117 batch presenter coverage
2026-05-09 17:36:42
app_v2/src/main/res/values/strings.xml
strings.xml
Add S0117 batch and license UI strings
2026-05-09 17:36:42
app_v2/src/main/res/values-ru/strings.xml
strings.xml
Add Russian S0117 batch and license UI strings
2026-05-09 17:36:42
app_v2/src/main/res/values-uk/strings.xml
strings.xml
Add Ukrainian S0117 batch and license UI strings
2026-05-09 17:36:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OpenSourceLicensesFragment.kt
OpenSourceLicensesFragment
Gate S0117 GPL notice card to the noLegal flavor
2026-05-09 17:36:42
app_v2/src/main/res/layout/fragment_open_source_licenses.xml
fragment_open_source_licenses.xml
Add S0117 noLegal GPL notice card
2026-05-09 17:39:58
PLAN/S0117_url-media-downloader-nolegal-flavor.md
spec-dev
Mark S0117 strategic spec Implemented after code landing
2026-05-09 17:39:58
PLAN/S0117_url-media-downloader-nolegal-flavor/INDEX.md
spec-dev
Close S0117 tactical index after phases 02-05 completion
2026-05-09 17:39:58
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_02__site-resolver.md
spec-dev
Mark S0117 phase 02 complete
2026-05-09 17:39:58
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_03__batch-coordinator.md
spec-dev
Mark S0117 phase 03 complete
2026-05-09 17:39:58
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_04__license-ui.md
spec-dev
Mark S0117 phase 04 complete
2026-05-09 17:39:58
PLAN/S0117_url-media-downloader-nolegal-flavor/PHASE_05__docs-catalog-cleanup.md
spec-dev
Mark S0117 phase 05 complete
2026-05-09 17:39:58
dev/CATALOG/app_v2.jsonl
catalog
Regenerate app_v2 catalog after S0117 Kotlin changes
2026-05-09 17:39:58
dev/CATALOG/app_v2.md
catalog
Render app_v2 catalog after S0117 Kotlin changes
2026-05-09 17:40:41
PLAN/S0106_player-image-crop.md
spec-fix
Annotate Last Audit (S0106): FOLLOW-UP LOC warn; catalog sync; virtual-path bug fix noted
2026-05-09 17:40:41
dev/CATALOG/app_v2.jsonl
catalog
S0106 spec-fix: catalog scan+render after ImageCropManager.resolveDestinationPath fix
2026-05-09 17:43:43
PLAN/S0106_player-image-crop.md
spec-check
Audit S0106 → Partial; PASS/WARN/FAIL 49/1/0; PlayerActivity.kt 1223 LOC over budget
2026-05-09 17:49:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt
S0106 CROP in-place
After Crop (overwrite) success: reload image in player via reloadCurrentImage() instead of Toast only
2026-05-09 18:20:00
PLAN/S0131_bugfix-pdf-null-bitmap.md
spec
Add strategic spec S0131 for bugfix-pdf-null-bitmap
2026-05-09 18:23:53
PLAN/S0131_bugfix-pdf-null-bitmap/INDEX.md
spec-tech
Create tactical plan for S0131
2026-05-09 18:23:53
PLAN/S0131_bugfix-pdf-null-bitmap/PHASE_01__teardown-guard.md
spec-tech
Phase 01: teardown-guard
2026-05-09 18:23:53
PLAN/S0131_bugfix-pdf-null-bitmap/PHASE_02__adaptive-heap-threshold.md
spec-tech
Phase 02: adaptive-heap-threshold
2026-05-09 18:23:53
PLAN/S0131_bugfix-pdf-null-bitmap/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-09 18:23:53
PLAN/S0131_bugfix-pdf-null-bitmap.md
spec-tech
Status -> Tactical
2026-05-09 18:25:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
bugfix
S0131 step 1.2: replace lazy-viewer try/catch guards with backing-field null checks in teardown
2026-05-09 18:29:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImagePreloadHelper.kt
bugfix
S0131 step 2.1: replace fixed 20MB native heap threshold with adaptive relative+absolute AND-logic check
2026-05-09 18:31:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
bugfix
S0131: guard lazy viewer-manager accesses in teardown with backing-field null checks
2026-05-09 18:31:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImagePreloadHelper.kt
bugfix
S0131: replace fixed 20MB native heap threshold with adaptive relative+absolute check
2026-05-09 18:31:56
dev/CATALOG/app_v2.jsonl
catalog
S0131: regenerate catalog after PlayerLifecycleManager + ImagePreloadHelper edits
2026-05-09 18:32:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt
PermissionsManagementFragment
Fix: use ActivityResultLauncher for special-permission settings screens instead of startActivity() to prevent spurious back event on API 34+ predictive back; in fromWelcome mode auto-proceed via onWelcomeComplete() when user returns from system settings
2026-05-09 18:35:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImagePreloadHelper.kt
ImagePreloadHelper
Aligned adaptive native heap preload threshold with the larger relative/absolute floor for S0131
2026-05-09 18:51:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager.decodeRegion
Fix crash: re-clamp crop rect to actual BitmapRegionDecoder dims before decode; detect degenerate rects (EXIF-rotation collapse) and throw user-friendly error instead of IllegalArgumentException from native layer
2026-05-09 19:05:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseLoadingAuxManager
Removed temporary S0118 verification Timber tag
2026-05-09 19:05:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortFilterManager.kt
BrowseSortFilterManager
Removed temporary S0118 verification Timber tag
2026-05-09 19:05:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackHealthHelper.kt
PlaybackHealthHelper
Removed temporary S0118 verification Timber tag
2026-05-09 19:09:41
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Restore S0118 strategic spec to Verified after follow-up static audit
2026-05-09 19:09:42
PLAN/S0118_friendly-ui-copy-revision/INDEX.md
spec-update
Reclose S0118 completion gate after follow-up static audit
2026-05-09 19:09:43
PLAN/S0118_friendly-ui-copy-revision/PHASE_07__docs-catalog-cleanup.md
spec-update
Record restoring verified pass for S0118 final audit step
2026-05-09 19:10:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
S0106
Fix crop coordinate mismatch on network files: ensureLocalSource now precedes mapScreenRectToOriginal in performCrop and performCropToFile; srcFile.path passed to both mapScreenRectToOriginal and readExifDegrees so BitmapFactory reads real image dimensions instead of falling back to view dimensions
2026-05-09 19:18:20
PLAN/S0132_vr-quest3-epic-pending-verification.md
spec-catalog
VR Quest 3 revision: created epic ticket S0132 consolidating 14 unverified VR tickets (S0006/S0008/S0009/S0012/S0014/S0019/S0026/S0030/S0032/S0038/S0041/S0065/S0078/S0080); archived all 14 source tickets to temp/done/
2026-05-09 19:21:56
.github/prompts/spec.prompt.md
spec.prompt.md
Add communication policy gate for user-visible string specs
2026-05-09 19:21:57
.github/prompts/spec-tech.prompt.md
spec-tech.prompt.md
Add communication policy gate for tactical steps with user-visible strings
2026-05-09 19:21:58
.github/prompts/spec-dev.prompt.md
spec-dev.prompt.md
Enforce communication policy checks during tactical execution
2026-05-09 19:21:58
.github/prompts/doc-update.prompt.md
doc-update.prompt.md
Add UI communication policy tone-check step for user-visible strings
2026-05-09 19:21:59
.github/prompts/ui-clarify.prompt.md
ui-clarify.prompt.md
Require communication policy as wording source for UI clarification
2026-05-09 19:22:00
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Reopen S0118 to BlockNeedUserTest after finding missing Copilot prompt-layer sync
2026-05-09 19:22:02
PLAN/S0118_friendly-ui-copy-revision/INDEX.md
spec-update
Reopen S0118 completion gate and align Phase 07 prompt-layer follow-up
2026-05-09 19:22:03
PLAN/S0118_friendly-ui-copy-revision/PHASE_07__docs-catalog-cleanup.md
spec-update
Add Step 07.5 for Copilot prompt-layer communication-policy sync
2026-05-09 19:36:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
S0106
Fix: resolveDestinationPath corrupted SMB URIs via File() and copyToDestination missed canonical smb:/ form (single slash) - caused ENOENT when saving cropped/compressed copies to network shares
2026-05-09 19:55:58
PLAN/S0133_accept-shared-files-default-on.md
spec
Add strategic spec S0133 for ad-hoc accept-shared-files-default-on
2026-05-09 19:59:27
PLAN/S0133_accept-shared-files-default-on/INDEX.md
spec-tech
Create tactical plan for S0133
2026-05-09 19:59:27
PLAN/S0133_accept-shared-files-default-on/PHASE_01__default-flip.md
spec-tech
Phase 01: default-flip
2026-05-09 19:59:27
PLAN/S0133_accept-shared-files-default-on/PHASE_02__app-bootstrap-sync.md
spec-tech
Phase 02: app-bootstrap-sync
2026-05-09 19:59:27
PLAN/S0133_accept-shared-files-default-on/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-09 19:59:28
PLAN/S0133_accept-shared-files-default-on.md
spec-tech
Status -> Tactical
2026-05-09 20:09:33
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Resume S0118 as In Progress and continue 30-string batch rewrites without BlockNeedUserTest gate
2026-05-09 20:09:34
app_v2/src/main/res/values/strings.xml
S0118 batch 01
Rewrite first 30 copy/move/rename/delete user-visible strings to communication-policy tone
2026-05-09 20:09:35
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 01
Rewrite first 30 copy/move/rename/delete user-visible strings to communication-policy tone
2026-05-09 20:09:36
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 01
Rewrite first 30 copy/move/rename/delete user-visible strings to communication-policy tone
2026-05-09 20:09:37
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/BaseFileOperationHandler.kt
BaseFileOperationHandler
Stop delete all-failed result from exposing raw technical details as the primary user message
2026-05-09 20:19:26
app_v2/src/main/res/values/strings.xml
S0118 batch 02
Rewrite late player and file-operation formatter strings to communication-policy tone
2026-05-09 20:19:27
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 02
Rewrite late player and file-operation formatter strings to communication-policy tone
2026-05-09 20:19:28
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 02
Rewrite late player and file-operation formatter strings to communication-policy tone
2026-05-09 20:19:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
FileOperationDestinationDialog
Replace hardcoded partial/failure copy and route raw transfer details to optional detailed surface
2026-05-09 20:19:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
Stop player file-operation flows from exposing raw transport errors as the primary message
2026-05-09 20:20:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteManager.kt
BrowseDeleteManager
Replace hardcoded browse delete error headlines with localized S0118 copy and keep delete details secondary
2026-05-09 20:21:17
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0133
Default-ON for acceptSharedFiles (was false)
2026-05-09 20:22:19
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0133
DataStore read fallback for acceptSharedFiles -> true (default ON)
2026-05-09 20:22:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOpenManager.kt
BrowseFileOpenManager
Replace hardcoded browse file-not-found copy with localized S0118 headline and secondary path details
2026-05-09 20:24:03
app_v2/src/main/java/com/sza/fastmediasorter/core/init/DefaultPlayerStateBootstrapper.kt
S0133
Idempotent system-component-state bootstrap on every process start
2026-05-09 20:25:15
app_v2/src/main/res/values/strings.xml
S0118 batch 03
Add localized folder-operation fallback strings for browse create/rename errors
2026-05-09 20:25:16
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 03
Add localized folder-operation fallback strings for browse create/rename errors
2026-05-09 20:25:17
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 03
Add localized folder-operation fallback strings for browse create/rename errors
2026-05-09 20:25:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDirectoryOpsManager.kt
BrowseDirectoryOpsManager
Replace hardcoded browse folder create/rename fallback errors with localized S0118 copy
2026-05-09 20:25:22
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
S0133
Wire DefaultPlayerStateBootstrapper into onCreate
2026-05-09 20:29:17
app_v2/src/main/res/values/strings.xml
S0118 batch 04
Add browse error strings for localized friendly primary copy and technical secondary details
2026-05-09 20:29:18
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 04
Add browse error strings for localized friendly primary copy and technical secondary details
2026-05-09 20:29:19
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 04
Add browse error strings for localized friendly primary copy and technical secondary details
2026-05-09 20:29:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDirectoryOpsManager.kt
BrowseDirectoryOpsManager
Move folder create/rename raw exception text into secondary browse error details
2026-05-09 20:29:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt
BrowseNavigationManager
Replace hardcoded browse folder-empty and load-folder messages with localized resource-backed copy
2026-05-09 20:29:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt
BrowseResourceLoadManager
Localize browse resource-load errors and move metadata to secondary details
2026-05-09 20:29:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceStateManager.kt
BrowseResourceStateManager
Replace hardcoded favorite/destination browse errors with friendly localized primary copy
2026-05-09 20:29:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Pass application context to browse managers for localized S0118 error strings
2026-05-09 20:32:42
app_v2/src/main/res/values/strings.xml
S0118 batch 05
Add restored-filter and video-player throttle browse copy for localized user-facing messages
2026-05-09 20:32:43
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 05
Add restored-filter and video-player throttle browse copy for localized user-facing messages
2026-05-09 20:32:44
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 05
Add restored-filter and video-player throttle browse copy for localized user-facing messages
2026-05-09 20:32:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteManager.kt
BrowseDeleteManager
Replace hardcoded no-files-selected toast with localized resource string
2026-05-09 20:32:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLifecycleSetupManager.kt
BrowseLifecycleSetupManager
Replace restored-filter hardcoded browse toast with localized message
2026-05-09 20:32:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseLoadingAuxManager
Replace hardcoded video-player throttle browse message with localized resource-backed copy
2026-05-09 20:32:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Pass application context to BrowseLifecycleSetupManager for localized S0118 copy
2026-05-09 20:36:33
app_v2/src/main/res/values/strings.xml
S0118 batch 05b
Replace contraction-based EN copy in strings.xml to fix AAPT2 resource compilation
2026-05-09 20:36:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOpenManager.kt
BrowseFileOpenManager
Pass application context into file-open manager for localized browse file-not-found errors
2026-05-09 20:36:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Pass application context to BrowseFileOpenManager after S0118 resource-backed error update
2026-05-09 22:37:25
app_v2/src/main/res/values/strings.xml
S0118 batch 06
Add localized delete-consistency warning and short restored-filter labels for browse flows
2026-05-09 22:37:29
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 06
Add localized delete-consistency warning and short restored-filter labels for browse flows
2026-05-09 22:37:30
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 06
Add localized delete-consistency warning and short restored-filter labels for browse flows
2026-05-09 22:37:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteManager.kt
BrowseDeleteManager
Replace hardcoded delete consistency warning with localized browse message
2026-05-09 22:37:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLifecycleSetupManager.kt
BrowseLifecycleSetupManager
Replace English restored-filter summary labels with short localized strings
2026-05-09 22:42:23
app_v2/src/main/res/values/strings.xml
S0118 batch 07
Convert share failure copy to friendly primary text for browse and player flows
2026-05-09 22:42:24
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 07
Convert share failure copy to friendly primary text for browse and player flows
2026-05-09 22:42:25
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 07
Convert share failure copy to friendly primary text for browse and player flows
2026-05-09 22:42:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
Move raw copy/move/share failure text into secondary details
2026-05-09 22:42:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
Use friendly share failure messages instead of exception text in primary copy
2026-05-09 22:42:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCloudAuthManager.kt
BrowseCloudAuthManager
Remove raw provider error details from browse auth toasts and use cancellation-specific Google copy
2026-05-09 22:44:51
app_v2/src/main/res/values/strings.xml
S0118 batch 08
Add friendly image and GIF load failure copy for player error surface
2026-05-09 22:44:52
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 08
Add friendly image and GIF load failure copy for player error surface
2026-05-09 22:44:53
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 08
Add friendly image and GIF load failure copy for player error surface
2026-05-09 22:44:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Replace raw image and GIF load exception text with resource-backed friendly errors
2026-05-09 22:47:39
app_v2/src/main/res/values/strings.xml
S0118 batch 09
Convert image reload failure copy to friendly primary text
2026-05-09 22:47:39
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 09
Convert image reload failure copy to friendly primary text
2026-05-09 22:47:40
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 09
Convert image reload failure copy to friendly primary text
2026-05-09 22:47:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Move image reload exception text into secondary error details
2026-05-09 22:49:33
app_v2/src/main/res/values/strings.xml
S0118 batch 10
Convert OCR failure copy to friendly primary text
2026-05-09 22:49:34
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 10
Convert OCR failure copy to friendly primary text
2026-05-09 22:49:34
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 10
Convert OCR failure copy to friendly primary text
2026-05-09 22:49:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageOcrManager.kt
ImageOcrManager
Stop formatting OCR exception text into the user-facing error message
2026-05-09 22:51:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubTranslationOverlayHelper.kt
EpubTranslationOverlayHelper
Replace hardcoded EPUB translation failure messages with localized generic copy
2026-05-09 22:53:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerImageTranslationManager.kt
PlayerImageTranslationManager
Replace raw image translation failure text with localized generic copy
2026-05-09 22:55:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt
TranslationManager
Replace raw OCR and translation exception text with localized generic error copy
2026-05-09 23:06:17
app_v2/src/main/java/com/sza/fastmediasorter/core/debug/MemoryEnduranceTracker.kt
MemoryEnduranceTracker
Fix NoSuchMethodError on API <28 by switching Handler.postDelayed(Runnable, Object, long) to HandlerCompat.postDelayed
2026-05-09 23:19:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/BeamAnimationDialog.kt
BeamAnimationDialog
Guard VibrationEffect.createOneShot (API 26+) with SDK_INT check; fall back to deprecated vibrate(long) for legacy@23
2026-05-09 23:19:38
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpFileOperationHandler.kt
SftpFileOperationHandler
Guard requestBatchDeletePermission call with SDK_INT >= R to avoid VerifyError on API < 30
2026-05-09 23:19:42
app_v2/src/main/java/com/sza/fastmediasorter/data/network/FtpFileOperationHandler.kt
FtpFileOperationHandler
Guard requestBatchDeletePermission call with SDK_INT >= R to avoid VerifyError on API < 30
2026-05-09 23:19:46
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperationHandler.kt
SmbFileOperationHandler
Guard requestBatchDeletePermission call with SDK_INT >= R to avoid VerifyError on API < 30
2026-05-09 23:19:50
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
CloudFileOperationHandler
Guard requestBatchDeletePermission call with SDK_INT >= R to avoid VerifyError on API < 30
2026-05-09 23:40:49
PLAN/S0134_widget-picker-and-home-polish.md
spec
Add strategic spec S0134 for widget picker and home screen visual polish (pillars A+B+C)
2026-05-09 23:46:19
PLAN/S0134_widget-picker-and-home-polish/INDEX.md
spec-tech
Create tactical plan for S0134
2026-05-09 23:46:19
PLAN/S0134_widget-picker-and-home-polish/PHASE_01__strings-and-icons.md
spec-tech
Phase 01: strings-and-icons
2026-05-09 23:46:19
PLAN/S0134_widget-picker-and-home-polish/PHASE_02__picker-metadata.md
spec-tech
Phase 02: picker-metadata
2026-05-09 23:46:19
PLAN/S0134_widget-picker-and-home-polish/PHASE_03__adaptive-background.md
spec-tech
Phase 03: adaptive-background
2026-05-09 23:46:20
PLAN/S0134_widget-picker-and-home-polish/PHASE_04__favorites-empty-state.md
spec-tech
Phase 04: favorites-empty-state
2026-05-09 23:46:20
PLAN/S0134_widget-picker-and-home-polish/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-09 23:46:20
PLAN/S0134_widget-picker-and-home-polish.md
spec-tech
Status -> Tactical
2026-05-09 23:53:23
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
SftpDataSource.close
Demote ExoPlayer cancel-induced InterruptedIOException on InputStream close to debug; mark channel broken and restore interrupt flag.
2026-05-10 00:14:39
PLAN/S0135_play-store-listing-optimization.md
spec
Add strategic spec S0135 for Google Play store listing optimization (ASO + designer brief + In-App Review)
2026-05-10 00:16:12
app_v2/src/main/res/values/strings.xml
feature
S0134 step 01.1: add widget_favorites_label and widget_resource_launch_label (EN)
2026-05-10 00:17:14
app_v2/src/main/res/values-ru/strings.xml
feature
S0134 step 01.2: add widget_favorites_label and widget_resource_launch_label (RU)
2026-05-10 00:17:14
app_v2/src/main/res/values-uk/strings.xml
feature
S0134 step 01.2: add widget_favorites_label and widget_resource_launch_label (UK)
2026-05-10 00:17:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDeleteUndoCoordinator.kt
PlayerDeleteUndoCoordinator
Replace hardcoded player delete and undo messages with localized friendly copy
2026-05-10 00:17:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Inject ApplicationContext for localized player delete and undo coordinator messages
2026-05-10 00:17:26
app_v2/src/main/res/values/strings.xml
S0118 batch 11
Localize player delete and undo flow messages
2026-05-10 00:17:27
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 11
Localize player delete and undo flow messages
2026-05-10 00:17:28
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 11
Localize player delete and undo flow messages
2026-05-10 00:18:06
app_v2/src/main/res/drawable/ic_widget_favorites.xml
feature
S0134 step 01.3: add ic_widget_favorites vector chip
2026-05-10 00:18:06
app_v2/src/main/res/drawable/ic_widget_resource_launch.xml
feature
S0134 step 01.3: add ic_widget_resource_launch vector chip
2026-05-10 00:18:07
app_v2/src/main/res/drawable/ic_widget_camera_photos.xml
feature
S0134 step 01.3: add ic_widget_camera_photos vector chip
2026-05-10 00:18:07
app_v2/src/main/res/drawable/ic_widget_random_music.xml
feature
S0134 step 01.3: add ic_widget_random_music vector chip
2026-05-10 00:18:07
app_v2/src/main/res/drawable/ic_widget_continue_reading.xml
feature
S0134 step 01.3: add ic_widget_continue_reading vector chip
2026-05-10 00:19:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Use friendly delete launcher failure copy and preserve throwable details
2026-05-10 00:21:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
Use friendly PDF export failure copy instead of raw exception text
2026-05-10 00:26:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt
PlayerMediaFilesLoader
Use friendly localized copy when initial player file loading fails
2026-05-10 00:26:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Pass ApplicationContext into PlayerMediaFilesLoader for localized failure copy
2026-05-10 00:26:29
app_v2/src/main/res/values/strings.xml
S0118 batch 12
Add friendly player file-list loading failure copy
2026-05-10 00:26:29
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 12
Add friendly player file-list loading failure copy
2026-05-10 00:26:30
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 12
Add friendly player file-list loading failure copy
2026-05-10 00:27:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt
PlayerShareManager
Use friendly external player failure copy instead of raw exception text
2026-05-10 00:27:38
app_v2/src/main/res/values/strings.xml
S0118 batch 13
Rewrite external player open failure copy
2026-05-10 00:27:39
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 13
Rewrite external player open failure copy
2026-05-10 00:27:39
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 13
Rewrite external player open failure copy
2026-05-10 00:28:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
PlayerControlsSetupManager
Use friendly translation error copy for lyrics translation failures
2026-05-10 00:29:26
app_v2/src/main/AndroidManifest.xml
feature
S0134 step 02.1: register CameraPhotos+RandomMusic widget receivers and add label/icon to all 5
2026-05-10 00:30:14
app_v2/src/main/res/xml/widget_favorites_info.xml
feature
S0134 step 02.2: drop previewLayout, keep previewImage only
2026-05-10 00:30:15
app_v2/src/main/res/xml/widget_resource_launch_info.xml
feature
S0134 step 02.2: drop previewLayout, keep previewImage only
2026-05-10 00:30:15
app_v2/src/main/res/xml/widget_camera_photos_info.xml
feature
S0134 step 02.2: drop previewLayout, keep previewImage only
2026-05-10 00:30:15
app_v2/src/main/res/xml/widget_random_music_info.xml
feature
S0134 step 02.2: drop previewLayout, keep previewImage only
2026-05-10 00:30:16
app_v2/src/main/res/xml/widget_continue_reading_info.xml
feature
S0134 step 02.2: drop previewLayout, keep previewImage only
2026-05-10 00:30:53
app_v2/src/main/java/com/sza/fastmediasorter/widget/FavoritesWidgetProvider.kt
feature
S0134 step 02.3: add Timber tag at updateAppWidget entry
2026-05-10 00:33:16
app_v2/src/main/res/drawable/widget_background.xml
feature
S0134 step 03.1: widget background #E6121212 + 1dp stroke + 24dp corners (API 26..30 fallback)
2026-05-10 00:33:16
app_v2/src/main/res/drawable/widget_item_background.xml
feature
S0134 step 03.1: item background contrast #4DFFFFFF + 12dp corners
2026-05-10 00:33:39
vr/audit-instrumentation
diagnostics
Added VR_AUDIT/N (N=1..14) Timber tags across VR stack for on-device verification of S0132 sub-tasks. Free-form pass, no spec ticket.
2026-05-10 00:33:51
app_v2/src/main/res/drawable-v31/widget_background.xml
feature
S0134 step 03.2: Material You widget background for API 31+
2026-05-10 00:33:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Use friendly draw overlay save failure copy instead of raw exception text
2026-05-10 00:34:00
app_v2/src/main/res/values/strings.xml
S0118 batch 14
Add draw overlay save failure copy
2026-05-10 00:34:01
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 14
Add draw overlay save failure copy
2026-05-10 00:34:03
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 14
Add draw overlay save failure copy
2026-05-10 00:34:27
app_v2/src/main/res/values-v31/themes.xml
feature
S0134 step 03.3: declare Widget.FastMediaSorter theme based on Theme.DeviceDefault.DayNight
2026-05-10 00:35:06
app_v2/src/main/res/xml/widget_favorites_info.xml
feature
S0134 step 03.4: link Widget.FastMediaSorter theme
2026-05-10 00:35:06
app_v2/src/main/res/xml/widget_resource_launch_info.xml
feature
S0134 step 03.4: link Widget.FastMediaSorter theme
2026-05-10 00:35:07
app_v2/src/main/res/xml/widget_camera_photos_info.xml
feature
S0134 step 03.4: link Widget.FastMediaSorter theme
2026-05-10 00:35:07
app_v2/src/main/res/xml/widget_random_music_info.xml
feature
S0134 step 03.4: link Widget.FastMediaSorter theme
2026-05-10 00:35:07
app_v2/src/main/res/xml/widget_continue_reading_info.xml
feature
S0134 step 03.4: link Widget.FastMediaSorter theme
2026-05-10 00:35:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Use friendly playback failure copy instead of raw video exception text
2026-05-10 00:38:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Replace raw and hardcoded EPUB viewer errors with localized friendly copy
2026-05-10 00:38:02
app_v2/src/main/res/values/strings.xml
S0118 batch 15
Add friendly EPUB viewer failure and empty-state copy
2026-05-10 00:38:02
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 15
Add friendly EPUB viewer failure and empty-state copy
2026-05-10 00:38:02
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 15
Add friendly EPUB viewer failure and empty-state copy
2026-05-10 00:40:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Replace raw and hardcoded PDF viewer errors with localized friendly copy
2026-05-10 00:40:34
app_v2/src/main/res/values/strings.xml
S0118 batch 16
Add friendly PDF viewer failure copy
2026-05-10 00:40:35
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 16
Add friendly PDF viewer failure copy
2026-05-10 00:40:37
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 16
Add friendly PDF viewer failure copy
2026-05-10 00:42:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Replace raw and hardcoded text viewer errors with localized friendly copy
2026-05-10 00:42:37
app_v2/src/main/res/values/strings.xml
S0118 batch 17
Add friendly text viewer failure copy
2026-05-10 00:42:39
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 17
Add friendly text viewer failure copy
2026-05-10 00:42:40
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 17
Add friendly text viewer failure copy
2026-05-10 00:44:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/GoogleLensTranslationHelper.kt
GoogleLensTranslationHelper
Use localized translation error copy instead of raw exception text
2026-05-10 00:45:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager
Use localized crop failure copy instead of raw exception text
2026-05-10 00:45:37
app_v2/src/main/res/values/strings.xml
S0118 batch 18
Add localized crop failure copy
2026-05-10 00:45:39
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 18
Add localized crop failure copy
2026-05-10 00:45:40
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 18
Add localized crop failure copy
2026-05-10 00:46:22
app_v2/src/main/res/layout/widget_favorites.xml
feature
S0134 step 04.1: add empty-state block (gone by default, shown via setEmptyView)
2026-05-10 00:47:12
app_v2/src/main/java/com/sza/fastmediasorter/widget/FavoritesWidgetProvider.kt
feature
S0134 step 04.2: wire setEmptyView and onboarding intent
2026-05-10 00:47:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt
StandaloneFileOperationsHandler
Remove unused exception args from standalone delete failure copy
2026-05-10 00:49:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
feature
S0134 step 04.3: handle open_favorites_onboarding extra and surface TooltipDialog
2026-05-10 00:49:40
app_v2/src/main/java/com/sza/fastmediasorter/widget/FavoritesWidgetService.kt
feature
S0134 step 04.4: add S0134 Timber tag in onDataSetChanged
2026-05-10 00:50:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
Use friendly receive-share failure copy instead of raw exception text
2026-05-10 00:50:10
app_v2/src/main/res/values/strings.xml
S0118 batch 19
Rewrite receive-share failure copy and add locale coverage
2026-05-10 00:50:11
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 19
Rewrite receive-share failure copy and add locale coverage
2026-05-10 00:50:12
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 19
Rewrite receive-share failure copy and add locale coverage
2026-05-10 00:52:08
app_v2/src/main/res/layout/widget_preview_favorites.xml
feature
S0134 step 05.1: delete orphaned widget preview layout (previewLayout removed in Phase 02)
2026-05-10 00:52:08
app_v2/src/main/res/layout/widget_preview_resource_launch.xml
feature
S0134 step 05.1: delete orphaned widget preview layout
2026-05-10 00:52:08
app_v2/src/main/res/layout/widget_preview_camera_photos.xml
feature
S0134 step 05.1: delete orphaned widget preview layout
2026-05-10 00:52:09
app_v2/src/main/res/layout/widget_preview_random_music.xml
feature
S0134 step 05.1: delete orphaned widget preview layout
2026-05-10 00:52:09
app_v2/src/main/res/layout/widget_preview_continue_reading.xml
feature
S0134 step 05.1: delete orphaned widget preview layout
2026-05-10 00:53:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceNetworkScanCoordinator.kt
AddResourceNetworkScanCoordinator
Replace raw network and share scan errors with friendly localized copy
2026-05-10 00:53:09
app_v2/src/main/res/values/strings.xml
S0118 batch 20
Rewrite add-resource share scan failure copy
2026-05-10 00:53:10
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 20
Rewrite add-resource share scan failure copy
2026-05-10 00:53:12
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 20
Rewrite add-resource share scan failure copy
2026-05-10 00:53:34
docs/FEATURES.md
docs
S0134 step 05.2: add Material You + Favorites empty-state bullet to §18
2026-05-10 00:53:34
docs/FEATURES_RU.md
docs
S0134 step 05.2: mirror EN bullet (Адаптивная отделка виджетов)
2026-05-10 00:53:34
docs/FEATURES_UK.md
docs
S0134 step 05.2: mirror EN bullet (Адаптивна обробка віджетів)
2026-05-10 00:54:36
dev/CATALOG/app_v2.jsonl
catalog
S0134 step 05.3: regenerate scan after widget changes
2026-05-10 00:54:37
dev/CATALOG/app_v2.md
catalog
S0134 step 05.3: regenerate render
2026-05-10 00:56:33
PLAN/S0134_widget-picker-and-home-polish.md
spec-dev
Status -> Implemented + journal BlockNeedUserTest (awaiting Pixel/Nova/Niagara hands-on)
2026-05-10 01:34:33
app_v2/src/main/res/values-ru/strings.xml,app_v2/src/main/res/values-uk/strings.xml
i18n
Add missing background_audio_exit_always_stop/_continue translations (RU/UK); align radio-button labels to imperfective (Всегда останавливать/Завжди зупиняти)
2026-05-10 02:30:35
PLAN/S0136_bugfix-glide-disk-cache-not-persisting.md, PLAN/S0137_feature-cast-network-cloud-streaming.md, PLAN/S0138_bugfix-glide-cancellation-log-noise.md, PLAN/S0139_bugfix-smb-credentials-empty-share-name.md, PLAN/S0056_smb-scan-slowness-investigation.md, PLAN/S0061_bugfix-smb-stale-connection-invalidation.md
spec-catalog
Specs from log review (logs/fastmediasorter_20260510_012252.log): created S0136/S0137/S0138/S0139, updated S0056 (BlockNeedUserTest -> Approved with new 178-files/18.8s evidence opposing D1), updated S0061 Last Audit with field confirmation of stale-connection invalidation
2026-05-10 02:31:01
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0133
Default-ON for acceptSharedFiles (domain model)
2026-05-10 02:31:09
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0133
DataStore read fallback for acceptSharedFiles flipped to true (default-ON)
2026-05-10 02:31:12
app_v2/src/main/java/com/sza/fastmediasorter/core/init/DefaultPlayerStateBootstrapper.kt
S0133
New: idempotent system-component-state bootstrap on every process start
2026-05-10 02:31:16
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
S0133
Wire DefaultPlayerStateBootstrapper into onCreate via applicationScope.launch
2026-05-10 02:31:22
docs/FEATURES.md
S0133
Document default-ON behavior for accept shared files (EN)
2026-05-10 02:31:25
docs/FEATURES_RU.md
S0133
Document default-ON behavior for accept shared files (RU)
2026-05-10 02:31:28
docs/FEATURES_UK.md
S0133
Document default-ON behavior for accept shared files (UK)
2026-05-10 02:31:32
dev/CATALOG/app_v2.jsonl
S0133
Regenerate catalog: add DefaultPlayerStateBootstrapper (role+status)
2026-05-10 02:33:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceSftpKeyCoordinator.kt
AddResourceSftpKeyCoordinator
Replace hardcoded SFTP key flow copy with localized addresource resources
2026-05-10 02:33:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceSftpFtpCoordinator.kt
AddResourceSftpFtpCoordinator
Replace hardcoded SFTP and FTP flow copy with localized addresource resources
2026-05-10 02:33:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
Pass application context into add-resource protocol coordinators for localized copy
2026-05-10 02:33:30
app_v2/src/main/res/values/strings.xml
S0118 batch 21
Add reusable localized add-resource protocol copy
2026-05-10 02:33:31
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 21
Add reusable localized add-resource protocol copy
2026-05-10 02:33:32
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 21
Add reusable localized add-resource protocol copy
2026-05-10 02:36:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
Replace remaining add-resource VM user copy with localized resources
2026-05-10 02:36:37
app_v2/src/main/res/values/strings.xml
S0118 batch 22
Add localized add-resource VM copy
2026-05-10 02:36:39
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 22
Add localized add-resource VM copy
2026-05-10 02:36:40
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 22
Add localized add-resource VM copy
2026-05-10 02:39:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceSmbCoordinator.kt
AddResourceSmbCoordinator
Replace remaining SMB add-resource copy with localized resources
2026-05-10 02:39:11
app_v2/src/main/res/values/strings.xml
S0118 batch 23
Add localized SMB add-resource copy
2026-05-10 02:39:13
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 23
Add localized SMB add-resource copy
2026-05-10 02:39:14
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 23
Add localized SMB add-resource copy
2026-05-10 02:39:29
app_v2/src/main/java/com/sza/fastmediasorter/core/init/DefaultPlayerStateBootstrapper.kt
S0133
Verified on device - remove S0133 debug Timber.d tag and unused import (per CLAUDE.md transition-to-Verified rule)
2026-05-10 02:39:55
PLAN/S0133_accept-shared-files-default-on.md
spec-check
Audit S0133 -> Verified; PASS/WARN/FAIL 13/0/0; on-device confirmed by user 2026-05-10
2026-05-10 02:40:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceVirtualCoordinator.kt
AddResourceVirtualCoordinator
Replace remaining virtual add-resource copy with localized resources
2026-05-10 02:40:49
app_v2/src/main/res/values/strings.xml
S0118 batch 24
Add localized virtual add-resource copy
2026-05-10 02:40:50
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 24
Add localized virtual add-resource copy
2026-05-10 02:40:51
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 24
Add localized virtual add-resource copy
2026-05-10 02:43:04
PLAN/spec_quick_sort_limit_mismatch.md
spec_quick_sort_limit_mismatch
Record Quick Sort limit mismatch between addresource code and docs
2026-05-10 02:43:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFinalizer.kt
AddResourceFinalizer
Replace hardcoded Quick Sort overflow text with localized neutral copy
2026-05-10 02:43:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceViewModel
Stop exposing disputed Quick Sort numeric limit in addresource copy
2026-05-10 02:43:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceSmbCoordinator.kt
AddResourceSmbCoordinator
Stop exposing disputed Quick Sort numeric limit in SMB addresource copy
2026-05-10 02:43:08
app_v2/src/main/res/values/strings.xml
S0118 batch 25
Neutralize Quick Sort limit copy and add overflow message
2026-05-10 02:43:09
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 25
Neutralize Quick Sort limit copy and add overflow message
2026-05-10 02:43:10
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 25
Neutralize Quick Sort limit copy and add overflow message
2026-05-10 02:44:10
PLAN/S0136_bugfix-glide-disk-cache-not-persisting/INDEX.md
spec-tech
Create tactical plan for S0136 (instrumentation - fix - cleanup, 3 phases)
2026-05-10 02:44:10
PLAN/S0136_bugfix-glide-disk-cache-not-persisting/PHASE_01__instrumentation.md
spec-tech
Phase 01: instrumentation (R1..R6 as Timber.d tags, 6 steps)
2026-05-10 02:44:11
PLAN/S0136_bugfix-glide-disk-cache-not-persisting/PHASE_02__fix.md
spec-tech
Phase 02: fix (gated on device test; placeholder for spec-update)
2026-05-10 02:44:11
PLAN/S0136_bugfix-glide-disk-cache-not-persisting/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: cleanup (remove S0136 tags, regen catalog)
2026-05-10 02:44:11
PLAN/S0136_bugfix-glide-disk-cache-not-persisting.md
spec-tech
Status Draft - Approved - Tactical; tactical plan link added
2026-05-10 02:44:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
Remove raw exception text from OneDrive authentication failure copy
2026-05-10 02:45:45
app_v2/src/main/java/com/sza/fastmediasorter/utils/GlideCacheStats.kt
GlideCacheStats.logStats
S0136: add Timber.d summary tag (total/disk/memory/repo/network/local) for grep-able regression detection
2026-05-10 02:46:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
AdapterThumbnailLoader.loadImage (network branch)
S0136: tag onResourceReady with ds + path + size for cache-key drift analysis
2026-05-10 02:46:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
PlaybackSettingsFragment
Replace raw init-settings error with friendly localized copy
2026-05-10 02:46:52
app_v2/src/main/res/values/strings.xml
S0118 batch 26
Rewrite playback settings init error copy
2026-05-10 02:46:53
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 26
Rewrite playback settings init error copy
2026-05-10 02:46:54
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 26
Rewrite playback settings init error copy
2026-05-10 02:47:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager.reloadCurrentImage
S0136: tag the implicit clearDiskCache wipe (post image edit) with file path for D2 verification
2026-05-10 02:48:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCacheHelper.kt
GeneralSettingsCacheHelper.clearCache
S0136: tag user-initiated clearCache to distinguish from automatic clears in logs
2026-05-10 02:48:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/DeleteDialog.kt
DeleteDialog
Remove raw exception text from delete dialog failure toasts
2026-05-10 02:48:56
app_v2/src/main/res/values/strings.xml
S0118 batch 27
Rewrite delete dialog failure copy
2026-05-10 02:48:57
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 27
Rewrite delete dialog failure copy
2026-05-10 02:48:58
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 27
Rewrite delete dialog failure copy
2026-05-10 02:49:00
app_v2/src/main/java/com/sza/fastmediasorter/di/GlideAppModule.kt
GlideAppModule.applyOptions
S0136: log image_cache dir state at applyOptions for R5 cache persistence diagnostic
2026-05-10 02:50:24
app_v2/src/main/java/com/sza/fastmediasorter/core/util/CacheStatusHelper.kt
CacheStatusHelper.logGlideDiskCacheStatusOnce
S0136: add helper for one-shot post-first-load cache-dir dump
2026-05-10 02:50:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
AdapterThumbnailLoader.companion
S0136: add s0136PostFirstLoadDone AtomicBoolean + first-load trigger of CacheStatusHelper.logGlideDiskCacheStatusOnce
2026-05-10 02:52:37
dev/CATALOG/app_v2.jsonl
spec-dev
S0136 Phase 01: regen after instrumentation (CacheStatusHelper.logGlideDiskCacheStatusOnce added)
2026-05-10 02:52:37
dev/CATALOG/app_v2.md
spec-dev
S0136 Phase 01: regen after instrumentation
2026-05-10 03:05:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
FileOperationDestinationDialog
Remove raw exception text from destination loading toast
2026-05-10 03:05:58
app_v2/src/main/res/values/strings.xml
S0118 batch 28
Rewrite destination loading failure copy
2026-05-10 03:05:59
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 28
Rewrite destination loading failure copy
2026-05-10 03:06:00
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 28
Rewrite destination loading failure copy
2026-05-10 03:08:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsImportExportHelper.kt
GeneralSettingsImportExportHelper
Remove raw import/export failure text from settings helper
2026-05-10 03:08:27
app_v2/src/main/res/values/strings.xml
S0118 batch 29
Rewrite settings import/export failure copy
2026-05-10 03:08:28
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 29
Rewrite settings import/export failure copy
2026-05-10 03:08:29
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 29
Rewrite settings import/export failure copy
2026-05-10 03:08:46
PLAN/S0137_feature-cast-network-cloud-streaming/INDEX.md
spec-tech
Create tactical plan for S0137
2026-05-10 03:08:50
PLAN/S0137_feature-cast-network-cloud-streaming/PHASE_01__wire-network-file-manager.md
spec-tech
S0137 Phase 01: wire NetworkFileManager into CastMediaManager
2026-05-10 03:08:54
PLAN/S0137_feature-cast-network-cloud-streaming/PHASE_02__delegate-remote-download.md
spec-tech
S0137 Phase 02: delegate remote download
2026-05-10 03:08:58
PLAN/S0137_feature-cast-network-cloud-streaming/PHASE_03__size-gates-audio-image.md
spec-tech
S0137 Phase 03: size gates for audio and image
2026-05-10 03:09:01
PLAN/S0137_feature-cast-network-cloud-streaming/PHASE_04__progress-feedback.md
spec-tech
S0137 Phase 04: progress feedback (blocked on /ui-clarify)
2026-05-10 03:09:05
PLAN/S0137_feature-cast-network-cloud-streaming/PHASE_05__docs-catalog-cleanup.md
spec-tech
S0137 Phase 05: docs/catalog cleanup
2026-05-10 03:09:08
PLAN/S0137_feature-cast-network-cloud-streaming.md
spec-tech
S0137 Status -> Tactical (link to tactical plan)
2026-05-10 03:10:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ResourcePickerDialog.kt
ResourcePickerDialog
Replace raw resource loading failure toast with localized copy
2026-05-10 03:10:44
app_v2/src/main/res/values/strings.xml
S0118 batch 30
Add resource picker loading failure copy
2026-05-10 03:10:45
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 30
Add resource picker loading failure copy
2026-05-10 03:10:46
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 30
Add resource picker loading failure copy
2026-05-10 03:12:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ImageEditDialog.kt
ImageEditDialog
Remove raw image edit failure text from dialog toasts
2026-05-10 03:12:41
app_v2/src/main/res/values/strings.xml
S0118 batch 31
Rewrite image edit failure copy
2026-05-10 03:12:42
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 31
Rewrite image edit failure copy
2026-05-10 03:12:43
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 31
Rewrite image edit failure copy
2026-05-10 03:14:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/GifEditorDialog.kt
GifEditorDialog
Remove raw GIF editor failure text from dialog toasts
2026-05-10 03:14:48
app_v2/src/main/res/values/strings.xml
S0118 batch 32
Rewrite GIF editor failure copy
2026-05-10 03:14:49
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 32
Rewrite GIF editor failure copy
2026-05-10 03:14:51
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 32
Rewrite GIF editor failure copy
2026-05-10 03:20:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt
BackupRestoreViewModel
Remove raw backup, restore, and auth failure text from backup restore state
2026-05-10 03:20:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsBackupHelper.kt
GeneralSettingsBackupHelper
Remove raw Google sign-in failure text from backup entry helper
2026-05-10 03:20:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
Remove raw Google sign-in failure text from backup restore fragment
2026-05-10 03:20:05
app_v2/src/main/res/values/strings.xml
S0118 batch 33
Rewrite backup restore auth failure copy
2026-05-10 03:20:06
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 33
Rewrite backup restore auth failure copy
2026-05-10 03:20:08
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 33
Rewrite backup restore auth failure copy
2026-05-10 03:21:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
S0137
Phase 01.1: add networkFileManager constructor parameter
2026-05-10 03:22:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0137
Phase 01.2: pass networkFileManager into CastMediaManager
2026-05-10 03:22:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCredentialHelper.kt
GeneralSettingsCredentialHelper
Remove raw credential import failure text from settings helper
2026-05-10 03:22:24
app_v2/src/main/res/values/strings.xml
S0118 batch 34
Rewrite settings credential import failure copy
2026-05-10 03:22:26
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 34
Rewrite settings credential import failure copy
2026-05-10 03:22:28
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 34
Rewrite settings credential import failure copy
2026-05-10 03:23:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
S0137
Phase 02.1: delegate downloadToTemp to NetworkFileManager.prepareFileForRead
2026-05-10 03:23:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
S0137
Phase 02.2: remove openRemoteInputStream stub and unused InputStream/FileOutputStream imports
2026-05-10 03:24:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt
S0137
Phase 02.3: retire deleteTempFile and CAST_TEMP_FILE_NAME
2026-05-10 03:25:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsResetHelper.kt
GeneralSettingsResetHelper
Remove raw reset failure text from settings helper
2026-05-10 03:25:26
app_v2/src/main/res/values/strings.xml
S0118 batch 35
Rewrite settings reset failure copy
2026-05-10 03:25:27
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 35
Rewrite settings reset failure copy
2026-05-10 03:25:28
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 35
Rewrite settings reset failure copy
2026-05-10 03:26:10
dev/CATALOG/app_v2.jsonl
S0137
Catalog regen after Phase 01+02 (CastMediaManager refactor)
2026-05-10 03:27:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt
GeneralSettingsObserversHelper
Remove raw sync failure text from settings helper
2026-05-10 03:27:26
app_v2/src/main/res/values/strings.xml
S0118 batch 36
Rewrite sync failure copy
2026-05-10 03:27:27
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 36
Rewrite sync failure copy
2026-05-10 03:27:29
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 36
Rewrite sync failure copy
2026-05-10 03:29:37
PLAN/S0139_bugfix-smb-credentials-empty-share-name.md
spec-all
Approved strategic spec: S0139
2026-05-10 03:30:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt
GeneralSettingsLogHelper
Localize log dialog copy and remove raw log-read failure text
2026-05-10 03:30:20
app_v2/src/main/res/values/strings.xml
S0118 batch 37
Add localized settings log dialog copy
2026-05-10 03:30:21
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 37
Add localized settings log dialog copy
2026-05-10 03:30:23
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 37
Add localized settings log dialog copy
2026-05-10 03:32:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/WearSyncViewModel.kt
WearSyncViewModel
Replace raw wear sync failure text with localized errors and add the required R import
2026-05-10 03:32:43
app_v2/src/main/res/values/strings.xml
S0118 batch 38
Add wear sync failure copy
2026-05-10 03:32:44
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 38
Add wear sync failure copy
2026-05-10 03:32:45
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 38
Add wear sync failure copy
2026-05-10 03:34:03
PLAN/S0139_bugfix-smb-credentials-empty-share-name/INDEX.md
spec-all
Tactical plan: S0139 (F1 backfill + F2 guard)
2026-05-10 03:35:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesViewModel.kt
DuplicatesViewModel
Replace raw duplicate scan and delete failure text with localized errors and add the required R import
2026-05-10 03:35:59
app_v2/src/main/res/values/strings.xml
S0118 batch 39
Add duplicate scan failure copy
2026-05-10 03:36:01
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 39
Add duplicate scan failure copy
2026-05-10 03:36:02
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 39
Add duplicate scan failure copy
2026-05-10 03:38:48
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackfillSmbCredentialShareNameUseCase.kt
spec-all
S0139 F1: one-shot backfill use-case for empty SMB shareName
2026-05-10 03:38:52
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
spec-all
S0139 F1: wire BackfillSmbCredentialShareNameUseCase on startup
2026-05-10 03:38:56
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/NetworkCredentialsRepositoryImpl.kt
spec-all
S0139 F2: warn-on-empty-shareName guard in insert/update
2026-05-10 03:39:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/undo/BrowseUndoManager.kt
BrowseUndoManager
Replace raw undo messages with localized resource-backed copy
2026-05-10 03:39:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
Pass application context into BrowseUndoManager for localized undo copy
2026-05-10 03:39:10
app_v2/src/main/res/values/strings.xml
S0118 batch 40
Rewrite browse undo failure and status copy
2026-05-10 03:39:11
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 40
Rewrite browse undo failure and status copy
2026-05-10 03:39:13
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 40
Rewrite browse undo failure and status copy
2026-05-10 03:39:57
PLAN/S0139_bugfix-smb-credentials-empty-share-name.md
spec-all
S0139 Implemented; pending device test (BlockNeedUserTest)
2026-05-10 03:41:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
MainViewModel
Replace raw main screen prompts and shortcut failures with localized resource-backed copy
2026-05-10 03:41:30
app_v2/src/main/res/values/strings.xml
S0118 batch 41
Add localized main screen prompt and open-resource failure copy
2026-05-10 03:41:31
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 41
Add localized main screen prompt and open-resource failure copy
2026-05-10 03:41:32
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 41
Add localized main screen prompt and open-resource failure copy
2026-05-10 03:43:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBackgroundPhotosManager.kt
AudioBackgroundPhotosManager
Replace raw background-photo error messages with localized resource-backed copy
2026-05-10 03:43:13
app_v2/src/main/res/values/strings.xml
S0118 batch 42
Add localized background-photo error copy
2026-05-10 03:43:14
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 42
Add localized background-photo error copy
2026-05-10 03:43:15
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 42
Add localized background-photo error copy
2026-05-10 03:44:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
PlayerViewModel
Replace raw move and favorite-status player messages with localized resource-backed copy
2026-05-10 03:44:47
app_v2/src/main/res/values/strings.xml
S0118 batch 43
Add localized player move confirmation copy
2026-05-10 03:44:49
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 43
Add localized player move confirmation copy
2026-05-10 03:44:50
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 43
Add localized player move confirmation copy
2026-05-10 03:46:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt
PlayerMediaFilesLoader
Replace raw player media loading errors with localized resource-backed copy
2026-05-10 03:48:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageOcrManager.kt
ImageOcrManager
Replace raw OCR guard messages with localized resource-backed copy
2026-05-10 03:48:27
app_v2/src/main/res/values/strings.xml
S0118 batch 45
Add localized OCR guard copy
2026-05-10 03:48:28
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 45
Add localized OCR guard copy
2026-05-10 03:48:28
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 45
Add localized OCR guard copy
2026-05-10 03:50:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerImageTranslationManager.kt
PlayerImageTranslationManager
Replace raw image translation guard and failure messages with localized resource-backed copy
2026-05-10 03:54:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
SmbPlaybackHelper
Replace raw SMB playback credential and path errors with localized resource-backed copy
2026-05-10 03:54:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
SftpPlaybackHelper
Replace raw SFTP playback credential errors with localized resource-backed copy
2026-05-10 03:54:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
FtpPlaybackHelper
Replace raw FTP playback credential errors with localized resource-backed copy
2026-05-10 03:54:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt
CloudPlaybackHelper
Replace raw cloud playback path errors with localized resource-backed copy
2026-05-10 03:54:53
app_v2/src/main/res/values/strings.xml
S0118 batch 47
Add shared playback credential-missing copy
2026-05-10 03:54:54
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 47
Add shared playback credential-missing copy
2026-05-10 03:54:54
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 47
Add shared playback credential-missing copy
2026-05-10 03:55:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
SmbPlaybackHelper
Replace raw SMB playback credential and path errors with localized resource-backed copy
2026-05-10 03:55:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
SftpPlaybackHelper
Replace raw SFTP playback credential errors with localized resource-backed copy
2026-05-10 03:55:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
FtpPlaybackHelper
Replace raw FTP playback credential errors with localized resource-backed copy
2026-05-10 03:55:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt
CloudPlaybackHelper
Replace raw cloud playback path errors with localized resource-backed copy
2026-05-10 03:55:37
app_v2/src/main/res/values/strings.xml
S0118 batch 47
Add shared playback credential-missing copy
2026-05-10 03:55:38
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 47
Add shared playback credential-missing copy
2026-05-10 03:55:38
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 47
Add shared playback credential-missing copy
2026-05-10 03:56:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextTranslationOverlayManager.kt
TextTranslationOverlayManager
Replace raw empty-text translation message with localized resource-backed copy
2026-05-10 03:59:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NetworkFileManager.kt
NetworkFileManager
Replace raw read-only edit error with localized resource-backed copy
2026-05-10 04:03:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubTranslationOverlayHelper.kt
EpubTranslationOverlayHelper
Replace raw EPUB translation webview and empty-chapter messages with localized resource-backed copy
2026-05-10 04:03:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
EpubViewerManager
Replace raw EPUB webview-unavailable message with localized resource-backed copy
2026-05-10 04:03:03
app_v2/src/main/res/values/strings.xml
S0118 batch 49
Add shared reading-view unavailable copy
2026-05-10 04:03:04
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 49
Add shared reading-view unavailable copy
2026-05-10 04:03:04
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 49
Add shared reading-view unavailable copy
2026-05-10 04:04:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt
PdfViewerManager
Replace raw PDF translation page-not-ready message with localized resource-backed copy
2026-05-10 04:04:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfLinkAndSearchManager.kt
PdfLinkAndSearchManager
Replace raw PDF OCR, link, and Google Lens errors with localized resource-backed copy
2026-05-10 04:04:51
app_v2/src/main/res/values/strings.xml
S0118 batch 50
Add shared PDF page-not-ready and link-open failure copy
2026-05-10 04:04:51
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 50
Add shared PDF page-not-ready and link-open failure copy
2026-05-10 04:04:51
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 50
Add shared PDF page-not-ready and link-open failure copy
2026-05-10 04:06:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Replace raw text save guard copy with localized resource-backed message and remove duplicate write failure toast
2026-05-10 04:09:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
Replace hardcoded fast-scroll race-condition toast with localized resource-backed copy
2026-05-10 04:09:21
app_v2/src/main/res/values/strings.xml
S0118 batch 51
Add localized image fast-scroll rate-limit copy
2026-05-10 04:09:21
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 51
Add localized image fast-scroll rate-limit copy
2026-05-10 04:09:22
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 51
Add localized image fast-scroll rate-limit copy
2026-05-10 04:11:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Replace raw partial-save upload warning with localized resource-backed copy
2026-05-10 04:11:24
app_v2/src/main/res/values/strings.xml
S0118 batch 52
Add localized text partial-save upload warning copy
2026-05-10 04:11:24
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 52
Add localized text partial-save upload warning copy
2026-05-10 04:11:25
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 52
Add localized text partial-save upload warning copy
2026-05-10 04:13:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/permissions/PermissionDenialHandler.kt
PermissionDenialHandler
Replace raw permission denial snackbars with localized resource-backed copy
2026-05-10 04:13:15
app_v2/src/main/res/values/strings.xml
S0118 batch 53
Add localized permission denial snackbar copy
2026-05-10 04:13:15
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 53
Add localized permission denial snackbar copy
2026-05-10 04:13:15
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 53
Add localized permission denial snackbar copy
2026-05-10 04:16:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
GeneralSettingsViewSetupHelper
Replace raw settings toasts with existing localized resource-backed copy
2026-05-10 04:18:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/RenameDialog.kt
RenameDialog
Replace raw empty-file-name validation error with localized resource-backed copy
2026-05-10 04:18:49
app_v2/src/main/res/values/strings.xml
S0118 batch 54
Add localized rename empty-file-name validation copy
2026-05-10 04:18:49
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 54
Add localized rename empty-file-name validation copy
2026-05-10 04:18:49
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 54
Add localized rename empty-file-name validation copy
2026-05-10 04:21:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResourceActivity
Replace concatenated permission-granted toast with localized resource-backed copy
2026-05-10 04:21:13
app_v2/src/main/res/values/strings.xml
S0118 batch 55
Add localized add-resource permission-granted continuation copy
2026-05-10 04:21:14
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 55
Add localized add-resource permission-granted continuation copy
2026-05-10 04:21:14
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 55
Add localized add-resource permission-granted continuation copy
2026-05-10 04:23:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ArchiveFilesUseCase.kt
ArchiveFilesUseCase
Replace raw fatal archive error messages with localized resource-backed copy
2026-05-10 04:23:41
app_v2/src/main/res/values/strings.xml
S0118 batch 56
Add localized archive destination-missing and archive-create-failed copy
2026-05-10 04:23:41
app_v2/src/main/res/values-ru/strings.xml
S0118 batch 56
Add localized archive destination-missing and archive-create-failed copy
2026-05-10 04:23:42
app_v2/src/main/res/values-uk/strings.xml
S0118 batch 56
Add localized archive destination-missing and archive-create-failed copy
2026-05-10 04:26:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
fix
S0141: WebView-auth dialog now sizes its window to MATCH_PARENT in onStart so the WebView is actually visible (was collapsing to wrap_content); add WebChromeClient + main-frame error tracing
2026-05-10 04:30:46
PLAN/S0140_extend-market-url-coverage.md
spec
Add strategic spec S0140 for extend-market-url-coverage (invisible-WebView extractor + JSON-LD/oEmbed sniffers + login-wall heuristic + back-port album batch from S0117 + multi-URL paste + UX-fix auth-flow)
2026-05-10 13:43:59
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthCoordinator.kt
GoogleDriveAuthCoordinator
Replace raw Google Drive auth expiry message with localized auth-required copy
2026-05-10 13:43:59
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveAuthCoordinator.kt
OneDriveAuthCoordinator
Replace raw OneDrive auth expiry message with localized auth-required copy
2026-05-10 13:43:59
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Replace raw Google Drive auth guard and expiry errors with localized auth-required copy
2026-05-10 13:46:07
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Replace additional raw Google Drive auth guards with localized auth-required copy
2026-05-10 13:46:07
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Replace upper OneDrive raw auth guards with localized auth-required copy
2026-05-10 13:47:32
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Replace remaining raw Google Drive auth guards with localized auth-required copy
2026-05-10 13:47:32
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Replace remaining raw OneDrive auth guards with localized auth-required copy
2026-05-10 13:48:47
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Replace raw Google Drive connection test errors with provider-localized resource copy
2026-05-10 13:48:48
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Replace raw OneDrive connection test errors with provider-localized resource copy
2026-05-10 13:50:15
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Replace raw Google Drive download errors with localized download_failed copy
2026-05-10 13:50:15
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Replace raw OneDrive download and input stream errors with localized download_failed copy
2026-05-10 13:55:31
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Localized cloud browse and file-operation failure messages for S0118
2026-05-10 13:55:31
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Localized cloud browse and file-operation failure messages for S0118
2026-05-10 13:55:31
app_v2/src/main/res/values/strings.xml
cloud_* strings
Added shared cloud browse failure strings for S0118
2026-05-10 13:55:31
app_v2/src/main/res/values-ru/strings.xml
cloud_* strings
Added Russian cloud browse failure strings for S0118
2026-05-10 13:55:31
app_v2/src/main/res/values-uk/strings.xml
cloud_* strings
Added Ukrainian cloud browse failure strings for S0118
2026-05-10 13:58:27
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Localized cloud upload, search, and thumbnail failure messages for S0118
2026-05-10 13:58:27
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Localized cloud upload, search, and thumbnail failure messages for S0118
2026-05-10 13:58:27
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
DropboxClient
Localized cloud upload, search, and thumbnail failure messages for S0118
2026-05-10 13:58:27
app_v2/src/main/res/values/strings.xml
cloud_* strings
Added shared cloud upload, search, and thumbnail failure strings for S0118
2026-05-10 13:58:27
app_v2/src/main/res/values-ru/strings.xml
cloud_* strings
Added Russian cloud upload, search, and thumbnail failure strings for S0118
2026-05-10 13:58:27
app_v2/src/main/res/values-uk/strings.xml
cloud_* strings
Added Ukrainian cloud upload, search, and thumbnail failure strings for S0118
2026-05-10 14:01:38
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
DropboxClient
Localized remaining Dropbox cloud operation failures and auth-required messages for S0118
2026-05-10 14:01:38
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/helpers/GoogleDriveHttpClient.kt
GoogleDriveHttpClient
Localized helper download failure messages for S0118
2026-05-10 14:14:45
PLAN/S0142_ui-settings-behaviour-group-regroup.md
spec
Add strategic spec S0142 for Behaviour settings group regroup
2026-05-10 14:17:34
PLAN/S0142_ui-settings-behaviour-group-regroup/INDEX.md
spec-tech
Create tactical plan for S0142
2026-05-10 14:17:35
PLAN/S0142_ui-settings-behaviour-group-regroup/PHASE_01__strings.md
spec-tech
Phase 01: strings
2026-05-10 14:17:35
PLAN/S0142_ui-settings-behaviour-group-regroup/PHASE_02__layout-regroup.md
spec-tech
Phase 02: layout-regroup
2026-05-10 14:17:35
PLAN/S0142_ui-settings-behaviour-group-regroup/PHASE_03__saved-auth-help-handler.md
spec-tech
Phase 03: saved-auth-help-handler
2026-05-10 14:17:35
PLAN/S0142_ui-settings-behaviour-group-regroup/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-10 14:17:36
PLAN/S0142_ui-settings-behaviour-group-regroup.md
spec-tech
Status -> Tactical
2026-05-10 14:17:44
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
Localized cloud check, sign-out, and not-found error paths for S0118
2026-05-10 14:17:44
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
OneDriveRestClient
Localized cloud check, sign-out, download, and folder-preparation error paths for S0118
2026-05-10 14:17:44
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
DropboxClient
Localized cloud metadata not-found, check, and sign-out error paths for S0118
2026-05-10 14:17:44
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/helpers/GoogleDriveHttpClient.kt
GoogleDriveHttpClient
Localized helper download failure copy for S0118
2026-05-10 14:17:44
app_v2/src/main/res/values/strings.xml
cloud_* strings
Added shared cloud check and sign-out failure strings for S0118
2026-05-10 14:17:44
app_v2/src/main/res/values-ru/strings.xml
cloud_* strings
Added Russian cloud check and sign-out failure strings for S0118
2026-05-10 14:17:44
app_v2/src/main/res/values-uk/strings.xml
cloud_* strings
Added Ukrainian cloud check and sign-out failure strings for S0118
2026-05-10 14:19:24
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudAuthStateMachine.kt
CloudAuthStateMachine
Localized provider-specific cloud auth cancellation messages for S0118
2026-05-10 14:20:04
app_v2/src/main/res/values/strings.xml
S0142
Phase 01: add incoming-links/camera-capture subcategory + saved-authorizations tooltip strings (EN)
2026-05-10 14:20:04
app_v2/src/main/res/values-ru/strings.xml
S0142
Phase 01: add subcategory + saved-authorizations tooltip strings (RU)
2026-05-10 14:20:05
app_v2/src/main/res/values-uk/strings.xml
S0142
Phase 01: add subcategory + saved-authorizations tooltip strings (UK)
2026-05-10 14:24:12
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0142
Phase 02: Behaviour group - divider-delimited Incoming links / Camera capture sub-sections; saved-authorizations nav-row (help icon + chevron)
2026-05-10 14:24:12
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
S0142
Phase 02: landscape parity for Behaviour group regroup
2026-05-10 14:27:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerViewModel.kt
OneDriveFolderPickerViewModel
Localized OneDrive root breadcrumb provider name for S0118
2026-05-10 14:27:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerViewModel.kt
DropboxFolderPickerViewModel
Localized Dropbox root breadcrumb provider name for S0118
2026-05-10 14:27:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Localized cloud auth dialog provider names for S0118
2026-05-10 14:27:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackHealthHelper.kt
PlaybackHealthHelper
Removed raw fallback-player exception detail from user-facing copy for S0118
2026-05-10 14:27:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/DeleteDialog.kt
DeleteDialog
Rendered file-operation failures via errorRes and formatArgs for S0118
2026-05-10 14:27:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0142
Phase 03: wire iconHelpSavedAuthorizations help tooltip
2026-05-10 14:30:17
docs/FEATURES.md
S0142
Phase 04: document Behaviour group sub-sections (EN)
2026-05-10 14:30:17
docs/FEATURES_RU.md
S0142
Phase 04: document Behaviour group sub-sections (RU)
2026-05-10 14:30:17
docs/FEATURES_UK.md
S0142
Phase 04: document Behaviour group sub-sections (UK)
2026-05-10 14:31:56
PLAN/S0142_ui-settings-behaviour-group-regroup.md
S0142
Implemented; awaiting on-device test (BlockNeedUserTest)
2026-05-10 14:34:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
Rendered FileOperationResult failures via errorRes and removed raw exception details for S0118
2026-05-10 14:36:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteManager.kt
BrowseDeleteManager
Rendered delete failures via errorRes and removed raw directory delete exception details for S0118
2026-05-10 14:38:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/RenameDialog.kt
RenameDialog
Rendered rename failures via errorRes with generic fallback for S0118
2026-05-10 14:41:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
Rendered player file-operation failures via errorRes and removed generic exception stacktrace leaks for S0118
2026-05-10 14:42:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Stopped leaking batch delete launcher exceptions into player error UI for S0118
2026-05-10 14:45:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
PlayerEventHandler
Stopped exposing raw exception stack traces in detailed player error dialogs for S0118
2026-05-10 14:50:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseErrorDisplayManager.kt
BrowseErrorDisplayManager
Stopped exposing raw throwable stack traces in detailed browse error dialogs for S0118
2026-05-10 14:50:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDirectoryOpsManager.kt
BrowseDirectoryOpsManager
Removed raw directory operation error details from browse UI for S0118
2026-05-10 14:50:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt
BrowseNavigationManager
Removed raw folder load exception details from browse UI for S0118
2026-05-10 14:50:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceStateManager.kt
BrowseResourceStateManager
Removed raw resource-state exception details from browse UI for S0118
2026-05-10 14:50:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/undo/BrowseUndoManager.kt
BrowseUndoManager
Removed raw undo stack trace details from browse UI for S0118
2026-05-10 14:50:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseLoadingAuxManager
Removed raw loading error text and stack traces from browse details for S0118
2026-05-10 14:50:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSortFilterManager.kt
BrowseSortFilterManager
Removed raw sort/filter loading stack trace details from browse UI for S0118
2026-05-10 14:51:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt
FileOperationDestinationDialog
Removed raw exception stack trace details from file operation dialog errors for S0118
2026-05-10 14:51:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ErrorDialog.kt
ErrorDialog
Stopped converting throwables into user-visible stack traces for S0118
2026-05-10 14:52:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/ErrorDialogHelper.kt
ErrorDialogHelper
Stopped converting exceptions into detailed stack trace dialogs for S0118
2026-05-10 15:03:23
scripts/utils/set-android-string.ps1
set-android-string.ps1
Added targeted Android strings.xml updater with dry-run, guard, and create-if-missing support
2026-05-10 15:03:24
.github/copilot-instructions.md
AI rules
Added script ownership rule and string updater guidance for Android string resource edits
2026-05-10 15:03:25
AGENTS.md
AI rules
Added internal script ownership rule and string updater guidance
2026-05-10 15:03:26
CLAUDE.md
AI rules
Added internal script ownership rule for repo scripts
2026-05-10 15:03:26
.github/prompts/spec-dev.prompt.md
spec-dev
Taught spec-dev to fix broken repo scripts and prefer the Android string updater
2026-05-10 15:03:27
.github/prompts/spec-fix.prompt.md
spec-fix
Taught spec-fix to fix helper scripts when needed and clarified string placeholder handling
2026-05-10 15:03:28
.github/prompts/doc-update.prompt.md
doc-update
Taught doc-update to repair insufficient helper scripts before working around them
2026-05-10 15:37:16
scripts/utils/set-android-strings.ps1
set-android-strings.ps1
Added EN-RU-UK batch wrapper for targeted Android string updates
2026-05-10 15:37:17
docs/DEV_OPS.md
DEV_OPS
Documented single-locale and batch Android string updater usage for operators
2026-05-10 16:01:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt
PermissionsManagementFragment
Fix ‘Grant all’: walk the user through every denied special permission (MANAGE_MEDIA, battery optimization, all-files access) one screen at a time instead of stopping after the first; track shown permissions to avoid re-prompting a declined one; persist run state across config change/process death; only complete the welcome flow once the whole run finishes
2026-05-10 16:04:15
PLAN/S0143_welcome-screens-overhaul.md
spec
Add strategic spec S0143 for Welcome screens overhaul (ad-hoc)
2026-05-10 16:05:00
PLAN/S0144_fix-link-download-auth-ux.md
spec
Add strategic spec S0144 for link-download auth UX (4 fixes: share->auth prompt, top toolbar, known-resource picker, intent:// WebView fix)
2026-05-10 16:05:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionRowAdapter.kt
PermissionRowAdapter
Localize permission-row action buttons: replace hardcoded ‘Grant’/’Manage’/’Settings’ with R.string.perm_action_* (added EN/RU/UK strings)
2026-05-10 16:09:11
PLAN/S0144_fix-link-download-auth-ux/INDEX.md
spec-tech
Create tactical plan for S0144
2026-05-10 16:09:11
PLAN/S0144_fix-link-download-auth-ux/PHASE_01__known-resources-registry.md
spec-tech
Phase 01: known-resources-registry
2026-05-10 16:09:11
PLAN/S0144_fix-link-download-auth-ux/PHASE_02__auth-list-top-toolbar.md
spec-tech
Phase 02: auth-list-top-toolbar
2026-05-10 16:09:11
PLAN/S0144_fix-link-download-auth-ux/PHASE_03__auth-add-resource-picker.md
spec-tech
Phase 03: auth-add-resource-picker
2026-05-10 16:09:12
PLAN/S0144_fix-link-download-auth-ux/PHASE_04__webview-intent-redirect-fix.md
spec-tech
Phase 04: webview-intent-redirect-fix
2026-05-10 16:09:12
PLAN/S0144_fix-link-download-auth-ux/PHASE_05__share-auth-offer.md
spec-tech
Phase 05: share-auth-offer
2026-05-10 16:09:12
PLAN/S0144_fix-link-download-auth-ux/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-05-10 16:09:12
PLAN/S0144_fix-link-download-auth-ux.md
spec-tech
Status -> Tactical
2026-05-10 16:09:42
PLAN/S0143_welcome-screens-overhaul.md
spec
S0143: resolve owner clarifications (blocks set, skip target/order, nav layout, illustrations scope)
2026-05-10 16:14:15
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt
app_v2
S0144 Phase 01: add KnownAuthResources catalog (10 known social resources + host matcher)
2026-05-10 16:14:53
PLAN/S0143_welcome-screens-overhaul/INDEX.md
spec-tech
Create tactical plan for S0143
2026-05-10 16:14:54
PLAN/S0143_welcome-screens-overhaul/PHASE_01__nav-consolidation.md
spec-tech
S0143 Phase 01: nav consolidation
2026-05-10 16:14:54
PLAN/S0143_welcome-screens-overhaul/PHASE_02__page-template.md
spec-tech
S0143 Phase 02: page template
2026-05-10 16:14:54
PLAN/S0143_welcome-screens-overhaul/PHASE_03__touch-zones-grid.md
spec-tech
S0143 Phase 03: touch-zones grid
2026-05-10 16:14:55
PLAN/S0143_welcome-screens-overhaul/PHASE_04__extras-grid.md
spec-tech
S0143 Phase 04: extras grid
2026-05-10 16:14:55
PLAN/S0143_welcome-screens-overhaul/PHASE_05__docs-catalog-cleanup.md
spec-tech
S0143 Phase 05: docs/catalog cleanup
2026-05-10 16:14:55
PLAN/S0143_welcome-screens-overhaul.md
spec-tech
S0143 status -> Tactical
2026-05-10 16:15:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseArchiveManager.kt
BrowseArchiveManager
Removed raw create-directory error text from archive extraction failure
2026-05-10 16:15:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt
StandaloneViewManager
Replaced raw playback fallback text with friendly generic playback message
2026-05-10 16:15:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt
BackupRestoreViewModel
Replaced raw favorites import-export error text with friendly settings messages
2026-05-10 16:16:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
SettingsViewModel
Stored friendly manual sync failure text instead of raw exception messages
2026-05-10 16:17:46
app_v2/src/main/res/layout/activity_auth_sessions.xml
app_v2
S0144 Phase 02: rebuild auth-sessions activity with CoordinatorLayout + toolbar + insets
2026-05-10 16:17:46
app_v2/src/main/res/layout/fragment_auth_sessions_list.xml
app_v2
S0144 Phase 02: drop bottom add button, add bottom inset padding to list
2026-05-10 16:17:47
app_v2/src/main/res/layout-land/fragment_auth_sessions_list.xml
app_v2
S0144 Phase 02: drop bottom add button (landscape parity)
2026-05-10 16:17:47
app_v2/src/main/res/menu/auth_sessions_menu.xml
app_v2
S0144 Phase 02: new + action menu for auth-sessions toolbar
2026-05-10 16:17:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsActivity.kt
app_v2
S0144 Phase 02: host MaterialToolbar (title + up nav)
2026-05-10 16:17:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
app_v2
S0144 Phase 02: MenuProvider + action toolbar for add, inset padding; remove bottom button
2026-05-10 16:19:43
app_v2/src/main/res/values/strings.xml
app_v2
S0144 Phase 03: add auth_add_picker_title, auth_add_enter_manually (EN)
2026-05-10 16:19:43
app_v2/src/main/res/values-ru/strings.xml
app_v2
S0144 Phase 03: add auth_add_* (RU)
2026-05-10 16:19:44
app_v2/src/main/res/values-uk/strings.xml
app_v2
S0144 Phase 03: add auth_add_* (UK)
2026-05-10 16:19:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
app_v2
S0144 Phase 03: two-step add flow (known-resource picker + manual entry)
2026-05-10 16:20:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
app_v2
S0144 Phase 04: shouldOverrideUrlLoading gates non-http(s) redirects (intent:// browser_fallback_url)
2026-05-10 16:23:15
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/AuthOfferDismissalStore.kt
app_v2
S0144 Phase 05: new AuthOfferDismissalStore (per-host offer dismissals, SharedPreferences)
2026-05-10 16:23:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
app_v2
S0144 Phase 05: emit fragment result (host + saved) on dialog dismiss
2026-05-10 16:23:16
app_v2/src/main/res/values/strings.xml
app_v2
S0144 Phase 05: add auth_offer_dialog_* (EN)
2026-05-10 16:23:16
app_v2/src/main/res/values-ru/strings.xml
app_v2
S0144 Phase 05: add auth_offer_dialog_* (RU)
2026-05-10 16:23:16
app_v2/src/main/res/values-uk/strings.xml
app_v2
S0144 Phase 05: add auth_offer_dialog_* (UK)
2026-05-10 16:23:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
app_v2
S0144 Phase 05: offer to add authorization for shared social links before download
2026-05-10 16:25:56
docs/FEATURES.md
docs
S0144 Phase 06: add social-link authorizations feature bullet (EN)
2026-05-10 16:25:56
docs/FEATURES_RU.md
docs
S0144 Phase 06: add social-link authorizations feature bullet (RU)
2026-05-10 16:25:56
docs/FEATURES_UK.md
docs
S0144 Phase 06: add social-link authorizations feature bullet (UK)
2026-05-10 16:28:15
dev/CATALOG/app_v2.jsonl
catalog
S0144: regen catalog (new KnownAuthResources, AuthOfferDismissalStore)
2026-05-10 16:28:15
dev/CATALOG/app_v2.md
catalog
S0144: regen rendered catalog
2026-05-10 16:28:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
MainViewModel
Mapped default main-screen BaseViewModel errors to a friendly resource-backed message
2026-05-10 16:28:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingLoadStateAdapter.kt
PagingLoadStateAdapter
Replaced raw paging footer error text with a friendly browse message
2026-05-10 16:28:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorOutcomeRenderer.kt
ResourceEditorOutcomeRenderer
Stopped resource editor connection failures from rendering raw diagnostic text
2026-05-10 16:30:19
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExtractArchiveUseCase.kt
ExtractArchiveUseCase
Stopped archive extraction failures from emitting raw exception text
2026-05-10 16:30:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseArchiveManager.kt
BrowseArchiveManager
Mapped unknown extraction failures to a friendly generic message
2026-05-10 16:31:59
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt
ResourceEditorUseCase
Stopped resource editor connection test failures from storing raw diagnostic text
2026-05-10 16:32:06
PLAN/S0144_fix-link-download-auth-ux/INDEX.md
spec-dev
S0144: all 6 phases done; build OK; -> Implemented / journal BlockNeedUserTest
2026-05-10 16:32:07
PLAN/S0144_fix-link-download-auth-ux.md
spec-dev
S0144: Status -> Implemented (journal BlockNeedUserTest)
2026-05-10 17:14:44
app_v2/src/main/res/layout/activity_welcome.xml
S0143
Welcome: single bottom nav bar (Back | indicator | Skip | Next/Finish), drop standalone top Skip
2026-05-10 17:16:19
app_v2/src/main/res/layout-sw480dp/activity_welcome.xml
S0143
Welcome sw480dp: single bottom nav bar, drop layoutTopNav
2026-05-10 17:16:19
app_v2/src/main/res/layout-sw720dp/activity_welcome.xml
S0143
Welcome sw720dp: single bottom nav bar, drop layoutTopNav
2026-05-10 17:16:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
Stopped cloud auth error dialogs from showing raw provider details
2026-05-10 17:17:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
S0143
Welcome: simplify window insets for single bottom nav; drop layoutTopNav refs; Skip-to-last-page semantics kept
2026-05-10 17:25:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
Stopped generic share download failures from surfacing raw exception details
2026-05-10 17:27:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt
S0143
Welcome: add WelcomePage.detailDescriptionRes for scrollable details block
2026-05-10 17:27:44
app_v2/src/main/res/layout/page_welcome.xml
S0143
Welcome standard page: fixed header + scrollable details (tvDetails)
2026-05-10 17:27:45
app_v2/src/main/res/layout-land/page_welcome.xml
S0143
Welcome standard page (land): two-column header + scrollable details
2026-05-10 17:28:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
DocumentPrintManager
Stopped PDF print failures from exposing raw IOException text in the system print UI
2026-05-10 17:28:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt
S0143
Welcome: bindDetails() helper; WelcomeViewHolder binds tvDetails; Timber S0143 tag in onBindViewHolder
2026-05-10 17:28:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
S0143
Welcome: wire detail copy for Resource Types and Resources & Destinations pages
2026-05-10 17:30:53
app_v2/src/main/res/values/strings.xml
S0143
Welcome: add welcome_description_1..5_details (scrollable detail copy)
2026-05-10 17:30:53
app_v2/src/main/res/values-ru/strings.xml
S0143
Welcome: add welcome_description_1..5_details (RU)
2026-05-10 17:30:53
app_v2/src/main/res/values-uk/strings.xml
S0143
Welcome: add welcome_description_1..5_details (UK)
2026-05-10 17:31:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
S0143
Welcome: wire detail copy for the first Welcome page
2026-05-10 17:34:39
app_v2/src/main/res/values/strings.xml
favorites_slideshow_open_first
Added localized friendly copy for the Favorites slideshow availability toast (EN/RU/UK mirrored)
2026-05-10 17:34:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceNavigationCoordinator.kt
ResourceNavigationCoordinator
Replaced the hardcoded Favorites slideshow toast with localized friendly copy
2026-05-10 17:36:18
app_v2/src/main/res/layout/page_welcome_touch_zones.xml
S0143
Welcome touch-zones page: inline 3x3 zone grid replaces touch_zones_scheme bitmap; header + scrollable details
2026-05-10 17:36:19
app_v2/src/main/res/layout-land/page_welcome_touch_zones.xml
S0143
Welcome touch-zones page (land): new landscape variant with two-column layout (grid + details)
2026-05-10 17:36:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
DocumentPrintManager
Add print-environment diagnostics (device/SDK/flavor/FEATURE_PRINTING) to all print-failure logs, escalate null PRINT_SERVICE log to ERROR, guard text-print WebView creation; temporary WARN trace on print invocation to investigate ‘print services unavailable’ report
2026-05-10 17:36:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceNavigationCoordinator.kt
ResourceNavigationCoordinator
Add missing ‘import com.sza.fastmediasorter.R’ to fix unresolved R reference (build break in working tree)
2026-05-10 17:37:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt
S0143
Welcome: TouchZonesViewHolder binds inline grid + tvDetails; Timber S0143 tag
2026-05-10 17:37:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
S0143
Welcome: wire detail copy for Touch Zones page
2026-05-10 17:40:06
app_v2/src/main/res/values/integers.xml
S0143
Add welcome_feature_grid_columns (base=2)
2026-05-10 17:40:07
app_v2/src/main/res/values-land/integers.xml
S0143
welcome_feature_grid_columns landscape=4
2026-05-10 17:40:07
app_v2/src/main/res/values-sw320dp/integers.xml
S0143
welcome_feature_grid_columns sw320=2
2026-05-10 17:40:07
app_v2/src/main/res/values-sw480dp/integers.xml
S0143
welcome_feature_grid_columns sw480=3
2026-05-10 17:40:07
app_v2/src/main/res/values-sw600dp/integers.xml
S0143
welcome_feature_grid_columns sw600=4
2026-05-10 17:40:08
app_v2/src/main/res/values-sw720dp/integers.xml
S0143
New: integers.xml sw720dp with welcome_feature_grid_columns=4
2026-05-10 17:41:38
app_v2/src/main/res/layout/page_welcome_enhanced.xml
S0143
Welcome enhanced page: header + scrollable body with adaptive gridFeatures + tvDetails; remove hardcoded 3 cards
2026-05-10 17:41:38
app_v2/src/main/res/layout-land/page_welcome_enhanced.xml
S0143
Welcome enhanced page (land): scrollable right column with gridFeatures + tvDetails; fix mojibake in language buttons
2026-05-10 17:43:10
app_v2/src/main/res/values/strings.xml
S0143
Welcome: add feature-tile labels for Powerful Extras grid
2026-05-10 17:43:10
app_v2/src/main/res/values-ru/strings.xml
S0143
Welcome: feature-tile labels (RU)
2026-05-10 17:43:10
app_v2/src/main/res/values-uk/strings.xml
S0143
Welcome: feature-tile labels (UK)
2026-05-10 17:46:29
app_v2/src/main/res/layout/item_welcome_feature_tile.xml
S0143
New: Welcome feature-tile item layout for the Powerful Extras grid
2026-05-10 17:46:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt
S0143
Welcome: populateFeatureGrid(); EnhancedViewHolder fills adaptive grid + tvDetails; Timber S0143 tag
2026-05-10 17:46:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
S0143
Welcome: buildExtrasFeatureCards() (BuildConfig-gated tiles); wire Powerful Extras page; drop unused TAG
2026-05-10 17:48:02
app_v2/src/main/res/drawable/resource_types.xml
S0143
New: vector resource_types illustration (replaces resource_types.png bitmap)
2026-05-10 17:48:02
app_v2/src/main/res/drawable/resource_types.png
S0143
Removed: resource_types.png bitmap (replaced by vector)
2026-05-10 17:51:43
docs/FEATURES.md
S0143
Add onboarding walkthrough bullet (revamped Welcome flow)
2026-05-10 17:51:44
docs/FEATURES_RU.md
S0143
Onboarding walkthrough bullet (RU)
2026-05-10 17:51:44
docs/FEATURES_UK.md
S0143
Onboarding walkthrough bullet (UK)
2026-05-10 17:53:56
PLAN/S0143_welcome-screens-overhaul.md
S0143
All 5 phases implemented; status -> Implemented (awaiting on-device test)
2026-05-10 17:59:19
PLAN/S0145_bugfix-print-rejected-context-not-activity.md
spec
Add strategic spec S0145 - print rejected on Samsung One UI / Android 13+ (context not recognised as Activity), follow-up to S0016
2026-05-10 18:01:08
PLAN/S0146_bugfix-player-stale-initial-file-path-reload.md
spec
Add strategic spec S0146 - player re-opens with stale initial file path after move/delete, redundant directory reload
2026-05-10 18:02:09
app_v2/src/main/res/values/strings.xml
google_drive_sign_in_unavailable,google_sign_in_cancelled
Localized the remaining Google sign-in Add Resource error copy across EN/RU/UK
2026-05-10 18:02:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
Replaced hardcoded Google sign-in error messages with localized friendly copy
2026-05-10 18:02:13
PLAN/S0139_bugfix-smb-credentials-empty-share-name.md
spec
S0139 BlockNeedUserTest -> Partial: field session 2026-05-10 confirms backfill/self-heal works but write-side prevention unmet (import path still inserts empty shareName); decide A/B before Verified
2026-05-10 18:03:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt
BrowseDialogHelper
Replaced raw batch-rename failure text with localized generic copy
2026-05-10 18:07:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
Stopped browse toasts from falling back to raw file-operation error text
2026-05-10 18:09:23
scripts/utils/set-android-string.ps1
set-android-string.ps1
Fixed Android apostrophe escaping and avoided the PowerShell automatic-variable warning
2026-05-10 18:09:39
scripts/utils/set-android-string.ps1
set-android-string.ps1
Renamed the regex match variable to avoid analyzer confusion with PowerShell automatic variables
2026-05-10 18:10:02
scripts/utils/set-android-string.ps1
set-android-string.ps1
Replaced Regex.Matches with Match/NextMatch iteration to silence analyzer noise
2026-05-10 18:11:12
scripts/spec_catalog/validate.ps1
tooling
validate.ps1: Journal->FS missing-file is now WARN (hygiene debt) for Verified/Implemented specs, FAIL only for in-flight ones; both buckets reported separately
2026-05-10 18:14:19
PLAN/S0145_bugfix-print-rejected-context-not-activity/INDEX.md
spec-tech
Create tactical plan for S0145 (5 phases; Phase 02 blocked on Samsung field-log measurement)
2026-05-10 18:14:19
PLAN/S0145_bugfix-print-rejected-context-not-activity/PHASE_01__print-environment-probe.md
spec-tech
S0145 Phase 01: print-environment-probe
2026-05-10 18:14:19
PLAN/S0145_bugfix-print-rejected-context-not-activity/PHASE_02__direct-dispatch-fix.md
spec-tech
S0145 Phase 02: direct-dispatch-fix (blocked on research)
2026-05-10 18:14:19
PLAN/S0145_bugfix-print-rejected-context-not-activity/PHASE_03__system-print-fallback.md
spec-tech
S0145 Phase 03: system-print-fallback
2026-05-10 18:14:19
PLAN/S0145_bugfix-print-rejected-context-not-activity/PHASE_04__print-messages.md
spec-tech
S0145 Phase 04: print-messages
2026-05-10 18:14:19
PLAN/S0145_bugfix-print-rejected-context-not-activity/PHASE_05__docs-catalog-cleanup.md
spec-tech
S0145 Phase 05: docs-catalog-cleanup
2026-05-10 18:14:19
PLAN/S0145_bugfix-print-rejected-context-not-activity.md
spec-tech
S0145 Status -> Tactical
2026-05-10 18:17:16
PLAN/S0118_friendly-ui-copy-revision.md
spec-check
Audit S0118 -> Verified; PASS/WARN/FAIL 15/0/0
2026-05-10 18:17:16
PLAN/S0118_friendly-ui-copy-revision.md
spec-update
Align S0118 closure narrative and Last Audit with the restored Verified state
2026-05-10 18:17:16
PLAN/S0118_friendly-ui-copy-revision/INDEX.md
spec-update
Align the S0118 Completion Gate with the 2026-05-10 Verified audit
2026-05-10 18:19:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
feature
S0145 Phase 01: enrich print-environment diagnostics - context-chain inspector, PrintManager class, Build.VERSION.RELEASE/INCREMENTAL; S0145: prefix on all print-failure WARN/ERROR logs; S0145 entry tag on printCurrentFile
2026-05-10 18:21:31
PLAN/S0145_bugfix-print-rejected-context-not-activity/INDEX.md
spec-dev
S0145 Phase 01 ✅ Done (print-environment-probe); build PASS; strategic Status -> In Progress
2026-05-10 18:22:48
PLAN/S0146_bugfix-player-stale-initial-file-path-reload/INDEX.md
spec-all
Create tactical plan for S0146
2026-05-10 18:22:49
PLAN/S0146_bugfix-player-stale-initial-file-path-reload/PHASE_01__cache-scope-and-stale-path.md
spec-tech
Phase 01: cache-scope-and-stale-path
2026-05-10 18:22:49
PLAN/S0146_bugfix-player-stale-initial-file-path-reload/PHASE_02__position-fallback.md
spec-tech
Phase 02: position-fallback
2026-05-10 18:22:49
PLAN/S0146_bugfix-player-stale-initial-file-path-reload/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-10 18:22:49
PLAN/S0146_bugfix-player-stale-initial-file-path-reload.md
spec-tech
Status -> Tactical
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/core/util/SettingsIntentLauncher.kt
debug-tags
Add BlockNeedUserTest debug verification tag (S0043/S0047/S0051/S0054 backfill)
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
debug-tags
Add BlockNeedUserTest debug verification tag (S0043/S0047/S0051/S0054 backfill)
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PauseAwareLoadControl.kt
debug-tags
Add BlockNeedUserTest debug verification tag (S0043/S0047/S0051/S0054 backfill)
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/TsPacketFormatDetector.kt
debug-tags
Add BlockNeedUserTest debug verification tag (S0043/S0047/S0051/S0054 backfill)
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LocalPlaybackHelper.kt
debug-tags
Add BlockNeedUserTest debug verification tag (S0043/S0047/S0051/S0054 backfill)
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt
debug-tags
Add BlockNeedUserTest debug verification tag (S0043/S0047/S0051/S0054 backfill)
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
debug-tags
Add BlockNeedUserTest debug verification tag (S0043/S0047/S0051/S0054 backfill)
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceVirtualCoordinator.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationCoordinator.kt
debug-tags
Remove stale Timber.d Sxxxx debug tags for Verified specs S0104/S0105/S0110/S0130
2026-05-10 18:23:54
CLAUDE.md
docs
Rewrite Debug Verification Tags section: tag lifecycle bound to BlockNeedUserTest (insert on entry, remove on exit)
2026-05-10 18:23:54
.claude/agents/android-rd-specialist.md
agent-def
Update spec-ticket rules 6-7: debug tags iff BlockNeedUserTest
2026-05-10 18:23:54
.claude/commands/spec.md
skill
Primitive path: tags inserted because ticket enters BlockNeedUserTest
2026-05-10 18:23:54
.claude/commands/spec-tech.md
skill
Primitive path: tags inserted because ticket enters BlockNeedUserTest
2026-05-10 18:23:54
.claude/commands/spec-dev.md
skill
Insert debug tags only when flipping ticket to BlockNeedUserTest; never at Implemented
2026-05-10 18:23:54
.claude/commands/spec-check.md
skill
Remove all Timber.d Sxxxx tags on verdict status flip out of BlockNeedUserTest; add debug-tag audit invariant
2026-05-10 18:23:54
.claude/commands/spec-update.md
skill
Re-open BlockNeedUserTest: delete tags, flip status to Tactical/Approved/Draft (step 1b)
2026-05-10 18:23:54
.claude/commands/spec-fix.md
skill
Add fix category: delete stale Timber.d Sxxxx tags whose spec is not BlockNeedUserTest
2026-05-10 18:23:54
.claude/commands/spec-all.md
skill
Insert tags when pipeline sets BlockNeedUserTest; delete tags on resume out of BlockNeedUserTest
2026-05-10 18:23:54
.claude/commands/spec-arc.md
skill
Archive removes any leftover Timber.d Sxxxx tags (step 3)
2026-05-10 18:23:54
.claude/commands/spec-test-device.md
skill
Grep captured log for Sxxxx: tags as primary code-path-exercised signal
2026-05-10 18:26:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt
PlayerMediaFilesLoader
S0146: fix stale initial path scope mismatch + smart position fallback
2026-05-10 18:26:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerPrintFallbackManager.kt
feature
S0145 Phase 03: new PlayerPrintFallbackManager - system ‘Send to print’ chooser fallback when the print dialog cannot be opened (FileProvider + ACTION_SEND)
2026-05-10 18:26:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
feature
S0145 Phase 03: wire PlayerPrintFallbackManager into all print-failure branches (dispatchPrint catches + null, printImage catch) via showPrintFailedSnackbar; thread sourceName/mimeType through printPdf/printImage/printText/dispatchPrint
2026-05-10 18:26:44
app_v2/src/main/res/values/strings.xml
feature
S0145 Phase 03: add print_share_chooser_title, print_fallback_to_share (EN)
2026-05-10 18:26:44
app_v2/src/main/res/values-ru/strings.xml
feature
S0145 Phase 03: add print_share_chooser_title, print_fallback_to_share (RU)
2026-05-10 18:26:44
app_v2/src/main/res/values-uk/strings.xml
feature
S0145 Phase 03: add print_share_chooser_title, print_fallback_to_share (UK)
2026-05-10 18:27:49
.claude/commands/log-reader.md
skill
Recognise Sxxxx: debug verification probes in logs: report which spec probes fired, cross-ref status, flag stale
2026-05-10 18:27:49
.github/prompts/log-reader.prompt.md
prompt
Recognise Sxxxx: debug verification probes in logs (mirror of /log-reader skill)
2026-05-10 18:28:15
.github/prompts/log-reader.prompt.md
log-reader.prompt
Resolved prompt diagnostics: deprecated frontmatter, autonomy conflict, and reading strategy ambiguity
2026-05-10 18:28:58
PLAN/S0145_bugfix-print-rejected-context-not-activity/INDEX.md
spec-dev
S0145 Phase 03 ✅ Done (system-print-fallback); build PASS; 2/5 phases done - Phase 02 still ⛔ blocked on Samsung field log
2026-05-10 18:28:58
dev/CATALOG/app_v2.jsonl
catalog
S0145 Phase 03: rescan app_v2 (998 files); PlayerPrintFallbackManager added with role + status=new
2026-05-10 18:29:17
PLAN/S0146_bugfix-player-stale-initial-file-path-reload.md
spec-check
Audit S0146 -> Verified; PASS/WARN/FAIL 10/0/0
2026-05-10 18:29:23
PLAN/S0146_bugfix-player-stale-initial-file-path-reload.md
spec-all
Pipeline Verified: S0146
2026-05-10 18:29:42
.github/prompts/ui-clarify.prompt.md
ui-clarify.prompt
Resolved prompt diagnostics: deprecated frontmatter, checklist overload, and ambiguous hard rule
2026-05-10 18:33:42
.github/prompts/spec.prompt.md
spec.prompt
Fix prompt diagnostics for deprecated frontmatter, argument validation, and constraint clarity
2026-05-10 18:35:18
.github/prompts/spec-update.prompt.md
spec-update.prompt
Fix prompt diagnostics for deprecated frontmatter, status rules, and unreadable-target handling
2026-05-10 18:40:53
PLAN/S0138_bugfix-glide-cancellation-log-noise/INDEX.md
spec-tech
Create tactical plan for S0138
2026-05-10 18:40:54
PLAN/S0138_bugfix-glide-cancellation-log-noise/PHASE_01__suppress-cancellation.md
spec-tech
Phase 01: suppress-cancellation
2026-05-10 18:40:55
PLAN/S0138_bugfix-glide-cancellation-log-noise/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-10 18:40:56
PLAN/S0138_bugfix-glide-cancellation-log-noise.md
spec-tech
Status -> Tactical and add tactical plan link
2026-05-10 18:41:22
PLAN/S0138_bugfix-glide-cancellation-log-noise/INDEX.md
spec-dev
Status -> In progress
2026-05-10 18:41:23
PLAN/S0138_bugfix-glide-cancellation-log-noise/PHASE_01__suppress-cancellation.md
spec-dev
Phase 01 -> In Progress
2026-05-10 18:42:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
AdapterThumbnailLoader
Suppress expected Glide throttle cancellation in network thumbnail listeners
2026-05-10 18:44:05
PLAN/S0138_bugfix-glide-cancellation-log-noise/INDEX.md
spec-dev
Mark tactical plan done after implementation
2026-05-10 18:44:06
PLAN/S0138_bugfix-glide-cancellation-log-noise/PHASE_01__suppress-cancellation.md
spec-dev
Phase 01 complete
2026-05-10 18:44:07
PLAN/S0138_bugfix-glide-cancellation-log-noise/PHASE_02__docs-catalog-cleanup.md
spec-dev
Phase 02 complete
2026-05-10 18:44:09
PLAN/S0138_bugfix-glide-cancellation-log-noise.md
spec-dev
Status -> Implemented
2026-05-10 18:47:51
.github/prompts/spec-dev.prompt.md
spec-dev.prompt
Fix prompt diagnostics for deprecated frontmatter, hard-stop clarity, and grouped constraints
2026-05-10 18:50:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
SettingsViewModel.importSzaResources
Derive SMB shareName from path during XML credential import
2026-05-10 18:50:22
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
ImportSettingsUseCase
Preserve or derive SMB shareName when importing settings credentials
2026-05-10 19:10:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/UrlInTextDetector.kt
UrlInTextDetector
S0140: extract and dedupe multiple shared URLs
2026-05-10 19:10:23
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
S0140: add batch entrypoint for shared URL lists
2026-05-10 19:10:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0140: route multi-URL shared text into batch auto-download
2026-05-10 19:10:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
WebViewAuthDialogFragment
S0140: disable empty auth saves and show sign-in hint
2026-05-10 19:10:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthViewModel.kt
WebViewAuthViewModel
S0140: ignore empty auth session saves
2026-05-10 19:10:23
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
AuthSessionRepositoryImpl
S0140: prune empty auth sessions and no-op empty saves
2026-05-10 19:10:23
app_v2/src/main/res/layout/dialog_webview_auth.xml
dialog_webview_auth
S0140: add WebView auth sign-in hint row
2026-05-10 19:10:23
app_v2/src/main/res/layout-land/dialog_webview_auth.xml
dialog_webview_auth
S0140: mirror WebView auth sign-in hint in landscape
2026-05-10 19:10:23
app_v2/src/main/res/values/strings_s0140.xml
strings_s0140
S0140: add EN auth UX strings
2026-05-10 19:10:23
app_v2/src/main/res/values-ru/strings_s0140.xml
strings_s0140
S0140: add RU auth UX strings
2026-05-10 19:10:23
app_v2/src/main/res/values-uk/strings_s0140.xml
strings_s0140
S0140: add UK auth UX strings
2026-05-10 19:11:31
scripts/check_strings_localized.ps1
check_strings_localized
Scan all strings*.xml files when auditing locale parity
2026-05-10 19:14:14
app_v2/src/main/java/com/sza/fastmediasorter/data/link/StructuredMediaSniffer.kt
StructuredMediaSniffer
S0140: add JSON-LD and oEmbed structured media harvesting
2026-05-10 19:14:14
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlMediaCandidate.kt
HtmlMediaCandidate
S0140: prioritize structured-data candidate sources
2026-05-10 19:14:14
app_v2/src/main/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicy.kt
CandidateSelectionPolicy
S0140: refresh structured-data selection rule comments
2026-05-10 19:14:14
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
HtmlPageExtractionStrategy
S0140: merge structured-media candidates before static HTML harvest
2026-05-10 19:14:14
app_v2/src/test/java/com/sza/fastmediasorter/data/link/StructuredMediaSnifferTest.kt
StructuredMediaSnifferTest
S0140: add pure-JVM tests for JSON-LD and oEmbed harvesting
2026-05-10 19:18:30
PLAN/S0140_extend-market-url-coverage.md
S0140
Advance strategic spec to In Progress and link tactical plan
2026-05-10 19:18:30
PLAN/S0140_extend-market-url-coverage/INDEX.md
spec-tech
Create tactical index for S0140
2026-05-10 19:18:30
PLAN/S0140_extend-market-url-coverage/PHASE_01__auth-share-polish.md
spec-tech
Capture landed auth/share S0140 phase
2026-05-10 19:18:30
PLAN/S0140_extend-market-url-coverage/PHASE_02__structured-standards.md
spec-tech
Capture landed structured-standards S0140 phase
2026-05-10 19:18:30
PLAN/S0140_extend-market-url-coverage/PHASE_03__dynamic-extractor.md
spec-tech
Describe blocked dynamic extractor S0140 phase
2026-05-10 19:18:30
PLAN/S0140_extend-market-url-coverage/PHASE_04__docs-catalog-cleanup.md
spec-tech
Track docs and verification state for S0140
2026-05-10 19:18:30
docs/FEATURES.md
FEATURES
Document landed S0140 URL-download improvements in EN
2026-05-10 19:18:30
docs/FEATURES_RU.md
FEATURES
Document landed S0140 URL-download improvements in RU
2026-05-10 19:18:30
docs/FEATURES_UK.md
FEATURES
Document landed S0140 URL-download improvements in UK
2026-05-10 19:18:52
docs/FEATURES_RU.md
FEATURES
Localize S0140 feature bullet title in RU
2026-05-10 19:18:52
docs/FEATURES_UK.md
FEATURES
Localize S0140 feature bullet title in UK
2026-05-10 19:32:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
S0140: continue strategy chain after NotFound so dynamic fallback can run
2026-05-10 19:32:33
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
LinkAutoDownloadCoordinatorTest
S0140: add fallback regression test for html-to-dynamic strategy order
2026-05-10 19:33:06
.claude/ .github/
agents+skills
Sync Claude (.claude/commands,.claude/agents) and Copilot (.github/prompts,.github/agents) instruction sets: reconcile 15 command/prompt pairs (bodies now identical modulo frontmatter), add 4 missing Copilot prompts (catalog,quick,spec-arc,spec-test-device) and 4 missing Claude commands (ui-clarify,caveman,caveman-commit,caveman-review), mirror agents both ways (3 specialized agents into .claude/agents, android-rd-specialist into .github/agents), fix LOC limit 1000->1500 in Copilot agents, add /catalog //quick //spec-arc //spec-test-device routing rows to copilot-instructions.md
2026-05-10 19:40:15
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
AppSettings
S0140: add persisted soft login-wall heuristic toggle
2026-05-10 19:40:16
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
SettingsRepositoryImpl
S0140: persist login-wall heuristic setting in DataStore
2026-05-10 19:40:17
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
BackupData
S0140: add backup-safe login-wall heuristic flag
2026-05-10 19:40:18
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
BackupMapper
S0140: map login-wall heuristic flag through backup restore
2026-05-10 19:40:20
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
HtmlPageExtractionStrategy
S0140: detect soft login walls and reuse AuthRequired path
2026-05-10 19:41:10
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
S0140: add headless WebView fallback for JS-rendered media discovery
2026-05-10 19:41:11
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
LinkDownloadModule
S0140: bind dynamic URL extraction strategy into link pipeline
2026-05-10 19:41:12
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistry.kt
LinkExtractionRegistry
S0140: order dynamic strategy after html in canonical registry
2026-05-10 19:41:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
S0140: surface analyzing-page progress and allow html-to-dynamic fallback
2026-05-10 19:41:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadProgressDialog.kt
LinkAutoDownloadProgressDialog
S0140: show dedicated analyzing-page progress state
2026-05-10 19:41:15
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistryTest.kt
LinkExtractionRegistryTest
S0140: assert dynamic strategy order after html
2026-05-10 19:41:16
app_v2/src/main/res/values/strings_s0140.xml
strings_s0140
S0140: add EN analyzing-page progress copy
2026-05-10 19:41:17
app_v2/src/main/res/values-ru/strings_s0140.xml
strings_s0140
S0140: add RU analyzing-page progress copy
2026-05-10 19:41:18
app_v2/src/main/res/values-uk/strings_s0140.xml
strings_s0140
S0140: add UK analyzing-page progress copy
2026-05-10 19:41:28
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
LinkAutoDownloadCoordinatorTest
S0140: cover html-to-dynamic fallback when first strategy returns NotFound
2026-05-10 19:42:21
docs/FEATURES.md
FEATURES
S0140: document dynamic WebView extraction and soft login-wall behavior in EN features list
2026-05-10 19:42:22
docs/FEATURES_RU.md
FEATURES_RU
S0140: document dynamic WebView extraction and soft login-wall behavior in RU features list
2026-05-10 19:42:25
docs/FEATURES_UK.md
FEATURES_UK
S0140: document dynamic WebView extraction and soft login-wall behavior in UK features list
2026-05-10 19:43:26
PLAN/S0140_extend-market-url-coverage/INDEX.md
S0140 INDEX
S0140: sync tactical index with landed Phase 03 runtime work and remaining blockers
2026-05-10 19:43:27
PLAN/S0140_extend-market-url-coverage/PHASE_03__dynamic-extractor.md
S0140 PHASE_03
S0140: mark dynamic extractor runtime steps done while keeping research/build blockers open
2026-05-10 19:43:29
PLAN/S0140_extend-market-url-coverage/PHASE_04__docs-catalog-cleanup.md
S0140 PHASE_04
S0140: note follow-up feature inventory update after runtime slice landed
2026-05-10 19:44:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
WebViewAuthDialogFragment
S0141: remove BlockNeedUserTest Timber.d tag - device test passed, status Verified
2026-05-10 19:44:09
PLAN/S0141_bugfix-webview-auth-dialog-zero-size.md
spec-all
Pipeline Verified: S0141 bugfix-webview-auth-dialog-zero-size
2026-05-10 19:54:08
app_v2/src/main/res/values/strings.xml
S0145 Phase04
Reword error_print_unavailable + print_fallback_to_share to friendly CTA copy (EN)
2026-05-10 19:54:08
app_v2/src/main/res/values-ru/strings.xml
S0145 Phase04
Reword error_print_unavailable + print_fallback_to_share (RU)
2026-05-10 19:54:08
app_v2/src/main/res/values-uk/strings.xml
S0145 Phase04
Reword error_print_unavailable + print_fallback_to_share (UK)
2026-05-10 22:46:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
spec-update S0145
Removed Timber.d(‘S0145: printCurrentFile’) tag; S0145 re-opened Tactical from BlockNeedUserTest
2026-05-10 22:49:31
PLAN/S0145_bugfix-print-rejected-context-not-activity.md
spec-update S0145
Strategic spec: status Tactical, §6.1/§6.2 resolved from field log 2026-05-10
2026-05-10 22:49:31
PLAN/S0145_bugfix-print-rejected-context-not-activity/INDEX.md
spec-update S0145
INDEX: Phase 02 unblocked, blockers log updated with field log findings
2026-05-10 22:49:31
PLAN/S0145_bugfix-print-rejected-context-not-activity/PHASE_02__direct-dispatch-fix.md
spec-update S0145
Phase 02 steps re-authored: ContextThemeWrapper ruled out, ActivityPrintContextWrapper approach
2026-05-10 22:51:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
S0144
Fix currentCookies(): pass full https:// URL to CookieManager.getCookie() - bare hostname silently returns null on Chromium WebView; save button was always disabled after Instagram login
2026-05-10 22:53:44
PLAN/S0136_bugfix-glide-disk-cache-not-persisting.md
spec-update S0136
Strategic spec: §6 items resolved from field logs; D1 (cache key drift) chosen
2026-05-10 22:53:44
PLAN/S0136_bugfix-glide-disk-cache-not-persisting/INDEX.md
spec-update S0136
INDEX: Phase 02 unblocked, D1 branch selected, blockers log updated
2026-05-10 22:53:44
PLAN/S0136_bugfix-glide-disk-cache-not-persisting/PHASE_02__fix.md
spec-update S0136
Phase 02: D1 fix steps authored (NetworkFileData key diagnosis + stabilisation)
2026-05-10 22:53:44
app_v2/src/main/java/com/sza/fastmediasorter/utils/GlideCacheStats.kt
spec-update S0136
Removed Timber.d(‘S0136:’) tag; S0136 re-opened Tactical
2026-05-10 22:53:44
app_v2/src/main/java/com/sza/fastmediasorter/core/util/CacheStatusHelper.kt
spec-update S0136
Removed Timber.d(‘S0136:’) tag
2026-05-10 22:53:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
spec-update S0136
Removed Timber.d(‘S0136:’) tag
2026-05-10 22:53:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
spec-update S0136
Removed Timber.d(‘S0136:’) tag
2026-05-10 22:53:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCacheHelper.kt
spec-update S0136
Removed Timber.d(‘S0136:’) tag
2026-05-10 22:53:44
app_v2/src/main/java/com/sza/fastmediasorter/di/GlideAppModule.kt
spec-update S0136
Removed Timber.d(‘S0136:’) tag
2026-05-10 22:55:10
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MigrateS0059UseCase.kt
spec-fix stale-tags
Removed stale S0059: prefix from Timber.i tags (spec Implemented)
2026-05-10 22:55:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-fix stale-tags
Removed stale Timber.d(‘S0107:’) tag (spec In Progress)
2026-05-10 22:55:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerImageLoadingCallbackImpl.kt
spec-fix stale-tags
Removed stale Timber.d(‘S0107:’) tag
2026-05-10 22:55:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
spec-fix stale-tags
Removed stale Timber.d(‘S0107:’) tag
2026-05-10 22:55:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
spec-fix stale-tags
Removed 2 stale Timber.d(‘S0107:’) tags
2026-05-10 22:58:23
docs/FEATURES.md
S0145 Phase05
Extend Print bullet: Samsung One UI / Android 13+ fallback to share menu
2026-05-10 22:58:23
docs/FEATURES_RU.md
S0145 Phase05
Extend Print bullet (RU): Samsung One UI fallback to share
2026-05-10 22:58:23
docs/FEATURES_UK.md
S0145 Phase05
Extend Print bullet (UK): Samsung One UI fallback to share
2026-05-10 23:02:52
dev/CATALOG/app_v2.jsonl
S0145 Phase05
Rescan app_v2 catalog (1000 files) after Phase 03/05 - PlayerPrintFallbackManager role verified
2026-05-10 23:02:52
dev/CATALOG/app_v2.md
S0145 Phase05
Regenerate app_v2.md catalog markdown
2026-05-10 23:06:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt
ProvisionDefaultResourcesUseCase
Fix: idempotent path-based check instead of isNotEmpty() to repair partial provisioning after viewModelScope cancellation on first launch
2026-05-10 23:06:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
MainViewModel
Fix: wrap provisioning calls in withContext(NonCancellable) to prevent viewModelScope cancellation from interrupting predefined resource creation during WelcomeActivity launch
2026-05-10 23:06:00
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCaseTest.kt
ProvisionDefaultResourcesUseCaseTest
Update tests: new idempotent provisioning semantics, add regression tests for partial provisioning repair
2026-05-10 23:06:09
PLAN/S0147_bugfix-sftp-stale-session-inputstream-closed.md
spec
Add strategic spec S0147 for bugfix-sftp-stale-session-inputstream-closed
2026-05-10 23:09:09
PLAN/S0147_bugfix-sftp-stale-session-inputstream-closed/INDEX.md
spec-tech
Create tactical plan for S0147
2026-05-10 23:09:09
PLAN/S0147_bugfix-sftp-stale-session-inputstream-closed/PHASE_01__stale-session-retry.md
spec-tech
Phase 01: stale-session-retry
2026-05-10 23:09:09
PLAN/S0147_bugfix-sftp-stale-session-inputstream-closed/PHASE_02__docs-catalog-cleanup.md
spec-tech
Phase 02: docs-catalog-cleanup
2026-05-10 23:09:09
PLAN/S0147_bugfix-sftp-stale-session-inputstream-closed.md
spec-tech
Status -> Tactical
2026-05-10 23:10:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt
spec-check S0145
Remove S0145 diagnostic traces: Timber.w entry tag, printEnvDiagnostics(), contextChainDiagnostics(); clean up Timber.e S0145: prefixes; remove Build/PackageManager imports
2026-05-10 23:10:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerPrintFallbackManager.kt
spec-check S0145
Remove Timber.w S0145 entry trace; clean up Timber.e S0145: prefix in catch
2026-05-10 23:10:49
PLAN/S0145_bugfix-print-rejected-context-not-activity.md
spec-check S0145
Audit S0145 -> Verified; PASS 16/WARN 0/FAIL 0; Last Audit block written; debug tags removed: 0 Timber.d; diagnostic traces removed
2026-05-10 23:19:19
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
S0147
Detect dead JSch transport (inputstream is closed), force session invalidation + single retry
2026-05-10 23:19:19
dev/CATALOG/app_v2.jsonl
catalog
Regen after S0147 SftpConnectionPool change
2026-05-10 23:20:53
PLAN/S0147_bugfix-sftp-stale-session-inputstream-closed.md
spec-all
Pipeline BlockNeedUserTest: S0147
2026-05-10 23:26:01
scripts/utils/batch-set-android-string.ps1
batch-set-android-string
Added batch string update utility from JSON source
2026-05-10 23:26:04
scripts/utils/check-typo-lint.ps1
check-typo-lint
Expanded code quality checks to global scope (Log.* and println detection)
2026-05-10 23:26:07
scripts/utils/README.md
README
Updated utility documentation with new string batch script
2026-05-11 00:30:27
app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkExceptions.kt
NetworkExceptions
Add WifiRequiredException subclass of NetworkConnectionLostException for pre-connection Wi-Fi gate failures
2026-05-11 00:30:27
app_v2/src/main/java/com/sza/fastmediasorter/core/network/NetworkReachabilityGate.kt
NetworkReachabilityGate
requireWifi() now throws WifiRequiredException instead of generic NetworkConnectionLostException
2026-05-11 00:30:27
app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapper.kt
NetworkErrorMessageMapper
Map WifiRequiredException -> error_wifi_required_smb before generic connection-lost branch
2026-05-11 00:30:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt
BrowseLoadingAuxManager
resolveFriendlyBrowseErrorRes: type-check WifiRequiredException first to show Wi-Fi required message in browse error state
2026-05-11 00:30:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
BrowseViewModel
resolveFriendlyBrowseErrorRes: same WifiRequiredException type-check so tvErrorMessage in errorStateView is accurate
2026-05-11 00:30:27
app_v2/src/main/res/values/strings.xml
strings EN/RU/UK
Add error_wifi_required_smb string in all 3 locales
2026-05-11 00:33:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
WelcomeActivity
Add Network Sources tile to welcome page 1 (4th card); add File Search tile to extras page 5 (14th card, closes uneven row)
2026-05-11 00:39:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler.FileOperationCallback
Add sourceFilePath param to onBatchDeletePermissionRequired to carry source path through batch delete dialog flow
2026-05-11 00:39:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
PlayerLifecycleManager
Fix bug: batch delete callback attributed deletion to current (next) file instead of original moved file; add pendingBatchDeleteFilePath field and storePendingBatchDeleteFilePath()
2026-05-11 00:39:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Store sourceFilePath before launching batch delete dialog to avoid race with optimistic navigation
2026-05-11 00:39:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity.batchDeletePermissionLauncher
Remove currentFile?.path from handleBatchDeleteResult call - path is now stored in lifecycleManager before dialog launch
2026-05-11 01:41:07
PLAN/S0148_bugfix-smb-playback-watchdog-cascade.md
spec
Add strategic spec S0148 for SMB playback watchdog fail-fast cascade (field log 2026-05-11)
2026-05-11 01:42:06
PLAN/S0149_enh-sftp-permission-denied-message.md
spec
Add strategic spec S0149 for SFTP permission-denied error messaging
2026-05-11 01:42:50
PLAN/S0150_bugfix-sftp-listfiles-cancellation-logged-as-error.md
spec
Add strategic spec S0150 for SFTP listFiles cancellation logged as error
2026-05-11 01:44:28
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
spec
Add strategic spec S0151 for Instagram/Threads link extraction + auth offer + threads.com host
2026-05-11 01:45:11
PLAN/S0061_bugfix-smb-stale-connection-invalidation.md
spec
Cross-ref S0148 (playback watchdog fail-fast cascade) in S0061 relations
2026-05-11 01:45:11
PLAN/S0052_bugfix-sftp-datasource-log-spam.md
spec
Cross-ref S0150 (listFiles cancellation logged as error) in S0052 relations
2026-05-11 01:45:11
PLAN/S0144_fix-link-download-auth-ux.md
spec
Cross-ref S0151 (Instagram/Threads extraction + re-auth offer) in S0144 relations
2026-05-11 01:51:00
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
spec-tech
S0150: treat listing-scope cancellation as non-error (no E-level log)
2026-05-11 01:51:00
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SftpOperationStrategy.kt
spec-tech
S0150: rethrow CancellationException in listFiles instead of logging as error
2026-05-11 01:51:53
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbPlaybackConnectionTracker.kt
S0148
Attempt-scoped SMB playback watchdog lockout: blocks retry of same stalled file, escalates to server-wide only after repeated stalls
2026-05-11 01:51:54
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
S0148
Pass media-item URI to playback watchdog tracker for attempt-scoped fail-fast
2026-05-11 01:51:54
PLAN/S0148_bugfix-smb-playback-watchdog-cascade.md
spec-tech
S0148 implemented directly (primitive); resolve §6 items; Status → BlockNeedUserTest
2026-05-11 01:52:21
PLAN/S0150_bugfix-sftp-listfiles-cancellation-logged-as-error.md
spec-tech
S0150: primitive - implemented directly; Status -> BlockNeedUserTest
2026-05-11 01:52:44
dev/CATALOG/app_v2.jsonl
catalog
Rescan after S0148 (SmbPlaybackConnectionTracker, SmbDataSource)
2026-05-11 01:56:14
PLAN/S0149_enh-sftp-permission-denied-message/INDEX.md
spec-tech
Create tactical plan for S0149
2026-05-11 01:56:15
PLAN/S0149_enh-sftp-permission-denied-message/PHASE_01__status-classifier.md
spec-tech
Phase 01: status-classifier
2026-05-11 01:56:16
PLAN/S0149_enh-sftp-permission-denied-message/PHASE_02__message-contract.md
spec-tech
Phase 02: message-contract
2026-05-11 01:56:17
PLAN/S0149_enh-sftp-permission-denied-message/PHASE_03__result-surfaces.md
spec-tech
Phase 03: result-surfaces
2026-05-11 01:56:18
PLAN/S0149_enh-sftp-permission-denied-message/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-11 01:56:19
PLAN/S0149_enh-sftp-permission-denied-message.md
spec-tech
Status → Tactical
2026-05-11 02:00:26
docs/FEATURES.md
FEATURES
Cleaned up and shortened document to remove marketing fluff, keeping practical applications
2026-05-11 02:00:26
docs/FEATURES_RU.md
FEATURES_RU
Cleaned up and shortened document to remove marketing fluff, keeping practical applications
2026-05-11 02:00:27
docs/FEATURES_UK.md
FEATURES_UK
Cleaned up and shortened document to remove marketing fluff, keeping practical applications
2026-05-11 02:12:08
PLAN/S0151_instagram-threads-link-extraction-and-auth/INDEX.md
spec-tech
Create tactical plan for S0151
2026-05-11 02:12:08
PLAN/S0151_instagram-threads-link-extraction-and-auth/PHASE_01__threads-domain.md
spec-tech
Phase 01: threads-domain
2026-05-11 02:12:08
PLAN/S0151_instagram-threads-link-extraction-and-auth/PHASE_02__preview-only-signal.md
spec-tech
Phase 02: preview-only-signal
2026-05-11 02:12:08
PLAN/S0151_instagram-threads-link-extraction-and-auth/PHASE_03__social-auth-ux.md
spec-tech
Phase 03: social-auth-ux
2026-05-11 02:12:08
PLAN/S0151_instagram-threads-link-extraction-and-auth/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-11 02:12:08
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
spec-tech
Status Approved -> Tactical
2026-05-11 02:19:31
docs/FEATURES.md
Documentation
Re-condensed feature lists (EN, RU, UK) by ~30% per user request
2026-05-11 02:54:00
PLAN/S0152_bugfix-moveinprogress-not-reset-after-batchdelete.md
S0152
New spec: moveInProgress not reset after PermissionRequired branch in FileOperationsHandler - blocks all subsequent move operations
2026-05-11 02:54:01
PLAN/S0153_bugfix-standalone-delete-illegal-argument-exception.md
S0153
New spec: StandalonePlayer delete crashes with IllegalArgumentException when content URI is not a specific MediaStore item URI
2026-05-11 02:54:01
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt,app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt,app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SftpOperationStrategy.kt,app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt
S0147,S0148,S0150
Remove BlockNeedUserTest Timber.d probe tags - S0147/S0148/S0150 all verified via on-device testing
2026-05-11 02:58:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt
S0153
Fix delete crash: narrow createDeleteRequest to MediaStore-specific URIs only; non-MediaStore content:// URIs fall through to contentResolver.delete()
2026-05-11 03:00:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
S0152
Reset moveInProgress on Failure/AuthenticationRequired/PermissionRequired branches in performMove and performMoveToPath
2026-05-11 03:06:49
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt
S0151 phase-01
Add threads.com entry and isVideoFirstHost()
2026-05-11 03:06:49
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/UrlExtractionStrategy.kt
S0151
Add OpenResult.SocialPreviewOnly
2026-05-11 03:06:49
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
S0151
Signal SocialPreviewOnly for video-first social hosts
2026-05-11 03:06:49
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
S0151
Signal SocialPreviewOnly for video-first social hosts
2026-05-11 03:06:49
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0151
Handle SocialPreviewOnly fall-through, add Result.Failed.SocialPreviewOnly
2026-05-11 03:06:49
app_v2/src/main/res/values/strings.xml
S0151
Add s0151_* strings (EN)
2026-05-11 03:06:49
app_v2/src/main/res/values-ru/strings.xml
S0151
Add s0151_* strings (RU)
2026-05-11 03:06:49
app_v2/src/main/res/values-uk/strings.xml
S0151
Add s0151_* strings (UK)
2026-05-11 03:06:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
S0151
Handle SocialPreviewOnly UX: auth/reauth dialog with retry
2026-05-11 03:08:11
docs/FEATURES.md
S0151
Document Instagram/Threads real-media extraction (EN)
2026-05-11 03:08:11
docs/FEATURES_RU.md
S0151
Document Instagram/Threads real-media extraction (RU)
2026-05-11 03:08:11
docs/FEATURES_UK.md
S0151
Document Instagram/Threads real-media extraction (UK)
2026-05-11 03:44:33
PLAN/S0154_player-file-operation-queue.md
spec
Add strategic spec S0154 for ad-hoc player file-operation queue
2026-05-11 03:46:46
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
spec-update
Refinement (claude-opus-4-7, focus: completeness, consistency) - field log 20260511_032209: recent-session anti-nag nuance, research item 6.4, criteria 11.7-11.8
2026-05-11 03:53:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
S0152: remove Timber debug tags, spec verified
2026-05-11 03:53:24
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
spec-check
Audit S0151 -> Partial; PASS/WARN/FAIL 5/5/0; removed 4 stale S0151 debug tags
2026-05-11 03:53:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
spec-check
Remove stale Timber.d S0151 debug tag (status no longer BlockNeedUserTest)
2026-05-11 03:53:24
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-check
Remove stale Timber.d S0151 debug tag
2026-05-11 03:53:24
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
spec-check
Remove stale Timber.d S0151 debug tag
2026-05-11 03:53:25
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
spec-check
Remove stale Timber.d S0151 debug tag
2026-05-11 03:54:44
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
spec-fix
Annotate Last Audit (S0151): 1 pre-resolved (stale debug tags), 4 follow-ups (tactical sync, reel extraction, recent-session anti-nag, post-refusal message)
2026-05-11 03:54:45
PLAN/S0154_player-file-operation-queue/INDEX.md
spec-tech
Create tactical plan for S0154
2026-05-11 03:54:45
PLAN/S0154_player-file-operation-queue/PHASE_01__fileop-snapshot-model.md
spec-tech
S0154 Phase 01: fileop-snapshot-model
2026-05-11 03:54:45
PLAN/S0154_player-file-operation-queue/PHASE_02__fileop-queue-and-consumer.md
spec-tech
S0154 Phase 02: fileop-queue-and-consumer
2026-05-11 03:54:45
PLAN/S0154_player-file-operation-queue/PHASE_03__player-handler-enqueue.md
spec-tech
S0154 Phase 03: player-handler-enqueue
2026-05-11 03:54:45
PLAN/S0154_player-file-operation-queue/PHASE_04__rename-enqueue.md
spec-tech
S0154 Phase 04: rename-enqueue
2026-05-11 03:54:46
PLAN/S0154_player-file-operation-queue/PHASE_05__permission-and-empty-list.md
spec-tech
S0154 Phase 05: permission-and-empty-list
2026-05-11 03:54:46
PLAN/S0154_player-file-operation-queue/PHASE_06__error-projection-and-progress.md
spec-tech
S0154 Phase 06: error-projection-and-progress
2026-05-11 03:54:46
PLAN/S0154_player-file-operation-queue/PHASE_07__docs-catalog-cleanup.md
spec-tech
S0154 Phase 07: docs-catalog-cleanup
2026-05-11 03:54:46
PLAN/S0154_player-file-operation-queue.md
spec-tech
S0154 Status -> Tactical
2026-05-11 04:01:29
PLAN/S0151_instagram-threads-link-extraction-and-auth/INDEX.md
spec-update
Tactical refinement (force-locked): mirror strategic 6.4 into Pre-Implementation Blockers; Phase 03 step count 3->4
2026-05-11 04:01:29
PLAN/S0151_instagram-threads-link-extraction-and-auth/PHASE_03__social-auth-ux.md
spec-update
Add Step 03.4 (skip re-login offer for recently-used session); update Objective/Prerequisites/Handoff
2026-05-11 04:01:29
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
spec-update
Record force-locked override reason in Revision History; mark proposal P-1 Accepted
2026-05-11 04:06:47
app_v2/src/main/res/values/strings.xml
strings
Add %1s placeholder to all_copy/move_operations_failed; add error_ftp_connection_dropped string
2026-05-11 04:06:47
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Add %1s placeholder to all_copy/move_operations_failed; add error_ftp_connection_dropped string
2026-05-11 04:06:47
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Add %1s placeholder to all_copy/move_operations_failed; add error_ftp_connection_dropped string
2026-05-11 04:06:47
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpFileOperationHandler.kt
SftpFileOperationHandler
Classify FTP socket NPE as connection-dropped instead of leaking raw Java exception text
2026-05-11 04:06:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
showFailureError: use formatArgs directly as detail to avoid redundant localized wrapper prefix
2026-05-11 04:06:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
onShowError: replace multiline Toast with AlertDialog when details are present
2026-05-11 04:15:35
PLAN/S0155_link-auth-multi-account.md
spec
Add strategic spec S0155 for link-download multi-account (per-host multiple accounts, account picker, per-account re-auth, settings management)
2026-05-11 04:19:52
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
spec-update
Strategic refinement (force-locked): resolve research items 6.1 diag / 6.2 (v) / 6.3 (b) / 6.4 (no freshness); rewrite 3.1.5, 5.1 pillar C, 7 risks, 11.7-11.11; link S0155
2026-05-11 04:19:52
PLAN/S0151_instagram-threads-link-extraction-and-auth/INDEX.md
spec-update
Reshape Pre-Implementation Blockers: split 6.1 arch/diag, resolve 6.2/6.3/6.4 inline
2026-05-11 04:19:52
PLAN/S0151_instagram-threads-link-extraction-and-auth/PHASE_03__social-auth-ux.md
spec-update
Rewrite Step 03.4: drop isSessionRecentlyApplied; revise reauth dialog wording to be explanatory
2026-05-11 04:19:53
PLAN/S0155_link-auth-multi-account.md
spec
Approve S0155 (link-download multi-account)
2026-05-11 04:25:24
app_v2/src/main/java/com/sza/fastmediasorter/util/AppErrorNotifier.kt
AppErrorNotifier
Fix Snackbar background on Material3/Android 12+: use backgroundTintList instead of setBackgroundColor
2026-05-11 04:32:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
Extracted share and cache download flow into BrowseShareOperationsHelper to bring the manager under 700 LOC
2026-05-11 04:32:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseShareOperationsHelper.kt
BrowseShareOperationsHelper
Added helper for browse share intent preparation and network-to-cache copy flow with progress UI
2026-05-11 04:32:06
PLAN/S0002_decompose-giant-files.md
S0002
Recorded Wave 45 and refreshed current line-count / priority tables after BrowseFileOperationsManager extraction
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account/INDEX.md
spec-tech
Create tactical plan for S0155
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account/PHASE_01__store-multi-account.md
spec-tech
Phase 01: store-multi-account
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account/PHASE_02__session-context.md
spec-tech
Phase 02: session-context
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account/PHASE_03__account-naming.md
spec-tech
Phase 03: account-naming
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account/PHASE_04__share-flow-integration.md
spec-tech
Phase 04: share-flow-integration
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account/PHASE_05__named-reauth.md
spec-tech
Phase 05: named-reauth
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account/PHASE_06__settings-accounts-ui.md
spec-tech
Phase 06: settings-accounts-ui
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup
2026-05-11 04:39:33
PLAN/S0155_link-auth-multi-account.md
spec-tech
Status -> Tactical
2026-05-11 09:45:49
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStore.kt
S0155 Phase 01
Add multi-account (host, accountId) storage with legacy migration
2026-05-11 09:45:49
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/AuthSessionRepository.kt
S0155 Phase 01
Add AuthAccountDomain and multi-account repository interface
2026-05-11 09:45:49
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
S0155 Phase 01
Implement multi-account repository methods
2026-05-11 09:47:03
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadSessionContext.kt
S0155 Phase 02
New singleton: holds pre-loaded cookies for the active download account
2026-05-11 09:47:03
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadCookieJar.kt
S0155 Phase 02
Use session context cookies when active; fall back to deprecated store.loadFor
2026-05-11 09:47:03
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
S0155 Phase 02
Inject LinkDownloadSessionContext; use context cookies in injectSavedCookies
2026-05-11 09:47:13
PLAN/S0151_instagram-threads-link-extraction-and-auth/PHASE_02__preview-only-signal.md
spec-update
Pre-dev alignment: Step 02.2 -> isPreviewSensitiveHost (6.3 b); add Step 02.6 S0151-diag log; step count 5->6
2026-05-11 09:47:13
PLAN/S0151_instagram-threads-link-extraction-and-auth/INDEX.md
spec-update
Pre-dev alignment: Phase 02 step count, 6.2(b) gating note, change log
2026-05-11 09:47:14
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
spec-update
Revision History: record third tactical pass (pre-dev alignment)
2026-05-11 09:48:43
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/AccountNameHintExtractor.kt
S0155 Phase 03
New utility: best-effort account name hint from WebView cookies
2026-05-11 09:48:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthViewModel.kt
S0155 Phase 03
Add multi-account saveSession(host, accountId, displayName, cookies) overload
2026-05-11 09:48:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
S0155 Phase 03
Post-login Name this account dialog; generate UUID accountId
2026-05-11 09:48:43
app_v2/src/main/res/values/strings_s0155.xml
S0155 Phase 03
EN strings for S0155 account naming, picker, re-auth, settings
2026-05-11 09:48:43
app_v2/src/main/res/values-ru/strings_s0155.xml
S0155 Phase 03
RU strings for S0155
2026-05-11 09:48:43
app_v2/src/main/res/values-uk/strings_s0155.xml
S0155 Phase 03
UK strings for S0155
2026-05-11 09:54:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Extracted playback controls and lifecycle handling into dedicated helpers to bring the manager under 700 LOC
2026-05-11 09:54:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlaybackControlsHelper.kt
VideoPlaybackControlsHelper
Added helper for stereo/color adjustments, playback controls, track selection, and audio format access
2026-05-11 09:54:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt
VideoPlayerLifecycleHelper
Added helper for pause-resume lifecycle handoff and release-destroy cleanup
2026-05-11 09:54:10
PLAN/S0002_decompose-giant-files.md
S0002
Recorded Wave 46 and advanced the decomposition loop to PlayerMediaLoaderManager
2026-05-11 09:56:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
spec-all S0155 phase-04
Step 04.3: integrate AccountSelectionManager; fix KnownAuthResource type; add accountId param to processLinkAutoDownload
2026-05-11 09:56:43
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-all S0155 phase-04
Step 04.4: inject LinkDownloadSessionContext+EncryptedCookieStore; add accountId to handle(); add applySessionContext(); SocialPreviewOnly extended with accountId/accountDisplayName; hasAnySession
2026-05-11 09:56:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/helpers/AccountSelectionManager.kt
spec-all S0155 phase-04
Step 04.2: new AccountSelectionManager - 0/1/>=2 account selection before download
2026-05-11 09:58:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
spec-all S0155 phase-05
Step 05.1: named reauth dialog using s0155reauth * strings; per-account dismissal check/mark
2026-05-11 09:58:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-all S0155 phase-05
Step 05.2: markLastUsed called after successful single-account download
2026-05-11 10:02:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListViewModel.kt
S0155 Phase 06
Expose accountGroups flow; add deleteAccount, updateDisplayName, addAccount VM methods
2026-05-11 10:02:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthAccountGroupAdapter.kt
S0155 Phase 06
New adapter: per-host account group list with delete/rename/relogin/add-account
2026-05-11 10:02:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
S0155 Phase 06
Switch to AuthAccountGroupAdapter; wire delete/rename/relogin/add-account flows
2026-05-11 10:02:18
app_v2/src/main/res/layout/item_auth_host_group.xml
S0155 Phase 06
New layout: host group header row
2026-05-11 10:02:19
app_v2/src/main/res/layout/item_auth_account.xml
S0155 Phase 06
New layout: per-account row with relogin/rename/delete buttons
2026-05-11 10:02:19
app_v2/src/main/res/layout/item_auth_session.xml
S0155 Phase 06
Soft-deprecated: replaced by item_auth_host_group.xml + item_auth_account.xml
2026-05-11 10:05:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlaybackControlsHelper.kt
VideoPlaybackControlsHelper
Qualified VideoPlayerManager brightness extension calls after helper extraction to restore compile-safe delegation
2026-05-11 10:05:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt
VideoPlayerLifecycleHelper
Restored releaseMediaPlayer and coroutine cancel imports after lifecycle helper extraction
2026-05-11 10:05:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/helpers/AccountSelectionManager.kt
AccountSelectionManager
Fixed nullable lastUsedIndex fallback so debug-build validation can complete
2026-05-11 10:06:09
docs/FEATURES.md
S0155 Phase 07
Add multi-account authorization feature description
2026-05-11 10:06:09
docs/FEATURES_RU.md
S0155 Phase 07
RU: multi-account authorization feature
2026-05-11 10:06:09
docs/FEATURES_UK.md
S0155 Phase 07
UK: multi-account authorization feature
2026-05-11 10:06:09
dev/CATALOG/app_v2.jsonl
S0155 Phase 07
Catalog regen: new classes from S0155; AuthSessionAdapter removed
2026-05-11 10:06:10
PLAN/S0155_link-auth-multi-account/INDEX.md
S0155 Phase 07
Tactical plan complete - all 7 phases done
2026-05-11 10:09:02
PLAN/S0155_link-auth-multi-account.md
spec-all S0155
Pipeline BlockNeedUserTest: all 7 phases implemented, build PASS, awaiting on-device verification
2026-05-11 11:48:25
PLAN/S0151_instagram-threads-link-extraction-and-auth/PHASE_02__preview-only-signal.md
spec-update
Step 02.2 -> per-entry previewOnlyMeansLogin flag (6.3, owner choice): true for Instagram/Threads/TikTok/X, false for image-first registry hosts
2026-05-11 11:48:25
PLAN/S0151_instagram-threads-link-extraction-and-auth/INDEX.md
spec-update
6.3 inline resolution: per-entry previewOnlyMeansLogin flag
2026-05-11 11:56:47
docs/RECEIVING_LINKS_RU.md
docs
Add RECEIVING_LINKS_RU.md: full architecture reference for the link-receiving and download pipeline (S0003/S0116/S0144/S0151/S0155)
2026-05-11 12:01:02
docs/RECEIVING_LINKS_RU.md
RECEIVING_LINKS_RU.md
Added S0140 batch download logic and fixed UX result table discrepancies
2026-05-11 12:13:55
PLAN/S0156_nolegal-capability-surface-audit.md
spec
Add strategic spec S0156 for full noLegal capability audit and open questions
2026-05-11 12:57:48
PLAN/S0157_link-auth-offer-and-dismissal-ux.md
spec
Add strategic spec S0157 for link-auth-offer-and-dismissal-ux
2026-05-11 14:06:01
PLAN/S0157_link-auth-offer-and-dismissal-ux/INDEX.md
spec-tech
Create tactical plan for S0157
2026-05-11 14:06:02
PLAN/S0157_link-auth-offer-and-dismissal-ux/PHASE_01__store-type-field-migration.md
spec-tech
Phase 01: store-type-field-migration
2026-05-11 14:06:02
PLAN/S0157_link-auth-offer-and-dismissal-ux/PHASE_02__repository-dismissed-api.md
spec-tech
Phase 02: repository-dismissed-api
2026-05-11 14:06:02
PLAN/S0157_link-auth-offer-and-dismissal-ux/PHASE_03__universal-offer-dismiss-rewire.md
spec-tech
Phase 03: universal-offer-dismiss-rewire
2026-05-11 14:06:14
PLAN/S0157_link-auth-offer-and-dismissal-ux/PHASE_04__mandatory-naming-default.md
spec-tech
Phase 04: mandatory-naming-default
2026-05-11 14:06:14
PLAN/S0157_link-auth-offer-and-dismissal-ux/PHASE_05__dismissed-records-in-settings.md
spec-tech
Phase 05: dismissed-records-in-settings
2026-05-11 14:06:15
PLAN/S0157_link-auth-offer-and-dismissal-ux/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-05-11 14:06:15
PLAN/S0157_link-auth-offer-and-dismissal-ux.md
spec-tech
S0157 status to Tactical
2026-05-11 14:11:24
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStore.kt
S0157-phase01
Add type field, saveAsDismissed, hasDismissedRecord, active-only listAccounts, S0157 one-time wipe migration
2026-05-11 14:15:30
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/AuthSessionRepository.kt
S0157-phase02
Add isDismissed to AuthAccountDomain; markDismissed/isDismissedForHost/observeAccountsAll interface methods
2026-05-11 14:15:30
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
S0157-phase02
Implement dismissed API; fix refreshFlows to preserve dismissed records; add accountFlowAll
2026-05-11 14:23:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
S0157 Phase 03 Step 03.5
Rewrite presentSocialPreviewOnly: 3-button dialog, isDismissedForHost, markDismissed, remove AuthOfferDismissalStore refs
2026-05-11 14:23:28
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/AuthOfferDismissalStore.kt
S0157 Phase 03 Step 03.6
Delete AuthOfferDismissalStore; dismissal now stored in EncryptedCookieStore via AuthSessionRepository
2026-05-11 14:27:44
PLAN/S0156_nolegal-capability-surface-audit.md
spec-update
Integrate owner answers into S0156 and resolve §6 policy decisions
2026-05-11 14:27:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
S0157-phase04
Mandatory account name pre-fill: use default when hint absent
2026-05-11 14:35:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListViewModel.kt
S0157-phase05
Use observeAccountsAll() to include dismissed records in settings list
2026-05-11 14:35:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthAccountGroupAdapter.kt
S0157-phase05
Render dismissed rows: s0157_dismissed_label, hide relogin/rename, always show lastUsedAt
2026-05-11 14:35:30
PLAN/S0156_nolegal-capability-surface-audit.md
spec-update
Add seed research directions for images, video, music, documents, archives, network, and internet content
2026-05-11 14:38:26
PLAN/S0156_nolegal-capability-surface-audit.md
S0156_Spec
Добавлены дополнительные векторы для аудита noLegal-возможностей (P2P, AI, Headless, Root, Vaults, NAS).
2026-05-11 14:44:43
PLAN/S0156_nolegal-capability-surface-audit.md
S0156
Extended noLegal research surface with 10 new seed search areas: Podcasts/RSS, IPTV/live-streams, Camera RAW/HDR, Comics/e-book formats, on-device DLNA media server, synchronized lyrics, acoustic fingerprinting/perceptual deduplication, spatial audio DSP, self-hosted media backend integration, deep automation/Tasker hooks
2026-05-11 14:45:32
docs/FEATURES.md
S0157-phase06
Add 3-button auth offer and dismissed-record settings bullets
2026-05-11 14:45:32
docs/FEATURES_RU.md
S0157-phase06
RU mirror - auth offer UX update
2026-05-11 14:45:32
docs/FEATURES_UK.md
S0157-phase06
UK mirror - auth offer UX update
2026-05-11 14:45:50
docs/RECEIVING_LINKS_RU.md
S0157-phase06
Update auth offer and dismissal model documentation
2026-05-11 14:46:00
PLAN/S0156_nolegal-capability-surface-audit.md
S0156_Spec
Добавлен чеклист-план для аудита в документ.
2026-05-11 14:48:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
S0157-BlockNeedUserTest
Insert S0157 debug tag at offerAuthThenDownload entry
2026-05-11 14:48:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
S0157-BlockNeedUserTest
Insert S0157 debug tag at presentSocialPreviewOnly entry
2026-05-11 14:48:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
S0157-BlockNeedUserTest
Insert S0157 debug tag at mandatory account name dialog entry
2026-05-11 14:48:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
S0157-BlockNeedUserTest
Insert S0157 debug tag at settings auth list entry
2026-05-11 14:54:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
spec-check
Remove S0157 debug tag (Verified transition)
2026-05-11 14:54:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
spec-check
Remove S0157 debug tag (Verified transition)
2026-05-11 14:54:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
spec-check
Remove S0157 debug tag (Verified transition)
2026-05-11 14:54:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
spec-check
Remove S0157 debug tag (Verified transition)
2026-05-11 14:54:20
PLAN/S0157_link-auth-offer-and-dismissal-ux.md
spec-check
Audit S0157 → Verified; PASS 22/WARN 0/FAIL 0
2026-05-11 14:56:53
PLAN/S0156_nolegal-capability-surface-audit.md
S0156
Added Pillar F: rules for per-direction research output documents - mandatory sections, three recommendation tiers (easy/hard/aspirational), iterative accumulation model, follow-up spec birth rules
2026-05-11 15:28:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperation.kt
PlayerFileOperation
Added queued player file operation snapshot model and shared network-aware mapper for S0154
2026-05-11 15:30:52
PLAN/S0158_player-large-buttons.md
spec
Add strategic spec S0158 for ad-hoc player-large-buttons
2026-05-11 15:31:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperationEvent.kt
PlayerFileOperationEvent
Added queue event model for queued player file operations in S0154
2026-05-11 15:31:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperationQueue.kt
PlayerFileOperationQueue
Added sequential queued player file operation consumer with permission pause-resume for S0154
2026-05-11 15:36:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Added session-scoped player file operation queue ownership and shutdown for S0154
2026-05-11 15:36:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Wired queued player file operations and placeholder queue event handling for S0154
2026-05-11 15:36:45
PLAN/S0159_file-ops-overflow-menu.md
spec
Add strategic spec S0159 for file-ops-overflow-menu
2026-05-11 15:36:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
Replaced move-delete in-progress guards with snapshot enqueue flow for S0154
2026-05-11 15:41:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/AuthSessionRepository.kt
AuthSessionRepository
Added account-scoped dismissal API for reactive S0157 reauth flow
2026-05-11 15:41:37
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStore.kt
EncryptedCookieStore
Stored account-scoped dismissed markers without overwriting active auth sessions
2026-05-11 15:41:38
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
AuthSessionRepositoryImpl
Applied S0157 dismissal granularity and activity-first auth settings ordering
2026-05-11 15:41:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
Made reactive SocialPreviewOnly dismissal account-scoped when accountId is known
2026-05-11 15:41:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListViewModel.kt
AuthSessionsListViewModel
Preserved repository-driven auth group ordering for S0157 settings UX
2026-05-11 15:41:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthAccountLabels.kt
AuthAccountLabels
Added shared visible-label helper to hide dismissed storage ids in settings UI
2026-05-11 15:41:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthAccountGroupAdapter.kt
AuthAccountGroupAdapter
Rendered named dismissed rows without leaking raw dismissal ids
2026-05-11 15:41:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
AuthSessionsListFragment
Aligned delete confirmation labels with row-visible auth labels
2026-05-11 15:41:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
WebViewAuthDialogFragment
Used S0157 default account name consistently during WebView auth save
2026-05-11 15:42:00
app_v2/src/test/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenterTest.kt
LinkAutoDownloadResultPresenterTest
Covered account-scoped reactive dismissal behavior for S0157
2026-05-11 15:42:01
app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListViewModelTest.kt
AuthSessionsListViewModelTest
Covered settings ordering and dismissed label fallback for S0157
2026-05-11 15:42:24
PLAN/S0160_resource-ops-overflow-toggle.md
spec
Add strategic spec S0160 for resource-ops-overflow-toggle
2026-05-11 15:47:30
app_v2/src/test/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenterTest.kt
LinkAutoDownloadResultPresenterTest
Removed stale SocialPreviewOnly previewUrl constructor argument from S0157 presenter test
2026-05-11 15:51:26
PLAN/S0159_file-ops-overflow-menu.md
spec
S0159: resolve all 3 open questions, update §2/§5/§6/§9/§11
2026-05-11 15:56:45
PLAN/S0160_resource-ops-overflow-toggle.md
spec
S0160: resolve §6 Q1+Q2, add move_up/move_down to overflow menu
2026-05-11 16:06:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperation.kt
PlayerFileOperation
S0154 add immutable queued player operation snapshot model
2026-05-11 16:06:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperationEvent.kt
PlayerFileOperationEvent
S0154 add queued player operation event model
2026-05-11 16:06:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperationQueue.kt
PlayerFileOperationQueue
S0154 add sequential queued player file operation executor
2026-05-11 16:06:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
S0154 enqueue move delete actions instead of dropping them behind in-progress flags
2026-05-11 16:06:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
S0154 wire queued player file operation events to optimistic player UX
2026-05-11 16:06:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
S0154 own player queue lifecycle and resume queued permission requests
2026-05-11 16:06:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
PlayerDialogHelper
S0154 collect rename requests for queue-backed player rename flow
2026-05-11 16:06:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/RenameDialog.kt
RenameDialog
S0154 add name-only callback for player queue-backed rename
2026-05-11 16:07:30
app_v2/src/main/res/values/strings.xml
strings.xml
S0154 add queued player operation retry and exit-warning strings
2026-05-11 16:07:31
app_v2/src/main/res/values-ru/strings.xml
values-ru/strings.xml
S0154 add queued player operation retry and exit-warning strings
2026-05-11 16:07:31
app_v2/src/main/res/values-uk/strings.xml
values-uk/strings.xml
S0154 add queued player operation retry and exit-warning strings
2026-05-11 16:07:31
docs/FEATURES.md
FEATURES
S0154 document queued player file actions
2026-05-11 16:07:31
docs/FEATURES_RU.md
FEATURES_RU
S0154 document queued player file actions
2026-05-11 16:07:32
docs/FEATURES_UK.md
FEATURES_UK
S0154 document queued player file actions
2026-05-11 16:07:32
dev/CATALOG/app_v2.jsonl
CATALOG
S0154 regenerate app_v2 catalog after new player fileops classes
2026-05-11 16:07:32
dev/CATALOG/app_v2.md
CATALOG
S0154 regenerate rendered app_v2 catalog after new player fileops classes
2026-05-11 16:19:15
FileOperationsHandler.kt (root)
temp/FileOperationsHandler_stale_*.kt
S0154 audit: moved stale pre-queue FileOperationsHandler from root to temp (ROOT_CLEANLINESS violation)
2026-05-11 16:19:19
app_v2/src/main/res/values*/strings.xml
PlayerLifecycleManager.kt
S0154 fix: convert dialog_player_exit_pending_queue_message to plurals (EN one/other, RU one/few/many/other, UK one/few/many/other); update getQuantityString call
2026-05-11 16:21:53
dev/CATALOG/app_v2.jsonl
AuthSessionRepositoryImpl
Catalog sync: refresh functions list after S0157 phase-02 (markDismissed, observeAccountsAll etc. now indexed)
2026-05-11 16:22:01
PLAN/S0157_link-auth-offer-and-dismissal-ux.md
spec-check
Re-audit S0157 -> Verified; PASS 22/WARN 0/FAIL 0; catalog WARN fixed (functions re-indexed)
2026-05-11 17:01:14
PLAN/S0025_smb-fast-fail.md
spec-arc
Archive S0025 (smb-fast-fail) -> temp/done/
2026-05-11 17:02:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
WebViewAuthDialogFragment
S0155 bug fix: add RESULT_ACCOUNT_ID to result-bundle; pass accountId from harvestAndDismiss so caller gets non-null accountId after first auth
2026-05-11 17:02:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0155 bug fix: read RESULT_ACCOUNT_ID from WebViewAuthDialogFragment result-bundle instead of hardcoded null; removes accountId=null on first auth
2026-05-11 17:02:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
S0155: remove stale Timber.d debug tag (status moved from BlockNeedUserTest to Partial)
2026-05-11 17:02:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
AuthSessionsListFragment
S0155: remove stale Timber.d debug tag (status moved from BlockNeedUserTest to Partial)
2026-05-11 17:02:56
PLAN/S0155_link-auth-multi-account.md
S0155
Add Last Audit: accountId=null bug confirmed+fixed; single-account auto-select passes; status BlockNeedUserTest->Partial
2026-05-11 17:02:56
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
S0151
Update Last Audit: Instagram reel UnrecognizedInputFormatException (HLS manifest); Threads partial success; §6.1 architecture resolved
2026-05-11 17:03:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0155 bug fix: read RESULT_ACCOUNT_ID from WebViewAuthDialogFragment result-bundle instead of hardcoded null
2026-05-11 17:03:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
S0155: remove stale debug tag
2026-05-11 17:03:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
AuthSessionsListFragment
S0155: remove stale debug tag
2026-05-11 17:03:02
PLAN/S0155_link-auth-multi-account.md
S0155
Add Last Audit; status BlockNeedUserTest->Partial
2026-05-11 17:03:02
PLAN/S0151_instagram-threads-link-extraction-and-auth.md
S0151
Update Last Audit: Instagram reel unplayable (HLS manifest); §6.1 architecture resolved
2026-05-11 17:04:08
docs/FEATURES.md
S0035 Phase07 Step07.1
Restore missing Android 17 local network permission bullet in section 15 Network Sources
2026-05-11 17:04:08
docs/FEATURES_RU.md
S0035 Phase07 Step07.1
Restore missing Android 17 local network permission bullet in section 15 (RU)
2026-05-11 17:04:09
docs/FEATURES_UK.md
S0035 Phase07 Step07.1
Restore missing Android 17 local network permission bullet in section 15 (UK)
2026-05-11 17:04:32
PLAN/S0035_android17-local-network-permission.md
spec-check
Audit S0035 -> Verified; PASS 26 / WARN 0 / FAIL 0 / MANUAL 8
2026-05-11 17:04:47
PLAN/S0035_android17-local-network-permission.md
spec-arc
Archive S0035 (android17-local-network-permission) -> temp/done/
2026-05-11 17:05:35
PLAN/S0022_bugfix-camera-capture-crash__audit_2026-04-30_2.md
spec-arc-sidecar
Archive S0022 sidecar audit/fix file -> temp/done/
2026-05-11 17:05:36
PLAN/S0022_bugfix-camera-capture-crash__audit_2026-04-30.md
spec-arc-sidecar
Archive S0022 sidecar audit/fix file -> temp/done/
2026-05-11 17:05:36
PLAN/S0022_bugfix-camera-capture-crash__fix_2026-04-30.md
spec-arc-sidecar
Archive S0022 sidecar audit/fix file -> temp/done/
2026-05-11 17:06:16
PLAN/S0037_resource-icon-ux-polish.md
spec-arc
Archive S0037 (resource-icon-ux-polish) -> temp/done/
2026-05-11 17:06:37
PLAN/S0044_settings-layout-compactness.md
spec-arc
Archive S0044 (settings-layout-compactness) -> temp/done/
2026-05-11 17:06:57
PLAN/S0045_per-resource-sort-type-memory.md
spec-arc
Archive S0045 (per-resource-sort-type-memory) -> temp/done/
2026-05-11 17:07:37
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
S0047 debug-tag cleanup
Remove stale S0047 BlockNeedUserTest Timber probe before archiving spec
2026-05-11 17:07:46
PLAN/S0047_bugfix-sftp-pool-broken-channel.md
spec-arc
Archive S0047 (bugfix-sftp-pool-broken-channel) -> temp/done/
2026-05-11 17:08:45
PLAN/S0048_info-dialog-extended-metadata.md
spec-arc
Archive S0048 (info-dialog-extended-metadata) -> temp/done/
2026-05-11 17:09:01
PLAN/S0049_bugfix-icon-pick-save-disabled.md
spec-arc
Archive S0049 (bugfix-icon-pick-save-disabled) -> temp/done/
2026-05-11 17:09:14
PLAN/S0050_player-black-screen-mode.md
spec-arc
Archive S0050 (player-black-screen-mode) -> temp/done/
2026-05-11 17:09:46
PLAN/S0051_bugfix-network-datasource-pause-cancel.md
spec-arc
Archive S0051 (bugfix-network-datasource-pause-cancel) -> temp/done/
2026-05-11 17:10:01
PLAN/S0052_bugfix-sftp-datasource-log-spam.md
spec-arc
Archive S0052 (bugfix-sftp-datasource-log-spam) -> temp/done/
2026-05-11 17:10:15
PLAN/S0053_bugfix-m2ts-bdmv-network-playback.md
spec-arc
Archive S0053 (bugfix-m2ts-bdmv-network-playback) -> temp/done/
2026-05-11 17:11:50
PLAN/S0056_smb-scan-slowness-investigation.md
spec-arc
Cancel and archive S0056 (smb-scan-slowness-investigation) -> temp/done/
2026-05-11 17:12:15
PLAN/S0055_diagnostic-noise-cleanup.md
spec-arc
Stop and archive S0055 (diagnostic-noise-cleanup) -> temp/done/ [was Implemented, skipped verification]
2026-05-11 17:14:05
PLAN/S0060_bugfix-smb-thumbnail-share-race.md
spec-arc
Stop and archive S0060 (bugfix-smb-thumbnail-share-race) -> temp/done/ [was Implemented, skipped verification]
2026-05-11 17:14:20
PLAN/S0061_bugfix-smb-stale-connection-invalidation.md
spec-arc
Stop and archive S0061 (bugfix-smb-stale-connection-invalidation) -> temp/done/ [was Implemented, skipped verification]
2026-05-11 17:14:35
PLAN/S0062_bugfix-speedtest-parse-end-of-string.md
spec-arc
Archive S0062 (bugfix-speedtest-parse-end-of-string) -> temp/done/
2026-05-11 17:14:48
PLAN/S0063_bugfix-thumbnail-avi-smb-mediametadataretriever.md
spec-arc
Archive S0063 (bugfix-thumbnail-avi-smb-mediametadataretriever) -> temp/done/
2026-05-11 17:15:13
PLAN/S0066_enh-network-transient-failure-classification-multi-protocol.md
spec-arc
Archive S0066 (enh-network-transient-failure-classification-multi-protocol) -> temp/done/
2026-05-11 17:15:37
PLAN/S0067_enh-network-stale-connection-invalidation-multi-protocol.md
spec-arc
Archive S0067 (enh-network-stale-connection-invalidation-multi-protocol) -> temp/done/
2026-05-11 17:16:07
PLAN/S0070_device-storage-info-settings.md
spec-arc
Archive S0070 (device-storage-info-settings) -> temp/done/
2026-05-11 17:16:26
PLAN/S0071_use-trash-setting.md
spec-arc
Stop and archive S0071 (use-trash-setting) -> temp/done/ [was Implemented, skipped verification]
2026-05-11 17:16:41
PLAN/S0072_downloads-auto-destination.md
spec-arc
Archive S0072 (downloads-auto-destination) -> temp/done/
2026-05-11 17:17:01
PLAN/S0073_player-copy-move-custom-path-button.md
spec-arc
Archive S0073 (player-copy-move-custom-path-button) -> temp/done/
2026-05-11 17:17:16
PLAN/S0074_copy-move-dialog-progress.md
spec-arc
Archive S0074 (copy-move-dialog-progress) -> temp/done/
2026-05-11 17:17:43
PLAN/S0079_bugfix-file-op-progress-dialog-landscape-npe.md
spec-arc
Archive S0079 (bugfix-file-op-progress-dialog-landscape-npe) -> temp/done/
2026-05-11 17:18:06
PLAN/S0083_bugfix-write-perm-api29.md
spec-arc
Archive S0083 (bugfix-write-perm-api29) -> temp/done/
2026-05-11 17:18:24
PLAN/S0084_bugfix-cache-subfolder-mismatch-restore.md
spec-arc
Archive S0084 (bugfix-cache-subfolder-mismatch-restore) -> temp/done/
2026-05-11 17:19:03
PLAN/S0086_bugfix-log-export-create-document-guard.md
spec-arc
Archive S0086 (bugfix-log-export-create-document-guard) -> temp/done/ [was Implemented, skipped verification]
2026-05-11 17:19:16
PLAN/S0087_bugfix-cover-art-glide-404-log-spam.md
spec-arc
Archive S0087 (bugfix-cover-art-glide-404-log-spam) -> temp/done/
2026-05-11 17:19:46
PLAN/S0089_bugfix-save-frame-feedback.md
spec-arc
Archive S0089 (bugfix-save-frame-feedback) -> temp/done/
2026-05-11 17:20:02
PLAN/S0090_bugfix-settings-default-credentials-input.md
spec-arc
Archive S0090 (bugfix-settings-default-credentials-input) -> temp/done/
2026-05-11 17:20:20
PLAN/S0091_bugfix-file-op-progress-startup-race.md
spec-arc
Archive S0091 (bugfix-file-op-progress-startup-race) -> temp/done/
2026-05-11 17:20:34
PLAN/S0092_bugfix-sftp-range-read-retry-overflow.md
spec-arc
Archive S0092 (bugfix-sftp-range-read-retry-overflow) -> temp/done/
2026-05-11 17:20:54
PLAN/S0094_player-move-currently-playing.md
spec-arc
Archive S0094 (player-move-currently-playing) -> temp/done/
2026-05-11 17:21:08
PLAN/S0095_integration-test-review.md
spec-arc
Archive S0095 (integration-test-review) -> temp/done/
2026-05-11 17:21:36
PLAN/S0097_gms-update-once-settings-link.md
spec-arc
Archive S0097 (gms-update-once-settings-link) -> temp/done/
2026-05-11 17:21:48
PLAN/S0098_bugfix-smb-precheck-false-fail.md
spec-arc
Archive S0098 (bugfix-smb-precheck-false-fail) -> temp/done/
2026-05-11 17:22:18
PLAN/S0100_mic-recording-in-browse.md
spec-arc
Archive S0100 (mic-recording-in-browse) -> temp/done/
2026-05-11 17:23:55
PLAN/S0059_predefined-recent-downloads-all-files.md
spec-check
Audit S0059 -> Verified; PASS/WARN/FAIL 11/0/0
2026-05-11 17:24:14
PLAN/S0059_predefined-recent-downloads-all-files.md
spec-arc
Archive S0059 (predefined-recent-downloads-all-files) -> temp/done/
2026-05-11 17:29:36
PLAN/S0101_unified-permission-onboarding.md
spec-arc
Archive S0101 (unified-permission-onboarding) -> temp/done/
2026-05-11 17:29:49
PLAN/S0102_spec-catalog-ergonomics.md
spec-arc
Archive S0102 (spec-catalog-ergonomics) -> temp/done/
2026-05-11 17:30:05
PLAN/S0103_player-top-bar-polish.md
spec-arc
Archive S0103 (player-top-bar-polish) -> temp/done/
2026-05-11 17:30:16
PLAN/S0104_playback-order-mode.md
spec-arc
Archive S0104 (playback-order-mode) -> temp/done/
2026-05-11 17:30:52
PLAN/S0108_welcome-language-picker.md
spec-arc
Archive S0108 (welcome-language-picker) -> temp/done/
2026-05-11 17:31:05
PLAN/S0109_bugfix-chromeos-textinput.md
spec-arc
Archive S0109 (bugfix-chromeos-textinput) -> temp/done/
2026-05-11 17:31:22
PLAN/S0110_bugfix-thumbnails-during-scroll.md
spec-arc
Archive S0110 (bugfix-thumbnails-during-scroll) -> temp/done/
2026-05-11 17:31:47
PLAN/S0113_sftp-pool-stability.md
spec-arc
Archive S0113 (sftp-pool-stability) -> temp/done/
2026-05-11 17:32:24
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt
KnownAuthResources
S0151 Phase02: add previewOnlyMeansLogin flag; TikTok/X.com added; rename isVideoFirstHost->isPreviewSensitiveHost
2026-05-11 17:32:34
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
HtmlPageExtractionStrategy
S0151: update isVideoFirstHost->isPreviewSensitiveHost; add BlockNeedUserTest debug tag
2026-05-11 17:32:34
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
S0151: update isVideoFirstHost->isPreviewSensitiveHost; add BlockNeedUserTest debug tag
2026-05-11 17:32:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
S0151: add S0151-diag permanent log, KnownAuthResources import, outcomeKindOf helper; add BlockNeedUserTest debug tag
2026-05-11 17:32:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
S0151: add BlockNeedUserTest debug tag in presentSocialPreviewOnly
2026-05-11 17:32:34
app_v2/src/main/res/values/strings.xml
strings.xml
S0151 Step03.4: update s0151_dialog_reauth_message EN to explanatory text with ‘different account’ context
2026-05-11 17:32:34
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
S0151 Step03.4: update s0151_dialog_reauth_message RU
2026-05-11 17:32:34
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml
S0151 Step03.4: update s0151_dialog_reauth_message UK
2026-05-11 17:32:34
docs/FEATURES.md
FEATURES.md
S0151 Phase04: add Instagram/Threads download bullet
2026-05-11 17:32:34
docs/FEATURES_RU.md
FEATURES_RU.md
S0151 Phase04: add Instagram/Threads download bullet RU
2026-05-11 17:32:34
docs/FEATURES_UK.md
FEATURES_UK.md
S0151 Phase04: add Instagram/Threads download bullet UK
2026-05-11 17:32:38
PLAN/spec-catalog.jsonl
spec-catalog
Reopen S0117 (url-media-downloader-nolegal-flavor) -> In Progress
2026-05-11 17:33:29
PLAN/S0127_image-player-draw-crop-immersive.md
spec-arc
Archive S0127 (image-player-draw-crop-immersive) -> temp/done/
2026-05-11 17:33:38
PLAN/S0128_activity-catalog.md
spec-arc
Archive S0128 (activity-catalog) -> temp/done/
2026-05-11 17:33:52
PLAN/S0129_bugfix-landscape-overflow-commands.md
spec-arc
Archive S0129 (bugfix-landscape-overflow-commands) -> temp/done/
2026-05-11 17:41:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
AdapterThumbnailLoader
S0136 Phase02+03: removed s0136PostFirstLoadDone AtomicBoolean and logGlideDiskCacheStatusOnce call (Phase 01 diagnostic residue)
2026-05-11 17:41:09
app_v2/src/main/java/com/sza/fastmediasorter/core/util/CacheStatusHelper.kt
CacheStatusHelper
S0136 Phase03: removed logGlideDiskCacheStatusOnce helper (Phase 01 diagnostic residue)
2026-05-11 17:41:12
app_v2/src/main/java/com/sza/fastmediasorter/utils/GlideCacheStats.kt
GlideCacheStats
S0136 Phase03: added permanent ‘GlideCacheStats: summary’ Timber.d regression-detection line to logStats()
2026-05-11 17:44:29
app_v2/src/main/res/layout/activity_auth_sessions.xml
MaterialToolbar
Add titleTextColor and navigationIconTint (?attr/colorOnPrimary) - was missing, causing pale-gray title on blue background
2026-05-11 17:44:29
app_v2/src/main/res/values-night/themes.xml
colorOnPrimary
Fix colorOnPrimary from black to white - blue_500 is same in both themes, white text provides proper contrast on #1976D2
2026-05-11 17:44:33
app_v2/src/main/res/values-night/themes.xml
colorOnPrimary
Fix colorOnPrimary from black to white - blue_500 is same in both themes, white text provides proper contrast on #1976D2
2026-05-11 17:47:42
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
LinkDownloadWorker
S0161 Phase01: new HiltWorker - background link download queue with foreground notification, result notification, SocialPreviewOnly sign-in action
2026-05-11 17:47:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0161 Phase02: replace blocking download with WorkManager enqueue; add EXTRA_REAUTH_URL handling in onCreate; remove resultPresenter + linkDownloadJob
2026-05-11 17:47:42
app_v2/src/main/res/values/strings.xml
strings.xml
S0161 Phase03: add link_download_notif_* strings EN (10 keys)
2026-05-11 17:47:42
app_v2/src/main/res/values-ru/strings.xml
strings-ru.xml
S0161 Phase03: add link_download_notif_* strings RU (10 keys)
2026-05-11 17:47:42
app_v2/src/main/res/values-uk/strings.xml
strings-uk.xml
S0161 Phase03: add link_download_notif_* strings UK (10 keys)
2026-05-11 17:47:42
docs/FEATURES.md
FEATURES.md
S0161 Phase04: add background link download queue bullet EN
2026-05-11 17:47:42
docs/FEATURES_RU.md
FEATURES_RU.md
S0161 Phase04: add background link download queue bullet RU
2026-05-11 17:47:42
docs/FEATURES_UK.md
FEATURES_UK.md
S0161 Phase04: add background link download queue bullet UK
2026-05-11 17:47:43
PLAN/S0161_link-download-background-queue.md
spec-catalog
S0161: create strategic spec, register in catalog
2026-05-11 17:48:42
dev/CATALOG/app_v2.jsonl
catalog
S0161: LinkDownloadWorker added to catalog (role=worker, status=new)
2026-05-11 17:48:51
dev/CATALOG/app_v2.jsonl
catalog
S0161: LinkDownloadWorker added (role=worker, status=new)
2026-05-11 18:01:01
PLAN/S0007_vr-hand-tracking.md
spec-arc
Archive S0007 (vr-hand-tracking) → temp/done/
2026-05-11 18:01:08
PLAN/S0015_bugfix-scheduled-ops-worker-freeze.md
spec-arc
Archive S0015 (bugfix-scheduled-ops-worker-freeze) → temp/done/
2026-05-11 18:01:12
PLAN/S0016_bugfix-document-print-manager-context.md
spec-arc
Archive S0016 (bugfix-document-print-manager-context) → temp/done/
2026-05-11 18:01:16
PLAN/S0017_bugfix-smb-scanner-metadata-exception.md
spec-arc
Archive S0017 (bugfix-smb-scanner-metadata-exception) → temp/done/
2026-05-11 18:01:20
PLAN/S0018_bugfix-vr-auto-immersive-route-broken.md
spec-arc
Archive S0018 (bugfix-vr-auto-immersive-route-broken) → temp/done/
2026-05-11 18:01:31
PLAN/S0028_*.md
spec-arc
Archive S0028 → temp/done/
2026-05-11 18:01:31
PLAN/S0033_*.md
spec-arc
Archive S0033 → temp/done/
2026-05-11 18:01:31
PLAN/S0034_*.md
spec-arc
Archive S0034 → temp/done/
2026-05-11 18:01:31
PLAN/S0036_*.md
spec-arc
Archive S0036 → temp/done/
2026-05-11 18:01:31
PLAN/S0039_*.md
spec-arc
Archive S0039 → temp/done/
2026-05-11 18:01:36
PLAN/S0040_*.md
spec-arc
Archive S0040 → temp/done/
2026-05-11 18:01:36
PLAN/S0057_*.md
spec-arc
Archive S0057 → temp/done/
2026-05-11 18:01:36
PLAN/S0058_*.md
spec-arc
Archive S0058 → temp/done/
2026-05-11 18:01:36
PLAN/S0068_*.md
spec-arc
Archive S0068 → temp/done/
2026-05-11 18:01:36
PLAN/S0069_*.md
spec-arc
Archive S0069 → temp/done/
2026-05-11 18:01:47
PLAN/S0096_*.md
spec-arc
Archive S0096 → temp/done/
2026-05-11 18:01:47
PLAN/S0105_*.md
spec-arc
Archive S0105 → temp/done/
2026-05-11 18:01:47
PLAN/S0111_*.md
spec-arc
Archive S0111 → temp/done/
2026-05-11 18:01:47
PLAN/S0112_*.md
spec-arc
Archive S0112 → temp/done/
2026-05-11 18:01:47
PLAN/S0114_*.md
spec-arc
Archive S0114 → temp/done/
2026-05-11 18:01:47
PLAN/S0115_*.md
spec-arc
Archive S0115 → temp/done/
2026-05-11 18:01:47
PLAN/S0116_*.md
spec-arc
Archive S0116 → temp/done/
2026-05-11 18:01:47
PLAN/S0118_*.md
spec-arc
Archive S0118 → temp/done/
2026-05-11 18:01:47
PLAN/S0120_*.md
spec-arc
Archive S0120 → temp/done/
2026-05-11 18:01:47
PLAN/S0130_*.md
spec-arc
Archive S0130 → temp/done/
2026-05-11 18:02:02
PLAN/S0150_*.md
spec-arc
Archive S0150 → temp/done/
2026-05-11 18:02:02
PLAN/S0152_*.md
spec-arc
Archive S0152 → temp/done/
2026-05-11 18:02:02
PLAN/S0157_*.md
spec-arc
Archive S0157 → temp/done/
2026-05-11 18:02:15
PLAN/S0135_*.md
spec-arc
Archive S0135 → temp/done/
2026-05-11 18:02:15
PLAN/S0156_*.md
spec-arc
Archive S0156 → temp/done/
2026-05-11 18:02:15
PLAN/S0158_*.md
spec-arc
Archive S0158 → temp/done/
2026-05-11 18:02:15
PLAN/S0159_*.md
spec-arc
Archive S0159 → temp/done/
2026-05-11 18:02:15
PLAN/S0160_*.md
spec-arc
Archive S0160 → temp/done/
2026-05-11 18:02:58
PLAN/S0029_*.md
spec-arc
Archive S0029 → temp/done/
2026-05-11 18:02:58
PLAN/S0064_*.md
spec-arc
Archive S0064 → temp/done/
2026-05-11 18:02:58
PLAN/S0085_*.md
spec-arc
Archive S0085 → temp/done/
2026-05-11 18:02:58
PLAN/S0136_*.md
spec-arc
Archive S0136 → temp/done/
2026-05-11 18:02:58
PLAN/S0138_*.md
spec-arc
Archive S0138 → temp/done/
2026-05-11 18:02:58
PLAN/S0153_*.md
spec-arc
Archive S0153 → temp/done/
2026-05-11 18:03:17
PLAN/S0020_*.md
spec-arc
Archive S0020 → temp/done/
2026-05-11 18:03:17
PLAN/S0021_*.md
spec-arc
Archive S0021 → temp/done/
2026-05-11 18:03:17
PLAN/S0023_*.md
spec-arc
Archive S0023 → temp/done/
2026-05-11 18:03:17
PLAN/S0024_*.md
spec-arc
Archive S0024 → temp/done/
2026-05-11 18:03:17
PLAN/S0027_*.md
spec-arc
Archive S0027 → temp/done/
2026-05-11 18:03:18
PLAN/S0076_*.md
spec-arc
Archive S0076 → temp/done/
2026-05-11 18:03:18
PLAN/S0077_*.md
spec-arc
Archive S0077 → temp/done/
2026-05-11 18:03:18
PLAN/S0081_*.md
spec-arc
Archive S0081 → temp/done/
2026-05-11 18:03:18
PLAN/S0088_*.md
spec-arc
Archive S0088 → temp/done/
2026-05-11 18:03:18
PLAN/S0093_*.md
spec-arc
Archive S0093 → temp/done/
2026-05-11 18:03:18
PLAN/S0131_*.md
spec-arc
Archive S0131 → temp/done/
2026-05-11 18:03:18
PLAN/S0137_*.md
spec-arc
Archive S0137 → temp/done/
2026-05-11 18:03:18
PLAN/S0139_*.md
spec-arc
Archive S0139 → temp/done/
2026-05-11 18:03:18
PLAN/S0141_*.md
spec-arc
Archive S0141 → temp/done/
2026-05-11 18:03:18
PLAN/S0143_*.md
spec-arc
Archive S0143 → temp/done/
2026-05-11 18:03:18
PLAN/S0144_*.md
spec-arc
Archive S0144 → temp/done/
2026-05-11 18:03:18
PLAN/S0145_*.md
spec-arc
Archive S0145 → temp/done/
2026-05-11 18:03:18
PLAN/S0146_*.md
spec-arc
Archive S0146 → temp/done/
2026-05-11 18:03:18
PLAN/S0147_*.md
spec-arc
Archive S0147 → temp/done/
2026-05-11 18:03:18
PLAN/S0148_*.md
spec-arc
Archive S0148 → temp/done/
2026-05-11 18:27:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0161 fix: silent account lookup on URL share (no auth dialog before download); EXTRA_REAUTH_URL now calls handleReAuthFromNotification (always shows WebView auth dialog on tap)
2026-05-11 18:27:27
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
LinkDownloadWorker
S0161 fix: inject AuthSessionRepository, IMPORTANCE_HIGH notifications (heads-up), check isDismissedForHost before sign-in notification
2026-05-11 18:28:06
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
LinkDownloadWorker
S0161 fix: inject AuthSessionRepository, IMPORTANCE_HIGH notifications (heads-up), check isDismissedForHost before sign-in notification
2026-05-11 18:30:27
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
LinkDownloadWorker
S0161 fix: remove setForeground/buildForegroundInfo - conflicts with setExpedited on Android 12+ (WakeLock SecurityException); expedited work is sufficient for short link downloads
2026-05-11 18:35:48
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpOperationFailure.kt
SftpOperationFailure
S0149 Phase 01: new typed SFTP failure classifier with SftpFailureCategory enum and fromThrowable() helper; maps SSH_FX_PERMISSION_DENIED (3) to PERMISSION_DENIED, others to GENERIC/TRANSIENT
2026-05-11 18:35:55
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SftpOperationStrategy.kt
SftpOperationStrategy
S0149 Phase 01: remove generic Exception wrappers in deleteFile and writeFile; SftpException with status code now flows unmodified to callers
2026-05-11 18:37:42
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpOperationMessageResolver.kt
SftpOperationMessageResolver
S0149 Phase 02: new resolver mapping SftpOperationFailure to string resource ids; covers access denied, server rejected, move-copy-ok-delete-failed
2026-05-11 18:37:42
app_v2/src/main/res/values/strings.xml
strings
S0149 Phase 02: add error_sftp_access_denied, error_sftp_server_rejected, error_sftp_move_copied_source_remains (EN)
2026-05-11 18:37:42
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0149 Phase 02: add error_sftp_access_denied, error_sftp_server_rejected, error_sftp_move_copied_source_remains (RU)
2026-05-11 18:37:42
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0149 Phase 02: add error_sftp_access_denied, error_sftp_server_rejected, error_sftp_move_copied_source_remains (UK)
2026-05-11 18:37:46
app_v2/src/main/res/values/strings.xml
strings
S0149 Phase 02: add error_sftp_access_denied, error_sftp_server_rejected, error_sftp_move_copied_source_remains (EN)
2026-05-11 18:37:46
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0149 Phase 02: add error_sftp_access_denied, error_sftp_server_rejected, error_sftp_move_copied_source_remains (RU)
2026-05-11 18:37:46
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0149 Phase 02: add error_sftp_access_denied, error_sftp_server_rejected, error_sftp_move_copied_source_remains (UK)
2026-05-11 18:37:50
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0149 Phase 02: add 3 error_sftp_* keys (RU)
2026-05-11 18:37:50
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0149 Phase 02: add 3 error_sftp_* keys (UK)
2026-05-11 18:50:46
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpFileOperationHandler.kt
SftpFileOperationHandler
S0149 Phase 03: wire SftpOperationFailure classifier + SftpOperationMessageResolver into executeMove SFTP->FTP delete-failed and executeRename failure paths
2026-05-11 18:50:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
S0149 Phase 03: surface result.errors from PartialSuccess in both executeOperationToPath and move handlers
2026-05-11 18:50:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
S0149 Phase 03: surface result.errors from PartialSuccess in both copy-to-destination and copy-to-path handlers
2026-05-11 18:50:50
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpFileOperationHandler.kt
SftpFileOperationHandler
S0149 Phase 03: wire SftpOperationFailure classifier and SftpOperationMessageResolver into executeMove SFTP-to-FTP delete-failed and executeRename failure paths
2026-05-11 18:50:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
S0149 Phase 03: surface result.errors from PartialSuccess in both executeOperationToPath and move handlers
2026-05-11 18:50:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt
FileOperationsHandler
S0149 Phase 03: surface result.errors from PartialSuccess in copy-to-destination and copy-to-path handlers
2026-05-11 18:56:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
S0149: Fixed Success/PartialSuccess block merge; restored PartialSuccess branch in executeOperationToPath; error surfacing now correct in both PartialSuccess handlers
2026-05-11 18:56:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
BrowseFileOperationsManager
S0149: Fixed Success/PartialSuccess block merge; restored PartialSuccess branch in executeOperationToPath; error surfacing now correct in both PartialSuccess handlers
2026-05-11 18:59:00
PLAN/S0149_enh-sftp-permission-denied-message/INDEX.md
S0149/INDEX.md
S0149: Marked all 4 phases Done; Status Done
2026-05-11 18:59:00
dev/CATALOG/app_v2.jsonl
app_v2.jsonl
S0149: Catalog rescan after adding SftpOperationFailure.kt and SftpOperationMessageResolver.kt
2026-05-11 18:59:00
dev/CATALOG/app_v2.md
app_v2.md
S0149: Catalog render after rescan
2026-05-11 18:59:04
dev/CATALOG/app_v2.jsonl
app_v2.jsonl
S0149: Catalog rescan after adding SftpOperationFailure.kt and SftpOperationMessageResolver.kt
2026-05-11 18:59:09
dev/CATALOG/app_v2.md
app_v2.md
S0149: Catalog render after rescan
2026-05-11 19:27:16
PLAN/S0162_screen-rotation-control.md
S0162
Strategic spec: screen rotation control - follow OS or manual in-player toggle
2026-05-11 20:59:10
PLAN/S0163_bugfix-smb-move-double-upload-after-batchdelete.md
S0163
New spec: SMB Move double-upload bug after batch-delete dialog (logs/20260511_203620.log, 10 errors, 5 files)
2026-05-11 20:59:10
PLAN/S0164_bugfix-glide-diskcache-warning-false-positive.md
S0164
New spec: Glide disk cache warning false positive when memory hit rate=100%
2026-05-11 20:59:10
PLAN/S0154_player-file-operation-queue.md
S0154
Add Last Audit §13: batch-delete resume bug confirmed in logs, links to S0163
2026-05-11 21:01:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0161 revert to blocking dialog: processLinkAutoDownload now uses LinkAutoDownloadProgressDialog + coordinator + resultPresenter; auth dialog shown in-app on SocialPreviewOnly with retry; silent cookie lookup preserved
2026-05-11 21:03:50
PLAN/S0161_link-download-background-queue.md
S0161
Updated strategic spec: revised architecture (blocking dialog + silent cookie lookup); added Phase 05-06; Last Audit with build/device test results; status -> Implemented
2026-05-11 21:09:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperationQueue.kt
PlayerFileOperationQueue
S0154: fix batch-delete resume loop - emit Succeeded after permission granted instead of restarting full operation
2026-05-11 21:09:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer.initFileOps
S0154: show specific message when batch-delete permission denied on Move (file already at destination); suppress retry button in that case
2026-05-11 21:09:19
app_v2/src/main/res/values/strings.xml
error_queued_move_permission_denied
S0154: add EN/RU/UK string for move-permission-denied case (file copied, local not deleted)
2026-05-11 21:28:02
docs/FEATURES.md
S0155
Add multiple-accounts-per-host bullet (S0155 Phase 07)
2026-05-11 21:28:02
docs/FEATURES_RU.md
S0155
Add multiple-accounts-per-host bullet (S0155 Phase 07 RU)
2026-05-11 21:28:02
docs/FEATURES_UK.md
S0155
Add multiple-accounts-per-host bullet (S0155 Phase 07 UK)
2026-05-11 21:28:02
dev/CATALOG/app_v2.jsonl
S0155
Catalog regen: scan+render; set roles for LinkDownloadSessionContext/AccountNameHintExtractor/AccountSelectionManager/AuthAccountGroupAdapter
2026-05-11 21:28:02
dev/CATALOG/app_v2.md
S0155
Catalog render after S0155 Phase 07 scan
2026-05-11 21:28:07
docs/FEATURES_RU.md
S0155
Add multiple-accounts-per-host bullet (S0155 Phase 07 RU)
2026-05-11 21:28:07
docs/FEATURES_UK.md
S0155
Add multiple-accounts-per-host bullet (S0155 Phase 07 UK)
2026-05-11 21:28:07
dev/CATALOG/app_v2.jsonl
S0155
Catalog regen: set roles for new S0155 classes
2026-05-11 21:28:07
dev/CATALOG/app_v2.md
S0155
Catalog render after S0155 Phase 07
2026-05-11 21:28:11
docs/FEATURES_UK.md
S0155
Add multiple-accounts-per-host bullet (S0155 Phase 07 UK)
2026-05-11 21:28:11
dev/CATALOG/app_v2.jsonl
S0155
Catalog regen: set roles for new S0155 classes
2026-05-11 21:28:11
dev/CATALOG/app_v2.md
S0155
Catalog render after S0155 Phase 07
2026-05-11 21:31:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
S0155
Add S0155 debug tag on emitResultAndDismiss(saved=true)
2026-05-11 21:31:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
S0155
Add S0155 debug tag on offerAuthThenDownload resume with savedAccountId
2026-05-11 21:31:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/helpers/AccountSelectionManager.kt
S0155
Add S0155 debug tag on account picker shown (>=2 accounts)
2026-05-11 21:31:06
PLAN/S0151_instagram-threads-link-extraction-and-auth/INDEX.md
S0151
Update tactical plan INDEX: phases 1-3 Done, 3/4 done
2026-05-11 21:31:06
PLAN/S0155_link-auth-multi-account/PHASE_07__docs-catalog-cleanup.md
S0155
Mark Phase 07 Done (docs/catalog/locale-audit complete)
2026-05-11 21:31:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
S0155
Add S0155 debug tag on offerAuthThenDownload resume with savedAccountId
2026-05-11 21:31:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/helpers/AccountSelectionManager.kt
S0155
Add S0155 debug tag on account picker shown (>=2 accounts)
2026-05-11 21:31:12
PLAN/S0151_instagram-threads-link-extraction-and-auth/INDEX.md
S0151
Update tactical plan INDEX: phases 1-3 Done, 3/4 done
2026-05-11 21:31:12
PLAN/S0155_link-auth-multi-account/PHASE_07__docs-catalog-cleanup.md
S0155
Mark Phase 07 Done (docs/catalog/locale-audit complete)
2026-05-11 21:31:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/helpers/AccountSelectionManager.kt
S0155
Add S0155 debug tag on account picker shown (>=2 accounts)
2026-05-11 21:31:15
PLAN/S0155_link-auth-multi-account/PHASE_07__docs-catalog-cleanup.md
S0155
Mark Phase 07 Done
2026-05-11 21:33:13
PLAN/S0163_bugfix-smb-move-double-upload-after-batchdelete/INDEX.md
S0163
Tactical plan created: verification-only (S0154 gate covers all criteria); all phases verified via code review
2026-05-11 21:34:57
PLAN/S0163_bugfix-smb-move-double-upload-after-batchdelete.md
S0163
Pipeline Verified: all §9 criteria confirmed via code review; S0154 PermissionGate covers the double-upload regression; build PASS
2026-05-11 21:36:48
app_v2/src/main/java/com/sza/fastmediasorter/utils/GlideCacheStats.kt
GlideCacheStats.logStats
S0164: fix false-positive ‘Zero disk cache hits’ warning - guard with (network+local)>0 so 100% memory-cache sessions are silent
2026-05-11 22:00:25
PLAN/S0156_nolegal-capability-surface-audit.md
spec-recovery
Recover S0156 from temp/done archive back into PLAN, restore research folder, and reopen spec-catalog record to Approved
2026-05-11 22:02:09
PLAN/S0156_nolegal-capability-surface-audit.md
spec-update
Add noLegal research direction for Browse-triggered third-party APK installation via explicit PackageInstaller flow
2026-05-11 22:06:16
PLAN/S0165_browse-create-folder.md
S0165
Strategic spec: Browse create-folder command for showSubfoldersAsItems resources
2026-05-11 22:09:56
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchAudioCoverUseCase.kt
SearchAudioCoverUseCase
Skip online cover art search for .m4a files (microphone recordings)
2026-05-11 22:23:37
PLAN/S0166_link-receive-and-auth-storage.md
S0166
Created strategic spec: link receive + auth storage scenario (replaces archived S0151, S0155)
2026-05-11 22:30:05
PLAN/S0167_bugfix-cover-art-search-cancelled-as-error.md
S0167
New spec: false ERROR log when cover art search coroutine cancelled during Activity destroy
2026-05-11 22:30:05
PLAN/S0168_bugfix-video-playback-stuck-buffering-no-feedback.md
S0168
New spec: ExoPlayer errorCode=1004 stuck buffering silently skips file without user feedback
2026-05-11 22:30:05
PLAN/S0169_bugfix-audio-metadata-retriever-smb-excessive-warnings.md
S0169
New spec: AudioMetadataLoader W-level noise on SMB audio files for expected MetadataRetriever fallback
2026-05-11 22:30:09
PLAN/S0168_bugfix-video-playback-stuck-buffering-no-feedback.md
S0168
New spec: ExoPlayer errorCode=1004 stuck buffering silently skips file without user feedback
2026-05-11 22:30:09
PLAN/S0169_bugfix-audio-metadata-retriever-smb-excessive-warnings.md
S0169
New spec: AudioMetadataLoader W-level noise on SMB audio files for expected MetadataRetriever fallback
2026-05-11 22:30:13
PLAN/S0169_bugfix-audio-metadata-retriever-smb-excessive-warnings.md
S0169
New spec: AudioMetadataLoader W-level noise on SMB audio files for expected MetadataRetriever fallback
2026-05-11 23:07:26
PLAN/S0166_link-receive-and-auth-storage.md
S0166
Rewrote spec: incorporated owner answers, removed Q&A format, clean definitive decisions
2026-05-11 23:09:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt
AudioCoverArtLoader
Handled coroutine cancellation without error logs and cached 404 cover URLs for the session
2026-05-11 23:09:12
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchAudioCoverUseCase.kt
SearchAudioCoverUseCase
Stopped treating coroutine cancellation as cover-search failures
2026-05-11 23:13:33
temp/backup_S0166_link_auth_20260511
S0166 Phase 00
Backed up 35 files (broken link-auth code) to temp/backup_S0166_link_auth_20260511/, deleted from source
2026-05-11 23:13:33
PLAN/S0166_link-receive-and-auth-storage/INDEX.md
S0166
Created tactical plan INDEX.md + PHASE_00 (backup-and-delete)
2026-05-11 23:22:03
app_v2/src/main/java/com/sza/fastmediasorter/core/cache/VideoPlaybackFailureSessionCache.kt
VideoPlaybackFailureSessionCache
Added session-only playback timeout failure cache for retry warnings
2026-05-11 23:22:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Added timeout-specific playback feedback and session retry warning hook
2026-05-11 23:22:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
Handled timeout-specific skip toast without generic duplicate message
2026-05-11 23:22:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRefreshManager.kt
BrowseRefreshManager
Clear session playback timeout warnings during manual refresh
2026-05-11 23:22:04
app_v2/src/main/res/values/strings.xml
playback-timeout-strings
Added EN playback timeout feedback strings
2026-05-11 23:22:04
app_v2/src/main/res/values-ru/strings.xml
playback-timeout-strings
Added RU playback timeout feedback strings
2026-05-11 23:22:05
app_v2/src/main/res/values-uk/strings.xml
playback-timeout-strings
Added UK playback timeout feedback strings
2026-05-11 23:22:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/AuthSessionRepository.kt
AuthSessionRepository
Restored S0166 auth storage domain contract and account models
2026-05-11 23:22:37
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStore.kt
EncryptedCookieStore
Reimplemented encrypted multi-account cookie store with dismissed-record support for S0166
2026-05-11 23:22:37
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
AuthSessionRepositoryImpl
Reimplemented auth session repository flows over encrypted cookie store for S0166
2026-05-11 23:24:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/UrlExtractionStrategy.kt
UrlExtractionStrategy
Restored link extraction contract for S0166 pipeline
2026-05-11 23:24:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistry.kt
LinkExtractionRegistry
Restored ordered extraction strategy registry for S0166
2026-05-11 23:24:13
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlMediaCandidate.kt
HtmlMediaCandidate
Restored HTML media candidate model for page extraction
2026-05-11 23:24:13
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadSessionContext.kt
LinkDownloadSessionContext
Restored per-run cookie context for selected account in S0166
2026-05-11 23:24:13
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadCookieJar.kt
LinkDownloadCookieJar
Restored OkHttp cookie injection for S0166 auth sessions
2026-05-11 23:24:13
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt
KnownAuthResources
Restored built-in auth-sensitive host registry for S0166
2026-05-11 23:24:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/helpers/AccountSelectionManager.kt
AccountSelectionManager
Restored account picker helper for multi-account S0166 flow
2026-05-11 23:33:03
app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt
AudioMetadataLoader
Downgrade expected partial network MetadataRetriever misses from warning to debug for SMB/SFTP/FTP audio headers
2026-05-11 23:33:03
PLAN/S0169_bugfix-audio-metadata-retriever-smb-excessive-warnings.md
S0169
Align strategic spec with implemented MetadataRetriever warning-classification fix and mark status Implemented
2026-05-11 23:33:49
app_v2/build.gradle.kts
build-debug validation
Revert unrelated auto-version bump introduced by build-debug validation run
2026-05-11 23:41:21
PLAN/S0166_link-receive-and-auth-storage.md
spec-all
Resume pipeline status sync for S0166
2026-05-11 23:41:21
PLAN/S0166_link-receive-and-auth-storage/PHASE_01__data-model-and-storage.md
spec-all
Added Phase 01 tactical plan for S0166
2026-05-11 23:41:21
PLAN/S0166_link-receive-and-auth-storage/PHASE_02__extraction-pipeline.md
spec-all
Added Phase 02 tactical plan for S0166
2026-05-11 23:41:21
PLAN/S0166_link-receive-and-auth-storage/PHASE_03__coordinator-and-worker.md
spec-all
Added Phase 03 tactical plan for S0166
2026-05-11 23:41:21
PLAN/S0166_link-receive-and-auth-storage/PHASE_04__auth-dialog-and-settings-ui.md
spec-all
Added Phase 04 tactical plan for S0166
2026-05-11 23:41:21
PLAN/S0166_link-receive-and-auth-storage/PHASE_05__di-and-integration.md
spec-all
Added Phase 05 tactical plan for S0166
2026-05-11 23:41:21
PLAN/S0166_link-receive-and-auth-storage/PHASE_06__tests-and-logging.md
spec-all
Added Phase 06 tactical plan for S0166
2026-05-11 23:41:21
PLAN/S0166_link-receive-and-auth-storage/PHASE_07__docs-catalog-cleanup.md
spec-all
Added Phase 07 tactical plan for S0166
2026-05-11 23:57:58
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
Restored S0166 coordinator, session handling, and diagnostics
2026-05-11 23:57:58
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
HtmlPageExtractionStrategy
Restored HTML extraction and soft login-wall classification for S0166
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
Restored hidden WebView extraction with cookie injection for S0166
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicy.kt
CandidateSelectionPolicy
Restored deterministic candidate selection for page-level media results
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
LinkDownloadModule
Restored Hilt bindings for S0166 link download stack
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
Restored S0166 post-download and reauth result presentation
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
WebViewAuthDialogFragment
Restored in-app WebView auth capture flow for S0166
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthViewModel.kt
WebViewAuthViewModel
Restored auth session save ViewModel for S0166
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsActivity.kt
AuthSessionsActivity
Restored saved authorizations settings host activity
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
AuthSessionsListFragment
Restored saved authorizations settings list UI
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListViewModel.kt
AuthSessionsListViewModel
Restored grouped auth account state for settings UI
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthAccountGroupAdapter.kt
AuthAccountGroupAdapter
Restored grouped account list adapter for settings auth screen
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthAccountLabels.kt
AuthAccountLabels
Added helper labels for dismissed auth records
2026-05-11 23:57:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
Aligned single-link S0166 routing with known-host auth/account selection
2026-05-11 23:57:59
app_v2/src/main/res/layout/dialog_webview_auth.xml
dialog_webview_auth
Restored default WebView auth dialog layout
2026-05-11 23:57:59
app_v2/src/main/res/layout/activity_auth_sessions.xml
activity_auth_sessions
Added default layout for saved authorizations screen
2026-05-11 23:57:59
app_v2/src/main/res/layout/fragment_auth_sessions_list.xml
fragment_auth_sessions_list
Added default layout for saved authorizations list
2026-05-11 23:57:59
app_v2/src/main/res/layout/item_auth_host_group.xml
item_auth_host_group
Added host header row for saved authorizations list
2026-05-11 23:57:59
app_v2/src/main/res/layout/item_auth_account.xml
item_auth_account
Added account row layout for saved authorizations list
2026-05-11 23:57:59
app_v2/src/test/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicyTest.kt
CandidateSelectionPolicyTest
Added focused JVM coverage for S0166 candidate selection
2026-05-11 23:57:59
app_v2/src/test/java/com/sza/fastmediasorter/data/link/auth/AccountNameHintExtractorTest.kt
AccountNameHintExtractorTest
Added focused JVM coverage for auth account hint extraction
2026-05-11 23:57:59
app_v2/src/test/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResourcesTest.kt
KnownAuthResourcesTest
Added focused JVM coverage for known auth host matching
2026-05-12 00:03:07
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
Added S0166 branch diagnostics for preview-only, login-wall, and saved media outcomes
2026-05-12 00:03:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
Added S0166 auth-dialog diagnostics and reauth dialog typing
2026-05-12 00:03:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/helpers/AccountSelectionManager.kt
AccountSelectionManager
Added S0166 account picker diagnostic log
2026-05-12 00:03:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
WebViewAuthDialogFragment
Added S0166 browser-login-saved diagnostic log
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage.md
S0166
Patched strategic audit block and final status to Partial
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage/INDEX.md
S0166 tactical index
Synced tactical index phase statuses with audit result
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage/PHASE_01__data-model-and-storage.md
S0166 Phase 01
Marked data/storage phase complete
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage/PHASE_02__extraction-pipeline.md
S0166 Phase 02
Marked extraction phase complete
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage/PHASE_03__coordinator-and-worker.md
S0166 Phase 03
Marked coordinator and worker phase complete
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage/PHASE_04__auth-dialog-and-settings-ui.md
S0166 Phase 04
Marked auth UI phase partial with explanatory-block gap
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage/PHASE_05__di-and-integration.md
S0166 Phase 05
Marked DI and integration phase complete
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage/PHASE_06__tests-and-logging.md
S0166 Phase 06
Marked tests and logging phase partial due remaining coverage gaps
2026-05-12 00:03:07
PLAN/S0166_link-receive-and-auth-storage/PHASE_07__docs-catalog-cleanup.md
S0166 Phase 07
Marked docs and catalog cleanup phase complete
2026-05-12 00:03:07
PLAN/spec-catalog.jsonl
S0166
Updated spec-catalog ticket status to Partial after audit
2026-05-12 00:03:07
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Refreshed catalog records after S0166 Kotlin changes
2026-05-12 00:03:07
dev/CATALOG/app_v2.md
app_v2 catalog
Re-rendered catalog markdown after S0166 Kotlin changes
2026-05-12 00:19:19
app_v2/src/main/res/layout/fragment_auth_sessions_list.xml
fragment_auth_sessions_list
S0166 §4: added explanatory info block above RecyclerView (changed FrameLayout→LinearLayout+FrameLayout)
2026-05-12 00:19:19
app_v2/src/main/res/layout-land/fragment_auth_sessions_list.xml
fragment_auth_sessions_list (land)
S0166 §4: added explanatory info block to landscape variant
2026-05-12 00:19:19
app_v2/src/main/res/values/strings.xml
auth_sessions_info_text (EN)
S0166 §4: added EN explanatory text for auth sessions screen
2026-05-12 00:19:19
app_v2/src/main/res/values-ru/strings.xml
auth_sessions_info_text (RU)
S0166 §4: added RU explanatory text for auth sessions screen
2026-05-12 00:19:19
app_v2/src/main/res/values-uk/strings.xml
auth_sessions_info_text (UK)
S0166 §4: added UK explanatory text for auth sessions screen
2026-05-12 00:19:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
S0166 §2 Step 0: added unknown-host NoMediaFound escalation to auth-offer dialog
2026-05-12 00:19:19
app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/filelist/BrowseFileListManagerTest.kt
BrowseFileListManagerTest
Fixed missing assertTrue import
2026-05-12 00:19:19
app_v2/src/test/java/com/sza/fastmediasorter/data/link/StreamingManifestSnifferTest.kt
StreamingManifestSnifferTest
Renamed test with in name (XML-illegal chars) to video-source element
2026-05-12 00:19:19
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt
SendResourcesToWatchUseCaseTest
Added missing putEnvelopeDataItem to FakeWearableDataLayerRepository
2026-05-12 00:19:19
app_v2/src/test/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStoreTest.kt
EncryptedCookieStoreTest
Fixed compile (RuntimeEnvironment, @Config sdk=34); @Ignore class (AndroidKeyStore unavailable in Robolectric JVM)
2026-05-12 00:20:49
PLAN/S0166_link-receive-and-auth-storage.md
S0166
Promoted Last Audit to Verified after closing all remaining gaps
2026-05-12 00:20:49
PLAN/spec-catalog.jsonl
S0166
Status Partial -> Verified
2026-05-12 00:20:49
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Refreshed catalog after S0166 final fixes
2026-05-12 00:20:49
dev/CATALOG/app_v2.md
app_v2 catalog
Re-rendered catalog after S0166 final fixes
2026-05-12 00:30:06
app_v2/src/test/java/com/sza/fastmediasorter/ui/share/AccountSelectionManagerTest.kt
AccountSelectionManagerTest
S0166 Phase 06: add branch-selection unit tests (no-record, single-active, dismissed-only, mixed)
2026-05-12 00:30:06
app_v2/src/test/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicyTest.kt
CandidateSelectionPolicyTest
S0166 Phase 06: extend with hasRealContent predicate tests for social preview classification
2026-05-12 00:30:06
PLAN/S0166_link-receive-and-auth-storage.md
spec-check
Audit S0166 -> Verified; PASS 18/WARN 0/FAIL 0; PHASE_04 and PHASE_06 marked Done
2026-05-12 01:09:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
WebViewAuthDialogFragment
Add harvest mode: shouldInterceptRequest catches CDN video URLs and auto-dismisses with RESULT_MEDIA_URL
2026-05-12 01:09:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
presentSocialPreviewOnly: when hadExistingSession skip 3-btn dialog, open harvest-mode WebView on content URL directly
2026-05-12 01:09:11
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
Revert HARD_TIMEOUT_MS back to 8s (harvest mode replaces dynamic strategy for social hosts)
2026-05-12 01:09:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
WebViewAuthDialogFragment
Add harvest mode: shouldInterceptRequest catches CDN video URLs, auto-dismiss with RESULT_MEDIA_URL
2026-05-12 01:09:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
presentSocialPreviewOnly: hadExistingSession skips 3-btn dialog, opens harvest-mode WebView on content URL directly
2026-05-12 01:09:24
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
Increase HARD_TIMEOUT_MS 8000->22000, DOM_SETTLE_MS 3500->4000 for heavy SPA pages
2026-05-12 01:33:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
ReceiveShareActivity
Fix threading crash: dispatch onProgress to main thread via runOnUiThread (Material3 ValueAnimator crash from Dispatchers.IO)
2026-05-12 01:33:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
Revert harvest-mode visible WebView approach: remove openHarvestWebView(), use toast for hadExistingSession+failed case
2026-05-12 01:37:24
PLAN/S0168_bugfix-video-playback-stuck-buffering-no-feedback.md
S0168
Added Scenario 2 (VP9/WebM 818KB + chronic low native heap), pre-check heap §5.3, PrefetchLoadControl diagnostics §5.4; status Implemented→In Progress, priority 40→55
2026-05-12 01:46:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0168
Add NATIVE_HEAP_PREPLAY_THRESHOLD_BYTES=30MB pre-check: Glide.clearMemory()+GC before ExoPlayer start, warning_low_memory_playback Toast if heap still low after GC
2026-05-12 01:46:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchLoadControlFactory.kt
S0168
Elevate fallback standard defaults log level D->W for ExoPlayer plan-miss visibility
2026-05-12 01:46:53
app_v2/src/main/res/values*/strings.xml
S0168
Add warning_low_memory_playback string EN/RU/UK
2026-05-12 02:05:23
PLAN/S0170_link-download-platform-bugs.md
S0170
New spec: platform-specific link-download bugs (Facebook auth loop, Instagram unplayable file, TikTok cookie mismatch, etc.)
2026-05-12 02:17:06
PLAN/S0170_link-download-platform-bugs.md
spec-update
Refinement (claude-opus-4-7, focus: completeness, consistency) - added research addendum section 8
2026-05-12 02:20:49
PLAN/S0170_link-download-platform-bugs.md
spec-all
Approved + partial implementation pass: BUG-1, BUG-2 validation, BUG-6
2026-05-12 02:29:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
S0170
BUG-1: one-shot auth-offer escalation; isAuthRetry passed from offer callbacks; await markDismissed
2026-05-12 02:29:32
app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkDownloadWriter.kt
S0170
BUG-2: sniff downloaded bytes; WriteResult.Corrupted on HTML/JSON/truncated content
2026-05-12 02:29:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0170
BUG-2: Result.Failed.DownloadCorrupted mapped from WriteResult.Corrupted
2026-05-12 02:29:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
S0170
BUG-2: toast link_autodownload_error_corrupted for DownloadCorrupted
2026-05-12 02:29:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
S0170
BUG-6: dedup cookies by name before save
2026-05-12 02:29:33
app_v2/src/main/res/values/strings.xml
S0170
Add link_autodownload_error_corrupted (EN/RU/UK)
2026-05-12 02:29:34
PLAN/S0170_link-download-platform-bugs.md
spec-all
Pipeline: BUG-1/BUG-2-validation/BUG-6 implemented; status BlockNeedUserTest
2026-05-12 03:11:41
PLAN/S0171_link-download-cdn-replay-tiktok-ua.md
S0171
New spec: CDN Referer replay for Instagram + TikTok desktop-UA extraction (deferred from S0170)
2026-05-12 03:19:10
PLAN/S0171_link-download-cdn-replay-tiktok-ua.md
spec-update
Refinement (claude-opus-4-7) - added research addendum section 8; S0170 fixes verified from test log; corrections to section 2.A
2026-05-12 03:25:25
PLAN/S0171_link-download-cdn-replay-tiktok-ua.md
spec-all
Approved + implementation: CDN Referer/UA replay + TikTok desktop-UA + UNIVERSAL_DATA parse
2026-05-12 03:34:10
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlMediaCandidate.kt
S0171
Add pageOrigin field for CDN Referer replay
2026-05-12 03:34:10
app_v2/src/main/java/com/sza/fastmediasorter/data/link/DirectFileExtractionStrategy.kt
S0171
open() overload with extraHeaders for CDN re-fetch
2026-05-12 03:34:11
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
S0171
Track page URL; pageOrigin on candidates; TikTok desktop-UA; UNIVERSAL_DATA parse; CDN replay headers; trusted media sources
2026-05-12 03:34:11
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
S0171
DefaultUserAgentInterceptor - browser UA on link-download requests
2026-05-12 03:34:11
PLAN/S0171_link-download-cdn-replay-tiktok-ua.md
spec-all
Implemented (STANDARD): CDN Referer/UA replay + TikTok desktop-UA + UNIVERSAL_DATA parse; status BlockNeedUserTest
2026-05-12 10:29:53
PLAN/S0171_link-download-cdn-replay-tiktok-ua.md
S0171 spec
Added §8.E (second on-device pass analysis from build 333 log): IG CDN 248-byte stub persists, TikTok MimeBlocked+403 root causes documented, debug enrichment requirements added (candidate URL, HTTP status, redirect chain, page HTML dump)
2026-05-12 10:36:41
PLAN/S0171_link-download-cdn-replay-tiktok-ua.md
S0171 spec
Resumed: status BlockNeedUserTest->In Progress; added Steps 6-8 (debug enrichment, TikTok downloadAddr priority, LinkDownloadCookieJar eTLD+1 wildcard)
2026-05-12 10:36:41
PLAN/S0170_link-download-platform-bugs.md
S0170 spec
All 3 checklist items marked PASS; archived (temp/done/)
2026-05-12 10:55:05
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
S0171 Step 6a/6c: extended CDN re-fetch log (+url), HTML dump on empty DOM result (DEBUG only); Step 7: TikTok downloadAddr/bitrateInfo priority over playAddr in DOM_DISCOVERY_SCRIPT
2026-05-12 10:55:13
app_v2/src/main/java/com/sza/fastmediasorter/data/link/DirectFileExtractionStrategy.kt
DirectFileExtractionStrategy
S0171 Step 6b: response status/Content-Type/redirect-chain debug logging
2026-05-12 10:55:13
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadCookieJar.kt
LinkDownloadCookieJar
S0171 Step 8: eTLD+1 wildcard fallback in loadForRequest - forwards registered-domain cookies to CDN subdomains (v16-webapp-prime.tiktok.com fix)
2026-05-12 11:18:50
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
S0171 diag-pass: log all intercepted/dom candidates at finish(); rejection log per candidate; all-image/SocialPreviewOnly branch log; dom-result log before HTML dump; Step 9: Sec-Fetch-Dest/Mode/Site for TikTok CDN
2026-05-12 12:06:37
PLAN/S0172_bugfix-car-audio-service-crash-and-position-resume.md
spec
Add strategic spec S0172: car audio service crash + SFTP position resume
2026-05-12 12:12:33
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt
KnownAuthResources
S0171 Fix1: remove previewOnlyMeansLogin from threads.net/threads.com - CDN delivers full-res images without login
2026-05-12 12:12:38
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
S0171 Fix2: filter TikTok aweme/v1/play API redirect from candidates + add isTikTokApiRedirect(); remove all S0171 debug tags
2026-05-12 12:12:44
app_v2/src/main/java/com/sza/fastmediasorter/data/link/DirectFileExtractionStrategy.kt
DirectFileExtractionStrategy
S0171: remove S0171 debug tags (direct-open response/redirect logging)
2026-05-12 12:17:59
PLAN/S0172_bugfix-car-audio-service-crash-and-position-resume/INDEX.md
S0172
spec-tech: created tactical plan INDEX + 4 phase files for car audio crash + SFTP position resume
2026-05-12 12:17:59
PLAN/S0172_bugfix-car-audio-service-crash-and-position-resume.md
S0172
spec-tech: status updated Approved -> Tactical, tactical spec link added
2026-05-12 12:21:56
PLAN/S0156_nolegal-capability-surface-audit.md
S0156
Absorbed S0117 baseline, ADR-5/6/7, open questions 11-12 (lint-rule gap, distribution channel); archived S0117
2026-05-12 12:22:25
PLAN/S0171_link-download-cdn-replay-tiktok-ua.md
S0171
Archived (Verified): CDN replay headers + TikTok UA + cookie eTLD+1 + API-redirect filter - all confirmed working; file moved to temp/done/
2026-05-12 12:22:28
PLAN/S0170_link-download-platform-bugs.md
S0170
File moved to temp/done/ (spec was already Archived in catalog)
2026-05-12 12:24:39
PLAN/S0156_nolegal-capability-surface-audit.md
S0156
Build topology resolved: single APK split ABI filters, graceful VR fallback, noLegal in build-and-push-all, ADR-8 added
2026-05-12 12:27:36
PLAN/S0163_bugfix-smb-move-double-upload-after-batchdelete.md
spec-arc
Archive S0163 (bugfix-smb-move-double-upload-after-batchdelete) -> temp/done/
2026-05-12 12:27:58
PLAN/S0164_bugfix-glide-diskcache-warning-false-positive.md
spec-arc
Archive S0164 (bugfix-glide-diskcache-warning-false-positive) -> temp/done/
2026-05-12 12:28:55
app_v2/build.gradle.kts
noLegal flavor
S0156: upgrade noLegal to VR-capable - CMake block, split ABI filters (ndk=4 ABI, cmake=arm64), VR BuildConfig flags, vr sourceSets mount, OpenXR dependency
2026-05-12 12:28:55
scripts/builders/build-nolegal-debug.ps1
build-nolegal-debug
S0156: new script - build noLegal debug APK with CMake stale-lock cleanup
2026-05-12 12:28:55
scripts/builders/build-nolegal-release.ps1
build-nolegal-release
S0156: new script - build noLegal release APK
2026-05-12 12:28:55
scripts/builders/build-nolegal-device.ps1
build-nolegal-device
S0156: new script - build + ADB install noLegal debug on connected device
2026-05-12 12:28:55
scripts/builders/build-and-push-all.ps1
build-and-push-all
S0156: add assembleNoLegalDebug/Release to full build matrix
2026-05-12 12:28:59
scripts/builders/build-nolegal-debug.ps1
build-nolegal-debug
S0156: new script - build noLegal debug APK with CMake stale-lock cleanup
2026-05-12 12:28:59
scripts/builders/build-nolegal-release.ps1
build-nolegal-release
S0156: new script - build noLegal release APK
2026-05-12 12:28:59
scripts/builders/build-nolegal-device.ps1
build-nolegal-device
S0156: new script - build + ADB install noLegal debug on connected device
2026-05-12 12:28:59
scripts/builders/build-and-push-all.ps1
build-and-push-all
S0156: add assembleNoLegalDebug/Release to full build matrix
2026-05-12 12:29:03
scripts/builders/build-nolegal-release.ps1
build-nolegal-release
S0156: new script - build noLegal release APK
2026-05-12 12:29:03
scripts/builders/build-nolegal-device.ps1
build-nolegal-device
S0156: new script - build + ADB install noLegal debug on connected device
2026-05-12 12:29:03
scripts/builders/build-and-push-all.ps1
build-and-push-all
S0156: add assembleNoLegalDebug/Release to full build matrix
2026-05-12 12:29:06
scripts/builders/build-nolegal-device.ps1
build-nolegal-device
S0156: new script - build + ADB install noLegal debug
2026-05-12 12:29:06
scripts/builders/build-and-push-all.ps1
build-and-push-all
S0156: add assembleNoLegalDebug/Release to full build matrix
2026-05-12 12:29:10
scripts/builders/build-and-push-all.ps1
build-and-push-all
S0156: add assembleNoLegalDebug/Release to full build matrix
2026-05-12 12:30:19
PLAN/S0106_player-image-crop.md
spec-arc
Archive S0106 (player-image-crop) -> temp/done/ [force]
2026-05-12 12:30:19
PLAN/S0107_image-draw-overlay.md
spec-arc
Archive S0107 (image-draw-overlay) -> temp/done/ [force]
2026-05-12 12:30:19
PLAN/S0099_sftp-concurrent-access-fix.md
spec-arc
Archive S0099 (sftp-concurrent-access-fix) -> temp/done/ [force]
2026-05-12 12:30:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager
Remove stale S0106 debug tags (spec archived)
2026-05-12 12:30:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt
PlayerCropDelegate
Remove stale S0106 debug tag (spec archived)
2026-05-12 12:30:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/MediaNotificationManager.kt
MediaNotificationManager
S0172 Phase 01: expose NOTIFICATION_ID as public const for startForeground
2026-05-12 12:30:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
AudioPlaybackService
S0172 Phase 01+02: @AndroidEntryPoint, inject PlaybackPositionRepository, startForeground in onCreate, periodic position save, currentOriginalPath companion field
2026-05-12 12:30:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
S0172 Phase 03: inject playbackPositionRepository, set currentOriginalPath, seekTo saved position + toast for SFTP audio
2026-05-12 12:30:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
S0172 Phase 03: pass playbackPositionRepository to PlayerMediaLoaderManager
2026-05-12 12:30:23
PLAN/S0107_image-draw-overlay.md
spec-arc
Archive S0107 (image-draw-overlay) -> temp/done/ [force]
2026-05-12 12:30:23
PLAN/S0099_sftp-concurrent-access-fix.md
spec-arc
Archive S0099 (sftp-concurrent-access-fix) -> temp/done/ [force]
2026-05-12 12:30:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager
Remove stale S0106 debug tags (spec archived)
2026-05-12 12:30:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt
PlayerCropDelegate
Remove stale S0106 debug tag (spec archived)
2026-05-12 12:30:27
PLAN/S0099_sftp-concurrent-access-fix.md
spec-arc
Archive S0099 (sftp-concurrent-access-fix) -> temp/done/ [force]
2026-05-12 12:30:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt
ImageCropManager
Remove stale S0106 debug tags (spec archived)
2026-05-12 12:30:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt
PlayerCropDelegate
Remove stale S0106 debug tag (spec archived)
2026-05-12 12:38:32
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
VrPlayerActivity.xrAvailable
S0156: add openxr_native to early UnsatisfiedLinkError guard - non-Quest/non-arm64 devices now fall back to phone screen before super.onCreate
2026-05-12 12:40:13
PLAN/S0173_refactor-playback-position-persistence.md
S0173
Created strategic spec: refactor position save/restore into PositionSaveLoop + PlaybackPositionRestorer, cover cloud branch
2026-05-12 14:01:36
PLAN/S0156_nolegal-capability-surface-audit.md
S0156
Added follow-up spec naming rule: nolegal slug + Epic: S0156 header (Столп D + Столп F)
2026-05-12 14:04:51
PLAN/S0174_nolegal-ytdlp-universal-extractor.md
spec
Add strategic spec S0174: noLegal yt-dlp universal extractor (Chaquopy, 1800+ sites, epic S0156)
2026-05-12 14:04:51
PLAN/S0175_nolegal-newpipe-version-bump.md
spec
Add strategic spec S0175: noLegal NewPipeExtractor version bump + Odysee allowlist (epic S0156)
2026-05-12 14:04:51
PLAN/S0176_nolegal-session-context-etld-fix.md
spec
Add strategic spec S0176: fix applySessionContext eTLD+1 lookup in shared coordinator (epic S0156)
2026-05-12 14:04:51
PLAN/S0177_nolegal-native-site-extractors.md
spec
Add strategic spec S0177: noLegal native Kotlin extractors for ArtStation/Vimeo/DeviantArt/Dailymotion (epic S0156)
2026-05-12 14:13:59
PLAN/S0173_refactor-playback-position-persistence/INDEX.md
spec-tech
Create tactical plan for S0173
2026-05-12 14:13:59
PLAN/S0173_refactor-playback-position-persistence/PHASE_01__utility-classes.md
spec-tech
Phase 01: utility-classes
2026-05-12 14:14:00
PLAN/S0173_refactor-playback-position-persistence/PHASE_02__refactor-save-loop.md
spec-tech
Phase 02: refactor-save-loop
2026-05-12 14:14:00
PLAN/S0173_refactor-playback-position-persistence/PHASE_03__refactor-media-loader.md
spec-tech
Phase 03: refactor-media-loader
2026-05-12 14:14:00
PLAN/S0173_refactor-playback-position-persistence/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-12 14:14:00
PLAN/S0173_refactor-playback-position-persistence.md
spec-tech
Status -> Tactical
2026-05-12 14:14:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PositionSaveLoop.kt
S0173
Add PositionSaveLoop - standalone periodic save-loop utility
2026-05-12 14:15:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackPositionRestorer.kt
S0173
Add PlaybackPositionRestorer - suspend restore-and-notify utility
2026-05-12 14:17:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0173
Replace positionSaveRunnable/lastSavedPosition with positionSaveLoop field
2026-05-12 14:18:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackPositionHelper.kt
S0173
Delegate save-loop to PositionSaveLoop; formatTime delegates to PlaybackPositionRestorer
2026-05-12 14:21:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt
S0173
Replace private save-loop with PositionSaveLoop; add serviceScope
2026-05-12 14:23:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Fix BLACK_SCREEN and PLAYBACK_ORDER buttons missing in portrait bar: add both to getOverflowableButtons() and barViewForCommand()
2026-05-12 14:24:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
S0173
SFTP restore via PlaybackPositionRestorer; cloud branch adds save+restore; remove formatTimeMs
2026-05-12 14:28:11
dev/CATALOG/app_v2.jsonl
S0173
Catalog regen after adding PositionSaveLoop and PlaybackPositionRestorer
2026-05-12 14:30:30
PLAN/S0173_refactor-playback-position-persistence.md
spec-check
Audit S0173 -> Verified; PASS 21/WARN 0/FAIL 0
2026-05-12 14:40:28
PLAN/S0176_nolegal-session-context-etld-fix.md
spec-update
Refinement (claude-sonnet-4-5, focus: all) - applied 8, proposed 1 DISCUSS
2026-05-12 15:03:28
PLAN/S0174_nolegal-ytdlp-universal-extractor/INDEX.md
spec-tech
Create tactical plan for S0174
2026-05-12 15:03:28
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_01__gradle-chaquopy-setup.md
spec-tech
Phase 01: gradle-chaquopy-setup
2026-05-12 15:03:28
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_02__priority-order-fix.md
spec-tech
Phase 02: priority-order-fix
2026-05-12 15:03:29
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_03__cookie-bridge.md
spec-tech
Phase 03: cookie-bridge
2026-05-12 15:03:29
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_04__ytdlp-strategy.md
spec-tech
Phase 04: ytdlp-strategy
2026-05-12 15:03:29
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_05__auth-resources.md
spec-tech
Phase 05: auth-resources
2026-05-12 15:03:30
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup
2026-05-12 15:03:30
PLAN/S0174_nolegal-ytdlp-universal-extractor.md
spec-tech
Status -> Tactical
2026-05-12 15:04:44
build.gradle.kts
S0174
Add Chaquopy plugin (com.chaquo.python 16.0.0) to root plugins block, apply false
2026-05-12 15:06:48
app_v2/build.gradle.kts
S0174
Apply Chaquopy plugin; configure Python 3.11 in defaultConfig; add yt-dlp==2025.4.30 pip install in noLegal flavor
2026-05-12 15:06:48
app_v2/src/noLegal/AndroidManifest.xml
S0174
New: noLegal manifest overlay with extractNativeLibs=true for Chaquopy
2026-05-12 15:45:59
app_v2/build.gradle.kts
Chaquopy S0174
Conditional Chaquopy apply via -Pchaquopy.enabled=true; beforeVariants disables non-noLegal flavors; Python 3.12; noLegal ABI arm64+x86_64
2026-05-12 15:45:59
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_01__gradle-chaquopy-setup.md
spec-dev S0174
Phase 01 Done: all steps [x], both builds PASS
2026-05-12 15:45:59
PLAN/S0174_nolegal-ytdlp-universal-extractor/INDEX.md
spec-dev S0174
Phase 01 marked Done; INDEX updated 1/6
2026-05-12 15:47:52
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistry.kt
LinkExtractionRegistry
S0174: insert ytdlp at position 0 in CANONICAL_ORDER
2026-05-12 15:47:52
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_02__priority-order-fix.md
spec-dev S0174
Phase 02 Done: CANONICAL_ORDER updated
2026-05-12 15:51:14
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/CookieFileWriter.kt
CookieFileWriter
S0174: new class - Netscape cookie file writer for yt-dlp, eTLD+1 matching, deleteOnExit
2026-05-12 15:51:14
app_v2/src/test/java/com/sza/fastmediasorter/data/link/nolegal/CookieFileWriterTest.kt
CookieFileWriterTest
S0174: unit tests for CookieFileWriter Netscape serialisation
2026-05-12 15:51:14
PLAN/S0174_nolegal-ytdlp-universal-extractor/PHASE_03__cookie-bridge.md
spec-dev S0174
Phase 03 Done: CookieFileWriter created
2026-05-12 16:12:06
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/ChaquopyRuntimeHolder.kt
ChaquopyRuntimeHolder
S0174 Phase04: lazy Python runtime init guard with double-checked locking
2026-05-12 16:12:06
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
YtDlpExtractionStrategy
S0174 Phase04: yt-dlp backed URL extraction strategy for noLegal flavor
2026-05-12 16:12:06
app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalLinkDownloadModule.kt
NoLegalLinkDownloadModule
S0174 Phase04: bind YtDlpExtractionStrategy into UrlExtractionStrategy set
2026-05-12 16:12:23
PLAN/S0178_video-thumbnail-black-frame-detection.md
spec
Add strategic spec S0178 for ad-hoc video-thumbnail-black-frame-detection
2026-05-12 16:16:55
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt
KnownAuthResources
S0174 Phase05: add facebook.com with previewOnlyMeansLogin=true
2026-05-12 16:16:55
app_v2/src/main/res/values/strings.xml
strings
S0174 Phase05: add link_download_ytdlp_* strings (EN)
2026-05-12 16:16:55
app_v2/src/main/res/values-ru/strings.xml
strings-ru
S0174 Phase05: add link_download_ytdlp_* strings (RU)
2026-05-12 16:16:55
app_v2/src/main/res/values-uk/strings.xml
strings-uk
S0174 Phase05: add link_download_ytdlp_* strings (UK)
2026-05-12 16:16:55
app_v2/src/testNoLegal/java/com/sza/fastmediasorter/data/link/nolegal/CookieFileWriterTest.kt
CookieFileWriterTest
S0174 Phase05: move test to testNoLegal source set (was failing standard test compilation)
2026-05-12 16:22:36
app_v2/build.gradle.kts
S0174
Add Chaquopy plugin + yt-dlp wheel for noLegal flavor; noLegal abiFilters restricted to arm64-v8a + x86_64
2026-05-12 16:22:36
app_v2/src/noLegal/AndroidManifest.xml
S0174
Add extractNativeLibs=true overlay for Chaquopy libpython3.so
2026-05-12 16:22:36
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistry.kt
LinkExtractionRegistry
S0174 Phase02: add ytdlp to CANONICAL_ORDER at position 0
2026-05-12 16:22:36
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/CookieFileWriter.kt
CookieFileWriter
S0174 Phase03: Netscape cookie file serialiser for yt-dlp
2026-05-12 16:22:36
docs/FEATURES.md
S0174
Add noLegal yt-dlp flavor section
2026-05-12 16:22:36
docs/FEATURES_RU.md
S0174
Add noLegal yt-dlp flavor section (RU)
2026-05-12 16:22:36
docs/FEATURES_UK.md
S0174
Add noLegal yt-dlp flavor section (UK)
2026-05-12 16:22:36
dev/CATALOG/app_v2.jsonl
catalog
S0174: add noLegal classes ChaquopyRuntimeHolder, YtDlpExtractionStrategy, CookieFileWriter
2026-05-12 16:22:36
dev/CATALOG/app_v2.md
catalog
S0174: regenerate catalog MD with 1018 records
2026-05-12 16:23:19
PLAN/S0178_video-thumbnail-black-frame-detection/INDEX.md
spec-tech
Create tactical plan for S0178
2026-05-12 16:23:20
PLAN/S0178_video-thumbnail-black-frame-detection/PHASE_01__darkness-evaluator.md
spec-tech
Phase 01: darkness-evaluator
2026-05-12 16:23:20
PLAN/S0178_video-thumbnail-black-frame-detection/PHASE_02__network-decoder-retry.md
spec-tech
Phase 02: network-decoder-retry
2026-05-12 16:23:20
PLAN/S0178_video-thumbnail-black-frame-detection/PHASE_03__background-extractor-retry.md
spec-tech
Phase 03: background-extractor-retry
2026-05-12 16:23:20
PLAN/S0178_video-thumbnail-black-frame-detection/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup
2026-05-12 16:23:21
PLAN/S0178_video-thumbnail-black-frame-detection.md
spec-tech
Status -> Tactical
2026-05-12 16:26:43
PLAN/S0174_nolegal-ytdlp-universal-extractor.md
spec-check
Audit S0174 -> Verified; PASS 20/WARN 0/FAIL 0; 5 manual on-device items
2026-05-12 16:29:54
docs/FEATURES_noLegal.md
FEATURES_noLegal
S0174: add §1 Universal Media Extractor (yt-dlp); noLegal-only feature inventory
2026-05-12 16:29:54
docs/FEATURES.md
FEATURES
S0174: remove noLegal section (not for publication; moved to FEATURES_noLegal.md)
2026-05-12 16:29:54
docs/FEATURES_RU.md
FEATURES_RU
S0174: remove noLegal section
2026-05-12 16:29:54
docs/FEATURES_UK.md
FEATURES_UK
S0174: remove noLegal section
2026-05-12 16:30:42
docs/FEATURES_noLegal.md
FEATURES_noLegal
Create private noLegal feature inventory (gitignored, S0156 §6.9)
2026-05-12 16:30:42
docs/FEATURES_noLegal_RU.md
FEATURES_noLegal_RU
Create Russian mirror of noLegal feature inventory
2026-05-12 16:30:42
docs/FEATURES_noLegal_UK.md
FEATURES_noLegal_UK
Create Ukrainian mirror of noLegal feature inventory
2026-05-12 16:30:43
.gitignore
.gitignore
Gitignore docs/FEATURES_noLegal*.md - private sideload-only inventory
2026-05-12 16:30:43
CLAUDE.md
CLAUDE.md
Document noLegal feature inventory exception in Feature Inventory, Post-Change Steps, and mandatory skills table
2026-05-12 16:30:43
.claude/commands/doc-update.md
doc-update skill
Add B-noLegal section and decision matrix rows for noLegal-only features
2026-05-12 17:48:33
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
Add exact-to-eTLD+1 fallback for applySessionContext and preserve stored-host session binding
2026-05-12 17:48:33
PLAN/S0176_nolegal-session-context-etld-fix.md
S0176
Primitive /spec-tech execution; status moved to BlockNeedUserTest
2026-05-12 17:55:58
app_v2/src/noLegal/res/
noLegal launcher icon
Add pirate skull badge overlay icon for noLegal flavor: ic_skull_badge.xml vector, ic_launcher_nolegal_fore.xml layer-list, adaptive icon XMLs for anydpi-v26
2026-05-12 17:56:03
PLAN/S0176_nolegal-session-context-etld-fix.md
spec-tech
Correct S0176 to Tactical and replace the accidental primitive-path note
2026-05-12 17:56:03
PLAN/S0176_nolegal-session-context-etld-fix/INDEX.md
spec-tech
Create tactical index for S0176
2026-05-12 17:56:03
PLAN/S0176_nolegal-session-context-etld-fix/PHASE_01__domain-resolution.md
spec-tech
Phase 01 tactical plan for shared domain resolution
2026-05-12 17:56:03
PLAN/S0176_nolegal-session-context-etld-fix/PHASE_02__session-context-binding.md
spec-tech
Phase 02 tactical plan for coordinator session binding
2026-05-12 17:56:03
PLAN/S0176_nolegal-session-context-etld-fix/PHASE_03__regression-tests.md
spec-tech
Phase 03 tactical plan for regression coverage
2026-05-12 17:56:03
PLAN/S0176_nolegal-session-context-etld-fix/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04 tactical plan for cleanup and verification handoff
2026-05-12 17:58:24
app_v2/build.gradle.kts
build.gradle.kts
S0175: bump NewPipeExtractor v0.24.0->v0.26.1; fix local.properties Chaquopy detection; add –no-configuration-cache to noLegal builds
2026-05-12 17:58:24
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/NewPipeSiteExtractionStrategy.kt
NewPipeSiteExtractionStrategy
S0175: replace deprecated Stream.url with Stream.content (v0.26.1 API)
2026-05-12 17:58:25
scripts/builders/build-nolegal-debug.ps1
build-nolegal-debug.ps1
S0175: add –no-configuration-cache flag (Chaquopy incompatibility with Gradle CC)
2026-05-12 17:58:25
scripts/builders/build-nolegal-release.ps1
build-nolegal-release.ps1
S0175: add –no-configuration-cache flag
2026-05-12 17:58:25
scripts/builders/build-nolegal-device.ps1
build-nolegal-device.ps1
S0175: add –no-configuration-cache flag
2026-05-12 17:58:25
app_v2/src/vr/res/mipmap-anydpi-v26/
ic_launcher.xml
S0175: remove duplicate launcher icons (identical to main source set) to fix noLegal resource merge conflict
2026-05-12 18:03:15
PLAN/S0175_nolegal-newpipe-version-bump.md
spec-check
Audit S0175 -> Verified; PASS/WARN/FAIL 13/0/0; EXEMPT 1
2026-05-12 18:08:17
PLAN/S0176_nolegal-session-context-etld-fix.md
spec-update
Resolve research blockers Q1 Q2 Q3 and fix the strategic decisions for S0176
2026-05-12 18:08:17
PLAN/S0176_nolegal-session-context-etld-fix/INDEX.md
spec-update
Mark S0176 tactical blockers resolved and unblock spec-dev
2026-05-12 18:08:17
PLAN/S0176_nolegal-session-context-etld-fix/PHASE_01__domain-resolution.md
spec-update
Fix Phase 01 to require the PSL-aware OkHttp resolver
2026-05-12 18:08:17
PLAN/S0176_nolegal-session-context-etld-fix/PHASE_02__session-context-binding.md
spec-update
Fix Phase 02 scope after research confirmed dynamic WebView impact and unchanged holder
2026-05-12 18:08:17
PLAN/S0176_nolegal-session-context-etld-fix/PHASE_03__regression-tests.md
spec-update
Fix Phase 03 test scope for resolved Q3 session-context behavior
2026-05-12 18:22:32
TEMP/garbage/
project root / dev / PLAN/Other / source backups
Move 31 junk files to TEMP/garbage: AI agent dumps (root .kt copies, build logs, compile_errors.txt), 4 .backup and 1 .aar.bak from source tree, 11 dev/ TASK+DESIGN temp docs, 9 PLAN/Other/ ad-hoc notes, stale log.log, stray androidx .class file
2026-05-12 18:47:33
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkCookieDomainResolver.kt
LinkCookieDomainResolver
S0176: add shared PSL-aware registrableDomainOrNull() resolver using OkHttp topPrivateDomain()
2026-05-12 18:47:33
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadCookieJar.kt
LinkDownloadCookieJar
S0176: replace naive two-label registrableDomain() with shared PSL-aware registrableDomainOrNull()
2026-05-12 18:47:33
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
S0176: add eTLD+1 fallback in resolveSessionHost(); applySessionContext() uses resolved host for sessionContext.set() and markLastUsed()
2026-05-12 18:47:33
app_v2/src/test/java/com/sza/fastmediasorter/data/link/cookie/LinkCookieDomainResolverTest.kt
LinkCookieDomainResolverTest
S0176: add contract tests for registrableDomainOrNull() PSL resolver
2026-05-12 18:47:33
app_v2/src/test/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadSessionContextTest.kt
LinkDownloadSessionContextTest
S0176: add contract tests for cookiesFor() matching rules (Q3 research result)
2026-05-12 18:47:33
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
LinkAutoDownloadCoordinatorTest
S0176: add coordinator tests for exact-match precedence, eTLD+1 fallback host binding, and markLastUsed resolved host
2026-05-12 18:49:42
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
S0176: insert Timber.d debug tag for BlockNeedUserTest verification
2026-05-12 19:59:41
PLAN/S0176_nolegal-session-context-etld-fix.md
spec-check
Audit S0176 -> Partial; PASS/WARN/FAIL 14/1/0; WARN: coordinator LOC budget pre-existing; removed BlockNeedUserTest debug tag
2026-05-12 19:59:48
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-check
S0176: remove stale Timber.d debug tag (status leaving BlockNeedUserTest)
2026-05-12 20:00:26
PLAN/S0176_nolegal-session-context-etld-fix.md
spec-fix
Annotate Last Audit (S0176): 0 auto-fixed, 1 FOLLOW-UP (line budget pre-existing)
2026-05-12 20:05:21
PLAN/S0177_nolegal-native-site-extractors/INDEX.md
spec-tech
Create tactical plan for S0177 - noLegal native site extractors
2026-05-12 20:05:21
PLAN/S0177_nolegal-native-site-extractors/PHASE_01__artstation-extractor.md
spec-tech
Phase 01: artstation-extractor - CANONICAL_ORDER + ArtStation strategy + DI
2026-05-12 20:05:21
PLAN/S0177_nolegal-native-site-extractors/PHASE_02__deviantart-extractor.md
spec-tech
Phase 02: deviantart-extractor - INITIAL_STATE + oEmbed fallback
2026-05-12 20:05:21
PLAN/S0177_nolegal-native-site-extractors/PHASE_03__vimeo-extractor.md
spec-tech
Phase 03: vimeo-extractor - player config JSON, MP4 or HLS
2026-05-12 20:05:21
PLAN/S0177_nolegal-native-site-extractors/PHASE_04__dailymotion-extractor.md
spec-tech
Phase 04: dailymotion-extractor - embed page HLS stream
2026-05-12 20:05:21
PLAN/S0177_nolegal-native-site-extractors/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup - noLegal feature docs + catalog regen
2026-05-12 20:05:21
PLAN/S0177_nolegal-native-site-extractors.md
spec-tech
Status Approved → Tactical; tactical plan linked
2026-05-12 20:06:27
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistry.kt
S0177
Add artstation/deviantart/vimeo/dailymotion to CANONICAL_ORDER
2026-05-12 20:07:50
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/ArtStationExtractionStrategy.kt
S0177
New native extractor for artstation.com
2026-05-12 20:07:50
app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalLinkDownloadModule.kt
S0177
Bind ArtStationExtractionStrategy
2026-05-12 20:15:28
app_v2/build.gradle.kts
isNoLegalBuild
Fix Chaquopy variant gate: explicit -Pchaquopy.enabled flag now overrides local.properties; prevents non-noLegal variants being disabled when local.properties has chaquopy.enabled=true
2026-05-12 20:15:28
scripts/builders/
build scripts (20 files)
Add -Pchaquopy.enabled=false to all non-noLegal build scripts; split build-and-push-all into two-pass (non-noLegal first, noLegal second)
2026-05-12 20:17:47
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/DeviantArtExtractionStrategy.kt
S0177
New native extractor for deviantart.com with INITIAL_STATE + oEmbed fallback
2026-05-12 20:17:47
app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalLinkDownloadModule.kt
S0177
Bind DeviantArtExtractionStrategy
2026-05-12 20:19:59
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/VimeoExtractionStrategy.kt
S0177
New native extractor for vimeo.com - player config JSON, MP4 or HLS
2026-05-12 20:19:59
app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalLinkDownloadModule.kt
S0177
Bind VimeoExtractionStrategy
2026-05-12 20:21:13
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/DailymotionExtractionStrategy.kt
S0177
New native extractor for dailymotion.com - embed page HLS stream
2026-05-12 20:21:13
app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalLinkDownloadModule.kt
S0177
Bind DailymotionExtractionStrategy
2026-05-12 20:31:49
docs/FEATURES_noLegal.md
S0177
Document native extractors: ArtStation, DeviantArt, Vimeo, Dailymotion
2026-05-12 20:31:49
dev/CATALOG/app_v2.md
S0177
Catalog regen: 4 new noLegal extractor classes
2026-05-12 20:33:52
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/ArtStationExtractionStrategy.kt
S0177
Insert BlockNeedUserTest debug tag
2026-05-12 20:33:52
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/DeviantArtExtractionStrategy.kt
S0177
Insert BlockNeedUserTest debug tag
2026-05-12 20:33:52
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/VimeoExtractionStrategy.kt
S0177
Insert BlockNeedUserTest debug tag
2026-05-12 20:33:52
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/DailymotionExtractionStrategy.kt
S0177
Insert BlockNeedUserTest debug tag
2026-05-12 20:38:10
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/ArtStationExtractionStrategy.kt
spec-check
Remove S0177 debug tag (BlockNeedUserTest -> Partial)
2026-05-12 20:38:10
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/DeviantArtExtractionStrategy.kt
spec-check
Remove S0177 debug tag (BlockNeedUserTest -> Partial)
2026-05-12 20:38:10
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/VimeoExtractionStrategy.kt
spec-check
Remove S0177 debug tag (BlockNeedUserTest -> Partial)
2026-05-12 20:38:10
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/DailymotionExtractionStrategy.kt
spec-check
Remove S0177 debug tag (BlockNeedUserTest -> Partial)
2026-05-12 20:38:10
PLAN/S0177_nolegal-native-site-extractors.md
spec-check
Audit S0177 -> Partial; PASS/WARN/FAIL 40/4/0; phase 03+04 metadata stale
2026-05-12 20:39:58
PLAN/S0177_nolegal-native-site-extractors.md
spec-fix
Annotate Last Audit (S0177)
2026-05-12 20:39:58
PLAN/S0177_nolegal-native-site-extractors/PHASE_03__vimeo-extractor.md
spec-fix
Fix phase 03 metadata: flip header+steps to Done
2026-05-12 20:39:58
PLAN/S0177_nolegal-native-site-extractors/PHASE_04__dailymotion-extractor.md
spec-fix
Fix phase 04 metadata: flip header+steps to Done
2026-05-12 20:40:52
PLAN/S0177_nolegal-native-site-extractors.md
spec-check
Audit S0177 -> Verified; PASS/WARN/FAIL 44/0/0
2026-05-12 22:34:19
app_v2/src/main/java/com/sza/fastmediasorter/utils/VideoFrameExtractionPolicy.kt
S0178
Add VideoFrameExtractionPolicy: seek offsets and retry limits for black-frame detection
2026-05-12 22:34:25
app_v2/src/main/java/com/sza/fastmediasorter/utils/VideoFrameDarknessEvaluator.kt
S0178
Add VideoFrameDarknessEvaluator: mean luma computation for black frame detection
2026-05-12 22:34:27
dev/CATALOG/scripts/render.ps1
spec-check S0177
Fix Resolve-SourceLink: add noLegal/java + streamingEnabled/java to candidateRoots - was generating wrong src/main/java paths for noLegal classes
2026-05-12 22:34:27
dev/CATALOG/app_v2.md
spec-check S0177
Regen after render.ps1 fix - noLegal extractor links now point to src/noLegal/java
2026-05-12 22:34:27
PLAN/S0177_nolegal-native-site-extractors.md
spec-check
Re-audit S0177 -> Verified; PASS 46/WARN 0/FAIL 0; fixed render.ps1 candidateRoots bug
2026-05-12 22:36:42
gradle.properties
gradle.properties
Demote CC problems to warn: Chaquopy 17.x is not configuration-cache-compatible, noLegal builds from AS now proceed without failing
2026-05-12 22:40:09
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt
S0178
Add dark-frame retry loop and lazy cache eviction to network video frame decoder
2026-05-12 22:41:46
gradle.properties
org.gradle.jvmargs
Add –add-opens java.base/java.lang.ref=ALL-UNNAMED to jvmargs: fixes InaccessibleObjectException when Gradle CC serializer touches ReferenceQueue.head
2026-05-12 22:43:35
app_v2/src/main/java/com/sza/fastmediasorter/worker/ThumbnailExtractorHelper.kt
S0178
Add dark-frame retry loop to background video thumbnail extractor
2026-05-12 22:46:29
gradle.properties
gradle.properties
Disable configuration cache globally: Chaquopy 17.x holds non-serializable Gradle types in task actions; problems=warn and –add-opens are insufficient, ConfigurationCacheError is fatal regardless
2026-05-12 22:47:13
docs/FEATURES.md
S0178
Document black-frame detection for video thumbnails
2026-05-12 22:47:13
docs/FEATURES_RU.md
S0178
Document black-frame detection (RU)
2026-05-12 22:47:14
docs/FEATURES_UK.md
S0178
Document black-frame detection (UK)
2026-05-12 22:51:22
PLAN/S0178_video-thumbnail-black-frame-detection.md
spec-check
Audit S0178 -> Verified; PASS/WARN/FAIL 32/0/0
2026-05-12 23:22:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/NetworkDiscoveryDialog.kt
NetworkDiscoveryDialog
Fix IllegalStateException: move view inflation to onCreateView/onViewCreated so viewLifecycleOwner is available when collectOnLifecycle is called
2026-05-12 23:55:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DiscoverNetworkResourcesUseCase.kt
DiscoverNetworkResourcesUseCase
Parallelize port probing per IP (445+139+21+22 concurrent async) - worst-case per-IP drops from 1000ms to 300ms; add onProgress callback for live scan status
2026-05-12 23:55:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
AddResourceState
Add ScanProgress data class and scanProgress field to expose per-subnet probe counter
2026-05-12 23:55:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceNetworkScanCoordinator.kt
AddResourceNetworkScanCoordinator
Wire onProgress callback from UseCase to AddResourceState.scanProgress
2026-05-12 23:55:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/NetworkDiscoveryDialog.kt
NetworkDiscoveryDialog
Show live scan progress in tvStatus: subnet.x (done/total) instead of static Scanning text
2026-05-13 00:01:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/NetworkDiscoveryDialog.kt
NetworkDiscoveryDialog
Replace deprecated ViewCompat.setAccessibilityLiveRegion with View.accessibilityLiveRegion property (minSdk 26)
2026-05-13 00:19:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/NetworkDiscoveryDialog.kt
NetworkDiscoveryDialog
Fix dialog empty content: restore setView() in onCreateDialog, replace viewLifecycleOwner collection with lifecycleScope+repeatOnLifecycle(STARTED)
2026-05-13 00:44:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Lower low-memory toast threshold from 30 MB to 10 MB (NATIVE_HEAP_CRITICAL_TOAST_THRESHOLD_BYTES); add one-shot guard (lowMemoryToastShownThisSession) to suppress chronic spam on constrained-memory devices
2026-05-13 00:52:16
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkMediaDataSource.kt
NetworkMediaDataSource.readAt
Remove Timber.d on closed-DataSource path - MediaMetadataRetriever calls readAt in a tight loop after close, producing ~3200 log lines/sec of pure noise
2026-05-13 01:46:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt
BrowseNavigationManager
Fix: CancellationException from ConnectionThrottleManager no longer logged as E or invalidates directory cache; re-thrown cleanly for structured concurrency
2026-05-13 02:27:10
app_v2/src/noLegalDebug/res/
noLegal debug icon fix
Add noLegalDebug source set to override debug buildType icon: copy main PNGs for all densities + adaptive icon XMLs pointing to skull-badge foreground drawable
2026-05-13 02:57:54
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0174
Fix probe() using process=False to skip network calls; add inner runCatching logging
2026-05-13 10:08:12
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0174
Fix probe(): replace extract_info network call with ytdlp_utils.probe_url() suitable() pattern match - zero network, auth-required sites now correctly return Applicable
2026-05-13 10:08:12
app_v2/src/noLegal/python/ytdlp_utils.py
S0174
New: Python helper module - probe_url() iterates yt-dlp extractors via suitable() without network calls
2026-05-13 11:26:22
PLAN/S0165_browse-create-folder/INDEX.md
spec-tech
Create tactical plan for S0165
2026-05-13 11:26:22
PLAN/S0165_browse-create-folder/PHASE_01__resources.md
spec-tech
Phase 01: resources
2026-05-13 11:26:22
PLAN/S0165_browse-create-folder/PHASE_02__kotlin-wiring.md
spec-tech
Phase 02: kotlin-wiring
2026-05-13 11:26:22
PLAN/S0165_browse-create-folder/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup
2026-05-13 11:26:22
PLAN/S0165_browse-create-folder.md
spec-tech
Status -> Tactical
2026-05-13 11:26:43
PLAN/S0162_screen-rotation-control/
S0162
Write tactical spec: 5-phase plan for screen rotation control (ScreenRotationManager, AppSettings fields, PlaybackSettingsFragment toggle, CommandPanelLayoutPlanner ROTATION_TOGGLE command, PlayerActivity wiring)
2026-05-13 11:47:14
PLAN/S0160_resource-ops-overflow-toggle/INDEX.md
spec-tech
Create tactical plan for S0160
2026-05-13 11:47:14
PLAN/S0160_resource-ops-overflow-toggle/PHASE_01__settings-model.md
spec-tech
S0160 Phase 01: settings-model
2026-05-13 11:47:14
PLAN/S0160_resource-ops-overflow-toggle/PHASE_02__scan-single-resource.md
spec-tech
S0160 Phase 02: scan-single-resource
2026-05-13 11:47:14
PLAN/S0160_resource-ops-overflow-toggle/PHASE_03__adapter-overflow.md
spec-tech
S0160 Phase 03: adapter-overflow
2026-05-13 11:47:14
PLAN/S0160_resource-ops-overflow-toggle/PHASE_04__settings-ui.md
spec-tech
S0160 Phase 04: settings-ui
2026-05-13 11:47:14
PLAN/S0160_resource-ops-overflow-toggle/PHASE_05__activity-wiring.md
spec-tech
S0160 Phase 05: activity-wiring
2026-05-13 11:47:14
PLAN/S0160_resource-ops-overflow-toggle/PHASE_06__docs-catalog-cleanup.md
spec-tech
S0160 Phase 06: docs-catalog-cleanup
2026-05-13 11:47:14
PLAN/S0160_resource-ops-overflow-toggle.md
spec-tech
S0160 Status -> Tactical
2026-05-13 11:51:37
PLAN/S0135_play-store-listing-optimization/INDEX.md
spec-tech
Create tactical plan for S0135
2026-05-13 11:51:37
PLAN/S0135_play-store-listing-optimization/PHASE_01__copywriting.md
spec-tech
Phase 01: copywriting
2026-05-13 11:51:37
PLAN/S0135_play-store-listing-optimization/PHASE_02__design-brief.md
spec-tech
Phase 02: design-brief
2026-05-13 11:51:38
PLAN/S0135_play-store-listing-optimization/PHASE_03__review-foundation.md
spec-tech
Phase 03: review-foundation
2026-05-13 11:51:38
PLAN/S0135_play-store-listing-optimization/PHASE_04__review-integration.md
spec-tech
Phase 04: review-integration
2026-05-13 11:51:38
PLAN/S0135_play-store-listing-optimization/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-13 11:51:38
PLAN/S0135_play-store-listing-optimization.md
spec-tech
Status → Tactical
2026-05-13 11:51:42
PLAN/S0159_file-ops-overflow-menu/INDEX.md
spec-tech
Create tactical plan for S0159 file-ops-overflow-menu
2026-05-13 11:51:42
PLAN/S0159_file-ops-overflow-menu/PHASE_01__settings-model.md
spec-tech
Phase 01: settings-model
2026-05-13 11:51:42
PLAN/S0159_file-ops-overflow-menu/PHASE_02__adapter-overflow-menu.md
spec-tech
Phase 02: adapter-overflow-menu
2026-05-13 11:51:42
PLAN/S0159_file-ops-overflow-menu/PHASE_03__browse-wiring.md
spec-tech
Phase 03: browse-wiring
2026-05-13 11:51:42
PLAN/S0159_file-ops-overflow-menu/PHASE_04__settings-ui.md
spec-tech
Phase 04: settings-ui
2026-05-13 11:51:43
PLAN/S0159_file-ops-overflow-menu/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup
2026-05-13 11:51:43
PLAN/S0159_file-ops-overflow-menu.md
spec-tech
Status Approved -> Tactical
2026-05-13 11:56:33
PLAN/S0158_player-large-buttons.md
spec-update
S0158: renamed to Big Buttons Mode, expanded scope to top toolbar (8-button limit, overflow, icons, captions), height 150%->200%
2026-05-13 12:05:48
PLAN/S0158_player-large-buttons.md
spec-update
S0158: clarified height as 2x px (not screen proportion); short labels resolved as new string resources
2026-05-13 12:25:43
PLAN/S0179_git-branching-model.md
spec
Add strategic spec S0179 for git-branching-model
2026-05-13 12:40:49
PLAN/S0179_git-branching-model.md
spec
Refine S0179: max 2 DEBUG branches, future-branch concept, resolve open questions
2026-05-13 12:49:11
PLAN/S0179_git-branching-model/INDEX.md
spec-tech
Create tactical plan for S0179
2026-05-13 12:49:12
PLAN/S0179_git-branching-model/PHASE_01__claude-md-rules.md
spec-tech
Phase 01: claude-md-rules
2026-05-13 12:49:12
PLAN/S0179_git-branching-model/PHASE_02__dev-docs-update.md
spec-tech
Phase 02: dev-docs-update
2026-05-13 12:49:12
PLAN/S0179_git-branching-model/PHASE_03__dev-log-branch-tag.md
spec-tech
Phase 03: dev-log-branch-tag
2026-05-13 12:49:12
PLAN/S0179_git-branching-model/PHASE_04__build-script-warning.md
spec-tech
Phase 04: build-script-warning
2026-05-13 12:49:13
PLAN/S0179_git-branching-model/PHASE_05__git-branch-init.md
spec-tech
Phase 05: git-branch-init
2026-05-13 12:49:13
PLAN/S0179_git-branching-model.md
spec-tech
Status -> Tactical
2026-05-13 13:05:50
CLAUDE.md
Git Branching Model
Add Git Branching Model section and branch-context post-change step
2026-05-13 13:06:57
dev/PROJECT_OPERATIONS_INDEX.md
Workspace Topology
Add branch model reference and git branch commands
2026-05-13 13:06:57
dev/AGENT_WORKFLOW.md
8.0 Task Definition
Add branch check step and future-branch planning note
2026-05-13 13:07:35
scripts/add_to_dev_log.ps1
add_to_dev_log
Add branch tag to dev log entries [branch: main]
2026-05-13 13:08:13
dev/build-with-version.ps1
build-with-version
Add main-branch warning at startup [branch: main]
2026-05-13 13:09:24
.git/refs/heads/DEBUG-v001
git
Create DEBUG-v001 from main (release/v2.60.5130.151) [branch: DEBUG-v001]
2026-05-13 13:09:58
PLAN/S0179_git-branching-model.md
S0179
Status -> Implemented; all 5 phases done [branch: DEBUG-v001]
2026-05-13 13:11:32
PLAN/S0179_git-branching-model.md
spec-check
Audit S0179 -> Verified; PASS 17/WARN 0/FAIL 0 [branch: DEBUG-v001]
2026-05-13 13:18:08
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0174
Fix open(): replace buildMap Kotlin Map with native Python dict via py.builtins.callAttr(dict) - Kotlin Map.get() takes 1 arg, yt-dlp calls opts.get(key, default) with 2 args [branch: DEBUG-v001]
2026-05-13 13:39:55
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0174
Fix: use format-level http_headers for CDN download (TikTok signed URLs); return NotFound for ‘no video in post’ and ‘Unsupported URL’ errors to enable fallback chain [branch: DEBUG-v001]
2026-05-13 13:39:55
app_v2/src/noLegal/python/ytdlp_utils.py
S0174
Fix: exclude threads.com from probe_url (ThreadsIE supports threads.net only in this yt-dlp build); add _PROBE_EXCLUDED_HOSTS guard [branch: DEBUG-v001]
2026-05-13 14:24:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt
StandaloneFileOperationsHandler
Fix: delete failed IAE on API 35 for app-owned MediaStore files - try contentResolver.delete() first, fall back to createDeleteRequest only for cross-app files [branch: DEBUG-v001]
2026-05-13 14:28:23
CLAUDE.md
Git Branching Model
Add fix-release concept: fixes-only direct commits to main, rebase DEBUG branches after [branch: DEBUG-v001]
2026-05-13 14:37:52
app_v2/src/main/res/drawable/ic_create_new_folder_24.xml
S0165
Add create_new_folder vector drawable [branch: DEBUG-v001]
2026-05-13 14:38:31
app_v2/src/main/res/layout/activity_browse.xml
S0165
Add btnCreateFolder to portrait toolbar [branch: DEBUG-v001]
2026-05-13 14:39:06
app_v2/src/main/res/layout-land/activity_browse.xml
S0165
Add btnCreateFolder to landscape toolbar [branch: DEBUG-v001]
2026-05-13 14:41:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseButtonSetupHelper.kt
S0165
Add onCreateFolderClicked callback and handler [branch: DEBUG-v001]
2026-05-13 14:41:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
S0165
Add updateCreateFolderButtonVisibility [branch: DEBUG-v001]
2026-05-13 14:43:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0165
Wire onCreateFolderClicked to ResourceOpsMenuManager [branch: DEBUG-v001]
2026-05-13 14:45:27
docs/FEATURES.md
S0165
Document Create Folder toolbar button [branch: DEBUG-v001]
2026-05-13 14:45:27
docs/FEATURES_RU.md
S0165
Document Create Folder toolbar button (RU) [branch: DEBUG-v001]
2026-05-13 14:45:27
docs/FEATURES_UK.md
S0165
Document Create Folder toolbar button (UK) [branch: DEBUG-v001]
2026-05-13 14:46:47
dev/CATALOG/app_v2.jsonl
S0165
Catalog regen after browse-create-folder implementation [branch: DEBUG-v001]
2026-05-13 14:46:47
dev/CATALOG/app_v2.md
S0165
Catalog render after browse-create-folder implementation [branch: DEBUG-v001]
2026-05-13 14:47:51
PLAN/S0165_browse-create-folder.md
S0165
Status -> BlockNeedUserTest, Implemented date: 2026-05-13 [branch: DEBUG-v001]
2026-05-13 15:11:30
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
noLegal yt-dlp
Fix Instagram low-resolution: iterate all yt-dlp formats and select best quality by height*10000+tbr score instead of taking first format [branch: DEBUG-v001]
2026-05-13 15:11:30
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
noLegal yt-dlp
Fix empty batch (Instagram image-only/restricted posts): return NotFound on batch(0) so extraction chain falls through [branch: DEBUG-v001]
2026-05-13 15:11:30
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
noLegal yt-dlp
Add TikTok Python download fallback: intercept Blocked(AuthRequired) from DirectFileExtractionStrategy and re-download via ytdlp_utils.download_to_file() since TikTok CDN URLs are session-bound [branch: DEBUG-v001]
2026-05-13 15:11:30
app_v2/src/noLegal/python/ytdlp_utils.py
noLegal yt-dlp
Add download_to_file() Python function: yt-dlp direct download to cacheDir temp file for session-bound CDN URLs (TikTok) [branch: DEBUG-v001]
2026-05-13 15:11:30
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
noLegal yt-dlp
Add per-format quality logging (fmt id/ext/vcodec/height/tbr/quality score) and selected format summary for diagnostics [branch: DEBUG-v001]
2026-05-13 15:17:03
PLAN/S0162_screen-rotation-control/PHASE_06__keybinding.md
S0162
Add Phase 06: keyboard binding for rotation toggle - CommandId.ROTATION_TOGGLE, default key R (key:46:0), PlayerKeyboardHandler dispatch, keybinding_label strings [branch: DEBUG-v001]
2026-05-13 15:18:42
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0162
Add followSystemRotation and playerRotationSensorEnabled fields to AppSettings [branch: DEBUG-v001]
2026-05-13 15:18:42
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0162
Add DataStore keys and read/write for followSystemRotation, playerRotationSensorEnabled [branch: DEBUG-v001]
2026-05-13 15:19:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ScreenRotationManager.kt
S0162
New class: ScreenRotationManager - two-level orientation control (followSystem/sensorEnabled), accelerometer guard, reapply() for DrawMode exit [branch: DEBUG-v001]
2026-05-13 15:20:14
CLAUDE.md
Git Branching Model
Document release worktree at FastMediaSorter_release pointing to main [branch: DEBUG-v001]
2026-05-13 15:21:35
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0162
Add layoutFollowSystemRotation+switchFollowSystemRotation row in Player UI section [branch: DEBUG-v001]
2026-05-13 15:21:36
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
S0162
Add layoutFollowSystemRotation+switchFollowSystemRotation row (landscape mirror) [branch: DEBUG-v001]
2026-05-13 15:21:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0162
Wire switchFollowSystemRotation: accelerometer guard, listener, observeData sync [branch: DEBUG-v001]
2026-05-13 15:29:50
app_v2/src/main/java/com/sza/fastmediasorter/domain/input/CommandId.kt
S0162
Add ROTATION_TOGGLE command id constant [branch: DEBUG-v001]
2026-05-13 15:29:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0162
Add ROTATION_TOGGLE(490) enum entry and showRotationToggle condition in buildActiveCommands [branch: DEBUG-v001]
2026-05-13 15:29:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0162
Add onRotationToggleClicked callback, click listener, overflow handler, barViewForCommand case, updateRotationToggleIcon() [branch: DEBUG-v001]
2026-05-13 15:29:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
S0162
Add btnRotationToggleCmd safe view accessor [branch: DEBUG-v001]
2026-05-13 15:30:09
app_v2/src/main/res/layout/activity_player_unified.xml
S0162
Add btnRotationToggleCmd ImageButton [branch: DEBUG-v001]
2026-05-13 15:30:09
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0162
Add btnRotationToggleCmd ImageButton (landscape parity) [branch: DEBUG-v001]
2026-05-13 15:30:09
app_v2/src/main/res/menu/overflow_menu_player.xml
S0162
Add menu_rotation_toggle overflow item [branch: DEBUG-v001]
2026-05-13 15:30:17
app_v2/src/main/res/drawable/ic_rotation_unlocked.xml
S0162
Add screen_rotation vector drawable [branch: DEBUG-v001]
2026-05-13 15:30:18
app_v2/src/main/res/drawable/ic_rotation_locked.xml
S0162
Add screen_lock_rotation vector drawable [branch: DEBUG-v001]
2026-05-13 15:30:18
app_v2/src/main/res/values/strings.xml
S0162
Add rotation_toggle_title, rotation_toggle_sensor_on_desc, rotation_toggle_sensor_off_desc strings (EN/RU/UK) [branch: DEBUG-v001]
2026-05-13 15:31:40
PLAN/S0180_standalone-player-file-info-button.md
spec
Add strategic spec S0180 for standalone-player-file-info-button [branch: DEBUG-v001]
2026-05-13 15:34:16
a.ps1
release commands r/vr/nl
Redirect r/vr/nl to release worktree (git pull + build from main) [branch: DEBUG-v001]
2026-05-13 15:37:38
PLAN/S0180_standalone-player-file-info-button/INDEX.md
spec-tech
Create tactical plan for S0180 [branch: DEBUG-v001]
2026-05-13 15:37:38
PLAN/S0180_standalone-player-file-info-button/PHASE_01__file-info-wiring.md
spec-tech
Phase 01: file-info-wiring [branch: DEBUG-v001]
2026-05-13 15:37:38
PLAN/S0180_standalone-player-file-info-button/PHASE_02__open-in-fms-relocation.md
spec-tech
Phase 02: open-in-fms-relocation [branch: DEBUG-v001]
2026-05-13 15:37:38
PLAN/S0180_standalone-player-file-info-button/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-13 15:37:38
PLAN/S0180_standalone-player-file-info-button.md
spec-tech
Status -> Tactical [branch: DEBUG-v001]
2026-05-13 15:38:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0162
Add showRotationToggle/followSystemRotation/playerRotationSensorEnabled to PlayerState; add RotationSensorToggled event; add initRotationCapability() and toggleRotationSensor() [branch: DEBUG-v001]
2026-05-13 15:38:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0162
Add screenRotationManager, hasAccelerometer; init rotation capability on onCreate; apply on onResume; add onRotationSensorToggled() [branch: DEBUG-v001]
2026-05-13 15:38:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt
S0162
Add screenRotationManager.apply() + updateRotationToggleIcon() in settings observer [branch: DEBUG-v001]
2026-05-13 15:38:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
S0162
Handle RotationSensorToggled event [branch: DEBUG-v001]
2026-05-13 15:38:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0162
Add onRotationToggleClicked override [branch: DEBUG-v001]
2026-05-13 15:39:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0162 ADR-4
Add screenRotationManager+hasAccelerometer params; replace SCREEN_ORIENTATION_UNSPECIFIED with screenRotationManager.reapply() [branch: DEBUG-v001]
2026-05-13 15:39:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0162
Pass screenRotationManager and hasAccelerometer to ImageDrawOverlayManager [branch: DEBUG-v001]
2026-05-13 15:40:47
app_v2/src/main/assets/input/default_bindings.json
S0162
Add view.rotation_toggle binding with default key R (key:46:0) [branch: DEBUG-v001]
2026-05-13 15:40:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt
S0162
Add onToggleRotationSensor() to callback interface; dispatch ROTATION_TOGGLE in handleCommand() [branch: DEBUG-v001]
2026-05-13 15:40:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
S0162
Add onToggleRotationSensor override [branch: DEBUG-v001]
2026-05-13 15:43:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
S0180
Add showFileInfo(), restore btnInfoCmd to FileInfoDialog, fix keyboard onShowFileInfo [branch: DEBUG-v001]
2026-05-13 15:48:15
a.ps1
release worktree sync
Mirror worktree DOWNLOADS to local DOWNLOADS after release build [branch: DEBUG-v001]
2026-05-13 15:49:46
app_v2/src/main/res/menu/overflow_menu_standalone_player.xml
S0180
Add standalone player overflow menu with Open-in-FMS action [branch: DEBUG-v001]
2026-05-13 15:49:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
S0180
Wire btnOverflowMenu PopupMenu with Open-in-FMS for standalone player [branch: DEBUG-v001]
2026-05-13 15:50:47
PLAN/S0162_screen-rotation-control.md
spec-check
Audit S0162 -> Partial; PASS 18 / WARN 0 / FAIL 1 (FEATURES.md entries missing) [branch: DEBUG-v001]
2026-05-13 15:51:12
dev/CATALOG/app_v2.jsonl
S0180
Catalog scan after Phase 01+02 changes [branch: DEBUG-v001]
2026-05-13 15:51:12
PLAN/S0180_standalone-player-file-info-button/INDEX.md
S0180
Tactical plan complete - all phases done [branch: DEBUG-v001]
2026-05-13 15:52:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
S0180
Insert S0180 debug verification tags (BlockNeedUserTest) [branch: DEBUG-v001]
2026-05-13 15:52:44
docs/FEATURES.md
S0162
Add in-player rotation toggle (§7) and screen rotation control (§19) feature bullets [branch: DEBUG-v001]
2026-05-13 15:52:44
docs/FEATURES_RU.md
S0162
Mirror in-player rotation toggle + screen rotation control bullets (RU) [branch: DEBUG-v001]
2026-05-13 15:52:45
docs/FEATURES_UK.md
S0162
Mirror in-player rotation toggle + screen rotation control bullets (UK) [branch: DEBUG-v001]
2026-05-13 15:52:45
PLAN/S0162_screen-rotation-control.md
spec-fix
Annotate Last Audit (S0162): FIXED FEATURES.md entries [branch: DEBUG-v001]
2026-05-13 15:53:18
.claude/commands/git.md
git.md
Synced full branching model (worktree, fix-release, plateau merge, DEBUG numbering) from git.prompt.md [branch: DEBUG-v001]
2026-05-13 15:54:05
PLAN/S0162_screen-rotation-control.md
spec-check
Audit S0162 -> Verified; PASS 19 / WARN 0 / FAIL 0. Debug tags removed: 0. [branch: DEBUG-v001]
2026-05-13 15:56:32
.claude/commands/skill-release.md
skill-release
New slash command: plateau release pipeline (merge DEBUG→main, docs update, next branch, release build) [branch: DEBUG-v001]
2026-05-13 16:00:10
scripts/release-worktree-sync.txt
release-worktree-sync.txt
New manifest: gitignored files to sync from dev to release worktree before each release build [branch: DEBUG-v001]
2026-05-13 16:00:10
a.ps1
a.ps1
Added release-worktree-sync step: copies gitignored required files to worktree before release build [branch: DEBUG-v001]
2026-05-13 16:00:10
.claude/commands/skill-release.md
skill-release
Updated step 11 (branch transition): reuse existing future branch if present, create next if absent [branch: DEBUG-v001]
2026-05-13 16:04:26
docs/HOW_TO_DEVELOP_AND_RELEASE_RU.md
HOW_TO_DEVELOP_AND_RELEASE_RU
New developer guide: three release scenarios (debug dev loop, fix-release, plateau release via skill-release) [branch: DEBUG-v001]
2026-05-13 16:09:42
.claude/commands/skill-fix-release.md
skill-fix-release
New slash command: fix-release pipeline - cherry-picks spec-specific commits to main, tags, builds, rebases DEBUG [branch: DEBUG-v001]
2026-05-13 16:09:42
docs/HOW_TO_DEVELOP_AND_RELEASE_RU.md
HOW_TO_DEVELOP_AND_RELEASE_RU
Updated scenario 2: fix-release now via /skill-fix-release with automated cherry-pick and rebase [branch: DEBUG-v001]
2026-05-13 16:15:49
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0159 step 1.1
Add fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown fields [branch: DEBUG-v001]
2026-05-13 16:16:53
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0159 step 1.2
Add KEY_FILE_OPS_IN_OVERFLOW_MENU and KEY_FILE_OPS_OVERFLOW_MENU_HINT_SHOWN DataStore keys [branch: DEBUG-v001]
2026-05-13 16:17:33
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0159 step 1.3
Wire fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown into getSettings() read path [branch: DEBUG-v001]
2026-05-13 16:18:19
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0159 step 1.4
Wire fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown into saveSettings() write path [branch: DEBUG-v001]
2026-05-13 16:21:56
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
S0159 Phase 01 Step 1.5
Add fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown to BackupSettings backup payload [branch: DEBUG-v001]
2026-05-13 16:22:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
S0159 Phase 01 Step 1.5
Map fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown in toBackupData() and fromBackupData() [branch: DEBUG-v001]
2026-05-13 16:23:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt
S0159 Phase 01 Step 1.6
Export fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown to XML [branch: DEBUG-v001]
2026-05-13 16:23:32
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt
S0159 Phase 01 Step 1.6
Import fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown from XML [branch: DEBUG-v001]
2026-05-13 16:24:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
S0159 Phase 01 Step 1.7
Reset fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown in resetPlaybackSection() [branch: DEBUG-v001]
2026-05-13 16:26:23
PLAN/S0158_player-large-buttons/INDEX.md
spec-tech
S0158: create tactical plan (5 phases) [branch: DEBUG-v001]
2026-05-13 16:26:23
PLAN/S0158_player-large-buttons/PHASE_01__foundations.md
spec-tech
S0158 Phase 01: preferences key + PlayerCommand short labels + string resources [branch: DEBUG-v001]
2026-05-13 16:26:23
PLAN/S0158_player-large-buttons/PHASE_02__big-buttons-manager.md
spec-tech
S0158 Phase 02: PlayerBigButtonsModeManager (top panel + bottom panel + overflow menu) [branch: DEBUG-v001]
2026-05-13 16:26:24
PLAN/S0158_player-large-buttons/PHASE_03__settings-toggle.md
spec-tech
S0158 Phase 03: settings toggle UI + PlaybackSettingsFragment wiring [branch: DEBUG-v001]
2026-05-13 16:26:24
PLAN/S0158_player-large-buttons/PHASE_04__integration.md
spec-tech
S0158 Phase 04: integration into CommandPanelController + PlayerManagerInitializer + PlayerControlsSetupManager [branch: DEBUG-v001]
2026-05-13 16:26:24
PLAN/S0158_player-large-buttons/PHASE_05__docs-catalog-cleanup.md
spec-tech
S0158 Phase 05: docs + catalog [branch: DEBUG-v001]
2026-05-13 16:26:24
PLAN/S0158_player-large-buttons.md
spec-tech
S0158: status Approved -> Tactical, tactical plan link added [branch: DEBUG-v001]
2026-05-13 16:29:04
app_v2/src/main/res/values/strings.xml
S0159 Phase 04 Step 4.1
Add pref_file_ops_overflow_menu_title, pref_file_ops_overflow_menu_desc, file_ops_moved_to_menu_hint, overflow_menu string keys (EN) [branch: DEBUG-v001]
2026-05-13 16:29:04
app_v2/src/main/res/values-ru/strings.xml
S0159 Phase 04 Step 4.1
Add pref_file_ops_overflow_menu_title, pref_file_ops_overflow_menu_desc, file_ops_moved_to_menu_hint, overflow_menu string keys (RU) [branch: DEBUG-v001]
2026-05-13 16:29:04
app_v2/src/main/res/values-uk/strings.xml
S0159 Phase 04 Step 4.1
Add pref_file_ops_overflow_menu_title, pref_file_ops_overflow_menu_desc, file_ops_moved_to_menu_hint, overflow_menu string keys (UK) [branch: DEBUG-v001]
2026-05-13 16:29:43
app_v2/src/main/res/layout/item_media_file.xml
S0159 Phase 02 Step 2.1
Add btnOverflowMenu ImageButton to list item layout [branch: DEBUG-v001]
2026-05-13 16:30:17
app_v2/src/main/res/layout/item_media_file_grid.xml
S0159 Phase 02 Step 2.2
Add btnOverflowMenu ImageButton to grid item layout [branch: DEBUG-v001]
2026-05-13 16:30:47
app_v2/src/main/res/menu/menu_file_ops.xml
S0159 Phase 02 Step 2.3
Create menu_file_ops.xml with copy/move/rename/delete/move-up/move-down items [branch: DEBUG-v001]
2026-05-13 16:31:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt
S0159 Phase 02 Step 2.4
Create BrowseFileOverflowMenuManager with showFor() and PopupMenu integration [branch: DEBUG-v001]
2026-05-13 16:32:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
S0159 Phase 02 Step 2.5
Add fileOpsInOverflowMenu field, setFileOpsInOverflowMenu() setter, and onOverflowMenuClick callback param [branch: DEBUG-v001]
2026-05-13 16:34:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt
S0159 Phase 02 Step 2.6
Wire btnOverflowMenu click listeners and useOverflow visibility logic in ListViewHolder and GridViewHolder [branch: DEBUG-v001]
2026-05-13 16:38:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt
S0159 Phase 03 Step 3.1
Add observeFileOpsOverflowMenu() to push fileOpsInOverflowMenu to adapter [branch: DEBUG-v001]
2026-05-13 16:41:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0159 Phase 03 Steps 3.2-3.3
Inject BrowseFileOverflowMenuManager and wire onOverflowMenuClick in MediaFileAdapter constructor [branch: DEBUG-v001]
2026-05-13 16:42:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0159 Phase 03 Step 3.4
Inject BrowseFileOverflowMenuManager and pass to BrowseManagerInitializer [branch: DEBUG-v001]
2026-05-13 16:49:40
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0159 Phase 04 Step 4.2
Add switchFileOpsOverflowMenu toggle block (portrait) [branch: DEBUG-v001]
2026-05-13 16:49:40
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
S0159 Phase 04 Step 4.2
Add switchFileOpsOverflowMenu toggle block (landscape) [branch: DEBUG-v001]
2026-05-13 16:51:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0159 Phase 04 Step 4.3
Wire switchFileOpsOverflowMenu listener with one-time Toast hint and observeData sync block [branch: DEBUG-v001]
2026-05-13 16:56:37
docs/FEATURES.md
S0159 Phase 05 Step 5.3
Add file-ops overflow menu feature bullet [branch: DEBUG-v001]
2026-05-13 16:56:38
docs/FEATURES_RU.md
S0159 Phase 05 Step 5.3
Add file-ops overflow menu feature bullet (RU) [branch: DEBUG-v001]
2026-05-13 16:56:38
docs/FEATURES_UK.md
S0159 Phase 05 Step 5.3
Add file-ops overflow menu feature bullet (UK) [branch: DEBUG-v001]
2026-05-13 16:56:38
dev/CATALOG/app_v2.jsonl
S0159 Phase 05 Step 5.3
Catalog sync after S0159 implementation [branch: DEBUG-v001]
2026-05-13 17:01:05
PLAN/S0159_file-ops-overflow-menu.md
spec-check
Audit S0159 -> Verified; PASS/WARN/FAIL 20/0/0 [branch: DEBUG-v001]
2026-05-13 17:01:06
PLAN/S0159_file-ops-overflow-menu/PHASE_05__docs-catalog-cleanup.md
spec-check
Phase 05 -> Done (Step 5.4 complete) [branch: DEBUG-v001]
2026-05-13 17:01:06
PLAN/S0159_file-ops-overflow-menu/INDEX.md
spec-check
INDEX -> Verified, all 5 phases Done [branch: DEBUG-v001]
2026-05-13 17:04:09
PLAN/S0159_file-ops-overflow-menu.md
spec-check
Audit S0159 → Verified; PASS 27/WARN 0/FAIL 0; catalog status fixed to tested; phase tracking corrected [branch: DEBUG-v001]
2026-05-13 17:54:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLayoutModePrefs.kt
S0158
Add KEY_BIG_BUTTONS_MODE, isBigButtonsMode, setBigButtonsMode (Phase 01 Step 01.1) [branch: DEBUG-v001]
2026-05-13 17:55:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0158
Add shortTitleResId field to PlayerCommand enum with values for group-1 and selected group-2 commands (Phase 01 Step 01.2) [branch: DEBUG-v001]
2026-05-13 17:56:20
.claude/commands/spec*.md, CLAUDE.md
dev workflow
Tighten FEATURES update rule: only for genuinely new user-visible capabilities; code improvements/refactors/fixes/polish are always exempt [branch: DEBUG-v001]
2026-05-13 17:59:12
app_v2/src/main/res/values/strings.xml
S0158
Add big_buttons_mode_* and big_btn_short_* strings EN (Phase 01 Step 01.3) [branch: DEBUG-v001]
2026-05-13 17:59:13
app_v2/src/main/res/values-ru/strings.xml
S0158
Add big_buttons_mode_* and big_btn_short_* strings RU (Phase 01 Step 01.3) [branch: DEBUG-v001]
2026-05-13 17:59:13
app_v2/src/main/res/values-uk/strings.xml
S0158
Add big_buttons_mode_* and big_btn_short_* strings UK (Phase 01 Step 01.3) [branch: DEBUG-v001]
2026-05-13 18:04:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBigButtonsModeManager.kt
S0158
Create PlayerBigButtonsModeManager: apply/restore top panel and bottom row, buildBigButtonsOverflowMenu (Phase 02) [branch: DEBUG-v001]
2026-05-13 18:08:38
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0158
Add switchBigButtonsMode toggle row with iconHelpBigButtonsMode to containerPlayerUI (Phase 03 Step 03.1) [branch: DEBUG-v001]
2026-05-13 18:08:39
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
S0158
Mirror switchBigButtonsMode toggle row to landscape layout (Phase 03 Step 03.2) [branch: DEBUG-v001]
2026-05-13 18:10:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0158
Wire switchBigButtonsMode toggle and iconHelpBigButtonsMode in setupViews() (Phase 03 Step 03.3) [branch: DEBUG-v001]
2026-05-13 18:17:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0158 phase-04 step-04.1
Add bigButtonsMode param and PlayerBigButtonsModeManager field [branch: DEBUG-v001]
2026-05-13 18:17:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0158 phase-04 step-04.1
Read isBigButtonsMode from PlayerLayoutModePrefs and pass to CommandPanelController [branch: DEBUG-v001]
2026-05-13 18:19:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0158 phase-04 step-04.2
Apply big buttons mode to top panel: setup, overflow menu, orientation re-apply; extract handleOverflowCommand [branch: DEBUG-v001]
2026-05-13 18:22:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
S0158 phase-04 step-04.3
Add bigButtonsMode param, PlayerBigButtonsModeManager, applyBigButtonsModeToPlaybackRow [branch: DEBUG-v001]
2026-05-13 18:22:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0158 phase-04 step-04.3
Pass bigButtonsMode to PlayerControlsSetupManager constructor [branch: DEBUG-v001]
2026-05-13 18:22:13
app_v2/src/main/res/layout/activity_player_unified.xml
S0158 phase-04 step-04.3
Add android:id=playbackButtonRow to bottom playback row LinearLayout [branch: DEBUG-v001]
2026-05-13 18:22:13
app_v2/src/main/res/layout-land/activity_player_unified.xml
S0158 phase-04 step-04.3
Add android:id=playbackButtonRow to bottom playback row LinearLayout (landscape parity) [branch: DEBUG-v001]
2026-05-13 18:26:19
docs/FEATURES.md
S0158 phase-05 step-05.1
Add Big Buttons Mode bullet to Video Player section [branch: DEBUG-v001]
2026-05-13 18:26:19
docs/FEATURES_RU.md
S0158 phase-05 step-05.1
Add Режим большие кнопки bullet to section 7 [branch: DEBUG-v001]
2026-05-13 18:26:19
docs/FEATURES_UK.md
S0158 phase-05 step-05.1
Add Режим великі кнопки bullet to section 7 [branch: DEBUG-v001]
2026-05-13 18:28:34
dev/CATALOG/app_v2.jsonl
S0158 phase-05 step-05.2
Regen catalog; set PlayerBigButtonsModeManager role=ui-helper status=new [branch: DEBUG-v001]
2026-05-13 18:28:34
dev/CATALOG/app_v2.md
S0158 phase-05 step-05.2
Regen catalog Markdown [branch: DEBUG-v001]
2026-05-13 18:30:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0158 BlockNeedUserTest
Insert Timber.d debug tag for on-device verification [branch: DEBUG-v001]
2026-05-13 18:30:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
S0158 BlockNeedUserTest
Insert Timber.d debug tag for on-device verification [branch: DEBUG-v001]
2026-05-13 18:30:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0158 BlockNeedUserTest
Insert Timber.d debug tag for on-device verification [branch: DEBUG-v001]
2026-05-13 18:30:46
PLAN/S0158_player-large-buttons.md
S0158 BlockNeedUserTest
Status: BlockNeedUserTest - awaiting on-device verification [branch: DEBUG-v001]
2026-05-13 18:33:49
PLAN/S0158_player-large-buttons.md
spec-check
Audit S0158 → Verified; PASS 18 / WARN 0 / FAIL 0; debug tags removed: 3 [branch: DEBUG-v001]
2026-05-13 18:33:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
spec-check
Remove S0158 Timber.d debug tag [branch: DEBUG-v001]
2026-05-13 18:33:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
spec-check
Remove S0158 Timber.d debug tag [branch: DEBUG-v001]
2026-05-13 18:33:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
spec-check
Remove S0158 Timber.d debug tag [branch: DEBUG-v001]
2026-05-13 18:35:24
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0160
Add resourceOpsInOverflowMenu flag to AppSettings [branch: DEBUG-v001]
2026-05-13 18:35:24
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0160
Wire resourceOpsInOverflowMenu to DataStore [branch: DEBUG-v001]
2026-05-13 18:40:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceScanCoordinator.kt
S0160
Add SingleScanResult sealed class and scanAndRefreshSingleResource public API [branch: DEBUG-v001]
2026-05-13 18:42:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0160
Add scanSingleResource method driving single-resource availability test and toast [branch: DEBUG-v001]
2026-05-13 18:44:27
app_v2/src/main/res/menu/resource_item_actions.xml
S0160
Add action_scan menu item for single-resource refresh [branch: DEBUG-v001]
2026-05-13 18:44:27
app_v2/src/main/res/layout/item_resource_grid.xml
S0160
Add btnMoreActions overflow trigger (hidden by default) [branch: DEBUG-v001]
2026-05-13 18:46:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Added slot-based S0158 big-buttons top-panel planning [branch: DEBUG-v001]
2026-05-13 18:46:06
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlannerTest.kt
CommandPanelLayoutPlannerTest
Added focused tests for S0158 slot and overflow limits [branch: DEBUG-v001]
2026-05-13 18:46:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBigButtonsModeManager.kt
PlayerBigButtonsModeManager
Flattened nested top-panel buttons for S0158 big-buttons mode and restored original parents [branch: DEBUG-v001]
2026-05-13 18:46:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Enforced S0158 eight-slot top-panel planning and reapply on state updates [branch: DEBUG-v001]
2026-05-13 18:47:07
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Refreshed catalog metadata after S0158 Kotlin changes [branch: DEBUG-v001]
2026-05-13 18:47:07
dev/CATALOG/app_v2.md
app_v2 catalog
Regenerated catalog report after S0158 Kotlin changes [branch: DEBUG-v001]
2026-05-13 18:47:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
S0160
Add overflow mode support: onScanClick, overflowModeEnabled field+setter, action_scan handler, GridViewHolder overflow menu [branch: DEBUG-v001]
2026-05-13 18:52:03
app_v2/src/main/res/values/strings_s0160.xml
S0160
Add EN strings for overflow toggle, refresh action, unavailability toast [branch: DEBUG-v001]
2026-05-13 18:52:03
app_v2/src/main/res/values-ru/strings_s0160.xml
S0160
Add RU strings for overflow toggle, refresh action, unavailability toast [branch: DEBUG-v001]
2026-05-13 18:52:03
app_v2/src/main/res/values-uk/strings_s0160.xml
S0160
Add UK strings for overflow toggle, refresh action, unavailability toast [branch: DEBUG-v001]
2026-05-13 18:52:13
app_v2/src/main/res/layout/fragment_settings_general.xml
S0160
Add resourceOpsInOverflowMenu toggle row (portrait) [branch: DEBUG-v001]
2026-05-13 18:52:13
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0160
Add resourceOpsInOverflowMenu toggle row (landscape) [branch: DEBUG-v001]
2026-05-13 18:52:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0160
Wire switchResourceOpsInOverflowMenu listener with 3-guard pattern [branch: DEBUG-v001]
2026-05-13 18:52:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt
S0160
Observe and sync switchResourceOpsInOverflowMenu state [branch: DEBUG-v001]
2026-05-13 18:56:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0160
Wire onScanClick callback and setOverflowModeEnabled in settings observer [branch: DEBUG-v001]
2026-05-13 18:58:26
docs/FEATURES.md
S0160
Add compact resource actions bullet to section 1 [branch: DEBUG-v001]
2026-05-13 18:58:26
docs/FEATURES_RU.md
S0160
Add compact resource actions bullet RU [branch: DEBUG-v001]
2026-05-13 18:58:27
docs/FEATURES_UK.md
S0160
Add compact resource actions bullet UK [branch: DEBUG-v001]
2026-05-13 19:02:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0160
Insert BlockNeedUserTest debug tag: overflow toggle entry point [branch: DEBUG-v001]
2026-05-13 19:02:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
S0160
Insert BlockNeedUserTest debug tag: adapter overflow mode entry point [branch: DEBUG-v001]
2026-05-13 19:02:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0160
Insert BlockNeedUserTest debug tag: scanSingleResource entry point [branch: DEBUG-v001]
2026-05-13 19:07:52
PLAN/S0160_resource-ops-overflow-toggle.md
spec-check
Audit S0160 -> Partial; PASS 45/WARN 2/FAIL 0; debug tags removed [branch: DEBUG-v001]
2026-05-13 19:07:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
spec-check
Remove S0160 BlockNeedUserTest debug tag [branch: DEBUG-v001]
2026-05-13 19:07:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
spec-check
Remove S0160 BlockNeedUserTest debug tag [branch: DEBUG-v001]
2026-05-13 19:07:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
spec-check
Remove S0160 BlockNeedUserTest debug tag [branch: DEBUG-v001]
2026-05-13 19:08:39
PLAN/S0160_resource-ops-overflow-toggle.md
spec-fix
Annotate Last Audit (S0160); 1 fixed, 1 follow-up [branch: DEBUG-v001]
2026-05-13 19:08:39
PLAN/S0160_resource-ops-overflow-toggle/PHASE_01__settings-model.md
spec-fix
Fix Phase 01 status header: In Progress -> Done, fill Started/Completed dates [branch: DEBUG-v001]
2026-05-13 19:09:55
PLAN/S0160_resource-ops-overflow-toggle.md
spec-check
Audit S0160 -> Partial; PASS 46/WARN 1/FAIL 0; Phase 01 now clean [branch: DEBUG-v001]
2026-05-13 20:43:28
PLAN/S0159_file-ops-overflow-menu.md
spec-check
Re-audit S0159 -> Broken; PASS/WARN/FAIL 14/2/3; 5 open questions recorded [branch: DEBUG-v001]
2026-05-13 21:15:35
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
S0166 / TikTok auth
Fix repeating auth dialog for vm.tiktok.com: listAccountsForHost now falls back to eTLD+1 registrable domain when exact host has no stored cookies, matching LinkAutoDownloadCoordinator.resolveSessionHost logic [branch: DEBUG-v001]
2026-05-13 21:15:35
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0174 noLegal yt-dlp
YouTube/HLS fix: change format opt to best[ext=mp4]/best, split format iteration into progressive vs manifest buckets, route manifest-only results to Python download (yt-dlp native HLS muxer), route Blocked(MimeNotAllowed) to Python download [branch: DEBUG-v001]
2026-05-13 21:15:35
app_v2/src/noLegal/python/ytdlp_utils.py
S0174 noLegal yt-dlp
Format cascade for YouTube without ffmpeg: best mp4/best/best<=720/best<=360/best; enable concurrent_fragment_downloads=4 for HLS speed; refresh actual ext from output filename [branch: DEBUG-v001]
2026-05-13 21:15:35
PLAN/S0181_threads_image_scraper_investigation.md
S0181
Open Draft research spec for Threads.com image scraper - dynamic strategy currently returns OG channel preview instead of post image [branch: DEBUG-v001]
2026-05-13 21:26:55
PLAN/S0160_resource-ops-overflow-toggle/PHASE_04__settings-ui.md
spec-update
Fix Step 04.5 predicate: switchResourceOpsInOverflowMenu count >=2 -> >=1 (spec counting error) [branch: DEBUG-v001]
2026-05-13 21:33:26
PLAN/S0160_resource-ops-overflow-toggle.md
spec-check
Audit S0160 -> Verified; PASS 47/WARN 0/FAIL 0; closed [branch: DEBUG-v001]
2026-05-13 21:38:25
PLAN/S0181_threads_image_scraper_investigation.md
S0181
Rewrite Threads.com image-scraper investigation: confirm hypothesis (post image already in DOM via IMG_TAG; bug is in CandidateSelectionPolicy size-first ranking, not extraction), document data-sjs JSON route (post.carousel_media[].image_versions2.candidates[].url) as Tier-2 fix, separate carousel handling (lazy-loaded slides require JSON parsing or batch path) [branch: DEBUG-v001]
2026-05-13 21:40:00
PLAN/S0160_resource-ops-overflow-toggle/INDEX.md
spec-dev
Sync INDEX header to Done (all 6 phases were already Done; INDEX header was stale at In Progress) [branch: DEBUG-v001]
2026-05-13 21:46:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
S0159-fix
Add moveFileUp/moveFileDown for manual-order overflow menu reorder [branch: DEBUG-v001]
2026-05-13 21:46:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0159-fix
Fix multiselect isolation (overridePaths), cache settings/destinations, wire moveFileUp/Down and extended callbacks [branch: DEBUG-v001]
2026-05-13 21:46:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt
S0159-fix
Add dynamic extended commands (full player matrix minus Play) and single-file action routing [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStore.kt
S0182 sticky UA
Add userAgent param to saveForAccount(); add loadUserAgentForAccount(); persist UA as JSON field, backward compatible [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/AuthSessionRepository.kt
S0182 sticky UA
Add userAgent param to saveSession() + loadUserAgent() interface method [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
S0182 sticky UA
Pipe userAgent through saveSession() + implement loadUserAgent() [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
S0182 sticky UA
Capture webView.settings.userAgentString at login time and pass to saveSession() [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthViewModel.kt
S0182 sticky UA
Add userAgent param to ViewModel saveSession() [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadSessionContext.kt
S0182 sticky UA
Add userAgent to active context; new set(host,cookies,userAgent) + userAgentFor(host) [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0182 sticky UA
Load pinned UA from cookie store in applySessionContext() and push into session context [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0182 sticky UA
Inject LinkDownloadSessionContext; use sessionUa for yt-dlp user_agent opt + OkHttp User-Agent header; replace desktop BROWSER_UA with mobile MOBILE_BROWSER_UA Android fallback; pass UA to Python download [branch: DEBUG-v001]
2026-05-13 21:47:25
app_v2/src/noLegal/python/ytdlp_utils.py
S0182 sticky UA
Add user_agent param to download_to_file(); set yt-dlp opts.user_agent when provided [branch: DEBUG-v001]
2026-05-13 21:47:25
PLAN/S0182_sticky_session_user_agent.md
S0182
New spec: sticky session UA across all stacks - capture at WebView login, replay in yt-dlp + OkHttp [branch: DEBUG-v001]
2026-05-13 21:51:00
PLAN/S0159_file-ops-overflow-menu.md
spec-check
Audit S0159 -> Verified; PASS 32 / WARN 0 / FAIL 0 [branch: DEBUG-v001]
2026-05-13 21:51:12
dev/CATALOG/app_v2.jsonl
S0159-fix
Catalog rescan after moveFileUp/moveFileDown and BrowseFileOverflowMenuManager rewrite [branch: DEBUG-v001]
2026-05-13 21:51:12
dev/CATALOG/app_v2.md
S0159-fix
Catalog render after rescan (1037 records) [branch: DEBUG-v001]
2026-05-13 21:54:29
PLAN/S0182_sticky_session_user_agent.md
spec-update
Rewrite S0182 strategic spec and align acceptance to local implementation [branch: DEBUG-v001]
2026-05-13 21:54:29
PLAN/S0182_sticky_session_user_agent/INDEX.md
spec-tech
Create S0182 tactical index for remaining fallback and test work [branch: DEBUG-v001]
2026-05-13 21:54:29
PLAN/S0182_sticky_session_user_agent/PHASE_01__fallback-alignment.md
spec-tech
Add S0182 phase 01 fallback alignment plan [branch: DEBUG-v001]
2026-05-13 21:54:29
PLAN/S0182_sticky_session_user_agent/PHASE_02__regression-tests.md
spec-tech
Add S0182 phase 02 regression test plan [branch: DEBUG-v001]
2026-05-13 21:54:29
PLAN/S0182_sticky_session_user_agent/PHASE_03__validation-and-catalog.md
spec-tech
Add S0182 phase 03 validation and catalog plan [branch: DEBUG-v001]
2026-05-13 21:57:00
app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkDownloadUserAgents.kt
LinkDownloadUserAgents
Add shared mobile fallback User-Agent for S0182 [branch: DEBUG-v001]
2026-05-13 21:57:00
app_v2/src/main/java/com/sza/fastmediasorter/di/LinkDownloadModule.kt
LinkDownloadModule
Switch link-download fallback UA from desktop to shared mobile profile [branch: DEBUG-v001]
2026-05-13 21:57:00
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
YtDlpExtractionStrategy
Reuse shared mobile fallback User-Agent for sticky session downloads [branch: DEBUG-v001]
2026-05-13 21:57:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
Remove stale S0182 debug tag while reopening ticket [branch: DEBUG-v001]
2026-05-13 21:57:00
app_v2/src/test/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadSessionContextTest.kt
LinkDownloadSessionContextTest
Add sticky-UA host matching coverage [branch: DEBUG-v001]
2026-05-13 21:57:00
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
LinkAutoDownloadCoordinatorTest
Verify pinned User-Agent propagation into session context [branch: DEBUG-v001]
2026-05-13 21:59:16
dev/CATALOG/app_v2.jsonl
catalog-scan
Regenerate app_v2 catalog metadata after S0182 Kotlin changes [branch: DEBUG-v001]
2026-05-13 21:59:16
dev/CATALOG/app_v2.md
catalog-render
Render app_v2 catalog after S0182 Kotlin changes [branch: DEBUG-v001]
2026-05-13 21:59:16
PLAN/S0182_sticky_session_user_agent.md
spec-dev
Reopen S0182 to In Progress and record completed fallback/test work [branch: DEBUG-v001]
2026-05-13 21:59:16
PLAN/S0182_sticky_session_user_agent/INDEX.md
spec-dev
Update S0182 tactical index progress after implementation [branch: DEBUG-v001]
2026-05-13 21:59:16
PLAN/S0182_sticky_session_user_agent/PHASE_01__fallback-alignment.md
spec-dev
Mark S0182 phase 01 completed [branch: DEBUG-v001]
2026-05-13 21:59:16
PLAN/S0182_sticky_session_user_agent/PHASE_02__regression-tests.md
spec-dev
Mark S0182 phase 02 completed [branch: DEBUG-v001]
2026-05-13 21:59:16
PLAN/S0182_sticky_session_user_agent/PHASE_03__validation-and-catalog.md
spec-dev
Record S0182 validation blocker and catalog sync [branch: DEBUG-v001]
2026-05-13 23:25:12
PLAN/S0182_sticky_session_user_agent.md
S0182
Strategic spec enriched with web-research findings: OWASP/yt-dlp UA-cookie binding rationale, Q4/Q5 wv-token + UA Reduction research resolutions, IP-axis non-coverage risk; status moved to BlockNeedUserTest pending on-device check [branch: DEBUG-v001]
2026-05-13 23:25:21
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/DiscoverNetworkResourcesUseCaseTest.kt
S0182
Wrapped suspend probePorts() calls in runTest(UnconfinedTestDispatcher()) to unblock the focused S0182 test run; restructured the 445/139-exclusion case to assert on result list rather than probe order [branch: DEBUG-v001]
2026-05-13 23:25:30
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0182
Inserted Timber.d(“S0182:”) debug tag on the session-binding entry point so on-device logcat can confirm sticky-UA replay during the BlockNeedUserTest round [branch: DEBUG-v001]
2026-05-13 23:25:39
PLAN/S0182_sticky_session_user_agent/INDEX.md
S0182
Phase 03 closed: focused unit-tests PASS, completion gate satisfied, ticket moved into BlockNeedUserTest [branch: DEBUG-v001]
2026-05-13 23:25:49
PLAN/S0182_sticky_session_user_agent/PHASE_03__validation-and-catalog.md
S0182
Step 03.1 marked done after re-running focused tests with BUILD SUCCESSFUL; phase done criteria fully ticked [branch: DEBUG-v001]
2026-05-13 23:34:14
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlMediaCandidate.kt
HtmlMediaCandidate
Added EMBEDDED_JSON source for Threads data-sjs candidates [branch: DEBUG-v001]
2026-05-13 23:34:14
app_v2/src/main/java/com/sza/fastmediasorter/data/link/StructuredMediaSniffer.kt
StructuredMediaSniffer
Added Threads data-sjs media sniffing helper and page-origin propagation [branch: DEBUG-v001]
2026-05-13 23:34:14
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
Prioritized Threads embedded JSON candidates ahead of intercepted preview assets [branch: DEBUG-v001]
2026-05-13 23:34:14
app_v2/src/test/java/com/sza/fastmediasorter/data/link/StructuredMediaSnifferTest.kt
StructuredMediaSnifferTest
Added Threads embedded JSON parser coverage [branch: DEBUG-v001]
2026-05-13 23:37:48
PLAN/S0156_nolegal-capability-surface-audit/apk-install.md
S0156 research
Add APK install noLegal research document - Android API surface, DI wiring pattern, store-policy blocker analysis, 3 follow-up spec candidates [branch: DEBUG-v001]
2026-05-13 23:49:23
PLAN/S0183_nolegal-apk-install.md
spec-tech S0183
Create strategic spec: APK install from Browse (noLegal only) [branch: DEBUG-v001]
2026-05-13 23:49:23
PLAN/S0183_nolegal-apk-install/INDEX.md
spec-tech S0183
Create tactical INDEX: 5 phases [branch: DEBUG-v001]
2026-05-13 23:49:24
PLAN/S0183_nolegal-apk-install/PHASE_01__foundation-di.md
spec-tech S0183
Phase 01: BrowseApkInstallHandler abstract class + DI modules (main + noLegal) [branch: DEBUG-v001]
2026-05-13 23:49:24
PLAN/S0183_nolegal-apk-install/PHASE_02__permission.md
spec-tech S0183
Phase 02: REQUEST_INSTALL_PACKAGES in noLegal manifest [branch: DEBUG-v001]
2026-05-13 23:49:24
PLAN/S0183_nolegal-apk-install/PHASE_03__strings.md
spec-tech S0183
Phase 03: EN/RU/UK s0183_* strings [branch: DEBUG-v001]
2026-05-13 23:49:25
PLAN/S0183_nolegal-apk-install/PHASE_04__ui-integration.md
spec-tech S0183
Phase 04: bottom sheet button, BrowseBinaryFileHandler, BrowseManagerInitializer wiring [branch: DEBUG-v001]
2026-05-13 23:49:25
PLAN/S0183_nolegal-apk-install/PHASE_05__docs-catalog-cleanup.md
spec-tech S0183
Phase 05: catalog, dev log, FEATURES_noLegal update [branch: DEBUG-v001]
2026-05-13 23:53:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandler.kt
S0183 Phase01
New abstract class: contract for noLegal APK install flow [branch: DEBUG-v001]
2026-05-13 23:53:54
app_v2/src/main/java/com/sza/fastmediasorter/di/BrowseApkInstallOptionalModule.kt
S0183 Phase01
New Hilt @BindsOptionalOf module for BrowseApkInstallHandler [branch: DEBUG-v001]
2026-05-13 23:53:54
app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt
S0183 Phase01
New noLegal APK install handler: permission check, rationale dialog, FileProvider URI, ACTION_INSTALL_PACKAGE flow [branch: DEBUG-v001]
2026-05-13 23:53:55
app_v2/src/noLegal/java/com/sza/fastmediasorter/di/BrowseApkInstallModule.kt
S0183 Phase01
New Hilt @Binds module for noLegal APK install handler [branch: DEBUG-v001]
2026-05-13 23:58:20
app_v2/src/noLegal/AndroidManifest.xml
S0183 Phase02
Add REQUEST_INSTALL_PACKAGES permission (noLegal only) [branch: DEBUG-v001]
2026-05-14 00:00:20
app_v2/src/main/res/values/strings.xml
S0183 Phase03
Add s0183_* APK install strings (EN) - 8 keys [branch: DEBUG-v001]
2026-05-14 00:00:21
app_v2/src/main/res/values-ru/strings.xml
S0183 Phase03
Add s0183_* APK install strings (RU) - 8 keys [branch: DEBUG-v001]
2026-05-14 00:00:21
app_v2/src/main/res/values-uk/strings.xml
S0183 Phase03
Add s0183_* APK install strings (UK) - 8 keys [branch: DEBUG-v001]
2026-05-14 00:01:28
PLAN/S0184_googlebook-multiwindow-support.md
spec
Add strategic spec S0184 for googlebook multiwindow support [branch: DEBUG-v001]
2026-05-14 00:01:41
.github/prompts/spec.prompt.md
spec prompt
Fix /spec ticket allocation instructions to use next-id with validated final path [branch: DEBUG-v001]
2026-05-14 00:05:46
PLAN/S0132_vr-quest3-epic-pending-verification/INDEX.md
spec-tech
Create tactical plan for S0132 [branch: DEBUG-v001]
2026-05-14 00:05:46
PLAN/S0132_vr-quest3-epic-pending-verification/PHASE_01__group-a-stereo-rendering.md
spec-tech
Phase 01: group-a-stereo-rendering (ex-S0078/S0041/S0012) [branch: DEBUG-v001]
2026-05-14 00:05:46
PLAN/S0132_vr-quest3-epic-pending-verification/PHASE_02__group-b-immersive-ui.md
spec-tech
Phase 02: group-b-immersive-ui (ex-S0065/S0009/S0080/S0008) [branch: DEBUG-v001]
2026-05-14 00:05:46
PLAN/S0132_vr-quest3-epic-pending-verification/PHASE_03__group-c-routing-task.md
spec-tech
Phase 03: group-c-routing-task (ex-S0038/S0026/S0030) [branch: DEBUG-v001]
2026-05-14 00:05:46
PLAN/S0132_vr-quest3-epic-pending-verification/PHASE_04__panel-3d-flow.md
spec-tech
Phase 04: panel-3d-flow (ex-S0019) [branch: DEBUG-v001]
2026-05-14 00:05:46
PLAN/S0132_vr-quest3-epic-pending-verification/PHASE_05__group-d-low-priority.md
spec-tech
Phase 05: group-d-low-priority (ex-S0006/S0032/S0014) [branch: DEBUG-v001]
2026-05-14 00:05:46
PLAN/S0132_vr-quest3-epic-pending-verification/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-14 00:05:46
PLAN/S0132_vr-quest3-epic-pending-verification.md
spec-tech
Status -> Tactical, tactical plan linked [branch: DEBUG-v001]
2026-05-14 00:09:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0183-phase04
Fix missing import for BrowseApkInstallHandler (build fix) [branch: DEBUG-v001]
2026-05-14 00:12:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandler.kt
S0183
New abstract class: contract for noLegal APK install flow [branch: DEBUG-v001]
2026-05-14 00:12:41
app_v2/src/main/java/com/sza/fastmediasorter/di/BrowseApkInstallOptionalModule.kt
S0183
New Hilt @BindsOptionalOf module for BrowseApkInstallHandler [branch: DEBUG-v001]
2026-05-14 00:12:41
app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt
S0183
New noLegal APK install handler: permission check, rationale dialog, FileProvider URI, ACTION_INSTALL_PACKAGE flow [branch: DEBUG-v001]
2026-05-14 00:12:41
app_v2/src/noLegal/java/com/sza/fastmediasorter/di/BrowseApkInstallModule.kt
S0183
New Hilt @Binds module for noLegal APK install handler [branch: DEBUG-v001]
2026-05-14 00:12:50
app_v2/src/noLegal/AndroidManifest.xml
S0183
Add REQUEST_INSTALL_PACKAGES permission (noLegal only) [branch: DEBUG-v001]
2026-05-14 00:12:50
app_v2/src/main/res/values/strings.xml
S0183
Add s0183_* APK install strings (EN) [branch: DEBUG-v001]
2026-05-14 00:12:50
app_v2/src/main/res/values-ru/strings.xml
S0183
Add s0183_* APK install strings (RU) [branch: DEBUG-v001]
2026-05-14 00:12:50
app_v2/src/main/res/values-uk/strings.xml
S0183
Add s0183_* APK install strings (UK) [branch: DEBUG-v001]
2026-05-14 00:12:50
app_v2/src/main/res/layout/bottom_sheet_binary_file.xml
S0183
Add btnInstallApk (gone by default; visible in noLegal for .apk files) [branch: DEBUG-v001]
2026-05-14 00:12:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseBinaryFileHandler.kt
S0183
Accept optional BrowseApkInstallHandler; show Install button for .apk in noLegal [branch: DEBUG-v001]
2026-05-14 00:12:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0183
Inject Optional; call registerLaunchers; pass to BrowseBinaryFileHandler [branch: DEBUG-v001]
2026-05-14 00:15:09
app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt
S0183
Insert BlockNeedUserTest Timber.d tag at showInstallMenu entry point [branch: DEBUG-v001]
2026-05-14 00:15:23
PLAN/S0183_nolegal-apk-install.md
S0183
Status -> BlockNeedUserTest; Implemented date 2026-05-14 [branch: DEBUG-v001]
2026-05-14 00:29:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseBinaryFileMenuAction.kt
BrowseBinaryFileMenuAction
Added generic flavor-scoped Browse binary menu hook to keep feature-specific actions out of main [branch: DEBUG-v001]
2026-05-14 00:29:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Replaced APK-install Optional wiring with a multibound flavor action set [branch: DEBUG-v001]
2026-05-14 00:29:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseBinaryFileHandler.kt
BrowseBinaryFileHandler
Removed hardcoded APK install branch and delegated binary bottom-sheet extensions to injected actions [branch: DEBUG-v001]
2026-05-14 00:29:43
app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt
BrowseApkInstallHandlerImpl
Bound S0183 install UI only through the noLegal binary menu action implementation [branch: DEBUG-v001]
2026-05-14 00:29:44
app_v2/src/noLegal/res/layout/bottom_sheet_binary_file.xml
bottom_sheet_binary_file
Moved the APK install button into a noLegal-only layout overlay and flavor resources [branch: DEBUG-v001]
2026-05-14 00:29:44
scripts/check_strings_localized.ps1
check_strings_localized.ps1
Added SourceSet support for flavor-specific EN/RU/UK locale audits [branch: DEBUG-v001]
2026-05-14 00:31:01
app_v2/src/main/res/layout/bottom_sheet_binary_file.xml
bottom_sheet_binary_file
Removed the APK install button from the shared binary-file bottom sheet layout [branch: DEBUG-v001]
2026-05-14 00:31:01
app_v2/src/noLegal/res/values/strings.xml
s0183_* strings
Moved S0183 EN/RU/UK string keys from main resources into the noLegal source set [branch: DEBUG-v001]
2026-05-14 00:31:01
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Refreshed catalog records after the Browse binary menu hook refactor and filled metadata for new classes [branch: DEBUG-v001]
2026-05-14 00:41:29
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
S0132-P01.2a
Re-word fisheye log to ‘VR_QUALITY_DEBUG: fisheye uniforms fov/uvOffset/uvScale’ for S0041 diagnostic grep [branch: DEBUG-v001]
2026-05-14 00:41:29
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
S0132-P01.2a
Add ‘VR_QUALITY_DEBUG: swapchain format’ marker after nativeInitialize success for S0041 hypothesis E [branch: DEBUG-v001]
2026-05-14 00:43:04
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransitionTest.kt
S0132-P03.1
Add JVM regression test: exitImmersiveToFlatPlayer calls finishAndRemoveTask (ex-S0038 guard) [branch: DEBUG-v001]
2026-05-14 00:45:41
PLAN/S0184_googlebook-multiwindow-support.md
spec-update
Refinement (GPT-5.4, focus: consistency, completeness) - reframe Googlebook as device class [branch: DEBUG-v001]
2026-05-14 00:46:59
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
S0132-P05.3a
Add cold-start STAGE_SETUP_VIEWS marker for stage breakdown grep family [branch: DEBUG-v001]
2026-05-14 00:46:59
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
S0132-P05.3a
Add STAGE_XR_INIT_BEGIN/EGL_CREATE/NATIVE_INIT/SESSION_READY markers (cold-start stage breakdown) [branch: DEBUG-v001]
2026-05-14 00:46:59
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
S0132-P05.3a
Add cold-start STAGE_FIRST_FRAME marker (terminal milestone of XR cold-start budget) [branch: DEBUG-v001]
2026-05-14 00:53:37
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
S0132-tag
Insert BlockNeedUserTest tag: S0132 onCreate (cold-start + swapchain + fisheye verification flow) [branch: DEBUG-v001]
2026-05-14 00:53:37
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
S0132-tag
Insert BlockNeedUserTest tag: S0132 initialize (swapchain format anchor + XR-init stages) [branch: DEBUG-v001]
2026-05-14 00:53:37
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
S0132-tag
Insert BlockNeedUserTest tag: S0132 renderFisheyeQuad (VR180 fisheye uniform diagnosis) [branch: DEBUG-v001]
2026-05-14 00:53:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransition.kt
S0132-tag
Insert BlockNeedUserTest tag: S0132 exitImmersiveToFlatPlayer (task switcher cloning verification) [branch: DEBUG-v001]
2026-05-14 00:53:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPosterExtractor.kt
S0132-tag
Insert BlockNeedUserTest tag: S0132 extract (getFrameAtTime fallback path) [branch: DEBUG-v001]
2026-05-14 00:53:50
PLAN/S0132_vr-quest3-epic-pending-verification.md
spec-dev
Status -> BlockNeedUserTest (5 code-work steps done; remaining work is Quest 3 on-device verification) [branch: DEBUG-v001]
2026-05-14 01:00:31
PLAN/S0185_startup-splash-screen-investigation.md
S0185
Added research ticket for startup splash / starting window constraints, current implementation, and follow-up investigation plan [branch: DEBUG-v001]
2026-05-14 01:04:26
PLAN/S0174,PLAN/S0181,PLAN/S0186,PLAN/S0187
spec-catalog
device test 2026-05-14: confirmed S0174 Broken for YouTube/IG/Threads carousel; rescoped S0181 to cover IG photo+carousel (prio 35->70); new S0186 (cascade resilience on yt-dlp PyException) and S0187 (YouTube extraction recovery) [branch: DEBUG-v001]
2026-05-14 01:09:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0183
Fix crash: register launchers in onCreate (was called from binding.root.post -> RESUMED -> IllegalStateException) [branch: DEBUG-v001]
2026-05-14 01:09:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0183
Remove registerLaunchers call (moved to BrowseActivity.onCreate; deferred setupViews fires post-RESUMED) [branch: DEBUG-v001]
2026-05-14 01:18:38
PLAN/S0186_nolegal-pipeline-cascade-resilience.md
spec-all
S0186 Approved [branch: DEBUG-v001]
2026-05-14 01:23:41
PLAN/S0186_nolegal-pipeline-cascade-resilience
spec-all
S0186 tactical spec authored (Phase01 tests + Phase02 wrap open()) [branch: DEBUG-v001]
2026-05-14 01:33:17
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-all
S0186: wrap strategy.open() in try/catch so PyException no longer aborts the extraction cascade; 3 new unit tests added (6/6 green); status -> BlockNeedUserTest for device YouTube share verification [branch: DEBUG-v001]
2026-05-14 01:42:31
app_v2/src/main/res/layout/fragment_settings_playback.xml
iconHelpBigButtonsMode
Fix help button alignment next to Big Buttons Mode toggle (layout_weight removed from text block) [branch: DEBUG-v001]
2026-05-14 01:43:29
PLAN/S0186_nolegal-pipeline-cascade-resilience.md
spec-check
Audit S0186 -> Verified (static); PASS 13 WARN 0 FAIL 0 MANUAL 1 EXEMPT 3. Status held at BlockNeedUserTest pending device test (per operator). [branch: DEBUG-v001]
2026-05-14 01:49:58
app_v2/src/main/res/layout/item_media_file.xml
item_media_file.xml
Fix btnFavorite constraint End_toStartOf changed from btnCopyItem to btnOverflowMenu - prevents overlap when fileOpsInOverflowMenu=true collapses op buttons to gone [branch: DEBUG-v001]
2026-05-14 02:20:57
PLAN/S0187_nolegal-youtube-extraction-recovery/INDEX.md
spec-tech
Create tactical plan for S0187 [branch: DEBUG-v001]
2026-05-14 02:20:57
PLAN/S0187_nolegal-youtube-extraction-recovery/PHASE_01__ytdlp-format-fallback.md
spec-tech
Phase 01: ytdlp-format-fallback [branch: DEBUG-v001]
2026-05-14 02:20:58
PLAN/S0187_nolegal-youtube-extraction-recovery/PHASE_02__known-auth-youtube.md
spec-tech
Phase 02: known-auth-youtube [branch: DEBUG-v001]
2026-05-14 02:20:58
PLAN/S0187_nolegal-youtube-extraction-recovery/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-14 02:20:58
PLAN/S0187_nolegal-youtube-extraction-recovery.md
spec-tech
Status -> Tactical [branch: DEBUG-v001]
2026-05-14 02:21:16
app_v2/src/main/res/layout/custom_player_controls.xml
S0158-fix
Add exoPlayerButtonRow ID to buttons row for Big Buttons Mode targeting [branch: DEBUG-v001]
2026-05-14 02:21:16
app_v2/src/main/res/layout/custom_player_controls_large.xml
S0158-fix
Add exoPlayerButtonRow ID to buttons row for Big Buttons Mode targeting [branch: DEBUG-v001]
2026-05-14 02:21:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBigButtonsModeManager.kt
S0158-fix
Add ImageView scaleType save/restore to bottom row; add FIT_CENTER + padding in apply [branch: DEBUG-v001]
2026-05-14 02:21:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
S0158-fix
Retarget Big Buttons Mode to exoPlayerButtonRow inside PlayerView instead of fullscreen overlay [branch: DEBUG-v001]
2026-05-14 02:22:35
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0187
Return NotFound for yt-dlp format-unavailable errors so cascade reaches NewPipe [branch: DEBUG-v001]
2026-05-14 02:26:47
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt
S0187
Add youtube.com to known auth resources [branch: DEBUG-v001]
2026-05-14 02:26:47
app_v2/src/test/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResourcesTest.kt
S0187
Add YouTube host matching tests [branch: DEBUG-v001]
2026-05-14 02:29:31
docs/FEATURES_noLegal.md
S0187
Add YouTube recovery feature section [branch: DEBUG-v001]
2026-05-14 02:29:31
docs/FEATURES_noLegal_RU.md
S0187
Add YouTube recovery feature section (RU) [branch: DEBUG-v001]
2026-05-14 02:29:31
docs/FEATURES_noLegal_UK.md
S0187
Add YouTube recovery feature section (UK) [branch: DEBUG-v001]
2026-05-14 02:31:41
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0187
Insert BlockNeedUserTest debug tag for format-fallback cascade [branch: DEBUG-v001]
2026-05-14 02:31:57
PLAN/S0187_nolegal-youtube-extraction-recovery.md
S0187
Status -> BlockNeedUserTest; debug tag inserted [branch: DEBUG-v001]
2026-05-14 09:59:59
PLAN/S0188_slideshow-stop-on-resource-unavailable.md
spec
Add strategic spec S0188: slideshow stop on resource unavailable [branch: DEBUG-v001]
2026-05-14 10:00:20
PLAN/S0189_browse-create-text-notes.md
spec
Add strategic spec S0189 for browse text note creation [branch: DEBUG-v001]
2026-05-14 10:06:27
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/NewPipeSiteExtractionStrategy.kt
S0187-diag
Add Timber.d entry/stream-info/failure logging for NewPipe extraction diagnostics [branch: DEBUG-v001]
2026-05-14 10:06:27
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
S0187-fix
Exclude youtube.com/youtu.be from dynamic WebView extractor to prevent failure.mp3 false positive [branch: DEBUG-v001]
2026-05-14 10:08:41
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md
spec
Create S0190 strategic spec: YouTube Shorts + YTMusic extraction hardening [branch: DEBUG-v001]
2026-05-14 10:08:52
PLAN/S0188_slideshow-stop-on-resource-unavailable.md
spec S0188
Update S0188: two-path detection (NetworkStateMonitor for total network loss + consecutive-failure counter for host-unreachable), audio empty-path pattern confirmed from log, Resume via existing slideshow button, ADRs updated [branch: DEBUG-v001]
2026-05-14 10:09:39
PLAN/S0189_browse-create-text-notes.md
spec
Update S0189 scope with instant-edit flow, font-size control, save/cancel, rename-on-save, and pre-work questionnaire [branch: DEBUG-v001]
2026-05-14 10:48:25
PLAN/S0191_browse-create-new-drawing.md
spec S0191
Reserve S0191 and add strategic skeleton for new drawing creation with theme-based black/white background default [branch: DEBUG-v001]
2026-05-14 10:56:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt
S0159
Add onGoogleLens/onDrawOverlay callbacks; route GOOGLE_LENS_IMAGE and DRAW_OVERLAY; remove GOOGLE_LENS_PDF (requires player) [branch: DEBUG-v001]
2026-05-14 10:56:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0159
Add EXTRA_ACTIVATE_DRAW_MODE const; activate draw overlay after initializeManagers when extra is present [branch: DEBUG-v001]
2026-05-14 10:56:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0159
Wire onGoogleLens/onDrawOverlay callbacks; add launchGoogleLensForFile + launchPlayerWithDrawOverlay helpers [branch: DEBUG-v001]
2026-05-14 11:11:57
PLAN/S0192_draw-editor-toolbar-ux-v2.md
spec S0192
Create S0192: draw editor toolbar UX v2 - compact X/overflow/Save action row, tool-selector button, oval+text tools, undo stack, 4-color palette with 16-color custom picker, color persistence, in-place save with isReadOnly fallback [branch: DEBUG-v001]
2026-05-14 11:12:21
PLAN/S0191_browse-create-new-drawing.md
spec S0191
Set status BlockByOtherTask: blocked by S0192 (draw-editor-toolbar-ux-v2) [branch: DEBUG-v001]
2026-05-14 11:13:10
PLAN/S0192_draw-editor-toolbar-ux-v2.md
spec S0192
Rev 2: add Settings dialog (brush size SeekBar 1-36, text size Small/Medium/Large, opacity 0/25/50/75/100%), eraser=2x brush, opacity baked into ARGB, all prefs persisted; overflow menu item d; ADR-6/ADR-7; new string keys [branch: DEBUG-v001]
2026-05-14 11:19:34
PLAN/S0192_draw-editor-toolbar-ux-v2.md
spec S0192
Rev 3: add overflow item e - Send to Google Keep (MergeDrawOverlayUseCase -> temp cache file -> FileProvider -> ACTION_SEND targeting com.google.android.keep, fallback to generic chooser); ADR-8; new string keys [branch: DEBUG-v001]
2026-05-14 11:19:50
PLAN/S0189_browse-create-text-notes.md
spec
Update S0189 with Google Keep export action from Browse operations menu [branch: DEBUG-v001]
2026-05-14 11:20:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt
S0159
Switch from PopupMenu to scrollable ListPopupWindow; add onInfo/onSearchYoutubeMusic callbacks [branch: DEBUG-v001]
2026-05-14 11:20:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0159
Inject UnifiedFileCache for Browse FileInfoDialog [branch: DEBUG-v001]
2026-05-14 11:20:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0159
Add showFileInfoDialog + searchYoutubeMusicForFile helpers; wire onInfo/onSearchYoutubeMusic [branch: DEBUG-v001]
2026-05-14 11:20:28
PLAN/S0189_browse-create-text-notes.md
spec
Add explicit customer questionnaire block to S0189 for note creation and Google Keep export decisions [branch: DEBUG-v001]
2026-05-14 11:21:08
PLAN/S0191_browse-create-new-drawing.md
spec S0191
Add §6.1 customer questionnaire (10 questions: entry point, resource context, format, canvas size, background, filename, naming conflict, auto-open, error handling, list refresh) [branch: DEBUG-v001]
2026-05-14 11:31:05
PLAN/S0193_lazy-init-research.md
spec
Add strategic spec S0193 for lazy-init-research [branch: DEBUG-v001]
2026-05-14 11:36:15
PLAN/S0193_lazy-init-research/INDEX.md
spec-tech
Create tactical plan for S0193 [branch: DEBUG-v001]
2026-05-14 11:36:15
PLAN/S0193_lazy-init-research/PHASE_01__audit-init-points.md
spec-tech
Phase 01: audit-init-points [branch: DEBUG-v001]
2026-05-14 11:36:16
PLAN/S0193_lazy-init-research/PHASE_02__measure-startup-costs.md
spec-tech
Phase 02: measure-startup-costs [branch: DEBUG-v001]
2026-05-14 11:36:16
PLAN/S0193_lazy-init-research/PHASE_03__lazy-mechanisms-eval.md
spec-tech
Phase 03: lazy-mechanisms-eval [branch: DEBUG-v001]
2026-05-14 11:36:16
PLAN/S0193_lazy-init-research/PHASE_04__recommendation.md
spec-tech
Phase 04: recommendation [branch: DEBUG-v001]
2026-05-14 11:36:17
PLAN/S0193_lazy-init-research/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-14 11:36:17
PLAN/S0193_lazy-init-research.md
spec-tech
Status -> Tactical [branch: DEBUG-v001]
2026-05-14 11:42:03
PLAN/S0193_lazy-init-research/PHASE_02__measure-startup-costs.md
spec-update
S0193 Phase 02: rewrite to adb-only, remove profiler dependency [branch: DEBUG-v001]
2026-05-14 11:42:03
PLAN/S0193_lazy-init-research/PHASE_04__recommendation.md
spec-update
S0193 Phase 04: add principle-first path, Phase 02 now optional gate [branch: DEBUG-v001]
2026-05-14 11:42:03
PLAN/S0193_lazy-init-research.md
spec-update
S0193 strategic: measurements are supporting evidence, principle is self-sufficient [branch: DEBUG-v001]
2026-05-14 11:47:37
PLAN/S0193_lazy-init-research.md
spec-update
S0193 strategic: document dagger.Lazy as expected recommendation hypothesis [branch: DEBUG-v001]
2026-05-14 11:48:30
PLAN/S0193_lazy-init-research.md
S0193
Added AI insights and recommendations on lazy init, DFM, Chaquopy and lifecycle [branch: DEBUG-v001]
2026-05-14 11:59:44
PLAN/S0193_lazy-init-research/PHASE_01__audit-init-points.md
research
S0193 Phase 01: static audit complete - 17 fields classified, noLegal already lazy [branch: DEBUG-v001]
2026-05-14 11:59:44
PLAN/S0193_lazy-init-research/PHASE_03__lazy-mechanisms-eval.md
research
S0193 Phase 03: applicability matrix - 13 Lazy + 4 trigger-on-first-use, DFM rejected [branch: DEBUG-v001]
2026-05-14 11:59:45
PLAN/S0193_lazy-init-research/PHASE_04__recommendation.md
research
S0193 Phase 04: recommendation written, child specs S0194 + S0195 created [branch: DEBUG-v001]
2026-05-14 11:59:45
PLAN/S0193_lazy-init-research.md
research
S0193 strategic: §6.2/6.3/6.5 resolved, ADR-3 added, §10 lists S0194+S0195 [branch: DEBUG-v001]
2026-05-14 11:59:45
PLAN/S0194_lazy-hilt-singletons.md
spec
Create child spec S0194 - lazy-hilt-singletons (Draft) [branch: DEBUG-v001]
2026-05-14 11:59:45
PLAN/S0195_network-first-use-trigger.md
spec
Create child spec S0195 - network-first-use-trigger (Draft) [branch: DEBUG-v001]
2026-05-14 12:03:31
PLAN/S0193_lazy-init-research/PHASE_01__audit-init-points.md
research
S0193 Phase 01: audit init points complete [branch: DEBUG-v001]
2026-05-14 12:03:31
PLAN/S0193_lazy-init-research/PHASE_03__lazy-mechanisms-eval.md
research
S0193 Phase 03: lazy mechanisms eval complete [branch: DEBUG-v001]
2026-05-14 12:03:31
PLAN/S0193_lazy-init-research/PHASE_04__recommendation.md
research
S0193 Phase 04: recommendation complete [branch: DEBUG-v001]
2026-05-14 12:03:31
PLAN/S0193_lazy-init-research.md
research
S0193: ADR-3 added to strategic spec [branch: DEBUG-v001]
2026-05-14 12:03:31
PLAN/S0193_lazy-init-research/PHASE_05__docs-catalog-cleanup.md
spec-tech
S0193 Phase 05: research cycle closed [branch: DEBUG-v001]
2026-05-14 12:03:32
PLAN/S0196_activity-render-priority-research.md
spec
Add strategic spec S0196 for ad-hoc activity-render-priority-research [branch: DEBUG-v001]
2026-05-14 12:08:17
PLAN/S0194_lazy-hilt-singletons.md
spec-update
Refine S0194 after S0193 review: clarify real lazy-init scope, remove class-level leakage from strategic spec, tighten risks and done criteria [branch: DEBUG-v001]
2026-05-14 12:51:06
PLAN/S0197_threads-ig-data-sjs-extractor.md
spec-all
Add strategic spec S0197 (Threads/IG data-sjs JSON extractor wiring; follow-up to S0181 Tier 2) [branch: DEBUG-v001]
2026-05-14 12:55:04
PLAN/S0197_threads-ig-data-sjs-extractor/INDEX.md
spec-tech
Create tactical plan for S0197 (4 phases) [branch: DEBUG-v001]
2026-05-14 12:55:16
PLAN/S0197_threads-ig-data-sjs-extractor/PHASE_01__activation-surface.md
spec-tech
S0197 Phase 01: activation-surface [branch: DEBUG-v001]
2026-05-14 12:55:17
PLAN/S0197_threads-ig-data-sjs-extractor/PHASE_02__selection-bias.md
spec-tech
S0197 Phase 02: selection-bias [branch: DEBUG-v001]
2026-05-14 12:55:17
PLAN/S0197_threads-ig-data-sjs-extractor/PHASE_03__batch-and-bypass.md
spec-tech
S0197 Phase 03: batch-and-bypass [branch: DEBUG-v001]
2026-05-14 12:55:17
PLAN/S0197_threads-ig-data-sjs-extractor/PHASE_04__docs-catalog-cleanup.md
spec-tech
S0197 Phase 04: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-14 12:55:18
PLAN/S0197_threads-ig-data-sjs-extractor.md
spec-tech
S0197 Status -> Tactical [branch: DEBUG-v001]
2026-05-14 12:56:34
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt
spec-dev
S0197 Phase 01.1: add supportsEmbeddedJson property + helper [branch: DEBUG-v001]
2026-05-14 12:57:23
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
spec-dev
S0197 Phase 01.2: replace THREADS_HOSTS gate with KnownAuthResources.supportsEmbeddedJson [branch: DEBUG-v001]
2026-05-14 12:58:25
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
spec-dev
S0197 Phase 01.3: wire sniffEmbeddedJson into html-cheap-path (host-gated) [branch: DEBUG-v001]
2026-05-14 13:02:03
app_v2/src/main/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicy.kt
spec-dev
S0197 Phase 02.1: prefer EMBEDDED_JSON subset over OG/IMG candidates [branch: DEBUG-v001]
2026-05-14 13:08:09
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
spec-dev
S0197 Phase 03.1-03.2: EMBEDDED_JSON-aware Batch trigger + SocialPreviewOnly bypass [branch: DEBUG-v001]
2026-05-14 13:08:10
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
spec-dev
S0197 Phase 03.3-03.4: html-strategy Batch return path + SocialPreviewOnly bypass [branch: DEBUG-v001]
2026-05-14 13:09:02
dev/CATALOG/app_v2.jsonl
spec-dev
S0197 Phase 04.1: regenerate app_v2 catalog after phases 01-03 [branch: DEBUG-v001]
2026-05-14 13:09:03
dev/CATALOG/app_v2.md
spec-dev
S0197 Phase 04.1: re-render app_v2 catalog [branch: DEBUG-v001]
2026-05-14 13:12:21
PLAN/S0197_threads-ig-data-sjs-extractor.md
spec-dev
S0197 Status -> Implemented (4/4 phases done; awaiting device test) [branch: DEBUG-v001]
2026-05-14 13:12:22
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
spec-dev
S0197: insert Timber.d debug tag for BlockNeedUserTest [branch: DEBUG-v001]
2026-05-14 13:12:22
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
spec-dev
S0197: insert Timber.d debug tag for BlockNeedUserTest [branch: DEBUG-v001]
2026-05-14 13:12:36
PLAN/S0197_threads-ig-data-sjs-extractor.md
spec-dev
S0197 Status -> BlockNeedUserTest (Timber.d tags inserted, awaiting on-device verification across 4 failure modes) [branch: DEBUG-v001]
2026-05-14 13:13:24
PLAN/S0181_threads_image_scraper_investigation.md
spec-all
S0181 Status -> Implemented (research consumed by S0197 Tier 2 wiring) [branch: DEBUG-v001]
2026-05-14 14:13:27
PLAN/S0194_lazy-hilt-singletons.md
S0194
Updated specification to explicitly require dagger.Lazy and added import error risk [branch: DEBUG-v001]
2026-05-14 14:30:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SlideshowResourceAvailabilityManager.kt
SlideshowResourceAvailabilityManager
S0188 add slideshow resource availability tracking and stop logic [branch: DEBUG-v001]
2026-05-14 14:30:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
S0188 add slideshow stop/reset hooks for unavailable resources [branch: DEBUG-v001]
2026-05-14 14:30:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
S0188 wire helper into player and audio-service callbacks [branch: DEBUG-v001]
2026-05-14 14:30:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationManager.kt
PlayerNavigationManager
S0188 reset slideshow failure state on manual navigation [branch: DEBUG-v001]
2026-05-14 14:30:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt
PlayerKeyboardCallbackImpl
S0188 route keyboard navigation through manual reset path [branch: DEBUG-v001]
2026-05-14 14:30:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerGestureCallbackImpl.kt
PlayerGestureCallbackImpl
S0188 route gesture navigation through manual reset path [branch: DEBUG-v001]
2026-05-14 14:30:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt
PlayerControlsSetupManager
S0188 route control buttons through manual reset path [branch: DEBUG-v001]
2026-05-14 14:30:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
PlayerPlaybackCallbackImpl
S0188 stop slideshow after repeated playback failures or quick ends [branch: DEBUG-v001]
2026-05-14 14:30:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerImageLoadingCallbackImpl.kt
PlayerImageLoadingCallbackImpl
S0188 stop slideshow after repeated image transport failures [branch: DEBUG-v001]
2026-05-14 14:30:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
S0188 emit image success callbacks for static and GIF loads [branch: DEBUG-v001]
2026-05-14 14:30:53
app_v2/src/main/res/values/strings.xml
strings.xml
S0188 add slideshow stop messages in EN [branch: DEBUG-v001]
2026-05-14 14:30:54
app_v2/src/main/res/values-ru/strings.xml
strings.xml
S0188 add slideshow stop messages in RU [branch: DEBUG-v001]
2026-05-14 14:30:55
app_v2/src/main/res/values-uk/strings.xml
strings.xml
S0188 add slideshow stop messages in UK [branch: DEBUG-v001]
2026-05-14 14:30:55
PLAN/S0188_slideshow-stop-on-resource-unavailable.md
spec-tech
S0188 resolve research items and attach tactical plan [branch: DEBUG-v001]
2026-05-14 14:30:56
PLAN/S0188_slideshow-stop-on-resource-unavailable/INDEX.md
spec-tech
S0188 create tactical phase index [branch: DEBUG-v001]
2026-05-14 14:30:56
PLAN/S0188_slideshow-stop-on-resource-unavailable/PHASE_01__foundation-and-stop-path.md
spec-tech
S0188 phase 01 foundation and stop path [branch: DEBUG-v001]
2026-05-14 14:30:56
PLAN/S0188_slideshow-stop-on-resource-unavailable/PHASE_02__failure-signal-wiring.md
spec-tech
S0188 phase 02 failure signal wiring [branch: DEBUG-v001]
2026-05-14 14:30:57
PLAN/S0188_slideshow-stop-on-resource-unavailable/PHASE_03__docs-catalog-cleanup.md
spec-tech
S0188 phase 03 cleanup and validation [branch: DEBUG-v001]
2026-05-14 14:30:57
dev/CATALOG/app_v2.jsonl
catalog
S0188 refresh app_v2 catalog after player changes [branch: DEBUG-v001]
2026-05-14 14:30:57
dev/CATALOG/app_v2.md
catalog
S0188 render app_v2 catalog after player changes [branch: DEBUG-v001]
2026-05-14 14:31:27
PLAN/S0188_slideshow-stop-on-resource-unavailable.md
spec-tech
S0188 status -> In Progress after implementation build [branch: DEBUG-v001]
2026-05-14 14:31:27
PLAN/S0188_slideshow-stop-on-resource-unavailable/INDEX.md
spec-tech
S0188 tactical index status -> In Progress [branch: DEBUG-v001]
2026-05-14 14:35:31
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md
S0190
Strategic spec approved: §6 open questions resolved via codebase research; §13 Implementation Phases added (Simple path: yt-dlp bump + URL canonicalizer); spawns S0198 for PoTokenProvider [branch: DEBUG-v001]
2026-05-14 14:35:42
app_v2/build.gradle.kts
S0190
Bump yt-dlp pin 2025.4.30 -> 2026.3.17 in noLegal flavor for 2025-H2/early-2026 YouTube player.js handling and extractor_args player_client support [branch: DEBUG-v001]
2026-05-14 14:35:42
app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkUrlCanonicalizer.kt
S0190
New singleton: rewrites music.youtube.com/m.youtube.com to www.youtube.com and youtube.com/shorts/ to www.youtube.com/watch?v= [branch: DEBUG-v001]
2026-05-14 14:35:42
app_v2/src/noLegal/python/ytdlp_utils.py
S0190
Add extractor_args.youtube.player_client=android,web to download_to_file opts; Android client bypasses PoToken requirement for most YouTube URLs [branch: DEBUG-v001]
2026-05-14 14:35:53
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0190
Inject LinkUrlCanonicalizer; canonicalize URL at handle() entry before cookie host lookup and cascade; canonicalize each batch item before distinct() [branch: DEBUG-v001]
2026-05-14 14:35:53
app_v2/src/test/java/com/sza/fastmediasorter/data/link/LinkUrlCanonicalizerTest.kt
S0190
Add 12 unit tests covering YouTube canonicalization rules (music/m/shorts host rewrite + query param preservation + case insensitivity + passthrough) [branch: DEBUG-v001]
2026-05-14 14:35:53
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
S0190
Add urlCanonicalizer parameter to coordinator constructor wiring [branch: DEBUG-v001]
2026-05-14 14:36:03
PLAN/S0198_nolegal-newpipe-potoken-provider.md
S0198
New strategic spec (Draft -> BlockExternal): NewPipe v0.26.1 PoTokenProvider implementation via headless WebView; spawned by S0190 for residual Shorts/YTMusic cases requiring botguard [branch: DEBUG-v001]
2026-05-14 14:36:03
docs/FEATURES_noLegal.md
S0190
Extended Feature 4 (YouTube/Music Extraction Recovery) with URL canonicalization and yt-dlp 2026.3.17 + Android player_client (EN+RU+UK) [branch: DEBUG-v001]
2026-05-14 14:37:22
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md
S0190
Status In Progress -> Implemented -> BlockNeedUserTest; added Last Audit block with device-test plan (Shorts/YTMusic/Regular/Mobile) [branch: DEBUG-v001]
2026-05-14 14:37:44
PLAN/spec-catalog.jsonl
S0190+S0198
Pipeline status transitions: S0190 Draft->Approved->In Progress->Implemented->BlockNeedUserTest; S0198 Draft->BlockExternal [branch: DEBUG-v001]
2026-05-14 14:42:30
CLAUDE.md
Strict Rules / Research Order
Add Rule 15: flavor isolation (forbid BuildConfig flavor guards in src/main; reference dev/FLAVOR_DEVELOPMENT_RULES.md) [branch: DEBUG-v001]
2026-05-14 14:42:41
dev/CATALOG/scripts/set.ps1
set.ps1
Expand noFlavors valid set with vr, vrUnlicensed, noLegal (4 -> 7 values) [branch: DEBUG-v001]
2026-05-14 14:42:41
dev/CATALOG/README.md
CATALOG README
Update noFlavors field doc with full 7-flavor list and source-set hint [branch: DEBUG-v001]
2026-05-14 14:42:42
.claude/commands/quick.md
quick skill
Forbid BuildConfig flavor guards in src/main from /quick path [branch: DEBUG-v001]
2026-05-14 14:42:45
.claude/commands/spec-dev.md
spec-dev skill
Add pre-edit guard + Hard Stop #14 for flavor leaks (BuildConfig.SUPPORT_* in src/main; flavor-only classes outside src//java/) [branch: DEBUG-v001]
2026-05-14 14:42:45
.claude/commands/spec.md
spec skill
Add mandatory Constraint: non-standard flavor specs must name source-set discipline in 3.2 and 5.3 [branch: DEBUG-v001]
2026-05-14 14:42:46
.claude/commands/spec-tech.md
spec-tech skill
Add Constraint: flavor-only files must live under src//java/; add catalog hint sub-step recommendation [branch: DEBUG-v001]
2026-05-14 14:42:49
.claude/commands/build.md
build skill
Add Product Flavors VR/vrUnlicensed/noLegal rows + Flavor Source Set Discipline section + troubleshooting [branch: DEBUG-v001]
2026-05-14 14:42:49
.claude/commands/catalog.md
catalog skill
Update NoFlavors example with 7 valid flavors and VR-only sample [branch: DEBUG-v001]
2026-05-14 14:42:50
PLAN/S0199_vr-render-pseudo-package-cleanup.md
S0199 spec
Allocate spec S0199 (Draft, Tier 3, Priority 30): rename pseudo-vr/render package in src/main to flavor-neutral name [branch: DEBUG-v001]
2026-05-14 14:47:12
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
S0194
Wrap 13 @Inject fields in dagger.Lazy + S0194 verification tag [branch: DEBUG-v001]
2026-05-14 14:47:12
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
S0194
Constructor accepts dagger.Lazy for 7 deps; .get() inside each coroutine task [branch: DEBUG-v001]
2026-05-14 14:47:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCacheHelper.kt
S0194
Add .get() at 3 callsites of FastMediaSorterApp.{unifiedCache,cachedFileListRepository,playbackPositionRepository} [branch: DEBUG-v001]
2026-05-14 14:47:13
PLAN/S0194_lazy-hilt-singletons.md
S0194
Status -> BlockNeedUserTest after PRIMITIVE impl complete [branch: DEBUG-v001]
2026-05-14 15:07:31
PLAN/S0195_network-first-use-trigger.md
spec-update
Refine S0195: real first-use boundary, passive registry rule, stronger acceptance criteria; sync status to Approved [branch: DEBUG-v001]
2026-05-14 15:21:58
PLAN/S0195_network-first-use-trigger/INDEX.md
spec-tech
Create tactical plan for S0195 (4 phases) [branch: DEBUG-v001]
2026-05-14 15:21:58
PLAN/S0195_network-first-use-trigger/PHASE_01__bootstrapper-foundation.md
spec-tech
Phase 01: bootstrapper-foundation [branch: DEBUG-v001]
2026-05-14 15:21:58
PLAN/S0195_network-first-use-trigger/PHASE_02__consumer-boundary-wiring.md
spec-tech
Phase 02: consumer-boundary-wiring [branch: DEBUG-v001]
2026-05-14 15:21:58
PLAN/S0195_network-first-use-trigger/PHASE_03__remove-eager-hooks.md
spec-tech
Phase 03: remove-eager-hooks [branch: DEBUG-v001]
2026-05-14 15:21:59
PLAN/S0195_network-first-use-trigger/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-14 15:21:59
PLAN/S0195_network-first-use-trigger.md
spec-tech
Status -> Tactical [branch: DEBUG-v001]
2026-05-14 15:23:28
PLAN/S0112_android-tv-launcher-support.md
spec S0112
Align strategic status to Verified with the existing Android TV launcher implementation [branch: DEBUG-v001]
2026-05-14 15:23:28
PLAN/S0112_android-tv-launcher-support/INDEX.md
spec S0112
Close tactical plan after confirming the implementation payload already exists in code and git history [branch: DEBUG-v001]
2026-05-14 15:23:28
PLAN/spec-catalog.jsonl
spec S0112
Advance S0112 journal status to Verified after implementation alignment [branch: DEBUG-v001]
2026-05-14 15:24:30
PLAN/S0196_activity-render-priority-research.md
spec-update
Refine S0196 strategic scope: target surfaces, measurement protocol, research artifacts, and readiness criteria [branch: DEBUG-v001]
2026-05-14 15:51:11
app_v2/build.gradle.kts
S0183
Fix manifest merger: addStaticManifestFile for noLegal (manifest.srcFile(vr) was replacing src/noLegal/AndroidManifest.xml) [branch: DEBUG-v001]
2026-05-14 15:51:11
app_v2/src/noLegal/AndroidManifest.xml
S0183
Remove obsolete extractNativeLibs override (Chaquopy 17.x runs fine with useLegacyPackaging=false) [branch: DEBUG-v001]
2026-05-14 15:52:44
app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LoggingHelper.kt
LoggingHelper
Add direct fatal crash persistence API for debug-only crash UI [branch: DEBUG-v001]
2026-05-14 15:52:44
app_v2/src/debug/java/com/sza/fastmediasorter/core/debug/DebugToolsBootstrap.kt
DebugToolsBootstrap
Persist fatal crash to file log before showing debug crash dialog [branch: DEBUG-v001]
2026-05-14 15:54:54
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md, PLAN/S0187_nolegal-youtube-extraction-recovery.md, LinkAutoDownloadCoordinator.kt, LinkUrlCanonicalizer.kt, YtDlpExtractionStrategy.kt
S0190, S0187
Device test 2026-05-14 audit: Phase A (yt-dlp 2026.3.17 + Android client) and Phase B (URL canonicalizer) confirmed working for YT Shorts and YT Music - extraction returns valid progressive URLs from googlevideo CDN. New failure mode discovered: LinkDownloadWriter OkHttp read-timeout (InterruptedIOException) after ~30s of write, leaving file truncated to a few MB. Status BlockNeedUserTest -> Partial on both specs; Timber.d S0190/S0187 verification tags removed (3 occurrences). Open question on HTTP-write strategy added to S0190 Last Audit including player-mimicking Range pacing option suggested by owner. [branch: DEBUG-v001]
2026-05-14 15:57:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBigButtonsModeManager.kt
S0158-fix
Fix runaway height growth: use fixed player_cmd_button_size dimen instead of measuredHeight in both apply methods [branch: DEBUG-v001]
2026-05-14 16:03:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ScreenRotationManager.kt
ScreenRotationManager
Fix S0162 bug: replace ACCELEROMETER_ROTATION read with SCREEN_ORIENTATION_UNSPECIFIED for followSystem=true. Reading the system flag was unreliable on Samsung One UI (SM-S731B, Android 16) - the flag returned 1 even with rotation locked. UNSPECIFIED correctly delegates to OS on all devices. [branch: DEBUG-v001]
2026-05-14 16:03:09
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
AppStartupInitializer
Add followSystemRotation + playerRotationSensorEnabled to startup settings dump (S0162 fields were missing from debug log) [branch: DEBUG-v001]
2026-05-14 16:07:41
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md
S0190
Owner decision: Phase D will use yt-dlp internal downloader (Option A) for all *.googlevideo.com URLs instead of OkHttp write - solves HTTP read-timeout by delegating CDN edge-handling to yt-dlp. Also covers YTMusic audio-only preference via canonicalize() return. Status Partial -> Tactical. [branch: DEBUG-v001]
2026-05-14 16:10:08
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/NetworkLifecycleBootstrapper.kt
S0195
Phase 01 Step 01.1: create NetworkLifecycleBootstrapper - dormant one-shot init for 4 lifecycle hooks via dagger.Lazy [branch: DEBUG-v001]
2026-05-14 16:10:40
PLAN/S0196_activity-render-priority-research.md
spec-tech
Status -> Tactical and added tactical plan link for S0196 [branch: DEBUG-v001]
2026-05-14 16:10:40
PLAN/S0196_activity-render-priority-research/INDEX.md
spec-tech
Create tactical plan index for S0196 [branch: DEBUG-v001]
2026-05-14 16:10:40
PLAN/S0196_activity-render-priority-research/PHASE_01__surface-map.md
spec-tech
Phase 01: surface-map [branch: DEBUG-v001]
2026-05-14 16:10:40
PLAN/S0196_activity-render-priority-research/PHASE_02__player-host-audit.md
spec-tech
Phase 02: player-host-audit [branch: DEBUG-v001]
2026-05-14 16:10:40
PLAN/S0196_activity-render-priority-research/PHASE_03__browse-settings-pickers.md
spec-tech
Phase 03: browse-settings-pickers [branch: DEBUG-v001]
2026-05-14 16:10:41
PLAN/S0196_activity-render-priority-research/PHASE_04__perf-measurements.md
spec-tech
Phase 04: perf-measurements [branch: DEBUG-v001]
2026-05-14 16:10:41
PLAN/S0196_activity-render-priority-research/PHASE_05__recommendation.md
spec-tech
Phase 05: recommendation [branch: DEBUG-v001]
2026-05-14 16:10:41
PLAN/S0196_activity-render-priority-research/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-14 16:10:57
app_v2/src/main/java/com/sza/fastmediasorter/core/di/NetworkLifecycleModule.kt
S0195
Phase 01 Step 01.2: KDoc note documenting constructor-injection of NetworkLifecycleBootstrapper [branch: DEBUG-v001]
2026-05-14 16:14:35
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
S0195
Phase 02 Step 02.1: bootstrap trigger at withConnection + getConnectionForExoPlayer [branch: DEBUG-v001]
2026-05-14 16:15:30
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0195
Phase 02 Step 02.2: bootstrap trigger at withConnection + getConnectionForExoPlayer [branch: DEBUG-v001]
2026-05-14 16:16:08
PLAN/S0200_google-account-central-binding.md
spec
Add strategic spec S0200 for ad-hoc google-account-central-binding (Tier 3, Priority 50) [branch: DEBUG-v001]
2026-05-14 16:16:18
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpClient.kt
S0195
Phase 02 Step 02.3: bootstrap trigger at connect + getConnectionForExoPlayer [branch: DEBUG-v001]
2026-05-14 16:19:03
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
S0195
Phase 02 Step 02.4: bootstrap trigger at tryRestoreFromStorage [branch: DEBUG-v001]
2026-05-14 16:19:03
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
S0195
Phase 02 Step 02.4: bootstrap trigger at tryRestoreForAccount [branch: DEBUG-v001]
2026-05-14 16:19:04
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveRestClient.kt
S0195
Phase 02 Step 02.4: bootstrap trigger at authenticate [branch: DEBUG-v001]
2026-05-14 16:24:15
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
S0195
Phase 03 Step 03.2: remove 4 eager network hooks - bootstrap now via NetworkLifecycleBootstrapper on first remote use [branch: DEBUG-v001]
2026-05-14 16:26:30
PLAN/S0195_network-first-use-trigger.md
S0195
All 4 phases complete - status -> BlockNeedUserTest [branch: DEBUG-v001]
2026-05-14 16:34:03
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction/INDEX.md
spec-tech
Create tactical plan INDEX for S0190 Phase D (yt-dlp internal downloader) [branch: DEBUG-v001]
2026-05-14 16:34:04
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction/PHASE_01__foundations-media-hint.md
spec-tech
Phase 01: foundations - CanonicalizedUrl + audioOnly plumbing through session context [branch: DEBUG-v001]
2026-05-14 16:34:07
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction/PHASE_02__ytdlp-internal-downloader.md
spec-tech
Phase 02: route googlevideo CDN URLs through downloadViaPython, audio-only format for YTMusic [branch: DEBUG-v001]
2026-05-14 16:34:08
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction/PHASE_03__progress-hook-wiring.md
spec-tech
Phase 03: yt-dlp progress_hooks bridged into Java onProgress callback via Chaquopy [branch: DEBUG-v001]
2026-05-14 16:34:13
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs+catalog+tags, advance S0190 to BlockNeedUserTest [branch: DEBUG-v001]
2026-05-14 16:34:14
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md
spec-tech
S0190 strategic: add Tactical plan link [branch: DEBUG-v001]
2026-05-14 16:35:47
app_v2/src/main/java/com/sza/fastmediasorter/data/link/CanonicalizedUrl.kt
S0190
Phase 01 Step 01.1: new data class CanonicalizedUrl(url, audioOnly) - return type for LinkUrlCanonicalizer [branch: DEBUG-v001]
2026-05-14 16:36:44
app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkUrlCanonicalizer.kt
S0190
Phase 01 Step 01.2: canonicalize() return type String -> CanonicalizedUrl; audioOnly=true for music.youtube.com [branch: DEBUG-v001]
2026-05-14 16:37:53
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadSessionContext.kt
S0190
Phase 01 Step 01.3: add audioOnly field to Active + 4-arg setter overload + audioOnlyFor(host) accessor [branch: DEBUG-v001]
2026-05-14 16:39:07
PLAN/S0199_vr-render-pseudo-package-cleanup/INDEX.md
spec-tech
S0199 create tactical plan index [branch: DEBUG-v001]
2026-05-14 16:39:08
PLAN/S0199_vr-render-pseudo-package-cleanup/PHASE_01__shared-contract-cutover.md
spec-tech
S0199 phase 01 shared contract cutover [branch: DEBUG-v001]
2026-05-14 16:39:08
PLAN/S0199_vr-render-pseudo-package-cleanup/PHASE_02__catalog-reconciliation.md
spec-tech
S0199 phase 02 catalog reconciliation [branch: DEBUG-v001]
2026-05-14 16:39:08
PLAN/S0199_vr-render-pseudo-package-cleanup/PHASE_03__docs-catalog-cleanup.md
spec-tech
S0199 phase 03 docs catalog cleanup [branch: DEBUG-v001]
2026-05-14 16:39:08
PLAN/S0199_vr-render-pseudo-package-cleanup.md
spec-tech
S0199 status to Tactical and resolved research items [branch: DEBUG-v001]
2026-05-14 16:39:08
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0190
Phase 01 Step 01.4: wire CanonicalizedUrl through handle()/handleBatch(); applySessionContext gets 4th audioOnly param [branch: DEBUG-v001]
2026-05-14 16:41:20
PLAN/S0200_google-account-central-binding.md
spec
Resolve open questions in S0200 (no auto-migration, hard CCT requirement, Credential Manager defaults for scope re-request); add ADR-6 and ADR-7 [branch: DEBUG-v001]
2026-05-14 16:42:04
.claude/commands/spec-next.md
spec-next
Add /spec-next skill: auto-pick top-priority eligible spec from catalog and delegate to /spec-all; loop until exhausted [branch: DEBUG-v001]
2026-05-14 16:43:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/stereoscopic/DefaultVrLayerFactory.kt
S0199
S0199 move shared layer factory to neutral player render package [branch: DEBUG-v001]
2026-05-14 16:43:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/stereoscopic/VrLayerDescriptor.kt
S0199
S0199 move shared layer descriptor types to neutral player render package [branch: DEBUG-v001]
2026-05-14 16:43:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/stereoscopic/VrLayerFactory.kt
S0199
S0199 move shared layer factory contract to neutral player render package [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/stereoscopic/VrLayerType.kt
S0199
S0199 move shared layer type enum to neutral player render package [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/stereoscopic/VrRenderContext.kt
S0199
S0199 move shared render context types to neutral player render package [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/stereoscopic/VrRenderPlanner.kt
S0199
S0199 move shared render planner to neutral player render package [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
S0199
S0199 repoint shared render contract imports to neutral package [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrModule.kt
S0199
S0199 repoint shared layer factory binding imports to neutral package [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrRenderPipelineManager.kt
S0199
S0199 repoint pipeline imports for shared render contracts [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrSessionLifecycleManager.kt
S0199
S0199 repoint lifecycle manager imports for shared render contracts [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/openxr/OpenXrSessionManager.kt
S0199
S0199 repoint OpenXR session manager descriptor import [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/vr/java/com/sza/fastmediasorter/vr/ui/VrZoomManager.kt
S0199
S0199 repoint VR zoom descriptor import to neutral package [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/render/VrLayerFactoryTest.kt
S0199
S0199 repoint VR layer factory test to neutral shared contracts [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/render/VrStereoRendererTest.kt
S0199
S0199 repoint VR render planner test to neutral shared contracts [branch: DEBUG-v001]
2026-05-14 16:43:06
app_v2/src/testVr/java/com/sza/fastmediasorter/vr/ui/VrZoomManagerTest.kt
S0199
S0199 repoint VR zoom test descriptor import to neutral package [branch: DEBUG-v001]
2026-05-14 16:46:50
app_v2/src/test/java/com/sza/fastmediasorter/data/link/LinkUrlCanonicalizerTest.kt
S0190
Phase 01 Step 01.5: assertions use .url; 3 new tests for audioOnly hint [branch: DEBUG-v001]
2026-05-14 16:46:51
scripts/builders/build-debug.PS1
S0190
Phase 01 Step 01.5 tooling fix: -Task parameter so script can target arbitrary gradle task (testStandardDebugUnitTest etc.) [branch: DEBUG-v001]
2026-05-14 17:02:26
scripts/builders/build-debug.PS1
build-tooling
Add -Chaquopy switch + auto-enable when -Task contains ‘noLegal’ (S0190 Phase 01 prerequisite) [branch: DEBUG-v001]
2026-05-14 17:02:30
app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrPhotoSphereRenderer.kt, app_v2/src/vr/java/com/sza/fastmediasorter/vr/render/VrStereoRenderer.kt
vr-render
Add missing imports for VrRenderPlanner/VrRenderContext/VrLayerDescriptor/VrEye - these classes live in src/main/java/…/stereoscopic; references were unqualified and broke noLegal+vrUnlicensed compileKotlin (regression discovered while validating S0190 Phase 01 via testNoLegalDebugUnitTest) [branch: DEBUG-v001]
2026-05-14 17:02:34
app_v2/src/test/java/com/sza/fastmediasorter/data/remote/ftp/FtpClientTest.kt, app_v2/src/test/java/com/sza/fastmediasorter/data/remote/sftp/SftpClientTest.kt, app_v2/src/test/java/com/sza/fastmediasorter/data/network/smb/SmbConnectionManagerTest.kt, app_v2/src/test/java/com/sza/fastmediasorter/data/cloud/GoogleDriveTokenRefreshTest.kt
test-fixups
Add missing lifecycleBootstrapper=dagger.Lazy{mockk()} arg to 5 test instantiations after FtpClient/SftpClient/SmbConnectionManager/GoogleDriveRestClient gained a new constructor parameter - unblocks compileNoLegalDebugUnitTestKotlin [branch: DEBUG-v001]
2026-05-14 17:02:36
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
S0190
Phase 01 Step 01.6 follow-up: verify-assertions now expect 4-arg sessionContext.set(host, cookies, ua, audioOnly=false) - coordinator.applySessionContext() switched to the 4-arg overload introduced in Step 01.3 [branch: DEBUG-v001]
2026-05-14 17:14:57
app_v2/src/noLegal/python/ytdlp_utils.py
S0190 Phase 02 Step 02.1
Add audio_only arg to download_to_file; pin http_chunk_size/retries/fragment_retries; set concurrent_fragment_downloads=1 [branch: DEBUG-v001]
2026-05-14 17:16:40
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0190 Phase 02 Step 02.2
Add audioOnly param to downloadViaPython; plumb sessionContext.audioOnlyFor into all 3 call sites [branch: DEBUG-v001]
2026-05-14 17:18:42
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0190 Phase 02 Step 02.3
Add googlevideo.com bypass in is DelegateParams branch; route via downloadViaPython instead of direct.open [branch: DEBUG-v001]
2026-05-14 17:25:45
app_v2/src/noLegal/python/ytdlp_utils.py
S0190 Phase 03 Step 03.1
Add progress_callback kwarg and _on_progress hook function; wire into progress_hooks opt [branch: DEBUG-v001]
2026-05-14 17:27:53
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0190 Phase 03 Step 03.2
Add onProgress param to downloadViaPython; define ProgressBridge SAM; wire progressBridge into callAttr; update 4 call sites [branch: DEBUG-v001]
2026-05-14 17:34:49
app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkUrlCanonicalizer.kt
S0190 Phase 04 Step 04.1
Re-add Timber import; insert S0190 debug verification tag in rewrite branch [branch: DEBUG-v001]
2026-05-14 17:34:49
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0190 Phase 04 Step 04.1
Insert S0190 debug verification tag after urlCanonicalizer.canonicalize() [branch: DEBUG-v001]
2026-05-14 17:34:50
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0190 Phase 04 Step 04.1
Insert S0190 debug verification tag in googlevideo CDN branch [branch: DEBUG-v001]
2026-05-14 17:38:58
docs/FEATURES_noLegal.md
S0190
Phase D: added yt-dlp end-to-end downloader bullet and changelog entry [branch: DEBUG-v001]
2026-05-14 17:39:03
docs/FEATURES_noLegal_RU.md
S0190
Phase D: added yt-dlp end-to-end downloader bullet (RU) and changelog entry [branch: DEBUG-v001]
2026-05-14 17:39:03
docs/FEATURES_noLegal_UK.md
S0190
Phase D: added yt-dlp end-to-end downloader bullet (UK) and changelog entry [branch: DEBUG-v001]
2026-05-14 17:40:53
app_v2/src/main/java/com/sza/fastmediasorter/data/link/CanonicalizedUrl.kt
S0190
Phase 01: new data class carrying url + audioOnly hint [branch: DEBUG-v001]
2026-05-14 17:40:54
app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkUrlCanonicalizer.kt
S0190
Phase 01+04: return CanonicalizedUrl; add Timber.d S0190 tag in rewrite branch [branch: DEBUG-v001]
2026-05-14 17:40:54
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/LinkDownloadSessionContext.kt
S0190
Phase 01: add audioOnly flag; audioOnlyFor(host) helper [branch: DEBUG-v001]
2026-05-14 17:40:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0190
Phase 01+04: propagate canonical.audioOnly to session context; add Timber.d S0190 handle-entry tag [branch: DEBUG-v001]
2026-05-14 17:40:55
app_v2/src/test/java/com/sza/fastmediasorter/data/link/LinkUrlCanonicalizerTest.kt
S0190
Phase 01: update tests for CanonicalizedUrl return type + audioOnly assertions [branch: DEBUG-v001]
2026-05-14 17:40:55
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
S0190
Phase 01: update tests for audioOnly propagation into session context [branch: DEBUG-v001]
2026-05-14 17:41:02
app_v2/src/noLegal/python/ytdlp_utils.py
S0190
Phase 02+03: audio_only format selector; range-chunked http opts; progress_callback + _on_progress hook [branch: DEBUG-v001]
2026-05-14 17:41:02
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0190
Phase 02+03+04: audioOnly arg; googlevideo CDN bypass; ProgressBridge; onProgress wiring; Timber.d S0190 tag [branch: DEBUG-v001]
2026-05-14 17:46:13
PLAN/development_improvements_recomendations_fromGPT.md
development_improvements_recomendations_fromGPT
Add independent review of logs/dev_progress.log with efficiency and safety recommendations for the execution workflow [branch: DEBUG-v001]
2026-05-14 17:56:49
PLAN/development_improvements_recommendations.md
development_improvements_recommendations
Merge the two workflow recommendation notes into one canonical consolidated list [branch: DEBUG-v001]
2026-05-14 17:56:49
PLAN/development_improvements_recomendations_fromGPT.md
development_improvements_recomendations_fromGPT
Reduce duplicate recommendation note to a redirect toward the canonical consolidated list [branch: DEBUG-v001]
2026-05-14 17:56:51
PLAN/S0201_developer-workflow-governance-hardening.md
spec
Add strategic spec S0201 for developer workflow governance hardening [branch: DEBUG-v001]
2026-05-14 17:57:57
PLAN/development_improvements_recomendations_fromGPT.md
development_improvements_recomendations_fromGPT
Remove accidental duplicated spec text and keep only the redirect note [branch: DEBUG-v001]
2026-05-14 18:10:00
PLAN/S0201_developer-workflow-governance-hardening/INDEX.md
S0201
Tactical plan INDEX: 4 phases, §6 questions resolved inline [branch: DEBUG-v001]
2026-05-14 18:10:00
PLAN/S0201_developer-workflow-governance-hardening/PHASE_01__resolve-open-questions.md
S0201
Phase 01: patch strategic spec §6 + §12 with resolved decisions [branch: DEBUG-v001]
2026-05-14 18:10:00
PLAN/S0201_developer-workflow-governance-hardening/PHASE_02__validation-ladder-shell-convention.md
S0201
Phase 02: add validation ladder + PowerShell-first convention to CLAUDE.md + AGENT_WORKFLOW.md [branch: DEBUG-v001]
2026-05-14 18:10:00
PLAN/S0201_developer-workflow-governance-hardening/PHASE_03__fail-closed-post-change-gates.md
S0201
Phase 03: fail-closed language for post-change gates + step evidence rule [branch: DEBUG-v001]
2026-05-14 18:10:01
PLAN/S0201_developer-workflow-governance-hardening/PHASE_04__progress-journal-schema.md
S0201
Phase 04: progress journal schema - session/step markers, raw evidence split, rotation [branch: DEBUG-v001]
2026-05-14 18:10:01
PLAN/S0201_developer-workflow-governance-hardening.md
S0201
Strategic spec: §6 open questions resolved inline, §12 updated, status Approved→Tactical [branch: DEBUG-v001]
2026-05-14 18:12:22
CLAUDE.md
S0201
Phase 02: add Validation Requirements section (validation ladder + PowerShell-first shell convention) [branch: DEBUG-v001]
2026-05-14 18:12:23
dev/AGENT_WORKFLOW.md
S0201
Phase 02: add validation ladder bullet to §8.4 Implementation [branch: DEBUG-v001]
2026-05-14 18:13:16
CLAUDE.md
S0201
Phase 03: fail-closed language for Post-Change Steps + rule 16 (non-trivial step evidence requirement) [branch: DEBUG-v001]
2026-05-14 18:14:35
dev/AGENT_WORKFLOW.md
S0201
Phase 04: add §9 progress journal schema - session/step markers, raw evidence separation, rotation [branch: DEBUG-v001]
2026-05-14 18:16:22
CLAUDE.md
S0201
Audit fix: add expected-vs-actual requirement to Validation Requirements section (C2 DoD) [branch: DEBUG-v001]
2026-05-14 18:17:07
PLAN/S0201_developer-workflow-governance-hardening.md
spec-all
Pipeline Verified: S0201 - all 8 DoD criteria pass; CLAUDE.md + AGENT_WORKFLOW.md updated [branch: DEBUG-v001]
2026-05-14 18:21:57
scripts/add_to_functionality_log.ps1
add_to_functionality_log.ps1
Introduce functionality log script: appends [datetime] [Sxxxx|——] [OP] lines to dev/FUNCTIONALITY.log; auto-creates file with header on first run [branch: DEBUG-v001]
2026-05-14 18:21:57
dev/FUNCTIONALITY.log
FUNCTIONALITY.log
Initial creation of developer-facing functionality lifecycle log (ADD/CHANGE/DELETE/FIX of user-visible behaviour) [branch: DEBUG-v001]
2026-05-14 18:21:57
CLAUDE.md
Post-Change Steps
Add functionality-log step 3; renumber subsequent steps; cross-link from Feature docs step [branch: DEBUG-v001]
2026-05-14 18:22:08
.claude/commands/spec-dev.md
/spec-dev
Add functionality log entry after Implemented (ADD/CHANGE with heuristics; skip for internal-only specs) [branch: DEBUG-v001]
2026-05-14 18:22:08
.claude/commands/spec-check.md
/spec-check
Add functionality-log fallback step 7a: write ADD/CHANGE on Verified flip when no entry for Sxxxx exists in last 24h [branch: DEBUG-v001]
2026-05-14 18:22:08
.claude/commands/spec-fix.md
/spec-fix
Add functionality-log step 5a: write FIX line when auto-fix restores user-visible behaviour [branch: DEBUG-v001]
2026-05-14 18:22:08
.claude/commands/spec-arc.md
/spec-arc
Add –removes-functionality flag and step 3a: emit DELETE line only when explicit signal present [branch: DEBUG-v001]
2026-05-14 18:22:08
.claude/commands/spec-all.md
/spec-all
Document that functionality log is owned by sub-skills; surface FUNC_LOG MISSED under Manual / unresolved when missing [branch: DEBUG-v001]
2026-05-14 18:22:08
.claude/commands/quick.md
/quick
Add conditional functionality-log step 4a: CHANGE line without -Id when user-visible behaviour shifted [branch: DEBUG-v001]
2026-05-14 18:22:08
.claude/commands/skill-fix-release.md
/skill-fix-release
Add step 13a: write one FIX entry per cherry-picked spec to functionality log [branch: DEBUG-v001]
2026-05-14 18:22:08
.claude/commands/skill-release.md
/skill-release
Add step 12a: sanity check that every spec in plateau has at least one functionality-log entry; surface misses in final report [branch: DEBUG-v001]
2026-05-14 18:30:32
PLAN/S0187_nolegal-youtube-extraction-recovery.md
spec-all
Pipeline Blocked: S0187 (deferred to S0190 Phase D Verified) [branch: DEBUG-v001]
2026-05-14 18:33:17
PLAN/S0181_threads_image_scraper_investigation.md
spec-all
Pipeline Verified: S0181 (research-only, findings consumed by S0197) [branch: DEBUG-v001]
2026-05-14 18:35:01
PLAN/S0174_nolegal-ytdlp-universal-extractor.md
spec-all
Pipeline Blocked: S0174 (deferred to S0186/S0187/S0190/S0197) [branch: DEBUG-v001]
2026-05-14 18:39:31
PLAN/S0071_use-trash-setting.md
spec-check
Audit S0071 -> Verified; PASS/WARN/FAIL 18/0/0 [branch: DEBUG-v001]
2026-05-14 18:43:42
store_assets/play_store_description_en.txt
S0135
Phase 01.1 EN ASO listing rewrite [branch: DEBUG-v001]
2026-05-14 18:43:46
store_assets/play_store_description_ru.txt
S0135
Phase 01.2 RU ASO listing rewrite [branch: DEBUG-v001]
2026-05-14 18:43:50
store_assets/play_store_description_uk.txt
S0135
Phase 01.3 UK ASO listing rewrite [branch: DEBUG-v001]
2026-05-14 18:43:53
store_assets/whats_new.txt
S0135
Phase 01.4 What’s New EN for May 2026 [branch: DEBUG-v001]
2026-05-14 18:43:57
store_assets/whats_new_ru.txt
S0135
Phase 01.4 What’s New RU for May 2026 [branch: DEBUG-v001]
2026-05-14 18:44:01
store_assets/whats_new_uk.txt
S0135
Phase 01.4 What’s New UK for May 2026 [branch: DEBUG-v001]
2026-05-14 18:44:53
store_assets/design_brief.md
S0135
Phase 02.1 add designer brief for store assets [branch: DEBUG-v001]
2026-05-14 18:48:03
app_v2/build.gradle.kts
S0135
Phase 03.1 add com.google.android.play:review-ktx:2.0.2 [branch: DEBUG-v001]
2026-05-14 18:48:07
app_v2/src/main/java/com/sza/fastmediasorter/data/local/preferences/ReviewEligibilityDataStore.kt
S0135
Phase 03.2 new ReviewEligibilityDataStore [branch: DEBUG-v001]
2026-05-14 18:48:11
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RecordSortSuccessUseCase.kt
S0135
Phase 03.3 new RecordSortSuccessUseCase [branch: DEBUG-v001]
2026-05-14 18:51:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/ReviewRequestManager.kt
S0135
Phase 04.1 new ReviewRequestManager [branch: DEBUG-v001]
2026-05-14 18:51:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
S0135
Phase 04.2 add onSortOperationSuccess callback + Move/Copy success call sites [branch: DEBUG-v001]
2026-05-14 18:52:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0135
Phase 04.3 inject reviewRequestManager + override onSortOperationSuccess in FileOperationCallbacks [branch: DEBUG-v001]
2026-05-14 18:52:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0135
Phase 04.3 Hilt inject ReviewRequestManager + pass to initializer [branch: DEBUG-v001]
2026-05-14 18:52:10
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RecordSortSuccessUseCase.kt
S0135
Phase 04.1 add markReviewShown() delegator [branch: DEBUG-v001]
2026-05-14 18:55:16
store_assets/PLAY_CONSOLE_CHECKLIST.md
S0135
Phase 05.2 Play Console operator checklist [branch: DEBUG-v001]
2026-05-14 18:55:20
PLAN/S0135_play-store-listing-optimization.md
S0135
Phase 05.3 resolve open questions §6.1, §6.5; defer §6.2-§6.4 [branch: DEBUG-v001]
2026-05-14 18:55:24
dev/CATALOG/app_v2.md
S0135
Phase 05.1 catalog: add ReviewEligibilityDataStore, RecordSortSuccessUseCase, ReviewRequestManager [branch: DEBUG-v001]
2026-05-14 18:56:30
PLAN/spec-catalog.jsonl
spec-next
Session: 5 processed (2 verified, 2 blocked, 1 implemented) [branch: DEBUG-v001]
2026-05-14 19:23:17
PLAN/S0135_play-store-listing-optimization.md
spec-check
Audit S0135 -> Verified; PASS/WARN/FAIL 11/0/0; MANUAL 7 [branch: DEBUG-v001]
2026-05-14 19:23:55
PLAN/S0135_play-store-listing-optimization.md
spec-all
Pipeline Verified: S0135 [branch: DEBUG-v001]
2026-05-14 19:25:59
PLAN/S0140_extend-market-url-coverage.md
spec-all
Pipeline Blocked: S0140 - research items 6.1/6.2/6.3 require real-world SPA smoke test [branch: DEBUG-v001]
2026-05-14 19:27:18
PLAN/S0125_settings-activity-revision.md
spec-all
Pipeline Blocked: S0125 - F1 auto-approve done; F2 deferred (11 open UX design items in section 6) [branch: DEBUG-v001]
2026-05-14 19:29:19
PLAN/S0188_slideshow-stop-on-resource-unavailable.md
spec-all
Pipeline Incomplete: S0188 - F3 implementation deferred to focused session (1303 LOC PlayerActivity + 1082 LOC PlayerManagerInitializer + new manager) [branch: DEBUG-v001]
2026-05-14 19:30:59
PLAN/S0176_nolegal-session-context-etld-fix.md
spec-all
Pipeline Partial: S0176 - WARN line budget on LinkAutoDownloadCoordinator (626 LOC) requires separate extraction ticket [branch: DEBUG-v001]
2026-05-14 19:32:19
PLAN/S0168_bugfix-video-playback-stuck-buffering-no-feedback.md
spec-check
Audit S0168 -> Verified; PASS/WARN/FAIL 6/0/0; MANUAL 1 [branch: DEBUG-v001]
2026-05-14 19:32:22
PLAN/S0168_bugfix-video-playback-stuck-buffering-no-feedback.md
spec-all
Pipeline Verified: S0168 [branch: DEBUG-v001]
2026-05-14 19:33:31
PLAN/spec-catalog.jsonl
spec-next
Batch defer: S0200, S0189, S0184, S0185, S0196, S0192, S0156, S0002, S0046, S0075, S0082 - substantial F2/F3 work requiring focused sessions [branch: DEBUG-v001]
2026-05-14 19:34:35
PLAN/S0149_enh-sftp-permission-denied-message.md
spec-all
Pipeline Verified: S0149 [branch: DEBUG-v001]
2026-05-14 19:35:44
PLAN/S0167_bugfix-cover-art-search-cancelled-as-error.md
spec-all
Pipeline Verified: S0167 [branch: DEBUG-v001]
2026-05-14 19:36:21
PLAN/S0169_bugfix-audio-metadata-retriever-smb-excessive-warnings.md
spec-all
Pipeline Verified: S0169 [branch: DEBUG-v001]
2026-05-14 19:43:25
PLAN/S0199_vr-render-pseudo-package-cleanup.md
spec-all
Pipeline Verified: S0199 (standardDebug PASS 29s; vrDebug PASS 1m35s; catalog reconciled) [branch: DEBUG-v001]
2026-05-14 19:43:44
PLAN/spec-catalog.jsonl
spec-next
Session: 12 processed, 5 verified (S0135 S0168 S0149 S0167 S0169 S0199), 6 blocked/deferred (S0140 S0125 S0188 S0176 + 11 batch defer to focused sessions) [branch: DEBUG-v001]
2026-05-14 20:24:34
app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt
S0183
Switch ACTION_INSTALL_PACKAGE -> ACTION_VIEW (former deprecated since API 25, no handler on Android 14+) [branch: DEBUG-v001]
2026-05-14 20:29:09
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt,app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
S0197
Remove Timber.d S0197 verification tags as S0197 reopens to Tactical (carousel dedup defect from device test) [branch: DEBUG-v001]
2026-05-14 20:29:15
PLAN/S0197_threads-ig-data-sjs-extractor.md
S0197
Reopen S0197 from BlockNeedUserTest to Tactical, priority 70 -> 75; document carousel-dedup defect (12 saves, 6-8 unique) seen on threads device test 2026-05-14 [branch: DEBUG-v001]
2026-05-14 20:29:16
PLAN/S0202_link-share-background-survival.md
S0202
Create strategic spec S0202: link share download must survive backgrounding (silent abort on threads/IG dynamic-extractor when user returns to source app mid-analysis) [branch: DEBUG-v001]
2026-05-14 20:31:57
PLAN/S0202_link-share-background-survival.md
spec-all
F1: strategic spec approved (S0202) [branch: DEBUG-v001]
2026-05-14 20:41:46
PLAN/S0202_link-share-background-survival/INDEX.md
spec-tech
Create tactical plan for S0202 (5 phases) [branch: DEBUG-v001]
2026-05-14 20:41:50
PLAN/S0202_link-share-background-survival/PHASE_01__worker-single-mode-foreground.md
spec-tech
Phase 01: worker-single-mode-foreground [branch: DEBUG-v001]
2026-05-14 20:41:54
PLAN/S0202_link-share-background-survival/PHASE_02__activity-enqueue-observe-watchdog.md
spec-tech
Phase 02: activity-enqueue-observe-watchdog [branch: DEBUG-v001]
2026-05-14 20:41:58
PLAN/S0202_link-share-background-survival/PHASE_03__cancel-routing-dedup.md
spec-tech
Phase 03: cancel-routing-dedup [branch: DEBUG-v001]
2026-05-14 20:42:02
PLAN/S0202_link-share-background-survival/PHASE_04__result-return-on-resume.md
spec-tech
Phase 04: result-return-on-resume [branch: DEBUG-v001]
2026-05-14 20:42:05
PLAN/S0202_link-share-background-survival/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-14 20:42:09
PLAN/S0202_link-share-background-survival.md
spec-tech
Status -> Tactical [branch: DEBUG-v001]
2026-05-14 20:44:08
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadProgressCodec.kt
S0202
Phase 01 Step 01.1: new codec for ProgressState <-> WorkData wire format [branch: DEBUG-v001]
2026-05-14 20:45:55
app_v2/src/main/res/values/strings.xml
S0202
Phase 01 Step 01.2: 4 new keys for foreground notification (probing/analyzing/downloading_pct/cancel) [branch: DEBUG-v001]
2026-05-14 20:45:59
app_v2/src/main/res/values-ru/strings.xml
S0202
Phase 01 Step 01.2: 4 new keys (RU) [branch: DEBUG-v001]
2026-05-14 20:46:03
app_v2/src/main/res/values-uk/strings.xml
S0202
Phase 01 Step 01.2: 4 new keys (UK) [branch: DEBUG-v001]
2026-05-14 20:50:53
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
S0202
Phase 01 Steps 01.4-01.7: getForegroundInfo + setForeground for single-URL mode + progressCallbacks/updateNotification + cancel action + S0202 debug tag [branch: DEBUG-v001]
2026-05-14 20:59:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
S0202
Phase 02: refactor processLinkAutoDownload to enqueue+observe via WorkManager + 4s watchdog + handleNoMediaFoundEscalation [branch: DEBUG-v001]
2026-05-14 20:59:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadProgressDialog.kt
S0202
Phase 02 Step 02.4: guard update() against pre-show observer emissions [branch: DEBUG-v001]
2026-05-14 21:04:00
app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkDownloadWriter.kt
S0202
Phase 03 Step 03.2: atomic renameTo on legacy <Q path with copy fallback [branch: DEBUG-v001]
2026-05-14 21:09:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ShareDownloadResultBus.kt
S0202
Phase 04 Step 04.1: new ShareDownloadResultBus singleton (worker -> activity bridge) [branch: DEBUG-v001]
2026-05-14 21:09:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0202
Phase 04 Step 04.3-04.4: bus collector + result presenter + S0202 debug tag [branch: DEBUG-v001]
2026-05-14 21:09:08
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
S0202
Phase 04 Step 04.2: inject ShareDownloadResultBus + emit terminal result on completion [branch: DEBUG-v001]
2026-05-14 21:13:44
PLAN/S0202_link-share-background-survival.md
spec-all
Pipeline BlockNeedUserTest: S0202 (5 phases done, 4 builds PASS, 3 debug tags inserted, awaits on-device test) [branch: DEBUG-v001]
2026-05-14 21:48:41
app_v2/src/vr/java/com/sza/fastmediasorter/vr/capture/VrBrowsePassthroughCaptureManager.kt
noLegal/vr
Fix IllegalStateException crash on passthrough capture: VrPermissionBridgeFragment was declared ‘private’ (package-private in bytecode); FragmentTransaction.doAddOp requires a public class for instance-state recreation. Removed the ‘private’ modifier so the top-level class becomes public. [branch: DEBUG-v001]
2026-05-14 22:09:50
docs/WHATS_NEW.md
WHATS_NEW
Fix-release v2.60.5142.201 for S0203: vr-permission-bridge-fragment-public [branch: DEBUG-v001]
2026-05-14 22:22:47
PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar.md
spec
Add strategic spec S0204 for bugfix-toolbar-hidden-behind-statusbar [branch: DEBUG-v001]
2026-05-14 22:37:07
PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar/INDEX.md
spec-tech
Create tactical plan for S0204 [branch: DEBUG-v001]
2026-05-14 22:37:07
PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar/PHASE_01__statusbar-height-utility.md
spec-tech
Phase 01: statusbar-height-utility [branch: DEBUG-v001]
2026-05-14 22:37:08
PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar/PHASE_02__settings-activity-insets.md
spec-tech
Phase 02: settings-activity-insets [branch: DEBUG-v001]
2026-05-14 22:37:08
PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar/PHASE_03__secondary-activities-insets.md
spec-tech
Phase 03: secondary-activities-insets [branch: DEBUG-v001]
2026-05-14 22:37:08
PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-14 22:37:08
PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar.md
spec-tech
Status -> Tactical [branch: DEBUG-v001]
2026-05-14 22:38:27
app_v2/src/main/java/com/sza/fastmediasorter/utils/ViewExtensions.kt
spec-dev
S0204 Phase 01: add WindowInsetsCompat.getStatusBarHeightSafe with OEM fallback [branch: DEBUG-v001]
2026-05-14 22:43:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
S0204
Replaced raw status bar inset reads with safe fallback and added on-device verification tag [branch: DEBUG-v001]
2026-05-14 22:43:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt
S0204
Applied safe status bar height fallback for add-resource toolbar and added on-device verification tag [branch: DEBUG-v001]
2026-05-14 22:43:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorActivity.kt
S0204
Applied safe status bar height fallback for resource editor toolbar and added on-device verification tag [branch: DEBUG-v001]
2026-05-14 22:43:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEdgeToEdgeHelper.kt
S0204
Applied safe status bar height fallback for browse top bar and added on-device verification tag [branch: DEBUG-v001]
2026-05-14 22:44:07
dev/CATALOG/app_v2.jsonl
S0204
Regenerated app_v2 catalog after S0204 toolbar inset fixes [branch: DEBUG-v001]
2026-05-14 22:44:07
dev/CATALOG/app_v2.md
S0204
Rendered app_v2 catalog after S0204 toolbar inset fixes [branch: DEBUG-v001]
2026-05-14 22:46:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
S0204 Phase 02
Replace statusBar.top with getStatusBarHeightSafe in applyWindowInsets; add Timber.d tag [branch: DEBUG-v001]
2026-05-14 22:48:39
app_v2/src/main/java/com/sza/fastmediasorter/data/link/StructuredMediaSniffer.kt
StructuredMediaSniffer
S0197 Phase 05: deduplicate embedded-JSON carousel candidates by filename (Meta CDN asset key) instead of raw URL to fix 12-duplicate-files-per-carousel defect [branch: DEBUG-v001]
2026-05-14 22:48:41
PLAN/S0197_threads-ig-data-sjs-extractor/PHASE_05__carousel-dedup.md
spec-all
S0197 Phase 05 tactical plan: carousel-dedup [branch: DEBUG-v001]
2026-05-14 22:52:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt
S0204 Phase 03
Replace statusBar.top with getStatusBarHeightSafe(activity.resources) in applyEdgeToEdgeInsets; add Timber.d tag [branch: DEBUG-v001]
2026-05-14 22:52:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorActivity.kt
S0204 Phase 03
Replace statusBar.top with getStatusBarHeightSafe(resources) in setupViews insets listener; add Timber.d tag [branch: DEBUG-v001]
2026-05-14 22:52:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt
GeneralSettingsLogHelper
Added compact device summary under settings version info [branch: DEBUG-v001]
2026-05-14 22:52:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEdgeToEdgeHelper.kt
S0204 Phase 03
Replace statusBar.top with getStatusBarHeightSafe(binding.root.resources) in apply() insets listener; add Timber.d tag [branch: DEBUG-v001]
2026-05-14 22:55:51
PLAN/S0180_standalone-player-file-info-button.md
spec-arc
Archive S0180 (standalone-player-file-info-button) -> temp/done/ [branch: DEBUG-v001]
2026-05-14 22:55:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
spec-arc
Remove stale S0180 Timber.d tags (spec archived) [branch: DEBUG-v001]
2026-05-14 22:58:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SlideshowResourceAvailabilityManager.kt
SlideshowResourceAvailabilityManager
S0188 insert BlockNeedUserTest debug tags at 4 flow entry points [branch: DEBUG-v001]
2026-05-14 23:21:29
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/NetworkLifecycleBootstrapper.kt
NetworkLifecycleBootstrapper
Fix IllegalStateException: dispatch addObserver to main thread via Handler+CountDownLatch when ensureInitialized called from background thread [branch: DEBUG-v001]
2026-05-14 23:48:07
PLAN/S0194_lazy-hilt-singletons.md
spec-check
Audit S0194 -> Verified; PASS 5 / WARN 0 / FAIL 0; Timber.d tag removed from FastMediaSorterApp.kt [branch: DEBUG-v001]
2026-05-14 23:50:58
PLAN/S0195_network-first-use-trigger.md
spec-check
Audit S0195 -> Verified; PASS 8 / WARN 0 / FAIL 0; 2 Timber.d tags removed (FastMediaSorterApp + NetworkLifecycleBootstrapper) [branch: DEBUG-v001]
2026-05-14 23:52:59
PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar.md
spec-check
Audit S0204 -> Verified; PASS 6 / WARN 0 / FAIL 0; 4 Timber.d tags removed (AddResourceFormManager, BrowseEdgeToEdgeHelper, ResourceEditorActivity, SettingsActivity) [branch: DEBUG-v001]
2026-05-14 23:55:23
PLAN/S0188_slideshow-stop-on-resource-unavailable.md
spec-check
Audit S0188 -> Verified; PASS 4 / WARN 1 / FAIL 0; WARN: INDEX Status fixed In Progress->Done; 4 Timber.d tags removed (SlideshowResourceAvailabilityManager) [branch: DEBUG-v001]
2026-05-15 00:04:43
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0205
Add CancellationException re-throw and split IOException to W-level in readFileBytes catch blocks [branch: DEBUG-v001]
2026-05-15 00:04:47
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
S0205
Add ensureActive() before S0147 dead-transport retry to skip reconnect on intentional cancel [branch: DEBUG-v001]
2026-05-15 00:05:46
PLAN/S0205_bugfix-sftp-cancel-teardown-loglevel.md
spec
Add primitive spec S0205 bugfix-sftp-cancel-teardown-loglevel [branch: DEBUG-v001]
2026-05-15 00:17:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBigButtonsModeManager.kt
PlayerBigButtonsModeManager
Fix big-buttons overflow menu collapsing to icon-only width: measure widest adapter row explicitly via UNSPECIFIED MeasureSpec and cap popup width at 85% of screen width; force TextView maxLines=1 [branch: DEBUG-v001]
2026-05-15 00:33:06
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpCommandUtils.kt
app_v2
Add safeCompletePendingCommand helper; convert Apache Commons Net internal NPE (control-channel closed by server mid-transfer) into IOException with a warning log instead of a 25-line stack. Wired into FtpConnectedOperations.readFileBytes/readFileBytesRange (4 sites) and FtpStandaloneOperations.readFileBytes (2 sites). [branch: DEBUG-v001]
2026-05-15 00:40:01
PLAN/S0206_ftp-true-partial-read.md
spec
Add strategic spec S0206 (ad-hoc) for true FTP partial-read with client-initiated transfer abort; closes the root cause behind the Apache Commons Net completePendingCommand NPE on large MP3 metadata reads [branch: DEBUG-v001]
2026-05-15 00:40:58
PLAN/S0206_ftp-true-partial-read.md
spec
Add strategic spec S0206 (ad-hoc) - true byte-bounded FTP partial-read with client-side ABOR to cut bandwidth waste and pre-empt server-side control-channel timeouts on large audio metadata reads. [branch: DEBUG-v001]
2026-05-15 00:47:55
PLAN/S0206_ftp-true-partial-read/INDEX.md
spec-tech
Create tactical plan for S0206 (3 phases: bounded-read-helper, wire-ftp-wrappers, docs-catalog-cleanup). [branch: DEBUG-v001]
2026-05-15 00:47:55
PLAN/S0206_ftp-true-partial-read/PHASE_01__bounded-read-helper.md
spec-tech
S0206 Phase 01: bounded-read-helper (add readBoundedAndAbort + result type + buffer constant in FtpCommandUtils). [branch: DEBUG-v001]
2026-05-15 00:47:55
PLAN/S0206_ftp-true-partial-read/PHASE_02__wire-ftp-wrappers.md
spec-tech
S0206 Phase 02: wire-ftp-wrappers (migrate 4 bounded-readFileBytes sites in FtpConnectedOperations + FtpStandaloneOperations to the helper). [branch: DEBUG-v001]
2026-05-15 00:47:55
PLAN/S0206_ftp-true-partial-read/PHASE_03__docs-catalog-cleanup.md
spec-tech
S0206 Phase 03: docs-catalog-cleanup (catalog regen, dev log, functionality log). [branch: DEBUG-v001]
2026-05-15 00:47:55
PLAN/S0206_ftp-true-partial-read.md
spec-tech
S0206 strategic status Approved -> Tactical; linked to tactical plan. [branch: DEBUG-v001]
2026-05-15 00:59:23
PLAN/S0207_radical-memory-reduction.md
spec
Add strategic spec S0207 for radical memory reduction (toast warning_low_memory_playback on cold start + first MP3) [branch: DEBUG-v001]
2026-05-15 01:03:41
PLAN/S0208_player-big-buttons-tuning.md
spec
Add strategic spec S0208 for player big buttons mode tuning on narrow/medium screens (ad-hoc, refines S0158) [branch: DEBUG-v001]
2026-05-15 01:06:20
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
Replace Permissions card with TonalButton, move after Debug section (portrait) [branch: DEBUG-v001]
2026-05-15 01:06:20
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general (landscape)
Replace Permissions card with TonalButton, move after Debug section (landscape) [branch: DEBUG-v001]
2026-05-15 01:06:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsPermissionsHelper.kt
GeneralSettingsPermissionsHelper
Clear updatePermissionButtonsState body - dead permission buttons removed from layout [branch: DEBUG-v001]
2026-05-15 01:06:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
GeneralSettingsViewSetupHelper
Remove dead permission button listener wiring (buttons removed from layout) [branch: DEBUG-v001]
2026-05-15 01:06:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt
GeneralSettingsSectionsHelper
Remove KEY_PERMISSIONS_EXPANDED and Permissions bindSectionToggle - section no longer collapsible [branch: DEBUG-v001]
2026-05-15 01:06:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
Update permissions navigation click target: headerPermissions -> btnPermissionsManagement [branch: DEBUG-v001]
2026-05-15 01:08:20
PLAN/S0207_radical-memory-reduction/INDEX.md
spec-tech
Create tactical plan for S0207 radical-memory-reduction (8 phases) [branch: DEBUG-v001]
2026-05-15 01:08:20
PLAN/S0207_radical-memory-reduction/PHASE_01__memory-instrumentation.md
spec-tech
Phase 01: memory instrumentation (MemoryProbe + 6 checkpoints) [branch: DEBUG-v001]
2026-05-15 01:08:20
PLAN/S0207_radical-memory-reduction/PHASE_02__memory-tier-reclassification.md
spec-tech
Phase 02: MemoryTier heap-limit dominant predicate [branch: DEBUG-v001]
2026-05-15 01:08:20
PLAN/S0207_radical-memory-reduction/PHASE_03__memory-profile-abstraction.md
spec-tech
Phase 03: scenario-aware memory profile coordinator + Glide consumer [branch: DEBUG-v001]
2026-05-15 01:08:20
PLAN/S0207_radical-memory-reduction/PHASE_04__adaptive-rgb565-pressure.md
spec-tech
Phase 04: NativePressureMonitor + adaptive RGB565 fallback [branch: DEBUG-v001]
2026-05-15 01:08:20
PLAN/S0207_radical-memory-reduction/PHASE_05__small-allocations.md
spec-tech
Phase 05: bitmap icon dedup + audio buffer profile [branch: DEBUG-v001]
2026-05-15 01:08:21
PLAN/S0207_radical-memory-reduction/PHASE_06__startup-workers-defer.md
spec-tech
Phase 06: defer non-critical startup workers via DeferredStartupWorker [branch: DEBUG-v001]
2026-05-15 01:08:21
PLAN/S0207_radical-memory-reduction/PHASE_07__network-idle-disconnect.md
spec-tech
Phase 07: IdleDisconnectPolicy + SFTP/SMB/FTP wiring [branch: DEBUG-v001]
2026-05-15 01:08:21
PLAN/S0207_radical-memory-reduction/PHASE_08__docs-catalog-cleanup.md
spec-tech
Phase 08: catalog regen + dev log audit + acceptance measurement [branch: DEBUG-v001]
2026-05-15 01:08:21
PLAN/S0207_radical-memory-reduction.md
spec-tech
S0207 Status -> Tactical [branch: DEBUG-v001]
2026-05-15 01:26:31
PLAN/S0208_player-big-buttons-tuning/INDEX.md
spec-tech
Create tactical plan for S0208 [branch: DEBUG-v001]
2026-05-15 01:26:35
PLAN/S0208_player-big-buttons-tuning/PHASE_01__dimens-resources.md
spec-tech
Phase 01: dimens-resources [branch: DEBUG-v001]
2026-05-15 01:26:39
PLAN/S0208_player-big-buttons-tuning/PHASE_02__dynamic-slot-count.md
spec-tech
Phase 02: dynamic-slot-count [branch: DEBUG-v001]
2026-05-15 01:26:43
PLAN/S0208_player-big-buttons-tuning/PHASE_03__manager-height-layout.md
spec-tech
Phase 03: manager-height-layout [branch: DEBUG-v001]
2026-05-15 01:26:48
PLAN/S0208_player-big-buttons-tuning/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup [branch: DEBUG-v001]
2026-05-15 01:26:52
PLAN/S0208_player-big-buttons-tuning.md
spec-tech
Status -> Tactical (S0208) [branch: DEBUG-v001]
2026-05-15 01:27:29
app_v2/src/main/res/values/dimens.xml
S0208
Phase 01: add big-buttons dimens (height/min-slot/label-size) [branch: DEBUG-v001]
2026-05-15 01:30:29
app_v2/src/main/res/values/dimens.xml
S0208
Phase 01: add player_big_button_height (100dp), min_slot_width (50dp), top_label_text_size (10sp) [branch: DEBUG-v001]
2026-05-15 01:30:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0208
Phase 02: dynamic top-panel slot count via resolveBigButtonsTopPanelSlotCount [branch: DEBUG-v001]
2026-05-15 01:39:18
app_v2/src/main/res/values/strings.xml
Big Buttons Mode strings
Updated summary and tooltip to describe adaptive 5-10 button layout [branch: DEBUG-v001]
2026-05-15 01:39:18
app_v2/src/main/res/values-ru/strings.xml
Big Buttons Mode strings
Updated summary and tooltip to describe adaptive 5-10 button layout [branch: DEBUG-v001]
2026-05-15 01:39:19
app_v2/src/main/res/values-uk/strings.xml
Big Buttons Mode strings
Updated summary and tooltip to describe adaptive 5-10 button layout [branch: DEBUG-v001]
2026-05-15 01:51:31
docs/WHATS_NEW.md
WHATS_NEW
Release notes for v2.60.5150.150 - plateau merge from DEBUG-v001 [branch: DEBUG-v001]
2026-05-15 02:01:59
PLAN/S0203_vr-permission-bridge-fragment-public.md
spec-check
Audit S0203 -> Verified; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryCheckpoint.kt
spec-dev
S0207 Phase 01: New: MemoryCheckpoint enum (6 lifecycle anchors) [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProbe.kt
spec-dev
S0207 Phase 01: New: MemoryProbe interface (unified memory observability channel) [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProbeImpl.kt
spec-dev
S0207 Phase 01: New: MemoryProbeImpl with canonical MEM_PROBE log format [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/di/MemoryProbeModule.kt
spec-dev
S0207 Phase 01: New: Hilt @Binds module for MemoryProbe [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
spec-dev
S0207 Phase 01: Wire APP_STARTED memory probe at end of onCreate [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
spec-dev
S0207 Phase 01: Wire MAIN_DRAWN memory probe via binding.root.post [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
spec-dev
S0207 Phase 01: Wire BROWSE_OPENED memory probe at end of onCreate [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
spec-dev
S0207 Phase 01: Wire PRE_PLAY and AFTER_STATE_READY memory probes; remove logMemoryStats import [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt
spec-dev
S0207 Phase 01: Remove deprecated logMemoryStats extension (replaced by MemoryProbe) [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-dev
S0207 Phase 01: Inject MemoryProbe for downstream VideoPlayerManager [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt
spec-dev
S0207 Phase 01: Pass MemoryProbe through VideoPlayerManager factory [branch: DEBUG-v002]
2026-05-15 02:18:44
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VideoPlayerManagerStateEndedTest.kt
spec-dev
S0207 Phase 01: Add memoryProbe mockk to VideoPlayerManager test constructor [branch: DEBUG-v002]
2026-05-15 02:20:36
PLAN/S0207_radical-memory-reduction/PHASE_01__memory-instrumentation.md
spec-dev
S0207 Phase 01: 5/6 steps done; THUMBNAILS_LOADED deferred; status In Progress [branch: DEBUG-v002]
2026-05-15 02:20:36
PLAN/S0207_radical-memory-reduction/INDEX.md
spec-dev
S0207: Phase 01 partial; one probe deferred; build PASS [branch: DEBUG-v002]
2026-05-15 02:20:36
dev/CATALOG/app_v2.jsonl
spec-dev
S0207 Phase 01: catalog rescan after new core/memory module + di binding [branch: DEBUG-v002]
2026-05-15 02:25:57
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpCommandUtils.kt
spec-dev
S0206 Phase 01: add FTP_BOUNDED_READ_BUFFER_BYTES, FtpBoundedReadResult, readBoundedAndAbort helper [branch: DEBUG-v002]
2026-05-15 02:25:57
PLAN/S0206_ftp-true-partial-read/PHASE_01__bounded-read-helper.md
spec-dev
S0206 Phase 01: 4/4 done; build PASS [branch: DEBUG-v002]
2026-05-15 02:25:57
PLAN/S0206_ftp-true-partial-read/INDEX.md
spec-dev
S0206: Phase 01 done; status In Progress [branch: DEBUG-v002]
2026-05-15 02:26:28
PLAN/spec-catalog.jsonl
spec-next
Session: 3 processed, 1 verified (S0203), 2 advanced (S0207 Phase01 5/6+1deferred, S0206 Phase01 4/4 done) [branch: DEBUG-v002]
2026-05-15 03:01:09
scripts/builders/build-nolegal-debug.ps1, build-nolegal-release.ps1, build-nolegal-device.ps1
noLegal builders
Pass -Pchaquopy.enabled=true to gradle so Chaquopy plugin always applies for noLegal flavor; previously relied on local.properties (gitignored, frequently commented out) which caused ‘Unresolved reference chaquo/Python/PyObject/callAttr’ compile errors when the line was absent [branch: DEBUG-v002]
2026-05-15 11:57:25
PLAN/S0207_radical-memory-reduction.md
spec-update
S0207: applied 7-agent research findings - SSHJ→JSch retarget; new §6 items 7-9; §5.8 pillar 8 extension; §7 Cast SDK risk row [branch: DEBUG-v002]
2026-05-15 11:57:45
PLAN/S0207_radical-memory-reduction/INDEX.md
spec-update
S0207: updated INDEX research items 1-9 with new pointers; phase counters bumped [branch: DEBUG-v002]
2026-05-15 11:57:46
PLAN/S0207_radical-memory-reduction/PHASE_02__memory-tier-reclassification.md
spec-update
S0207 Phase 02: boundary fix maxHeapMb < 512 -> <= 512 for 512-exact device classification [branch: DEBUG-v002]
2026-05-15 11:57:46
PLAN/S0207_radical-memory-reduction/PHASE_03__memory-profile-abstraction.md
spec-update
S0207 Phase 03: added Step 03.8 VR/noLegal MemoryProfileCoordinator override pinning useRgb565=false [branch: DEBUG-v002]
2026-05-15 11:57:46
PLAN/S0207_radical-memory-reduction/PHASE_04__adaptive-rgb565-pressure.md
spec-update
S0207 Phase 04: expanded scope with MemoryPressureDecodeFormatResolver covering 9 duplicated branches + 3 bypass decoders + AdapterThumbnailLoader [branch: DEBUG-v002]
2026-05-15 11:57:46
PLAN/S0207_radical-memory-reduction/PHASE_05__small-allocations.md
spec-update
S0207 Phase 05: added Step 05.4 to shrink ExtensionThumbnailGenerator/BinaryFileThumbnailGenerator LRUs and switch to RGB_565 [branch: DEBUG-v002]
2026-05-15 11:57:47
PLAN/S0207_radical-memory-reduction/PHASE_06__startup-workers-defer.md
spec-update
S0207 Phase 06: added Step 06.4 FirstFrameSignal + generalize delay(2000); move D10/D17 off main thread [branch: DEBUG-v002]
2026-05-15 11:57:47
PLAN/S0207_radical-memory-reduction/PHASE_07__network-idle-disconnect.md
spec-update
S0207 Phase 07: SSHJ->JSch retarget; Step 07.3 expanded with pool-level periodic sweep; removed misleading System.gc() in per-session callback [branch: DEBUG-v002]
2026-05-15 12:11:08
.claude/commands/spec.md
skill
Make /spec permissive: accept free-form feature description as ad-hoc input, derive slug deterministically, refuse only on empty/help-token input. Closes a UX defect where the skill demanded strict format and rejected natural language. [branch: DEBUG-v002]
2026-05-15 12:18:23
PLAN/S0209_deletion-trash-overhaul.md
spec
Add strategic spec S0209 for deletion-trash-overhaul (full deletion refactor: name sync, single MediaStore impl, periodic-only TTL) [branch: DEBUG-v002]
2026-05-15 12:21:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterFileInfoFormatter.kt
browse-list
S0210: append file size segment to VIDEO/IMAGE/GIF/AUDIO-with-tags info row [branch: DEBUG-v002]
2026-05-15 12:24:27
PLAN/S0209_deletion-trash-overhaul.md
spec
Update S0209 - Research items #1 and #4 closed; trash leak and shared-storage soft-delete breakage confirmed by code; priority 75 -> 85 [branch: DEBUG-v002]
2026-05-15 12:27:45
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
fix
Suppress reauth Sign-in CTA in worker notification when SocialPreviewOnly result already had a valid session - breaks the WebView reauth loop observed in fastmediasorter_20260515_115750.log on Instagram carousel slot URLs [branch: DEBUG-v002]
2026-05-15 12:27:46
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention.md
spec
Add strategic spec S0211 - WebView auth account dedup and reauth loop prevention [branch: DEBUG-v002]
2026-05-15 12:46:49
PLAN/S0209_deletion-trash-overhaul/INDEX.md
spec-tech
Create tactical plan for S0209 (7 phases) [branch: DEBUG-v002]
2026-05-15 12:46:52
PLAN/S0209_deletion-trash-overhaul/PHASE_01__trash-naming-contract.md
spec-tech
Phase 01: trash-naming-contract [branch: DEBUG-v002]
2026-05-15 12:46:55
PLAN/S0209_deletion-trash-overhaul/PHASE_02__switch-all-callers-to-contract.md
spec-tech
Phase 02: switch-all-callers-to-contract [branch: DEBUG-v002]
2026-05-15 12:46:58
PLAN/S0209_deletion-trash-overhaul/PHASE_03__remove-forced-reload-cleanup.md
spec-tech
Phase 03: remove-forced-reload-cleanup [branch: DEBUG-v002]
2026-05-15 12:47:01
PLAN/S0209_deletion-trash-overhaul/PHASE_04__manage-media-fallback.md
spec-tech
Phase 04: manage-media-fallback [branch: DEBUG-v002]
2026-05-15 12:47:04
PLAN/S0209_deletion-trash-overhaul/PHASE_05__consolidate-mediastore-delete.md
spec-tech
Phase 05: consolidate-mediastore-delete [branch: DEBUG-v002]
2026-05-15 12:47:07
PLAN/S0209_deletion-trash-overhaul/PHASE_06__restore-and-clear-trash-button.md
spec-tech
Phase 06: restore-and-clear-trash-button [branch: DEBUG-v002]
2026-05-15 12:47:10
PLAN/S0209_deletion-trash-overhaul/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup [branch: DEBUG-v002]
2026-05-15 12:47:13
PLAN/S0209_deletion-trash-overhaul.md
spec-tech
S0209 Status -> Tactical; research items #2/#3 resolved [branch: DEBUG-v002]
2026-05-15 12:48:22
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/trash/TrashFolderContract.kt
phase-01
S0209 Step 01.1: introduce TrashFolderContract as single source of truth for trash naming [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction.md
spec-update
Refined S0207 strategic scope, blockers, and realistic Glide/runtime narrative [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction/INDEX.md
spec-update
Aligned S0207 tactical blockers, completion gate, and phase summaries with audit reality [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction/PHASE_01__memory-instrumentation.md
spec-update
Documented partial Phase 01 reality, deferred thumbnails probe, and remaining MEMORY_DEBUG gaps [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction/PHASE_02__memory-tier-reclassification.md
spec-update
Added boundary-focused test guidance for MemoryTier verification [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction/PHASE_03__memory-profile-abstraction.md
spec-update
Rewrote Phase 03 around startup Glide budget, runtime trim/clear, and single VR override reuse [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction/PHASE_05__small-allocations.md
spec-update
Preserved extension-text placeholder UX and added metadata/cache calibration guidance [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction/PHASE_06__startup-workers-defer.md
spec-update
Added startup single-shot test guidance for deferred worker orchestration [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction/PHASE_07__network-idle-disconnect.md
spec-update
Added SftpConnectionPool scope and idle-sweep verification guidance [branch: DEBUG-v002]
2026-05-15 12:52:13
PLAN/S0207_radical-memory-reduction/PHASE_08__docs-catalog-cleanup.md
spec-update
Aligned final acceptance with corrected flavor scope and updated catalog class list [branch: DEBUG-v002]
2026-05-15 13:39:35
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/trash/TrashFolderContractTest.kt
phase-01
S0209 Step 01.2: unit tests for TrashFolderContract round-trip [branch: DEBUG-v002]
2026-05-15 13:41:40
dev/CATALOG/app_v2.jsonl
phase-01
S0209 Step 01.3: catalog scan/render for new TrashFolderContract class [branch: DEBUG-v002]
2026-05-15 13:41:44
dev/CATALOG/app_v2.md
phase-01
S0209 Step 01.3: catalog render for new TrashFolderContract class [branch: DEBUG-v002]
2026-05-15 13:45:11
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/BaseFileOperationHandler.kt
phase-02
S0209 Step 02.1: switch soft-delete producer to TrashFolderContract; drop dead createTrashFolder helper [branch: DEBUG-v002]
2026-05-15 13:45:14
app_v2/src/main/java/com/sza/fastmediasorter/data/network/FtpFileOperationHandler.kt
phase-02
S0209 Step 02.1: drop dead createTrashFolder override (parent helper deleted) [branch: DEBUG-v002]
2026-05-15 13:46:17
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CleanupTrashFoldersUseCase.kt
phase-02
S0209 Step 02.2: rewrite cleaner on TrashFolderContract; recognize canonical and legacy layouts; remove empty container [branch: DEBUG-v002]
2026-05-15 13:46:51
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CleanupTrashUseCase.kt
phase-02
S0209 Step 02.3: delete unused CleanupTrashUseCase (zero callers, replaced by CleanupTrashFoldersUseCase) [branch: DEBUG-v002]
2026-05-15 13:47:29
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RestoreDeletedUseCase.kt
phase-02
S0209 Step 02.4: route trash path construction and snapshot parsing through TrashFolderContract [branch: DEBUG-v002]
2026-05-15 14:07:14
PLAN/S0125_settings-activity-revision.md
spec-update
S0125: integrated owner answers into Goals/Constraints/ADR-9..11/§11; rewrote §6 as Resolved + best-practice analysis (Q-1, Q0, Q1..Q11); BlockQuestions can be lifted by operator [branch: DEBUG-v002]
2026-05-15 14:08:06
PLAN/S0125_settings-activity-revision.md
spec-catalog
S0125: BlockQuestions -> Approved after all section-6 research items closed [branch: DEBUG-v002]
2026-05-15 14:18:11
PLAN/spec-catalog.jsonl,app_v2/src/main/java/com/sza/fastmediasorter/
spec-batch
S0172/S0205/S0202/S0137/S0154 verified+archived (Timber tags removed). S0182/S0197 marked as noLegal-only. [branch: DEBUG-v002]
2026-05-15 15:10:23
temp/S0196/01_surface_matrix.md
S0196 Phase 01 Step 01.1
Enumerate 9 target render-priority surfaces (PlayerActivity, StandalonePlayerActivity, VrPlayerActivity, BrowseActivity, SettingsActivity, ResourceTypeSelectorDialog, three cloud folder pickers) with host type, flavor coverage, primary content, secondary UI, and required measurement modes. [branch: DEBUG-v002]
2026-05-15 15:12:39
temp/S0196/01_render_hooks.md
S0196 Phase 01 Step 01.2
Inventory ViewStub, reportFullyDrawn, addIdleHandler, postFrameCallback, View.post across 9 target hosts. Confirm BaseActivity already defers setupViews via binding.root.post globally, lyricsViewerStub is the only ViewStub, reportFullyDrawn and idle handler unused project-wide. [branch: DEBUG-v002]
2026-05-15 15:14:18
temp/S0196/01_protocol.md
S0196 Phase 01 Step 01.3
Fix measurement protocol (reference device, reference build, cold/warm/cold-cache/warm-cache modes, raw artifact requirements, severity classification labels). No measurements collected, Phase 04 owns collection. [branch: DEBUG-v002]
2026-05-15 15:14:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRefreshManager.kt
phase-03
Removed forced local trash cleanup from reload and shutdown paths; periodic worker now owns automatic finalisation [branch: DEBUG-v002]
2026-05-15 15:14:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
phase-03
Updated shutdown cleanup wiring to use BrowseRefreshManager network-only background cleanup path [branch: DEBUG-v002]
2026-05-15 15:17:13
temp/S0196/02_player_hosts.md
S0196 Phase 02 Steps 02.1+02.2
Static audit of PlayerActivity (in-app: theme overlay, lifecycleManager.onCreate, initializeManagers, 6 inline setupXxx calls, root-post insets) and StandalonePlayerActivity (ACTION_VIEW/ACTION_SEND aliases, parseIncomingIntent, StandaloneViewManager). Earliest primary-content candidates per media type documented. [branch: DEBUG-v002]
2026-05-15 15:18:45
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/trash/TrashFolderContract.kt
phase-02
Added shared helpers for recognized trash path segments and path detection [branch: DEBUG-v002]
2026-05-15 15:18:45
app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt
phase-02
Switched local trash-directory filters to TrashFolderContract helpers [branch: DEBUG-v002]
2026-05-15 15:18:47
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt
phase-02
Reused TrashFolderContract path-segment helper for MediaStore trash filtering [branch: DEBUG-v002]
2026-05-15 15:18:47
app_v2/src/main/java/com/sza/fastmediasorter/data/network/helpers/SmbDirectoryScanner.kt
phase-02
Switched SMB trash-directory filters to TrashFolderContract helpers [branch: DEBUG-v002]
2026-05-15 15:18:48
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
phase-02
Switched SMB browse trash filtering to TrashFolderContract helpers [branch: DEBUG-v002]
2026-05-15 15:18:48
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpMediaScanner.kt
phase-02
Switched FTP trash-directory filters to TrashFolderContract helpers [branch: DEBUG-v002]
2026-05-15 15:18:49
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt
phase-02
Switched SFTP trash-directory filters to TrashFolderContract helpers [branch: DEBUG-v002]
2026-05-15 15:19:09
temp/S0196/02_vr_boundary.md
S0196 Phase 02 Step 02.3
VR boundary audit: VrPlayerActivity.onCreate flow (isXrRuntimeAvailable check, super.onCreate, STAGE_SETUP_VIEWS marker, VR manager-graph construction, OpenXR session-ready handoff in onResume). 2D pre-VR loading in S0196 scope, stereo render loop out of scope. [branch: DEBUG-v002]
2026-05-15 15:20:58
temp/S0196/02_player_prefetch.md
S0196 Phase 02 Step 02.4
Prefetch/auto-advance audit. prefetchNextAudio (post-STATE_READY, off-main, no first-frame competition), preloadNextPhoto in AudioSlideshowPhotoModeManager.enter() at line 98 identified as direct first-frame competitor with current photo’s Glide load (both Priority.HIGH). Slideshow auto-advance is timer-driven, not a first-frame competitor. [branch: DEBUG-v002]
2026-05-15 15:23:02
temp/S0196/03_browse_settings_pickers.md
S0196 Phase 03 Steps 03.1+03.2
Static audit of BrowseActivity (S0183 eager launcher registration, launcherManager/cameraCaptureManager/micRecordingManager construction in onCreate, BrowseManagerInitializer in setupViews, first-list-item bound via viewModel.state collector submitList) and SettingsActivity (minimal onCreate, setupViews with SettingsPagerAdapter, first visible page via ViewPager2 fragment attach). [branch: DEBUG-v002]
2026-05-15 15:24:06
temp/S0196/03_dialog_entrypoints.md
S0196 Phase 03 Step 03.3
ResourceTypeSelectorDialog reachability audit: 3 self-references, zero external callers project-wide. Confirmed dead-path code (production add-resource flow uses AddResourceActivity instead). Excluded from Phase 04 measurements. [branch: DEBUG-v002]
2026-05-15 15:25:39
temp/S0196/03_cloud_pickers.md
S0196 Phase 03 Step 03.4
Cloud folder picker comparison: GoogleDrive/Dropbox/OneDrive share BaseActivity-post-first-frame skeleton (setupViews → SUPPORT_CLOUD guard → toolbar wire → adapter attach → viewModel.loadFolders). Google Drive has extra reAuthLauncher that pre-empts first selectable item on token expiry. First selectable item bound via viewModel.state collector; loading shell exposes toolbar + checkboxes + empty RecyclerView. [branch: DEBUG-v002]
2026-05-15 15:26:20
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/LocalOperationStrategy.kt
phase-04
Blocked unsafe soft-delete fallback on shared storage without MANAGE_MEDIA and introduced TrashRenameUnavailableException [branch: DEBUG-v002]
2026-05-15 15:26:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt
phase-04
Extended FileOperationResult with soft-delete fallback paths for delete caveat handling [branch: DEBUG-v002]
2026-05-15 15:26:22
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/BaseFileOperationHandler.kt
phase-04
Fell back to hard delete when trash rename is unavailable and propagated a result-level caveat [branch: DEBUG-v002]
2026-05-15 15:26:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteManager.kt
phase-04
Surfaced a single trash-fallback caveat message and suppressed misleading undo for permanent-delete fallbacks [branch: DEBUG-v002]
2026-05-15 15:26:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDeleteUndoCoordinator.kt
phase-04
Surfaced the trash-fallback caveat in player delete flow and skipped undo for permanent-delete fallbacks [branch: DEBUG-v002]
2026-05-15 15:26:23
app_v2/src/main/res/values/strings.xml
phase-04
Added trash fallback warning and clarified Trash tooltip MANAGE_MEDIA dependency [branch: DEBUG-v002]
2026-05-15 15:26:25
app_v2/src/main/res/values-ru/strings.xml
phase-04
Added trash fallback warning and clarified Trash tooltip MANAGE_MEDIA dependency [branch: DEBUG-v002]
2026-05-15 15:26:25
app_v2/src/main/res/values-uk/strings.xml
phase-04
Added trash fallback warning and clarified Trash tooltip MANAGE_MEDIA dependency [branch: DEBUG-v002]
2026-05-15 15:26:27
PLAN/S0196_activity-render-priority-research/INDEX.md
S0196 Phase 03 close + Block
Closed Phase 03 (BrowseActivity, SettingsActivity, ResourceTypeSelectorDialog, cloud pickers static audit). Spec status moved to BlockExternal - Phase 04 requires manual hardware measurements (adb am start -W, Perfetto traces, screen recordings, frame-by-frame review). [branch: DEBUG-v002]
2026-05-15 15:31:02
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/LocalOperationStrategy.kt
phase-05
Exposed LocalOperationStrategy MediaStore helpers for shared local delete and move paths [branch: DEBUG-v002]
2026-05-15 15:31:02
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt
phase-05
Rewired local delete and move flows to reuse LocalOperationStrategy instead of LocalDeleteFileOperation helpers [branch: DEBUG-v002]
2026-05-15 15:31:03
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalDeleteFileOperation.kt
phase-05
Removed duplicate MediaStore delete logic and routed local deletes through BaseFileOperationHandler with LocalOperationStrategy [branch: DEBUG-v002]
2026-05-15 15:36:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0196 Phase04 probe
Add onRenderedFirstFrame Timber tag as Phase 04 video primary-content timing probe [branch: DEBUG-v002]
2026-05-15 15:38:11
temp/S0196/02_player_hosts.md
S0196 Phase04 probe
Correct tag-presence statements after VideoPlayerManager audit; mark onRenderedFirstFrame as added [branch: DEBUG-v002]
2026-05-15 16:05:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
noLegalDebug / all flavors
Fix slideshow autoplay after video error: reverse lifecycle-induced isPaused toggle on resume (wasToggledPausedByLifecycle flag); force-unpause in handleMediaLoadErrorAndSkip when slideshow active [branch: DEBUG-v002]
2026-05-15 16:15:29
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RestoreDeletedUseCase.kt
S0209 restore path parsing
Normalize snapshot folder name parsing for backslash-separated host paths so restore snapshot discovery works in host-side validation and Windows tooling. [branch: DEBUG-v002]
2026-05-15 16:15:29
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/RestoreDeletedUseCaseTest.kt
S0209 restore regression test
Add host-side restore round-trip coverage for canonical trash snapshots and keep the test aligned with the current metadata contract. [branch: DEBUG-v002]
2026-05-15 16:18:21
docs/FEATURES.md
S0209 feature docs
Document the 5-minute recoverable Trash window before background cleanup removes items permanently. [branch: DEBUG-v002]
2026-05-15 16:18:21
docs/FEATURES_RU.md
S0209 feature docs
Документировать 5-минутное окно восстановления из Корзины перед окончательным фоновым удалением. [branch: DEBUG-v002]
2026-05-15 16:18:21
docs/FEATURES_UK.md
S0209 feature docs
Документувати 5-хвилинне вікно відновлення з Кошика перед остаточним фоновим видаленням. [branch: DEBUG-v002]
2026-05-15 16:20:49
PLAN/S0209_deletion-trash-overhaul/INDEX.md
S0209 tactical sync
Sync overall S0209 tactical progress, phase counts, and current blockers after implementation follow-up. [branch: DEBUG-v002]
2026-05-15 16:20:49
PLAN/S0209_deletion-trash-overhaul/PHASE_02__switch-all-callers-to-contract.md
S0209 tactical sync
Mark Phase 02 complete and record the cleaner-test verification plus host-path restore follow-up. [branch: DEBUG-v002]
2026-05-15 16:20:50
PLAN/S0209_deletion-trash-overhaul/PHASE_03__remove-forced-reload-cleanup.md
S0209 tactical sync
Mark Phase 03 complete with the local forced-cleanup removal and worker-only verification. [branch: DEBUG-v002]
2026-05-15 16:20:50
PLAN/S0209_deletion-trash-overhaul/PHASE_04__manage-media-fallback.md
S0209 tactical sync
Mark Phase 04 complete with MANAGE_MEDIA fallback handling, caveat messaging, and tooltip audit results. [branch: DEBUG-v002]
2026-05-15 16:20:50
PLAN/S0209_deletion-trash-overhaul/PHASE_05__consolidate-mediastore-delete.md
S0209 tactical sync
Mark Phase 05 complete with LocalDeleteFileOperation consolidation and catalog refresh. [branch: DEBUG-v002]
2026-05-15 16:20:50
PLAN/S0209_deletion-trash-overhaul/PHASE_06__restore-and-clear-trash-button.md
S0209 tactical sync
Record Phase 06 progress, completed clear-trash work, and the remaining restore-test validation blocker. [branch: DEBUG-v002]
2026-05-15 16:20:50
PLAN/S0209_deletion-trash-overhaul/PHASE_07__docs-catalog-cleanup.md
S0209 tactical sync
Record Phase 07 progress, completed docs/log work, and the remaining catalog/build blockers. [branch: DEBUG-v002]
2026-05-15 16:21:00
dev/CATALOG/app_v2.jsonl
S0209 catalog refresh
Refresh the app_v2 catalog after S0209 Kotlin changes and tactical sync. [branch: DEBUG-v002]
2026-05-15 16:21:00
dev/CATALOG/app_v2.md
S0209 catalog refresh
Re-render the app_v2 catalog Markdown view after S0209 Kotlin changes and tactical sync. [branch: DEBUG-v002]
2026-05-15 16:21:40
PLAN/spec_catalog_multiclass_record_bug.md
follow-up spec
Capture the catalog scanner defect that merges TrashRenameUnavailableException with LocalOperationStrategy in one record. [branch: DEBUG-v002]
2026-05-15 16:21:41
PLAN/spec_gradle_kapt_stall_standarddebug.md
follow-up spec
Capture the intermittent Gradle/KAPT stall that blocks targeted standardDebug validation commands. [branch: DEBUG-v002]
2026-05-15 16:50:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileObserverManager.kt
S0209
Replace hardcoded .trash_ literal with TrashFolderContract.matchesTrashSegment() in file observer delete/create handlers [branch: DEBUG-v002]
2026-05-15 16:50:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/undo/BrowseUndoManager.kt
S0209
Replace hardcoded .trash_ literal with TrashFolderContract.matchesTrashSegment() in undoDeleteOperation trash dir check [branch: DEBUG-v002]
2026-05-15 16:50:27
app_v2/src/main/java/com/sza/fastmediasorter/data/model/TrashMetadata.kt
S0209
Replace org.json with Gson for JVM unit test compatibility in TrashMetadata serialization [branch: DEBUG-v002]
2026-05-15 16:56:30
PLAN/S0209_deletion-trash-overhaul.md
spec-check
S0209 audit complete: all 7 phases done; status Implemented; on-device criteria remain manual [branch: DEBUG-v002]
2026-05-15 16:56:30
PLAN/S0209_deletion-trash-overhaul/INDEX.md
spec-check
S0209 tactical index: all phases Done (7/7) [branch: DEBUG-v002]
2026-05-15 16:56:30
PLAN/S0209_deletion-trash-overhaul/PHASE_06__restore-and-clear-trash-button.md
S0209
Phase 06 complete: RestoreDeletedUseCaseTest passes after TrashMetadata Gson fix [branch: DEBUG-v002]
2026-05-15 16:56:30
PLAN/S0209_deletion-trash-overhaul/PHASE_07__docs-catalog-cleanup.md
S0209
Phase 07 complete: catalog scan/render done, build confirmed [branch: DEBUG-v002]
2026-05-15 17:27:54
scripts/builders/*.ps1
Build scripts
Add raw APK/AAB copy to C:/GD/WORK/FastMediaSorter/ alongside existing password-protected ZIP - every build-*.ps1 that produces an artifact now publishes to BOTH DOWNLOADS/ and C:/GD/WORK/FastMediaSorter/ (raw .apk/.aab + .zip with password=1). Also added missing GD-publication tail to build-nolegal-device.ps1. [branch: DEBUG-v002]
2026-05-15 17:41:23
PLAN/S0209_deletion-trash-overhaul.md
spec-check
Audit S0209 -> Verified; PASS/WARN/FAIL 30/0/0; 2 EXEMPT (LOC budget, catalog folding); 5 MANUAL on-device deferred [branch: DEBUG-v002]
2026-05-15 17:41:40
PLAN/S0209_deletion-trash-overhaul.md
spec-all
Pipeline Verified: S0209 [branch: DEBUG-v002]
2026-05-15 17:44:21
PLAN/spec-catalog.jsonl
spec-next
Session: 1 processed, 1 verified, 0 blocked (S0209 Implemented->Verified); S0207 next-up deferred [branch: DEBUG-v002]
2026-05-15 19:54:24
PLAN/S0212_bugfix-ftp-utf8-filenames.md
spec-all
Compact spec: S0212 FTP UTF-8 filenames [branch: DEBUG-v002]
2026-05-15 19:57:09
app_v2/src/main/java/com/sza/fastmediasorter/core/util/MemoryTier.kt
phase-02
S0207 P02.1+02.2: classify() helper + Quest3/emulator 512 MB boundary fix (<= 512 -> LOW) [branch: DEBUG-v002]
2026-05-15 19:57:09
app_v2/src/test/java/com/sza/fastmediasorter/core/util/MemoryTierTest.kt
phase-02
S0207 P02 unit cover: 7 cases for classify boundary + HIGH preservation [branch: DEBUG-v002]
2026-05-15 19:57:09
dev/CATALOG/app_v2.jsonl
catalog
S0207 P02 catalog refresh after MemoryTier classify refactor [branch: DEBUG-v002]
2026-05-15 19:58:40
PLAN/S0207_radical-memory-reduction/INDEX.md
spec-all
Pipeline Incomplete (session-paused after Phase 02): S0207; phases 03..08 deferred to next invocation [branch: DEBUG-v002]
2026-05-15 19:59:03
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/
FTP UTF-8 fix
S0212: move controlEncoding before connect + OPTS UTF8 ON post-login (fixes 550 on non-ASCII filenames) [branch: DEBUG-v002]
2026-05-15 20:01:05
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpStandaloneOperations.kt
S0212 probes
Add Timber S0212 probes (upload/delete/rename) for on-device verification - BlockNeedUserTest [branch: DEBUG-v002]
2026-05-15 20:06:25
scripts/utils/recover-kapt-stall.ps1
recover-kapt-stall
Add targeted KAPT stall recovery: stop daemons, clear kapt/kotlin/executionHistory volatile dirs, retry once with –no-daemon. Resolves PLAN/spec_gradle_kapt_stall_standarddebug.md (archived to temp/done/). [branch: DEBUG-v002]
2026-05-15 20:06:33
docs/DEV_OPS.md
DEV_OPS
Add KAPT stall recovery subsection under TEST & VERIFY documenting the three-step fallback (targeted recover → manual retry → full cache wipe). [branch: DEBUG-v002]
2026-05-15 20:06:36
.claude/commands/build.md
build skill
Add KAPT Stall Recovery section to /build skill so the recovery script is reachable from the skill reference. [branch: DEBUG-v002]
2026-05-15 20:06:40
temp/done/spec_gradle_kapt_stall_standarddebug.md
spec-note-archived
Archive Gradle KAPT stall spec note to temp/done/ with resolution block referencing the new recovery script and DEV_OPS section. [branch: DEBUG-v002]
2026-05-15 20:08:18
dev/CATALOG/scripts/scan.ps1
catalog
Emit one JSONL record per top-level Kotlin class; previously the first detected class collapsed siblings’ functions into one record (manifested on LocalOperationStrategy.kt with TrashRenameUnavailableException). Catalog regenerated: app_v2 1057 files -> 1294 records, wear 69 -> 81. [branch: DEBUG-v002]
2026-05-15 20:13:11
PLAN/S0210_video-list-show-file-size.md
spec-check
Audit S0210 -> Verified; PASS/WARN/FAIL 12/0/0 [branch: DEBUG-v002]
2026-05-15 20:13:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterFileInfoFormatter.kt
spec-check
Remove S0210 debug Timber tag (status flipped out of BlockNeedUserTest) [branch: DEBUG-v002]
2026-05-15 20:23:06
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpStandaloneOperations.kt
S0212 probes removed
Remove Timber S0212 probes (resume from BlockNeedUserTest -> Implemented) - awaiting audit [branch: DEBUG-v002]
2026-05-15 20:24:31
PLAN/S0212_bugfix-ftp-utf8-filenames.md
spec-check
Audit S0212 -> Verified; PASS/WARN/FAIL 12/0/0 [branch: DEBUG-v002]
2026-05-15 20:27:26
PLAN/S0213_bugfix-video-playback-oom-hardening.md
spec
Add strategic spec S0213 (Video playback OOM hardening - release-blocker bugfix, three coordinated defenses) [branch: DEBUG-v002]
2026-05-15 20:33:28
PLAN/S0214_github-store-publication.md
spec
Add strategic spec S0214 for github-store-publication [branch: DEBUG-v002]
2026-05-15 20:36:49
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention/INDEX.md
spec-tech
Create tactical plan for S0211 [branch: DEBUG-v002]
2026-05-15 20:36:50
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention/PHASE_01__auth-identity-extractor.md
spec-tech
Phase 01: auth-identity-extractor [branch: DEBUG-v002]
2026-05-15 20:36:50
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention/PHASE_02__auth-session-upsert.md
spec-tech
Phase 02: auth-session-upsert [branch: DEBUG-v002]
2026-05-15 20:36:50
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention/PHASE_03__auth-account-cleanup-once.md
spec-tech
Phase 03: auth-account-cleanup-once [branch: DEBUG-v002]
2026-05-15 20:36:51
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention/PHASE_04__reauth-dialog-account-resolve.md
spec-tech
Phase 04: reauth-dialog-account-resolve [branch: DEBUG-v002]
2026-05-15 20:36:51
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention/PHASE_05__preview-only-no-login-notification.md
spec-tech
Phase 05: preview-only-no-login-notification [branch: DEBUG-v002]
2026-05-15 20:36:51
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup [branch: DEBUG-v002]
2026-05-15 20:36:51
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention.md
spec-tech
S0211 Status -> Tactical [branch: DEBUG-v002]
2026-05-15 20:37:57
app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/AccountIdentityExtractor.kt
spec-dev
S0211 Phase 01.1: new identity extractor [branch: DEBUG-v002]
2026-05-15 20:41:30
app_v2/src/test/java/com/sza/fastmediasorter/data/link/auth/AccountIdentityExtractorTest.kt
spec-dev
S0211 Phase 01.2: unit tests for identity extractor [branch: DEBUG-v002]
2026-05-15 20:41:56
PLAN/S0215_fdroid-publish-research.md
spec
Add strategic spec S0215 for F-Droid publishing research [branch: DEBUG-v002]
2026-05-15 20:42:36
app_v2/src/main/java/com/sza/fastmediasorter/data/link/cookie/EncryptedCookieStore.kt
spec-dev
S0211 Phase 02.1: findAccountIdByIdentity lookup helper [branch: DEBUG-v002]
2026-05-15 20:43:04
app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/AuthSessionRepository.kt
spec-dev
S0211 Phase 02.2: saveSessionFromWebView interface method [branch: DEBUG-v002]
2026-05-15 20:43:44
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt
spec-dev
S0211 Phase 02.3: dedup-aware saveSessionFromWebView impl [branch: DEBUG-v002]
2026-05-15 20:44:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthViewModel.kt
spec-dev
S0211 Phase 02.4: saveSessionFromWebView entrypoint [branch: DEBUG-v002]
2026-05-15 20:45:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
spec-dev
S0211 Phase 02.5: switch to dedup-aware saveSessionFromWebView [branch: DEBUG-v002]
2026-05-15 20:50:20
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DedupAuthAccountsUseCase.kt
spec-dev
S0211 Phase 03.2: one-shot dedup use case [branch: DEBUG-v002]
2026-05-15 20:51:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
spec-dev
S0211 Phase 03.3: wire DedupAuthAccountsUseCase into init [branch: DEBUG-v002]
2026-05-15 20:54:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
spec-dev
S0211 Phase 04.2: async resolve existing account before reauth dialog [branch: DEBUG-v002]
2026-05-15 20:55:52
PLAN/S0215_fdroid-publish-research.md
spec
Refine S0215 after owner answers: two-phase plan (IzzyOnDroid first as-is, F-Droid main deferred research) [branch: DEBUG-v002]
2026-05-15 20:56:02
app_v2/src/main/res/values/strings.xml
spec-dev
S0211 Phase 05.1: add link_download_notif_text_preview_only_signed_in (en) [branch: DEBUG-v002]
2026-05-15 20:56:02
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0211 Phase 05.1: add link_download_notif_text_preview_only_signed_in (ru) [branch: DEBUG-v002]
2026-05-15 20:56:02
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0211 Phase 05.1: add link_download_notif_text_preview_only_signed_in (uk) [branch: DEBUG-v002]
2026-05-15 20:56:52
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
spec-dev
S0211 Phase 05.2: honest preview-only-signed-in worker notification [branch: DEBUG-v002]
2026-05-15 20:59:38
dev/CATALOG/app_v2.jsonl
spec-dev
S0211 Phase 06.1: catalog regen + role/status for new classes [branch: DEBUG-v002]
2026-05-15 20:59:39
dev/CATALOG/app_v2.md
spec-dev
S0211 Phase 06.1: catalog markdown regen [branch: DEBUG-v002]
2026-05-15 21:00:41
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention.md
spec-dev
S0211 Implementation complete, Status -> BlockNeedUserTest (on-device verification per strategic Section 11) [branch: DEBUG-v002]
2026-05-15 21:00:57
PLAN/S0211_webview-auth-account-dedup-and-loop-prevention.md
spec-all
Pipeline BlockNeedUserTest: S0211 - awaiting on-device verification (strategic Section 11 criteria 1-6) [branch: DEBUG-v002]
2026-05-15 21:04:17
PLAN/S0214_github-store-publication/INDEX.md
spec-tech
Create tactical plan for S0214 (6 phases) [branch: DEBUG-v002]
2026-05-15 21:04:17
PLAN/S0214_github-store-publication/PHASE_01__tactical-decisions.md
spec-tech
Phase 01: tactical-decisions (resolve open Research items) [branch: DEBUG-v002]
2026-05-15 21:04:17
PLAN/S0214_github-store-publication/PHASE_02__repo-metadata.md
spec-tech
Phase 02: repo-metadata applier [branch: DEBUG-v002]
2026-05-15 21:04:17
PLAN/S0214_github-store-publication/PHASE_03__release-publish-script.md
spec-tech
Phase 03: GitHub Releases publisher [branch: DEBUG-v002]
2026-05-15 21:04:18
PLAN/S0214_github-store-publication/PHASE_04__fingerprint-pinning.md
spec-tech
Phase 04: signing-fingerprint pin [branch: DEBUG-v002]
2026-05-15 21:04:18
PLAN/S0214_github-store-publication/PHASE_05__readme-badge.md
spec-tech
Phase 05: Get-it-on-GitHub-Store README badge [branch: DEBUG-v002]
2026-05-15 21:04:18
PLAN/S0214_github-store-publication/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog cleanup [branch: DEBUG-v002]
2026-05-15 21:04:18
PLAN/S0214_github-store-publication.md
spec-tech
S0214 Status Approved -> Tactical [branch: DEBUG-v002]
2026-05-15 21:07:55
PLAN/S0213_bugfix-video-playback-oom-hardening.md
spec
Resolve research items Q2/Q3 via owner input (cooldown UX = context-dependent skip; MEM_ENDURANCE alert = snackbar with Close player CTA); add ADR-4 [branch: DEBUG-v002]
2026-05-15 21:10:10
PLAN/S0215_fdroid-publish-research/INDEX.md
spec-tech
Create tactical plan INDEX for S0215 (Phase 1 - IzzyOnDroid) [branch: DEBUG-v002]
2026-05-15 21:10:10
PLAN/S0215_fdroid-publish-research/PHASE_01__foundations-license-repo.md
spec-tech
Phase 01: foundations-license-repo [branch: DEBUG-v002]
2026-05-15 21:10:10
PLAN/S0215_fdroid-publish-research/PHASE_02__fastlane-metadata-en.md
spec-tech
Phase 02: fastlane-metadata-en [branch: DEBUG-v002]
2026-05-15 21:10:11
PLAN/S0215_fdroid-publish-research/PHASE_03__fastlane-metadata-ru-uk.md
spec-tech
Phase 03: fastlane-metadata-ru-uk [branch: DEBUG-v002]
2026-05-15 21:10:11
PLAN/S0215_fdroid-publish-research/PHASE_04__changelog-pipeline-hook.md
spec-tech
Phase 04: changelog-pipeline-hook [branch: DEBUG-v002]
2026-05-15 21:10:11
PLAN/S0215_fdroid-publish-research/PHASE_05__izzyondroid-submission.md
spec-tech
Phase 05: izzyondroid-submission [branch: DEBUG-v002]
2026-05-15 21:10:12
PLAN/S0215_fdroid-publish-research/PHASE_06__readme-badge-trilingual.md
spec-tech
Phase 06: readme-badge-trilingual [branch: DEBUG-v002]
2026-05-15 21:10:12
PLAN/S0215_fdroid-publish-research/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup [branch: DEBUG-v002]
2026-05-15 21:10:12
PLAN/S0215_fdroid-publish-research.md
spec-tech
S0215 Status: Approved -> Tactical [branch: DEBUG-v002]
2026-05-15 21:13:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBigButtonsModeManager.kt
PlayerBigButtonsModeManager
Big Buttons Mode: halve overflow popup row height via new dimen player_big_button_overflow_row_height (50dp), down from player_big_button_height (100dp) [branch: DEBUG-v002]
2026-05-15 21:17:56
PLAN/S0213_bugfix-video-playback-oom-hardening/INDEX.md
spec-tech
Create tactical plan for S0213 (6 phases, 0 blockers) [branch: DEBUG-v002]
2026-05-15 21:17:56
PLAN/S0213_bugfix-video-playback-oom-hardening/PHASE_01__decoder-failure-tracker.md
spec-tech
Phase 01: decoder-failure-tracker (foundations) [branch: DEBUG-v002]
2026-05-15 21:17:56
PLAN/S0213_bugfix-video-playback-oom-hardening/PHASE_02__cooldown-integration.md
spec-tech
Phase 02: cooldown-integration (wire tracker into VideoPlayerManager + PlayerMediaLoaderManager) [branch: DEBUG-v002]
2026-05-15 21:17:56
PLAN/S0213_bugfix-video-playback-oom-hardening/PHASE_03__media3-log-oom-guard.md
spec-tech
Phase 03: media3-log-oom-guard (OOM-safe Log.Logger install in App.onCreate) [branch: DEBUG-v002]
2026-05-15 21:17:56
PLAN/S0213_bugfix-video-playback-oom-hardening/PHASE_04__memory-alert-snackbar.md
spec-tech
Phase 04: memory-alert-snackbar (MEM_ENDURANCE FAIL → snackbar with Close player CTA) [branch: DEBUG-v002]
2026-05-15 21:17:56
PLAN/S0213_bugfix-video-playback-oom-hardening/PHASE_05__strings-localization.md
spec-tech
Phase 05: strings-localization (5 keys EN/RU/UK) [branch: DEBUG-v002]
2026-05-15 21:17:56
PLAN/S0213_bugfix-video-playback-oom-hardening/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: catalog sync, dev log audit, locale parity [branch: DEBUG-v002]
2026-05-15 21:17:56
PLAN/S0213_bugfix-video-playback-oom-hardening.md
spec-tech
Status: Approved -> Tactical (Q1/Q4/Q5 resolved with engineering defaults) [branch: DEBUG-v002]
2026-05-15 21:19:36
app_v2/src/main/java/com/sza/fastmediasorter/core/playback/RecentDecoderFailureTracker.kt
spec-dev
S0213 P01.1: add RecentDecoderFailureTracker interface (Pillar A cooldown contract) [branch: DEBUG-v002]
2026-05-15 21:20:13
app_v2/src/main/java/com/sza/fastmediasorter/core/playback/RecentDecoderFailureTrackerImpl.kt
spec-dev
S0213 P01.2: implement RecentDecoderFailureTrackerImpl (ConcurrentHashMap-backed cooldown tracker) [branch: DEBUG-v002]
2026-05-15 21:20:52
app_v2/src/main/java/com/sza/fastmediasorter/di/RecentDecoderFailureTrackerModule.kt
spec-dev
S0213 P01.3: Hilt binding for RecentDecoderFailureTracker [branch: DEBUG-v002]
2026-05-15 21:22:34
PLAN/S0214_github-store-publication/DECISIONS.md
spec-dev
S0214 Phase 01 Step 01.1: decide repo topics list (15 entries) [branch: DEBUG-v002]
2026-05-15 21:23:24
PLAN/S0214_github-store-publication/DECISIONS.md
spec-dev
S0214 Phase 01 Step 01.2: decide repo description (306 chars) [branch: DEBUG-v002]
2026-05-15 21:24:27
PLAN/S0214_github-store-publication/DECISIONS.md
spec-dev
S0214 Phase 01 Step 01.3: decide APK asset naming scheme [branch: DEBUG-v002]
2026-05-15 21:24:32
PLAN/S0216_playback-order-bottom-bar.md
spec
Add strategic spec S0216 for relocating playback order button from top toolbar to bottom player bar (replacing exo_repeat) [branch: DEBUG-v002]
2026-05-15 21:25:20
PLAN/S0214_github-store-publication/DECISIONS.md
spec-dev
S0214 Phase 01 Step 01.4: decide release notes source (Option A - WHATS_NEW.md) [branch: DEBUG-v002]
2026-05-15 21:25:29
LICENSE
spec-dev
S0215 Phase 01 step 01.1: add Apache 2.0 LICENSE file [branch: DEBUG-v002]
2026-05-15 21:26:18
README.md
spec-dev
S0215 Phase 01 step 01.2: add Apache 2.0 license badge [branch: DEBUG-v002]
2026-05-15 21:26:18
docs/README_RU.md
spec-dev
S0215 Phase 01 step 01.2: add Apache 2.0 license badge (RU) [branch: DEBUG-v002]
2026-05-15 21:26:18
docs/README_UK.md
spec-dev
S0215 Phase 01 step 01.2: add Apache 2.0 license badge (UK) [branch: DEBUG-v002]
2026-05-15 21:26:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
spec-dev
S0213 P02.1: inject RecentDecoderFailureTracker, markFailed on MediaCodec+audio-renderer errors, clearAll on STATE_READY [branch: DEBUG-v002]
2026-05-15 21:26:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-dev
S0213 P02.1: @Inject RecentDecoderFailureTracker for forwarding to player managers [branch: DEBUG-v002]
2026-05-15 21:26:29
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt
spec-dev
S0213 P02.1: forward decoderFailureTracker to VideoPlayerManager [branch: DEBUG-v002]
2026-05-15 21:26:32
PLAN/S0214_github-store-publication/DECISIONS.md
spec-dev
S0214 Phase 01 Step 01.5: decide README badge (image+link+EN/RU/UK captions) [branch: DEBUG-v002]
2026-05-15 21:27:52
scripts/release/apply-github-store-metadata.ps1
spec-dev
S0214 Phase 02 Step 02.1: applier skeleton + credential resolver [branch: DEBUG-v002]
2026-05-15 21:29:06
external
spec-dev
S0215 Phase 01 step 01.3: gh repo edit set description [branch: DEBUG-v002]
2026-05-15 21:29:18
scripts/release/apply-github-store-metadata.ps1
spec-dev
S0214 Phase 02 Step 02.2: DECISIONS.md parser (topics + description) [branch: DEBUG-v002]
2026-05-15 21:29:43
external
spec-dev
S0215 Phase 01 step 01.4: gh repo edit set 13 topics [branch: DEBUG-v002]
2026-05-15 21:30:49
scripts/release/apply-github-store-metadata.ps1
spec-dev
S0214 Phase 02 Step 02.3: PATCH /repos + PUT /repos/…/topics + verify [branch: DEBUG-v002]
2026-05-15 21:31:36
fastlane/metadata/android/en-US/title.txt
spec-dev
S0215 Phase 02 step 02.1: add EN title [branch: DEBUG-v002]
2026-05-15 21:31:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
spec-dev
S0213 P02.2: inject decoderFailureTracker; cooldown gate + handleCooldownReentry (slideshow auto-skip, manual snackbar) [branch: DEBUG-v002]
2026-05-15 21:31:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
spec-dev
S0213 P02.2: forward recentDecoderFailureTracker to PlayerMediaLoaderManager [branch: DEBUG-v002]
2026-05-15 21:31:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
spec-dev
S0213 P02.3: showDecoderCooldownSnackbar() with Skip action (placeholder strings; localized in P05) [branch: DEBUG-v002]
2026-05-15 21:31:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
spec-dev
S0213 P02.3: implement onDecoderCooldownReentry -> showDecoderCooldownSnackbar [branch: DEBUG-v002]
2026-05-15 21:32:07
fastlane/metadata/android/en-US/short_description.txt
spec-dev
S0215 Phase 02 step 02.2: add EN short description [branch: DEBUG-v002]
2026-05-15 21:32:21
scripts/release/extract-release-notes.ps1
spec-dev
S0214 Phase 03 Step 03.1: release-notes extractor (current + previous markers) [branch: DEBUG-v002]
2026-05-15 21:33:37
fastlane/metadata/android/en-US/full_description.txt
spec-dev
S0215 Phase 02 step 02.3: add EN full description (2673 chars) [branch: DEBUG-v002]
2026-05-15 21:34:09
scripts/release/publish-github-release.ps1
spec-dev
S0214 Phase 03 Step 03.2: publisher skeleton + APK discovery + branch guard [branch: DEBUG-v002]
2026-05-15 21:35:00
scripts/release/publish-github-release.ps1
spec-dev
S0214 Phase 03 Step 03.3: stage APKs with deterministic names [branch: DEBUG-v002]
2026-05-15 21:35:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
S0213
P02.3: add onDecoderCooldownReentry default no-op to PlayerCallback interface [branch: DEBUG-v002]
2026-05-15 21:35:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
S0213
P02.2: cooldown guard at playVideo entry + handleCooldownReentry helper [branch: DEBUG-v002]
2026-05-15 21:35:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
S0213
P02.3: add showDecoderCooldownSnackbar with Skip action [branch: DEBUG-v002]
2026-05-15 21:35:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt
S0213
P02.3: implement onDecoderCooldownReentry to delegate to snackbar [branch: DEBUG-v002]
2026-05-15 21:36:02
app_v2/src/main/java/com/sza/fastmediasorter/core/logging/Media3OomSafeLogger.kt
spec-dev
S0213 P03.1: Media3OomSafeLogger (try/catch OOM + 4096-char stacktrace truncation + Timber.w fallback) [branch: DEBUG-v002]
2026-05-15 21:36:02
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
spec-dev
S0213 P03.2: install Media3OomSafeLogger via androidx.media3.common.util.Log.setLogger at process start [branch: DEBUG-v002]
2026-05-15 21:37:03
scripts/release/publish-github-release.ps1
spec-dev
S0214 Phase 03 Step 03.4: release-create plan + WHATS_NEW notes extraction [branch: DEBUG-v002]
2026-05-15 21:37:13
PLAN/S0216_playback-order-bottom-bar.md
spec
Resolve §6 open questions for S0216 (Q1-Q3 from owner, Q4-Q7 derived) [branch: DEBUG-v002]
2026-05-15 21:38:20
fastlane/metadata/android/en-US/images/icon.png
spec-dev
S0215 Phase 02 step 02.4: generate 512x512 icon (adaptive composite, PowerShell .NET) [branch: DEBUG-v002]
2026-05-15 21:38:25
scripts/release/publish-github-release.ps1
spec-dev
S0214 Phase 03 Step 03.5: asset upload + readback assets-by-name verify [branch: DEBUG-v002]
2026-05-15 21:39:42
fastlane/metadata/android/en-US/images/featureGraphic.png
spec-dev
S0215 Phase 02 step 02.5: generate 1024x500 featureGraphic (PowerShell .NET composite) [branch: DEBUG-v002]
2026-05-15 21:39:42
scripts/release/README.md
spec-dev
S0214 Phase 03 Step 03.6: scripts/release operator handbook [branch: DEBUG-v002]
2026-05-15 21:40:07
fastlane/metadata/android/en-US/images/phoneScreenshots/
spec-dev
S0215 Phase 02 step 02.6: copy 4 portrait phone screenshots from docs/howto/screenshots [branch: DEBUG-v002]
2026-05-15 21:40:34
app_v2/src/main/java/com/sza/fastmediasorter/core/logging/Media3OomSafeLogger.kt
S0213
P03.1: doc-comment for stacktrace truncation cap (> 4096) for verification predicate [branch: DEBUG-v002]
2026-05-15 21:40:51
fastlane/metadata/android/ru-RU/title.txt
spec-dev
S0215 Phase 03 step 03.1: add RU title [branch: DEBUG-v002]
2026-05-15 21:40:58
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryDegradationSignal.kt
spec-dev
S0213 P04.1: MemoryDegradationSignal interface + impl (SharedFlow, release-safe) [branch: DEBUG-v002]
2026-05-15 21:40:59
app_v2/src/main/java/com/sza/fastmediasorter/di/MemoryDegradationSignalModule.kt
spec-dev
S0213 P04.2: Hilt binding for MemoryDegradationSignal [branch: DEBUG-v002]
2026-05-15 21:40:59
app_v2/src/main/java/com/sza/fastmediasorter/core/debug/MemoryEnduranceTracker.kt
spec-dev
S0213 P04.3: lift DEBUG gates, wire degradationSignal, emit FAIL on endScenario + drift>=50% [branch: DEBUG-v002]
2026-05-15 21:40:59
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
spec-dev
S0213 P04.3: wire MemoryDegradationSignal into tracker at process start [branch: DEBUG-v002]
2026-05-15 21:40:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
spec-dev
S0213 P04.4: showMemoryDegradationSnackbar (INDEFINITE, Close player action; placeholder strings) [branch: DEBUG-v002]
2026-05-15 21:41:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-dev
S0213 P04.5: collect degradation events with one-shot guard, finish() on user action [branch: DEBUG-v002]
2026-05-15 21:41:51
scripts/release/expected-signing-fingerprint.txt
spec-dev
S0214 Phase 04 Step 04.1: pin release signing SHA-256 fingerprint [branch: DEBUG-v002]
2026-05-15 21:41:53
fastlane/metadata/android/ru-RU/short_description.txt
spec-dev
S0215 Phase 03 step 03.2: add RU short description (76 chars) [branch: DEBUG-v002]
2026-05-15 21:41:53
fastlane/metadata/android/ru-RU/full_description.txt
spec-dev
S0215 Phase 03 step 03.2: add RU full description (2660 chars) [branch: DEBUG-v002]
2026-05-15 21:41:54
fastlane/metadata/android/uk-UA/title.txt
spec-dev
S0215 Phase 03 step 03.3: add UK title [branch: DEBUG-v002]
2026-05-15 21:42:27
fastlane/metadata/android/uk-UA/short_description.txt
spec-dev
S0215 Phase 03 step 03.4: add UK short description (74 chars) [branch: DEBUG-v002]
2026-05-15 21:42:27
fastlane/metadata/android/uk-UA/full_description.txt
spec-dev
S0215 Phase 03 step 03.4: add UK full description (2655 chars) [branch: DEBUG-v002]
2026-05-15 21:43:40
app_v2/src/main/res/values/strings.xml
spec-dev
S0213 P05.1: add 5 s0213_* string keys (EN) [branch: DEBUG-v002]
2026-05-15 21:43:40
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0213 P05.1: add 5 s0213_* string keys (RU; .. and ё) [branch: DEBUG-v002]
2026-05-15 21:43:41
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0213 P05.1: add 5 s0213_* string keys (UK) [branch: DEBUG-v002]
2026-05-15 21:43:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
spec-dev
S0213 P05.2: swap placeholder strings to R.string.s0213_* in both snackbars [branch: DEBUG-v002]
2026-05-15 21:43:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
spec-dev
S0213 P05.2: swap slideshow cooldown toast to R.string.s0213_decoder_cooldown_skip [branch: DEBUG-v002]
2026-05-15 21:44:21
scripts/release/publish-github-release.ps1
spec-dev
S0214 Phase 04 Step 04.2: Assert-ExpectedFingerprint gate [branch: DEBUG-v002]
2026-05-15 21:45:14
dev/CATALOG/app_v2.jsonl
spec-dev
S0213 P06.1: scan+render app_v2 catalog with 4 new classes [branch: DEBUG-v002]
2026-05-15 21:45:14
dev/CATALOG/app_v2.md
spec-dev
S0213 P06.1: rendered app_v2.md (1304 records) [branch: DEBUG-v002]
2026-05-15 21:46:38
docs/DEV_OPS.md
spec-dev
S0214 Phase 04 Step 04.3: Release Signing Fingerprint section + rotation procedure [branch: DEBUG-v002]
2026-05-15 21:48:29
README.md
spec-dev
S0214 Phase 05 Step 05.2: Get-it-on-GitHub-Store badge in EN README [branch: DEBUG-v002]
2026-05-15 21:49:16
docs/README_RU.md
spec-dev
S0214 Phase 05 Step 05.3: Get-it-on-GitHub-Store badge in RU README [branch: DEBUG-v002]
2026-05-15 21:50:20
docs/README_UK.md
spec-dev
S0214 Phase 05 Step 05.4: Get-it-on-GitHub-Store badge in UK README [branch: DEBUG-v002]
2026-05-15 21:54:58
scripts/release/gen_fastlane_changelog.ps1
spec-dev
S0215 Phase 04 step 04.1: create gen_fastlane_changelog.ps1 (180 lines, 3-locale extractor) [branch: DEBUG-v002]
2026-05-15 21:55:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
S0213
P06: relocate Pillar A Timber.d S0213 verification tag to start of handleCooldownReentry [branch: DEBUG-v002]
2026-05-15 21:55:24
app_v2/src/main/java/com/sza/fastmediasorter/core/logging/Media3OomSafeLogger.kt
S0213
P06: update Pillar B Timber.d S0213 verification tag to spec format [branch: DEBUG-v002]
2026-05-15 21:55:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
S0213
P06: add Pillar C Timber.d S0213 verification tag at start of showMemoryDegradationSnackbar [branch: DEBUG-v002]
2026-05-15 21:55:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0213
P06: remove stale Pillar C tag from observeData (moved to PlayerDialogAndUiStateManager) [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackOrderUiState.kt
PlaybackOrderUiState
Added shared playback-order icon and label mapping for player controls. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ExoPlayerControlsManager.kt
ExoPlayerControlsManager
Routed the bottom repeat slot to the shared playback-order flow and dynamic accessibility text. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer
Connected bottom-bar playback-order callbacks to PlayerActivity state and actions. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
Synced restored playback-order state into fresh video player instances and bottom-bar UI. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Applied playback-order state through the bottom-bar path and removed top-panel icon updates. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
PlayerCommandPanelCallbackImpl
Removed the obsolete top-panel playback-order callback. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Removed the top command-panel playback-order button and adaptive layout references. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
CommandPanelLayoutPlanner
Removed playback order from the top command planner and overflow model. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt
BrowseFileOverflowMenuManager
Updated command-set documentation after removing the player playback-order top command. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/res/layout/activity_player_unified.xml
activity_player_unified
Removed the top command-panel playback-order button from the portrait player layout. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/res/layout-land/activity_player_unified.xml
activity_player_unified (land)
Removed the top command-panel playback-order button from the landscape player layout. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/res/layout/custom_player_controls.xml
custom_player_controls
Retargeted the bottom playback-order button defaults in the compact player controls layout. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/res/layout/custom_player_controls_large.xml
custom_player_controls_large
Retargeted the bottom playback-order button defaults in the large player controls layout. [branch: DEBUG-v002]
2026-05-15 23:02:17
app_v2/src/main/res/menu/overflow_menu_player.xml
overflow_menu_player
Removed the obsolete playback-order overflow menu item. [branch: DEBUG-v002]
2026-05-15 23:18:07
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryScenario.kt
MemoryScenario
Added runtime memory scenario enum for S0207 Phase 03 [branch: DEBUG-v002]
2026-05-15 23:18:08
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProfile.kt
MemoryProfile
Added scenario-aware memory profile value object [branch: DEBUG-v002]
2026-05-15 23:18:08
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProfileCoordinator.kt
MemoryProfileCoordinator
Added coordinator contract for startup Glide budget and scenario state [branch: DEBUG-v002]
2026-05-15 23:18:08
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProfileFlavorOverride.kt
MemoryProfileFlavorOverride
Added flavor override extension point for memory profiles [branch: DEBUG-v002]
2026-05-15 23:18:08
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProfileCoordinatorImpl.kt
MemoryProfileCoordinatorImpl
Implemented scenario-aware startup memory profile coordinator [branch: DEBUG-v002]
2026-05-15 23:18:09
app_v2/src/main/java/com/sza/fastmediasorter/di/MemoryProfileModule.kt
MemoryProfileModule
Bound memory profile coordinator and default override set [branch: DEBUG-v002]
2026-05-15 23:18:09
app_v2/src/main/java/com/sza/fastmediasorter/di/GlideAppModule.kt
GlideAppModule
Switched Glide startup memory budget to coordinator-driven sizing [branch: DEBUG-v002]
2026-05-15 23:18:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
BrowseActivity
Emitted browse memory scenarios and background Glide trim hook [branch: DEBUG-v002]
2026-05-15 23:18:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Emitted playback memory scenarios and proactive audio Glide release [branch: DEBUG-v002]
2026-05-15 23:18:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt
PlayerViewerFactory
Forwarded memory profile coordinator into VideoPlayerManager [branch: DEBUG-v002]
2026-05-15 23:18:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
Injected memory profile coordinator for player factory wiring [branch: DEBUG-v002]
2026-05-15 23:18:10
app_v2/src/vr/java/com/sza/fastmediasorter/vr/memory/VrMemoryProfileFlavorOverride.kt
VrMemoryProfileFlavorOverride
Added VR RGB888 memory profile override [branch: DEBUG-v002]
2026-05-15 23:18:10
app_v2/src/vr/java/com/sza/fastmediasorter/vr/di/VrMemoryProfileFlavorModule.kt
VrMemoryProfileFlavorModule
Bound VR memory profile override via Hilt multibinding [branch: DEBUG-v002]
2026-05-15 23:18:11
app_v2/src/test/java/com/sza/fastmediasorter/core/memory/MemoryProfileCoordinatorImplTest.kt
MemoryProfileCoordinatorImplTest
Added coordinator unit coverage for startup cache and flavor override logic [branch: DEBUG-v002]
2026-05-15 23:18:11
app_v2/src/test/java/com/sza/fastmediasorter/di/GlideAppModuleTest.kt
GlideAppModuleTest
Added startup Glide cache clamp coverage [branch: DEBUG-v002]
2026-05-15 23:18:11
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VideoPlayerManagerStateEndedTest.kt
VideoPlayerManagerStateEndedTest
Updated player test wiring and teardown for memory profile constructor changes [branch: DEBUG-v002]
2026-05-15 23:22:13
a.ps1
a.ps1
Auto-toggle local.properties chaquopy.enabled for noLegal vs non-noLegal launcher commands; retry transient file locks [branch: DEBUG-v002]
2026-05-15 23:30:52
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/NativePressureMonitor.kt
NativePressureMonitor
S0207 Phase 04: add native heap pressure sampler for runtime RGB565 override [branch: DEBUG-v002]
2026-05-15 23:30:52
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryPressureDecodeFormatResolver.kt
MemoryPressureDecodeFormatResolver
S0207 Phase 04: centralize decode-format and bitmap-config decisions under pressure [branch: DEBUG-v002]
2026-05-15 23:30:52
app_v2/src/main/java/com/sza/fastmediasorter/di/NativePressureMonitorModule.kt
NativePressureMonitorModule
S0207 Phase 04: expose pressure monitor and resolver via entry points [branch: DEBUG-v002]
2026-05-15 23:30:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
ImageLoadingManager
S0207 Phase 04: route player image requests through pressure-aware decode resolver [branch: DEBUG-v002]
2026-05-15 23:30:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImagePreloadHelper.kt
ImagePreloadHelper
S0207 Phase 04: apply pressure-aware decode format to image preloads [branch: DEBUG-v002]
2026-05-15 23:30:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/DualSurfaceStaticImageRenderer.kt
DualSurfaceStaticImageRenderer
S0207 Phase 04: use pressure-aware decode format for dual-surface still rendering [branch: DEBUG-v002]
2026-05-15 23:30:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt
AudioCoverArtLoader
S0207 Phase 04: apply pressure-aware decode format to cover-art requests [branch: DEBUG-v002]
2026-05-15 23:30:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
AdapterThumbnailLoader
S0207 Phase 04/05: use decode resolver and shared extension placeholder bitmaps [branch: DEBUG-v002]
2026-05-15 23:30:54
app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/SafeByteBufferBitmapDecoder.kt
SafeByteBufferBitmapDecoder
S0207 Phase 04: replace hardcoded ARGB decode with pressure-aware bitmap config [branch: DEBUG-v002]
2026-05-15 23:30:54
app_v2/src/main/java/com/sza/fastmediasorter/data/glide/PdfPageDecoder.kt
PdfPageDecoder
S0207 Phase 04: switch PDF bitmap creation to pressure-aware bitmap config [branch: DEBUG-v002]
2026-05-15 23:30:55
app_v2/src/main/java/com/sza/fastmediasorter/data/glide/NetworkPdfThumbnailLoader.kt
NetworkPdfThumbnailLoader
S0207 Phase 04: switch network PDF thumbnails to pressure-aware bitmap config [branch: DEBUG-v002]
2026-05-15 23:30:55
app_v2/src/test/java/com/sza/fastmediasorter/core/memory/MemoryPressureDecodeFormatResolverTest.kt
MemoryPressureDecodeFormatResolverTest
S0207 Phase 04: add unit coverage for pressure-based decode decisions [branch: DEBUG-v002]
2026-05-15 23:30:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
S0207 Phase 05: add compact audio buffer profiles for local and network playback [branch: DEBUG-v002]
2026-05-15 23:30:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchLoadControlFactory.kt
PrefetchLoadControlFactory
S0207 Phase 05: route audio sessions to dedicated load-control buffer profiles [branch: DEBUG-v002]
2026-05-15 23:30:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt
PlayerSetupHelper
S0207 Phase 05: propagate audio flag into local ExoPlayer creation [branch: DEBUG-v002]
2026-05-15 23:30:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LocalPlaybackHelper.kt
LocalPlaybackHelper
S0207 Phase 05: detect local audio sessions before building load control [branch: DEBUG-v002]
2026-05-15 23:30:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt
SftpPlaybackHelper
S0207 Phase 05: route SFTP audio sessions to network-audio load-control defaults [branch: DEBUG-v002]
2026-05-15 23:30:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt
SmbPlaybackHelper
S0207 Phase 05: route SMB audio sessions to network-audio load-control defaults [branch: DEBUG-v002]
2026-05-15 23:30:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt
FtpPlaybackHelper
S0207 Phase 05: route FTP audio sessions to network-audio load-control defaults [branch: DEBUG-v002]
2026-05-15 23:30:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt
CloudPlaybackHelper
S0207 Phase 05: keep cloud video buffers and use audio-network buffers for cloud audio [branch: DEBUG-v002]
2026-05-15 23:30:57
app_v2/src/main/java/com/sza/fastmediasorter/util/ExtensionThumbnailGenerator.kt
ExtensionThumbnailGenerator
S0207 Phase 05: shrink extension placeholder cache and switch to RGB565 96px bitmaps [branch: DEBUG-v002]
2026-05-15 23:30:57
app_v2/src/main/java/com/sza/fastmediasorter/util/BinaryFileThumbnailGenerator.kt
BinaryFileThumbnailGenerator
S0207 Phase 05: shrink binary placeholder cache and switch cached bitmaps to RGB565 [branch: DEBUG-v002]
2026-05-15 23:30:58
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchLoadControlFactoryTest.kt
PrefetchLoadControlFactoryTest
S0207 Phase 05: add unit coverage for audio buffer profile selection [branch: DEBUG-v002]
2026-05-15 23:30:58
app_v2/src/test/java/com/sza/fastmediasorter/util/ExtensionThumbnailGeneratorTest.kt
ExtensionThumbnailGeneratorTest
S0207 Phase 05: add placeholder reuse test for shared extension bitmaps [branch: DEBUG-v002]
2026-05-15 23:47:52
app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt
AppStartupInitializer
S0207 Phase 06: split eager startup work from deferred startup tasks and add single-shot throttle bootstrap guard [branch: DEBUG-v002]
2026-05-15 23:47:52
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
S0207 Phase 06: gate deferred startup scheduling on first frame and enqueue deferred startup worker [branch: DEBUG-v002]
2026-05-15 23:47:53
app_v2/src/main/java/com/sza/fastmediasorter/core/init/FirstFrameSignal.kt
FirstFrameSignal
S0207 Phase 06: add process-level first-frame gate for deferred startup work [branch: DEBUG-v002]
2026-05-15 23:47:53
app_v2/src/main/java/com/sza/fastmediasorter/worker/DeferredStartupWorker.kt
DeferredStartupWorker
S0207 Phase 06: add best-effort deferred startup maintenance worker [branch: DEBUG-v002]
2026-05-15 23:47:53
app_v2/src/test/java/com/sza/fastmediasorter/core/init/FirstFrameSignalTest.kt
FirstFrameSignalTest
S0207 Phase 06: add single-shot first-frame signal unit coverage [branch: DEBUG-v002]
2026-05-15 23:47:53
app_v2/src/test/java/com/sza/fastmediasorter/core/init/AppStartupInitializerTest.kt
AppStartupInitializerTest
S0207 Phase 06: add guard coverage for one-shot deferred connection throttle bootstrap [branch: DEBUG-v002]
2026-05-15 23:51:09
PLAN/S0207_radical-memory-reduction/PHASE_06__startup-workers-defer.md
spec-update
S0207 Phase 06: sync tactical phase status with landed code, tests, dev log, and pending startup calibration [branch: DEBUG-v002]
2026-05-15 23:51:10
PLAN/S0207_radical-memory-reduction/INDEX.md
spec-update
S0207 tactical index: mark Phase 06 in progress with 4/5 steps landed and runtime calibration pending [branch: DEBUG-v002]
2026-05-16 00:02:57
app_v2/src/main/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicy.kt
IdleDisconnectPolicy
S0207 Phase 07: add shared idle-disconnect transport timer contract [branch: DEBUG-v002]
2026-05-16 00:02:57
app_v2/src/main/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImpl.kt
IdleDisconnectPolicyImpl
S0207 Phase 07: implement shared idle-disconnect timer lifecycle with arm touch disarm semantics [branch: DEBUG-v002]
2026-05-16 00:02:57
app_v2/src/main/java/com/sza/fastmediasorter/di/IdleDisconnectModule.kt
IdleDisconnectModule
S0207 Phase 07: bind idle-disconnect policy into Hilt graph [branch: DEBUG-v002]
2026-05-16 00:02:57
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient
S0207 Phase 07: wire SFTP request paths into shared idle-disconnect policy [branch: DEBUG-v002]
2026-05-16 00:02:58
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
SftpConnectionPool
S0207 Phase 07: add periodic SFTP idle sweep lifecycle and test hooks [branch: DEBUG-v002]
2026-05-16 00:02:58
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
S0207 Phase 07: wire SMB pooled and ExoPlayer paths into idle-disconnect policy [branch: DEBUG-v002]
2026-05-16 00:02:58
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpClient.kt
FtpClient
S0207 Phase 07: wire FTP connection lifecycle and connected operations into idle-disconnect policy [branch: DEBUG-v002]
2026-05-16 00:02:58
app_v2/src/test/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImplTest.kt
IdleDisconnectPolicyImplTest
S0207 Phase 07: add focused unit coverage for idle-disconnect arm touch disarm semantics [branch: DEBUG-v002]
2026-05-16 00:02:59
app_v2/src/test/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPoolTest.kt
SftpConnectionPoolTest
S0207 Phase 07: add narrow coverage for SFTP periodic sweep lifecycle [branch: DEBUG-v002]
2026-05-16 00:02:59
app_v2/src/test/java/com/sza/fastmediasorter/data/remote/ftp/FtpClientTest.kt
FtpClientTest
S0207 Phase 07: update FTP constructor tests for idle-disconnect dependency [branch: DEBUG-v002]
2026-05-16 00:02:59
app_v2/src/test/java/com/sza/fastmediasorter/data/remote/sftp/SftpClientTest.kt
SftpClientTest
S0207 Phase 07: update SFTP constructor tests for idle-disconnect dependency [branch: DEBUG-v002]
2026-05-16 00:03:00
app_v2/src/test/java/com/sza/fastmediasorter/data/network/smb/SmbConnectionManagerTest.kt
SmbConnectionManagerTest
S0207 Phase 07: update SMB constructor tests for idle-disconnect dependency [branch: DEBUG-v002]
2026-05-16 00:04:45
PLAN/S0207_radical-memory-reduction/PHASE_07__network-idle-disconnect.md
spec-update
S0207 Phase 07: sync tactical phase status with landed idle-disconnect code, tests, and pending runtime calibration [branch: DEBUG-v002]
2026-05-16 00:04:45
PLAN/S0207_radical-memory-reduction/INDEX.md
spec-update
S0207 tactical index: mark Phase 07 in progress with 4/5 steps landed and runtime idle-disconnect calibration pending [branch: DEBUG-v002]
2026-05-16 00:05:09
PLAN/S0207_radical-memory-reduction/PHASE_07__network-idle-disconnect.md
spec-update
S0207 Phase 07: correct tactical note to reflect landed 30-second SFTP sweep implementation [branch: DEBUG-v002]
2026-05-16 00:36:53
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProbeImpl.kt
MemoryProbeImpl
S0207 Phase 01 fix: gate record() behind BuildConfig.DEBUG - no measurement cost in release builds [branch: DEBUG-v002]
2026-05-16 00:36:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingDiagnostics.kt
ImageLoadingDiagnostics
S0207 Phase 01 fix: gate logMemoryStats() behind BuildConfig.DEBUG - release builds no longer invoke memory stat syscalls from MEMORY_DEBUG path [branch: DEBUG-v002]
2026-05-16 00:45:06
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpConnectedOperations.kt
FtpConnectedOperations.readFileBytes
S0206: replace read-all-then-truncate with readBoundedAndAbort for true partial FTP reads (passive+active mode) [branch: DEBUG-v002]
2026-05-16 00:45:10
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpStandaloneOperations.kt
FtpStandaloneOperations.readFileBytes
S0206: replace read-all-then-truncate with readBoundedAndAbort for true partial FTP reads (passive+active mode) [branch: DEBUG-v002]
2026-05-16 01:21:02
PLAN/S0206_ftp-true-partial-read.md
S0206 strategic spec
Reconcile Status header to Implemented (was Tactical) - aligns with catalog journal. [branch: DEBUG-v002]
2026-05-16 01:21:02
PLAN/S0206_ftp-true-partial-read/INDEX.md
S0206 tactical INDEX
Mark phases 02/03 done; flip Completion Gate items the work covered; record Phase 02/03 in Change Log. [branch: DEBUG-v002]
2026-05-16 01:21:02
PLAN/S0206_ftp-true-partial-read/PHASE_02__wire-ftp-wrappers.md
S0206 Phase 02
Mark all 5 steps + Phase Done Criteria as done; record build evidence (assembleStandardDebug PASS 50s). [branch: DEBUG-v002]
2026-05-16 01:21:02
PLAN/S0206_ftp-true-partial-read/PHASE_03__docs-catalog-cleanup.md
S0206 Phase 03
Mark all 4 steps + Done Criteria as done; record catalog regen (1325 records) and functionality log FIX append. [branch: DEBUG-v002]
2026-05-16 01:21:02
dev/CATALOG/app_v2.jsonl
FtpCommandUtils.kt
S0206 Phase 03.1: role + status (tested) set; catalog scan+render refreshed (1325 records, +1 FtpBoundedReadResult). [branch: DEBUG-v002]
2026-05-16 01:25:22
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpConnectedOperations.kt
FtpConnectedOperations.readFileBytes
S0206 BlockNeedUserTest: insert Timber.d tags at both bounded-branch entry points (passive + active) for on-device verification. [branch: DEBUG-v002]
2026-05-16 01:25:22
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpStandaloneOperations.kt
FtpStandaloneOperations.readFileBytes
S0206 BlockNeedUserTest: insert Timber.d tags at both bounded-branch entry points (passive + active) for on-device verification. [branch: DEBUG-v002]
2026-05-16 01:25:22
PLAN/spec-catalog.jsonl
S0206
Status Implemented -> BlockNeedUserTest after Timber.d tag insertion; debug APK v2.60.5160.123 built for FTP server testing. [branch: DEBUG-v002]
2026-05-16 01:25:22
PLAN/S0206_ftp-true-partial-read.md
S0206 strategic spec
Status header Implemented -> BlockNeedUserTest. [branch: DEBUG-v002]
2026-05-16 01:32:04
PLAN/S0185_startup-splash-screen-investigation.md
spec-update
Refinement (claude-sonnet-4-7-1m, focus: structure, consistency, completeness, style) - added metadata header, refreshed stale code refs, added windowSplashScreenAnimationDuration finding, queued P-1 (RU translation) and P-2 (artefact type) as DISCUSS [branch: DEBUG-v002]
2026-05-16 01:38:05
S0196 Phase 04 prep
app_v2
Add primary-content Timber tags to BrowseActivity (first list bind), SettingsActivity (first viewPager page), three cloud FolderPickerActivity classes (first folder list bind), PdfViewerManager (first page bitmap), and EpubViewerManager (first chapter onPageFinished). Closes Blocker #3 of the 2026-05-15 INDEX log; Phase 04 still waiting on operator measurement run. standardDebug build succeeds. [branch: DEBUG-v002]
2026-05-16 01:38:07
PLAN/S0192_draw-editor-toolbar-ux-v2/INDEX.md
spec-tech
Create tactical plan for S0192 (Draw Editor Toolbar UX v2) [branch: DEBUG-v002]
2026-05-16 01:38:07
PLAN/S0192_draw-editor-toolbar-ux-v2/PHASE_01__action-list-engine.md
spec-tech
S0192 Phase 01: action-list engine + undo [branch: DEBUG-v002]
2026-05-16 01:38:08
PLAN/S0192_draw-editor-toolbar-ux-v2/PHASE_02__prefs-and-settings.md
spec-tech
S0192 Phase 02: DrawEditorPrefs + Settings dialog [branch: DEBUG-v002]
2026-05-16 01:38:08
PLAN/S0192_draw-editor-toolbar-ux-v2/PHASE_03__oval-text-tools.md
spec-tech
S0192 Phase 03: Oval + Text tools [branch: DEBUG-v002]
2026-05-16 01:38:08
PLAN/S0192_draw-editor-toolbar-ux-v2/PHASE_04__keep-export.md
spec-tech
S0192 Phase 04: Google Keep export helper [branch: DEBUG-v002]
2026-05-16 01:38:08
PLAN/S0192_draw-editor-toolbar-ux-v2/PHASE_05__toolbar-layout-bindings.md
spec-tech
S0192 Phase 05: new toolbar layout + bindings [branch: DEBUG-v002]
2026-05-16 01:38:09
PLAN/S0192_draw-editor-toolbar-ux-v2/PHASE_06__save-in-place.md
spec-tech
S0192 Phase 06: in-place save + overflow Save-to-new rerouting [branch: DEBUG-v002]
2026-05-16 01:38:09
PLAN/S0192_draw-editor-toolbar-ux-v2/PHASE_07__docs-catalog-cleanup.md
spec-tech
S0192 Phase 07: docs + catalog cleanup [branch: DEBUG-v002]
2026-05-16 01:38:09
PLAN/S0192_draw-editor-toolbar-ux-v2.md
spec-tech
S0192 status -> Tactical [branch: DEBUG-v002]
2026-05-16 01:39:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0192
Phase 01 Step 01.1: introduce DrawAction sealed class (Stroke + ShapeRect) [branch: DEBUG-v002]
2026-05-16 01:45:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0192
Phase 01 Steps 01.2-01.5: atomic DrawCanvasView rewrite (action-list replay engine, undoLast/undoAll/hasActions, transparent-canvas export). Build PASS. [branch: DEBUG-v002]
2026-05-16 01:46:22
dev/CATALOG/app_v2.jsonl
S0192
Phase 01 catalog sync [branch: DEBUG-v002]
2026-05-16 01:46:23
dev/CATALOG/app_v2.md
S0192
Phase 01 catalog sync [branch: DEBUG-v002]
2026-05-16 01:47:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawEditorPrefs.kt
S0192
Phase 02 Step 02.1: new DrawEditorPrefs helper (last color, brush size, text size, opacity) [branch: DEBUG-v002]
2026-05-16 01:51:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0192
Phase 02 Steps 02.2-02.3: selectedColorArgb Int + DrawEditorPrefs reads (color, brush size, opacity baking) [branch: DEBUG-v002]
2026-05-16 01:52:23
app_v2/src/main/res/values/strings.xml
S0192
Phase 02 Step 02.4: add draw_settings_* keys (EN) [branch: DEBUG-v002]
2026-05-16 01:52:23
app_v2/src/main/res/values-ru/strings.xml
S0192
Phase 02 Step 02.4: add draw_settings_* keys (RU) [branch: DEBUG-v002]
2026-05-16 01:52:24
app_v2/src/main/res/values-uk/strings.xml
S0192
Phase 02 Step 02.4: add draw_settings_* keys (UK) [branch: DEBUG-v002]
2026-05-16 01:55:01
app_v2/src/main/res/layout/dialog_draw_settings.xml
S0192
Phase 02 Step 02.5: dialog_draw_settings layout (SeekBar + 2 RadioGroups) [branch: DEBUG-v002]
2026-05-16 01:55:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawSettingsDialog.kt
S0192
Phase 02 Step 02.5: DrawSettingsDialog helper [branch: DEBUG-v002]
2026-05-16 01:59:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0192
Phase 03 Steps 03.1-03.4: DrawTool +OVAL/+TEXT, DrawAction +ShapeOval/+TextEntry, replay/preview/touch handlers, promptTextEntry dialog [branch: DEBUG-v002]
2026-05-16 01:59:46
app_v2/src/main/res/drawable/ic_draw_oval.xml
S0192
Phase 03 Step 03.5: oval tool icon [branch: DEBUG-v002]
2026-05-16 01:59:46
app_v2/src/main/res/drawable/ic_draw_text.xml
S0192
Phase 03 Step 03.5: text tool icon [branch: DEBUG-v002]
2026-05-16 01:59:46
app_v2/src/main/res/values/strings.xml
S0192
Phase 03 Step 03.6: draw_tool_oval/text + draw_text_input_hint (EN) [branch: DEBUG-v002]
2026-05-16 01:59:46
app_v2/src/main/res/values-ru/strings.xml
S0192
Phase 03 Step 03.6: draw_tool_oval/text + draw_text_input_hint (RU) [branch: DEBUG-v002]
2026-05-16 01:59:47
app_v2/src/main/res/values-uk/strings.xml
S0192
Phase 03 Step 03.6: draw_tool_oval/text + draw_text_input_hint (UK) [branch: DEBUG-v002]
2026-05-16 02:02:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawKeepExportHelper.kt
S0192
Phase 04 Step 04.1: DrawKeepExportHelper (merge + cacheDir stage + FileProvider URI + ACTION_SEND with Keep targeting + chooser fallback) [branch: DEBUG-v002]
2026-05-16 02:02:51
app_v2/src/main/res/values/strings.xml
S0192
Phase 04 Step 04.3: draw_overflow_keep + draw_keep_not_installed (EN) [branch: DEBUG-v002]
2026-05-16 02:02:51
app_v2/src/main/res/values-ru/strings.xml
S0192
Phase 04 Step 04.3: draw_overflow_keep + draw_keep_not_installed (RU) [branch: DEBUG-v002]
2026-05-16 02:02:52
app_v2/src/main/res/values-uk/strings.xml
S0192
Phase 04 Step 04.3: draw_overflow_keep + draw_keep_not_installed (UK) [branch: DEBUG-v002]
2026-05-16 02:11:34
PLAN/S0189_browse-create-text-notes.md
spec-tech
S0189: status Approved -> Tactical, lock 6.1 + 6.3 decisions [branch: DEBUG-v002]
2026-05-16 02:11:42
PLAN/S0189_browse-create-text-notes/INDEX.md
spec-tech
S0189: tactical plan INDEX, 8 phases [branch: DEBUG-v002]
2026-05-16 02:11:45
PLAN/S0189_browse-create-text-notes/PHASE_01__domain-create-file.md
spec-tech
S0189 Phase 01: domain UseCase + strategy methods + name utils [branch: DEBUG-v002]
2026-05-16 02:11:48
PLAN/S0189_browse-create-text-notes/PHASE_02__browse-entry-points.md
spec-tech
S0189 Phase 02: toolbar + overflow + keyboard entry points [branch: DEBUG-v002]
2026-05-16 02:11:52
PLAN/S0189_browse-create-text-notes/PHASE_03__network-staging.md
spec-tech
S0189 Phase 03: Downloads staging + registry + network strategies [branch: DEBUG-v002]
2026-05-16 02:11:59
PLAN/S0189_browse-create-text-notes/PHASE_04__editor-auto-open.md
spec-tech
S0189 Phase 04: editor auto-open in edit mode after create [branch: DEBUG-v002]
2026-05-16 02:12:02
PLAN/S0189_browse-create-text-notes/PHASE_05__editor-action-icons.md
spec-tech
S0189 Phase 05: 5-action editor panel + dirty state + Keep availability [branch: DEBUG-v002]
2026-05-16 02:12:06
PLAN/S0189_browse-create-text-notes/PHASE_06__save-with-name.md
spec-tech
S0189 Phase 06: save flow with rename + conflict suffix + network upload [branch: DEBUG-v002]
2026-05-16 02:12:09
PLAN/S0189_browse-create-text-notes/PHASE_07__font-auto-fit.md
spec-tech
S0189 Phase 07: auto-fit font with manual swipe override [branch: DEBUG-v002]
2026-05-16 02:12:10
app_v2/src/main/res/values/strings.xml
S0192
Phase 05 Step 05.1: 6 toolbar v2 strings (EN) [branch: DEBUG-v002]
2026-05-16 02:12:10
app_v2/src/main/res/values-ru/strings.xml
S0192
Phase 05 Step 05.1: 6 toolbar v2 strings (RU) [branch: DEBUG-v002]
2026-05-16 02:12:10
app_v2/src/main/res/values-uk/strings.xml
S0192
Phase 05 Step 05.1: 6 toolbar v2 strings (UK) [branch: DEBUG-v002]
2026-05-16 02:12:11
app_v2/src/main/res/menu/menu_draw_tool_selector.xml
S0192
Phase 05 Step 05.2: tool selector popup menu [branch: DEBUG-v002]
2026-05-16 02:12:11
app_v2/src/main/res/menu/menu_draw_overflow.xml
S0192
Phase 05 Step 05.2: overflow popup menu [branch: DEBUG-v002]
2026-05-16 02:12:11
app_v2/src/main/res/drawable/draw_color_swatch_selected.xml
S0192
Phase 05 Step 05.3: swatch selector drawable [branch: DEBUG-v002]
2026-05-16 02:12:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawColorGridDialog.kt
S0192
Phase 05 Step 05.4: 16-color custom palette dialog [branch: DEBUG-v002]
2026-05-16 02:12:12
app_v2/src/main/res/layout/player_draw_overlay_toolbar_content.xml
S0192
Phase 05 Step 05.5: rewrite toolbar portrait layout to v2 [branch: DEBUG-v002]
2026-05-16 02:12:12
app_v2/src/main/res/layout-land/player_draw_overlay_toolbar_content.xml
S0192
Phase 05 Step 05.6: rewrite toolbar landscape layout to v2 [branch: DEBUG-v002]
2026-05-16 02:12:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawEditorPrefs.kt
S0192
Phase 05 Step 05.7: + KEY_CUSTOM_COLOR getter/setter [branch: DEBUG-v002]
2026-05-16 02:12:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0192
Phase 05 Step 05.7: bindToolbar v2 (PopupMenu × 2, 4 swatches incl. custom-color dialog, overflow), iconForTool, baseBitmapProvider; DrawColor enum dropped [branch: DEBUG-v002]
2026-05-16 02:12:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0192
Phase 05 Step 05.8: @Inject drawKeepExportHelper [branch: DEBUG-v002]
2026-05-16 02:12:13
PLAN/S0189_browse-create-text-notes/PHASE_08__docs-catalog-cleanup.md
spec-tech
S0189 Phase 08: docs, catalog, functionality log [branch: DEBUG-v002]
2026-05-16 02:12:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0192
Phase 05 Step 05.8: pass keepExportHelper + set baseBitmapProvider [branch: DEBUG-v002]
2026-05-16 02:12:22
PLAN/S0191_browse-create-new-drawing.md
S0191
Rewritten S0191 to mirror S0189: structure, questionnaire, shared-code module list (filename/conflict/remote-staging/editor-action contract/dirty-tint), drawing-specific items remain Open. [branch: DEBUG-v002]
2026-05-16 02:12:24
PLAN/S0179_git-branching-model.md
spec-arc
Archive S0179 (git-branching-model) -> temp/done/ [branch: DEBUG-v002]
2026-05-16 02:12:47
app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt
spec-arc
Remove S0183 Timber.d debug tags (8 lines) on archive transition out of BlockNeedUserTest [branch: DEBUG-v002]
2026-05-16 02:12:53
PLAN/S0183_nolegal-apk-install.md
spec-arc
Archive S0183 (nolegal-apk-install) -> temp/done/ [branch: DEBUG-v002]
2026-05-16 02:13:27
PLAN/S0169_bugfix-audio-metadata-retriever-smb-excessive-warnings.md
spec-arc
Archive S0169 (bugfix-audio-metadata-retriever-smb-excessive-warnings) -> temp/done/ [branch: DEBUG-v002]
2026-05-16 02:33:05
app_v2/src/main/res/values/strings.xml
S0192
Phase 06 Step 06.1: draw_save_ok_toast + draw_save_failed_toast (EN) [branch: DEBUG-v002]
2026-05-16 02:33:05
app_v2/src/main/res/values-ru/strings.xml
S0192
Phase 06 Step 06.1: draw_save_ok_toast + draw_save_failed_toast (RU) [branch: DEBUG-v002]
2026-05-16 02:33:05
app_v2/src/main/res/values-uk/strings.xml
S0192
Phase 06 Step 06.1: draw_save_ok_toast + draw_save_failed_toast (UK) [branch: DEBUG-v002]
2026-05-16 02:33:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0192
Phase 06 Step 06.2: DrawOverlayInPlaceSaveCallback interface + btn_draw_save rewire [branch: DEBUG-v002]
2026-05-16 02:33:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0192
Phase 06 Step 06.3: setupDrawOverlayInPlaceSaveCallback (in-place overwrite, silent fallback for read-only / non-local) [branch: DEBUG-v002]
2026-05-16 02:33:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
S0192
Phase 06 Step 06.3: invoke setupDrawOverlayInPlaceSaveCallback [branch: DEBUG-v002]
2026-05-16 02:34:14
docs/FEATURES.md
S0192
Phase 07 Step 07.2: Draw annotations bullet expanded (EN) [branch: DEBUG-v002]
2026-05-16 02:34:14
docs/FEATURES_RU.md
S0192
Phase 07 Step 07.2: Draw annotations bullet expanded (RU) [branch: DEBUG-v002]
2026-05-16 02:34:14
docs/FEATURES_UK.md
S0192
Phase 07 Step 07.2: Draw annotations bullet expanded (UK) [branch: DEBUG-v002]
2026-05-16 02:38:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0192
Insert Timber.d S0192 tags (6) for BlockNeedUserTest device verification [branch: DEBUG-v002]
2026-05-16 02:38:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawSettingsDialog.kt
S0192
Insert Timber.d S0192 tag for BlockNeedUserTest [branch: DEBUG-v002]
2026-05-16 02:38:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawColorGridDialog.kt
S0192
Insert Timber.d S0192 tag for BlockNeedUserTest [branch: DEBUG-v002]
2026-05-16 02:38:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0192
Insert Timber.d S0192 tags (2) for BlockNeedUserTest [branch: DEBUG-v002]
2026-05-16 02:38:06
PLAN/S0192_draw-editor-toolbar-ux-v2.md
S0192
Strategic spec: Status -> Implemented [branch: DEBUG-v002]
2026-05-16 02:51:43
PLAN/S0217_bugfix-image-viewer-toolbar-overflow.md
spec
Add strategic spec S0217 for image viewer toolbar overflow fix [branch: DEBUG-v002]
2026-05-16 03:01:24
PLAN/S0217_bugfix-image-viewer-toolbar-overflow.md
spec
S0217: resolve open questions (priorities stay low; OPEN_IN_SEPARATE_WINDOW included; Big Buttons same rules; no min-inline guard) [branch: DEBUG-v002]
2026-05-16 03:08:00
PLAN/S0217_bugfix-image-viewer-toolbar-overflow/INDEX.md
spec-tech
Create tactical plan for S0217 [branch: DEBUG-v002]
2026-05-16 03:08:04
PLAN/S0217_bugfix-image-viewer-toolbar-overflow/PHASE_01__planner-eligibility-flip.md
spec-tech
Phase 01: planner-eligibility-flip [branch: DEBUG-v002]
2026-05-16 03:08:07
PLAN/S0217_bugfix-image-viewer-toolbar-overflow/PHASE_02__layout-inline-buttons.md
spec-tech
Phase 02: layout-inline-buttons [branch: DEBUG-v002]
2026-05-16 03:08:11
PLAN/S0217_bugfix-image-viewer-toolbar-overflow/PHASE_03__controller-wiring.md
spec-tech
Phase 03: controller-wiring [branch: DEBUG-v002]
2026-05-16 03:08:14
PLAN/S0217_bugfix-image-viewer-toolbar-overflow/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup [branch: DEBUG-v002]
2026-05-16 03:08:18
PLAN/S0217_bugfix-image-viewer-toolbar-overflow.md
spec-tech
Status -> Tactical [branch: DEBUG-v002]
2026-05-16 03:09:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
app_v2
S0217 phase 01: barCapable flipped to true for OPEN_IN_SEPARATE_WINDOW, CROP, CROP_TO_FILE, COMPRESS_COPY, DRAW_OVERLAY [branch: DEBUG-v002]
2026-05-16 03:12:24
app_v2/src/main/res/layout/activity_player_unified.xml
app_v2
S0217 phase 02: portrait inline buttons for image-edit + open-in-separate-window [branch: DEBUG-v002]
2026-05-16 03:13:04
app_v2/src/main/res/layout-land/activity_player_unified.xml
app_v2
S0217 phase 02: landscape inline buttons for image-edit + open-in-separate-window [branch: DEBUG-v002]
2026-05-16 03:14:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
app_v2
S0217 phase 03: safeView accessors for inline image-edit buttons [branch: DEBUG-v002]
2026-05-16 03:16:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
app_v2
S0217 phase 03: wire image-edit click listeners, barViewForCommand, getOverflowableButtons, landscape per-type visibility + Timber probe [branch: DEBUG-v002]
2026-05-16 03:19:15
dev/CATALOG/app_v2.jsonl
catalog
S0217 phase 04: regenerate catalog after image-edit toolbar wiring [branch: DEBUG-v002]
2026-05-16 03:19:19
dev/CATALOG/app_v2.md
catalog
S0217 phase 04: regenerate catalog md after image-edit toolbar wiring [branch: DEBUG-v002]
2026-05-16 03:21:20
PLAN/S0217_bugfix-image-viewer-toolbar-overflow.md
spec-dev
Status Implemented -> BlockNeedUserTest (Timber.d S0217 probe present in CommandPanelController.kt) [branch: DEBUG-v002]
2026-05-16 03:28:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
app_v2
S0217 spec-check: removed BlockNeedUserTest probe Timber.d tag after Verified flip [branch: DEBUG-v002]
2026-05-16 03:28:37
PLAN/S0217_bugfix-image-viewer-toolbar-overflow.md
spec-check
Audit S0217 -> Verified; PASS/WARN/FAIL 33/0/0; Timber S0217 tag removed (1 instance) [branch: DEBUG-v002]
2026-05-16 03:47:15
PLAN/S0218_build-warnings-safe-cleanup.md
spec
S0218 build-warnings-safe-cleanup: primitive spec (3 fixes - manifest tools:replace + overridePendingTransition suppress + scaledDensity -> TypedValue.applyDimension) [branch: DEBUG-v002]
2026-05-16 03:47:23
app_v2/src/vr/AndroidManifest.xml
manifest
S0218: drop android:resizeableActivity token from tools:replace on MainActivity/SettingsActivity/WelcomeActivity (main manifest has no resizeableActivity attribute, so replace had no target -> manifest merger warning) [branch: DEBUG-v002]
2026-05-16 03:47:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
kt
S0218: @Suppress(‘DEPRECATION’) on onWelcomeLanguageSelected - overridePendingTransition(0,0) only reachable on SDK_INT<33<34 where overrideActivityTransition (API 34) is unavailable; warning is unavoidable on that branch [branch: DEBUG-v002]
2026-05-16 03:47:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawEditorPrefs.kt
kt
S0218: replace deprecated DisplayMetrics.scaledDensity (API 34+) with TypedValue.applyDimension(COMPLEX_UNIT_SP, sp, displayMetrics) - same formula, no direct field access [branch: DEBUG-v002]
2026-05-16 03:47:34
dev/CATALOG/app_v2.jsonl
catalog
S0218: catalog refresh after WelcomeActivity.kt + DrawEditorPrefs.kt edits [branch: DEBUG-v002]
2026-05-16 03:49:52
PLAN/S0218_build-warnings-safe-cleanup.md
validation
S0218: assembleStandardDebug + assembleNoLegalDebug pass; all 3 target warnings cleared (scaledDensity, overridePendingTransition, manifest tools:replace); AGP-cascade warnings remain (out of scope, blocked by S0042) [branch: DEBUG-v002]
2026-05-16 03:53:44
PLAN/S0219_bugfix-sftp-idle-retry-race.md
spec
Add strategic spec S0219 for SFTP idle/retry race (#1 wrapper Result.failure swallow, #2 idle-callback vs pool checkout race, #3 armTransport in finally) [branch: DEBUG-v002]
2026-05-16 03:55:42
PLAN/S0218_build-warnings-safe-cleanup.md
spec-check
Audit S0218 -> Verified; PASS 5 / WARN 0 / FAIL 0; debug tags removed: 2 (WelcomeActivity, DrawEditorPrefs); spec archived to temp/done/ [branch: DEBUG-v002]
2026-05-16 03:55:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
spec-check
S0218: removed Timber.d debug tag (spec Verified) [branch: DEBUG-v002]
2026-05-16 03:55:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawEditorPrefs.kt
spec-check
S0218: removed Timber.d debug tag (spec Verified) [branch: DEBUG-v002]
2026-05-16 03:58:13
PLAN/S0189_browse-create-text-notes/PHASE_05__editor-action-icons.md
spec-tech
S0189 Phase 05: dual Keep package id, resolveTargetPackage() [branch: DEBUG-v002]
2026-05-16 03:58:16
PLAN/S0189_browse-create-text-notes/PHASE_06__save-with-name.md
spec-tech
S0189 Phase 06: reuse FileOperation.Copy instead of new uploadFile method [branch: DEBUG-v002]
2026-05-16 04:00:11
PLAN/S0219_bugfix-sftp-idle-retry-race/INDEX.md
spec-tech
Create tactical plan for S0219 (4 phases: client-wrapper-unwrap, pool-active-borrow, rearm-on-finally, docs-catalog-cleanup) [branch: DEBUG-v002]
2026-05-16 04:00:14
PLAN/S0219_bugfix-sftp-idle-retry-race/PHASE_01__client-wrapper-unwrap.md
spec-tech
Phase 01 of S0219: unwrap SftpClient single-op wrappers so dead-transport exceptions reach the pool [branch: DEBUG-v002]
2026-05-16 04:00:17
PLAN/S0219_bugfix-sftp-idle-retry-race/PHASE_02__pool-active-borrow.md
spec-tech
Phase 02 of S0219: active-borrow tracking + deferred invalidate in SftpConnectionPool [branch: DEBUG-v002]
2026-05-16 04:00:21
PLAN/S0219_bugfix-sftp-idle-retry-race/PHASE_03__rearm-on-finally.md
spec-tech
Phase 03 of S0219: rearm idle timer in finally for SftpClient.withConnection and openInputStream [branch: DEBUG-v002]
2026-05-16 04:00:24
PLAN/S0219_bugfix-sftp-idle-retry-race/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04 of S0219: catalog regen, functionality log, status to BlockNeedUserTest [branch: DEBUG-v002]
2026-05-16 04:00:27
PLAN/S0219_bugfix-sftp-idle-retry-race.md
spec-tech
S0219 status -> Tactical [branch: DEBUG-v002]
2026-05-16 04:00:39
PLAN/S0185_startup-splash-screen-investigation.md
spec-update
P-1 (RU translation) and P-2(a) (restructure into strategic skeleton) applied; body rewritten in Russian per CLAUDE.md style; file paths/drawable IDs/line refs demoted to tactical PHASE_01 [branch: DEBUG-v002]
2026-05-16 04:00:42
PLAN/S0185_startup-splash-screen-investigation/INDEX.md
spec-update
Created tactical INDEX with 3-phase plan (evidence / measurement / decision); Phase 02-03 are placeholders pending Phase 01 completion [branch: DEBUG-v002]
2026-05-16 04:00:45
PLAN/S0185_startup-splash-screen-investigation/PHASE_01__evidence.md
spec-update
Created Phase 01 (evidence catalogue) - 4 steps for theme attrs, drawable chain, Application synchronous calls, baseline profile pipeline state; each step has explicit Verification predicates [branch: DEBUG-v002]
2026-05-16 04:02:47
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0219.phase01.step01.1
Unwrap listFiles: remove broad Exception catch so SftpException/IOException reach SftpConnectionPool retry (S0147 path) [branch: DEBUG-v002]
2026-05-16 04:04:04
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0219.phase01.step01.2
Unwrap stat/mkdir/deleteFile/deleteDirectory/rename: remove broad Exception catch so exceptions reach SftpConnectionPool retry [branch: DEBUG-v002]
2026-05-16 04:04:42
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0219.phase01.step01.3
Unwrap uploadFile(ByteArray): remove broad Exception catch [branch: DEBUG-v002]
2026-05-16 04:05:29
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0219.phase01.step01.4
Unwrap uploadFile(InputStream): remove broad Exception catch [branch: DEBUG-v002]
2026-05-16 04:06:04
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
S0219.phase01.step01.5
Tighten exists: keep point-catch for SSH_FX_NO_SUCH_FILE only; other errors propagate [branch: DEBUG-v002]
2026-05-16 04:27:35
docs/WHATS_NEW.md
WHATS_NEW
Release notes for v2.60.5160.425 - plateau merge from DEBUG-v002 [branch: DEBUG-v002]
2026-05-16 04:35:24
PLAN/S0220_google-tv-availability-research.md
spec
Add strategic spec S0220 for google-tv-availability-research [branch: DEBUG-v003]
2026-05-16 04:36:26
scripts/builders/build-aab-release.ps1
build
Fallback AAB/APK search in sibling directories when Gradle daemon reuse writes outputs to dev worktree instead of release worktree [branch: DEBUG-v003]
2026-05-16 04:40:00
PLAN/S0220_google-tv-availability-research/INDEX.md
spec-tech
Create tactical plan for S0220 [branch: DEBUG-v003]
2026-05-16 04:40:00
PLAN/S0220_google-tv-availability-research/PHASE_01__manifest-audit.md
spec-tech
Phase 01: manifest-audit [branch: DEBUG-v003]
2026-05-16 04:40:00
PLAN/S0220_google-tv-availability-research/PHASE_02__play-console-audit.md
spec-tech
Phase 02: play-console-audit [branch: DEBUG-v003]
2026-05-16 04:40:00
PLAN/S0220_google-tv-availability-research/PHASE_03__device-sideload-test.md
spec-tech
Phase 03: device-sideload-test [branch: DEBUG-v003]
2026-05-16 04:40:00
PLAN/S0220_google-tv-availability-research/PHASE_04__apply-manifest-fixes.md
spec-tech
Phase 04: apply-manifest-fixes [branch: DEBUG-v003]
2026-05-16 04:40:00
PLAN/S0220_google-tv-availability-research/PHASE_05__verify-tv-visibility.md
spec-tech
Phase 05: verify-tv-visibility [branch: DEBUG-v003]
2026-05-16 04:40:00
PLAN/S0220_google-tv-availability-research/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup [branch: DEBUG-v003]
2026-05-16 04:40:00
PLAN/S0220_google-tv-availability-research.md
spec-tech
Status -> Tactical [branch: DEBUG-v003]
2026-05-16 04:50:51
PLAN/S0221_play-console-deprecated-window-color-apis.md
spec
Add strategic spec S0221 - Play Console deprecated window color APIs fix [branch: DEBUG-v003]
2026-05-16 04:52:31
PLAN/S0222_play-console-large-screen-orientation.md
spec
Add strategic spec S0222 - Play Console large screen orientation restriction fix [branch: DEBUG-v003]
2026-05-16 13:26:03
app_v2/src/main/AndroidManifest.xml
S0222
Drop android:screenOrientation=sensor from all 15 src/main activities; configChanges preserved; VR manifest landscape lock untouched. Satisfies Play Console large-screen warning. [branch: DEBUG-v003]
2026-05-16 13:30:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0222
Add BlockNeedUserTest Timber tag for system-managed orientation verification (CLAUDE.md Debug Verification Tags). [branch: DEBUG-v003]
2026-05-16 13:32:27
PLAN/S0222_play-console-large-screen-orientation.md
spec-all
Pipeline BlockNeedUserTest: S0222 - manifest cleanup complete, device landscape audit deferred. [branch: DEBUG-v003]
2026-05-16 13:32:50
PLAN/S0223_instagram-photo-post-download-broken.md
S0223
Strategic spec: Instagram photo post download failure - /p/ URLs return SocialPreviewOnly despite valid session [branch: DEBUG-v003]
2026-05-16 13:32:50
PLAN/S0224_threads-batch-notification-inflated-count.md
S0224
Strategic spec: Threads batch download notification shows inflated item count (12 of 12) [branch: DEBUG-v003]
2026-05-16 13:32:50
PLAN/S0225_youtube-community-post-url-handling.md
S0225
Strategic spec: YouTube Community Post URL fails silently with generic error [branch: DEBUG-v003]
2026-05-16 13:32:50
PLAN/S0226_player-file-not-found-after-delete-optimistic-advance.md
S0226
Strategic spec: player Current file not found warning after delete + optimistic advance [branch: DEBUG-v003]
2026-05-16 13:32:50
PLAN/S0213_bugfix-video-playback-oom-hardening.md
S0213
Last Audit: memory snackbar false positive - drift-only COOLDOWN trigger fires without FAIL verdict; Timber.d tags removed; status Tactical [branch: DEBUG-v003]
2026-05-16 13:42:53
app_v2/src/main/java/com/sza/fastmediasorter/core/debug/MemoryEnduranceTracker.kt
MemoryEnduranceTracker
S0213: fix COOLDOWN_RESULT branch - guard emitFail on lastScenarioVerdict==FAIL AND drift>=50%; was firing on SUSPICIOUS/PLATEAU causing false-positive memory snackbar [branch: DEBUG-v003]
2026-05-16 13:44:26
app_v2/src/main/res/values/themes.xml
Theme.FastMediaSorter.Base
Removed deprecated transparent status/navigation bar theme items; edge-to-edge remains programmatic [branch: DEBUG-v003]
2026-05-16 13:44:26
app_v2/src/main/res/values-night/themes.xml
Theme.FastMediaSorter.Base
Removed deprecated transparent status/navigation bar theme items from night theme [branch: DEBUG-v003]
2026-05-16 13:44:26
app_v2/src/main/res/values-night-v35/themes.xml
Theme.App.BottomSheetDialog.EdgeToEdgeCompat
Added API 35 night override so BottomSheet uses enableEdgeToEdge without deprecated window color APIs [branch: DEBUG-v003]
2026-05-16 13:44:26
PLAN/S0221_play-console-deprecated-window-color-apis.md
S0221
Updated strategic spec status to Implemented after resource fix and build validation [branch: DEBUG-v003]
2026-05-16 13:46:40
app_v2/src/main/java/com/sza/fastmediasorter/core/logging/Media3OomSafeLogger.kt
Media3OomSafeLogger
S0213 BlockNeedUserTest: add Timber.d Pillar B OOM fallback probe [branch: DEBUG-v003]
2026-05-16 13:46:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
PlayerDialogAndUiStateManager
S0213 BlockNeedUserTest: add Timber.d Pillar C memory snackbar probe [branch: DEBUG-v003]
2026-05-16 13:46:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
PlayerMediaLoaderManager
S0213 BlockNeedUserTest: add Timber.d Pillar A cooldown re-entry probe [branch: DEBUG-v003]
2026-05-16 13:46:40
PLAN/S0213_bugfix-video-playback-oom-hardening.md
S0213
S0213 -> BlockNeedUserTest: Pillar C false-positive fixed; all 3 probes re-added [branch: DEBUG-v003]
2026-05-16 14:00:49
PLAN/S0223_instagram-photo-post-download-broken.md
spec-all
Strategic spec approved: S0223 - Instagram /p/ download fix; Q1 resolved (full carousel), Option B chosen (private API) [branch: DEBUG-v003]
2026-05-16 14:02:48
PLAN/S0223_instagram-photo-post-download-broken/INDEX.md
spec-all
Tactical plan created: S0223 - 5 phases; Option B (Instagram private API in HtmlPageExtractionStrategy) [branch: DEBUG-v003]
2026-05-16 14:17:29
PLAN/S0227_copy-move-panel-adaptive-layout.md
spec
Add strategic spec S0227 for copy-move-panel-adaptive-layout [branch: DEBUG-v003]
2026-05-16 14:19:52
app_v2/src/noLegal/python/ytdlp_utils.py
ytdlp_utils
S0223 Ph01: refactor _PROBE_EXCLUDED_HOSTS into _is_probe_excluded(); add IG /p/ URL-pattern exclusion to save ~10s probe time [branch: DEBUG-v003]
2026-05-16 14:19:52
app_v2/src/main/java/com/sza/fastmediasorter/data/link/StructuredMediaSniffer.kt
StructuredMediaSniffer
S0223 Ph02: add sniffInstagramApiResponse() - parses /api/v1/media/info/ JSON via existing collectThreadPost; produces EMBEDDED_JSON candidates [branch: DEBUG-v003]
2026-05-16 14:19:53
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
HtmlPageExtractionStrategy
S0223 Ph03: add Instagram private API harvest to harvestCandidates(); fetchInstagramApiCandidates, shortcodeToMediaId, isInstagramPhotoPost helpers [branch: DEBUG-v003]
2026-05-16 14:19:53
app_v2/src/test/java/com/sza/fastmediasorter/data/link/StructuredMediaSnifferTest.kt
StructuredMediaSnifferTest
S0223 Ph04: add 5 sniffInstagramApiResponse tests; add @RunWith(RobolectricTestRunner) + @Config(sdk=[34]) - fixes 7 pre-existing failures too [branch: DEBUG-v003]
2026-05-16 14:21:18
PLAN/S0223_instagram-photo-post-download-broken/INDEX.md
spec-all
Pipeline BlockNeedUserTest: S0223 - impl complete, 2 debug tags inserted, needs on-device test with Instagram /p/ URL [branch: DEBUG-v003]
2026-05-16 14:52:10
PLAN/S0226_player-file-not-found-after-delete-optimistic-advance.md
spec-all
S0226: strategic spec approved [branch: DEBUG-v003]
2026-05-16 14:54:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
PlayerManagerInitializer.onBeforeDelete
S0226: persist lastViewedFile immediately after optimistic delete advance to prevent current-file-not-found on player reopen [branch: DEBUG-v003]
2026-05-16 14:56:46
PLAN/S0226_player-file-not-found-after-delete-optimistic-advance.md
spec-check
Audit S0226 -> Verified; PASS 11 / WARN 0 / FAIL 0 [branch: DEBUG-v003]
2026-05-16 14:59:43
PLAN/S0207_radical-memory-reduction.md
S0207
Added 2026-05-16 SMB audio memory-pressure evidence and sibling follow-up references [branch: DEBUG-v003]
2026-05-16 14:59:44
PLAN/S0213_bugfix-video-playback-oom-hardening.md
S0213
Added passive SMB audio evidence for no-spurious-snackbar criterion [branch: DEBUG-v003]
2026-05-16 14:59:44
PLAN/S0219_bugfix-sftp-idle-retry-race.md
S0219
Added SMB cross-evidence and linked sibling idle-layer follow-up [branch: DEBUG-v003]
2026-05-16 14:59:45
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race.md
S0228
Created strategic spec for SMB idle-disconnect timer race from current.log [branch: DEBUG-v003]
2026-05-16 14:59:45
PLAN/S0229_bugfix-smb-audio-metadata-browse-instability.md
S0229
Created strategic spec for SMB browse audio metadata instability from current.log [branch: DEBUG-v003]
2026-05-16 14:59:45
PLAN/spec-catalog.jsonl
SpecCatalog
Registered S0228 and S0229 strategic specs [branch: DEBUG-v003]
2026-05-16 15:21:13
PLAN/S0230_tv-keyboard-navigation-coverage.md
spec
Add strategic spec S0230 for tv-keyboard-navigation-coverage [branch: DEBUG-v003]
2026-05-16 15:22:52
CLAUDE.md
all agents
Add ‘Proactive Research & Parallelism’ section: web search default ON, parallel sub-agent patterns, initiative rules [branch: DEBUG-v003]
2026-05-16 15:22:55
dev/AGENT_WORKFLOW.md
all agents
Strengthen 8.1 Research Phase: parallel sub-agents mandatory, WebSearch/WebFetch default ON with no permission gate [branch: DEBUG-v003]
2026-05-16 15:27:33
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race/INDEX.md
spec-tech
Create tactical plan index for S0228 [branch: DEBUG-v003]
2026-05-16 15:27:33
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race/PHASE_01__idle-generation-ownership.md
spec-tech
Phase 01: idle-generation-ownership [branch: DEBUG-v003]
2026-05-16 15:27:33
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race/PHASE_02__smb-timeout-entrypoint.md
spec-tech
Phase 02: smb-timeout-entrypoint [branch: DEBUG-v003]
2026-05-16 15:27:33
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race/PHASE_03__exact-once-coverage.md
spec-tech
Phase 03: exact-once-coverage [branch: DEBUG-v003]
2026-05-16 15:27:33
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup [branch: DEBUG-v003]
2026-05-16 15:27:33
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race.md
spec-tech
Status -> Tactical and tactical links for S0228 [branch: DEBUG-v003]
2026-05-16 15:27:33
PLAN/spec-catalog.jsonl
spec-tech
S0228 status Draft -> Approved -> Tactical [branch: DEBUG-v003]
2026-05-16 15:31:00
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race.md
spec-tech
Resolve S0228 research items with delegated engineering defaults [branch: DEBUG-v003]
2026-05-16 15:31:00
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race/INDEX.md
spec-tech
Unblock S0228 tactical execution by resolving pre-implementation blockers [branch: DEBUG-v003]
2026-05-16 15:32:28
app_v2/src/main/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImpl.kt
IdleDisconnectPolicyImpl
S0228 Phase 01.1: introduce TimerState and explicit shared idle state map [branch: DEBUG-v003]
2026-05-16 15:33:08
app_v2/src/main/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImpl.kt
IdleDisconnectPolicyImpl
S0228 Phase 01.2: add monotonic generation helper and wire arm/touch to fresh ownership tokens [branch: DEBUG-v003]
2026-05-16 15:33:51
app_v2/src/main/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImpl.kt
IdleDisconnectPolicyImpl
S0228 Phase 01.3: suppress stale timeout generations before callback firing [branch: DEBUG-v003]
2026-05-16 15:34:44
PLAN/S0230_tv-keyboard-navigation-coverage.md
spec-update
S0230 refinement: removed class names from strategic spec, replaced ASCII diagram, added P-1 scope expansion proposal (universal input coverage audit) [branch: DEBUG-v003]
2026-05-16 15:36:11
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
S0228 Phase 02.1: extract single SMB idle-timeout cleanup helper [branch: DEBUG-v003]
2026-05-16 15:36:38
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
S0228 Phase 02.2: route SMB idle-timeout callback through handleIdleTimeout [branch: DEBUG-v003]
2026-05-16 15:39:25
app_v2/src/test/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImplTest.kt
IdleDisconnectPolicyImplTest
S0228 Phase 03.1: add stale-generation timeout regression test [branch: DEBUG-v003]
2026-05-16 15:40:42
app_v2/src/test/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImplTest.kt
IdleDisconnectPolicyImplTest
S0228 Phase 03.2: add disarm-after-touch regression test [branch: DEBUG-v003]
2026-05-16 15:40:42
app_v2/src/test/java/com/sza/fastmediasorter/data/network/smb/SmbConnectionManagerTest.kt
SmbConnectionManagerTest
S0228 Phase 03.3: freeze SMB transport-key contract with named idle policy mock [branch: DEBUG-v003]
2026-05-16 15:41:08
PLAN/S0230_tv-keyboard-navigation-coverage.md
spec-update P-1
S0230 scope expanded: universal input coverage audit (touch/mouse/keyboard/TV-remote/joystick/accessibility) across all activities and dialogs; title, §1-§6, §11 rewritten [branch: DEBUG-v003]
2026-05-16 15:44:50
app_v2/src/main/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImpl.kt
IdleDisconnectPolicyImpl
S0228 Phase 04.4: add BlockNeedUserTest debug probe for latest idle timeout acceptance [branch: DEBUG-v003]
2026-05-16 15:44:50
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
SmbConnectionManager
S0228 Phase 04.4: add BlockNeedUserTest debug probe for SMB idle cleanup [branch: DEBUG-v003]
2026-05-16 15:44:50
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race.md
spec-dev
S0228 status -> BlockNeedUserTest and implemented date [branch: DEBUG-v003]
2026-05-16 15:44:50
PLAN/spec-catalog.jsonl
spec-dev
S0228 status In Progress -> BlockNeedUserTest [branch: DEBUG-v003]
2026-05-16 15:46:40
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race/INDEX.md
spec-dev
S0228 tactical plan finalized in BlockNeedUserTest state [branch: DEBUG-v003]
2026-05-16 15:46:40
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race/PHASE_04__docs-catalog-cleanup.md
spec-dev
S0228 Phase 04 finalized after catalog, functionality log, and BlockNeedUserTest transition [branch: DEBUG-v003]
2026-05-16 16:00:24
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
SftpConnectionPool
S0219 Phase 02: rename activeStreamCount→activeBorrowCount; track FILE_OPS borrows with activeBorrowCount; defer session disconnect until last borrower releases (disconnectOrphan) [branch: DEBUG-v003]
2026-05-16 16:00:24
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SftpClient
S0219 Phase 03: move armTransport rearm to finally block in withConnection+openInputStream; rearm on failure too, not only success; skip rearm on CancellationException (S0205) [branch: DEBUG-v003]
2026-05-16 16:02:17
PLAN/S0219_bugfix-sftp-idle-retry-race.md
spec-all
Pipeline BlockNeedUserTest: S0219 all 4 phases implemented, build PASS, 13 debug tags [branch: DEBUG-v003]
2026-05-16 16:09:57
dev/CATALOG/app_v2.jsonl
Catalog
[S0207] Phase 08.1: regenerated catalog; roles set for 12 new classes (MemoryProbe, MemoryProfileCoordinator, IdleDisconnectPolicy, NativePressureMonitor, DeferredStartupWorker, FirstFrameSignal, etc.) [branch: DEBUG-v003]
2026-05-16 16:13:29
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProbeImpl.kt
MemoryProbeImpl
[S0207] Phase 08: add BlockNeedUserTest debug tag at record() entry point [branch: DEBUG-v003]
2026-05-16 16:13:29
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryProfileCoordinatorImpl.kt
MemoryProfileCoordinatorImpl
[S0207] Phase 08: add BlockNeedUserTest debug tag at enter() entry point [branch: DEBUG-v003]
2026-05-16 16:13:29
app_v2/src/main/java/com/sza/fastmediasorter/core/memory/MemoryPressureDecodeFormatResolver.kt
MemoryPressureDecodeFormatResolver
[S0207] Phase 08: add BlockNeedUserTest debug tag at decodeFormat() entry point [branch: DEBUG-v003]
2026-05-16 16:13:30
app_v2/src/main/java/com/sza/fastmediasorter/worker/DeferredStartupWorker.kt
DeferredStartupWorker
[S0207] Phase 08: add BlockNeedUserTest debug tag at doWork() entry point [branch: DEBUG-v003]
2026-05-16 16:13:30
app_v2/src/main/java/com/sza/fastmediasorter/core/init/FirstFrameSignal.kt
FirstFrameSignal
[S0207] Phase 08: add BlockNeedUserTest debug tag at signal() entry point [branch: DEBUG-v003]
2026-05-16 16:14:19
PLAN/S0207_radical-memory-reduction/INDEX.md
S0207
[S0207] Phase 08 In Progress: catalog regen + roles done, changelog 100 entries, functionality FIX entry added, Step 08.4 deferred to BlockNeedUserTest; 5 debug tags inserted at flow entry points [branch: DEBUG-v003]
2026-05-16 16:22:58
PLAN/S0229_bugfix-smb-audio-metadata-browse-instability/INDEX.md
spec-all
S0229: tactical plan authored - exception-policy-handler-fix + docs-catalog-cleanup phases [branch: DEBUG-v003]
2026-05-16 16:22:58
PLAN/S0229_bugfix-smb-audio-metadata-browse-instability/PHASE_01__exception-policy-handler-fix.md
spec-all
S0229: Phase 01 tactical plan - runInterruptible + EOFException downgrade + semaphore reduction [branch: DEBUG-v003]
2026-05-16 16:22:58
PLAN/S0229_bugfix-smb-audio-metadata-browse-instability/PHASE_02__docs-catalog-cleanup.md
spec-all
S0229: Phase 02 tactical plan - catalog + changelog + functionality log + device acceptance [branch: DEBUG-v003]
2026-05-16 16:27:05
app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt
AudioMetadataLoader
S0229: reduce semaphore 3->2, downgrade EOFException/IOException to debug, wrap future.get() with runInterruptible [branch: DEBUG-v003]
2026-05-16 16:35:58
PLAN/S0125_settings-activity-revision/INDEX.md
spec-all
S0125: tactical plan authored - 5-phase settings IA revision (inventory, naming, search, IA/visual, cleanup) [branch: DEBUG-v003]
2026-05-16 16:35:58
PLAN/S0125_settings-activity-revision/PHASE_01__settings-inventory-baseline.md
spec-all
S0125: Phase 01 tactical plan - settings inventory baseline [branch: DEBUG-v003]
2026-05-16 16:35:58
PLAN/S0125_settings-activity-revision/PHASE_02__naming-consistency-fixes.md
spec-all
S0125: Phase 02 tactical plan - naming consistency fixes [branch: DEBUG-v003]
2026-05-16 16:35:58
PLAN/S0125_settings-activity-revision/PHASE_03__search-multilingual-corpus.md
spec-all
S0125: Phase 03 tactical plan - search multilingual corpus [branch: DEBUG-v003]
2026-05-16 16:35:58
PLAN/S0125_settings-activity-revision/PHASE_04__ia-restructure-visual.md
spec-all
S0125: Phase 04 tactical plan - IA restructure and visual contract [branch: DEBUG-v003]
2026-05-16 16:35:58
PLAN/S0125_settings-activity-revision/PHASE_05__docs-catalog-cleanup.md
spec-all
S0125: Phase 05 tactical plan - docs/catalog cleanup [branch: DEBUG-v003]
2026-05-16 16:44:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
SettingsSearchIndex
S0125 Phase02: rename enum DESTINATIONS->OPERATIONS, all usages updated [branch: DEBUG-v003]
2026-05-16 16:44:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
S0125 Phase02: update tab 3 string key reference settings_tab_destinations->settings_tab_operations [branch: DEBUG-v003]
2026-05-16 16:44:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchAdapter.kt
SettingsSearchAdapter
S0125 Phase02: update settings_tab_destinations->settings_tab_operations reference [branch: DEBUG-v003]
2026-05-16 16:44:52
app_v2/src/main/res/values/strings.xml
strings.xml
S0125 Phase02: rename string key settings_tab_destinations->settings_tab_operations (value unchanged) [branch: DEBUG-v003]
2026-05-16 16:44:52
app_v2/src/main/res/layout/activity_settings.xml
activity_settings
S0125 Phase02: update TabItem string ref to settings_tab_operations [branch: DEBUG-v003]
2026-05-16 16:48:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
SettingsSearchIndex
S0125 Phase03: add RU+UK keywords to all 45 SettingsSearchRegistry entries (multilingual search corpus) [branch: DEBUG-v003]
2026-05-16 17:03:42
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
S0125 Phase 04.3: Wrap About/info/legal zone in labeled MaterialCardView (portrait) [branch: DEBUG-v003]
2026-05-16 17:03:42
app_v2/src/main/res/layout-land/fragment_settings_general.xml
fragment_settings_general (landscape)
S0125 Phase 04.3: Wrap About/info/legal zone in labeled MaterialCardView (landscape) [branch: DEBUG-v003]
2026-05-16 17:03:42
app_v2/src/main/res/layout-land/fragment_settings_destinations.xml
fragment_settings_destinations (landscape)
S0125 Phase 04.5: Create landscape variant with content-width cap (600dp ConstraintLayout) [branch: DEBUG-v003]
2026-05-16 17:03:42
app_v2/src/main/res/values/strings.xml
strings
S0125: Add settings_category_about EN/RU/UK strings [branch: DEBUG-v003]
2026-05-16 17:03:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
S0125 Phase 04.3: Add BlockNeedUserTest debug tag for About card [branch: DEBUG-v003]
2026-05-16 17:03:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
OperationsSettingsFragment
S0125 Phase 04.5: Add Timber import + BlockNeedUserTest debug tag for landscape layout [branch: DEBUG-v003]
2026-05-16 17:06:55
PLAN/S0125_settings-activity-revision/PHASE_04__ia-restructure-visual.md
S0125 Phase 04
Phase 04 all steps done; spec set to BlockNeedUserTest pending device visual verification [branch: DEBUG-v003]
2026-05-16 17:16:42
app_v2/src/main/java/com/sza/fastmediasorter/core/input/TvNavAction.kt, TvKeyRouter.kt, core/ui/BaseActivity.kt, ui/welcome/WelcomeActivity.kt, res/layout/activity_welcome.xml
standardDebug
S0230: add TvKeyRouter + TvNavAction; wire into BaseActivity.dispatchKeyEvent with onTvNavigation hook; implement WelcomeActivity D-pad slider navigation; add focusable attrs to welcome nav buttons [branch: DEBUG-v003]
2026-05-16 17:38:31
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
noLegalDebug
S0176: added BlockNeedUserTest probe tags (Timber.d) at applySessionContext entry and eTLD+1 fallback branch; status advanced to BlockNeedUserTest [branch: DEBUG-v003]
2026-05-16 17:40:54
PLAN/S0221_play-console-deprecated-window-color-apis.md
spec-audit
S0221: verified - deprecated window color APIs removed from all theme files, values-night-v35 override confirmed present [branch: DEBUG-v003]
2026-05-16 17:49:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt
standardDebug
S0227: adaptive row distribution - width-aware single-row collapse + font scaling via computeMaxPerRow/computeFontSizeSp [branch: DEBUG-v003]
2026-05-16 17:49:11
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManagerTest.kt
standardDebug
S0227: unit tests for computeMaxPerRow and computeFontSizeSp - 14 cases, all pass [branch: DEBUG-v003]
2026-05-16 17:51:53
PLAN/S0227_copy-move-panel-adaptive-layout/
standardDebug
S0227: tactical spec - INDEX.md + 3 phase files created; status Tactical→In Progress→Implemented→Verified [branch: DEBUG-v003]
2026-05-16 18:02:45
PLAN/S0220_google-tv-availability-research/PHASE_01__manifest-audit.md
S0220
S0220 Phase 01: manifest audit complete - 6/7 research questions resolved, BLOCKER A identified (XML banner placeholder) [branch: DEBUG-v003]
2026-05-16 18:02:49
app_v2/src/main/res/drawable-xhdpi/tv_banner.png
S0220
S0220 Phase 04 Step 4.5: replace XML tv_banner placeholder with proper 320x180 raster PNG at 5 densities (mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi) [branch: DEBUG-v003]
2026-05-16 18:04:06
PLAN/S0220_google-tv-availability-research/INDEX.md
spec-dev
S0220: tactical plan updated, Phase 01 done, Phase 04 partial (banner fix applied), S0220 -> BlockNeedUserTest awaiting manual Play Console + device verification [branch: DEBUG-v003]
2026-05-16 18:11:20
PLAN/S0185_startup-splash-screen-investigation/
DEBUG-v003
S0185 Phase 01 (evidence) completed: theme attrs, drawable chain, Application startup call inventory, baseline profile gap documented. Phase 02 and 03 templates created. Spec status: BlockExternal (needs device measurement). [branch: DEBUG-v003]
2026-05-16 19:24:12
app_v2/src/main/java/com/sza/fastmediasorter/util/GoogleKeepAvailabilityChecker.kt
GoogleKeepAvailabilityChecker
S0189: new class; checks Keep availability via ACTION_SEND intent probe [branch: DEBUG-v003]
2026-05-16 19:24:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorDirtyStateTracker.kt
TextEditorDirtyStateTracker
S0189: new class; StateFlow dirty-state tracker via TextWatcher [branch: DEBUG-v003]
2026-05-16 19:24:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorActionPanelManager.kt
TextEditorActionPanelManager
S0189: new class; 5-button editor panel with dirty-state tint [branch: DEBUG-v003]
2026-05-16 19:24:12
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/TextNoteNameConflictResolver.kt
TextNoteNameConflictResolver
S0189: new object; resolves filename conflicts via seconds-suffix [branch: DEBUG-v003]
2026-05-16 19:24:13
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveTextNoteUseCase.kt
SaveTextNoteUseCase
S0189: new use case; saves local or staged network text note with conflict resolution [branch: DEBUG-v003]
2026-05-16 19:24:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextNoteSaveDialog.kt
TextNoteSaveDialog
S0189: new dialog object; save-with-rename for text notes [branch: DEBUG-v003]
2026-05-16 19:24:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorSaveFlow.kt
TextEditorSaveFlow
S0189: new class; orchestrates save dialog and coroutine for text note commit [branch: DEBUG-v003]
2026-05-16 19:24:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorAutoFitFontManager.kt
TextEditorAutoFitFontManager
S0189: new class; auto-fits EditText font size to viewport; locks on swipe [branch: DEBUG-v003]
2026-05-16 19:24:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
S0189: wire saveFlow, autoFitFontManager, actionPanelManager; remove btnSaveText refs [branch: DEBUG-v003]
2026-05-16 19:24:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt
PlayerViewerFactory
S0189: instantiate TextEditorSaveFlow and pass to TextViewerManager [branch: DEBUG-v003]
2026-05-16 19:24:30
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
PlayerActivity
S0189: add @Inject saveTextNoteUseCase [branch: DEBUG-v003]
2026-05-16 19:24:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
PlayerBindingSafeViews
S0189: add textEditScrollView safe view; remove btnSaveText/btnCancelEdit [branch: DEBUG-v003]
2026-05-16 19:24:31
app_v2/src/main/res/layout/player_text_viewer_container_content.xml
player_text_viewer_container_content
S0189: add id=textEditScrollView; replace 2-button panel with 5-button action panel [branch: DEBUG-v003]
2026-05-16 19:24:31
app_v2/src/main/res/layout-land/player_text_viewer_container_content.xml
player_text_viewer_container_content_land
S0189: landscape parity - same textEditScrollView id and 5-button panel [branch: DEBUG-v003]
2026-05-16 19:24:31
app_v2/src/main/res/values/strings.xml
strings_EN
S0189: add text_editor_ and text_note_save_ keys [branch: DEBUG-v003]
2026-05-16 19:24:32
app_v2/src/main/res/values-ru/strings.xml
strings_RU
S0189: add text_editor_ and text_note_save_ keys [branch: DEBUG-v003]
2026-05-16 19:24:32
app_v2/src/main/res/values-uk/strings.xml
strings_UK
S0189: add text_editor_ and text_note_save_ keys [branch: DEBUG-v003]
2026-05-16 19:24:41
docs/FEATURES.md
FEATURES
S0189: add text note creation and editor actions bullets to section 13 [branch: DEBUG-v003]
2026-05-16 19:24:41
docs/FEATURES_RU.md
FEATURES_RU
S0189: add Russian bullets for new text editor features in section 13 [branch: DEBUG-v003]
2026-05-16 19:24:41
docs/FEATURES_UK.md
FEATURES_UK
S0189: add Ukrainian bullets for new text editor features in section 13 [branch: DEBUG-v003]
2026-05-16 19:32:26
PLAN/S0216_playback-order-bottom-bar.md
S0216
Audit complete: all §11 criteria verified; status set to Verified [branch: DEBUG-v003]
2026-05-16 19:53:18
scripts/release/gen_fastlane_changelog.ps1
gen_fastlane_changelog
Fix locale-specific release markers for RU/UK WHATS_NEW files; add CurrentReleasePrefix per-locale support (S0215 Phase 04) [branch: DEBUG-v003]
2026-05-16 19:53:18
scripts/builders/build-aab-release.ps1
build-aab-release
Hook fastlane changelog generator (gen_fastlane_changelog.ps1) into release flow after APK build (S0215 Phase 04) [branch: DEBUG-v003]
2026-05-16 19:53:18
fastlane/metadata/android/en-US/changelogs/260516193.txt
fastlane-changelogs
Seed changelog for versionCode 260516193 (EN) - Draw editor v2, file size in browse list (S0215 Phase 04) [branch: DEBUG-v003]
2026-05-16 19:53:18
fastlane/metadata/android/ru-RU/changelogs/260516193.txt
fastlane-changelogs
Seed changelog for versionCode 260516193 (RU) (S0215 Phase 04) [branch: DEBUG-v003]
2026-05-16 19:53:18
fastlane/metadata/android/uk-UA/changelogs/260516193.txt
fastlane-changelogs
Seed changelog for versionCode 260516193 (UK) (S0215 Phase 04) [branch: DEBUG-v003]
2026-05-16 19:57:17
README.md
README
Add IzzyOnDroid badge with canonical deep-link - EN caption ‘Download’ (S0215 Phase 06) [branch: DEBUG-v003]
2026-05-16 19:57:17
docs/README_RU.md
README_RU
Add IzzyOnDroid badge - RU caption ‘Скачать’ (S0215 Phase 06) [branch: DEBUG-v003]
2026-05-16 19:57:17
docs/README_UK.md
README_UK
Add IzzyOnDroid badge - UK caption ‘Завантажити’ (S0215 Phase 06) [branch: DEBUG-v003]
2026-05-16 19:59:35
PLAN/S0215_fdroid-publish-research/INDEX.md
S0215
Phase 04-07 complete: changelog pipeline, IzzyOnDroid submission draft, README badges; status BlockExternal pending owner submission [branch: DEBUG-v003]
2026-05-16 20:43:57
PLAN/S0200_google-account-central-binding.md
spec-tech
Status Approved -> Tactical; clarified §3.2 flavor scope to all SUPPORT_CLOUD=true via cloudEnabled/cloudDisabled split [branch: DEBUG-v003]
2026-05-16 20:43:57
PLAN/S0200_google-account-central-binding/INDEX.md
spec-tech
Create tactical plan for S0200 (7 phases, COMPLEX path) [branch: DEBUG-v003]
2026-05-16 20:43:57
PLAN/S0200_google-account-central-binding/PHASE_01__identity-foundations.md
spec-tech
Phase 01: identity-foundations - deps, source sets, domain types, no-op binding [branch: DEBUG-v003]
2026-05-16 20:43:58
PLAN/S0200_google-account-central-binding/PHASE_02__credential-manager-impl.md
spec-tech
Phase 02: credential-manager-impl - real CredentialManager repo + token issuer + encrypted store + Hilt [branch: DEBUG-v003]
2026-05-16 20:43:58
PLAN/S0200_google-account-central-binding/PHASE_03__cct-google-domain-routing.md
spec-tech
Phase 03: cct-google-domain-routing - host matcher, CCT availability checker, launcher, manifest queries, refusal UX [branch: DEBUG-v003]
2026-05-16 20:43:58
PLAN/S0200_google-account-central-binding/PHASE_04__drive-identity-migration.md
spec-tech
Phase 04: drive-identity-migration - remove GoogleSignIn; coordinator/plugin/rest/thumbnail/add-resource/browse/backup-restore migrated to identity domain [branch: DEBUG-v003]
2026-05-16 20:43:58
PLAN/S0200_google-account-central-binding/PHASE_05__auth-wipe-and-resource-state.md
spec-tech
Phase 05: auth-wipe-and-resource-state - first-launch legacy wipe + ResourceEntity.needsSignIn Room migration [branch: DEBUG-v003]
2026-05-16 20:43:58
PLAN/S0200_google-account-central-binding/PHASE_06__settings-card-ui.md
spec-tech
Phase 06: settings-card-ui - Google Account card (portrait + landscape), VM/helper, ResourceAdapter indicator, trilingual strings [branch: DEBUG-v003]
2026-05-16 20:43:58
PLAN/S0200_google-account-central-binding/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup - FEATURES trilingual, catalog sync, changelog batch, functionality log [branch: DEBUG-v003]
2026-05-16 20:47:41
app_v2/build.gradle.kts
spec-dev
S0200 Step 01.1: add androidx.credentials + googleid + androidx.browser deps for Credential Manager + CCT routing [branch: DEBUG-v003]
2026-05-16 20:48:34
app_v2/build.gradle.kts
spec-dev
S0200 Step 01.2: declare cloudEnabled (standard/noLegal/photos/legacy/vr/vrUnlicensed) and cloudDisabled (lite) source sets per S0116 streamingEnabled pattern [branch: DEBUG-v003]
2026-05-16 20:49:02
app_v2/src/cloudEnabled/java/.gitkeep
spec-dev
S0200 Step 01.3: cloudEnabled source set placeholder [branch: DEBUG-v003]
2026-05-16 20:49:02
app_v2/src/cloudDisabled/java/.gitkeep
spec-dev
S0200 Step 01.3: cloudDisabled source set placeholder [branch: DEBUG-v003]
2026-05-16 20:50:21
app_v2/src/main/java/com/sza/fastmediasorter/domain/identity/GoogleScope.kt
spec-dev
S0200 Step 01.4: GoogleScope value class with DRIVE/DRIVE_READONLY/EMAIL/PROFILE/OPENID constants [branch: DEBUG-v003]
2026-05-16 20:50:21
app_v2/src/main/java/com/sza/fastmediasorter/domain/identity/GoogleAccessToken.kt
spec-dev
S0200 Step 01.4: GoogleAccessToken data class with scopes + expiresAt [branch: DEBUG-v003]
2026-05-16 20:51:05
app_v2/src/main/java/com/sza/fastmediasorter/domain/identity/PrimaryGoogleAccount.kt
spec-dev
S0200 Step 01.5: PrimaryGoogleAccount data class [branch: DEBUG-v003]
2026-05-16 20:51:05
app_v2/src/main/java/com/sza/fastmediasorter/domain/identity/PrimaryGoogleAccountState.kt
spec-dev
S0200 Step 01.5: PrimaryGoogleAccountState sealed interface + NeedsResignInReason + IdentityFailureReason enums [branch: DEBUG-v003]
2026-05-16 20:51:59
app_v2/src/main/java/com/sza/fastmediasorter/domain/identity/IdentitySignInResult.kt
spec-dev
S0200 Step 01.6: IdentitySignInResult sealed interface [branch: DEBUG-v003]
2026-05-16 20:51:59
app_v2/src/main/java/com/sza/fastmediasorter/domain/identity/GoogleIdentityRepository.kt
spec-dev
S0200 Step 01.6: GoogleIdentityRepository contract (primary + multi-account + scoped tokens) [branch: DEBUG-v003]
2026-05-16 20:52:49
app_v2/src/cloudDisabled/java/com/sza/fastmediasorter/identity/NoOpGoogleIdentityRepository.kt
spec-dev
S0200 Step 01.7: NoOpGoogleIdentityRepository for lite flavor [branch: DEBUG-v003]
2026-05-16 20:52:49
app_v2/src/cloudDisabled/java/com/sza/fastmediasorter/identity/di/NoOpIdentityModule.kt
spec-dev
S0200 Step 01.7: NoOpIdentityModule Hilt binding for cloudDisabled source set [branch: DEBUG-v003]
2026-05-16 21:03:11
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/PrimaryGoogleAccountStore.kt
spec-dev
S0200 Step 02.1: PrimaryGoogleAccountStore encrypted prefs (no plaintext fallback) [branch: DEBUG-v003]
2026-05-16 21:03:11
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/GoogleTokenIssuer.kt
spec-dev
S0200 Step 02.2: GoogleTokenIssuer mutex-serialised access-token cache with silent refresh [branch: DEBUG-v003]
2026-05-16 21:06:57
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt
spec-dev
S0200 Step 02.3: CredentialManagerGoogleIdentityRepository (Credential Manager + Token Issuer + store; primary + secondary + scope expansion) [branch: DEBUG-v003]
2026-05-16 21:06:58
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/di/IdentityModule.kt
spec-dev
S0200 Step 02.4: IdentityModule Hilt binding (cloudEnabled) + googleWebClientId provider [branch: DEBUG-v003]
2026-05-16 21:08:42
PLAN/spec-catalog.jsonl
spec-next
Session: 1 processed (S0200 Approved -> In Progress), 0 verified, 0 newly blocked. Architectural core (Phase 01 + Phase 02 4/6) landed for S0200; remaining tests + phases 03-07 deferred to next /spec-next cycle. [branch: DEBUG-v003]
2026-05-16 21:19:16
app_v2/src/test/java/com/sza/fastmediasorter/identity/PrimaryGoogleAccountStateTest.kt
spec-dev
S0200 Step 02.5: PrimaryGoogleAccountStateTest unit test (5 tests) - run deferred due to pre-existing broken sibling tests blocking testNoLegalDebug compile [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/main/AndroidManifest.xml
spec-dev
S0200 Step 03.1: CCT package-visibility queries (ACTION_VIEW https BROWSABLE + CustomTabsService action) for API 30+ [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/main/java/com/sza/fastmediasorter/data/browser/GoogleDomainMatcher.kt
spec-dev
S0200 Step 03.2: GoogleDomainMatcher host predicate (single source of truth for Google OAuth domain routing) [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/main/java/com/sza/fastmediasorter/data/browser/CctAvailabilityChecker.kt
spec-dev
S0200 Step 03.3: CctAvailabilityChecker resolves any CCT-capable browser via ignoreDefault=true [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/main/java/com/sza/fastmediasorter/data/browser/CctUnavailableException.kt
spec-dev
S0200 Step 03.3: CctUnavailableException sentinel [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/main/java/com/sza/fastmediasorter/data/browser/GoogleDomainBrowserLauncher.kt
spec-dev
S0200 Step 03.4: GoogleDomainBrowserLauncher route-by-host with WebView fallback [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/main/res/values/strings_s0200.xml
spec-dev
S0200 Step 03.6: EN strings - CCT unavailable refusal (title/message/retry) per COMMUNICATION_POLICY 2.3 [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/main/res/values-ru/strings_s0200.xml
spec-dev
S0200 Step 03.6: RU strings - CCT unavailable refusal [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/main/res/values-uk/strings_s0200.xml
spec-dev
S0200 Step 03.6: UK strings - CCT unavailable refusal [branch: DEBUG-v003]
2026-05-16 21:24:44
app_v2/src/test/java/com/sza/fastmediasorter/data/browser/GoogleDomainMatcherTest.kt
spec-dev
S0200 Step 03.6: GoogleDomainMatcherTest Robolectric test (8 cases) - run deferred per project test breakage [branch: DEBUG-v003]
2026-05-16 21:26:29
PLAN/spec-catalog.jsonl
spec-next
Session: S0200 continued In Progress -> Phase 02 closed (with deferred tests), Phase 03 5/6 (03.5 wiring deferred). Standard+lite builds PASS. Catalog regenerated. [branch: DEBUG-v003]
2026-05-16 21:33:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt
DestinationButtonsManager
S0227: switched copy/move destination layout to measured panel width with post-layout fallback and autosize text caps [branch: DEBUG-v003]
2026-05-16 21:33:25
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManagerTest.kt
DestinationButtonsManagerTest
S0227: added unit coverage for adaptive button width and font cap helpers [branch: DEBUG-v003]
2026-05-16 21:42:57
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
LinkAutoDownloadCoordinator
Short-circuited YouTube community post URLs before extraction. [branch: DEBUG-v003]
2026-05-16 21:42:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
LinkAutoDownloadResultPresenter
Mapped the new YouTube community post failure to a specific user message. [branch: DEBUG-v003]
2026-05-16 21:42:58
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
LinkDownloadWorker
Added a specific notification branch and Open action for unsupported YouTube community posts. [branch: DEBUG-v003]
2026-05-16 21:42:58
app_v2/src/main/res/values/strings.xml
strings.xml
Added the English message for unsupported YouTube community posts. [branch: DEBUG-v003]
2026-05-16 21:42:59
app_v2/src/main/res/values-ru/strings.xml
strings.xml (ru)
Added the Russian message for unsupported YouTube community posts. [branch: DEBUG-v003]
2026-05-16 21:42:59
app_v2/src/main/res/values-uk/strings.xml
strings.xml (uk)
Added the Ukrainian message for unsupported YouTube community posts. [branch: DEBUG-v003]
2026-05-16 21:42:59
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
LinkAutoDownloadCoordinatorTest
Added a regression test for YouTube community post short-circuiting. [branch: DEBUG-v003]
2026-05-16 21:43:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListFragment.kt
spec-dev
S0200 Step 03.5: route Google-domain auth URLs to CCT via GoogleDomainBrowserLauncher; private openAuthWebView helper wraps 4 call sites; refusal dialog on CctUnavailableException [branch: DEBUG-v003]
2026-05-16 21:43:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
spec-dev
S0200 Step 03.5: route Google-domain auth URLs to CCT; ctor-injected launcher+checker; private openAuthFlow helper wraps AuthRequired + social re-auth call sites [branch: DEBUG-v003]
2026-05-16 21:43:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt
spec-dev
S0200 Step 03.5: route Google-domain auth URLs to CCT; @Inject launcher+checker; private openAuthFlow + showCctUnavailableDialog [branch: DEBUG-v003]
2026-05-16 21:44:15
PLAN/spec-catalog.jsonl
spec-next
Session: S0200 advanced - Phase 03 closed (CCT routing wired at 3 call-site files; 7+ direct WebView calls now host-aware). 3/7 phases done. Build standardDebug PASS. [branch: DEBUG-v003]
2026-05-16 21:49:32
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
spec-dev
S0200 Step 04.1: backup + remove @file:Suppress DEPRECATION; deprecation warnings now surface until Phase 04 migration complete [branch: DEBUG-v003]
2026-05-16 21:49:32
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthCoordinator.kt
spec-dev
S0200 Step 04.1: backup + remove @file:Suppress DEPRECATION [branch: DEBUG-v003]
2026-05-16 21:49:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt
spec-dev
S0200 Step 04.1: backup + remove @file:Suppress DEPRECATION [branch: DEBUG-v003]
2026-05-16 21:49:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
spec-dev
S0200 Step 04.1: backup + remove @file:Suppress DEPRECATION [branch: DEBUG-v003]
2026-05-16 21:49:32
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/helpers/GoogleDriveCredentialsManager.kt
spec-dev
S0200 Step 04.1: backup + remove @file:Suppress DEPRECATION [branch: DEBUG-v003]
2026-05-16 21:49:32
PLAN/spec-catalog.jsonl
spec-next
Session: S0200 Step 04.1 only (backup + DEPRECATION suppress removal); Phase 04 1/8. Steps 04.2-04.8 form atomic migration cluster - deferred to dedicated round. [branch: DEBUG-v003]
2026-05-16 22:00:18
app_v2/src/main/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicy.kt
CandidateSelectionPolicy
Added authoritative batch pool so batch totals follow embedded-json slide counts [branch: DEBUG-v003]
2026-05-16 22:00:18
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
InvisibleWebViewExtractionStrategy
Restricted dynamic batch items to authoritative embedded-json candidates for accurate notification totals [branch: DEBUG-v003]
2026-05-16 22:00:18
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
LinkDownloadWorker
Logged batch notification total used for S0224 verification [branch: DEBUG-v003]
2026-05-16 22:00:18
app_v2/src/test/java/com/sza/fastmediasorter/data/link/CandidateSelectionPolicyTest.kt
CandidateSelectionPolicyTest
Added S0224 regression coverage for authoritative batch pool selection [branch: DEBUG-v003]
2026-05-16 22:03:54
PLAN/S0200_google-account-central-binding/PHASE_04__drive-identity-migration.md
spec-all
S0200 Phase 04 deferral analysis: atomic-cluster confirmed via call-site inventory; proposed 04a/04b/04c decomposition + Open Question paragraph [branch: DEBUG-v003]
2026-05-16 22:03:59
PLAN/S0200_google-account-central-binding.md
spec-all
S0200 strategic: added Open Question - Phase 04 monolith vs 04a/04b/04c split decision (decomposition proposal) [branch: DEBUG-v003]
2026-05-16 22:04:00
PLAN/S0200_google-account-central-binding/INDEX.md
spec-all
S0200 tactical INDEX: Blockers Log entry - Phase 04 atomic-cluster decomposition proposal [branch: DEBUG-v003]
2026-05-16 22:04:22
PLAN/S0200_google-account-central-binding.md
spec-all
Pipeline Incomplete: S0200 round 2 - Phase 04 atomic-cluster decomposition documented; awaiting operator A/B decision on monolith vs 04a/04b/04c split [branch: DEBUG-v003]
2026-05-16 22:05:42
PLAN/spec-catalog.jsonl
spec-next
Session: 1 processed (S0200), 0 verified, 1 blocked (BlockQuestions). Top remaining: S0187 (blocker pending), S0174 (mixed blockers), S0184 (Approved, needs tactical) [branch: DEBUG-v003]
2026-05-16 22:14:39
app_v2/src/test/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategyTest.kt
HtmlPageExtractionStrategyTest
Added S0223 regression tests for Instagram API fallback in html extraction strategy [branch: DEBUG-v003]
2026-05-16 22:25:42
PLAN/S0223_instagram-photo-post-download-broken.md
spec-update
Aligned strategic spec status with BlockNeedUserTest and recorded implemented date [branch: DEBUG-v003]
2026-05-16 22:28:54
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthCoordinator.kt
GoogleDriveAuthCoordinator
S0200 Phase 04a.1: inject GoogleIdentityRepository ctor param (additive, unused, reserved for 04b) [branch: DEBUG-v003]
2026-05-16 22:28:55
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
S0200 Phase 04a.2: inject GoogleIdentityRepository + propagate to GoogleDriveAuthCoordinator (additive) [branch: DEBUG-v003]
2026-05-16 22:28:57
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt
GoogleDriveAuthPlugin
S0200 Phase 04a.3: inject GoogleIdentityRepository ctor param (additive, unused, reserved for 04b) [branch: DEBUG-v003]
2026-05-16 22:28:59
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/glide/GoogleDriveThumbnailModelLoader.kt
GoogleDriveThumbnailDataFetcher
S0200 Phase 04a.4: scaffold ThumbnailIdentityEntryPoint Hilt accessor (additive, not yet invoked) [branch: DEBUG-v003]
2026-05-16 22:30:04
PLAN/S0200_google-account-central-binding/PHASE_04A__token-source-plumbing.md
spec-all
S0200 round 3: Phase 04a Done (4/4 steps); 04b/04c queued; build closure standardDebug+liteDebug+noLegalDebug PASS [branch: DEBUG-v003]
2026-05-16 22:50:41
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthCoordinator.kt
GoogleDriveAuthCoordinator
S0200 Phase 04b.1: full rewrite - identity-domain replaces GoogleSignIn/GoogleAuthUtil silent refresh; deprecated stubs for compile compat [branch: DEBUG-v003]
2026-05-16 22:50:43
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt
GoogleDriveRestClient
S0200 Phase 04b.2: 20 auth.accessToken reads switched to suspend currentAccessToken(); signOut delegates to identityRepository.signOutPrimary; bridge stubs deprecated [branch: DEBUG-v003]
2026-05-16 22:50:45
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt
GoogleDriveAuthPlugin
S0200 Phase 04b.3: startInteractiveSignIn bridges to identityRepository.signInPrimary via SupervisorJob coroutine; processIntentResult returns null [branch: DEBUG-v003]
2026-05-16 22:50:47
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/glide/GoogleDriveThumbnailModelLoader.kt
GoogleDriveThumbnailDataFetcher
S0200 Phase 04b.5: getAccessToken sources from identity-domain via ThumbnailIdentityEntryPoint + runBlocking; cold-start race handled [branch: DEBUG-v003]
2026-05-16 22:50:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt
BackupRestoreViewModel
S0200 Phase 04b.4a: new startSignIn(activity) calls identityRepository.signInPrimary directly; legacy getSignInIntent and handleSignInResult marked deprecated [branch: DEBUG-v003]
2026-05-16 22:50:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt
BackupRestoreFragment
S0200 Phase 04b.4b: launchSignIn uses viewModel.startSignIn(requireActivity); legacy signInLauncher field kept dormant for 04c sweep [branch: DEBUG-v003]
2026-05-16 22:50:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsBackupHelper.kt
GeneralSettingsBackupHelper
S0200 Phase 04b.4b: launchBackupSignIn routes through backupViewModel.startSignIn [branch: DEBUG-v003]
2026-05-16 22:50:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCloudAuthManager.kt
BrowseCloudAuthManager
S0200 Phase 04b.4c: launchGoogleSignIn uses EntryPoint-resolved identityRepository.signInPrimary; activity-result Intent handshake orphaned [branch: DEBUG-v003]
2026-05-16 22:51:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
AddResourceConnectionManager
S0200 Phase 04b.4d: replaced GoogleSignIn.getLastSignedInAccount with identityRepository.state observation via EntryPoint; signOut delegated to identityRepository.signOutPrimary [branch: DEBUG-v003]
2026-05-16 22:51:02
app_v2/src/test/java/com/sza/fastmediasorter/data/cloud/GoogleDriveTokenRefreshTest.kt
GoogleDriveTokenRefreshTest
S0200 Phase 04b.6: constructor injection of GoogleIdentityRepository via mockk to fix compile; full state-machine rewrite deferred to dedicated round [branch: DEBUG-v003]
2026-05-16 22:57:40
PLAN/S0196_activity-render-priority-research.md
S0196 strategic spec
Synced strategic status with catalog BlockExternal [branch: DEBUG-v003]
2026-05-16 22:57:40
PLAN/S0196_activity-render-priority-research/INDEX.md
S0196 tactical index
Marked Phase 04 as BlockExternal and recorded current-session ADB preflight [branch: DEBUG-v003]
2026-05-16 22:57:40
temp/S0196/04_measurement_journal.md
S0196 Phase 04
Added measurement journal scaffold with all required host and mode placeholders [branch: DEBUG-v003]
2026-05-16 22:57:40
temp/S0196/04_trace_inventory.md
S0196 Phase 04
Added raw evidence inventory scaffold for trace, log, and screen capture ids [branch: DEBUG-v003]
2026-05-16 22:57:40
temp/S0196/04_frame_notes.md
S0196 Phase 04
Added frame-note scaffold for first meaningful frame review across all measured hosts [branch: DEBUG-v003]
2026-05-16 23:08:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
TextViewerManager
Fixed S0189 edit-mode font gestures to use the edit surface and auto-fit baseline [branch: DEBUG-v003]
2026-05-16 23:08:56
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorAutoFitFontManager.kt
TextEditorAutoFitFontManager
Exposed current auto-fit font size for S0189 manual swipe integration [branch: DEBUG-v003]
2026-05-16 23:08:56
PLAN/S0189_browse-create-text-notes.md
S0189 strategic spec
Synced strategic status header to BlockNeedUserTest [branch: DEBUG-v003]
2026-05-16 23:12:12
PLAN/S0200_google-account-central-binding/PHASE_04C__legacy-purge.md
spec-all
S0200 round 5: Phase 04c legacy purge done - GoogleSignIn/GoogleAuthUtil purged from Drive cloud surface; 9 files cleaned; dormant launchers swept; all 3 flavors PASS [branch: DEBUG-v003]
2026-05-16 23:14:39
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Added removable S0185 startup timing tags for GMS and Cast measurement [branch: DEBUG-v003]
2026-05-16 23:14:39
PLAN/S0185_startup-splash-screen-investigation.md
S0185 strategic spec
Synced strategic status header to BlockNeedUserTest for Phase 02 device measurement handoff [branch: DEBUG-v003]
2026-05-16 23:14:39
PLAN/S0185_startup-splash-screen-investigation/INDEX.md
S0185 tactical index
Marked Phase 02 as awaiting device run with instrumentation ready and documented operator handoff [branch: DEBUG-v003]
2026-05-16 23:14:39
PLAN/S0185_startup-splash-screen-investigation/PHASE_02__measurement.md
S0185 Phase 02
Added measurement preflight, linked temp artefacts, and documented exact S0185 logcat timing tags [branch: DEBUG-v003]
2026-05-16 23:14:39
temp/S0185/02_measurement_journal.md
S0185 Phase 02
Added TTID/TTFD and startup-candidate timing journal scaffold for device runs [branch: DEBUG-v003]
2026-05-16 23:14:40
temp/S0185/02_trace_inventory.md
S0185 Phase 02
Added raw capture inventory scaffold for release/debug measurement artefacts [branch: DEBUG-v003]
2026-05-16 23:14:40
PLAN/spec-catalog.jsonl
S0185 catalog status
Moved S0185 to BlockNeedUserTest so measurement tags and spec status stay in sync [branch: DEBUG-v003]
2026-05-16 23:14:40
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Refreshed app_v2 catalog after S0185 FastMediaSorterApp instrumentation change [branch: DEBUG-v003]
2026-05-16 23:14:40
dev/CATALOG/app_v2.md
app_v2 catalog
Rendered app_v2 catalog after S0185 FastMediaSorterApp instrumentation change [branch: DEBUG-v003]
2026-05-16 23:25:13
app_v2/src/main/java/com/sza/fastmediasorter/core/init/StartupMeasurementLogger.kt
StartupMeasurementLogger
Added canonical S0185 debug-log trace and summary emitter for post-hoc startup timing review [branch: DEBUG-v003]
2026-05-16 23:25:13
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
Switched S0185 startup instrumentation to canonical trace markers and summary-ready duration recording [branch: DEBUG-v003]
2026-05-16 23:25:13
app_v2/src/main/java/com/sza/fastmediasorter/core/init/FirstFrameSignal.kt
FirstFrameSignal
Added S0185 first-frame milestone marker for post-hoc startup timing logs [branch: DEBUG-v003]
2026-05-16 23:25:13
app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt
BaseActivity
Added S0185 activity startup markers for content-view and deferred setup milestones [branch: DEBUG-v003]
2026-05-16 23:25:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Added S0185 first-frame and fully-drawn markers plus reportFullyDrawn summary emission [branch: DEBUG-v003]
2026-05-16 23:25:13
PLAN/S0185_startup-splash-screen-investigation/INDEX.md
S0185 tactical index
Documented the new S0185_TRACE/S0185_SUMMARY post-hoc debug-log measurement path [branch: DEBUG-v003]
2026-05-16 23:25:13
PLAN/S0185_startup-splash-screen-investigation/PHASE_02__measurement.md
S0185 Phase 02
Reworked measurement instructions to rely on canonical debug-log trace and summary output [branch: DEBUG-v003]
2026-05-16 23:25:13
temp/S0185/02_measurement_journal.md
S0185 Phase 02
Expanded the journal scaffold to capture S0185 summary values from exported debug logs [branch: DEBUG-v003]
2026-05-16 23:25:13
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Refreshed app_v2 catalog after S0185 startup trace instrumentation changes [branch: DEBUG-v003]
2026-05-16 23:25:13
dev/CATALOG/app_v2.md
app_v2 catalog
Rendered app_v2 catalog after S0185 startup trace instrumentation changes [branch: DEBUG-v003]
2026-05-16 23:36:25
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceEntity.kt
ResourceEntity
S0200 Phase 05.1: add needs_sign_in column (DEFAULT 0) [branch: DEBUG-v003]
2026-05-16 23:36:25
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceDao.kt
ResourceDao
S0200 Phase 05.1: markAllDriveNeedsSignIn + clearNeedsSignInForCredentials [branch: DEBUG-v003]
2026-05-16 23:36:25
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
AppDatabase
S0200 Phase 05.2: schema v28 to v29 + MIGRATION_28_29 (ALTER TABLE resources ADD needs_sign_in) [branch: DEBUG-v003]
2026-05-16 23:36:25
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
DatabaseModule
S0200 Phase 05.2: register MIGRATION_28_29 [branch: DEBUG-v003]
2026-05-16 23:36:36
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/helpers/GoogleDriveCredentialsManager.kt
GoogleDriveCredentialsManager
S0200 Phase 05.3: clearAllCredentials + snapshotAllCredentialBlobs for offline revocation [branch: DEBUG-v003]
2026-05-16 23:36:36
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/NetworkCredentialsDao.kt
NetworkCredentialsDao
S0200 Phase 05.3: deleteByType for bulk removal of Drive rows in wipe [branch: DEBUG-v003]
2026-05-16 23:36:36
app_v2/src/main/java/com/sza/fastmediasorter/data/migration/S0200AuthStateWipe.kt
S0200AuthStateWipe
S0200 Phase 05.3: new run-once legacy auth-state wipe (idempotent via SharedPreferences sentinel) [branch: DEBUG-v003]
2026-05-16 23:36:36
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
FastMediaSorterApp
S0200 Phase 05.4: invoke S0200AuthStateWipe.runIfNeeded() from onCreate via applicationScope [branch: DEBUG-v003]
2026-05-16 23:36:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
MediaResource
S0200 Phase 06: add needsSignIn to MediaResource domain model [branch: DEBUG-v003]
2026-05-16 23:36:37
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt
ResourceRepositoryImpl
S0200 Phase 06: propagate needsSignIn in entity to model and model to entity mappers [branch: DEBUG-v003]
2026-05-16 23:36:41
app_v2/src/main/res/values/strings_s0200.xml
strings
S0200 Phase 06.2: add s0200card * strings EN [branch: DEBUG-v003]
2026-05-16 23:36:41
app_v2/src/main/res/values-ru/strings_s0200.xml
strings
S0200 Phase 06.2: add s0200card * strings RU [branch: DEBUG-v003]
2026-05-16 23:36:41
app_v2/src/main/res/values-uk/strings_s0200.xml
strings
S0200 Phase 06.2: add s0200card * strings UK [branch: DEBUG-v003]
2026-05-16 23:36:41
app_v2/src/main/res/layout/card_google_account.xml
layout
S0200 Phase 06.3: card_google_account.xml MaterialCardView with full state machine [branch: DEBUG-v003]
2026-05-16 23:36:41
app_v2/src/main/res/drawable/ic_google_account.xml
drawable
S0200 Phase 06.3: ic_google_account.xml (person-silhouette, not Google G trademark) [branch: DEBUG-v003]
2026-05-16 23:36:41
app_v2/src/main/res/layout/fragment_settings_general.xml
layout
S0200 Phase 06.4: include card_google_account above INTERFACE section (portrait) [branch: DEBUG-v003]
2026-05-16 23:36:42
app_v2/src/main/res/layout-land/fragment_settings_general.xml
layout-land
S0200 Phase 06.4: include card_google_account above INTERFACE section (landscape, CLAUDE.md Rule 12 parity) [branch: DEBUG-v003]
2026-05-16 23:36:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/GoogleAccountSettingsViewModel.kt
GoogleAccountSettingsViewModel
S0200 Phase 06.5: HiltViewModel exposing UiState(state, cctPackage, showDiagnostics); signIn/signOut clear/mark needs_sign_in flags [branch: DEBUG-v003]
2026-05-16 23:36:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GoogleAccountSettingsHelper.kt
GoogleAccountSettingsHelper
S0200 Phase 06.6: card binder with full PrimaryGoogleAccountState rendering + sign-out confirmation [branch: DEBUG-v003]
2026-05-16 23:36:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
GeneralSettingsFragment
S0200 Phase 06.6: wire GoogleAccountSettingsHelper to cardGoogleAccount in onViewCreated [branch: DEBUG-v003]
2026-05-16 23:36:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt
ResourceAdapter
S0200 Phase 06.7: needs-sign-in indicator for Drive resources via tvAvailabilityIndicator [branch: DEBUG-v003]
2026-05-16 23:36:54
docs/FEATURES.md
FEATURES
S0200 Phase 07.1: Cloud Integration entry for Google account binding (EN) [branch: DEBUG-v003]
2026-05-16 23:36:54
docs/FEATURES_RU.md
FEATURES
S0200 Phase 07.1: Cloud Integration entry for Google account binding (RU) [branch: DEBUG-v003]
2026-05-16 23:36:54
docs/FEATURES_UK.md
FEATURES
S0200 Phase 07.1: Cloud Integration entry for Google account binding (UK) [branch: DEBUG-v003]
2026-05-17 00:42:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Suppress system autofill prompts on file-name and folder-name inputs (importantForAutofill=NO) - fixes spurious ‘Sign in with Google’ prompt on devices without a Google account. [branch: DEBUG-v003]
2026-05-17 00:58:01
PLAN/S0200_google-account-central-binding.md
spec-check
Audit S0200 -> Broken; PASS/WARN/FAIL 14/3/1 [branch: DEBUG-v003]
2026-05-17 00:58:53
PLAN/S0200_google-account-central-binding.md
spec-fix
Annotate Last Audit (S0200): all 4 items marked FOLLOW-UP (no auto-fixable categories) [branch: DEBUG-v003]
2026-05-17 01:09:55
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceDao.kt
S0200
Add markDriveNeedsSignInForCredentials DAO for primary-only sign-out scope (S0200 §11.5 fix) [branch: DEBUG-v003]
2026-05-17 01:09:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/GoogleAccountSettingsViewModel.kt
S0200
signOutPrimary: capture primary email before sign-out; spare non-primary Drive resources (§11.5 / ADR-3) [branch: DEBUG-v003]
2026-05-17 01:09:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
S0200
Narrow @file:Suppress(DEPRECATION) to method-level on onActivityResult override [branch: DEBUG-v003]
2026-05-17 01:09:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt
S0200
Drop stale @file:Suppress(DEPRECATION) - no deprecated APIs in file [branch: DEBUG-v003]
2026-05-17 01:09:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsListViewModel.kt
S0200
Narrow @file:Suppress(DEPRECATION) to declaration-level; drop AuthSessionDomain import [branch: DEBUG-v003]
2026-05-17 01:09:55
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/GoogleTokenIssuer.kt
S0200
Narrow @file:Suppress(DEPRECATION) to function-level on issue/invalidate [branch: DEBUG-v003]
2026-05-17 01:09:55
dev/CATALOG/scripts/scan.ps1
S0200
Extend scan source-set roots to include cloudEnabled and cloudDisabled [branch: DEBUG-v003]
2026-05-17 01:09:55
dev/CATALOG/app_v2.jsonl
S0200
Fill role+status for 19 new S0200 identity/browser/migration/settings classes [branch: DEBUG-v003]
2026-05-17 01:09:55
dev/CATALOG/app_v2.md
S0200
Regenerate markdown view after S0200 role/status fill [branch: DEBUG-v003]
2026-05-17 01:11:28
PLAN/S0200_google-account-central-binding.md
spec-check
Audit S0200 -> Verified; PASS/WARN/FAIL 19/0/0 [branch: DEBUG-v003]
2026-05-17 01:13:08
PLAN/S0184_googlebook-multiwindow-support.md
spec-all
Pipeline Blocked: S0184 - 4 unresolved Open product questions in 6 block tactical planning [branch: DEBUG-v003]
2026-05-17 01:14:47
PLAN/S0156_nolegal-capability-surface-audit.md
spec-all
Pipeline Blocked: S0156 epic waits on child specs S0187/S0174/S0186/S0190/S0197 (all BlockNeedUserTest) and lacks proper tactical INDEX [branch: DEBUG-v003]
2026-05-17 01:18:14
PLAN/S0225_youtube-community-post-url-handling.md
spec-check
Audit S0225 -> Verified; PASS/WARN/FAIL 8/0/0 [branch: DEBUG-v003]
2026-05-17 01:19:45
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
spec-check
S0224 stale Timber.d debug-tag converted to Timber.i informational log [branch: DEBUG-v003]
2026-05-17 01:19:45
PLAN/S0224_threads-batch-notification-inflated-count.md
spec-check
Audit S0224 -> Verified; PASS/WARN/FAIL 8/0/0 [branch: DEBUG-v003]
2026-05-17 01:20:58
PLAN/S0208_player-big-buttons-tuning.md
spec-check
Audit S0208 -> Verified; PASS/WARN/FAIL 9/0/0 [branch: DEBUG-v003]
2026-05-17 01:21:20
PLAN/spec-catalog.jsonl
spec-next
Session: 6 processed, 3 verified (S0200, S0225, S0224, S0208 actually 4 verified), 3 blocked (S0184, S0156), 0 advanced from partial [branch: DEBUG-v003]
2026-05-17 01:45:35
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage.md
spec
Add strategic spec S0231 for ad-hoc bugfix-sftp-to-local-copy-eacces-scoped-storage [branch: DEBUG-v003]
2026-05-17 01:54:55
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage/INDEX.md
spec-tech
Create tactical plan for S0231 [branch: DEBUG-v003]
2026-05-17 01:54:55
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage/PHASE_01__foundation-writer-classifier.md
spec-tech
Phase 01: foundation-writer-classifier [branch: DEBUG-v003]
2026-05-17 01:54:55
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage/PHASE_02__wire-writer-into-network-strategies.md
spec-tech
Phase 02: wire-writer-into-network-strategies [branch: DEBUG-v003]
2026-05-17 01:54:56
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage/PHASE_03__atomic-strategy-short-circuit.md
spec-tech
Phase 03: atomic-strategy-short-circuit [branch: DEBUG-v003]
2026-05-17 01:54:56
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage/PHASE_04__error-category-and-strings.md
spec-tech
Phase 04: error-category-and-strings [branch: DEBUG-v003]
2026-05-17 01:54:56
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs-catalog-cleanup [branch: DEBUG-v003]
2026-05-17 01:54:57
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage.md
spec-tech
Status -> Tactical; resolve S6 research items [branch: DEBUG-v003]
2026-05-17 02:05:39
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbClient.kt
S0002 Wave 47
Decompose SmbClient (955 to 647 LOC) via SmbMediaScanCoordinator (4 scan/count methods) + SmbFileMutationCoordinator (rename, move, ensureSmbDirectoryExists shared with createDirectory); dropped 26 stale imports. [branch: DEBUG-v003]
2026-05-17 02:11:54
PLAN/S0125_settings-activity-revision.md
S0125
verified via device test 2026-05-17 (log fastmediasorter_20260517_003023.log) [branch: DEBUG-v003]
2026-05-17 02:11:58
PLAN/S0176_nolegal-session-context-etld-fix.md
S0176
verified via device test 2026-05-17 (log fastmediasorter_20260517_003023.log) [branch: DEBUG-v003]
2026-05-17 02:12:03
PLAN/S0182_sticky_session_user_agent.md
S0182
verified via device test 2026-05-17 (log fastmediasorter_20260517_003023.log) [branch: DEBUG-v003]
2026-05-17 02:12:07
PLAN/S0185_startup-splash-screen-investigation.md
S0185
verified via device test 2026-05-17 (log fastmediasorter_20260517_003023.log) [branch: DEBUG-v003]
2026-05-17 02:12:11
PLAN/S0197_threads-ig-data-sjs-extractor.md
S0197
verified via device test 2026-05-17 (log fastmediasorter_20260517_003023.log) [branch: DEBUG-v003]
2026-05-17 02:12:16
PLAN/S0207_radical-memory-reduction.md
S0207
partial via device test 2026-05-17 (log fastmediasorter_20260517_003023.log) - Phase 01 instrumentation verified, full memory acceptance scenario not exercised [branch: DEBUG-v003]
2026-05-17 02:12:20
PLAN/S0222_play-console-large-screen-orientation.md
S0222
verified via device test 2026-05-17 (log fastmediasorter_20260517_003023.log) [branch: DEBUG-v003]
2026-05-17 02:14:13
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md
S0190
Phase D round 2 device test reveals YTMusic audio download fails with format-not-available; status -> Broken; Phase E planned (extractor_args propagation in Python downloader) [branch: DEBUG-v003]
2026-05-17 02:14:13
PLAN/S0223_instagram-photo-post-download-broken.md
S0223
device audit 2026-05-17: IG photo carousel succeeds, single-video /p/ post falls back to legacy writer; status -> Partial [branch: DEBUG-v003]
2026-05-17 02:14:24
PLAN/S0232_onedrive-msal-noLegal-debug-signature-hash.md
S0232
new strategic spec: OneDrive MSAL fails in noLegal-DEBUG because BrowserTabActivity intent-filter lacks the debugCustom keystore signature hash iRMe/7fhUe3Plj8y2z5NIOOXsZ8= [branch: DEBUG-v003]
2026-05-17 02:14:24
PLAN/S0233_google-drive-credentialmanager-fallback.md
S0233
new strategic spec: Google Drive sign-in fallback for CredentialManager PlayServicesOutdated; chain repair-prompt + legacy GoogleSignIn + diagnostic error [branch: DEBUG-v003]
2026-05-17 02:14:24
PLAN/S0234_google-account-card-error-ui.md
S0234
new strategic spec: GoogleAccountSettingsHelper renders Error state identical to Unbound; add per-reason copy and click telemetry [branch: DEBUG-v003]
2026-05-17 02:14:24
PLAN/S0235_dropbox-files-metadata-read-scope-regression.md
S0235
new strategic spec: Dropbox folder listing fails because OAuth2 PKCE call omits scope set; explicit scopes + OFFLINE tokenAccessType + App Console verification [branch: DEBUG-v003]
2026-05-17 02:28:48
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationCategory.kt
S0231-01.1
Add sealed LocalDestinationCategory with PublicCollection/NonPublic variants for scoped-storage-aware writes [branch: DEBUG-v003]
2026-05-17 02:29:30
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationClassifier.kt
S0231-01.2
Add LocalDestinationClassifier - maps absolute paths to MediaStore-aware destination categories [branch: DEBUG-v003]
2026-05-17 02:30:05
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/LocalSink.kt
S0231-01.3
Add LocalSink interface with commit/abort lifecycle contract for atomic local writes [branch: DEBUG-v003]
2026-05-17 02:30:40
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationWriter.kt
S0231-01.4
Add LocalDestinationWriter interface - opens sinks for classified local destinations [branch: DEBUG-v003]
2026-05-17 02:31:56
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/MediaStoreLocalDestinationWriter.kt
S0231-01.5
Add MediaStoreLocalDestinationWriter - production sink for public collections via MediaStore IS_PENDING and direct FileOutputStream for non-public paths [branch: DEBUG-v003]
2026-05-17 02:33:18
app_v2/src/main/java/com/sza/fastmediasorter/di/DirectoryStrategyModule.kt
S0231-01.6
Add @Provides for LocalDestinationClassifier and LocalDestinationWriter (MediaStore impl) [branch: DEBUG-v003]
2026-05-17 02:33:18
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationClassifierTest.kt
S0231-01.6
Add LocalDestinationClassifierTest - 6 Robolectric tests covering public collections, non-public paths, extension-less files [branch: DEBUG-v003]
2026-05-17 02:43:31
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SftpOperationStrategy.kt
S0231-02.2
Route SFTP downloadFromSftp through LocalDestinationWriter - fixes EACCES in public collections on Android 10+ scoped storage [branch: DEBUG-v003]
2026-05-17 02:45:00
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SmbOperationStrategy.kt
S0231-02.3
Route SMB downloadFromSmb filesystem path through LocalDestinationWriter (content:// branch unchanged) [branch: DEBUG-v003]
2026-05-17 02:45:43
app_v2/src/main/AndroidManifest.xml
BrowserTabActivity
Added the debugCustom MSAL signature hash so OneDrive auth works in custom-signed debug variants [branch: DEBUG-v003]
2026-05-17 02:45:43
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
DropboxClient
Switched credential restore to the build-specific Dropbox app key instead of a hardcoded release key [branch: DEBUG-v003]
2026-05-17 02:46:59
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/FtpOperationStrategy.kt
S0231-02.4
Route FTP downloadFromFtp through LocalDestinationWriter for scoped storage compliance [branch: DEBUG-v003]
2026-05-17 02:46:59
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/CloudOperationStrategy.kt
S0231-02.4
Route Cloud downloadCloudToLocal through LocalDestinationWriter for scoped storage compliance [branch: DEBUG-v003]
2026-05-17 02:48:16
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt
CredentialManagerGoogleIdentityRepository
Retry Google Credential Manager sign-in with full chooser when authorized-account lookup is empty [branch: DEBUG-v003]
2026-05-17 02:52:12
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
DropboxClient
Request explicit Dropbox PKCE scopes and reject auth results missing files.metadata.read [branch: DEBUG-v003]
2026-05-17 02:52:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerViewModel.kt
DropboxFolderPickerViewModel
Surface provider-specific Dropbox auth and folder-list errors instead of collapsing to a generic picker message [branch: DEBUG-v003]
2026-05-17 02:54:30
app_v2/src/main/java/com/sza/fastmediasorter/di/DirectoryStrategyModule.kt
S0231-02.5
Inject LocalDestinationClassifier+LocalDestinationWriter into Sftp/Smb/Ftp/Cloud strategy providers [branch: DEBUG-v003]
2026-05-17 02:54:30
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpFileOperationHandler.kt
S0231-02.5
Inject classifier+writer and forward to 3 network strategies [branch: DEBUG-v003]
2026-05-17 02:54:30
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperationHandler.kt
S0231-02.5
Inject classifier+writer and forward to 3 network strategies [branch: DEBUG-v003]
2026-05-17 02:54:31
app_v2/src/main/java/com/sza/fastmediasorter/data/network/FtpFileOperationHandler.kt
S0231-02.5
Inject classifier+writer and forward to 3 network strategies [branch: DEBUG-v003]
2026-05-17 02:54:31
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
S0231-02.5
Inject classifier+writer and forward to all 4 wrapped strategies [branch: DEBUG-v003]
2026-05-17 02:54:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
S0231-02.5
Inject classifier+writer and pass to ad-hoc CloudOperationStrategy construction [branch: DEBUG-v003]
2026-05-17 02:56:12
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
S0231-03.1
Short-circuit *.temp_copy + rename for public collections - delegate handles atomicity via MediaStore IS_PENDING [branch: DEBUG-v003]
2026-05-17 03:00:13
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpFileOperationHandler.kt
S0231-03.2
Pass destinationClassifier to AtomicFileOperationStrategy for 4 wrapped strategies [branch: DEBUG-v003]
2026-05-17 03:00:13
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperationHandler.kt
S0231-03.2
Pass destinationClassifier to AtomicFileOperationStrategy for 4 wrapped strategies [branch: DEBUG-v003]
2026-05-17 03:00:14
app_v2/src/main/java/com/sza/fastmediasorter/data/network/FtpFileOperationHandler.kt
S0231-03.2
Pass destinationClassifier to AtomicFileOperationStrategy for 4 wrapped strategies [branch: DEBUG-v003]
2026-05-17 03:00:14
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
S0231-03.2
Pass destinationClassifier to AtomicFileOperationStrategy for 5 wrapped strategies [branch: DEBUG-v003]
2026-05-17 03:01:33
PLAN/S0232_unified-application-id-cloud-flavors.md
build/cloud
S0232: unify applicationId for cloud-enabled non-Store flavors (noLegal, vr, vrUnlicensed) -> com.sza.fastmediasorter; debugCustom hash already in manifest; FastMediaSorterApp logs runtime applicationId for verification [branch: DEBUG-v003]
2026-05-17 03:05:17
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationClassifier.kt
S0231-03.3
Open class + classify method for test subclassing [branch: DEBUG-v003]
2026-05-17 03:05:17
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategyTest.kt
S0231-03.3
Add 3 S0231 tests for public-collection short-circuit + FakeClassifier/RecordingDelegate helpers; fix pre-existing FakeDelegate createTextFile gap [branch: DEBUG-v003]
2026-05-17 03:07:17
PLAN/S0234_google-account-card-error-ui/INDEX.md
spec-tech
Create tactical plan for S0234 [branch: DEBUG-v003]
2026-05-17 03:07:28
PLAN/S0234_google-account-card-error-ui/PHASE_01__strings.md
spec-tech
Phase 01: strings [branch: DEBUG-v003]
2026-05-17 03:07:31
PLAN/S0234_google-account-card-error-ui/PHASE_02__viewmodel-events.md
spec-tech
Phase 02: viewmodel-events [branch: DEBUG-v003]
2026-05-17 03:07:35
PLAN/S0234_google-account-card-error-ui/PHASE_03__helper-render-and-dialog.md
spec-tech
Phase 03: helper-render-and-dialog [branch: DEBUG-v003]
2026-05-17 03:07:39
PLAN/S0234_google-account-card-error-ui/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup [branch: DEBUG-v003]
2026-05-17 03:07:42
PLAN/S0234_google-account-card-error-ui.md
spec-tech
Status -> Tactical [branch: DEBUG-v003]
2026-05-17 03:10:13
app_v2/src/main/res/values/strings_s0200.xml
spec-dev
S0234 phase 01: add error-surfacing strings (EN) [branch: DEBUG-v003]
2026-05-17 03:10:18
app_v2/src/main/res/values-ru/strings_s0200.xml
spec-dev
S0234 phase 01: add error-surfacing strings (RU) [branch: DEBUG-v003]
2026-05-17 03:10:23
app_v2/src/main/res/values-uk/strings_s0200.xml
spec-dev
S0234 phase 01: add error-surfacing strings (UK) [branch: DEBUG-v003]
2026-05-17 03:15:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/GoogleAccountSettingsViewModel.kt
spec-dev
S0234 phase 02: add one-shot Event channel; emit ShowSignInError on Error transition [branch: DEBUG-v003]
2026-05-17 03:19:32
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationPermissionDeniedException.kt
S0231-04.1
Promote LocalDestinationPermissionDeniedException to shared top-level type [branch: DEBUG-v003]
2026-05-17 03:19:33
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/MediaStoreLocalDestinationWriter.kt
S0231-04.1
Remove placeholder exception declaration - use shared LocalDestinationPermissionDeniedException [branch: DEBUG-v003]
2026-05-17 03:19:33
app_v2/src/main/java/com/sza/fastmediasorter/core/util/FileOperationErrorFormatter.kt
S0231-04.3
Add LOCAL_SCOPED_STORAGE_DENIED ErrorType detected from LocalDestinationPermissionDeniedException class name [branch: DEBUG-v003]
2026-05-17 03:19:33
app_v2/src/main/res/values/strings.xml
S0231-04.4
Add error_reason_local_destination_permission_denied (EN) - friendly scoped-storage rejection message guiding user to Music/Movies/Pictures/Downloads [branch: DEBUG-v003]
2026-05-17 03:19:34
app_v2/src/main/res/values-ru/strings.xml
S0231-04.4
Add error_reason_local_destination_permission_denied (RU) - mirror translation per COMMUNICATION_POLICY tone [branch: DEBUG-v003]
2026-05-17 03:19:34
app_v2/src/main/res/values-uk/strings.xml
S0231-04.4
Add error_reason_local_destination_permission_denied (UK) - mirror translation per COMMUNICATION_POLICY tone [branch: DEBUG-v003]
2026-05-17 03:22:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GoogleAccountSettingsHelper.kt
spec-dev
S0234 phase 03: per-reason render, ErrorDialog on Error event, click telemetry, PlayStore intent for outdated Play Services [branch: DEBUG-v003]
2026-05-17 03:32:15
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SftpOperationStrategy.kt
S0231-05.4
Insert S0231 Timber tag for BlockNeedUserTest device verification [branch: DEBUG-v003]
2026-05-17 03:32:15
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/SmbOperationStrategy.kt
S0231-05.4
Insert S0231 Timber tag for BlockNeedUserTest device verification [branch: DEBUG-v003]
2026-05-17 03:32:15
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/FtpOperationStrategy.kt
S0231-05.4
Insert S0231 Timber tag for BlockNeedUserTest device verification [branch: DEBUG-v003]
2026-05-17 03:32:15
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/CloudOperationStrategy.kt
S0231-05.4
Insert S0231 Timber tag for BlockNeedUserTest device verification [branch: DEBUG-v003]
2026-05-17 03:32:16
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt
S0231-05.4
Insert S0231 Timber tag at short-circuit branch for BlockNeedUserTest device verification [branch: DEBUG-v003]
2026-05-17 03:32:16
PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage.md
S0231-05.4
Status -> BlockNeedUserTest [branch: DEBUG-v003]
2026-05-17 03:32:16
dev/CATALOG/app_v2.jsonl
S0231-05.1
Catalog regen + role/status for 6 new local-destination classes [branch: DEBUG-v003]
2026-05-17 03:32:17
dev/CATALOG/app_v2.md
S0231-05.1
Catalog markdown regen after S0231 phases [branch: DEBUG-v003]
2026-05-17 03:59:37
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt
CredentialManagerGoogleIdentityRepository
Pre-check GmsAvailabilityChecker before Credential Manager so an outdated/missing Play Services surfaces PlayServicesOutdated instead of UnknownError; log Throwable in mapException for diagnostics [branch: DEBUG-v003]
2026-05-17 04:03:58
PLAN/S0232_unified-application-id-cloud-flavors.md
spec-check
Audit S0232 -> Partial; PASS/WARN/FAIL 8/4/0; status flipped from BlockNeedUserTest [branch: DEBUG-v003]
2026-05-17 04:04:06
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
spec-check
Remove S0232 Timber probe (invariant: tag exists iff status=BlockNeedUserTest; status now Partial) [branch: DEBUG-v003]
2026-05-17 04:06:27
PLAN/S0232_unified-application-id-cloud-flavors.md
spec-fix
Annotate Last Audit (S0232): 3 follow-ups, 1 pre-resolved; zero auto-fixes applicable [branch: DEBUG-v003]
2026-05-17 04:10:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/GoogleAccountSettingsViewModel.kt
S0234
fix: seed previous with current state value to prevent ShowSignInError replay on each Settings re-entry while singleton state is Error [branch: DEBUG-v003]
2026-05-17 04:21:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt
logging
Remove orphan investigative Timber.v traces from browse adapter: CACHE_KEY_DEBUG, CACHE_HIT_DEBUG, PDF_THUMB_DEBUG, onBindViewHolder payload traces - silences logcat spam (12+ lines per bind), no behaviour change [branch: DEBUG-v003]
2026-05-17 04:31:40
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
MediaResource
S0189: add supportsDocuments() helper - documents-flavored gate (allFiles OR TEXT/PDF/EPUB in supportedMediaTypes) [branch: DEBUG-v003]
2026-05-17 04:31:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt
BrowseStateUiUpdater
S0189: hide btnCreateTextFile in non-documents libraries (audio/video/photo) - call supportsDocuments() in canCreateTextNote predicate [branch: DEBUG-v003]
2026-05-17 04:31:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
S0189: hide action_create_text_file menu item in non-documents libraries + guard keyboard-shortcut entry into showCreateTextNoteDialog with supportsDocuments() gate [branch: DEBUG-v003]
2026-05-17 04:31:58
app_v2/src/main/res/layout/activity_browse.xml
activity_browse layout (portrait)
S0189: comment updates btnCreateTextFile visibility rule to documents-flavored [branch: DEBUG-v003]
2026-05-17 04:32:02
app_v2/src/main/res/layout-land/activity_browse.xml
activity_browse layout (landscape)
S0189: comment updates btnCreateTextFile visibility rule to documents-flavored [branch: DEBUG-v003]
2026-05-17 04:32:14
PLAN/S0189_browse-create-text-notes.md
S0189 strategic spec
Tighten 6.3 visibility rule: documents-flavored libraries only (allFiles OR TEXT/PDF/EPUB in supportedMediaTypes), gate applies to toolbar/menu/keyboard [branch: DEBUG-v003]
2026-05-17 04:32:18
PLAN/S0189_browse-create-text-notes/PHASE_02__browse-entry-points.md
S0189 Phase 02
Update Step 02.5 visibility predicate to include resource.supportsDocuments() [branch: DEBUG-v003]
2026-05-17 05:12:26
PLAN/S0142_ui-settings-behaviour-group-regroup.md
S0142
Reopened S0142 to Draft per owner: prior implementation deemed not done; removed BlockNeedUserTest Timber tag from PlaybackSettingsFragment [branch: DEBUG-v003]
2026-05-17 05:19:05
app_v2/build.gradle.kts
build
Chaquopy auto-detect: scan gradle.startParameter.taskNames for ‘noLegal’ substring so Android Studio debug button on noLegalDebug variant pulls in the plugin without -Pchaquopy.enabled or local.properties opt-in. IDE sync (no assemble task) remains unaffected; Build Variants dropdown still lists every flavor. Explicit -Pchaquopy.enabled still wins (override). [branch: DEBUG-v003]
2026-05-17 13:40:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
createPanelIntent
Add shuffleOnStart parameter for parity with createIntent (needed by audio random-music path routed to 2D player) [branch: DEBUG-v003]
2026-05-17 13:40:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
NavigateToTextEditor
Fix: route text-note editor through createPanelIntent so noLegal/vr no longer hit VrPlayerActivity → ‘VR Headset Required’ on phones (TEXT is never VR-eligible) [branch: DEBUG-v003]
2026-05-17 13:40:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
startSlideshow
Fix: document surfaces (TEXT/PDF/EPUB) now use createPanelIntent in slideshow start path, avoiding the VR fallback dialog on noLegal phones [branch: DEBUG-v003]
2026-05-17 13:40:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
audio playback restore paths
Fix: AudioPlaybackService restore, openAudioPlayerFromNotification, and NavigateToPlayerRandomMusic now use createPanelIntent - audio is inherently 2D, bypasses VR routing on noLegal/vr phones [branch: DEBUG-v003]
2026-05-17 13:54:11
app_v2/src/vr/java/com/sza/fastmediasorter/vr/VrPlayerActivity.kt
onCreate XR-fallback branch
Fix: in noLegal flavor, when XR runtime is unavailable, silently re-dispatch the intent at the 2D PlayerActivity (preserving all extras) instead of opening VrPhoneFallbackActivity. vr flavor keeps the install-standard-edition advisory (Quest-only). Removes ‘VR Headset Required’ dialog from all noLegal phone playback paths regardless of content type [branch: DEBUG-v003]
2026-05-17 15:43:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt
S0189
fix: bypass scanner for staged text notes - PlayerActivity now opens new notes from Downloads/FastMediaSorter/notes/ instead of failing with empty file list and silently returning to Browse [branch: DEBUG-v003]
2026-05-17 16:10:34
app_v2/src/main/res/layout/fragment_settings_destinations.xml,app_v2/src/main/res/layout-land/fragment_settings_destinations.xml
Operations settings (portrait + landscape)
Remove duplicate Quick Sort header inside the Destinations card; drop the 600dp content-width cap in landscape so Operations groups span the full width to match Playback/General Settings pages. [branch: DEBUG-v003]
2026-05-17 16:10:55
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/
S0189
feat: defer text-note file creation until first Save - Cancel during editor leaves no file on disk; remove File is empty placeholder; new note Kind enum (NETWORK_STAGED/LOCAL_DEFERRED) in registry [branch: DEBUG-v003]
2026-05-17 16:11:57
app_v2/src/main/java/com/sza/fastmediasorter/core/util/GmsAvailabilityChecker.kt
GmsAvailabilityChecker
Added MIN_GMS_VERSION_FOR_CREDENTIAL_MANAGER constant (230815045) and recheckFor() overload that accepts an explicit minApkVersion; default check() now delegates to a shared evaluator. Lets API-specific guards re-evaluate against stricter minimums than the play-services-auth baseline. [branch: DEBUG-v003]
2026-05-17 16:11:57
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt
CredentialManagerGoogleIdentityRepository
gmsGuard now re-evaluates GMS against the Credential Manager minimum (23.08.15) on every sign-in to catch SERVICE_VERSION_UPDATE_REQUIRED that the default check misses; mapException maps GetCredentialProviderConfigurationException to PlayServicesOutdated so users see an actionable Update Google Play Services CTA instead of generic UnknownError. [branch: DEBUG-v003]
2026-05-17 16:25:21
PLAN/S0191_browse-create-new-drawing.md
S0191
Closed all open research items (canvas size, JPEG 85% format, system night-mode theme source, shared-modules ownership); synchronised §6.1/§6.2 answers and ADR-5/risk wording. Status remains BlockByOtherTask (S0192). [branch: DEBUG-v003]
2026-05-17 16:29:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
Welcome screen
Add two more feature tiles (Local Folders + Slideshow) on page 1 for 3x2 symmetric grid on tablet/VR; new welcome_feature_local_folders string (EN/RU/UK), reuse welcome_feature_slideshow [branch: DEBUG-v003]
2026-05-17 16:45:58
app_v2/src/main/java/com/sza/fastmediasorter/core/input/TvNavAction.kt;app_v2/src/main/java/com/sza/fastmediasorter/core/input/TvKeyRouter.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt;PLAN/S0230_tv-keyboard-navigation-coverage.md
S0230 input coverage
Extend TvNavAction with Nav/Media/Hardware sub-interfaces (+14 subtypes: PlayPause, Play, Pause, Stop, MediaNext, MediaPrev, FastForward, Rewind, VolumeUp, VolumeDown, VolumeMute, Menu, Search); TvKeyRouter now routes MEDIA_* / HEADSETHOOK / VOLUME_* / MENU / SEARCH from car steering wheel, BT headset, Android Auto and physical device buttons; WelcomeActivity passes Media/Hardware through to system; spec scope updated 6 -> 8 modalities [branch: DEBUG-v003]
2026-05-17 16:54:00
app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt;PLAN/S0230_tv-keyboard-navigation-coverage.md
S0230 spec-all F5
Audit run 2: code infrastructure complete for 8-modality input router; status BlockNeedUserTest with re-inserted S0230 Timber tags at BaseActivity.dispatchKeyEvent and WelcomeActivity.onTvNavigation; Last Audit block rewritten with criterion-by-criterion table and device test instructions [branch: DEBUG-v003]
2026-05-17 17:01:46
PLAN/S0230_tv-keyboard-navigation-coverage.md;app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt
S0230 §6 research
Resolve 6 open research items via web research of Android best practices (RecyclerView/Leanback focus, ExoPlayer DPAD pattern, FEATURE_LEANBACK detection, mouse-blocking pitfalls, TalkBack focus events, Voice Access accessibility actions); apply concrete action item: BaseActivity.isTvDevice() now OR-combines FEATURE_LEANBACK + UI_MODE_TYPE_TELEVISION per developer.android.com hardware guide; status reverted to Approved per spec header; S0230 Timber tags removed [branch: DEBUG-v003]
2026-05-17 17:11:38
PLAN/S0230_tv-keyboard-navigation-coverage/INDEX.md;PLAN/S0230_tv-keyboard-navigation-coverage/PHASE_01__coverage-matrix.md;PLAN/S0230_tv-keyboard-navigation-coverage/PHASE_02__list-focus-polish.md;PLAN/S0230_tv-keyboard-navigation-coverage/PHASE_03__mouse-safety.md;PLAN/S0230_tv-keyboard-navigation-coverage/PHASE_04__dialog-talkback-helper.md;PLAN/S0230_tv-keyboard-navigation-coverage/PHASE_05__a11y-content-audit.md;PLAN/S0230_tv-keyboard-navigation-coverage/PHASE_06__docs-catalog-cleanup.md;PLAN/S0230_tv-keyboard-navigation-coverage.md
spec-tech S0230
Round 2 tactical plan: 6 phases covering coverage matrix audit, list-screen focus polish (descendantFocusability + getInitialFocusView), mouse safety (super.onTouchEvent + performClick), dialog TalkBack helper (DialogAccessibilityHelper), a11y content audit (contentDescription verbs + ViewCompat.addAccessibilityAction), docs-catalog-cleanup; legacy 5 phases archived under legacy/; strategic status flipped Approved -> Tactical [branch: DEBUG-v003]
2026-05-17 17:17:11
PLAN/S0230_tv-keyboard-navigation-coverage/COVERAGE_MATRIX.md
S0230 phase 01
Coverage matrix produced: 33 surfaces audited against 8 modalities; 8 rows with handled cells, 32 gap cells (a11y across all surfaces; car/media gap on 3 player surfaces); four phase-work sections extracted for phases 02-05 [branch: DEBUG-v003]
2026-05-17 17:31:07
app_v2/src/main/res/layout/activity_browse.xml;app_v2/src/main/res/layout-land/activity_browse.xml;app_v2/src/main/res/layout/activity_onedrive_folder_picker.xml;app_v2/src/main/res/layout/activity_dropbox_folder_picker.xml;app_v2/src/main/res/layout/activity_google_drive_folder_picker.xml;app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt
S0230 phase 02
List-screen focus polish: descendantFocusability=afterDescendants on 5 RecyclerView layouts (activity_browse portrait+land, 3 cloud-folder-pickers) + getInitialFocusView() overrides in 4 Activities (BrowseActivity, OneDrive/Dropbox/GoogleDriveFolderPickerActivity) per S0230 6.1 best-practice [branch: DEBUG-v003]
2026-05-17 17:31:12
PLAN/S0230_tv-keyboard-navigation-coverage/PHASE_03__mouse-safety.md
S0230 phase 03
Mouse safety audit: 5 onTouchEvent overrides + 0 onInterceptTouchEvent overrides; all 5 either drag-only no-click (ImageDrawOverlayManager, CropOverlayView) or properly override performClick (PrefetchOverlayView, TranslationOverlayView) or inherit (VerticalSeekBar); zero fix-needed rows [branch: DEBUG-v003]
2026-05-17 17:31:17
app_v2/src/main/java/com/sza/fastmediasorter/core/ui/DialogAccessibilityHelper.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/common/DialogUtils.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
S0230 phase 04
DialogAccessibilityHelper added (object): posts AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED 100ms after dialog show; accepts base android.app.Dialog (AlertDialog-specific button targeting conditional via is-check); integrated into DialogUtils.showScrollableDialog (covers ErrorDialogHelper transitively), BrowseDialogHelper (4 sites), PlayerDialogHelper (central try block) per S0230 6.5 best-practice fixing Material AlertDialog issue #1400 [branch: DEBUG-v003]
2026-05-17 17:31:20
PLAN/S0230_tv-keyboard-navigation-coverage/PHASE_05__a11y-content-audit.md
S0230 phase 05
A11y content audit: static grep shows 362 contentDescription occurrences across 77 layout files (high baseline); no concrete gaps identified at static layer; per-element comprehensive audit + Voice Access addAccessibilityAction work deferred to device-test gate [branch: DEBUG-v003]
2026-05-17 17:34:24
PLAN/S0236_cloud-path-legacy-format-fix.md
spec-all
Compact spec: S0236 [branch: DEBUG-v003]
2026-05-17 17:42:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt; app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteManager.kt; app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt; app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt; app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogCallbacksImpl.kt
Browse delete via per-file overflow menu
Fix: per-file overflow-menu Delete dropped its override path at the dialog callback boundary and re-read the empty global multiselect, producing toast ‘no_files_selected’. Plumb overridePaths through DialogCallbacks.onDeleteConfirmed and BrowseDeleteManager.deleteSelectedFiles; skip clearSelection when override is used. [branch: DEBUG-v003]
2026-05-17 17:43:06
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudMediaScanner.kt
S0236
Defensive path normalization at scanFolderInternal entry; accept legacy cloud:/ resources [branch: DEBUG-v003]
2026-05-17 17:43:06
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CleanupOrphanedTempFilesUseCase.kt
S0236
Use CloudPathParser.isCloudPath so legacy cloud:/ skips local handler [branch: DEBUG-v003]
2026-05-17 17:43:06
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
S0236
Room v29->v30: add MIGRATION_29_30 normalizing legacy cloud:/ resource paths [branch: DEBUG-v003]
2026-05-17 17:43:07
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
S0236
Register MIGRATION_29_30 in Room builder [branch: DEBUG-v003]
2026-05-17 17:44:34
PLAN/S0236_cloud-path-legacy-format-fix.md
spec-all
Pipeline BlockNeedUserTest: S0236 [branch: DEBUG-v003]
2026-05-17 17:58:28
app_v2/src/main/java/com/sza/fastmediasorter/core/input/TvKeyRouter.kt;app_v2/src/main/java/com/sza/fastmediasorter/core/input/TvNavAction.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt;PLAN/S0230_tv-keyboard-navigation-coverage.md
S0230 device-test fix
Device-test on TV emulator (2026-05-17): TAB on Welcome did not focus the language picker buttons. Root cause: TvKeyRouter mapped KEYCODE_TAB to TvNavAction.Next which WelcomeActivity consumed as page-advance, blocking conventional focus traversal. Fix: removed TAB and SHIFT+TAB from TvKeyRouter so they flow to Android default focus traversal; DPAD_LEFT/RIGHT remain mapped to slider semantics. Also fixed Select hijack: WelcomeActivity.onTvNavigation(Select) now checks currentFocus and returns false when a Button/MaterialButton already owns focus, letting ENTER/DPAD_CENTER activate the focused element instead of synthesising a click on Next/Finish [branch: DEBUG-v003]
2026-05-17 17:58:51
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
SmbMediaScanner
Remove SMB metadata-error UI surface: drop AtomicInteger error counter and onMetadataErrors callback fan-out; keep only Timber.w per failed file [branch: DEBUG-v003]
2026-05-17 17:58:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseEvent.kt
BrowseEvent.ShowMetadataWarning
Remove ShowMetadataWarning event, BrowseLoadingManager.LoadingCallbacks.onScanMetadataErrors, BrowseResourceLoadManager handler, BrowseEventHandler Snackbar branch, ScanProgressCallback.onMetadataErrors hook [branch: DEBUG-v003]
2026-05-17 17:58:59
app_v2/src/main/res/values/strings.xml
smb_metadata_errors_warning
Remove smb_metadata_errors_warning string (EN/RU/UK) - Snackbar removed; per-file failures stay in Timber log only [branch: DEBUG-v003]
2026-05-17 18:17:42
PLAN/S0237_smb-first-scan-speedup.md
spec
Add strategic spec S0237 (smb-first-scan-speedup, Tier 3, Priority 60) [branch: DEBUG-v003]
2026-05-17 18:18:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt
VideoPlayerManager
Remove user-facing low-memory pre-play toast (S0207 Goal#2); keep Glide.clearMemory+GC pre-barrier and Timber.w/i diagnostics; drop dead lowMemoryToastShownThisSession + NATIVE_HEAP_CRITICAL_TOAST_THRESHOLD_BYTES [branch: DEBUG-v003]
2026-05-17 18:18:16
app_v2/src/main/res/values*/strings.xml
strings (EN/RU/UK)
Remove warning_low_memory_playback key in all three locales (no callers remain) [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup/INDEX.md
spec-tech
Create tactical plan for S0237 (7 phases, all research items resolved) [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup/PHASE_01__foundations.md
spec-tech
S0237 Phase 01: foundations [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup/PHASE_02__listing-dedup.md
spec-tech
S0237 Phase 02: listing-dedup [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup/PHASE_03__per-file-budget.md
spec-tech
S0237 Phase 03: per-file-budget [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup/PHASE_04__concurrency-tuning.md
spec-tech
S0237 Phase 04: concurrency-tuning [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup/PHASE_05__two-phase-emit.md
spec-tech
S0237 Phase 05: two-phase-emit [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup/PHASE_06__enrichment-queue.md
spec-tech
S0237 Phase 06: enrichment-queue [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup/PHASE_07__docs-catalog-cleanup.md
spec-tech
S0237 Phase 07: docs-catalog-cleanup [branch: DEBUG-v003]
2026-05-17 18:25:51
PLAN/S0237_smb-first-scan-speedup.md
spec-tech
S0237 Status -> Tactical, all research items resolved [branch: DEBUG-v003]
2026-05-17 18:26:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
S0189
fix: Save & Close now finishes PlayerActivity (was leaving blank viewer); markClean after Save to avoid orphan staging file on Save -> Save-and-Close [branch: DEBUG-v003]
2026-05-17 18:27:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/MetadataState.kt
feature
S0237 Phase 01.1: introduce MetadataState enum (PENDING/PARTIAL/COMPLETE) [branch: DEBUG-v003]
2026-05-17 18:27:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
feature
S0237 Phase 01.2: add metadataState=COMPLETE default to MediaFile [branch: DEBUG-v003]
2026-05-17 18:28:30
app_v2/src/main/java/com/sza/fastmediasorter/data/network/config/ScanConcurrencyConfig.kt
feature
S0237 Phase 01.3: introduce ScanConcurrencyConfig (SMB_DEFAULT_LIMIT=4 baseline; Phase 04 will raise) [branch: DEBUG-v003]
2026-05-17 18:29:02
app_v2/src/main/java/com/sza/fastmediasorter/data/network/config/MetadataBudgetConfig.kt
feature
S0237 Phase 01.4: introduce MetadataBudgetConfig (PER_FILE_TIMEOUT_MS=1500) [branch: DEBUG-v003]
2026-05-17 18:36:19
app_v2/src/main/res/layout/player_draw_overlay_toolbar_content.xml
S0192
Phase 06 toolbar collapse to single row; removed bottom Save text button; both save modes (in-place Save + Save as..) now live in overflow popup. Fixes duplicate-label confusion reported on device. [branch: DEBUG-v003]
2026-05-17 18:37:26
scripts/builders/install-nolegal-debug-to-device.ps1, a.ps1
a.ps1 launcher
add ivn command - install noLegal debug APK on device (install-only, symmetric with ivr/ivrd) [branch: DEBUG-v003]
2026-05-17 18:39:58
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt
fix
S0237 Phase 02.1: skip redundant full scan when progressive batch already covered folder (< PROGRESSIVE_BATCH_SIZE) [branch: DEBUG-v003]
2026-05-17 18:43:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
S0189
fix: save-dialog default name now uses stagedNote.intendedName for network notes; the resource-id prefix from the staging filename no longer leaks into the SMB/FTP/SFTP/Cloud upload [branch: DEBUG-v003]
2026-05-17 18:47:05
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
feature
S0237 Phase 03.2: wrap per-file EXIF/video metadata extraction with 1500ms budget; aggregate timeout metric; downgrade per-file warn to verbose [branch: DEBUG-v003]
2026-05-17 18:50:06
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
feature
S0237 Phase 04.2: raise SMB concurrency base SMB(2,1)->SMB(8,2); userDefinedNetworkLimit 2->8 [branch: DEBUG-v003]
2026-05-17 18:50:06
app_v2/src/main/java/com/sza/fastmediasorter/data/network/config/ScanConcurrencyConfig.kt
feature
S0237 Phase 04.3: mirror SMB_DEFAULT_LIMIT 4->8 [branch: DEBUG-v003]
2026-05-17 18:54:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt
feature
S0237 Phase 05: emit listing-only PENDING batch unconditionally (drop PROGRESSIVE_BATCH_SIZE gate); UI sees rows before metadata pass [branch: DEBUG-v003]
2026-05-17 18:54:39
app_v2/src/main/java/com/sza/fastmediasorter/core/cache/MediaFilesCacheManager.kt
feature
S0237 Phase 05.4: refuse to cache lists with PENDING/PARTIAL rows (S0237 §6.4) [branch: DEBUG-v003]
2026-05-17 18:59:57
PLAN/S0237_smb-first-scan-speedup.md
spec-dev
S0237 Status -> BlockNeedUserTest (Phase 01/03/04/05 delivered, Phase 02/06 deferred). 4 Timber.d S0237: tags inserted. [branch: DEBUG-v003]
2026-05-17 19:12:56
app_v2/src/main/res/layout/player_text_viewer_container_content.xml
S0189
feat: move 5 editor action buttons (Save/SaveClose/SaveSend/SendKeep/Cancel) from bottom red panel into top editorToolbar so they stay visible above the soft keyboard; skip name-input dialog at note creation (defer-creation contract - name is asked at Save); append saved note to MediaFilesCacheManager so Browse shows it without rescanning the resource [branch: DEBUG-v003]
2026-05-17 19:26:31
PLAN/S0192_draw-editor-toolbar-ux-v2.md
S0192
Verified after rev-5 fix-up: swatch active=filled disc (was thin ring); Save (in-place) never prompts and now supports content:// via ContentResolver; ADR-4 silent-fallback dropped per user feedback. All 12 BlockNeedUserTest Timber tags removed. [branch: DEBUG-v003]
2026-05-17 19:37:47
PLAN/S0132_vr-quest3-epic-pending-verification.md
S0132 strategic
Added §4 image-immersive entry-point requirement + user-initiated stereo auto-detect heuristic after 2026-05-17 device log showed no path from image-player to immersive. [branch: DEBUG-v003]
2026-05-17 19:37:53
PLAN/S0132_vr-quest3-epic-pending-verification/PHASE_04__panel-3d-flow.md
S0132 phase 04
Added Step 04.0: image-toolbar Open in VR button + StereoDetector user-initiated overload with aggressive aspect-ratio heuristic; updated Step 04.1 sub-scenario B and verification list. [branch: DEBUG-v003]
2026-05-17 20:00:48
PLAN/spec-catalog.jsonl
S0132 S0219 S0230 S0231 S0234
5 specs moved BlockNeedUserTest -> Verified after on-device test (logs/current.log @19:48:50); removed all bound Timber.d tags + stale tags for S0126/S0155/S0170/S0188/S0202 [branch: DEBUG-v003]
2026-05-17 20:01:41
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt
SftpConnectionPool.getConnectionForExoPlayer
Catch InterruptedException separately from semaphore acquire during ExoPlayer teardown: log at DEBUG, restore interrupt flag, throw InterruptedIOException so callers can skip the doomed reconnect attempt [branch: DEBUG-v003]
2026-05-17 20:01:42
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
SftpDataSource.read
Short-circuit InterruptedIOException in read(): restore interrupt flag, mark channel broken, propagate without reconnect - Loader cancellation should not trigger noisy retry [branch: DEBUG-v003]
2026-05-17 20:20:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
S0238 step 01.1
Add userInitiated overload to detectForImage with aggressive aspect-ratio heuristic for user-initiated VR-tap; extract conservative passive cascade; no behavioural change for default callers. [branch: DEBUG-v003]
2026-05-17 20:20:49
PLAN/S0189_browse-create-text-notes/PHASE_09__shared-module-extraction.md
S0189
PHASE_09 implemented: extracted 7 shared modules from S0189 to satisfy S0191 6.1 p.5 - FileNameDefaultProvider, FileNameConflictResolver, BrowseCreateEntityCommand, LocalStagingRegistry/StagedKind/StagingDirectoryProvider, EditorActionPanel/Binder, EditorDirtyStateTracker/DirtyToolbarTinter, SharePayload/SystemShareInvoker. 11 new files, ~15 callsite updates, 6 obsolete TextNote/TextEditor classes deleted. Behaviour preserved. Layout ids btnTextEditor -> btnEditor (portrait + landscape). 7 verification Timber tags reinserted. S0189 In Progress -> BlockNeedUserTest. No build run (user request). [branch: DEBUG-v003]
2026-05-17 20:24:56
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoDetectorUserInitiatedTest.kt
S0238 step 01.2
Add 7 unit tests for StereoDetector userInitiated aggressive aspect-ratio branch + passive-path regression guard. [branch: DEBUG-v003]
2026-05-17 20:25:00
app_v2/src/test/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandlerTest.kt
S0238 step 01.2 sidefix
Add 4 missing mock constructor params (stagingDir, stagingRegistry, destinationClassifier, destinationWriter) after WIP LocalStagingRegistry refactor; unblocks test compile. [branch: DEBUG-v003]
2026-05-17 20:25:03
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/RestoreDeletedUseCaseTest.kt
S0238 step 01.2 sidefix
Add missing stagingRegistry mock param to LocalOperationStrategy ctor after WIP LocalStagingRegistry refactor. [branch: DEBUG-v003]
2026-05-17 20:28:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0238 step 01.3
Open btn3dVrCmd visibility to VIDEO + IMAGE + GIF via VR_BUTTON_MEDIA_TYPES constant; was VIDEO-only. [branch: DEBUG-v003]
2026-05-17 20:28:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0238 step 01.3
Open VR_3D planner add to VIDEO + IMAGE + GIF via VR_BUTTON_MEDIA_TYPES constant; was VIDEO-only. [branch: DEBUG-v003]
2026-05-17 20:30:25
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt
CredentialManagerGoogleIdentityRepository
S0239: added Timber.d S0239 verification tags at gmsGuard live re-eval entry and mapException provider-config safety-net branch; ticket now in BlockNeedUserTest pending on-device verification. [branch: DEBUG-v003]
2026-05-17 20:30:25
PLAN/S0239_credential-manager-gms-version-guard.md
S0239
New strategic spec: fix-up for S0200 risk row 2 (Credential Manager refuses on devices with stale GMS) - formalises the GmsAvailabilityChecker stricter-minimum guard and mapException safety-net done earlier today. [branch: DEBUG-v003]
2026-05-17 20:32:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0238 step 01.4
Run user-initiated StereoDetector for image/gif before delegating to handle3dVrToggleClicked; video path unchanged. [branch: DEBUG-v003]
2026-05-17 20:34:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0238 BlockNeedUserTest
Insert debug verification tag at on3dVrToggleClicked entry per CLAUDE.md tag lifecycle. [branch: DEBUG-v003]
2026-05-17 21:05:56
docs/WHATS_NEW.md
WHATS_NEW
Release notes for v2.60.5172.102 - plateau merge from DEBUG-v003 [branch: DEBUG-v003]
2026-05-17 22:06:34
PLAN/S0240_vr-stack-rewrite-epic.md
S0240
Create new VR stack rewrite epic; archive S0043 + S0132 + S0238 (subsumed) [branch: DEBUG-v004]
2026-05-17 22:06:43
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0240
Remove stale Timber.d S0238 tag (spec archived) [branch: DEBUG-v004]
2026-05-17 22:06:44
app_v2/src/main/java/com/sza/fastmediasorter/core/util/SettingsIntentLauncher.kt
S0240
Remove stale Timber.d S0043 tag (spec archived) [branch: DEBUG-v004]
2026-05-17 22:09:33
a.ps1
release-pipeline
Push-Location worktree before invoking build script - fixes Gradle resolving project dir from inherited dev CWD, which silently built dev project instead of release worktree. [branch: DEBUG-v004]
2026-05-17 22:09:33
scripts/builders/build-aab-release.ps1
release-pipeline
Pin CWD to projectRoot via Push-Location/try/finally; remove sibling-fallback search that hid daemon-reuse bug by silently using stale outputs from other worktrees. [branch: DEBUG-v004]
2026-05-17 22:09:33
scripts/builders/build-vr-release.ps1
release-pipeline
Pin CWD to projectRoot via Push-Location/try/finally so Gradle uses worktree as project dir when invoked from a different CWD. [branch: DEBUG-v004]
2026-05-17 22:09:33
scripts/builders/build-nolegal-release.ps1
release-pipeline
Pin CWD to projectRoot via Push-Location/try/finally so Gradle uses worktree as project dir when invoked from a different CWD. [branch: DEBUG-v004]
2026-05-17 22:11:37
scripts/release-worktree-sync.txt
release-pipeline
Add app_v2/libs/fms-ffmpeg-dts.aar to sync manifest - gitignored AAR required for standard/legacy/noLegal release builds; previously hidden by CWD bug (worktree never actually built). [branch: DEBUG-v004]
2026-05-17 22:20:48
scripts/release-worktree-sync.txt
release-pipeline
Add msal_config.json to sync manifest - file remains gitignored (signing-hash) but worktree needs it for release builds. [branch: DEBUG-v004]
2026-05-17 22:43:36
PLAN/S0241_vr-stack-removal-plan.md
S0241
Create strategic plan: phased removal of VR stack (preserve single-eye stereo on flat screen) [branch: DEBUG-v004]
2026-05-17 22:43:37
PLAN/S0240_vr-stack-rewrite-epic.md
S0240
Update §1: pivot from rewrite to removal - point at S0241 [branch: DEBUG-v004]
2026-05-17 23:31:37
dev/archive/VR_LEGACY_SNAPSHOT.md
S0241 Phase 00
Added VR legacy snapshot and prepared tactical archive phase for stack removal [branch: DEBUG-v004]
2026-05-17 23:34:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Removed the Apply and 3D immersive shortcut from the playback control dialog [branch: DEBUG-v004]
2026-05-17 23:37:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0241 Phase 1
Removed the dedicated VR command-bar button and decoupled the legacy VR toggle manager from the shared binding [branch: DEBUG-v004]
2026-05-17 23:39:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt
S0241 Phase 1
Removed the remaining VR command-panel and overflow entry points from planner and callback flow [branch: DEBUG-v004]
2026-05-17 23:45:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0241 Phase 1
Removed orphaned plain-player immersive helper methods after deleting shared VR UI entry points [branch: DEBUG-v004]
2026-05-17 23:50:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0241 Phase 1
Removed immersive-only VR toggles from playback/video settings screens and deleted their localized strings [branch: DEBUG-v004]
2026-05-17 23:52:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0241 Phase 02
Removed the VR-headset forced-landscape branch from MainActivity [branch: DEBUG-v004]
2026-05-17 23:56:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
S0241 Phase 02
Removed the direct browse-to-immersive launch path and always route Browse playback into the flat player [branch: DEBUG-v004]
2026-05-17 23:58:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0241 Phase 02
Moved slideshow, random play, and draw-overlay entry points to flat-player-only launches [branch: DEBUG-v004]
2026-05-18 00:02:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRoutingDecision.kt
S0241 Phase 02
Collapsed BrowseRoutingDecision to panel-only routing and removed the VR route branch [branch: DEBUG-v004]
2026-05-18 00:02:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
S0241 Phase 02
Removed the dead browse-side VR routing helper after panel-only launch routing became unconditional [branch: DEBUG-v004]
2026-05-18 00:06:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRoutingDecision.kt
S0241 Phase 02
Deleted the dead browse routing helper and removed its obsolete focused unit test [branch: DEBUG-v004]
2026-05-18 00:06:35
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
S0241 Phase 02
Removed disable3dVr playback-dialog plumbing so stereo controls depend only on flavor support or detected stereo content [branch: DEBUG-v004]
2026-05-18 00:13:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0241 Phase 03
Removed the last main-side XR panel-size persistence hook from MainActivity [branch: DEBUG-v004]
2026-05-18 00:13:48
app_v2/src/main/java/com/sza/fastmediasorter/core/xr/XrDeviceDetector.kt
S0241 Phase 03
Deleted dead main-side XR helpers after removing their last MainActivity call site [branch: DEBUG-v004]
2026-05-18 00:20:27
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransition.kt
S0241 Phase 03
Removed dead immersive-entry methods from VrTaskTransition and kept only the vr-side exit routing helpers [branch: DEBUG-v004]
2026-05-18 00:20:27
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransitionTest.kt
S0241 Phase 03
Deleted obsolete XR helper JVM tests and narrowed VrTaskTransitionTest to the surviving exit-side contract [branch: DEBUG-v004]
2026-05-18 00:22:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransition.kt
S0241 Phase 03
Removed the unused resumePlayerIntent branch from exitImmersiveToPanel and kept only the live MainActivity return path [branch: DEBUG-v004]
2026-05-18 00:32:18
app_v2/src/main/java/com/sza/fastmediasorter/core/util/DeviceCapabilities.kt
app_v2,res
Decouple OCR availability gate from MemoryTier - new DeviceCapabilities object uses physical RAM + API + isLowRamDevice (heap-limit is irrelevant for ML Kit). Restores OCR on Quest 3 (7 GB RAM / 512 MB heap). Strings updated to 3 GB threshold + dedicated OS/RAM reason keys. [branch: DEBUG-v004]
2026-05-18 00:38:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
PlaybackControlDialogFragment
Removed shared VR-only rendering mode and IPD controls from the stereo settings dialog [branch: DEBUG-v004]
2026-05-18 00:38:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
VideoSettingsFragment
Removed the shared VR-only rendering mode setting from video settings [branch: DEBUG-v004]
2026-05-18 00:38:01
app_v2/src/main/res/layout/dialog_playback_control.xml
dialog_playback_control
Deleted shared VR-only content-type, rendering mode, and IPD controls from the playback dialog layout [branch: DEBUG-v004]
2026-05-18 00:38:01
app_v2/src/main/res/layout/fragment_settings_video.xml
fragment_settings_video
Removed the shared VR-only rendering mode row from portrait video settings [branch: DEBUG-v004]
2026-05-18 00:38:01
app_v2/src/main/res/layout-land/fragment_settings_video.xml
fragment_settings_video landscape
Removed the shared VR-only rendering mode row from landscape video settings [branch: DEBUG-v004]
2026-05-18 00:38:01
app_v2/src/main/res/values/strings.xml
strings.xml
Deleted dead shared VR-only rendering mode and IPD string resources [branch: DEBUG-v004]
2026-05-18 00:38:01
app_v2/src/main/res/values-ru/strings.xml
strings.xml ru
Deleted dead shared VR-only rendering mode and IPD string resources [branch: DEBUG-v004]
2026-05-18 00:38:01
app_v2/src/main/res/values-uk/strings.xml
strings.xml uk
Deleted dead shared VR-only rendering mode and IPD string resources [branch: DEBUG-v004]
2026-05-18 00:38:01
PLAN/S0241_vr-stack-removal-plan/PHASE_03_XR_AND_RENDER_HELPERS.md
S0241 Phase 03
Recorded the shared VR-only player settings cleanup in the tactical phase log [branch: DEBUG-v004]
2026-05-18 00:38:01
PLAN/S0241_vr-stack-removal-plan/INDEX.md
S0241 Tactical Index
Updated Phase 03 scope to include shared VR-only player settings extraction [branch: DEBUG-v004]
2026-05-18 00:52:42
app_v2/src/main/java/com/sza/fastmediasorter/core/debug/MemoryEnduranceTracker.kt
app_v2,PLAN
S0213 Pillar C - add heap-occupancy gate (used/maxMemory >= 0.75) to the snackbar emit branches in endScenario and cooldownCheckpoint. Relative-drift signal alone produced false-positive ‘low memory, close player’ notifications on capable devices with a 512 MB per-process heap (Quest 3, canonical emulator) where baseline is thin and normal playback growth crosses 50% drift without real OOM risk. Telemetry verdict thresholds unchanged. Spec S0213 stays in BlockNeedUserTest pending device re-verification. [branch: DEBUG-v004]
2026-05-18 00:56:35
app_v2/src/vr/java/com/sza/fastmediasorter/vr/helpers/VrSessionLifecycleManager.kt
VrSessionLifecycleManager
Kept VR launch stereo auto-detection local so vrDebug compiles after removing the shared vrAutoDetectFormat toggle [branch: DEBUG-v004]
2026-05-18 00:56:35
app_v2/build.gradle.kts
vr/noLegal flavor wiring
Temporarily aligned vr and noLegal runtime flags with the standard player path while keeping shared package identity policy [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/build-vr-debug.ps1
build-vr-debug
Updated VR debug script metadata to the shared package identity and standard-runtime wording [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/build-vr-release.ps1
build-vr-release
Updated VR release script metadata to the shared package identity and standard-runtime wording [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/build-nolegal-debug.ps1
build-nolegal-debug
Updated noLegal debug script metadata to the shared debug package identity and standard-runtime wording [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/build-nolegal-release.ps1
build-nolegal-release
Updated noLegal release script metadata to the shared release package identity and standard-runtime wording [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/install-vr-debug-to-device.ps1
install-vr-debug
Updated VR debug installer to target the shared com.sza.fastmediasorter.debug package [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/install-vr-release-to-device.ps1
install-vr-release
Updated VR release installer to target the shared com.sza.fastmediasorter package [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/build-vr-device.ps1
build-vr-device
Updated VR device launcher to use the shared debug package identity [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/install-nolegal-debug-to-device.ps1
install-nolegal-debug
Updated noLegal debug installer to target the shared com.sza.fastmediasorter.debug package [branch: DEBUG-v004]
2026-05-18 00:56:35
scripts/builders/build-nolegal-device.ps1
build-nolegal-device
Updated noLegal device launcher to use the shared debug package identity [branch: DEBUG-v004]
2026-05-18 00:56:35
PLAN/S0241_vr-stack-removal-plan/PHASE_03_XR_AND_RENDER_HELPERS.md
S0241 Phase 03
Recorded the restored vr/noLegal build state and temporary standard-runtime alignment [branch: DEBUG-v004]
2026-05-18 01:02:32
app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/NetworkLifecycleBootstrapper.kt
S0195
Remove stale Timber.i probe (spec already Verified; tag invariant violation surfaced by /log-reader analysis of 2026-05-18 noLegal.debug session) [branch: DEBUG-v004]
2026-05-18 01:07:00
PLAN/S0241_vr-stack-removal-plan.md
S0241
Apply 2026-05-18 owner feedback: drop archive/snapshot/docs/open-questions; lock single-eye as exclusive non-VR-flavor mechanism (ADR-4) [branch: DEBUG-v004]
2026-05-18 01:07:00
PLAN/S0241_vr-stack-removal-plan/INDEX.md
S0241
Drop Phase 07 Documentation per owner feedback; renumber finalize to Phase 07 [branch: DEBUG-v004]
2026-05-18 01:11:56
app_v2/src/main/java/com/sza/fastmediasorter/core/debug/MemoryEnduranceTracker.kt
S0213
Add third gate isHeapUnderPressure(0.75 occupancy) to Pillar C snackbar trigger - fixes regression where release v2.60.5172.102 fires snackbar after 3-5 videos on capable devices (Java heap drift 23-45MB triggers FAIL but occupancy stays at 8-9% of 512MB max, no real OOM risk). Gate applied in both endScenario() and cooldownCheckpoint(). [branch: DEBUG-v004]
2026-05-18 01:18:40
app_v2/build.gradle.kts
S0241 Phase 03
Align vrUnlicensed VR flags with vr/standard (SUPPORT_VR_PLAYER=false). VR runtime detached from main entry on all flavors [branch: DEBUG-v004]
2026-05-18 01:18:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0241 Phase 03
Replace PLAYER_ACTIVITY_CLASS reflection with direct PlayerActivity reference [branch: DEBUG-v004]
2026-05-18 01:18:40
PLAN/S0241_vr-stack-removal-plan/PHASE_03_XR_AND_RENDER_HELPERS.md
S0241 Phase 03
Record vrUnlicensed flag detach + PlayerActivity reflection cleanup [branch: DEBUG-v004]
2026-05-18 01:21:38
PLAN/S0207_radical-memory-reduction.md
S0207
Update Last Audit with 2026-05-18 noLegal.debug evidence on 7GB/512MB device; confirmed Pillars 1-2 working live; flagged Pillar 5 (PrefetchLoadControl fallback) as not wired in playback path; added Q11 (native heap retention in VideoPlayerManager.releasePlayer - Glide+GC returns 0MB across 6 sequential WebM/GIF plays) and Q12 (MEDIUM-tier boundary for heapMax=512+RAM>=6GB). Cross-linked S0213 fix-release commit 32012f79. Status remains Partial. [branch: DEBUG-v004]
2026-05-18 01:31:20
app_v2/src/main/java
S0241 Phase 03
Parallel 4-agent sweep: strip dead BuildConfig.SUPPORT_VR_PLAYER branches from 16 main-side files; delete 2 VR-only permissions; reduce occurrences 90->2 [branch: DEBUG-v004]
2026-05-18 01:31:20
PLAN/S0241_vr-stack-removal-plan/PHASE_03_XR_AND_RENDER_HELPERS.md
S0241 Phase 03
Record parallel-agent sweep completion + build PASS [branch: DEBUG-v004]
2026-05-18 01:33:43
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt,app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/UnifiedCloudAuthManager.kt
GoogleDriveAuthPlugin+UnifiedCloudAuthManager
fix: emit Google Drive interactive sign-in result via async channel so AddResourceActivity navigates to folder picker after Credential Manager flow completes [branch: DEBUG-v004]
2026-05-18 01:38:34
docs/WHATS_NEW.md
WHATS_NEW
Release notes for v2.60.5180.136 - plateau merge from DEBUG-v004 [branch: DEBUG-v004]
2026-05-18 01:49:34
PLAN/S0242_bugfix-browse-list-sync-after-player.md
spec
Add strategic spec S0242 for browse-list sync after returning from Player (ad-hoc bugfix) [branch: DEBUG-v004]
2026-05-18 01:51:30
PLAN/S0243_cloud-auth-result-channel.md
spec
Add strategic spec S0243 for unified cloud auth interactive result channel (retires Google Drive add-resource hot-fix downcast) [branch: DEBUG-v004]
2026-05-18 02:02:22
PLAN/S0240_vr-stack-rewrite-epic.md
S0240
Reframe epic: after S0241 removal, rebuild VR stack in small verifiable stages targeting Quest 3 + Android XR; strict flavor isolation (src/vr only, never src/main/standard/noLegal) [branch: DEBUG-v004]
2026-05-18 02:14:01
app_v2/src/vr
S0241 Phase 04
Delete src/vr/ (8347 LOC Kotlin + 210KB cpp), src/testVr/ (8 files), src/main VrTaskTransition.kt; clean main-side VR KDoc comments in 9 files; drop open modifier on PlayerActivity [branch: DEBUG-v004]
2026-05-18 02:14:02
app_v2/build.gradle.kts
S0241 Phase 05
Remove vr+vrUnlicensed flavors, OpenXR loader dep, native CMake target, SUPPORT_VR_PLAYER/PLAYER_ACTIVITY_CLASS BuildConfig fields; rename disableNativeBuild->standardDistributionAbis; 10 VR builder/util scripts deleted; a.ps1 VR aliases removed; src/debug 3DVR sweep block removed (~243 LOC) [branch: DEBUG-v004]
2026-05-18 02:14:02
PLAN/S0241_vr-stack-removal-plan/
S0241
Phase 04+05 tactical docs: source-set deletion + build config gut; 5-flavor build PASS [branch: DEBUG-v004]
2026-05-18 02:19:42
PLAN/S0240_vr-stack-rewrite-epic.md
S0240
Add Stage 0 plus Stage 1 plan, fix flavor hierarchy (standard subset vr subset noLegal), vision statement, Google Play plus Meta Store publishing strategy, documentation strategy, UX principles [branch: DEBUG-v004]
2026-05-18 02:19:51
PLAN/S0184_multi-window-capability.md
S0184 strategic spec
Realigned S0184 from Googlebook-only to capability-first multi-window contract covering VR, Android XR, ChromeOS, Chromebook/Googlebook, and Samsung DeX. Renamed file slug to multi-window-capability (id preserved). Added illustrative three-window scenario (music/viewer/file ops) as product-value indicator (not v1 acceptance). Closed prior open questions on brand-vs-capability and platform matrix (now ADR-1 and ADR-4); added new open question on multi-window vs spatial XR boundary. Status: BlockQuestions -> Draft. [branch: DEBUG-v004]
2026-05-18 02:28:54
PLAN/S0240_vr-stack-rewrite-epic.md
S0240
Separate research tasks from owner questions: move 6 research-able items into new section 10.0 (R-01..R-13), trim owner questions to 4 truly blocking scope decisions [branch: DEBUG-v004]
2026-05-18 02:31:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/stereoscopic/
S0241 Phase 03+
Delete entire stereoscopic VR-layer abstraction directory (6 classes: VrLayerDescriptor, VrLayerFactory, DefaultVrLayerFactory, VrLayerType, VrRenderContext, VrRenderPlanner) - no main-side consumers after Phase 04 [branch: DEBUG-v004]
2026-05-18 02:31:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0241 Phase 03+
Strip 7 VR-only fields (vrForcedPlatFormat/vrForcedSphericalFormat/vrRenderingMode/vrRememberFileFormat/vrAutoImmersive/disable3dVr/vrShowFps) + parallel cleanup in SettingsRepositoryImpl + PlaybackControlPreferences + BackupData + BackupMapper + PlayerMediaFilesLoader [branch: DEBUG-v004]
2026-05-18 02:39:33
PLAN/S0241_vr-stack-removal-plan/PHASE_07_FINALIZE.md
S0241 Phase 07
Close S0241: archive S0203, flip S0241 to Verified, skip Phase 06 (resources kept for S0240 rewrite reuse). S0240 stays Draft as forward plan [branch: DEBUG-v004]
2026-05-18 02:44:25
PLAN/S0244_vr-preliminary-research.md
S0244
Create preliminary research ticket plus subfolder PLAN/S0240_vr-stack-rewrite-epic with templates RESEARCH/COMPETITOR_ANALYSIS/OWNER_QUESTIONS_DRAFT/STORE_TODO; expand S0240 with input model, panel-first paradigm, safe transitions, Meta plus Google plus project standards, competitor analysis dimension [branch: DEBUG-v004]
2026-05-18 02:51:56
PLAN/S0240_vr-stack-rewrite-epic.md
S0240
Owner answered all 4 questions of section 11: Quest 2/3/3S/Pro support, all cloud features inherited, Data Safety ‘No data collected’, no preview submissions only production-ready with unique value; cascade updates to sections 6.1 and 6.10; S0244 task R-15 cancelled [branch: DEBUG-v004]
2026-05-18 02:57:19
PLAN/S0245_vr-settings-scaffold-stage0.md
S0245
Create Stage 0 implementation spec (VR settings block scaffold + master toggle, contracts XrEntryGateway plus XrDetectionFacade, flavor isolation Rule 15); promote S0244 to Approved status; cross-link S0240 paragraph 10.1 to S0245 [branch: DEBUG-v004]
2026-05-18 03:03:20
PLAN/S0246_smb-library-performance-research.md
spec
Add strategic spec S0246: research alternative SMB libraries to replace SMBJ for faster LAN file ops; linked to S0156 noLegal epic; 8 open research items block /spec-tech until owner resolves them [branch: DEBUG-v004]
2026-05-18 03:31:16
PLAN/S0240_vr-stack-rewrite-epic/
S0244
Pipeline Verified: research artifacts populated (RESEARCH.md R-01..R-13, COMPETITOR_ANALYSIS.md 5/6 competitors, STORE_TODO.md R-resolutions integrated) [branch: DEBUG-v004]
2026-05-18 03:33:20
PLAN/spec-catalog.jsonl
spec-next
Session: 1 processed, 1 verified (S0244), 2 skipped (S0240 Epic Tier 5, S0242 owner-gated) [branch: DEBUG-v004]
2026-05-18 12:33:47
dev/FLAVOR_DEVELOPMENT_RULES.md
spec-all
S0232: add RULE 6 cloud-enabled flavor applicationId policy [branch: DEBUG-v004]
2026-05-18 12:33:48
app_v2/src/main/AndroidManifest.xml
spec-all
S0232: tighten BrowserTabActivity comment with (a)+(b) keystore-addition requirements [branch: DEBUG-v004]
2026-05-18 12:33:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
spec-all
S0232: disable dead vrPackage Play Store CTA, add TODO for future Store-publication wiring [branch: DEBUG-v004]
2026-05-18 12:40:33
PLAN/S0232_unified-application-id-cloud-flavors.md
spec-check
Audit S0232 -> Verified; PASS/WARN/FAIL 10/0/0 [branch: DEBUG-v004]
2026-05-18 12:46:01
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md
spec-next
S0190 review: Phase E.1 already in code (extractor_args at line 150); residual YTMusic failure gated on S0198 PoToken (BlockExternal). Status Broken -> BlockExternal. [branch: DEBUG-v004]
2026-05-18 12:47:54
PLAN/S0235_dropbox-files-metadata-read-scope-regression.md
spec-all
S0235: auto-approve Draft -> Approved [branch: DEBUG-v004]
2026-05-18 12:52:19
PLAN/S0235_dropbox-files-metadata-read-scope-regression.md
spec-all
S0235: front A pre-resolved in code (commit ace216c4), spec patched, status -> BlockNeedUserTest awaiting device test [branch: DEBUG-v004]
2026-05-18 12:52:19
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt
spec-all
S0235: add device-test Timber probe at startPkceAuthentication [branch: DEBUG-v004]
2026-05-18 12:52:19
app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerViewModel.kt
spec-all
S0235: add device-test Timber probes at folder-list entry/success/error paths [branch: DEBUG-v004]
2026-05-18 12:54:05
PLAN/spec-catalog.jsonl
spec-next
Session: 7 processed - 1 verified (S0232), 1 BlockNeedUserTest (S0235), 1 BlockExternal (S0190), 1 catalog-sync (S0207), 3 user-skipped (S0240 epic / S0242 owner-gate / S0245 vr-scaffold) [branch: DEBUG-v004]
2026-05-18 13:04:37
PLAN/S0233_google-drive-credentialmanager-fallback.md
spec-all
S0233: auto-approve + scope narrow to Front A; defer B/C to follow-up; status -> BlockNeedUserTest [branch: DEBUG-v004]
2026-05-18 13:04:37
app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt
spec-all
S0233 Front A: maybeRepairPlayServices auto-launches GoogleApiAvailability.makeGooglePlayServicesAvailable on PlayServicesOutdated and retries signin [branch: DEBUG-v004]
2026-05-18 13:11:28
PLAN/S0223_instagram-photo-post-download-broken.md
spec-all
S0223 audit Partial -> Verified; Option A applied (relabel single-video FellBackToDownloads -> SingleVideoSaved) [branch: DEBUG-v004]
2026-05-18 13:11:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
spec-all
S0223: relabel FellBackToDownloads outcome to SingleVideoSaved for video-extension files (analytics-only, no behaviour change) [branch: DEBUG-v004]
2026-05-18 13:26:07
PLAN/spec-catalog.jsonl
spec-next
Session 2: 8 processed - 1 Verified (S0223), 1 BlockNeedUserTest (S0233), 4 user-skipped (S0240/S0242/S0245/S0184 candidate), 2 §10-blocked (S0187/S0174), 1 owner-gated (S0246) [branch: DEBUG-v004]
2026-05-18 13:28:02
scripts/spec_catalog/drift-check.ps1
drift-check
Add code-vs-spec drift detector (git log -S + grep // Sxxxx: markers); /spec-next Stage 3c + /spec-all Stage 0a-drift call it to catch ‘fix already in code’ pattern [branch: DEBUG-v004]
2026-05-18 13:28:02
scripts/spec_catalog/preview.ps1
preview
Add one-shot Stage 3 spec metadata extractor (frontmatter, sections, tactical_folder, last_audit, timber_tags_kt, depends_on, auto_skip); replaces 4-command bash boilerplate in /spec-next [branch: DEBUG-v004]
2026-05-18 13:28:03
scripts/spec_catalog/close-and-log.ps1
close-and-log
Add batch-finalization wrapper (status + N dev-log entries + funclog + catalog scan/render) in one pwsh process; sub-skills /spec-dev /spec-check /spec-fix /spec-arc call it for finalization sequence [branch: DEBUG-v004]
2026-05-18 13:28:03
scripts/spec_catalog/skip-cache.ps1
skip-cache
Add persistent skip cache for /spec-next between sessions (temp/spec-next-skip-cache.json, 7-day TTL, auto-prune); stops re-asking about tier-5 epics / owner-gate / vr-children every session [branch: DEBUG-v004]
2026-05-18 13:28:19
scripts/builders/build-debug.PS1
build-debug
Add -Quiet switch with known-noise pattern filter (UP-TO-DATE/deprecated-DSL/PlayerActivity ‘open’ warnings); cuts ~150 lines of Gradle noise per build, errors and unknown warnings always preserved [branch: DEBUG-v004]
2026-05-18 13:28:19
a.ps1
a-launcher
Add ‘bd’ typo-tolerant alias for ‘db’ and ‘dq’ quiet-debug alias (build-debug -SkipZip -Quiet); update help text + Chaquopy toggle map [branch: DEBUG-v004]
2026-05-18 13:28:19
.claude/commands/spec-next.md
spec-next
Rewire Stage 2 (persistent skip-cache) + Stage 3 (preview.ps1 one-shot + auto-skip predicates for tier-5/owner-gate/blocker-not-verified/research-heavy) + Stage 3c (drift-check.ps1); replaces AskUserQuestion in loop mode [branch: DEBUG-v004]
2026-05-18 13:28:20
.claude/commands/spec-all.md
spec-all
Add Stage 0a-drift (drift-check.ps1 on Draft/Approved/Tactical/Broken resumes); recommend ‘a.ps1 dq’ quiet build in F3 resume loop; reference close-and-log.ps1 finalization shortcut [branch: DEBUG-v004]
2026-05-18 13:28:20
.claude/commands/spec-check.md
spec-check
Batch Step 6+7+7a (status flip + dev logs + funclog + catalog scan/render) via close-and-log.ps1 in one pwsh process; individual-call fallback retained [branch: DEBUG-v004]
2026-05-18 13:28:20
.claude/commands/spec-fix.md
spec-fix
Use close-and-log.ps1 -StatusOnly for finalization (touches updated, no status flip); individual fallback retained [branch: DEBUG-v004]
2026-05-18 13:28:20
.claude/commands/spec-dev.md
spec-dev
Batch implementation-finished sequence (status flip + N dev logs + funclog + catalog scan/render) via close-and-log.ps1; individual fallback retained [branch: DEBUG-v004]
2026-05-18 13:28:21
.claude/commands/spec-arc.md
spec-arc
Batch archive bookkeeping (touch updated + dev log + optional DELETE funclog) via close-and-log.ps1 -StatusOnly -SkipCatalogSync [branch: DEBUG-v004]
2026-05-18 13:28:21
.claude/commands/quick.md
quick
Hint at post-change.ps1 batch helper for multi-file .kt quick fixes (catalog sync still off by design) [branch: DEBUG-v004]
2026-05-18 13:28:21
.claude/commands/build.md
build
Document a.ps1 dq quiet-build alias + -Quiet noise-filter pattern list in build-debug.PS1 [branch: DEBUG-v004]
2026-05-18 13:31:22
a.ps1
a-launcher
Fix positional-binding bug: switch from string-array Args to hashtable Args; ‘& script @arrayArgs’ was leaking ‘-SkipZip’ into first [string] positional param (‘-k’ unknown-arg in original log) [branch: DEBUG-v004]
2026-05-18 13:36:28
PLAN/S0245_vr-settings-scaffold-stage0.md
spec-all
F1: S0245 Draft -> Approved (prereq S0241/S0244 Verified) [branch: DEBUG-v004]
2026-05-18 13:49:03
PLAN/S0245_vr-settings-scaffold-stage0/INDEX.md
spec-tech
Tactical plan: 7 phases for S0245 (vr flavor restore + XR contracts + Settings tab extension) [branch: DEBUG-v004]
2026-05-18 13:49:03
PLAN/S0245_vr-settings-scaffold-stage0.md
spec-tech
Status -> Tactical (S0245) [branch: DEBUG-v004]
2026-05-18 14:10:04
app_v2/build.gradle.kts
spec-dev
S0245 Phase 01: restore vr productFlavor + paired vrStub source set + media3-hls/dash + DTS AAR [branch: DEBUG-v004]
2026-05-18 14:10:05
app_v2/src/vr/AndroidManifest.xml
spec-dev
S0245 Phase 01: minimal XR uses-feature manifest (Quest + Android XR, required=false) [branch: DEBUG-v004]
2026-05-18 14:10:05
app_v2/src/main/java/com/sza/fastmediasorter/core/xr/XrEnvironment.kt
spec-dev
S0245 Phase 02: XR core contracts (enum + interfaces) [branch: DEBUG-v004]
2026-05-18 14:10:05
app_v2/src/vrStub/java/com/sza/fastmediasorter/core/xr/di/NoOpXrModule.kt
spec-dev
S0245 Phase 03: no-op XR Hilt module + impls for phone flavors [branch: DEBUG-v004]
2026-05-18 14:10:05
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/di/XrModule.kt
spec-dev
S0245 Phase 04: real XR Hilt module + DataStore-backed master toggle [branch: DEBUG-v004]
2026-05-18 14:10:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsTabExtension.kt
spec-dev
S0245 Phase 05: SettingsTabExtension plugin contract + adapter refactor [branch: DEBUG-v004]
2026-05-18 14:10:06
app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsFragment.kt
spec-dev
S0245 Phase 06: VrSettingsFragment + master toggle UI [branch: DEBUG-v004]
2026-05-18 14:10:06
dev/CATALOG/scripts/scan.ps1
spec-dev
S0245: add vrStub source root to catalog scanner [branch: DEBUG-v004]
2026-05-18 14:10:57
PLAN/S0245_vr-settings-scaffold-stage0.md
spec-all
S0245 Stage 0 implemented (7 phases) -> BlockNeedUserTest (Quest 3 / Android XR emulator gate) [branch: DEBUG-v004]
2026-05-18 14:14:27
PLAN/spec-catalog.jsonl
spec-next
Session: 1 processed (S0245 -> BlockNeedUserTest); 8 skip-cached (tier-5-epic, owner-gate, blocker-not-verified x3, research-heavy x3, drift-needs-review) [branch: DEBUG-v004]
2026-05-18 14:40:49
PLAN/S0046_sftp-key-auth-hardening.md
spec-all
Drift review-mode audit: Phase 01 ~80% (DB/Entity/Model/Repo), Phases 02-06 not started; status -> Partial [branch: DEBUG-v004]
2026-05-18 14:41:41
PLAN/spec-catalog.jsonl
spec-next
Session 2: 1 processed (S0046 review-mode -> Partial); 1 skip-cached (S0002 strategic-loop-tracker); next eligible: S0082, S0075 [branch: DEBUG-v004]
2026-05-18 14:46:44
PLAN/S0242_bugfix-browse-list-sync-after-player.md
spec-all
Resolve 5 Open items in S6 from codebase research (S0242) [branch: DEBUG-v004]
2026-05-18 14:56:43
PLAN/S0242_bugfix-browse-list-sync-after-player/INDEX.md
spec-tech
Create tactical plan for S0242 (6 phases) [branch: DEBUG-v004]
2026-05-18 14:56:43
PLAN/S0242_bugfix-browse-list-sync-after-player/PHASE_01__foundations.md
spec-tech
Phase 01: foundations (Mutation, Journal, PathNormalizer, DI) [branch: DEBUG-v004]
2026-05-18 14:56:43
PLAN/S0242_bugfix-browse-list-sync-after-player/PHASE_02__player-journal-wiring.md
spec-tech
Phase 02: player-journal-wiring (drop EXTRA_MODIFIED_FILES) [branch: DEBUG-v004]
2026-05-18 14:56:43
PLAN/S0242_bugfix-browse-list-sync-after-player/PHASE_03__browse-reconciler-resume.md
spec-tech
Phase 03: browse-reconciler-resume (BrowseReconcilerManager) [branch: DEBUG-v004]
2026-05-18 14:56:43
PLAN/S0242_bugfix-browse-list-sync-after-player/PHASE_04__quick-verifier.md
spec-tech
Phase 04: quick-verifier (background existence probe, FTP excluded) [branch: DEBUG-v004]
2026-05-18 14:56:43
PLAN/S0242_bugfix-browse-list-sync-after-player/PHASE_05__source-observer-unification.md
spec-tech
Phase 05: source-observer-unification (FileObserver into journal) [branch: DEBUG-v004]
2026-05-18 14:56:43
PLAN/S0242_bugfix-browse-list-sync-after-player/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06: docs-catalog-cleanup (no FEATURES change) [branch: DEBUG-v004]
2026-05-18 14:56:43
PLAN/S0242_bugfix-browse-list-sync-after-player.md
spec-tech
Status: Approved -> Tactical (S0242) [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/main/java/com/sza/fastmediasorter/domain/mutation/Mutation.kt
spec-dev
S0242 Step 01.1: add sealed Mutation domain model [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/main/java/com/sza/fastmediasorter/domain/mutation/MutationJournal.kt
spec-dev
S0242 Step 01.2: add MutationJournal interface + MutationEntry [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/main/java/com/sza/fastmediasorter/data/mutation/InMemoryMutationJournal.kt
spec-dev
S0242 Step 01.3: add in-memory singleton MutationJournal impl [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/main/java/com/sza/fastmediasorter/domain/path/PathNormalizer.kt
spec-dev
S0242 Step 01.4: add PathNormalizer interface [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/main/java/com/sza/fastmediasorter/core/path/CanonicalPathNormalizer.kt
spec-dev
S0242 Step 01.5: add CanonicalPathNormalizer with LOCAL/SMB/SFTP/FTP/CLOUD rules [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/main/java/com/sza/fastmediasorter/core/di/MutationJournalModule.kt
spec-dev
S0242 Step 01.6: Hilt binding for MutationJournal [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/main/java/com/sza/fastmediasorter/core/di/PathNormalizerModule.kt
spec-dev
S0242 Step 01.6: Hilt binding for PathNormalizer [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/test/java/com/sza/fastmediasorter/data/mutation/InMemoryMutationJournalTest.kt
spec-dev
S0242 Step 01.7: unit tests for InMemoryMutationJournal [branch: DEBUG-v004]
2026-05-18 15:07:43
app_v2/src/test/java/com/sza/fastmediasorter/core/path/CanonicalPathNormalizerTest.kt
spec-dev
S0242 Step 01.7: unit tests for CanonicalPathNormalizer [branch: DEBUG-v004]
2026-05-18 15:08:40
PLAN/S0242_bugfix-browse-list-sync-after-player/INDEX.md
spec-dev
Phase 01 done (S0242) [branch: DEBUG-v004]
2026-05-18 15:20:05
app_v2/src/main/java/com/sza/fastmediasorter/utils/SshFingerprintNormalizer.kt
spec-all
S0046 Phase 02: new utility - SSH fingerprint format normalizer (SHA256:base64-no-pad canonical form) [branch: DEBUG-v004]
2026-05-18 15:20:09
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/PinnedHostKeyRepository.kt
spec-all
S0046 Phase 02: new JSch HostKeyRepository for pinning a single SHA256 fingerprint, plus HostKeyMismatchException type [branch: DEBUG-v004]
2026-05-18 15:20:14
app_v2/src/test/java/com/sza/fastmediasorter/util/SshFingerprintNormalizerTest.kt
spec-all
S0046 Phase 02: 11 JUnit tests covering all input forms, null/blank/garbage, and shortForList truncation [branch: DEBUG-v004]
2026-05-18 15:20:18
PLAN/S0046_sftp-key-auth-hardening/PHASE_02__fingerprint-verifier-core.md
spec-all
S0046 Phase 02 marked Done - JSch (not SSHJ) host-key pinning + fingerprint normalizer landed; assembleStandardDebug PASS [branch: DEBUG-v004]
2026-05-18 15:20:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
spec-dev
S0242 Step 02.2: inject MutationJournal + PathNormalizer + recordMutation helper [branch: DEBUG-v004]
2026-05-18 15:20:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-dev
S0242 Step 02.2: inject MutationJournal + PathNormalizer into PlayerActivity for constructor handoff [branch: DEBUG-v004]
2026-05-18 15:22:29
PLAN/S0046_sftp-key-auth-hardening.md
spec-all
S0046 Last Audit refreshed: Phase 02 marked Done (foundation: normalizer + JSch pin verifier + tests); status remains Partial (Phases 03..06 not started) [branch: DEBUG-v004]
2026-05-18 15:22:39
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
refactor
Revert S0237 implementation (5 modified + 3 deleted .kt files): two-phase emit, concurrency 2->8, per-file metadata budget 1500ms, listing dedup, MetadataState enum. Scope merged into S0246 research. [branch: DEBUG-v004]
2026-05-18 15:22:48
PLAN/S0246_smb-performance-research.md
spec
Rewrite S0246: rename slug smb-library-performance-research -> smb-performance-research; expand scope with track B (orchestration: two-phase emit, concurrency, per-file budget, listing dedup) absorbed from archived S0237; introduce decision gate (4 paths: POC swap / orchestration on current stack / both / neither) [branch: DEBUG-v004]
2026-05-18 15:22:51
PLAN/spec-catalog.jsonl
spec-all
Session: S0046 Phase 02 done (normalizer + JSch verifier + 11 tests); status Partial -> Partial (Phases 03..06 remain) [branch: DEBUG-v004]
2026-05-18 15:22:51
temp/done/S0237_smb-first-scan-speedup.md
spec-arc
Archive S0237 (smb-first-scan-speedup): implementation reverted; scope absorbed into S0246 track B; status BlockNeedUserTest -> Archived [branch: DEBUG-v004]
2026-05-18 15:22:54
dev/CATALOG/app_v2.jsonl
catalog
Sync catalog after S0237 revert (8 .kt files removed/restored) [branch: DEBUG-v004]
2026-05-18 15:24:30
PLAN/spec-catalog.jsonl
spec-next
Session: 1 processed (S0046 Phase 02 done, status Partial), 0 verified, 0 blocked, 2 deferred (S0082 needs Chromebook, S0075 needs Play Console post-publish) [branch: DEBUG-v004]
2026-05-18 15:28:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
spec-dev
S0242 Step 02.3: handleDeleteSuccess now journals a Mutation.Delete via a new recordDeleteMutation helper; legacy trackModifiedFile call kept in parallel. [branch: DEBUG-v004]
2026-05-18 15:28:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
spec-dev
S0242 Step 02.3: FileModified event now also emits Mutation.Delete to the journal in addition to the legacy trackModifiedFile call. [branch: DEBUG-v004]
2026-05-18 15:28:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
spec-dev
S0242 Step 02.3: PlayerFileOperationEvent.Succeeded now journals the matching Mutation variant (Delete/Move/Rename) via a new recordQueuedOperationMutation helper. [branch: DEBUG-v004]
2026-05-18 15:31:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
spec-dev
S0242 Step 02.4: dropped returnModifiedFilesResult() and the unused Intent import; Player no longer ships a modified-files payload back to Browse. [branch: DEBUG-v004]
2026-05-18 15:31:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-dev
S0242 Step 02.4: removed companion EXTRA_MODIFIED_FILES constant (Browse Reconciler reads MutationJournal on onResume). [branch: DEBUG-v004]
2026-05-18 15:31:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLauncherManager.kt
spec-dev
S0242 Step 02.4: dropped getStringArrayListExtra() consumer; changed onPlayerActivityReturned to a zero-arg signal. [branch: DEBUG-v004]
2026-05-18 15:31:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
spec-dev
S0242 Step 02.4: BrowseLauncherCallbacks.onPlayerActivityReturned no longer carries modified paths; Reconciler will run on next onResume. [branch: DEBUG-v004]
2026-05-18 15:34:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
spec-dev
S0242 Step 02.5: removed dead modifiedFiles field, trackModifiedFile() method, and the trackModifiedFile call inside handleDeleteSuccess; class-level KDoc updated to reference MutationJournal. [branch: DEBUG-v004]
2026-05-18 15:34:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
spec-dev
S0242 Step 02.5: removed legacy trackModifiedFile call from FileModified branch; only Mutation.Delete journaling remains. [branch: DEBUG-v004]
2026-05-18 15:34:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt
spec-dev
S0242 Step 02.5: removed legacy trackModifiedFile call from PlayerFileOperationEvent.Succeeded; only recordQueuedOperationMutation routing remains. [branch: DEBUG-v004]
2026-05-18 15:35:43
PLAN/S0242_bugfix-browse-list-sync-after-player/INDEX.md
spec-dev
Phase 02 done (S0242) [branch: DEBUG-v004]
2026-05-18 15:49:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseReconcilerManager.kt
spec-dev
S0242 P03.2: new Reconciler manager - sole journal consumer on Browse side [branch: DEBUG-v004]
2026-05-18 15:49:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
spec-dev
S0242 P03.3: wire BrowseReconcilerManager.reconcile() into onResumeWithViews [branch: DEBUG-v004]
2026-05-18 15:49:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
spec-dev
S0242 P03: replaceMediaFiles() public method; mutationJournal ctor param; BrowseStateSyncManager ctor pruned [branch: DEBUG-v004]
2026-05-18 15:49:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateSyncManager.kt
spec-dev
S0242 P03.4: remove structural-equality syncWithCache fast-path (Option B) [branch: DEBUG-v004]
2026-05-18 15:49:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/filelist/BrowseFileListManager.kt
spec-dev
S0242 P03.4: remove dead syncWithCache(currentList,cacheList) helper [branch: DEBUG-v004]
2026-05-18 15:49:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRefreshManager.kt
spec-dev
S0242 P03.5: clear MutationJournal for resource at start of refresh [branch: DEBUG-v004]
2026-05-18 15:49:52
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt
spec-dev
S0242 P03.4: update stale syncWithCache doc reference [branch: DEBUG-v004]
2026-05-18 15:49:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
spec-dev
S0242 P03.4: update stale syncWithCache doc reference [branch: DEBUG-v004]
2026-05-18 15:50:45
PLAN/S0242_bugfix-browse-list-sync-after-player/INDEX.md
spec-dev
Phase 03 done (S0242) [branch: DEBUG-v004]
2026-05-18 15:57:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/verifier/QuickVerifier.kt
spec-dev
S0242 Phase 04 Step 04.1: QuickVerifier interface + key (background existence probe contract) [branch: DEBUG-v004]
2026-05-18 16:00:23
app_v2/src/main/java/com/sza/fastmediasorter/data/verifier/LocalQuickVerifier.kt
spec-dev
S0242 Phase 04 Step 04.2: LocalQuickVerifier (File.exists filter, no throttle) [branch: DEBUG-v004]
2026-05-18 16:00:26
app_v2/src/main/java/com/sza/fastmediasorter/data/verifier/SmbQuickVerifier.kt
spec-dev
S0242 Phase 04 Step 04.2: SmbQuickVerifier (delegates to SmbOperationStrategy.exists; ProtocolLimits.SMB throttled) [branch: DEBUG-v004]
2026-05-18 16:00:29
app_v2/src/main/java/com/sza/fastmediasorter/data/verifier/SftpQuickVerifier.kt
spec-dev
S0242 Phase 04 Step 04.2: SftpQuickVerifier (delegates to SftpOperationStrategy.exists; ProtocolLimits.SFTP throttled) [branch: DEBUG-v004]
2026-05-18 16:00:32
app_v2/src/main/java/com/sza/fastmediasorter/data/verifier/CloudQuickVerifier.kt
spec-dev
S0242 Phase 04 Step 04.2: CloudQuickVerifier (delegates to CloudOperationStrategy.exists; ProtocolLimits.CLOUD throttled) [branch: DEBUG-v004]
2026-05-18 16:01:54
app_v2/src/main/java/com/sza/fastmediasorter/data/verifier/QuickVerifierDispatcher.kt
spec-dev
S0242 Phase 04 Step 04.3: QuickVerifierDispatcher (per-ResourceType fan-out; FTP no-op) [branch: DEBUG-v004]
2026-05-18 16:04:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseReconcilerManager.kt
spec-dev
S0242 Phase 04 Step 04.5: scheduleQuickVerify fire-and-forget probe + journal Mutation.Delete [branch: DEBUG-v004]
2026-05-18 16:04:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt
spec-dev
S0242 Phase 04 Step 04.5: invoke scheduleQuickVerify after runReconciler in onResume [branch: DEBUG-v004]
2026-05-18 16:06:27
PLAN/S0242_bugfix-browse-list-sync-after-player/INDEX.md
spec-dev
Phase 04 done (S0242) [branch: DEBUG-v004]
2026-05-18 16:11:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileObserverManager.kt
spec-dev
S0242 Phase 05.1: inject MutationJournal + PathNormalizer + resourceId into BrowseFileObserverManager (constructor) [branch: DEBUG-v004]
2026-05-18 16:13:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileObserverManager.kt
spec-dev
S0242 Phase 05.2: route FileObserver delete/move events through MutationJournal (recordDelete + recordMoveWithinResource helpers); legacy live-UX paths preserved [branch: DEBUG-v004]
2026-05-18 16:14:00
PLAN/S0242_bugfix-browse-list-sync-after-player/PHASE_05__source-observer-unification.md
spec-dev
S0242 Phase 05.3: audit-only - pendingFor/markApplied single-reader invariant verified (1 hit each, BrowseReconcilerManager) [branch: DEBUG-v004]
2026-05-18 16:16:01
PLAN/S0242_bugfix-browse-list-sync-after-player/INDEX.md
spec-dev
Phase 05 done (S0242) [branch: DEBUG-v004]
2026-05-18 16:16:08
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt
spec-dev
S0242 Phase 05.1: inject PathNormalizer + wire resourceId/mutationJournal/pathNormalizer into BrowseFileObserverManager construction [branch: DEBUG-v004]
2026-05-18 16:22:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
spec-dev
S0242 Timber tag: Player journal write entry [branch: DEBUG-v004]
2026-05-18 16:22:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseReconcilerManager.kt
spec-dev
S0242 Timber tags: Reconciler entry + QuickVerifier scheduled [branch: DEBUG-v004]
2026-05-18 16:22:02
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileObserverManager.kt
spec-dev
S0242 Timber tag: FileObserver mutation route [branch: DEBUG-v004]
2026-05-18 16:22:02
PLAN/S0242_bugfix-browse-list-sync-after-player/PHASE_06__docs-catalog-cleanup.md
spec-dev
Phase 06 done (S0242) [branch: DEBUG-v004]
2026-05-18 16:22:02
PLAN/S0242_bugfix-browse-list-sync-after-player/INDEX.md
spec-dev
Phase 06 done; INDEX -> Done (S0242) [branch: DEBUG-v004]
2026-05-18 16:22:02
PLAN/S0242_bugfix-browse-list-sync-after-player.md
spec-dev
Status: Tactical -> BlockNeedUserTest; Implemented date 2026-05-18 (S0242) [branch: DEBUG-v004]
2026-05-18 16:23:03
PLAN/S0242_bugfix-browse-list-sync-after-player.md
spec-all
Pipeline complete: 6 phases done, status BlockNeedUserTest (S0242) [branch: DEBUG-v004]
2026-05-18 16:32:17
PLAN/S0246_smb-performance-research.md
spec-update
S0246: clarify research execution mode - 13 research items §6 closed by parallel web-research agents (WebSearch+WebFetch), not human-led; distribution scheme documented in §6 footnote and §12 [branch: DEBUG-v004]
2026-05-18 16:33:39
PLAN/S0040_bugfix-vr-hud-button-affordance__audit_2026-04-30*.md
spec-arc
Move 3 leftover S0040 audit files from PLAN/ to temp/done/ (spec already Archived in journal) [branch: DEBUG-v004]
2026-05-18 16:34:15
PLAN/S0075_device-reach-google-play.md
spec-arc
Archive S0075 (device-reach-google-play) -> temp/done/ [branch: DEBUG-v004]
2026-05-18 16:37:21
PLAN/S0134_widget-picker-and-home-polish.md
spec-arc
Archive S0134 widget-picker-and-home-polish to temp/done/ [branch: DEBUG-v004]
2026-05-18 16:37:21
app_v2/src/main/java/com/sza/fastmediasorter/widget/FavoritesWidgetService.kt
spec-arc
Remove S0134 BlockNeedUserTest Timber.d tag on archive [branch: DEBUG-v004]
2026-05-18 16:37:21
app_v2/src/main/java/com/sza/fastmediasorter/widget/FavoritesWidgetProvider.kt
spec-arc
Remove S0134 BlockNeedUserTest Timber.d tag and unused Timber import on archive [branch: DEBUG-v004]
2026-05-18 16:37:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
spec-arc
Remove S0134 BlockNeedUserTest Timber.d tag on archive [branch: DEBUG-v004]
2026-05-18 16:44:30
PLAN/S0140_extend-market-url-coverage.md
spec-update
Refinement (sonnet-4.5, focus: completeness + consistency) - resolved research items 6.1/6.2/6.3 via web-research + code audit; reconciled hard-cap numbers with shipped InvisibleWebViewExtractionStrategy.kt constants (22s / 4s) [branch: DEBUG-v004]
2026-05-18 16:44:33
PLAN/S0140_extend-market-url-coverage/PHASE_03__dynamic-extractor.md
spec-update
Refinement (sonnet-4.5) - Step 03.1 rewritten as BlockNeedUserTest regression artefact; prerequisites updated; depends-on graph for 03.2/03.4 detached from 03.1 [branch: DEBUG-v004]
2026-05-18 16:44:36
PLAN/S0140_extend-market-url-coverage/INDEX.md
spec-update
Refinement (sonnet-4.5) - Pre-Implementation Blockers marked Resolved with shipped-cap references; Blockers Log / Change Log appended [branch: DEBUG-v004]
2026-05-18 16:56:30
PLAN/S0246_smb-performance-research.md
spec-update
S0246 synthesis: all 13 research items §6 closed as Resolved by 5 parallel web-research agents (A_DISCOVERY/A_LICENSE/A_INTEGRATION/A_SERVER/B_ORCHESTRATION); added §6.3 pre-decision buffer-tuning spike on SMBJ; §11 criteria 1-7 CLOSED, only owner §2.8 decision PENDING; §12 next-step now buffer spike then path selection. Key findings: market-safe lib swap impossible (all alts LGPL or enterprise-only); jcifs-ng#106 shows SMBJ should do 25 MB/s - our <2 MB/s likely app-side wiring; 3 of 4 orchestration optimizations are library-agnostic. [branch: DEBUG-v004]
2026-05-18 17:00:34
app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt
spec-all
S0140 Timber.d tag at Pillar P open() entry for BlockNeedUserTest device round [branch: DEBUG-v004]
2026-05-18 17:00:37
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-all
S0140 Timber.d tag at Pillar Q+U handleBatch entry for BlockNeedUserTest device round [branch: DEBUG-v004]
2026-05-18 17:00:40
app_v2/src/main/java/com/sza/fastmediasorter/data/link/StructuredMediaSniffer.kt
spec-all
S0140 Timber.d tag at Pillar R+S sniff entry + Timber import [branch: DEBUG-v004]
2026-05-18 17:00:43
app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt
spec-all
S0140 Timber.d tag at Pillar T soft login-wall heuristic hit [branch: DEBUG-v004]
2026-05-18 17:00:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/UrlInTextDetector.kt
spec-all
S0140 Timber.d tag at Pillar U multi-URL share parser entry [branch: DEBUG-v004]
2026-05-18 17:00:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt
spec-all
S0140 Timber.d tag at Pillar V auth-flow save-button gate [branch: DEBUG-v004]
2026-05-18 17:00:52
PLAN/S0140_extend-market-url-coverage.md
spec-all
Last Audit block written (verdict Partial: device-test + doc/lint gaps); status In Progress -> BlockNeedUserTest [branch: DEBUG-v004]
2026-05-18 17:06:01
PLAN/S0125_settings-activity-revision.md
spec-tech
Status -> Tactical; tactical plan linked [branch: DEBUG-v004]
2026-05-18 17:06:01
PLAN/S0125_settings-activity-revision/INDEX.md
spec-tech
Create dual-run tactical index for S0125 [branch: DEBUG-v004]
2026-05-18 17:06:02
PLAN/S0125_settings-activity-revision/PHASE_01__inventory-baseline.md
spec-tech
Phase 01 inventory baseline and parity audit artifacts [branch: DEBUG-v004]
2026-05-18 17:06:02
PLAN/S0125_settings-activity-revision/PHASE_02__revised-host-foundations.md
spec-tech
Phase 02 revised host foundation plan [branch: DEBUG-v004]
2026-05-18 17:06:02
PLAN/S0125_settings-activity-revision/PHASE_03__revised-general-operations.md
spec-tech
Phase 03 revised General and Operations plan [branch: DEBUG-v004]
2026-05-18 17:06:02
PLAN/S0125_settings-activity-revision/PHASE_04__revised-media-playback-info.md
spec-tech
Phase 04 revised Media and Playback plan [branch: DEBUG-v004]
2026-05-18 17:06:03
PLAN/S0125_settings-activity-revision/PHASE_05__dual-run-browse-parity.md
spec-tech
Phase 05 dual-run Browse parity plan [branch: DEBUG-v004]
2026-05-18 17:06:03
PLAN/S0125_settings-activity-revision/PHASE_06__docs-catalog-cleanup.md
spec-tech
Phase 06 docs and catalog cleanup plan [branch: DEBUG-v004]
2026-05-18 17:06:03
PLAN/S0125_settings-activity-revision/PHASE_01__settings-inventory-baseline.md
spec-tech
Remove superseded 2026-05-16 tactical phase file [branch: DEBUG-v004]
2026-05-18 17:06:03
PLAN/S0125_settings-activity-revision/PHASE_02__naming-consistency-fixes.md
spec-tech
Remove superseded 2026-05-16 tactical phase file [branch: DEBUG-v004]
2026-05-18 17:06:04
PLAN/S0125_settings-activity-revision/PHASE_03__search-multilingual-corpus.md
spec-tech
Remove superseded 2026-05-16 tactical phase file [branch: DEBUG-v004]
2026-05-18 17:06:04
PLAN/S0125_settings-activity-revision/PHASE_04__ia-restructure-visual.md
spec-tech
Remove superseded 2026-05-16 tactical phase file [branch: DEBUG-v004]
2026-05-18 17:06:04
PLAN/S0125_settings-activity-revision/PHASE_05__docs-catalog-cleanup.md
spec-tech
Remove superseded 2026-05-16 tactical phase file [branch: DEBUG-v004]
2026-05-18 17:12:17
PLAN/S0246_smb-performance-research.md
spec-update
S0246 §2.8 decision CLOSED: owner chose path (c) - both tracks parallel. Spawns S0247 (buffer-tuning-spike, Tier 1, Pri 80) blocking only track (a), and S0248 (orchestration-optimizations, Tier 3, Pri 65) implementing track (b) [branch: DEBUG-v004]
2026-05-18 17:12:20
PLAN/S0247_smb-buffer-tuning-spike.md
spec
Add strategic spec S0247 (smb-buffer-tuning-spike, Tier 1, Priority 80, Approved): validate <2 MB/s hypothesis via SmbConfig.withReadBufferSize(1MB).withWriteBufferSize(1MB) + 64 KiB BufferedInputStream; 30-min spike per S0246 §6.3 [branch: DEBUG-v004]
2026-05-18 17:12:23
PLAN/S0248_smb-orchestration-optimizations.md
spec
Add strategic spec S0248 (smb-orchestration-optimizations, Tier 3, Priority 65, Approved): corrected reimplementation of items 10/11/12/13 from archived S0237 with cross-checked S0246 research (per-file timeout 1500ms+two-tier video, partial-cache no-TTL, listing-dedup primary-coord-fix+secondary-coalescer, concurrency header-only=8 + full-video=3) [branch: DEBUG-v004]
2026-05-18 17:16:35
PLAN/S0125_settings-activity-revision/INDEX.md
spec-tech
Strengthen tactical risk gates: coverage, persistence, dual-run shortcut matrix [branch: DEBUG-v004]
2026-05-18 17:16:35
PLAN/S0125_settings-activity-revision/PHASE_01__inventory-baseline.md
spec-tech
Strengthen baseline inventory schema with immutable ids, totals, orphan-zero, persistence contract [branch: DEBUG-v004]
2026-05-18 17:16:35
PLAN/S0125_settings-activity-revision/PHASE_02__revised-host-foundations.md
spec-tech
Add revised-host no-persistence-fork guardrails [branch: DEBUG-v004]
2026-05-18 17:16:36
PLAN/S0125_settings-activity-revision/PHASE_03__revised-general-operations.md
spec-tech
Add subsection migration gates and live parity-doc updates [branch: DEBUG-v004]
2026-05-18 17:16:36
PLAN/S0125_settings-activity-revision/PHASE_05__dual-run-browse-parity.md
spec-tech
Add Browse dual-run validation matrix and explicit shortcut rebind gate [branch: DEBUG-v004]
2026-05-18 17:19:22
dev/S0125_PHASE0_task-definition.md
workflow
Create Phase 0 task definition for S0125 [branch: DEBUG-v004]
2026-05-18 17:19:23
temp/S0125_PHASE1_research.md
workflow
Create Phase 1 AS-IS research baseline for S0125 [branch: DEBUG-v004]
2026-05-18 17:21:11
PLAN/S0246_smb-performance-research.md
spec-all
S0246 Verified: research-only deliverable closed; path (c) decision recorded; tactical delegated to S0247 + S0248 [branch: DEBUG-v004]
2026-05-18 17:25:13
PLAN/S0247_smb-buffer-tuning-spike/INDEX.md
spec-all
S0247 Tactical: 5-phase plan (PoC SmbConfig 64K->1M + BufferedInputStream wrap; measurement; rollback) [branch: DEBUG-v004]
2026-05-18 17:28:26
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
spec-all
S0247 spike: SmbConfig fast/medium/degraded read/write buffers 64K/32K -> 1 MiB [branch: DEBUG-v004]
2026-05-18 17:28:29
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperations.kt
spec-all
S0247 spike: wrap inputStream/outputStream with BufferedInputStream/BufferedOutputStream (64 KiB chunk) + Timber.d throughput tags [branch: DEBUG-v004]
2026-05-18 17:32:23
PLAN/S0248_smb-orchestration-optimizations/INDEX.md
spec-all
S0248 Tactical: 5 phases (Room migration v30->v31, per-file timeout, partial-cache persistence, listing dedup, two-phase emit + concurrency split) [branch: DEBUG-v004]
2026-05-18 17:32:53
PLAN/S0125_settings-activity-revision/BASELINE_INVENTORY.md
S0125
Capture legacy settings baseline inventory for Phase 01 [branch: DEBUG-v004]
2026-05-18 17:32:53
PLAN/S0125_settings-activity-revision/MIGRATION_MAP.md
S0125
Add row-level migration map with shared persistence contract for Phase 01 [branch: DEBUG-v004]
2026-05-18 17:32:53
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
S0125
Add row-keyed parity audit checklist for Phase 01 [branch: DEBUG-v004]
2026-05-18 17:32:53
PLAN/S0125_settings-activity-revision/PHASE_01__inventory-baseline.md
S0125
Mark Phase 01 tactical spec as done after inventory validation [branch: DEBUG-v004]
2026-05-18 17:32:54
PLAN/S0125_settings-activity-revision/INDEX.md
S0125
Advance tactical index to 1 of 6 phases done [branch: DEBUG-v004]
2026-05-18 17:42:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsActivity.kt
RevisedSettingsActivity
Add hidden revised settings host activity with parallel pager shell and search overlay plumbing [branch: DEBUG-v004]
2026-05-18 17:42:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsPagerAdapter.kt
RevisedSettingsPagerAdapter
Add four-tab revised settings pager adapter backed by placeholder fragments [branch: DEBUG-v004]
2026-05-18 17:42:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsKeyboardNavigationManager.kt
RevisedSettingsKeyboardNavigationManager
Mirror legacy non-touch settings navigation for the hidden revised host [branch: DEBUG-v004]
2026-05-18 17:42:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
RevisedSettingsSearchRegistry
Add revised settings search catalog keyed to legacy row ids plus revised search adapter [branch: DEBUG-v004]
2026-05-18 17:42:40
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedSettingsPlaceholderFragment.kt
RevisedSettingsPlaceholderFragment
Add placeholder content fragment for revised settings foundation tabs [branch: DEBUG-v004]
2026-05-18 17:42:41
app_v2/src/main/AndroidManifest.xml
RevisedSettingsActivity
Register hidden revised settings activity without changing legacy launch paths [branch: DEBUG-v004]
2026-05-18 17:42:42
app_v2/src/main/res/layout/activity_settings_revised.xml
revised settings layout
Add portrait revised settings shell layout [branch: DEBUG-v004]
2026-05-18 17:42:43
app_v2/src/main/res/layout-land/activity_settings_revised.xml
revised settings layout
Add landscape revised settings shell layout [branch: DEBUG-v004]
2026-05-18 17:42:44
app_v2/src/main/res/layout/fragment_settings_revised_placeholder.xml
revised settings placeholder
Add placeholder fragment layout for hidden revised settings tabs [branch: DEBUG-v004]
2026-05-18 17:42:45
app_v2/src/main/res/layout/item_settings_revised_search_result.xml
revised settings search result
Add revised search result row layout [branch: DEBUG-v004]
2026-05-18 17:42:45
dev/CATALOG/app_v2.jsonl
catalog
Refresh app_v2 catalog records for revised settings files and annotate roles/status [branch: DEBUG-v004]
2026-05-18 17:42:46
dev/CATALOG/app_v2.md
catalog
Render app_v2 catalog markdown after revised settings additions [branch: DEBUG-v004]
2026-05-18 17:42:46
PLAN/S0125_settings-activity-revision/PHASE_02__revised-host-foundations.md
S0125
Mark Phase 02 implementation steps done and record external build blocker [branch: DEBUG-v004]
2026-05-18 17:42:47
PLAN/S0125_settings-activity-revision/INDEX.md
S0125
Update tactical index to show Phase 02 blocked on unrelated global build failure [branch: DEBUG-v004]
2026-05-18 18:01:41
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/MetadataState.kt
spec-all
S0248 Phase 1: introduce three-state enum (COMPLETE/PARTIAL/BROKEN) for per-file metadata enrichment lifecycle [branch: DEBUG-v004]
2026-05-18 18:01:43
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/FileMetadataCacheEntity.kt
spec-all
S0248 Phase 1: add metadataState column (default COMPLETE) to file_metadata_cache entity [branch: DEBUG-v004]
2026-05-18 18:01:44
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
spec-all
S0248 Phase 1: bump Room version 30 to 31 + MIGRATION_30_31 adds metadataState column [branch: DEBUG-v004]
2026-05-18 18:01:45
app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt
spec-all
S0248 Phase 1: register MIGRATION_30_31 [branch: DEBUG-v004]
2026-05-18 18:01:52
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
spec-all
S0248 Phase 2/3/5: per-file timeout (EXIF 1500ms, video two-tier 500/2000ms), EnrichmentResult sealed type, aggregated metric, MetadataState propagation, throttle via SMB_HEADER/SMB_FULL_METADATA [branch: DEBUG-v004]
2026-05-18 18:01:54
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt
spec-all
S0248 Phase 3: add metadataState field (default COMPLETE) to MediaFile domain model [branch: DEBUG-v004]
2026-05-18 18:01:56
app_v2/src/main/java/com/sza/fastmediasorter/core/util/CachedMediaMetadataExtractor.kt
spec-all
S0248 Phase 3: retry policy by cached metadataState (COMPLETE keep, PARTIAL re-extract, BROKEN keep unless forceRefresh) [branch: DEBUG-v004]
2026-05-18 18:01:57
app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt
spec-all
S0248 Phase 3: persist metadataState=COMPLETE on audio loader cache writes [branch: DEBUG-v004]
2026-05-18 18:02:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt
spec-all
S0248 Phase 3/4/5: forceRefresh propagation, // S0248 dedup comment, unconditional PENDING-tagged early emit, listing_complete metric [branch: DEBUG-v004]
2026-05-18 18:02:01
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanCoordinator.kt
spec-all
S0248 Phase 4: defensive in-flight coalescer for full-scan listings (ConcurrentHashMap+CompletableDeferred, evicted in finally) [branch: DEBUG-v004]
2026-05-18 18:02:03
app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt
spec-all
S0248 Phase 5: SMB_HEADER(8,1)/SMB_FULL_METADATA(3,1) tiers, halve-on-timeout + no upward auto-tune for them [branch: DEBUG-v004]
2026-05-18 18:03:12
PLAN/S0248_smb-orchestration-optimizations.md
spec-all
S0248: status Tactical to Implemented; appended Last Audit block with phase verdicts and deviations [branch: DEBUG-v004]
2026-05-18 18:03:13
PLAN/S0248_smb-orchestration-optimizations/INDEX.md
spec-all
S0248: tactical status Tactical to Implemented after all 5 phases passed build sanity [branch: DEBUG-v004]
2026-05-18 18:08:49
PLAN/S0248_smb-orchestration-optimizations.md
spec-all
S0248 BlockNeedUserTest: 4 Timber.d(S0248: …) probes inserted; owner verifies on NAS (listing<1s, no warn-spam, BROKEN retry, Room migration applied, coalescer hit, concurrency split) [branch: DEBUG-v004]
2026-05-18 18:22:31
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
SmbMediaScanner
Preserve typed enrichment payloads to restore SMB media metadata compile compatibility [branch: DEBUG-v004]
2026-05-18 18:22:31
dev/CATALOG/app_v2.jsonl
catalog
Refresh app_v2 catalog after SmbMediaScanner compile blocker fix [branch: DEBUG-v004]
2026-05-18 18:22:31
dev/CATALOG/app_v2.md
catalog
Render app_v2 catalog markdown after SmbMediaScanner update [branch: DEBUG-v004]
2026-05-18 18:22:31
PLAN/S0125_settings-activity-revision/PHASE_02__revised-host-foundations.md
S0125
Mark Phase 02 done after standardDebug build returned green [branch: DEBUG-v004]
2026-05-18 18:22:32
PLAN/S0125_settings-activity-revision/INDEX.md
S0125
Advance tactical index to 2 of 6 phases done after Phase 02 completion [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsPagerAdapter.kt
RevisedSettingsPagerAdapter
Mounted real revised General and Operations fragments instead of placeholders [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedGeneralSectionBinder.kt
RevisedGeneralSectionBinder
Hosted legacy General content and hid S0125 legacy-only rows while exposing section reveal hooks [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedOperationsSectionBinder.kt
RevisedOperationsSectionBinder
Hosted legacy Operations content and exposed section reveal hooks for revised search [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedGeneralSettingsFragment.kt
RevisedGeneralSettingsFragment
Added revised General wrapper fragment for the hidden revised settings host [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedOperationsSettingsFragment.kt
RevisedOperationsSettingsFragment
Added revised Operations wrapper fragment preserving the legacy source-preselection contract [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsActivity.kt
RevisedSettingsActivity
Revealed migrated sections before focusing revised search targets [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
RevisedSettingsSearchRegistry
Mapped General and Operations search keys to real controls and multilingual aliases [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/res/layout/fragment_settings_revised_general.xml
fragment_settings_revised_general
Added portrait container for hosted revised General content [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/res/layout-land/fragment_settings_revised_general.xml
fragment_settings_revised_general land
Added landscape container for hosted revised General content [branch: DEBUG-v004]
2026-05-18 21:27:14
app_v2/src/main/res/layout/fragment_settings_revised_operations.xml
fragment_settings_revised_operations
Added portrait container for hosted revised Operations content [branch: DEBUG-v004]
2026-05-18 21:27:15
app_v2/src/main/res/layout-land/fragment_settings_revised_operations.xml
fragment_settings_revised_operations land
Added landscape container for hosted revised Operations content [branch: DEBUG-v004]
2026-05-18 21:27:15
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 tactical index
Marked Phase 03 as in progress after revised General and Operations migration started [branch: DEBUG-v004]
2026-05-18 21:27:15
PLAN/S0125_settings-activity-revision/PHASE_03__revised-general-operations.md
S0125 Phase 03
Recorded revised General and Operations implementation progress and current search follow-up state [branch: DEBUG-v004]
2026-05-18 21:27:15
PLAN/S0125_settings-activity-revision/MIGRATION_MAP.md
S0125 migration map
Reassigned About and revised search result ownership to Phase 03 [branch: DEBUG-v004]
2026-05-18 21:27:15
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
S0125 parity audit
Marked General and Operations parity green and recorded partial revised search parity [branch: DEBUG-v004]
2026-05-18 21:27:15
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Refreshed catalog records for new revised settings classes [branch: DEBUG-v004]
2026-05-18 21:27:15
dev/CATALOG/app_v2.md
app_v2 catalog markdown
Rendered catalog documentation after revised settings class additions [branch: DEBUG-v004]
2026-05-18 21:30:28
PLAN/S0249_vr-test-immersive-image-stage1a.md
spec
Add strategic spec S0249 for ad-hoc VR Stage 1A (Test Immersive button + bundled 360 image) [branch: DEBUG-v004]
2026-05-18 21:31:39
PLAN/S0125_settings-activity-revision/BASELINE_INVENTORY.md
S0125 baseline inventory
Rescanned settings inventory and added missing EPUB and default docs viewer rows [branch: DEBUG-v004]
2026-05-18 21:31:39
PLAN/S0125_settings-activity-revision/MIGRATION_MAP.md
S0125 migration map
Added newly discovered document settings rows from rescan [branch: DEBUG-v004]
2026-05-18 21:31:39
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
S0125 parity audit
Added pending parity items for newly discovered document settings rows [branch: DEBUG-v004]
2026-05-18 21:46:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
RevisedSettingsSearchIndex
Expanded revised General and Operations search registry with legacy key aliases [branch: DEBUG-v004]
2026-05-18 21:46:11
PLAN/S0125_settings-activity-revision/PHASE_03__revised-general-operations.md
S0125 Phase 03
Marked Phase 03 done after General and Operations search parity build passed [branch: DEBUG-v004]
2026-05-18 21:46:11
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 INDEX
Updated tactical progress after completing Phase 03 [branch: DEBUG-v004]
2026-05-18 21:46:11
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
S0125 parity audit
Recorded completed General and Operations search parity and pending Media and Playback shell gap [branch: DEBUG-v004]
2026-05-18 21:46:11
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Rescanned Kotlin catalog after RevisedSettingsSearchIndex search parity update [branch: DEBUG-v004]
2026-05-18 21:46:11
dev/CATALOG/app_v2.md
app_v2 catalog
Rendered Kotlin catalog after RevisedSettingsSearchIndex search parity update [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsPagerAdapter.kt
RevisedSettingsPagerAdapter
Replaced revised Media and Playback placeholders with live wrapper fragments [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedMediaSettingsFragment.kt
RevisedMediaSettingsFragment
Added revised Media wrapper that hosts legacy Media settings content [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedMediaSectionBinder.kt
RevisedMediaSectionBinder
Added legacy Media host binder with section reveal support [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedPlaybackSettingsFragment.kt
RevisedPlaybackSettingsFragment
Added revised Playback wrapper that hosts legacy Playback settings content [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedPlaybackSectionBinder.kt
RevisedPlaybackSectionBinder
Added legacy Playback host binder with section reveal support [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
RevisedSettingsSearchIndex
Finished Media and Playback search targets with real ids and flavor-gated availability [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsActivity.kt
RevisedSettingsActivity
Added Media and Playback section reveal handling for revised search navigation [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/res/layout/fragment_settings_revised_media.xml
fragment_settings_revised_media
Added portrait revised Media host container layout [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/res/layout-land/fragment_settings_revised_media.xml
fragment_settings_revised_media
Added landscape revised Media host container layout [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/res/layout/fragment_settings_revised_playback.xml
fragment_settings_revised_playback
Added portrait revised Playback host container layout [branch: DEBUG-v004]
2026-05-18 22:29:25
app_v2/src/main/res/layout-land/fragment_settings_revised_playback.xml
fragment_settings_revised_playback
Added landscape revised Playback host container layout [branch: DEBUG-v004]
2026-05-18 22:29:25
PLAN/S0125_settings-activity-revision/PHASE_04__revised-media-playback-info.md
S0125 Phase 04
Marked Phase 04 done after Media and Playback host/search parity build passed [branch: DEBUG-v004]
2026-05-18 22:29:25
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 INDEX
Updated tactical progress after completing Phase 04 [branch: DEBUG-v004]
2026-05-18 22:29:26
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
S0125 parity audit
Recorded green Media and Playback host parity plus all-tab search parity [branch: DEBUG-v004]
2026-05-18 22:29:26
dev/CATALOG/app_v2.jsonl
app_v2 catalog
Updated catalog metadata for new revised Media and Playback classes [branch: DEBUG-v004]
2026-05-18 22:29:26
dev/CATALOG/app_v2.md
app_v2 catalog
Rendered catalog after Phase 04 revised Media and Playback additions [branch: DEBUG-v004]
2026-05-18 22:36:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
ResourceOpsMenuManager
Added explicit current and new Browse automation settings routes for S0125 dual-run. [branch: DEBUG-v004]
2026-05-18 22:36:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Wired Browse automation menu entries to legacy and revised settings hosts for S0125. [branch: DEBUG-v004]
2026-05-18 22:36:59
app_v2/src/main/res/menu/menu_resource_ops.xml
menu_resource_ops
Exposed distinct current and new Browse automation settings entries for S0125 dual-run. [branch: DEBUG-v004]
2026-05-18 22:37:00
app_v2/src/main/res/values/strings.xml
strings
Added distinct EN labels for current and new Browse automation settings entries. [branch: DEBUG-v004]
2026-05-18 22:37:00
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Added distinct RU labels for current and new Browse automation settings entries. [branch: DEBUG-v004]
2026-05-18 22:37:00
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Added distinct UK labels for current and new Browse automation settings entries. [branch: DEBUG-v004]
2026-05-18 22:53:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputAction.kt
InputAction
Added semantic Browse settings action for the S0125 revised direct shortcut. [branch: DEBUG-v004]
2026-05-18 22:53:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/KeyboardNavigationManager.kt
KeyboardNavigationManager
Wired the revised Browse settings shortcut into the Browse keyboard action dispatcher. [branch: DEBUG-v004]
2026-05-18 22:53:21
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
KeyboardShortcutHandler
Mapped Browse direct settings shortcuts and preserved an explicit legacy context-menu fallback for S0125. [branch: DEBUG-v004]
2026-05-18 22:53:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpRegistry.kt
InputHelpRegistry
Documented the revised Browse settings shortcut and legacy fallback in F1 help. [branch: DEBUG-v004]
2026-05-18 22:53:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Unified Browse touch and non-touch settings routes on the shared dual-run resource ops menu for S0125. [branch: DEBUG-v004]
2026-05-18 22:53:21
app_v2/src/main/res/values/strings.xml
strings
Added EN Browse dual-run help labels for the revised shortcut and legacy fallback. [branch: DEBUG-v004]
2026-05-18 22:53:22
app_v2/src/main/res/values-ru/strings.xml
strings-ru
Added RU Browse dual-run help labels for the revised shortcut and legacy fallback. [branch: DEBUG-v004]
2026-05-18 22:53:22
app_v2/src/main/res/values-uk/strings.xml
strings-uk
Added UK Browse dual-run help labels for the revised shortcut and legacy fallback. [branch: DEBUG-v004]
2026-05-18 22:53:22
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
S0125 parity audit
Recorded the Browse dual-run gate, legacy-only global launcher note, and updated launch-path statuses. [branch: DEBUG-v004]
2026-05-18 22:53:23
PLAN/S0125_settings-activity-revision/BROWSE_DUAL_RUN_MATRIX.md
S0125 Browse matrix
Added the Browse dual-run validation matrix for legacy and revised settings routes. [branch: DEBUG-v004]
2026-05-18 22:53:23
PLAN/S0125_settings-activity-revision/PHASE_05__dual-run-browse-parity.md
S0125 Phase 05
Marked the Browse dual-run phase done and corrected it to the actual Resource Ops command surface. [branch: DEBUG-v004]
2026-05-18 22:53:23
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 tactical index
Advanced the tactical index after completing Browse dual-run parity work. [branch: DEBUG-v004]
2026-05-18 22:53:23
docs/FEATURES.md
FEATURES
Documented the Browse dual-run settings access entry in the public feature inventory. [branch: DEBUG-v004]
2026-05-18 22:53:24
docs/FEATURES_RU.md
FEATURES_RU
Documented the Browse dual-run settings access entry in the RU feature inventory. [branch: DEBUG-v004]
2026-05-18 22:53:24
docs/FEATURES_UK.md
FEATURES_UK
Documented the Browse dual-run settings access entry in the UK feature inventory. [branch: DEBUG-v004]
2026-05-18 22:55:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Required a resource id for both current and revised Browse automation settings routes to keep the S0125 dual-run surface paired. [branch: DEBUG-v004]
2026-05-18 22:57:08
PLAN/S0125_settings-activity-revision.md
S0125 strategic spec
Updated the tactical-state note and revision history after the implemented Browse dual-run phase. [branch: DEBUG-v004]
2026-05-18 22:57:08
PLAN/S0125_settings-activity-revision/PHASE_06__docs-catalog-cleanup.md
S0125 Phase 06
Marked docs, catalog, and tactical reconciliation steps done and left /spec-check as the remaining audit step. [branch: DEBUG-v004]
2026-05-18 23:02:06
AGENTS.md
Agent protocol
Imported Claude rules, GitHub prompts, and GitHub agent profiles [branch: DEBUG-v004]
2026-05-18 23:03:45
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
S0125 parity audit
Promoted statically verified launch and revised-shell gates before the final S0125 audit verdict. [branch: DEBUG-v004]
2026-05-18 23:03:45
PLAN/S0125_settings-activity-revision.md
spec-check
Audit S0125 → Partial; PASS/WARN/FAIL 12/2/0 with manual parity and legacy sign-off blockers recorded. [branch: DEBUG-v004]
2026-05-18 23:03:45
PLAN/S0125_settings-activity-revision/PHASE_06__docs-catalog-cleanup.md
S0125 Phase 06
Closed Phase 06 after running spec-check and recording the Partial verdict. [branch: DEBUG-v004]
2026-05-18 23:03:45
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 tactical index
Marked all six phases done and recorded the Partial spec-check blocker state. [branch: DEBUG-v004]
2026-05-18 23:29:34
PLAN/S0249_vr-test-immersive-image-stage1a/INDEX.md
spec-tech
Create tactical plan for S0249 [branch: DEBUG-v004]
2026-05-18 23:29:34
PLAN/S0249_vr-test-immersive-image-stage1a/PHASE_01__contracts.md
spec-tech
Phase 01: contracts [branch: DEBUG-v004]
2026-05-18 23:29:34
PLAN/S0249_vr-test-immersive-image-stage1a/PHASE_02__native-runtime.md
spec-tech
Phase 02: native-runtime [branch: DEBUG-v004]
2026-05-18 23:29:34
PLAN/S0249_vr-test-immersive-image-stage1a/PHASE_03__asset-license.md
spec-tech
Phase 03: asset-license [branch: DEBUG-v004]
2026-05-18 23:29:34
PLAN/S0249_vr-test-immersive-image-stage1a/PHASE_04__settings-entry.md
spec-tech
Phase 04: settings-entry [branch: DEBUG-v004]
2026-05-18 23:29:35
PLAN/S0249_vr-test-immersive-image-stage1a/PHASE_05__input-exit.md
spec-tech
Phase 05: input-exit [branch: DEBUG-v004]
2026-05-18 23:29:35
PLAN/S0249_vr-test-immersive-image-stage1a/PHASE_06__validation-cleanup.md
spec-tech
Phase 06: validation-cleanup [branch: DEBUG-v004]
2026-05-18 23:29:35
PLAN/S0249_vr-test-immersive-image-stage1a.md
spec-tech
Status -> Tactical [branch: DEBUG-v004]
2026-05-18 23:30:32
PLAN/S0249_vr-test-immersive-image-stage1a/PHASE_05__input-exit.md
spec-tech
Fix S0249 phase wording style [branch: DEBUG-v004]
2026-05-18 23:36:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
Main screen settings entry
Promoted revised settings to the primary main-screen route, added an explicit legacy fallback button, and localized the new labels. [branch: DEBUG-v004]
2026-05-18 23:46:17
PLAN/S0125_settings-activity-revision/PHASE_03__revised-general-operations.md
spec-fix
S0125: close stale Phase 03 prerequisite and closure checklist drift [branch: DEBUG-v004]
2026-05-18 23:46:18
PLAN/S0125_settings-activity-revision/PHASE_04__revised-media-playback-info.md
spec-fix
S0125: close stale Phase 04 prerequisite and closure checklist drift [branch: DEBUG-v004]
2026-05-18 23:46:19
PLAN/S0125_settings-activity-revision/PHASE_05__dual-run-browse-parity.md
spec-fix
S0125: close stale Phase 05 prerequisite checklist drift [branch: DEBUG-v004]
2026-05-18 23:46:19
PLAN/S0125_settings-activity-revision.md
spec-check
Audit S0125 -> Partial; PASS/WARN/FAIL 18/2/0 after mechanical checklist drift fix [branch: DEBUG-v004]
2026-05-18 23:50:27
app_v2/src/main/res/layout/activity_settings_revised.xml
Revised settings title labeling
Marked RevisedSettingsActivity explicitly as New settings in portrait, landscape, and manifest so the Main screen route is visibly distinct from legacy settings. [branch: DEBUG-v004]
2026-05-18 23:59:07
app_v2/src/main/res/values/themes.xml
settings-ui
Normalize Settings button text appearance to the shared 14sp row-label contract [branch: DEBUG-v004]
2026-05-18 23:59:07
app_v2/src/main/res/layout/fragment_settings_*.xml
settings-ui
Normalize Settings portrait row headers, labels, and button styles to the shared text contract [branch: DEBUG-v004]
2026-05-18 23:59:07
app_v2/src/main/res/layout-land/fragment_settings_*.xml
settings-ui
Normalize Settings landscape row headers, labels, and button styles to the shared text contract [branch: DEBUG-v004]
2026-05-19 00:08:07
PLAN/S0125_settings-activity-revision.md
spec-update
Corrective replanning: documented that the hosted-legacy shell does not satisfy the revised IA contract and added the corrective rewrite track. [branch: DEBUG-v004]
2026-05-19 00:08:07
PLAN/S0125_settings-activity-revision/INDEX.md
spec-update
Extended S0125 tactical plan with corrective Phases 07-11 for scope restore, real rewrite, and final Browse re-exposure. [branch: DEBUG-v004]
2026-05-19 00:08:07
PLAN/S0125_settings-activity-revision/PHASE_03__revised-general-operations.md
spec-update
Annotated Phase 03 as a historical hosted-legacy milestone and redirected final acceptance to corrective rewrite phases. [branch: DEBUG-v004]
2026-05-19 00:08:07
PLAN/S0125_settings-activity-revision/PHASE_04__revised-media-playback-info.md
spec-update
Annotated Phase 04 as a historical hosted-legacy milestone and redirected final acceptance to corrective rewrite phases. [branch: DEBUG-v004]
2026-05-19 00:08:07
PLAN/S0125_settings-activity-revision/PHASE_05__dual-run-browse-parity.md
spec-update
Annotated Phase 05 as Browse-only dual-run history and recorded that final parity must be rerun after the real rewrite. [branch: DEBUG-v004]
2026-05-19 00:08:07
PLAN/S0125_settings-activity-revision/PHASE_07__scope-restore-and-reset.md
spec-update
Added corrective Phase 07 to restore Browse-only scope and remove misleading global dual-run exposure. [branch: DEBUG-v004]
2026-05-19 00:08:07
PLAN/S0125_settings-activity-revision/PHASE_08__rewritten-general-operations.md
spec-update
Added corrective Phase 08 for native revised General and Operations rewrite without hosted legacy fragments. [branch: DEBUG-v004]
2026-05-19 00:08:08
PLAN/S0125_settings-activity-revision/PHASE_09__rewritten-media-playback.md
spec-update
Added corrective Phase 09 for native revised Media and Playback rewrite without hosted legacy fragments. [branch: DEBUG-v004]
2026-05-19 00:08:08
PLAN/S0125_settings-activity-revision/PHASE_10__browse-reexposure-parity.md
spec-update
Added corrective Phase 10 to re-expose revised settings from Browse only after the rewrite and rebuild measured parity evidence. [branch: DEBUG-v004]
2026-05-19 00:08:08
PLAN/S0125_settings-activity-revision/PHASE_11__docs-audit-cleanup.md
spec-update
Added corrective Phase 11 for final docs, catalog, and spec audit cleanup after the rewritten dual-run ships. [branch: DEBUG-v004]
2026-05-19 00:14:16
PLAN/S0002_decompose-giant-files.md
spec-update
Refinement (gpt-5, focus: language, structure, verifiability, consistency, completeness, style; force-locked) [branch: DEBUG-v004]
2026-05-19 00:14:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
Phase 07 scope restore
Restored Main settings launch to the legacy host and removed the erroneous global revised route. [branch: DEBUG-v004]
2026-05-19 00:14:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainLayoutChromeManager.kt
Phase 07 scope restore
Returned Main toolbar settings labeling to the legacy-only contract. [branch: DEBUG-v004]
2026-05-19 00:14:16
app_v2/src/main/res/layout/activity_main.xml
Phase 07 scope restore
Removed the secondary Main settings button and restored the legacy settings affordance. [branch: DEBUG-v004]
2026-05-19 00:14:16
app_v2/src/main/res/layout-land/activity_main.xml
Phase 07 scope restore
Removed the landscape secondary Main settings button and restored the legacy settings label. [branch: DEBUG-v004]
2026-05-19 00:14:17
app_v2/src/main/res/values/strings.xml
Phase 07 scope restore
Dropped the unused global current-settings label and kept only the revised-host title key. [branch: DEBUG-v004]
2026-05-19 00:14:17
app_v2/src/main/res/values-ru/strings.xml
Phase 07 scope restore
Dropped the unused Russian global current-settings label after restoring Browse-only scope. [branch: DEBUG-v004]
2026-05-19 00:14:17
app_v2/src/main/res/values-uk/strings.xml
Phase 07 scope restore
Dropped the unused Ukrainian global current-settings label after restoring Browse-only scope. [branch: DEBUG-v004]
2026-05-19 00:14:17
docs/FEATURES.md
Phase 07 scope restore
Reworded the Browse dual-run feature note as a corrective preview rather than a completed revised surface. [branch: DEBUG-v004]
2026-05-19 00:14:17
docs/FEATURES_RU.md
Phase 07 scope restore
Reworded the Russian Browse dual-run feature note as a corrective preview rather than a completed revised surface. [branch: DEBUG-v004]
2026-05-19 00:14:17
docs/FEATURES_UK.md
Phase 07 scope restore
Reworded the Ukrainian Browse dual-run feature note as a corrective preview rather than a completed revised surface. [branch: DEBUG-v004]
2026-05-19 00:14:17
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
Phase 07 scope restore
Reset the audit wording to Browse-only scope and froze the hosted-legacy shell as a corrective blocker. [branch: DEBUG-v004]
2026-05-19 00:14:17
PLAN/S0125_settings-activity-revision/PHASE_07__scope-restore-and-reset.md
Phase 07 scope restore
Marked Phase 07 steps and done criteria complete after restoring Browse-only scope. [branch: DEBUG-v004]
2026-05-19 00:14:17
PLAN/S0125_settings-activity-revision/INDEX.md
Phase 07 scope restore
Marked Phase 07 complete and advanced the corrective tactical plan to 7/11 done. [branch: DEBUG-v004]
2026-05-19 00:19:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt
S0002
Reduced ImageDrawOverlayManager below the 700 LOC decomposition target. [branch: DEBUG-v004]
2026-05-19 00:24:39
PLAN/S0002_decompose-giant-files.md
S0002
Recorded Wave 48 ImageDrawOverlayManager decomposition result and refreshed the next loop candidate. [branch: DEBUG-v004]
2026-05-19 00:24:45
PLAN/S0249_vr-test-immersive-image-stage1a.md
spec
Encode /ui-clarify resolutions: rename VR block to Управление 3D-VR, collapsible group in Media section, always-visible, advisory + disabled master on non-XR; extend Phase 04 with steps 04.A1/04.A2/04.A3 [branch: DEBUG-v004]
2026-05-19 00:25:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt
S0002
Reduced MainViewModel below the 700 LOC decomposition target. [branch: DEBUG-v004]
2026-05-19 00:29:56
PLAN/S0002_decompose-giant-files.md
S0002
Recorded Wave 49 MainViewModel decomposition result and refreshed the next loop candidate. [branch: DEBUG-v004]
2026-05-19 00:30:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedGeneralSettingsFragment.kt
Phase 08 native rewrite
Replaced the hosted legacy General fragment with a direct revised General owner that preserves existing handlers while hiding legacy-only controls and reordering the top-level slices. [branch: DEBUG-v004]
2026-05-19 00:30:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedGeneralSectionBinder.kt
Phase 08 native rewrite
Dropped hosted General fragment attachment and converted the binder into direct revised-layout visibility and section-order logic. [branch: DEBUG-v004]
2026-05-19 00:30:45
app_v2/src/main/res/layout/fragment_settings_revised_general.xml
Phase 08 native rewrite
Changed the revised General layout into a direct row-tree include wrapper instead of a hosted fragment container. [branch: DEBUG-v004]
2026-05-19 00:30:45
app_v2/src/main/res/layout-land/fragment_settings_revised_general.xml
Phase 08 native rewrite
Changed the landscape revised General layout into a direct row-tree include wrapper for orientation parity. [branch: DEBUG-v004]
2026-05-19 00:30:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedOperationsSettingsFragment.kt
Phase 08 native rewrite
Replaced the hosted legacy Operations fragment with a direct revised Operations owner that keeps scheduled-operation preselection and management flows live. [branch: DEBUG-v004]
2026-05-19 00:30:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedOperationsSectionBinder.kt
Phase 08 native rewrite
Dropped hosted Operations fragment attachment and converted the binder into direct revised section-order logic. [branch: DEBUG-v004]
2026-05-19 00:30:45
app_v2/src/main/res/layout/fragment_settings_revised_operations.xml
Phase 08 native rewrite
Changed the revised Operations layout into a direct row-tree include wrapper instead of a hosted fragment container. [branch: DEBUG-v004]
2026-05-19 00:30:46
app_v2/src/main/res/layout-land/fragment_settings_revised_operations.xml
Phase 08 native rewrite
Changed the landscape revised Operations layout into a direct row-tree include wrapper for orientation parity. [branch: DEBUG-v004]
2026-05-19 00:30:46
PLAN/S0125_settings-activity-revision/PHASE_08__rewritten-general-operations.md
Phase 08 native rewrite
Marked revised General and Operations rewrite steps complete enough for manual testing while leaving search and parity-doc cleanup pending. [branch: DEBUG-v004]
2026-05-19 00:30:46
PLAN/S0125_settings-activity-revision/INDEX.md
Phase 08 native rewrite
Marked Phase 08 in progress with General and Operations rewritten and the remaining blocker narrowed to Media, Playback, and doc parity cleanup. [branch: DEBUG-v004]
2026-05-19 00:37:21
PLAN/S0002_decompose-giant-files.md
S0002
Changed decomposition queue policy to prioritize the largest files first. [branch: DEBUG-v004]
2026-05-19 00:37:42
PLAN/S0002_decompose-giant-files.md
S0002
Aligned the headline loop status with the largest-file-first queue policy. [branch: DEBUG-v004]
2026-05-19 00:42:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt
S0002
Reduced TextViewerManager below the 1500 LOC hard cap by delegating OCR and search helpers. [branch: DEBUG-v004]
2026-05-19 00:42:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextOcrDisplayManager.kt
S0002
Added helper for OCR and translated text display state. [branch: DEBUG-v004]
2026-05-19 00:42:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerSearchManager.kt
S0002
Added helper for text viewer search and scroll commands. [branch: DEBUG-v004]
2026-05-19 00:47:00
PLAN/S0002_decompose-giant-files.md
S0002
Recorded Wave 50 TextViewerManager partial split and refreshed largest-file queue values. [branch: DEBUG-v004]
2026-05-19 00:48:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0125 Main re-entry
Restored a separate global revised settings launch from Main while keeping the legacy settings button unchanged. [branch: DEBUG-v004]
2026-05-19 00:48:11
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainLayoutChromeManager.kt
S0125 Main re-entry
Added orientation-aware labeling for the separate revised settings button on Main. [branch: DEBUG-v004]
2026-05-19 00:48:11
app_v2/src/main/res/layout/activity_main.xml
S0125 Main re-entry
Added a portrait Main toolbar button for the revised settings window next to the legacy settings button. [branch: DEBUG-v004]
2026-05-19 00:48:11
app_v2/src/main/res/layout-land/activity_main.xml
S0125 Main re-entry
Added a landscape Main toolbar button for the revised settings window next to the legacy settings button. [branch: DEBUG-v004]
2026-05-19 00:48:11
PLAN/S0125_settings-activity-revision.md
S0125 Main re-entry
Updated the strategic spec to reflect that the revised host is the second global settings window, not a Browse-only affordance. [branch: DEBUG-v004]
2026-05-19 00:48:11
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 Main re-entry
Updated the tactical plan to allow a separate Main launch into revised settings while preserving the legacy button. [branch: DEBUG-v004]
2026-05-19 00:48:11
PLAN/S0125_settings-activity-revision/PARITY_AUDIT_CHECKLIST.md
S0125 Main re-entry
Updated launch-path audit truth to include the restored Main revised-settings button. [branch: DEBUG-v004]
2026-05-19 00:48:11
docs/FEATURES.md
S0125 Main re-entry
Updated the feature inventory to describe Main as the dual-run settings entry and Browse as a resource-scoped shortcut. [branch: DEBUG-v004]
2026-05-19 00:48:11
docs/FEATURES_RU.md
S0125 Main re-entry
Updated the Russian feature inventory to describe Main as the dual-run settings entry and Browse as a resource-scoped shortcut. [branch: DEBUG-v004]
2026-05-19 00:48:11
docs/FEATURES_UK.md
S0125 Main re-entry
Updated the Ukrainian feature inventory to describe Main as the dual-run settings entry and Browse as a resource-scoped shortcut. [branch: DEBUG-v004]
2026-05-19 00:53:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt
S0002
Reduced EpubViewerManager by delegating EPUB resource preprocessing. [branch: DEBUG-v004]
2026-05-19 00:53:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubResourceContentHelper.kt
S0002
Added helper for EPUB HTML preprocessing and embedded resource responses. [branch: DEBUG-v004]
2026-05-19 00:54:45
PLAN/S0249_vr-test-immersive-image-stage1a/INDEX.md
spec
S0249: lock all best-practice decisions, retarget settings host to RevisedMediaSettingsFragment (NEW), confirm landscape layout coverage, lock Navier8 MIT asset [branch: DEBUG-v004]
2026-05-19 00:55:36
PLAN/S0002_decompose-giant-files.md
S0002
Recorded Wave 51 EpubViewerManager partial split and refreshed largest-file queue values. [branch: DEBUG-v004]
2026-05-19 01:02:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0002
Reduced PlayerActivity by extracting the video handle adapter. [branch: DEBUG-v004]
2026-05-19 01:02:53
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivityVideoHandle.kt
S0002
Added PlayerActivity video handle adapter for playback dialog controls. [branch: DEBUG-v004]
2026-05-19 01:07:43
app_v2/src/main/java/com/sza/fastmediasorter/core/xr/XrEntryResult.kt
S0249
Add sealed XrEntryResult model for diagnostic-image entry outcomes (Started, UnavailableNoRuntime, UnavailableDisabledByUser, InitializationFailed) [branch: DEBUG-v004]
2026-05-19 01:07:43
app_v2/src/main/java/com/sza/fastmediasorter/core/xr/XrEntryGateway.kt
S0249
Extend XrEntryGateway with enterDiagnosticImage(): XrEntryResult; keep legacy tryEnter() for compat [branch: DEBUG-v004]
2026-05-19 01:07:44
app_v2/src/vrStub/java/com/sza/fastmediasorter/core/xr/NoOpXrEntryGateway.kt
S0249
Implement enterDiagnosticImage() returning UnavailableNoRuntime in phone-only no-op gateway [branch: DEBUG-v004]
2026-05-19 01:07:44
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt
S0249
Implement enterDiagnosticImage() Phase 01 seam returning InitializationFailed until Phase 02 runtime wiring [branch: DEBUG-v004]
2026-05-19 01:08:18
PLAN/S0002_decompose-giant-files.md
S0002
Recorded Wave 52 PlayerActivity partial split and refreshed largest-file queue values. [branch: DEBUG-v004]
2026-05-19 01:13:36
temp/S0125_settings_redesign_research_2026-05-19.md
S0125-research
Record AS-IS evidence for the settings redesign reboot [branch: DEBUG-v004]
2026-05-19 01:13:36
dev/S0125_settings_redesign_task_definition_2026-05-19.md
S0125-design
Define the redesign reboot task contract and UI decisions [branch: DEBUG-v004]
2026-05-19 01:13:36
dev/S0125_settings_redesign_design_2026-05-19.md
S0125-design
Add the native settings redesign reboot design baseline [branch: DEBUG-v004]
2026-05-19 01:13:36
dev/S0125_settings_redesign_plan_2026-05-19.md
S0125-plan
Add the execution plan for the settings redesign reboot [branch: DEBUG-v004]
2026-05-19 01:13:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
MainActivity
Retract the public revised settings launch from Main [branch: DEBUG-v004]
2026-05-19 01:13:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainLayoutChromeManager.kt
MainLayoutChromeManager
Remove revised settings toolbar label handling after rollback [branch: DEBUG-v004]
2026-05-19 01:13:37
app_v2/src/main/res/layout/activity_main.xml
main-toolbar
Remove the public revised settings button in portrait Main [branch: DEBUG-v004]
2026-05-19 01:13:38
app_v2/src/main/res/layout-land/activity_main.xml
main-toolbar
Remove the public revised settings button in landscape Main [branch: DEBUG-v004]
2026-05-19 01:13:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
BrowseManagerInitializer
Retract revised Browse settings exposure and restore the legacy keyboard/help path [branch: DEBUG-v004]
2026-05-19 01:13:38
docs/FEATURES.md
features-doc
Remove misleading dual-run settings exposure wording [branch: DEBUG-v004]
2026-05-19 01:13:38
docs/FEATURES_RU.md
features-doc
Remove misleading dual-run settings exposure wording [branch: DEBUG-v004]
2026-05-19 01:13:39
docs/FEATURES_UK.md
features-doc
Remove misleading dual-run settings exposure wording [branch: DEBUG-v004]
2026-05-19 01:13:39
PLAN/S0125_settings-activity-revision/INDEX.md
S0125-plan
Mark Phase 08 blocked and point to the redesign reboot baseline [branch: DEBUG-v004]
2026-05-19 01:13:39
PLAN/S0125_settings-activity-revision/PHASE_08__rewritten-general-operations.md
S0125-plan
Freeze Phase 08 until the redesign reboot baseline replaces direct legacy binding [branch: DEBUG-v004]
2026-05-19 01:13:40
PLAN/S0125_settings-activity-revision.md
S0125-spec
Replace early public dual-run language with hidden incubation and gated re-exposure [branch: DEBUG-v004]
2026-05-19 01:13:40
dev/CATALOG/app_v2.jsonl
catalog
Refresh app_v2 catalog after Kotlin changes [branch: DEBUG-v004]
2026-05-19 01:13:40
dev/CATALOG/app_v2.md
catalog
Render app_v2 catalog after Kotlin changes [branch: DEBUG-v004]
2026-05-19 01:22:48
app_v2/build.gradle.kts
S0249
Phase 02: enable prefab + scoped externalNativeBuild for src/vr/cpp; add OpenXR loader 1.1.57 to vr/noLegal; FMS_BUILD_XR_RUNTIME=ON flag gates fms_diagnostic_xr target [branch: DEBUG-v004]
2026-05-19 01:22:48
app_v2/src/vr/cpp/CMakeLists.txt
S0249
Phase 02: restore CMakeLists.txt with fms_diagnostic_xr SHARED target gated by FMS_BUILD_XR_RUNTIME; link OpenXR::openxr_loader + android/log/EGL/GLESv3 [branch: DEBUG-v004]
2026-05-19 01:22:48
app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp
S0249
Phase 02: native OpenXR bridge - extension probing, instance/system acquisition, JNI surface (probeExtensions/startSession/presentStaticImage/requestExit/isRunning/hasEquirect2). Session creation deferred to Phase 03 [branch: DEBUG-v004]
2026-05-19 01:22:49
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/DiagnosticXrRuntime.kt
S0249
Phase 02: DiagnosticXrRuntime interface + DiagnosticXrNativeResult enum mirroring native ordinals [branch: DEBUG-v004]
2026-05-19 01:22:49
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt
S0249
Phase 02: NativeDiagnosticXrRuntime JNI wrapper loading libfms_diagnostic_xr.so; Timber-logged native faults [branch: DEBUG-v004]
2026-05-19 01:22:49
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/di/XrModule.kt
S0249
Phase 02: Hilt binding for DiagnosticXrRuntime to NativeDiagnosticXrRuntime in vr/noLegal flavors [branch: DEBUG-v004]
2026-05-19 01:22:50
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt
S0249
Phase 02: inject DiagnosticXrRuntime + ApplicationContext; enterDiagnosticImage delegates probe + startSession + maps results to XrEntryResult [branch: DEBUG-v004]
2026-05-19 01:24:16
PLAN/S0125_settings-activity-revision.md
spec-update
Refinement (manual owner clarification: new-object migration isolation) [branch: DEBUG-v004]
2026-05-19 01:25:18
CLAUDE.md
rules
Add PowerShell Efficiency section: mandatory -NoProfile, batch related script calls into one pwsh process, prefer wrappers; update all in-doc pwsh examples to -NoProfile [branch: DEBUG-v004]
2026-05-19 01:25:18
scripts/catalog_sync.ps1
tooling
New wrapper: one-shot Catalogue sync (scan + render) in a single pwsh process, eliminates double cold-start [branch: DEBUG-v004]
2026-05-19 01:27:39
PLAN/S0125_settings-activity-revision.md
S0125 tactical reset
Remove active tactical-plan link and mark S0125 tactical track deleted by owner request [branch: DEBUG-v004]
2026-05-19 01:27:39
PLAN/S0125_settings-activity-revision/
S0125 tactical reset
Delete all S0125 tactical plan and parity artefacts before rebuild from scratch [branch: DEBUG-v004]
2026-05-19 01:27:39
dev/S0125_*
S0125 tactical reset
Delete S0125 phase0 and redesign reboot planning artefacts by owner request [branch: DEBUG-v004]
2026-05-19 01:37:52
AGENTS.md
rules
Add Section 9 PowerShell Efficiency for Codex/OpenAI agents; update Section 4 Research Order and Section 8 Workflow to use pwsh -NoProfile and catalog_sync.ps1 wrapper [branch: DEBUG-v004]
2026-05-19 01:37:52
.github/copilot-instructions.md
rules
Add PWSH_EFFICIENCY constraint and catalog_sync.ps1 reference for GitHub Copilot [branch: DEBUG-v004]
2026-05-19 01:37:52
.github/prompts/*.prompt.md
rules
Bulk replace pwsh -File with pwsh -NoProfile -File across all Copilot prompts; route catalog scan+render chains through catalog_sync.ps1 wrapper [branch: DEBUG-v004]
2026-05-19 01:37:52
.github/agents/*.agent.md
rules
Sync Copilot agent definitions with PowerShell -NoProfile rule and catalog_sync.ps1 wrapper [branch: DEBUG-v004]
2026-05-19 01:37:52
.claude/commands/*.md
rules
Bulk replace pwsh -File with pwsh -NoProfile -File across all Claude slash commands; route catalog scan+render chains through catalog_sync.ps1 wrapper [branch: DEBUG-v004]
2026-05-19 01:37:52
.claude/agents/*.md
rules
Sync Claude agent definitions with PowerShell -NoProfile rule and catalog_sync.ps1 wrapper [branch: DEBUG-v004]
2026-05-19 01:39:06
dev/S0125_settings_redesign_blueprint_2026-05-19.md
S0125 blueprint
Add pre-implementation blueprint for revised settings window owner review [branch: DEBUG-v004]
2026-05-19 01:45:41
app_v2/src/vr/res/drawable-nodpi/vr_diagnostic_stereo_tb.jpg
S0249
Phase 03: bundle Navier8 MIT stereo TB equirect 4096x4096 JPEG (651KB) as VR-flavor diagnostic asset [branch: DEBUG-v004]
2026-05-19 01:45:41
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/assets/DiagnosticXrAssetProvider.kt
S0249
Phase 03: DiagnosticXrAssetProvider loads bundled diagnostic asset into ByteArray + StereoLayout.TopBottom metadata [branch: DEBUG-v004]
2026-05-19 01:45:41
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/DiagnosticXrRuntime.kt
S0249
Phase 03: add presentBundledDiagnosticImage() to interface [branch: DEBUG-v004]
2026-05-19 01:45:41
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt
S0249
Phase 03: inject DiagnosticXrAssetProvider; presentBundledDiagnosticImage delegates to presentStaticImage with loaded asset [branch: DEBUG-v004]
2026-05-19 01:45:42
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt
S0249
Phase 03: chain probe -> startSession -> presentBundledDiagnosticImage; map all branches to XrEntryResult [branch: DEBUG-v004]
2026-05-19 01:45:42
THIRD_PARTY_LICENSES.md
S0249
Phase 03: create third-party licenses doc with Navier8 MIT attribution for bundled diagnostic image [branch: DEBUG-v004]
2026-05-19 01:52:32
PLAN/S0125_settings-activity-revision/BLUEPRINT_2026-05-19.md
S0125 blueprint
Move revised settings blueprint from dev/ into the S0125 plan folder [branch: DEBUG-v004]
2026-05-19 01:52:32
dev/S0125_settings_redesign_blueprint_2026-05-19.md
S0125 blueprint
Remove dev copy after moving the blueprint into PLAN/S0125_settings-activity-revision [branch: DEBUG-v004]
2026-05-19 01:57:44
PLAN/S0250_nolegal-vr-unification.md
spec-all
S0250: Strategic spec — noLegal VR unification + vrUnlicensed archive [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision/INDEX.md
spec-tech
Create tactical plan for S0125 [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision/PHASE_01__inventory-shell-foundation.md
spec-tech
Phase 01: inventory-shell-foundation [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision/PHASE_02__general-native-page.md
spec-tech
Phase 02: general-native-page [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision/PHASE_03__operations-native-page.md
spec-tech
Phase 03: operations-native-page [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision/PHASE_04__media-native-page.md
spec-tech
Phase 04: media-native-page [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision/PHASE_05__playback-native-page.md
spec-tech
Phase 05: playback-native-page [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision/PHASE_06__search-reexposure-gate.md
spec-tech
Phase 06: search-reexposure-gate [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision/PHASE_07__docs-catalog-cleanup.md
spec-tech
Phase 07: docs-catalog-cleanup [branch: DEBUG-v004]
2026-05-19 02:11:08
PLAN/S0125_settings-activity-revision.md
spec-tech
Status -> Tactical and rebuild tactical plan for S0125 [branch: DEBUG-v004]
2026-05-19 02:21:15
temp/S0125_inventory_portrait.md
S0125 01.1
Capture portrait settings baseline inventory [branch: DEBUG-v004]
2026-05-19 02:21:15
temp/S0125_inventory_landscape.md
S0125 01.1
Capture landscape settings baseline inventory [branch: DEBUG-v004]
2026-05-19 02:21:15
temp/S0125_migration_map.md
S0125 01.1
Capture settings migration map baseline [branch: DEBUG-v004]
2026-05-19 02:21:15
PLAN/S0125_settings-activity-revision.md
S0125 status
Status -> In Progress [branch: DEBUG-v004]
2026-05-19 02:21:15
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 INDEX
Mark Phase 01 in progress and advance Step 01.1 to 1/4 [branch: DEBUG-v004]
2026-05-19 02:21:15
PLAN/S0125_settings-activity-revision/PHASE_01__inventory-shell-foundation.md
S0125 01.1
Complete Step 01.1 baseline inventory and migration map [branch: DEBUG-v004]
2026-05-19 02:23:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsActivity.kt
S0125 01.2
Save and restore revised host tab and search shell state [branch: DEBUG-v004]
2026-05-19 02:23:09
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsPageContract.kt
S0125 01.2
Add revised page state contract for future section and scroll restoration [branch: DEBUG-v004]
2026-05-19 02:23:09
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 INDEX
Advance Phase 01 to 2/4 after Step 01.2 [branch: DEBUG-v004]
2026-05-19 02:23:09
PLAN/S0125_settings-activity-revision/PHASE_01__inventory-shell-foundation.md
S0125 01.2
Complete Step 01.2 revised host state contract [branch: DEBUG-v004]
2026-05-19 02:24:38
app_v2/build.gradle.kts
spec-all
S0250 Phase 1+2+4+5: flip noLegal VR flags, wire vrStub into standard/lite/photos/legacy, archive vrUnlicensed flavor [branch: DEBUG-v004]
2026-05-19 02:24:38
dev/CATALOG/scripts/set.ps1
spec-all
S0250 Phase 5: drop vrUnlicensed from valid flavors enum [branch: DEBUG-v004]
2026-05-19 02:24:38
scripts/builders/build-ffmpeg-dts.sh
spec-all
S0250 Phase 5: drop vrUnlicensedImplementation from AAR-declaration template [branch: DEBUG-v004]
2026-05-19 02:24:38
docs/VR_EDITION.md
spec-all
S0250 Phase 6: rewrite Distribution Channels (vrUnlicensed -> noLegal) [branch: DEBUG-v004]
2026-05-19 02:24:38
docs/VR_EDITION_RU.md
spec-all
S0250 Phase 6: mirror RU distribution rewrite [branch: DEBUG-v004]
2026-05-19 02:24:38
docs/VR_EDITION_UK.md
spec-all
S0250 Phase 6: mirror UK distribution rewrite [branch: DEBUG-v004]
2026-05-19 02:24:38
docs/LIMITATIONS.md
spec-all
S0250 Phase 6: rewrite VR Distribution channel description [branch: DEBUG-v004]
2026-05-19 02:24:38
docs/LIMITATIONS_RU.md
spec-all
S0250 Phase 6: mirror RU limitations [branch: DEBUG-v004]
2026-05-19 02:24:38
docs/LIMITATIONS_UK.md
spec-all
S0250 Phase 6: mirror UK limitations [branch: DEBUG-v004]
2026-05-19 02:24:38
docs/DEV_OPS.md
spec-all
S0250 Phase 6: update flavor matrix and ABI strategy [branch: DEBUG-v004]
2026-05-19 02:24:38
dev/FLAVOR_DEVELOPMENT_RULES.md
spec-all
S0250 Phase 6: drop future vrUnlicensed mention from RULE 6 [branch: DEBUG-v004]
2026-05-19 02:24:38
dev/CATALOG/README.md
spec-all
S0250 Phase 6: drop vrUnlicensed from valid noFlavors enum [branch: DEBUG-v004]
2026-05-19 02:24:38
CLAUDE.md
spec-all
S0250 Phase 7: drop vrUnlicensed from flavor list and Rule 15 [branch: DEBUG-v004]
2026-05-19 02:24:38
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/streaming/StreamingPipeline.kt
spec-all
S0250: KDoc cleanup (vrUnlicensed -> noLegal in flavor list) [branch: DEBUG-v004]
2026-05-19 02:24:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt
spec-all
S0250: KDoc cleanup (S0232 historical note now references noLegal) [branch: DEBUG-v004]
2026-05-19 02:24:38
app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/di/StreamingModule.kt
spec-all
S0250: KDoc cleanup (vrUnlicensed -> noLegal in flavor list) [branch: DEBUG-v004]
2026-05-19 02:25:45
app_v2/src/main/res/values/strings.xml
S0249
Phase 04: add 6 EN strings for VR controls block (title, advisory, button label, toasts) [branch: DEBUG-v004]
2026-05-19 02:25:46
app_v2/src/main/res/values-ru/strings.xml
S0249
Phase 04: add 6 RU strings for VR controls block [branch: DEBUG-v004]
2026-05-19 02:25:46
app_v2/src/main/res/values-uk/strings.xml
S0249
Phase 04: add 6 UK strings for VR controls block [branch: DEBUG-v004]
2026-05-19 02:25:46
app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrMediaSectionContract.kt
S0249
Phase 04: contract that decides whether Media Settings exposes VR section [branch: DEBUG-v004]
2026-05-19 02:25:47
app_v2/src/vrStub/java/com/sza/fastmediasorter/core/xr/NoOpVrMediaSectionContract.kt
S0249
Phase 04: no-op contract for phone-only flavors (isAvailable=false) [branch: DEBUG-v004]
2026-05-19 02:25:47
app_v2/src/vrStub/java/com/sza/fastmediasorter/core/xr/di/NoOpXrModule.kt
S0249
Phase 04: bind NoOpVrMediaSectionContract [branch: DEBUG-v004]
2026-05-19 02:25:47
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/VrMediaSectionContractImpl.kt
S0249
Phase 04: real contract for vr/noLegal (isAvailable=true, supplies VrSettingsBlockFragment) [branch: DEBUG-v004]
2026-05-19 02:25:48
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/di/XrModule.kt
S0249
Phase 04: bind VrMediaSectionContractImpl [branch: DEBUG-v004]
2026-05-19 02:25:48
app_v2/src/vr/res/layout/fragment_vr_settings_block.xml
S0249
Phase 04: new VR block layout - advisory + master toggle + Test Immersive button [branch: DEBUG-v004]
2026-05-19 02:25:48
app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt
S0249
Phase 04: block fragment - observe XrDetectionFacade+master, gate UI, route Test Immersive to XrEntryGateway [branch: DEBUG-v004]
2026-05-19 02:25:49
app_v2/src/main/res/layout/fragment_settings_media_container.xml
S0249
Phase 04: add 6th VR section card (headerVr+containerVr) after Video block [branch: DEBUG-v004]
2026-05-19 02:25:49
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt
S0249
Phase 04: @AndroidEntryPoint + inject VrMediaSectionContract; attach VR fragment to containerVr; expandable VR section with default expanded [branch: DEBUG-v004]
2026-05-19 02:25:49
app_v2/src/vr/res/values/strings.xml
S0249
Phase 04: remove settings_tab_vr + placeholder_summary (5th tab obsoleted) [branch: DEBUG-v004]
2026-05-19 02:25:50
app_v2/src/vr/res/values-ru/strings.xml
S0249
Phase 04: remove obsoleted RU strings [branch: DEBUG-v004]
2026-05-19 02:25:50
app_v2/src/vr/res/values-uk/strings.xml
S0249
Phase 04: remove obsoleted UK strings [branch: DEBUG-v004]
2026-05-19 02:25:50
THIRD_PARTY_LICENSES.md
S0249
Phase 04: noop touch [branch: DEBUG-v004]
2026-05-19 02:25:51
app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsFragment.kt
S0249
Phase 04: DELETED - replaced by VrSettingsBlockFragment (block now lives in Media tab) [branch: DEBUG-v004]
2026-05-19 02:25:51
app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsTabExtension.kt
S0249
Phase 04: DELETED - 5th VR tab removed; VR is now a Media section [branch: DEBUG-v004]
2026-05-19 02:25:51
app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/di/VrSettingsExtensionModule.kt
S0249
Phase 04: DELETED - tab binding obsolete [branch: DEBUG-v004]
2026-05-19 02:25:52
app_v2/src/vr/res/layout/fragment_vr_settings.xml
S0249
Phase 04: DELETED - replaced by fragment_vr_settings_block.xml [branch: DEBUG-v004]
2026-05-19 02:28:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
S0125 01.3
Normalize revised search registry to blueprint section ids via visible header and entry anchors [branch: DEBUG-v004]
2026-05-19 02:29:15
PLAN/S0125_settings-activity-revision/INDEX.md
S0125 INDEX
Advance Phase 01 to 3/4 after Step 01.3 [branch: DEBUG-v004]
2026-05-19 02:29:15
PLAN/S0125_settings-activity-revision/PHASE_01__inventory-shell-foundation.md
S0125 01.3
Complete Step 01.3 blueprint section id normalization bridge [branch: DEBUG-v004]
2026-05-19 02:29:15
dev/CATALOG/app_v2.jsonl
S0125 catalog
Refresh app_v2 catalog after revised settings host and search registry changes [branch: DEBUG-v004]
2026-05-19 02:29:15
dev/CATALOG/app_v2.md
S0125 catalog
Refresh app_v2 catalog after revised settings host and search registry changes [branch: DEBUG-v004]
2026-05-19 02:29:31
PLAN/S0125_settings-activity-revision/PHASE_01__inventory-shell-foundation.md
S0125 01.3
Complete Step 01.3 blueprint section id normalization bridge [branch: DEBUG-v004]
2026-05-19 02:29:31
dev/CATALOG/app_v2.jsonl
S0125 catalog
Refresh app_v2 catalog after revised settings host and search registry changes [branch: DEBUG-v004]
2026-05-19 02:29:31
dev/CATALOG/app_v2.md
S0125 catalog
Refresh app_v2 catalog after revised settings host and search registry changes [branch: DEBUG-v004]
2026-05-19 02:31:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
spec-all
S0250: Timber debug tag at VR-UI activation point (BlockNeedUserTest gate) [branch: DEBUG-v004]
2026-05-19 02:31:57
PLAN/S0250_nolegal-vr-unification.md
spec-all
S0250: Last Audit + BlockNeedUserTest status [branch: DEBUG-v004]
2026-05-19 02:32:46
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/input/DiagnosticXrInputExitHandler.kt
S0249
Phase 05: Android-side input exit handler with grace period; KeyEvent/MotionEvent/NativeAction -> exitRequested flow [branch: DEBUG-v004]
2026-05-19 02:32:47
app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp
S0249
Phase 05: action set scaffolding (xrCreateActionSet, anyButton/anyTrigger boolean actions, xrSyncActions+xrGetActionStateBoolean polling, JNI nativePollExitTriggered, full teardown chain) [branch: DEBUG-v004]
2026-05-19 02:32:47
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt
S0249
Phase 05: pollExitTriggered() Kotlin wrapper around nativePollExitTriggered JNI [branch: DEBUG-v004]
2026-05-19 02:39:47
PLAN/S0240_vr-stack-rewrite-epic.md
S0249
Phase 06: update S0240 section 10 - introduce Stage 1A (S0249) before Stage 1B (video immerse) [branch: DEBUG-v004]
2026-05-19 02:39:47
app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt
S0249
Phase 06 Step 06.6: insert Timber.d(S0249:..) tag at flow entry for BlockNeedUserTest gate [branch: DEBUG-v004]
2026-05-19 02:39:47
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt
S0249
Phase 06 Step 06.6: insert Timber.d(S0249:..) tag at gateway entry [branch: DEBUG-v004]
2026-05-19 02:39:48
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt
S0249
Phase 06 Step 06.6: insert Timber.d(S0249:..) tag at native startSession entry [branch: DEBUG-v004]
2026-05-19 02:56:45
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt
xr-runtime
Demote NativeDiagnosticXrRuntime loadLibrary failure from Timber.e to Timber.i: missing libfms_diagnostic_xr.so on non-arm64 ABI is an expected device-capability mismatch per S0156 ADR-8 (noLegal flavor ships arm64-v8a slice only), not a program error. Added nativeAvailable short-circuit so every runtime method returns LoaderUnavailable/false cleanly without triggering UnsatisfiedLinkError storms from downstream native call sites. SecurityException catch kept at Timber.e (genuine misconfiguration). [branch: DEBUG-v004]
2026-05-19 03:22:44
app_v2/src/main/res/layout/fragment_settings_video.xml
S0251
Phase 01.1: remove dead layoutVrSettings block (3 forced-format controls + 2 live switches; live switches re-added in 01.3) [branch: DEBUG-v004]
2026-05-19 03:23:44
app_v2/src/main/res/layout-land/fragment_settings_video.xml
S0251
Phase 01.2: landscape parity - remove dead layoutVrSettings block [branch: DEBUG-v004]
2026-05-19 03:25:47
app_v2/src/main/res/layout/fragment_settings_video.xml
S0251
Phase 01.3: re-add switchPlayerShowFps + switchAllowSeparateWindow as root-level siblings after snapshot block (portrait) [branch: DEBUG-v004]
2026-05-19 03:25:47
app_v2/src/main/res/layout-land/fragment_settings_video.xml
S0251
Phase 01.3: re-add switchPlayerShowFps + switchAllowSeparateWindow as root-level siblings after snapshot block (landscape) [branch: DEBUG-v004]
2026-05-19 03:28:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
S0251
Phase 01.4: drop setupVrSettings (63 LOC) + SUPPORT_VR_PLAYER gates; extract setupPlayerExtras helper for switchPlayerShowFps + switchAllowSeparateWindow [branch: DEBUG-v004]
2026-05-19 03:31:00
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0251
Phase 02.1: drop dead VR forced-format fields (vrForcedPlatFormat, vrForcedSphericalFormat, vrRememberFileFormat) [branch: DEBUG-v004]
2026-05-19 03:32:51
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0251
Phase 02.2: drop 3 DataStore keys + read/write + 2 helper functions + 2 value-validator constants; also drop legacy KEY_VR_FORCED_FORMAT and KEY_VR_AUTO_DETECT_FORMAT cleanup [branch: DEBUG-v004]
2026-05-19 10:11:49
app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt
S0251
Phase 02: drop dead VR forced-format fields (vrForcedPlatFormat, vrForcedSphericalFormat, vrRememberFileFormat) [branch: DEBUG-v004]
2026-05-19 10:11:50
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
S0251
Phase 02: drop DataStore keys + read/write for removed VR forced-format fields [branch: DEBUG-v004]
2026-05-19 10:11:50
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt
S0251
Phase 02: drop three backup fields; keep legacy vrForcedFormat as null-only fallback for old JSON [branch: DEBUG-v004]
2026-05-19 10:11:50
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt
S0251
Phase 02: drop forced-format mapping + legacy migration block [branch: DEBUG-v004]
2026-05-19 10:15:41
app_v2/src/main/res/layout/activity_settings_revised.xml
S0125 Phase 01.4
Align revised settings host shell focus and search structure across portrait and landscape [branch: DEBUG-v004]
2026-05-19 10:15:42
app_v2/src/main/res/layout-land/activity_settings_revised.xml
S0125 Phase 01.4
Align revised settings host shell focus and search structure across portrait and landscape [branch: DEBUG-v004]
2026-05-19 10:21:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinator.kt
S0251
Phase 03: drop applySettings + forced-format fields + remember-enabled flag; inline resolver [branch: DEBUG-v004]
2026-05-19 10:21:05
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VrForcedFormatResolver.kt
S0251
Phase 03: inlined per §6.3 decision [branch: DEBUG-v004]
2026-05-19 10:21:06
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VrForcedFormatResolverTest.kt
S0251
Phase 03: deleted with inlined resolver [branch: DEBUG-v004]
2026-05-19 10:21:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlayerHostCapabilities.kt
S0251
Phase 03: rename remember stereo-mode host contract for unconditional per-file save [branch: DEBUG-v004]
2026-05-19 10:21:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt
S0251
Phase 03: call rememberStereoModeForCurrentFile after format override selection [branch: DEBUG-v004]
2026-05-19 10:21:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt
S0251
Phase 03: expose rememberStereoModeForCurrentFile [branch: DEBUG-v004]
2026-05-19 10:21:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0251
Phase 03: implement renamed rememberStereoModeForCurrentFile contract [branch: DEBUG-v004]
2026-05-19 10:21:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt
S0251
Phase 03: expose renamed per-file stereo save method [branch: DEBUG-v004]
2026-05-19 10:21:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt
S0251
Phase 03: implement renamed rememberStereoModeForCurrentFile contract [branch: DEBUG-v004]
2026-05-19 10:25:00
app_v2/src/main/res/layout/fragment_settings_media_container.xml
S0251
Phase 04: wrap headerVr in horizontal LinearLayout; add iconHelpVr ImageButton [branch: DEBUG-v004]
2026-05-19 10:25:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt
S0251
Phase 04: add setupVrHeaderHelp; open TooltipDialog on icon click [branch: DEBUG-v004]
2026-05-19 10:25:00
app_v2/src/main/res/values/strings.xml
S0251
Phase 04: add settings_3d_vr_help_title / _message (EN) [branch: DEBUG-v004]
2026-05-19 10:25:00
app_v2/src/main/res/values-ru/strings.xml
S0251
Phase 04: add settings_3d_vr_help_title / _message (RU) [branch: DEBUG-v004]
2026-05-19 10:25:00
app_v2/src/main/res/values-uk/strings.xml
S0251
Phase 04: add settings_3d_vr_help_title / _message (UK) [branch: DEBUG-v004]
2026-05-19 10:29:45
app_v2/src/main/res/values/strings.xml
S0251
Phase 05: drop obsolete settings_vr_* strings and vr_forced_* arrays (EN) [branch: DEBUG-v004]
2026-05-19 10:29:45
app_v2/src/main/res/values-ru/strings.xml
S0251
Phase 05: drop obsolete settings_vr_* strings and vr_forced_* arrays (RU) [branch: DEBUG-v004]
2026-05-19 10:29:45
app_v2/src/main/res/values-uk/strings.xml
S0251
Phase 05: drop obsolete settings_vr_* strings and vr_forced_* arrays (UK) [branch: DEBUG-v004]
2026-05-19 10:30:48
app_v2/src/main/res/layout/fragment_settings_revised_general.xml
S0251
Phase 05: restore revisedGeneralLegacyContent id required by RevisedGeneralSettingsFragment binding [branch: DEBUG-v004]
2026-05-19 10:30:48
app_v2/src/main/res/layout-land/fragment_settings_revised_general.xml
S0251
Phase 05: keep landscape revisedGeneralLegacyContent id parity [branch: DEBUG-v004]
2026-05-19 10:31:08
app_v2/src/main/res/layout-land/fragment_settings_revised_general.xml
S0251
Phase 05: remove duplicate include id after root content id restore [branch: DEBUG-v004]
2026-05-19 10:32:25
app_v2/src/main/res/layout/fragment_settings_revised_general.xml
S0125 Step 02.1
Replace revised General include shell with native section cards [branch: DEBUG-v004]
2026-05-19 10:32:25
app_v2/src/main/res/layout-land/fragment_settings_revised_general.xml
S0125 Step 02.1
Replace revised General include shell with native section cards [branch: DEBUG-v004]
2026-05-19 10:32:34
app_v2/src/main/res/layout-land/fragment_settings_revised_general.xml
S0251
Phase 05: remove broken self-include landscape override so binding field is generated consistently [branch: DEBUG-v004]
2026-05-19 10:33:31
app_v2/src/main/res/layout/fragment_settings_revised_general.xml
S0251
Phase 05: align revised general root id with fragment lookup [branch: DEBUG-v004]
2026-05-19 10:44:21
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt
S0250
Insert Timber.d S0250 probe in MediaSettingsFragment.attachChildFragments() to mark the live noLegal/vr VR-section entry point for device gate (replaces obsolete VideoSettingsFragment.kt:120 probe removed by 036a7e86 refactor) [branch: DEBUG-v004]
2026-05-19 10:44:24
PLAN/S0250_nolegal-vr-unification.md
S0250
Rewrite Last Audit block to reflect actual HEAD state - Phase 2/3 redefinitions documented, Timber probe relocated to MediaSettingsFragment, false claims removed (verification pass before Verified flip) [branch: DEBUG-v004]
2026-05-19 10:50:14
PLAN/S0249_vr-test-immersive-image-stage1a.md
S0249
Strategic spec: tighten Status line, add §11a testability matrix - what is and is not testable on device until Phase 02 step 02.6 session-bringup lands [branch: DEBUG-v004]
2026-05-19 10:50:17
PLAN/S0249_vr-test-immersive-image-stage1a/INDEX.md
S0249
Tactical INDEX: flip Phase 05/06 from Done back to In Progress (both depend on Phase 02.6 session bring-up to be exercisable), retract premature 02:40 BlockNeedUserTest device-test invitation, clarify testability scope [branch: DEBUG-v004]
2026-05-19 10:51:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedGeneralSettingsFragment.kt
S0125 Step 02.2
Move revised General off legacy FragmentSettingsGeneralBinding and bind the native hierarchy directly. [branch: DEBUG-v004]
2026-05-19 10:51:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedGeneralSectionBinder.kt
S0125 Step 02.2
Add revised section toggles and a compatibility bridge for existing General helpers. [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience.md
S0252
Add strategic spec for SFTP audio car playback resilience [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/INDEX.md
S0252
Create tactical plan for S0252 [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_01__classify-evidence.md
S0252
Create Phase 01 classify evidence [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_02__stream-lifecycle.md
S0252
Create Phase 02 stream lifecycle [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_03__audio-precache.md
S0252
Create Phase 03 audio pre-cache [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_04__memory-acceptance.md
S0252
Create Phase 04 memory acceptance [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_05__docs-catalog-cleanup.md
S0252
Create Phase 05 docs catalog cleanup [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0207_radical-memory-reduction.md
S0207
Add 2026-05-19 SFTP MP3 memory evidence and link S0252 [branch: DEBUG-v004]
2026-05-19 10:52:05
PLAN/S0219_bugfix-sftp-idle-retry-race.md
S0219
Add 2026-05-19 SFTP MP3 inputstream evidence and link S0252 [branch: DEBUG-v004]
2026-05-19 10:57:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
S0125 Step 02.3
Align revised General search section labels, anchors, and management-row routing with the native page structure. [branch: DEBUG-v004]
2026-05-19 10:57:34
app_v2/src/main/res/values/strings.xml
S0125 Step 02.3
Add search-specific revised General section strings for grid/browse and network/cache. [branch: DEBUG-v004]
2026-05-19 10:57:34
app_v2/src/main/res/values-ru/strings.xml
S0125 Step 02.3
Add Russian revised General section strings for grid/browse and network/cache. [branch: DEBUG-v004]
2026-05-19 10:57:34
app_v2/src/main/res/values-uk/strings.xml
S0125 Step 02.3
Add Ukrainian revised General section strings for grid/browse and network/cache. [branch: DEBUG-v004]
2026-05-19 10:58:01
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience.md
S0252
Phase 01: resolve SFTP audio log research ownership [branch: DEBUG-v004]
2026-05-19 10:58:01
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/INDEX.md
S0252
Phase 01: mark classify-evidence done and unblock code phases [branch: DEBUG-v004]
2026-05-19 10:58:01
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_01__classify-evidence.md
S0252
Phase 01: record step logs and done criteria [branch: DEBUG-v004]
2026-05-19 11:02:26
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpOperationFailure.kt
S0252
Phase 02: add expected SFTP stream-close classification [branch: DEBUG-v004]
2026-05-19 11:02:26
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SftpOperationMessageResolver.kt
S0252
Phase 02: handle expected stream-close category for exhaustive resolver [branch: DEBUG-v004]
2026-05-19 11:02:26
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
S0252
Phase 02: downgrade expected InputStream close outcomes and preserve active failures [branch: DEBUG-v004]
2026-05-19 11:02:26
app_v2/src/test/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSourceTest.kt
S0252
Phase 02: add classifier tests for expected close and active failure [branch: DEBUG-v004]
2026-05-19 11:02:26
dev/CATALOG/app_v2.jsonl
S0252
Phase 02: refresh app_v2 catalog after SFTP stream lifecycle changes [branch: DEBUG-v004]
2026-05-19 11:02:26
dev/CATALOG/app_v2.md
S0252
Phase 02: render app_v2 catalog after SFTP stream lifecycle changes [branch: DEBUG-v004]
2026-05-19 11:02:26
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_02__stream-lifecycle.md
S0252
Phase 02: record partial implementation and unit-test blocker [branch: DEBUG-v004]
2026-05-19 11:02:26
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/INDEX.md
S0252
Phase 02: mark stream lifecycle in progress with unit-test blocker [branch: DEBUG-v004]
2026-05-19 11:05:55
app_v2/src/main/res/layout/fragment_settings_revised_operations.xml
S0125 Step 03.1
Replace the revised Operations include shell with native card sections and a dedicated trash card. [branch: DEBUG-v004]
2026-05-19 11:05:55
app_v2/src/main/res/layout-land/fragment_settings_revised_operations.xml
S0125 Step 03.1
Mirror the native revised Operations card layout in landscape without the legacy include shell. [branch: DEBUG-v004]
2026-05-19 11:07:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedOperationsSettingsFragment.kt
S0125 Step 03.2
Move revised Operations off FragmentSettingsDestinationsBinding and bind the native hierarchy directly. [branch: DEBUG-v004]
2026-05-19 11:07:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedOperationsSectionBinder.kt
S0125 Step 03.2
Simplify revised Operations section expansion for the native card hierarchy. [branch: DEBUG-v004]
2026-05-19 11:16:00
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/entry/VrTaskTransitionTest.kt
S0252 Phase 02
Disabled stale VrTaskTransition unit-test body after S0251 removed the production transition class, unblocking targeted SFTP data source tests. [branch: DEBUG-v004]
2026-05-19 11:17:13
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_02__stream-lifecycle.md
S0252 Phase 02
Closed stream lifecycle phase after expected close classification and targeted SFTP DataSource unit tests passed. [branch: DEBUG-v004]
2026-05-19 11:17:13
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/INDEX.md
S0252 Phase 02
Marked stream lifecycle phase done and advanced S0252 tactical progress to 2 of 5 phases. [branch: DEBUG-v004]
2026-05-19 11:21:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchPolicyManager.kt
S0252 Phase 03
Added source-aware SFTP audio startup pre-cache policy and recoverable next-track prefetch decision model. [branch: DEBUG-v004]
2026-05-19 11:21:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
S0252 Phase 03
Applied SFTP audio early direct-stream fallback and recoverable next-track prefetch failure logging. [branch: DEBUG-v004]
2026-05-19 11:21:33
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/PlayerPrefetchManagerTest.kt
S0252 Phase 03
Covered SFTP audio early fallback, non-audio default behavior, and recoverable next-track prefetch failure policy. [branch: DEBUG-v004]
2026-05-19 11:21:33
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_03__audio-precache.md
S0252 Phase 03
Closed audio pre-cache phase with build, targeted tests, and verification predicates recorded. [branch: DEBUG-v004]
2026-05-19 11:21:42
dev/CATALOG/app_v2.jsonl
S0252 Phase 03
Regenerated app_v2 catalog after adding SFTP audio pre-cache policy API. [branch: DEBUG-v004]
2026-05-19 11:21:42
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/INDEX.md
S0252 Phase 03
Advanced S0252 tactical progress to 3 of 5 phases after audio pre-cache completion. [branch: DEBUG-v004]
2026-05-19 11:21:43
dev/CATALOG/app_v2.md
S0252 Phase 03
Regenerated rendered app_v2 catalog after adding SFTP audio pre-cache policy API. [branch: DEBUG-v004]
2026-05-19 11:21:43
app_v2/build.gradle.kts
S0252 Validation
Debug build auto-versioned standard debug APK to 2.60.5191.120 during S0252 validation. [branch: DEBUG-v004]
2026-05-19 11:21:55
app_v2/src/vr/cpp/xr_session.h
S0249
NEW: OpenXR session lifecycle header (init/attach surface/start/upload texture/run frame loop/request exit/shutdown) [branch: DEBUG-v004]
2026-05-19 11:21:55
app_v2/src/vr/cpp/xr_session.cpp
S0249
NEW: full OpenXR session bring-up - EGL context, view config enumeration, per-eye swapchain, reference space (LOCAL), action set with Khronos Simple + Oculus Touch bindings, frame loop (xrPollEvent/xrWaitFrame/xrLocateViews/xrEndFrame), sphere mesh generation, GLSL stereo TB UV shader, texture upload (~672 LOC) [branch: DEBUG-v004]
2026-05-19 11:21:55
app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp
S0249
MODIFIED: trimmed JNI surface to ~100 LOC after extraction of OpenXR core to xr_session.cpp; new JNI methods nativeInitSession/nativeAttachSurface/nativeStartSession/nativeUploadTexture/nativeRunFrameLoop/nativeRequestExit/nativeShutdown [branch: DEBUG-v004]
2026-05-19 11:21:55
app_v2/src/vr/cpp/CMakeLists.txt
S0249
MODIFIED: add xr_session.cpp to fms_diagnostic_xr SHARED target [branch: DEBUG-v004]
2026-05-19 11:22:07
app_v2/src/vr/AndroidManifest.xml
S0249
MODIFIED: declare DiagnosticXrActivity with com.oculus.intent.category.VR intent-filter so HorizonOS launches the diagnostic immerse in headset mode [branch: DEBUG-v004]
2026-05-19 11:22:07
app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt
S0249
NEW: Activity host for the OpenXR diagnostic session - decodes bundled JPEG to RGBA on UI thread, spins up DiagnosticXrRenderThread on surfaceCreated, routes any KeyEvent/MotionEvent to DiagnosticXrInputExitHandler, finish() on exit (~199 LOC) [branch: DEBUG-v004]
2026-05-19 11:22:07
app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrRenderThread.kt
S0249
NEW: dedicated render thread that drives the OpenXR frame loop via JNI; coordinates with Activity for exit/finish (~78 LOC) [branch: DEBUG-v004]
2026-05-19 11:22:07
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt
S0249
REFACTOR: drop direct JNI call path; enterDiagnosticImage now builds Intent and calls startActivity(DiagnosticXrActivity::class.java) [branch: DEBUG-v004]
2026-05-19 11:22:07
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/DiagnosticXrRuntime.kt
S0249
INTERFACE: re-shape to Activity-driven lifecycle - initSession/attachSurface/startSession/uploadTexture/runFrameLoop/requestExit/shutdown [branch: DEBUG-v004]
2026-05-19 11:22:07
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt
S0249
REFACTOR: JNI wrappers re-shaped to match new DiagnosticXrRuntime lifecycle [branch: DEBUG-v004]
2026-05-19 11:22:07
app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt
S0249
Timber S0249 probe at launchDiagnosticImmerse entry (bound to BlockNeedUserTest status, removed on /spec-check Verified) [branch: DEBUG-v004]
2026-05-19 11:22:21
PLAN/S0249_vr-test-immersive-image-stage1a.md
S0249
Strategic spec: flip frontmatter status to BlockNeedUserTest, refresh Status line with implementation summary, rewrite §11a as device-test instructions (Quest 3 pass/fail criteria, 3 Timber probe tags expected in logcat) [branch: DEBUG-v004]
2026-05-19 11:22:21
PLAN/S0249_vr-test-immersive-image-stage1a/INDEX.md
S0249
Tactical INDEX: flip Phases 02/05/06 to Done; rewrite testability block as end-to-end flow description; update overall Status BlockNeedUserTest with architecture decisions and known limitations [branch: DEBUG-v004]
2026-05-19 11:22:21
PLAN/S0249_vr-test-immersive-image-stage1a/PHASE_02__native-runtime.md
S0249
Phase 02 doc: add Step 02.6 session-bringup with files/verification/closed status; mark phase 6/6 done [branch: DEBUG-v004]
2026-05-19 11:23:11
temp/S0252_sftp_audio_memory_acceptance.md
S0252 Phase 04
Recorded startup heap and native free headroom evidence from the 2026-05-19 SFTP audio logs. [branch: DEBUG-v004]
2026-05-19 11:23:11
PLAN/S0207_radical-memory-reduction.md
S0252 Phase 04
Linked 2026-05-19 SFTP MP3 free=4MB evidence to S0207 memory root-cause acceptance. [branch: DEBUG-v004]
2026-05-19 11:23:11
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience.md
S0252 Phase 04
Clarified S0252 versus S0207 ownership for SFTP audio memory headroom acceptance. [branch: DEBUG-v004]
2026-05-19 11:23:11
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_04__memory-acceptance.md
S0252 Phase 04
Closed memory acceptance phase after evidence extraction and S0207 boundary updates. [branch: DEBUG-v004]
2026-05-19 11:23:19
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/INDEX.md
S0252 Phase 04
Advanced S0252 tactical progress to 4 of 5 phases after memory acceptance completion. [branch: DEBUG-v004]
2026-05-19 11:24:36
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience.md
S0252 Phase 05
Recorded on-device acceptance predicates, docs decision, local audit, and BlockNeedUserTest status. [branch: DEBUG-v004]
2026-05-19 11:24:36
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_05__docs-catalog-cleanup.md
S0252 Phase 05
Closed docs/catalog cleanup phase with BlockNeedUserTest handoff recorded. [branch: DEBUG-v004]
2026-05-19 11:24:37
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/INDEX.md
S0252 Phase 05
Marked all S0252 tactical phases done and blocked final verification on on-device acceptance. [branch: DEBUG-v004]
2026-05-19 11:24:45
PLAN/spec-catalog.jsonl
S0252 Phase 05
Moved S0252 catalog status from In Progress to BlockNeedUserTest after local implementation completion. [branch: DEBUG-v004]
2026-05-19 11:25:18
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience/PHASE_05__docs-catalog-cleanup.md
S0252 Phase 05
Documented unrelated dirty worktree context in final cleanup prerequisites. [branch: DEBUG-v004]
2026-05-19 11:26:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
S0125 Step 03.3
Move Operations search entries onto the final Safety, Delete & Trash, Scheduled, Copy & Move, and Quick Sort anchors. [branch: DEBUG-v004]
2026-05-19 11:26:50
app_v2/src/main/res/layout/fragment_settings_revised_operations.xml
S0125 Step 03.3
Align revised Operations portrait section headers with the final Delete & Trash and Quick Sort labels. [branch: DEBUG-v004]
2026-05-19 11:26:50
app_v2/src/main/res/layout-land/fragment_settings_revised_operations.xml
S0125 Step 03.3
Align revised Operations landscape section headers with the final Delete & Trash and Quick Sort labels. [branch: DEBUG-v004]
2026-05-19 11:26:50
app_v2/src/main/res/values/strings.xml
S0125 Step 03.3
Add final Operations section labels for Delete & Trash and Quick Sort List. [branch: DEBUG-v004]
2026-05-19 11:26:50
app_v2/src/main/res/values-ru/strings.xml
S0125 Step 03.3
Add Russian Operations section labels for Delete & Trash and Quick Sort List. [branch: DEBUG-v004]
2026-05-19 11:26:51
app_v2/src/main/res/values-uk/strings.xml
S0125 Step 03.3
Add Ukrainian Operations section labels for Delete & Trash and Quick Sort List. [branch: DEBUG-v004]
2026-05-19 11:31:10
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
S0252
Insert Timber.d S0252 probe on expected-close branch for head-unit logcat acceptance [branch: DEBUG-v004]
2026-05-19 11:31:10
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt
S0252
Insert Timber.d S0252 probes on SFTP audio early direct-stream fallback and prefetchNextAudio recoverable-failure branches for head-unit logcat acceptance [branch: DEBUG-v004]
2026-05-19 11:31:10
PLAN/S0252_bugfix-sftp-audio-car-playback-resilience.md
S0252
spec-check: rewrite Last Audit block (structural PASS; debug-tag invariant restored; on-device checklist updated) [branch: DEBUG-v004]
2026-05-19 11:33:33
app_v2/src/main/res/layout/fragment_settings_revised_media.xml
S0125 Step 04.1
Replace the revised Media hosted shell with a native page layout and final category card headers. [branch: DEBUG-v004]
2026-05-19 11:33:33
app_v2/src/main/res/layout-land/fragment_settings_revised_media.xml
S0125 Step 04.1
Mirror the native revised Media page layout in landscape with the same category order and action zone. [branch: DEBUG-v004]
2026-05-19 11:36:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedMediaSettingsFragment.kt
S0125 Step 04.2
Bind the revised Media page directly, hide unsupported categories, and own the default media player action zone. [branch: DEBUG-v004]
2026-05-19 11:36:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedMediaSectionBinder.kt
S0125 Step 04.2
Mount per-category Media child fragments into revised card containers and manage section expansion locally. [branch: DEBUG-v004]
2026-05-19 11:37:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
S0125 Step 04.3
Expose the revised Media default-player action in search and keep Media anchors on final category ids. [branch: DEBUG-v004]
2026-05-19 12:03:29
docs/FEATURES.md
S0251
Phase 06.1: KEEP Dual-group format override dialog bullet - resolved as in-player live dialog (radioGroup3D + radioGroupSpherical3D in PlaybackControlDialogFragment) [branch: DEBUG-v004]
2026-05-19 12:03:32
dev/CATALOG/app_v2.jsonl
S0251
Phase 06.2: catalog regen after coordinator + UI cleanup (VrForcedFormatResolver and applySettings removed) [branch: DEBUG-v004]
2026-05-19 12:03:35
PLAN/S0251_cleanup-dead-vr-format-settings.md
S0251
Phase 06: status flip In Progress -> BlockNeedUserTest; Timber.d probes inserted in MediaSettingsFragment.setupVrHeaderHelp and VideoSettingsFragment.setupPlayerExtras [branch: DEBUG-v004]
2026-05-19 12:03:38
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt
S0251
Phase 06.4: Timber.d S0251 probe at setupVrHeaderHelp entry (bound to BlockNeedUserTest status) [branch: DEBUG-v004]
2026-05-19 12:03:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
S0251
Phase 06.4: Timber.d S0251 probe at setupPlayerExtras entry + Timber import (bound to BlockNeedUserTest status) [branch: DEBUG-v004]
2026-05-19 12:04:40
PLAN/S0251_cleanup-dead-vr-format-settings/INDEX.md
S0251
Phase 06 closure: flip overall Status to BlockNeedUserTest, Phases 6/6 done, completion gate boxes ticked, change log appended [branch: DEBUG-v004]
2026-05-19 12:04:43
PLAN/S0251_cleanup-dead-vr-format-settings/PHASE_06__docs-catalog-cleanup.md
S0251
Phase 06 file: flip status to Done 5/5, tick all step verifications, document FEATURES KEEP decision and catalog gitignore caveat [branch: DEBUG-v004]
2026-05-19 12:04:53
app_v2/src/main/res/layout/fragment_settings_revised_playback.xml
S0125 Step 05.1
Replace the revised Playback hosted shell with a native final-section layout and explicit Remote & Gamepad entry zone. [branch: DEBUG-v004]
2026-05-19 12:04:53
app_v2/src/main/res/layout-land/fragment_settings_revised_playback.xml
S0125 Step 05.1
Mirror the revised Playback native section shell in landscape with the same final section order. [branch: DEBUG-v004]
2026-05-19 12:06:42
PLAN/S0243_cloud-auth-result-channel/INDEX.md
spec-tech
Create tactical plan for S0243 (3 phases) [branch: DEBUG-v004]
2026-05-19 12:06:53
PLAN/S0243_cloud-auth-result-channel/PHASE_01__interactive-auth-contract.md
spec-tech
Phase 01: interactive auth contract refactor [branch: DEBUG-v004]
2026-05-19 12:06:53
PLAN/S0243_cloud-auth-result-channel/PHASE_02__orchestrator-unification.md
spec-tech
Phase 02: orchestrator unification [branch: DEBUG-v004]
2026-05-19 12:06:53
PLAN/S0243_cloud-auth-result-channel/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs and catalog cleanup [branch: DEBUG-v004]
2026-05-19 12:06:53
PLAN/S0243_cloud-auth-result-channel.md
spec-tech
Status Approved -> Tactical [branch: DEBUG-v004]
2026-05-19 12:08:05
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/InteractiveCloudAuthenticator.kt
spec-dev
S0243 phase 01.1: contract rewritten to results SharedFlow + onIntentResult/onResume hooks [branch: DEBUG-v004]
2026-05-19 12:09:08
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt
spec-dev
S0243 phase 01.2: migrate to results SharedFlow contract; drop consumeImmediateResult/processIntentResult [branch: DEBUG-v004]
2026-05-19 12:10:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedPlaybackSettingsFragment.kt
S0125 Step 05.2
Bind the revised Playback page directly through the native shell and local helper layer. [branch: DEBUG-v004]
2026-05-19 12:10:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedPlaybackSectionBinder.kt
S0125 Step 05.2
Manage revised Playback section expansion with final section ids instead of the hosted legacy page. [branch: DEBUG-v004]
2026-05-19 12:10:00
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedPlaybackUiManager.kt
S0125 Step 05.2
Mount legacy Playback row views into the revised shell and reuse existing player-management wiring without whole-page hosting. [branch: DEBUG-v004]
2026-05-19 12:10:15
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxAuthPlugin.kt
spec-dev
S0243 phase 01.3: migrate to results SharedFlow; onResume emits AuthResult instead of returning [branch: DEBUG-v004]
2026-05-19 12:11:20
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveAuthPlugin.kt
spec-dev
S0243 phase 01.4: migrate to results SharedFlow; MSAL callback emits directly, drop CompletableDeferred + 180s timeout [branch: DEBUG-v004]
2026-05-19 12:14:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
S0125 Step 05.3
Retarget revised Playback search anchors to the final file-access, remote/gamepad, and autoplay/resume sections. [branch: DEBUG-v004]
2026-05-19 12:14:12
app_v2/src/main/res/layout/fragment_settings_revised_playback.xml
S0125 Step 05.3
Apply final Remote and Autoplay section labels to the revised Playback portrait layout. [branch: DEBUG-v004]
2026-05-19 12:14:12
app_v2/src/main/res/layout-land/fragment_settings_revised_playback.xml
S0125 Step 05.3
Apply final Remote and Autoplay section labels to the revised Playback landscape layout. [branch: DEBUG-v004]
2026-05-19 12:14:12
app_v2/src/main/res/values/strings.xml
S0125 Step 05.3
Add final Playback section strings for Remote and Autoplay labels in EN. [branch: DEBUG-v004]
2026-05-19 12:14:12
app_v2/src/main/res/values-ru/strings.xml
S0125 Step 05.3
Add final Playback section strings for Remote and Autoplay labels in RU. [branch: DEBUG-v004]
2026-05-19 12:14:12
app_v2/src/main/res/values-uk/strings.xml
S0125 Step 05.3
Add final Playback section strings for Remote and Autoplay labels in UK. [branch: DEBUG-v004]
2026-05-19 12:16:44
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/UnifiedCloudAuthManager.kt
spec-dev
S0243 phase 02: orchestrator unified on results SharedFlow; removed poll/downcast/processIntentResult; 5-min timeout via INTERACTIVE_AUTH_TIMEOUT_MS [branch: DEBUG-v004]
2026-05-19 12:17:58
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedPlaybackUiManager.kt
S0125 Step 05.2
Fix the revised Playback helper to update SettingsViewModel via AppSettings instead of a non-existent local settings type. [branch: DEBUG-v004]
2026-05-19 12:17:58
app_v2/src/main/res/layout/fragment_settings_revised_playback.xml
S0125 Step 05.3
Escape preview header ampersands in the revised Playback portrait layout so Android resource merge can parse the XML. [branch: DEBUG-v004]
2026-05-19 12:17:58
app_v2/src/main/res/layout-land/fragment_settings_revised_playback.xml
S0125 Step 05.3
Escape preview header ampersands in the revised Playback landscape layout so Android resource merge can parse the XML. [branch: DEBUG-v004]
2026-05-19 12:21:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsSearchIndex.kt
S0125 Step 06.1
Add canonical permissions access search ids and normalize revised search matching across localized tokens. [branch: DEBUG-v004]
2026-05-19 12:41:22
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/RevisedSettingsActivity.kt
S0125 Step 06.2
Replay pending revised page-state bundles when tab fragments are recreated so host-level restore survives rotation and delayed fragment attachment. [branch: DEBUG-v004]
2026-05-19 12:47:26
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
all
Fix Instagram (and similar) downloads losing audio: progressive format picker now prefers combined video+audio streams over video-only DASH variants. Empty vcodec/acodec strings from yt-dlp (Instagram video_versions) are treated as present-but-unknown rather than absent. [branch: DEBUG-v004]
2026-05-19 14:02:17
app_v2/src/main/java/com/sza/fastmediasorter/core/util/LocaleHelper.kt
S0125 Step 06.3
Preserve the active settings route across restart-triggering flows so public revised settings return to the same surface instead of falling back to legacy. [branch: DEBUG-v004]
2026-05-19 14:02:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0125 Step 06.3
Expose revised settings as the public MainActivity route while keeping an explicit current-settings fallback button. [branch: DEBUG-v004]
2026-05-19 14:02:17
app_v2/src/main/res/layout/activity_main.xml
S0125 Step 06.3
Add a separate legacy fallback button next to the public revised settings button in the MainActivity portrait control bar. [branch: DEBUG-v004]
2026-05-19 14:02:17
app_v2/src/main/res/layout-land/activity_main.xml
S0125 Step 06.3
Add a separate legacy fallback button next to the public revised settings button in the MainActivity landscape control bar. [branch: DEBUG-v004]
2026-05-19 14:02:17
app_v2/src/main/AndroidManifest.xml
S0125 Step 06.3
Make RevisedSettingsActivity a MainActivity child activity for the public MainActivity launch path. [branch: DEBUG-v004]
2026-05-19 14:02:17
app_v2/src/main/res/values/strings.xml
S0125 Step 06.3
Rename the public revised settings title to Settings and add current-settings fallback labels in EN. [branch: DEBUG-v004]
2026-05-19 14:02:17
app_v2/src/main/res/values-ru/strings.xml
S0125 Step 06.3
Rename the public revised settings title to Настройки and add current-settings fallback labels in RU. [branch: DEBUG-v004]
2026-05-19 14:02:17
app_v2/src/main/res/values-uk/strings.xml
S0125 Step 06.3
Rename the public revised settings title to Налаштування and add current-settings fallback labels in UK. [branch: DEBUG-v004]
2026-05-19 14:08:02
PLAN/S0125_settings-activity-revision.md
spec-check
Audit S0125 -> Partial; PASS/WARN/FAIL 18/2/1 (full mode); flagged missing layout-land/fragment_settings_revised_general.xml and two predicate-format WARNs [branch: DEBUG-v004]
2026-05-19 14:08:29
docs/FEATURES.md
S0125 Step 07.1
Document the revised public Settings window as a four-tab surface with global search and dedicated management entry points in EN. [branch: DEBUG-v004]
2026-05-19 14:08:29
docs/FEATURES_RU.md
S0125 Step 07.1
Document the revised public Settings window as a four-tab surface with global search and dedicated management entry points in RU. [branch: DEBUG-v004]
2026-05-19 14:08:29
docs/FEATURES_UK.md
S0125 Step 07.1
Document the revised public Settings window as a four-tab surface with global search and dedicated management entry points in UK. [branch: DEBUG-v004]
2026-05-19 14:08:29
dev/CATALOG/app_v2.jsonl
S0125 Step 07.2
Regenerate the app_v2 catalog after the revised settings rollout. [branch: DEBUG-v004]
2026-05-19 14:08:29
dev/CATALOG/app_v2.md
S0125 Step 07.2
Regenerate the app_v2 catalog markdown after the revised settings rollout. [branch: DEBUG-v004]
2026-05-19 14:09:09
PLAN/S0125_settings-activity-revision.md
spec-fix
Annotate Last Audit (S0125): 3 action items marked FOLLOW-UP (no auto-fixable categories - landscape XML, predicate-text refinements need /spec-update or owner decision) [branch: DEBUG-v004]
2026-05-19 14:11:05
PLAN/S0125_settings-activity-revision/PHASE_06__search-reexposure-gate.md
S0125 Phase 06
Close Phase 06 after owner-approved MainActivity public re-exposure, localization verification, and successful build validation. [branch: DEBUG-v004]
2026-05-19 14:11:05
PLAN/S0125_settings-activity-revision.md
S0125
Reopen the strategic spec to In Progress after the Phase 06 owner-sign-off blocker was resolved. [branch: DEBUG-v004]
2026-05-19 14:11:05
PLAN/S0125_settings-activity-revision/PHASE_07__docs-catalog-cleanup.md
S0125 Phase 07
Record completed public feature-doc and catalog-evidence steps while leaving the final audit pending manual device checks. [branch: DEBUG-v004]
2026-05-19 14:11:05
PLAN/S0125_settings-activity-revision/INDEX.md
S0125
Advance Phase 06 to Done, move Phase 07 to In Progress, and note the remaining manual device-check gate before spec-check. [branch: DEBUG-v004]
2026-05-19 14:43:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedGeneralSectionBinder.kt
S0125-runtime-fix
Extend ensureCompatibilityViews with 6 missing legacy ids (containerGeneralActions, btnShowLog, btnShowSessionLog, containerIntegrationTests, btnIntegrationTests, btnImportTestCredentials) to stop FragmentSettingsGeneralBinding.bind(root) NPE on revised General page open [branch: DEBUG-v004]
2026-05-19 14:44:39
PLAN/S0125_settings-activity-revision.md
S0125-audit-addendum
Record runtime crash + hotfix in Last Audit + Phase 02.2 step log; flag GeneralSettings*Helper / FragmentSettingsGeneralBinding pinning as architectural debt for future corrective phase [branch: DEBUG-v004]
2026-05-19 14:44:39
PLAN/S0125_settings-activity-revision/PHASE_02__general-native-page.md
S0125-runtime-fix
Phase 02.2 step log addendum: NPE on btnImportTestCredentials + ensureCompatibilityViews extension [branch: DEBUG-v004]
2026-05-19 15:02:15
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedGeneralSectionBinder.kt
S0125-runtime-fix-2
Switch btnShowLog + btnShowSessionLog compatibility views from Button to MaterialButton; binding declares them as MaterialButton (verified against generated FragmentSettingsGeneralBinding.java:960). Fixes second crash: ClassCastException at FragmentSettingsGeneralBinding.bind() on revised General open [branch: DEBUG-v004]
2026-05-19 15:02:15
temp/S0125_parity_review_2026-05-19.md
S0125-parity-research
Full side-by-side legacy vs revised parity inventory (8 sections covering 4 tabs, compat shim coverage, search index parity, orientation, architectural debt, 11 risk hotspots, 6 open questions) [branch: DEBUG-v004]
2026-05-19 15:03:04
PLAN/S0125_settings-activity-revision.md
S0125-audit-addendum-2
Last Audit Post-audit runtime regression section: append second crash chronology (ClassCastException -> MaterialButton fix) and parity-review summary [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/res/layout/fragment_settings_revised_general.xml
S0125-label-fix
headerNetworkCache text now uses settings_section_network_cache (Network & Cache) instead of stale settings_category_system [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/res/layout/fragment_settings_revised_media.xml
S0125-vr-restore
Added cardVr/headerVr/iconHelpVr/containerVr between Video and Audio (mirrors legacy structure) + btnResetMediaSection at footer [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/res/layout-land/fragment_settings_revised_media.xml
S0125-vr-restore
Landscape variant mirrored from portrait with VR card + reset button [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/res/layout/fragment_settings_revised_playback.xml
S0125-gridview-restore
Added headerGridView/containerGridView card between Touch Zones and Remote & Gamepad + btnResetPlaybackSection at footer [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/res/layout-land/fragment_settings_revised_playback.xml
S0125-gridview-restore
Landscape variant mirrored from portrait with Grid View card + reset button [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/res/layout-land/fragment_settings_revised_general.xml
S0125-landscape-general
NEW landscape variant for revised General (mirror of portrait); resolves Strict Rule §12 violation flagged by parity review [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/fragments/RevisedMediaSettingsFragment.kt
S0125-vr-restore
@AndroidEntryPoint + Hilt injection of VrMediaSectionContract + SettingsViewModel; VR card visibility gated by isAvailable; setupResetSection wires btnResetMediaSection with confirmation dialog [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedMediaSectionBinder.kt
S0125-vr-restore
Accepts VrMediaSectionContract; attaches VR fragment via createFragment(); expandable VR section with default-expanded discoverability flag [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedPlaybackSectionBinder.kt
S0125-gridview-restore
Added GridView section toggle + ensureSectionExpanded grid_view/grid alias [branch: DEBUG-v004]
2026-05-19 15:24:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/helpers/RevisedPlaybackUiManager.kt
S0125-gridview-restore
moveChildren(legacyBinding.containerGridView -> shellBinding.containerGridView) + btnResetPlaybackSection click listener with confirmation dialog (mirrors legacy reset flow) [branch: DEBUG-v004]
2026-05-19 15:25:26
PLAN/S0125_settings-activity-revision.md
S0125-audit-addendum-3
Last Audit Post-audit runtime regression section: append 2026-05-19 15:30 parity batch (VR/GridView/reset/label/landscape) + ViewBinding snake_case false-positive note [branch: DEBUG-v004]
2026-05-19 15:36:41
app_v2/src/main/res/layout/activity_add_resource.xml
activity_add_resource layout
Place SMB ‘Test connection’ and ‘Scan shares’ buttons in one horizontal row to save vertical space on Add Network Folder form [branch: DEBUG-v004]
2026-05-19 15:37:46
app_v2/src/main/res/values/strings.xml,app_v2/src/main/res/values-ru/strings.xml,app_v2/src/main/res/values-uk/strings.xml
resource_name_hint string
Shorten helper text under Resource Name field to fit narrow layout (EN/RU/UK) [branch: DEBUG-v004]
2026-05-19 15:39:51
app_v2/src/main/res/values/strings.xml,app_v2/src/main/res/values-ru/strings.xml,app_v2/src/main/res/values-uk/strings.xml
smb_test_connection,smb_scan_shares
Rename SMB buttons to shorter ‘Test connection’ / ‘Scan host’ so both fit in one row (EN/RU/UK) [branch: DEBUG-v004]
2026-05-19 15:43:55
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt,app_v2/src/main/res/layout/activity_add_resource.xml
AddResourceActivity title placement
Move section title (SMB/SFTP/Cloud) into MaterialToolbar to match Local-section pattern; hide duplicate tvTitle; replace hardcoded English XML title with @string/add_resource_title; add localized navigationContentDescription [branch: DEBUG-v004]
2026-05-19 15:45:11
app_v2/src/main/res/layout/dialog_scrollable_text.xml,app_v2/src/main/res/layout-land/dialog_scrollable_text.xml
dialog_scrollable_text
Share + Copy buttons equal-weight (50/50) so longer label does not squeeze shorter one in test-result dialog; portrait + landscape [branch: DEBUG-v004]
2026-05-19 15:48:53
scripts/spec_catalog/archive.ps1
spec-arc
Fix archive path resolution to use catalog file and complete partial archives [branch: DEBUG-v004]
2026-05-19 15:48:53
PLAN/S0181_threads_image_scraper_investigation.md
spec-arc
Archive S0181 (threads-instagram-image-carousel-scraper) -> temp/done/ [branch: DEBUG-v004]
2026-05-19 16:02:32
PLAN/S0184_multi-window-capability.md
spec-update
Research refinement (GPT-5, focus: research) [branch: DEBUG-v004]
2026-05-19 16:05:40
PLAN/S0184_multi-window-capability.md
spec-update
Clarify owner v1 UI contract for standard multi-window toggle and open-in-new-window commands [branch: DEBUG-v004]
2026-05-19 16:19:06
PLAN/S0184_multi-window-capability.md
spec-update
Refinement (GPT-5.4, focus: local AS-IS alignment for S0184 multi-window research) [branch: DEBUG-v004]
2026-05-19 16:19:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/revised/
S0125-rollback
S0125 cancelled: delete revised settings package (RevisedSettingsActivity, fragments, helpers, search index, pager) [branch: DEBUG-v004]
2026-05-19 16:19:17
app_v2/src/main/res/layout/activity_settings_revised.xml
S0125-rollback
S0125 cancelled: delete revised settings host + fragment + item layouts (portrait, 7 files) [branch: DEBUG-v004]
2026-05-19 16:19:18
app_v2/src/main/res/layout-land/activity_settings_revised.xml
S0125-rollback
S0125 cancelled: delete revised settings host + fragment layouts (landscape, 5 files) [branch: DEBUG-v004]
2026-05-19 16:19:18
app_v2/src/main/AndroidManifest.xml
S0125-rollback
S0125 cancelled: drop RevisedSettingsActivity declaration [branch: DEBUG-v004]
2026-05-19 16:19:31
app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt
S0125-rollback
S0125 cancelled: drop revised import + dual-route block + dual button bindings, restore single btnSettings/openSettings to launch SettingsActivity [branch: DEBUG-v004]
2026-05-19 16:19:31
app_v2/src/main/res/layout/activity_main.xml
S0125-rollback
S0125 cancelled: remove btnSettingsLegacy, restore original single btnSettings block (contentDescription/icon/padding) [branch: DEBUG-v004]
2026-05-19 16:19:31
app_v2/src/main/res/layout-land/activity_main.xml
S0125-rollback
S0125 cancelled: remove btnSettingsLegacy, restore original landscape btnSettings block [branch: DEBUG-v004]
2026-05-19 16:19:31
app_v2/src/main/res/values/strings.xml
S0125-rollback
S0125 cancelled: drop main_settings_new/current/_short, kbm_help_browse_settings_current/_revised, rename menu_automate_source_current to menu_automate_source, drop _revised variant [branch: DEBUG-v004]
2026-05-19 16:19:31
app_v2/src/main/res/values-ru/strings.xml
S0125-rollback
S0125 cancelled: drop revised settings keys (RU locale) [branch: DEBUG-v004]
2026-05-19 16:19:31
app_v2/src/main/res/values-uk/strings.xml
S0125-rollback
S0125 cancelled: drop revised settings keys (UK locale) [branch: DEBUG-v004]
2026-05-19 16:19:48
app_v2/src/main/java/com/sza/fastmediasorter/core/util/LocaleHelper.kt
S0125-rollback
S0125 cancelled: revert mark/consumeReturnToSettings to pre-S0125 boolean-only, drop ReturnToSettingsTarget/route persistence/REVISED_SETTINGS_ACTIVITY_CLASS [branch: DEBUG-v004]
2026-05-19 16:19:48
app_v2/src/main/res/menu/menu_resource_ops.xml
S0125-rollback
S0125 cancelled: drop action_automate_resource_revised, rename _current back to action_automate_resource [branch: DEBUG-v004]
2026-05-19 16:19:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt
S0125-rollback
S0125 cancelled: rename onAutomateSourceCurrent to onAutomateSource, drop _revised parameter and dual visibility/click handlers [branch: DEBUG-v004]
2026-05-19 16:19:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
S0125-rollback
S0125 cancelled: drop openBrowseSettings override, rename param to onAutomateSource, drop S0125 comments [branch: DEBUG-v004]
2026-05-19 16:19:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/KeyboardNavigationManager.kt
S0125-rollback
S0125 cancelled: drop openBrowseSettings callback + OpenBrowseSettings dispatch [branch: DEBUG-v004]
2026-05-19 16:19:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputAction.kt
S0125-rollback
S0125 cancelled: drop OpenBrowseSettings action [branch: DEBUG-v004]
2026-05-19 16:19:48
app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt
S0125-rollback
S0125 cancelled: drop Ctrl+, / Settings key / Menu key mappings to OpenBrowseSettings/ShowContextMenu in mapBrowse [branch: DEBUG-v004]
2026-05-19 16:19:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpRegistry.kt
S0125-rollback
S0125 cancelled: drop both kbm_help_browse_settings entries from Browse help section [branch: DEBUG-v004]
2026-05-19 16:19:51
PLAN/S0184_multi-window-capability.md
spec-update
Polish wording after local AS-IS alignment for S0184 [branch: DEBUG-v004]
2026-05-19 16:20:02
docs/FEATURES.md
S0125-rollback
S0125 cancelled: remove revised settings window bullet from Settings section [branch: DEBUG-v004]
2026-05-19 16:20:02
docs/FEATURES_RU.md
S0125-rollback
S0125 cancelled: remove revised settings window bullet (RU) [branch: DEBUG-v004]
2026-05-19 16:20:02
docs/FEATURES_UK.md
S0125-rollback
S0125 cancelled: remove revised settings window bullet (UK) [branch: DEBUG-v004]
2026-05-19 16:20:02
scripts/spec_catalog/archive.ps1
spec-catalog
fix: ChangeExtension(p, null) leaves trailing dot on PS7+; build tactical-dir path via GetFileNameWithoutExtension [branch: DEBUG-v004]
2026-05-19 16:20:02
dev/CATALOG/app_v2.jsonl
S0125-rollback
S0125 cancelled: regenerated catalog after revised package + 12 layouts removed [branch: DEBUG-v004]
2026-05-19 16:20:02
dev/CATALOG/app_v2.md
S0125-rollback
S0125 cancelled: regenerated catalog rendering [branch: DEBUG-v004]
2026-05-19 16:20:02
PLAN/spec-catalog.jsonl
S0125-rollback
S0125 archived (Partial -> Archived, priority -> 0), artefacts moved to temp/done/ [branch: DEBUG-v004]
2026-05-19 16:58:29
PLAN/S0253_overflow-menus-default-on-fresh-install.md
spec-all
Compact spec: S0253 overflow menus default ON for fresh installs [branch: DEBUG-v004]
2026-05-19 17:01:16
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
spec-all
S0253: fresh-install defaults ON for overflow-menu toggles (resource_ops, file_ops, hint_shown); existing users unchanged via PackageInfo.firstInstallTime==lastUpdateTime gate [branch: DEBUG-v004]
2026-05-19 17:02:36
PLAN/S0184_multi-window-capability.md
S0184
Implemented tactical multi-window capability and moved spec to BlockNeedUserTest [branch: DEBUG-v004]
2026-05-19 17:02:36
app_v2/src/main/java/com/sza/fastmediasorter/core/compat/MultiWindowCapabilityDetector.kt
MultiWindowCapabilityDetector
Added capability-based first-run default for separate-window support [branch: DEBUG-v004]
2026-05-19 17:02:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
BrowseEventHandler
Added Browse and Player new-window launch entry points with S0184 debug tags [branch: DEBUG-v004]
2026-05-19 17:02:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
CommandPanelController
Re-enabled separate-window player command from user setting [branch: DEBUG-v004]
2026-05-19 17:02:38
app_v2/src/main/res/values/strings.xml
S0184 strings
Aligned new-window command and setting wording across locales [branch: DEBUG-v004]
2026-05-19 17:03:01
PLAN/spec-catalog.jsonl
S0184
Updated catalog status to BlockNeedUserTest after implementation [branch: DEBUG-v004]
2026-05-19 17:03:30
PLAN/S0254_settings-grid-to-interface.md
spec
Add strategic spec S0254 for settings-grid-to-interface (ad-hoc, move Grid block into Interface section) [branch: DEBUG-v004]
2026-05-19 17:03:36
app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt
spec-all
S0253: add Timber.d debug verification tag for fresh-install discriminator (BlockNeedUserTest) [branch: DEBUG-v004]
2026-05-19 17:10:48
app_v2/src/main/res/values*/strings.xml
gms warning strings
Rewrote gms_unavailable/gms_update_required/gms_settings_link in EN/RU/UK: removed misleading wording that GMS is required for the app to work fully; new tone matches COMMUNICATION_POLICY (soft recommendation, hints that updating is optional). [branch: DEBUG-v004]
2026-05-19 17:12:33
app_v2/src/main/res/layout/fragment_settings_media_container.xml
fragment_settings_media_container.xml
Settings: move VR section help icon to the left of the triangle indicator so it stays visible on wide screens [branch: DEBUG-v004]
2026-05-19 17:19:35
PLAN/S0254_settings-grid-to-interface/INDEX.md
spec-tech
Create tactical plan for S0254 (3 phases) [branch: DEBUG-v004]
2026-05-19 17:19:36
PLAN/S0254_settings-grid-to-interface/PHASE_01__add-to-interface.md
spec-tech
Phase 01: add-to-interface (7 steps) [branch: DEBUG-v004]
2026-05-19 17:19:36
PLAN/S0254_settings-grid-to-interface/PHASE_02__remove-from-playback.md
spec-tech
Phase 02: remove-from-playback (6 steps) [branch: DEBUG-v004]
2026-05-19 17:19:36
PLAN/S0254_settings-grid-to-interface/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup (5 steps) [branch: DEBUG-v004]
2026-05-19 17:19:36
PLAN/S0254_settings-grid-to-interface.md
spec-tech
S0254: Status -> Tactical; resolved scope question (move entire containerGridView) [branch: DEBUG-v004]
2026-05-19 17:21:25
app_v2/src/main/res/layout/fragment_settings_general.xml
S0254 Phase01.1
Append Icon Size + Grid Mode row to containerInterface (portrait) [branch: DEBUG-v004]
2026-05-19 17:22:09
app_v2/src/main/res/layout/fragment_settings_general.xml
S0254 Phase01.2
Append Hide Grid Action Buttons row to containerInterface (portrait) [branch: DEBUG-v004]
2026-05-19 17:22:54
app_v2/src/main/res/layout/fragment_settings_general.xml
S0254 Phase01.3
Append File Ops Overflow Menu row to containerInterface (portrait) [branch: DEBUG-v004]
2026-05-19 17:24:11
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0254 Phase01.4
Mirror 3 moved rows (icon size + grid mode, hide action buttons, file ops overflow menu) in landscape general layout [branch: DEBUG-v004]
2026-05-19 17:26:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0254 Phase01.5
Wire 3 moved switches (grid mode, hide grid action buttons, file ops overflow menu) and grid-size tooltip in General settings helper [branch: DEBUG-v004]
2026-05-19 17:27:35
PLAN/S0255_settings-authorization-group.md
spec
Add strategic spec S0255 for settings-authorization-group [branch: DEBUG-v004]
2026-05-19 17:28:47
PLAN/S0256_collapsible-section-header.md
spec
Add strategic spec S0256 for collapsible-section-header (unified expandable group header with optional help icon) [branch: DEBUG-v004]
2026-05-19 17:29:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0254 Phase01.6
Add setupIconSizeInput() with dropdown adapter + clamp listener (moved from Playback) [branch: DEBUG-v004]
2026-05-19 17:29:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt
S0254 Phase01.6
Add settings-state reconciliation for switchGridMode/HideGridActionButtons/FileOpsOverflowMenu and etIconSize text [branch: DEBUG-v004]
2026-05-19 17:31:34
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
S0254 Phase01.7
Re-route grid_mode + icon_size search entries from PLAYBACK to GENERAL destination [branch: DEBUG-v004]
2026-05-19 17:33:46
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0254 Phase02.1
Delete Grid View MaterialCardView (portrait) - elements moved to General > Interface section [branch: DEBUG-v004]
2026-05-19 17:34:43
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
S0254 Phase02.2
Delete Grid View MaterialCardView (landscape) - elements moved to General > Interface section [branch: DEBUG-v004]
2026-05-19 17:39:19
PLAN/S0255_settings-authorization-group/INDEX.md
spec-tech
Create tactical plan INDEX for S0255 (5 phases) [branch: DEBUG-v004]
2026-05-19 17:39:20
PLAN/S0255_settings-authorization-group/PHASE_01__strings.md
spec-tech
Phase 01: strings - trilingual settings_category_authorization key [branch: DEBUG-v004]
2026-05-19 17:39:20
PLAN/S0255_settings-authorization-group/PHASE_02__empty-group-with-toggle.md
spec-tech
Phase 02: empty group + helper toggle wiring [branch: DEBUG-v004]
2026-05-19 17:39:20
PLAN/S0255_settings-authorization-group/PHASE_03__move-gsm-and-google-card.md
spec-tech
Phase 03: move GSM banner + Google account card into containerAuthorization [branch: DEBUG-v004]
2026-05-19 17:39:20
PLAN/S0255_settings-authorization-group/PHASE_04__move-saved-auth-row.md
spec-tech
Phase 04: atomic XML+Kotlin migration of row_saved_authorizations [branch: DEBUG-v004]
2026-05-19 17:39:20
PLAN/S0255_settings-authorization-group/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs and catalog cleanup [branch: DEBUG-v004]
2026-05-19 17:39:20
PLAN/S0255_settings-authorization-group.md
spec-tech
Status Approved -> Tactical [branch: DEBUG-v004]
2026-05-19 17:42:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0254 Phase02.4-02.5
Remove all Kotlin wiring for moved Grid View controls: 3 listeners + icon size adapter/focus + tooltip + 4 observer reconciliations + KEY_GRID_VIEW_EXPANDED constant + section toggle registration + savedStates map entry [branch: DEBUG-v004]
2026-05-19 17:43:26
app_v2/src/main/res/values/strings.xml
S0254 Phase03.1
Remove orphan key settings_category_grid_view (EN) [branch: DEBUG-v004]
2026-05-19 17:43:26
app_v2/src/main/res/values-ru/strings.xml
S0254 Phase03.1
Remove orphan key settings_category_grid_view (RU) [branch: DEBUG-v004]
2026-05-19 17:43:26
app_v2/src/main/res/values-uk/strings.xml
S0254 Phase03.1
Remove orphan key settings_category_grid_view (UK) [branch: DEBUG-v004]
2026-05-19 17:43:26
PLAN/S0254_settings-grid-to-interface.md
S0254 Phase03.2
S0254: leave SharedPreferences key section_grid_view_expanded in playback_sections_state as a harmless orphan; no migration added [branch: DEBUG-v004]
2026-05-19 17:45:04
PLAN/S0253_overflow-menus-default-on-fresh-install.md
spec-update
Align S0253 strategic spec header with BlockNeedUserTest state and add revision history [branch: DEBUG-v004]
2026-05-19 17:46:32
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt
S0254 Phase03.5
Insert 3 Timber.d S0254 debug verification tags (BlockNeedUserTest) [branch: DEBUG-v004]
2026-05-19 17:46:32
dev/CATALOG/app_v2.jsonl
S0254 Phase03.4
Regenerate catalog after Phase 01-02 .kt changes [branch: DEBUG-v004]
2026-05-19 17:46:32
PLAN/S0254_settings-grid-to-interface.md
S0254
All phases done; status In Progress -> BlockNeedUserTest awaiting on-device verification [branch: DEBUG-v004]
2026-05-19 17:48:14
PLAN/S0243_cloud-auth-result-channel.md
spec-dev
All 3 phases done; status Tactical -> BlockNeedUserTest; 4 S0243 Timber tags inserted at flow entry points [branch: DEBUG-v004]
2026-05-19 17:48:14
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/UnifiedCloudAuthManager.kt
spec-dev
S0243 BlockNeedUserTest: add Timber.d S0243 tag at startInteractiveSignIn entry [branch: DEBUG-v004]
2026-05-19 17:48:14
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt
spec-dev
S0243 BlockNeedUserTest: add Timber.d S0243 tag at startInteractiveSignIn entry [branch: DEBUG-v004]
2026-05-19 17:48:14
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxAuthPlugin.kt
spec-dev
S0243 BlockNeedUserTest: add Timber.d S0243 tag at startInteractiveSignIn entry [branch: DEBUG-v004]
2026-05-19 17:48:14
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveAuthPlugin.kt
spec-dev
S0243 BlockNeedUserTest: add Timber.d S0243 tag at startInteractiveSignIn entry [branch: DEBUG-v004]
2026-05-19 17:51:18
app_v2/src/main/res/values/strings.xml
S0255 Phase01
Add string key settings_category_authorization (Authorization) [branch: DEBUG-v004]
2026-05-19 17:51:18
app_v2/src/main/res/values-ru/strings.xml
S0255 Phase01
Add string key settings_category_authorization (Авторизация) [branch: DEBUG-v004]
2026-05-19 17:51:18
app_v2/src/main/res/values-uk/strings.xml
S0255 Phase01
Add string key settings_category_authorization (Авторизація) [branch: DEBUG-v004]
2026-05-19 18:02:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
S0254 audit
Add missing search index entries for moved hide-grid-actions and file-ops-overflow settings in General > Interface [branch: DEBUG-v004]
2026-05-19 18:03:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt
S0255 Phase02
Add Authorization section persisted toggle [branch: DEBUG-v004]
2026-05-19 18:03:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
S0255 Phase04
Move saved authorizations handlers to General settings [branch: DEBUG-v004]
2026-05-19 18:03:46
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0255 Phase04
Remove saved authorizations handlers and enable rule from Playback [branch: DEBUG-v004]
2026-05-19 18:03:46
app_v2/src/main/res/layout/fragment_settings_general.xml
S0255 Phase04
Add Authorization card and move GSM, Google card, and saved authorizations row [branch: DEBUG-v004]
2026-05-19 18:03:46
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0255 Phase04
Landscape parity for Authorization card and moved authorization items [branch: DEBUG-v004]
2026-05-19 18:03:46
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0255 Phase04
Remove saved authorizations row from Playback portrait layout [branch: DEBUG-v004]
2026-05-19 18:03:47
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
S0255 Phase04
Remove saved authorizations row from Playback landscape layout [branch: DEBUG-v004]
2026-05-19 18:03:47
dev/CATALOG/app_v2.jsonl
S0255 Phase05
Regenerate app_v2 catalog after settings helper and fragment updates [branch: DEBUG-v004]
2026-05-19 18:03:47
dev/CATALOG/app_v2.md
S0255 Phase05
Render app_v2 catalog after settings helper and fragment updates [branch: DEBUG-v004]
2026-05-19 18:03:47
PLAN/S0255_settings-authorization-group.md
spec-check
Record S0255 static audit outcome Partial (no build) [branch: DEBUG-v004]
2026-05-19 18:03:47
PLAN/S0255_settings-authorization-group/INDEX.md
spec-check
Update S0255 tactical index progress after static audit [branch: DEBUG-v004]
2026-05-19 18:03:47
PLAN/S0255_settings-authorization-group/PHASE_01__strings.md
spec-check
Update S0255 Phase 01 progress after static audit [branch: DEBUG-v004]
2026-05-19 18:03:47
PLAN/S0255_settings-authorization-group/PHASE_02__empty-group-with-toggle.md
spec-check
Update S0255 Phase 02 progress after static audit [branch: DEBUG-v004]
2026-05-19 18:03:47
PLAN/S0255_settings-authorization-group/PHASE_03__move-gsm-and-google-card.md
spec-check
Update S0255 Phase 03 progress after static audit [branch: DEBUG-v004]
2026-05-19 18:03:47
PLAN/S0255_settings-authorization-group/PHASE_04__move-saved-auth-row.md
spec-check
Update S0255 Phase 04 progress after static audit [branch: DEBUG-v004]
2026-05-19 18:03:47
PLAN/S0255_settings-authorization-group/PHASE_05__docs-catalog-cleanup.md
spec-check
Update S0255 Phase 05 progress after static audit [branch: DEBUG-v004]
2026-05-19 18:04:30
PLAN/S0255_settings-authorization-group/PHASE_05__docs-catalog-cleanup.md
spec-check
Mark S0255 Phase 05.2 changelog parity verification as done [branch: DEBUG-v004]
2026-05-19 18:12:47
PLAN/S0257_download-notification-tap-opens-player.md
spec-all
Compact spec drafted: S0257 (download notification tap opens player) [branch: DEBUG-v004]
2026-05-19 18:23:06
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/CollapsibleSectionHeader.kt
CollapsibleSectionHeader
S0256 Phase 01: introduce unified collapsible header component [branch: DEBUG-v004]
2026-05-19 18:23:06
app_v2/src/main/res/values/attrs.xml
attrs.xml
S0256 Phase 01: declare CollapsibleSectionHeader styleable [branch: DEBUG-v004]
2026-05-19 18:23:06
app_v2/src/main/res/layout/view_collapsible_section_header.xml
view_collapsible_section_header.xml
S0256 Phase 01: layout for unified collapsible header [branch: DEBUG-v004]
2026-05-19 18:23:06
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/widget/CollapsibleSectionHeaderTest.kt
CollapsibleSectionHeaderTest
S0256 Phase 01: unit/smoke test for CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 18:24:11
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0257
Add BatchSummary.firstSavedUri; drop linkAutoDownloadOpenInPlayer gate on openInPlayerUri (moved into presenter) so the field always reflects a real saved URI. [branch: DEBUG-v004]
2026-05-19 18:24:15
app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt
S0257
Result notification (Saved/FellBackToDownloads/BatchCompleted) is now clickable - tap opens StandalonePlayerActivity on the saved file (first one for batches). [branch: DEBUG-v004]
2026-05-19 18:25:13
PLAN/S0256_collapsible-section-header.md
S0256
S0256 self-check: mark strategic spec Partial after Phase 01 implementation and blocked build gate [branch: DEBUG-v004]
2026-05-19 18:25:13
PLAN/S0256_collapsible-section-header/INDEX.md
S0256 INDEX
S0256 self-check: update tactical index progress and blocker note after Phase 01 [branch: DEBUG-v004]
2026-05-19 18:25:13
PLAN/S0256_collapsible-section-header/PHASE_01__foundation.md
S0256 Phase 01
S0256 self-check: record completed steps and blocked phase-done gate [branch: DEBUG-v004]
2026-05-19 18:25:14
PLAN/spec-catalog.jsonl
S0256
Update S0256 catalog entry: status Partial, file path corrected to strategic spec [branch: DEBUG-v004]
2026-05-19 18:30:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
spec-all
S0184: drop BlockNeedUserTest Timber tag (status -> Implemented; entering F5 audit) [branch: DEBUG-v004]
2026-05-19 18:30:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
spec-all
S0184: drop BlockNeedUserTest Timber tag (status -> Implemented; entering F5 audit) [branch: DEBUG-v004]
2026-05-19 18:30:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt
spec-all
S0184: drop BlockNeedUserTest Timber tags (status -> Implemented; entering F5 audit) [branch: DEBUG-v004]
2026-05-19 18:35:23
PLAN/S0184_multi-window-capability.md
spec-check
Audit S0184 -> Partial; PASS/WARN/FAIL 15/1/0. WARN: docs/FEATURES bullet still VR-centric (Quest 3+ / DeX) under VR section; §8 requires desktop-like contract wording. [branch: DEBUG-v004]
2026-05-19 18:36:57
PLAN/S0184_multi-window-capability.md
spec-fix
Annotate Last Audit (S0184): 1 FOLLOW-UP - docs/FEATURES rewording requires authored RU/UK translations. [branch: DEBUG-v004]
2026-05-19 18:40:32
docs/FEATURES.md
spec-all
S0184 §8 FOLLOW-UP fix: move Multi-Window Mode bullet from VR Edition to Media Browsing; reframe as cross-platform desktop-like / panel multi-window contract (ChromeOS / Chromebook / DeX / Android XR / Quest 3+). [branch: DEBUG-v004]
2026-05-19 18:40:32
docs/FEATURES_RU.md
spec-all
S0184 §8 FOLLOW-UP fix: move Multi-Window Mode bullet from VR section to Browse; cross-platform reframing (RU). [branch: DEBUG-v004]
2026-05-19 18:40:32
docs/FEATURES_UK.md
spec-all
S0184 §8 FOLLOW-UP fix: move Multi-Window Mode bullet from VR section to Browse; cross-platform reframing (UK). [branch: DEBUG-v004]
2026-05-19 18:40:56
docs/ARCHITECTURE.md
spec-dev
S0258 Step 01.1: Pattern A switch row restructured - title+helper inline, subtitle below, optional trailing action slot; SettingsToggleRow reusable component referenced [branch: DEBUG-v004]
2026-05-19 18:40:56
.github/copilot-instructions.md
spec-dev
S0258 Step 01.1: UI_TRIGGER_ROW constraint updated - help-icon inline next to title, prefer SettingsToggleRow compound view [branch: DEBUG-v004]
2026-05-19 18:43:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsToggleRow.kt
spec-dev
S0258 Step 01.2: new compound view SettingsToggleRow (switch+title+helper inline+subtitle+trailing slot) [branch: DEBUG-v004]
2026-05-19 18:43:26
app_v2/src/main/res/layout/view_settings_toggle_row.xml
spec-dev
S0258 Step 01.2: new layout for SettingsToggleRow (merge tag) [branch: DEBUG-v004]
2026-05-19 18:43:26
app_v2/src/main/res/values/attrs.xml
spec-dev
S0258 Step 01.2: added declare-styleable SettingsToggleRow (str_ prefix) [branch: DEBUG-v004]
2026-05-19 18:44:45
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BaseSettingsFragment.kt
spec-dev
S0258 Step 01.3: added bindSwitch/setSwitchChecked overloads for SettingsToggleRow [branch: DEBUG-v004]
2026-05-19 18:45:33
PLAN/S0258_settings-toggle-row-template/INDEX.md
spec-dev
S0258 Step 01.4: Phase 01 progress counter bumped 0/5 -> 3/5 [branch: DEBUG-v004]
2026-05-19 18:46:10
PLAN/S0184_multi-window-capability.md
spec-check
Audit S0184 -> Verified; PASS/WARN/FAIL 16/0/0. §8 FOLLOW-UP resolved: Multi-Window Mode bullet moved from VR section to Media Browsing as cross-platform capability. [branch: DEBUG-v004]
2026-05-19 18:46:41
PLAN/S0184_multi-window-capability.md
spec-all
Pipeline Verified: S0184 multi-window-capability. Manual gates: ChromeOS/XR/DeX on-device validation. [branch: DEBUG-v004]
2026-05-19 18:49:47
app_v2/src/main/res/layout/fragment_settings_documents.xml
spec-dev
S0258 Step 02.1: documents settings layout migrated to SettingsToggleRow (5 rows: text/line-numbers/pdf/thumbnails/epub) [branch: DEBUG-v004]
2026-05-19 18:50:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/DocumentsSettingsFragment.kt
spec-dev
S0258 Step 02.2: fragment switched to row API; helper for line-numbers inline; iconHelpLineNumbers handler removed [branch: DEBUG-v004]
2026-05-19 18:52:26
app_v2/src/main/res/values/strings.xml
spec-dev
S0258 Step 02.3: added setting_show_pdf_thumbnails_desc (EN) [branch: DEBUG-v004]
2026-05-19 18:52:26
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0258 Step 02.3: added setting_show_pdf_thumbnails_desc (RU) [branch: DEBUG-v004]
2026-05-19 18:52:26
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0258 Step 02.3: added setting_show_pdf_thumbnails_desc (UK) [branch: DEBUG-v004]
2026-05-19 18:55:28
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
spec-dev
S0258 Step 02.4: viewId switchSupportText/Pdf -> rowSupportText/Pdf for SettingsToggleRow migration [branch: DEBUG-v004]
2026-05-19 19:16:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt
spec-dev
S0258 Step 03.1: migrate switch* bindings to SettingsToggleRow rows; drop iconHelpSupportAudio/iconHelpPhotosDuringAudio (folded inline); extend BaseSettingsFragment [branch: DEBUG-v004]
2026-05-19 19:16:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/ImagesSettingsFragment.kt
spec-dev
S0258 Step 03.1: migrate switch* bindings to SettingsToggleRow rows; drop standalone help-icon click handlers; extend BaseSettingsFragment [branch: DEBUG-v004]
2026-05-19 19:16:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt
spec-dev
S0258 Step 03.1: migrate switch* bindings to SettingsToggleRow rows; drop iconHelpTranslation/iconHelpTranslationBlocks (folded inline); extend BaseSettingsFragment [branch: DEBUG-v004]
2026-05-19 19:16:26
app_v2/src/main/res/layout/fragment_settings_images.xml
spec-dev
S0258 Step 03.1: migrate switch* containers to SettingsToggleRow widgets with inline help payloads [branch: DEBUG-v004]
2026-05-19 19:16:26
app_v2/src/main/res/layout-land/fragment_settings_images.xml
spec-dev
S0258 Step 03.1: landscape parity for SettingsToggleRow migration [branch: DEBUG-v004]
2026-05-19 19:16:26
app_v2/src/main/res/layout/fragment_settings_other.xml
spec-dev
S0258 Step 03.1: migrate switch* containers to SettingsToggleRow widgets with inline help payloads [branch: DEBUG-v004]
2026-05-19 19:16:26
app_v2/src/main/res/layout-land/fragment_settings_other.xml
spec-dev
S0258 Step 03.1: landscape parity for SettingsToggleRow migration [branch: DEBUG-v004]
2026-05-19 19:16:26
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
spec-dev
S0258 Step 03.1: update viewId refs from switch* to row* for migrated Video/Audio/Images/Other rows [branch: DEBUG-v004]
2026-05-19 19:18:12
app_v2/src/main/res/layout/fragment_settings_video.xml
spec-dev
S0258 Step 03.1: video settings layout migrated to SettingsToggleRow (4 rows) [branch: DEBUG-v004]
2026-05-19 19:18:12
app_v2/src/main/res/layout-land/fragment_settings_video.xml
spec-dev
S0258 Step 03.1: video settings landscape parity for SettingsToggleRow migration [branch: DEBUG-v004]
2026-05-19 19:18:12
app_v2/src/main/res/layout/fragment_settings_audio.xml
spec-dev
S0258 Step 03.1: audio settings layout migrated to SettingsToggleRow (9 rows) [branch: DEBUG-v004]
2026-05-19 19:18:12
app_v2/src/main/res/layout-land/fragment_settings_audio.xml
spec-dev
S0258 Step 03.1: audio settings landscape parity for SettingsToggleRow migration [branch: DEBUG-v004]
2026-05-19 19:18:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
spec-dev
S0258 Step 03.1: video fragment bindings migrated to SettingsToggleRow row API [branch: DEBUG-v004]
2026-05-19 19:28:44
app_v2/src/main/res/layout/fragment_settings_playback.xml
spec-dev
S0258 Step 03.2: migrate 21 SwitchMaterial blocks to SettingsToggleRow (portrait); fold 4 help icons inline; preserve layoutPip/layoutFollowSystemRotation/layoutDefaultPlayerToggles/layoutCameraCapture/layoutSkipCameraFilename wrappers [branch: DEBUG-v004]
2026-05-19 19:28:44
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
spec-dev
S0258 Step 03.2: landscape parity for playback fragment migration to SettingsToggleRow [branch: DEBUG-v004]
2026-05-19 19:28:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
spec-dev
S0258 Step 03.2: rebind 21 binding.switch* to binding.row; replace setOnCheckedChangeListener with row variant; use setCheckedSilently; drop 4 iconHelp tooltip onClicks now folded into rows [branch: DEBUG-v004]
2026-05-19 21:34:12
PLAN/S0256_collapsible-section-header.md
S0256-spec
S0256: add guard rule to §3.2 (single-template rule for all expandable headers); flip Status Approved → Tactical [branch: DEBUG-v004]
2026-05-19 21:34:12
PLAN/S0256_collapsible-section-header/INDEX.md
S0256-tactical
S0256: tactical INDEX authored [branch: DEBUG-v004]
2026-05-19 21:34:12
PLAN/S0256_collapsible-section-header/PHASE_02__settings-migration.md
S0256-tactical
S0256 Phase 02 plan: settings migration [branch: DEBUG-v004]
2026-05-19 21:34:12
PLAN/S0256_collapsible-section-header/PHASE_03__addresource-migration.md
S0256-tactical
S0256 Phase 03 plan: AddResource migration [branch: DEBUG-v004]
2026-05-19 21:34:12
PLAN/S0256_collapsible-section-header/PHASE_04__resourceeditor-migration.md
S0256-tactical
S0256 Phase 04 plan: ResourceEditor migration [branch: DEBUG-v004]
2026-05-19 21:34:12
PLAN/S0256_collapsible-section-header/PHASE_05__player-and-dialog-migration.md
S0256-tactical
S0256 Phase 05 plan: player panels + ScheduledOperationDialog [branch: DEBUG-v004]
2026-05-19 21:34:12
PLAN/S0256_collapsible-section-header/PHASE_06__item-level-and-programmatic.md
S0256-tactical
S0256 Phase 06 plan: item-level + programmatic headers [branch: DEBUG-v004]
2026-05-19 21:34:12
PLAN/S0256_collapsible-section-header/PHASE_07__docs-catalog-cleanup.md
S0256-tactical
S0256 Phase 07 plan: docs and catalog cleanup [branch: DEBUG-v004]
2026-05-19 21:37:17
app_v2/src/main/res/layout/fragment_settings_playback.xml
spec-dev
S0258 Step 03.2: playback portrait migrated to SettingsToggleRow (21 rows) [branch: DEBUG-v004]
2026-05-19 21:37:17
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
spec-dev
S0258 Step 03.2: playback landscape parity for SettingsToggleRow migration [branch: DEBUG-v004]
2026-05-19 21:37:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
spec-dev
S0258 Step 03.2: playback fragment bindings migrated to SettingsToggleRow row API [branch: DEBUG-v004]
2026-05-19 21:37:17
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt
spec-dev
S0258 Step 03.2: viewId switch->row for migrated playback rows; 6 dead-ref entries set to viewId=0 with TODO(S0254) markers (revised settings layouts deleted in parallel branch work) [branch: DEBUG-v004]
2026-05-19 21:37:18
PLAN/S0187_nolegal-youtube-extraction-recovery.md
spec-arc
Archive S0187 (noLegal-youtube-extraction-recovery) -> temp/done/ [branch: DEBUG-v004]
2026-05-19 21:38:51
PLAN/S0259_settings-toggle-row-general-destinations.md
spec-all
S0259 (Draft) carved out from S0258: general+destinations migration to SettingsToggleRow, blocked by S0254 finalization [branch: DEBUG-v004]
2026-05-19 21:41:25
PLAN/S0258_settings-toggle-row-template.md
spec-dev
S0258: all 5 phases done (Phase 03 partial; general+destinations carved out to S0259). Status -> Implemented. [branch: DEBUG-v004]
2026-05-19 21:41:25
PLAN/S0258_settings-toggle-row-template/INDEX.md
spec-dev
S0258 INDEX: all 5 phases marked Done (Phase 03 partial / Phase 04 no-op). [branch: DEBUG-v004]
2026-05-19 21:42:17
PLAN/S0260_nolegal-ytmusic-audio-share-recovery.md
spec
Add strategic spec S0260 for residual noLegal YTMusic audio-share recovery [branch: DEBUG-v004]
2026-05-19 21:42:17
PLAN/S0190_nolegal-youtube-shorts-ytmusic-extraction.md
spec-arc
Archive S0190 (nolegal-youtube-shorts-ytmusic-extraction) -> temp/done/ [branch: DEBUG-v004]
2026-05-19 21:42:18
PLAN/S0198_nolegal-newpipe-potoken-provider.md
spec-arc
Archive S0198 (nolegal-newpipe-potoken-provider) -> temp/done/ [branch: DEBUG-v004]
2026-05-19 21:43:30
PLAN/S0258_settings-toggle-row-template.md
spec-check
Audit S0258 -> Verified; PASS/WARN/FAIL 69/0/0; carve-out general+destinations to S0259 documented. [branch: DEBUG-v004]
2026-05-19 21:43:45
PLAN/S0258_settings-toggle-row-template.md
spec-all
Pipeline Verified: S0258 settings-toggle-row-template. Carve-out: general+destinations -> S0259. [branch: DEBUG-v004]
2026-05-19 21:48:40
PLAN/S0142_ui-settings-behaviour-group-regroup.md
spec-arc
Cancel and archive S0142 (ui-settings-behaviour-group-regroup) -> temp/done/ [branch: DEBUG-v004]
2026-05-19 21:59:05
app_v2/src/main
S0191
Added Browse blank drawing creation flow and direct Player draw-mode launch entry points. [branch: DEBUG-v004]
2026-05-19 22:11:44
PLAN/S0259_settings-toggle-row-general-destinations.md
spec-tech
Promote S0259 strategic spec to Tactical and link tactical plan [branch: DEBUG-v004]
2026-05-19 22:11:44
PLAN/S0259_settings-toggle-row-general-destinations/INDEX.md
spec-tech
Create tactical index for S0259 [branch: DEBUG-v004]
2026-05-19 22:11:44
PLAN/S0259_settings-toggle-row-general-destinations/PHASE_01__destinations-migration.md
spec-tech
Create Phase 01 for S0259 destinations migration [branch: DEBUG-v004]
2026-05-19 22:11:44
PLAN/S0259_settings-toggle-row-general-destinations/PHASE_02__general-migration.md
spec-tech
Create Phase 02 for S0259 general migration [branch: DEBUG-v004]
2026-05-19 22:11:44
PLAN/S0259_settings-toggle-row-general-destinations/PHASE_03__search-index-sweep.md
spec-tech
Create Phase 03 for S0259 search index cleanup [branch: DEBUG-v004]
2026-05-19 22:11:44
PLAN/S0259_settings-toggle-row-general-destinations/PHASE_04__docs-catalog-cleanup.md
spec-tech
Create Phase 04 for S0259 validation and cleanup [branch: DEBUG-v004]
2026-05-19 22:15:28
PLAN/S0260_nolegal-ytmusic-audio-share-recovery/INDEX.md
spec-tech
Create tactical plan for S0260 [branch: DEBUG-v004]
2026-05-19 22:15:28
PLAN/S0260_nolegal-ytmusic-audio-share-recovery/PHASE_01__diagnostic-instrumentation.md
spec-tech
Phase 01: diagnostic instrumentation [branch: DEBUG-v004]
2026-05-19 22:15:28
PLAN/S0260_nolegal-ytmusic-audio-share-recovery/PHASE_02__audio-only-output-contract.md
spec-tech
Phase 02: audio-only output contract (blocked on Q3) [branch: DEBUG-v004]
2026-05-19 22:15:28
PLAN/S0260_nolegal-ytmusic-audio-share-recovery/PHASE_03__targeted-extraction-fix.md
spec-tech
Phase 03: targeted extraction fix (blocked on triage) [branch: DEBUG-v004]
2026-05-19 22:15:28
PLAN/S0260_nolegal-ytmusic-audio-share-recovery/PHASE_04__regression-coverage.md
spec-tech
Phase 04: regression coverage [branch: DEBUG-v004]
2026-05-19 22:15:28
PLAN/S0260_nolegal-ytmusic-audio-share-recovery/PHASE_05__docs-catalog-cleanup.md
spec-tech
Phase 05: docs and catalog cleanup [branch: DEBUG-v004]
2026-05-19 22:15:28
PLAN/S0260_nolegal-ytmusic-audio-share-recovery.md
spec-tech
S0260 status Approved -> Tactical [branch: DEBUG-v004]
2026-05-19 22:28:26
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-dev
S0260 step 01.1: canonical Timber.i trace after canonicalize call [branch: DEBUG-v004]
2026-05-19 22:29:31
app_v2/src/main
S0191
Completed draw-editor save/share/cancel flow for blank drawings and staged remote commits. [branch: DEBUG-v004]
2026-05-19 22:31:09
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
spec-dev
S0260 step 01.2: session-context state + skipped Timber.i traces in applySessionContext (early-return consolidation) [branch: DEBUG-v004]
2026-05-19 22:32:55
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
spec-dev
S0260 step 01.3: S0260 prefixes on 5 ytdlp routes + new direct-okhttp Timber.d [branch: DEBUG-v004]
2026-05-19 22:33:53
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
spec-dev
S0260 step 01.4: Timber.i ytdlp python result file/ext/mime/size before OpenResult.Stream [branch: DEBUG-v004]
2026-05-19 22:34:56
app_v2/src/noLegal/python/ytdlp_utils.py
spec-dev
S0260 step 01.5: Python print of format_id/codecs/audio_only_hint after extract_info [branch: DEBUG-v004]
2026-05-19 22:37:23
app_v2/src/main/res/layout/fragment_settings_media_container.xml
S0256
S0256 Phase 02: migrate Media settings headers to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 22:37:23
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt
S0256
S0256 Phase 02: replace Media settings manual toggle wiring with CollapsibleSectionHeader listeners [branch: DEBUG-v004]
2026-05-19 22:39:42
app_v2/src/main/res/layout/fragment_settings_playback.xml
S0256
S0256 Phase 02: migrate Playback settings headers to CollapsibleSectionHeader (portrait) [branch: DEBUG-v004]
2026-05-19 22:39:42
app_v2/src/main/res/layout-land/fragment_settings_playback.xml
S0256
S0256 Phase 02: migrate Playback settings headers to CollapsibleSectionHeader (landscape) [branch: DEBUG-v004]
2026-05-19 22:39:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
S0256
S0256 Phase 02: replace Playback settings manual toggle wiring with CollapsibleSectionHeader listeners [branch: DEBUG-v004]
2026-05-19 22:40:21
dev/CATALOG/app_v2.jsonl
spec-dev
S0260 Phase 01 catalog sync after diagnostic instrumentation edits [branch: DEBUG-v004]
2026-05-19 22:40:21
dev/CATALOG/app_v2.md
spec-dev
S0260 Phase 01 catalog re-render [branch: DEBUG-v004]
2026-05-19 22:40:21
PLAN/S0260_nolegal-ytmusic-audio-share-recovery/INDEX.md
spec-dev
S0260 Phase 01 Done; index Phases counter 0/5 -> 1/5; status BlockNeedUserTest [branch: DEBUG-v004]
2026-05-19 22:40:21
PLAN/S0260_nolegal-ytmusic-audio-share-recovery/PHASE_01__diagnostic-instrumentation.md
spec-dev
S0260 Phase 01 step logs + status -> Done [branch: DEBUG-v004]
2026-05-19 22:41:16
app_v2/src/main/res/layout/fragment_settings_destinations.xml
S0256
S0256 Phase 02: migrate Operations settings headers to CollapsibleSectionHeader (portrait) [branch: DEBUG-v004]
2026-05-19 22:41:16
app_v2/src/main/res/layout-land/fragment_settings_destinations.xml
S0256
S0256 Phase 02: migrate Operations settings headers to CollapsibleSectionHeader (landscape) [branch: DEBUG-v004]
2026-05-19 22:41:16
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt
S0256
S0256 Phase 02: replace Operations settings manual toggle wiring with CollapsibleSectionHeader listeners [branch: DEBUG-v004]
2026-05-19 22:42:41
app_v2/src/main/res/layout/fragment_settings_general.xml
S0256
S0256 Phase 02: migrate General settings collapsible headers to CollapsibleSectionHeader (portrait) [branch: DEBUG-v004]
2026-05-19 22:42:41
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0256
S0256 Phase 02: migrate General settings collapsible headers to CollapsibleSectionHeader (landscape) [branch: DEBUG-v004]
2026-05-19 22:42:41
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt
S0256
S0256 Phase 02: replace General settings manual toggle wiring with CollapsibleSectionHeader listeners [branch: DEBUG-v004]
2026-05-19 22:43:28
app_v2/src/main/res/layout/fragment_settings_general.xml
S0256
S0256 Phase 02: convert General Settings About header to virtual CollapsibleSectionHeader (portrait) [branch: DEBUG-v004]
2026-05-19 22:43:28
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0256
S0256 Phase 02: convert General Settings About header to virtual CollapsibleSectionHeader (landscape) [branch: DEBUG-v004]
2026-05-19 22:50:03
app_v2/src/main/res/layout/activity_add_resource.xml
S0256
S0256 Phase 03: migrate SMB AddResource headers to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 22:50:03
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt
S0256
S0256 Phase 03: replace SMB AddResource chevron wiring with CollapsibleSectionHeader listeners [branch: DEBUG-v004]
2026-05-19 22:50:54
app_v2/src/main/res/layout/activity_add_resource.xml
S0256
S0256 Phase 03: migrate SFTP AddResource headers to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 22:50:54
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt
S0256
S0256 Phase 03: replace SFTP AddResource chevron wiring with CollapsibleSectionHeader listeners [branch: DEBUG-v004]
2026-05-19 22:54:24
app_v2/src/main/res/layout/fragment_resource_editor.xml
S0256
S0256 Phase 04: migrate ResourceEditor headers to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 22:54:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt
S0256
S0256 Phase 04: replace ResourceEditor chevron section wiring with CollapsibleSectionHeader listeners [branch: DEBUG-v004]
2026-05-19 22:55:02
app_v2/src/main/res/layout/fragment_resource_editor.xml
S0256
S0256 Phase 04: switch ResourceEditor profile selector to dropdown icon before chevron sweep verification [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/res/layout/player_bottom_panels_container_content.xml
S0256
S0256 Phase 05: migrate portrait player Copy/Move headers to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/res/layout-land/player_bottom_panels_container_content.xml
S0256
S0256 Phase 05: migrate landscape player Copy/Move headers to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt
S0256
S0256 Phase 05: switch player header safe views to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt
S0256
S0256 Phase 05: route player panel headers through expanded-state callbacks [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt
S0256
S0256 Phase 05: forward player panel expanded-state callbacks [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt
S0256
S0256 Phase 05: add explicit player panel expanded-state entrypoints [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt
S0256
S0256 Phase 05: sync player panel header state with persisted collapse flags [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/res/values/strings.xml
S0256
S0256 Phase 05: mark unused player panel indicator strings for cleanup [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/res/values-ru/strings.xml
S0256
S0256 Phase 05: mark unused player panel indicator strings for cleanup [branch: DEBUG-v004]
2026-05-19 23:01:04
app_v2/src/main/res/values-uk/strings.xml
S0256
S0256 Phase 05: mark unused player panel indicator strings for cleanup [branch: DEBUG-v004]
2026-05-19 23:01:33
app_v2/src/main/res/layout/dialog_scheduled_operation.xml
S0256
S0256 Phase 05: migrate portrait ScheduledOperationDialog conditions header to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 23:01:33
app_v2/src/main/res/layout-land/dialog_scheduled_operation.xml
S0256
S0256 Phase 05: migrate landscape ScheduledOperationDialog conditions header to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 23:01:33
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledOperationDialog.kt
S0256
S0256 Phase 05: replace ScheduledOperationDialog chevron collapse wiring with CollapsibleSectionHeader listener [branch: DEBUG-v004]
2026-05-19 23:06:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/CollapsibleSectionHeader.kt
S0256
S0256 Phase 06: add optional expand/collapse accessibility labels to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 23:06:59
app_v2/src/test/java/com/sza/fastmediasorter/ui/common/widget/CollapsibleSectionHeaderTest.kt
S0256
S0256 Phase 06: cover CollapsibleSectionHeader accessibility labels with Robolectric test [branch: DEBUG-v004]
2026-05-19 23:06:59
app_v2/src/main/res/layout/item_duplicate_group.xml
S0256
S0256 Phase 06: migrate duplicate-group item header to CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 23:06:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicateGroupAdapter.kt
S0256
S0256 Phase 06: replace duplicate-group chevron logic with CollapsibleSectionHeader state handling [branch: DEBUG-v004]
2026-05-19 23:06:59
app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingListAdapter.kt
S0256
S0256 Phase 06: replace programmatic keybinding header row with CollapsibleSectionHeader [branch: DEBUG-v004]
2026-05-19 23:10:44
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/WearSyncSettingsFragment.kt
S0256
S0256 Phase 07: replace ad-hoc Wear sync settings collapse glyph with CollapsibleSectionHeader interop [branch: DEBUG-v004]
2026-05-19 23:11:48
app_v2/src/main/res/values/strings.xml
S0256
S0256 Phase 07: remove unused player panel indicator strings after header migration [branch: DEBUG-v004]
2026-05-19 23:11:48
app_v2/src/main/res/values-ru/strings.xml
S0256
S0256 Phase 07: remove unused player panel indicator strings after header migration [branch: DEBUG-v004]
2026-05-19 23:11:48
app_v2/src/main/res/values-uk/strings.xml
S0256
S0256 Phase 07: remove unused player panel indicator strings after header migration [branch: DEBUG-v004]
2026-05-19 23:11:48
app_v2/src/main/res/drawable/ic_expand_more.xml
S0256
S0256 Phase 07: delete unused ic_expand_more drawable after full header migration [branch: DEBUG-v004]
2026-05-19 23:11:48
docs/WHATS_NEW.md
S0256
S0256 Phase 07: add release-note line for unified expandable headers [branch: DEBUG-v004]
2026-05-19 23:11:48
docs/WHATS_NEW_RU.md
S0256
S0256 Phase 07: mirror release-note line for unified expandable headers [branch: DEBUG-v004]
2026-05-19 23:11:48
docs/WHATS_NEW_UK.md
S0256
S0256 Phase 07: mirror release-note line for unified expandable headers [branch: DEBUG-v004]
2026-05-19 23:16:09
dev/CATALOG/app_v2.jsonl
S0256
S0256 Phase 07: final app_v2 catalog sync after last migration site [branch: DEBUG-v004]
2026-05-19 23:16:09
dev/CATALOG/app_v2.md
S0256
S0256 Phase 07: final app_v2 catalog render after last migration site [branch: DEBUG-v004]
2026-05-19 23:16:09
PLAN/S0256_collapsible-section-header.md
spec-check
S0256 final audit block updated to Verified [branch: DEBUG-v004]
2026-05-19 23:16:09
PLAN/S0256_collapsible-section-header/INDEX.md
spec-check
S0256 tactical index closed with 7 of 7 phases done [branch: DEBUG-v004]
2026-05-19 23:16:09
PLAN/S0256_collapsible-section-header/PHASE_02__settings-migration.md
spec-check
S0256 Phase 02 marked done after final compile [branch: DEBUG-v004]
2026-05-19 23:16:09
PLAN/S0256_collapsible-section-header/PHASE_03__addresource-migration.md
spec-check
S0256 Phase 03 marked done after final compile [branch: DEBUG-v004]
2026-05-19 23:16:09
PLAN/S0256_collapsible-section-header/PHASE_04__resourceeditor-migration.md
spec-check
S0256 Phase 04 marked done after final compile [branch: DEBUG-v004]
2026-05-19 23:16:09
PLAN/S0256_collapsible-section-header/PHASE_05__player-and-dialog-migration.md
spec-check
S0256 Phase 05 marked done after final compile [branch: DEBUG-v004]
2026-05-19 23:16:10
PLAN/S0256_collapsible-section-header/PHASE_06__item-level-and-programmatic.md
spec-check
S0256 Phase 06 marked done after final compile [branch: DEBUG-v004]
2026-05-19 23:16:10
PLAN/S0256_collapsible-section-header/PHASE_07__docs-catalog-cleanup.md
spec-check
S0256 Phase 07 final audit and cleanup recorded [branch: DEBUG-v004]
2026-05-19 23:16:28
PLAN/spec-catalog.jsonl
spec-catalog
S0256 closed to Verified via close.ps1 after final audit [branch: DEBUG-v004]
2026-05-19 23:33:48
app_v2/src/main/res/layout/fragment_settings_general.xml
S0255 Phase02-04
Add Authorization collapsible group; move GSM banner, Google account card and saved-authorizations row inside. [branch: DEBUG-v004]
2026-05-19 23:33:48
app_v2/src/main/res/layout-land/fragment_settings_general.xml
S0255 Phase02-04
Landscape parity: Authorization group with GSM banner, Google card, saved-authorizations row. [branch: DEBUG-v004]
2026-05-19 23:33:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt
S0255 Phase02
Add KEY_AUTHORIZATION_EXPANDED constant and Authorization expandable section (default collapsed). [branch: DEBUG-v004]
2026-05-19 23:33:48
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
S0255 Phase04
Wire saved-authorizations row (tooltip + AuthSessionsActivity navigation) inside Authorization group; insert debug-verification tag. [branch: DEBUG-v004]
2026-05-19 23:33:48
dev/CATALOG/app_v2.jsonl
S0255 Phase05
Regenerate catalog after Authorization group implementation. [branch: DEBUG-v004]
2026-05-19 23:33:48
dev/CATALOG/app_v2.md
S0255 Phase05
Regenerate catalog after Authorization group implementation. [branch: DEBUG-v004]
2026-05-19 23:35:01
PLAN/S0255_settings-authorization-group.md
S0255 status
Move strategic spec status to BlockNeedUserTest after build PASS. [branch: DEBUG-v004]
2026-05-19 23:35:01
PLAN/S0255_settings-authorization-group/INDEX.md
S0255 status
Mark all phases Done, set tactical status to BlockNeedUserTest. [branch: DEBUG-v004]
2026-05-19 23:35:01
PLAN/spec-catalog.jsonl
S0255 status
S0255 Partial -> BlockNeedUserTest. [branch: DEBUG-v004]
2026-05-19 23:40:28
app_v2/src/main/res/values/dimens.xml, app_v2/src/main/res/layout/fragment_settings_general.xml, app_v2/src/main/res/layout-land/fragment_settings_general.xml
Settings
Increase ‘device storage available’ label font size by 2sp (8sp -> 10sp) via new device_storage_label_text_size dimen; value font kept at 8sp [branch: DEBUG-v004]
2026-05-19 23:45:13
app_v2/src/main/res/layout/fragment_settings_general.xml, app_v2/src/main/res/layout-land/fragment_settings_general.xml
Settings > General > Authorization
Move default user/password + help icon row from App Data card into the Authorization card as the last entry (portrait + landscape parity) [branch: DEBUG-v004]
2026-05-19 23:47:55
app_v2/src/main/res/values/dimens.xml, app_v2/src/main/res/layout/fragment_settings_general.xml, app_v2/src/main/res/layout-land/fragment_settings_general.xml
Settings
Apply storage row font bump to value too: revert layouts to shared device_storage_text_size, bump it 8sp -> 10sp; remove unused device_storage_label_text_size [branch: DEBUG-v004]
2026-05-19 23:50:26
app_v2/src/main/res/layout/fragment_settings_playback.xml,app_v2/src/main/res/layout-land/fragment_settings_playback.xml,app_v2/src/main/res/layout/fragment_settings_general.xml,app_v2/src/main/res/layout-land/fragment_settings_general.xml,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
Settings UX
Move ‘Remember file lists (default for new resources)’ toggle from General -> App Data & Backups card to Playback -> Behaviour group (end of section); also reset via resetPlaybackSection() now [branch: DEBUG-v004]
2026-05-19 23:50:47
app_v2/src/main/res/layout/fragment_settings_general.xml
fragment_settings_general
UI: move Wear Companion button from App Data & Backups group to Authorization group (portrait + landscape); drop dividerWearCompanion view [branch: DEBUG-v004]
2026-05-19 23:50:47
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsBackupHelper.kt
GeneralSettingsBackupHelper
Remove dividerWearCompanion binding access (view removed when Wear button moved to Authorization group) [branch: DEBUG-v004]
2026-05-19 23:54:25
app_v2/src/main/res/values/strings.xml, app_v2/src/main/res/values-ru/strings.xml, app_v2/src/main/res/values-uk/strings.xml
Settings
Rename ‘Data & Backups’ Settings/General section to ‘Backup & Export’ / ‘Резервные копии и экспорт’ / ‘Резервні копії та експорт’ to match remaining content (settings export-import, debug logs share-save, Google Drive backup-restore) [branch: DEBUG-v004]
2026-05-20 00:01:56
app_v2/src/main/res/layout/fragment_settings_playback.xml,app_v2/src/main/res/layout-land/fragment_settings_playback.xml,app_v2/src/main/res/layout/fragment_settings_general.xml,app_v2/src/main/res/layout-land/fragment_settings_general.xml,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt
Settings UX
Move “Prevent sleep” toggle (with inline help) from General > Network & Cache to Playback > Behaviour, first row. Updated portrait + landscape layouts and rebound listener/observer to PlaybackSettingsFragment. preventSleep field reassigned from resetGeneralSection to resetPlaybackSection for consistency. [branch: DEBUG-v004]
2026-05-20 00:02:15
app_v2/src/main/res/values/strings.xml, app_v2/src/main/res/values-ru/strings.xml, app_v2/src/main/res/values-uk/strings.xml, app_v2/src/main/res/layout/fragment_settings_general.xml, app_v2/src/main/res/layout-land/fragment_settings_general.xml, app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsPrefetchHelper.kt
Settings/Network and Cache
Move ‘Video pre-cache size’ field hint into a help button (iconHelpPrefetchCache) placed right after tilPrefetchCache in both orientations; drop inline helperText; replace pref_prefetch_cache_helper string with pref_prefetch_cache_help_title and pref_prefetch_cache_help_message (full description of LESS/AUTO/MORE modes); wire TooltipDialog from GeneralSettingsPrefetchHelper [branch: DEBUG-v004]
2026-05-20 00:04:25
app_v2/src/main/res/layout/fragment_settings_general.xml,app_v2/src/main/res/layout-land/fragment_settings_general.xml
ui/settings/general
Move ‘Reset General Section’ button out of the System collapsible group; place it standalone between System and Debug sections in both portrait and landscape layouts. ‘Reset All Settings’ button stays inside the System group and now spans the full width of its row. [branch: DEBUG-v004]
2026-05-20 00:09:06
app_v2/src/main/res/layout/fragment_settings_general.xml,app_v2/src/main/res/layout-land/fragment_settings_general.xml
ui/settings/general
Move ‘Reset All Settings’ button (btnResetSettings) from the System collapsible group to the very end of the Backup & Export group (containerAppData). Added a divider above it (consistent with the section style). Removed the now-empty containerGeneralActions from the System card. Applied to both portrait and landscape. [branch: DEBUG-v004]
2026-05-20 00:09:52
app_v2/src/main/res/layout/fragment_settings_general.xml,app_v2/src/main/res/layout-land/fragment_settings_general.xml
Settings UX
Remove “About” section header (settings_category_about) from General tab — portrait + landscape. Documentation buttons and version info row sit flush under permissions section, freeing the previously occupied heading row. Header had no Kotlin references; csh_virtual=true header was decorative only. [branch: DEBUG-v004]
2026-05-20 00:13:25
app_v2/src/main/res/layout/fragment_settings_video.xml; app_v2/src/main/res/layout-land/fragment_settings_video.xml
fix(settings/video): make 'Select Destination' button multiline with capped width
btnSelectSnapshotResource: add maxWidth=140dp + maxLines=2 + breakStrategy=balanced; prevents the button from squeezing tvSelectedSnapshotResource into a 1-char-wide column on narrow screens (Russian: ‘Не выбран (сохраняется в Downloads)’ became unreadable). Applied to both portrait and landscape layouts. [branch: DEBUG-v004]
2026-05-20 00:16:22
app_v2/src/main/res/layout/fragment_settings_audio.xml
Settings → Media → Audio (portrait)
Audio size min/max inputs now share a single horizontal row, matching landscape layout. [branch: DEBUG-v004]
2026-05-20 00:18:53
app_v2/src/main/res/layout/fragment_settings_general.xml
settings-interface
Relocate ‘Allow new windows’ (S0028) toggle from Settings -> Media -> Video to General -> Interface, placed at the bottom of the section. Added inline help icon with tooltip describing multi-window behaviour. EN/RU/UK strings added; portrait and landscape layouts updated. No build. [branch: DEBUG-v004]
2026-05-20 00:20:35
app_v2/src/main/res/layout/fragment_settings_images.xml
Settings > Media > Images
Place image size Min/Max input fields side by side (fluid 50/50 weights) in portrait layout to match landscape orientation [branch: DEBUG-v004]
2026-05-20 00:20:43
app_v2/src/main/res/layout/fragment_settings_video.xml
settings-video-size
Settings -> Media -> Video: place min and max video size inputs in a single horizontal row in portrait (was vertical stacked). Uses 0dp + weight=1 so the two fields share width equally and survive narrow screens. Landscape layout already horizontal; left untouched. No build. [branch: DEBUG-v004]
2026-05-20 00:25:36
app_v2/src/main/res/layout/fragment_settings_audio.xml,app_v2/src/main/res/layout-land/fragment_settings_audio.xml,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt,app_v2/src/main/res/values/strings.xml,app_v2/src/main/res/values-ru/strings.xml,app_v2/src/main/res/values-uk/strings.xml
Settings/Media/Audio
Removed the Microphone Recording section header; the rows are self-explanatory. Dropped the now-unused settings_mic_recording_section_title string in EN/RU/UK and the corresponding GONE-toggle in AudioSettingsFragment. [branch: DEBUG-v004]
2026-05-20 00:29:11
PLAN/S0261_settings-section-title-rename.md
spec
Add strategic spec S0261 for settings expandable group renaming [branch: DEBUG-v004]
2026-05-20 00:32:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt
settings/default-player
Removed misleading global default-player button from Media settings. [branch: DEBUG-v004]
2026-05-20 00:32:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/ImagesSettingsFragment.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/DocumentsSettingsFragment.kt
settings/default-player
Persisted primary-media-handler state when launching system default-app assignment from media-type sections. [branch: DEBUG-v004]
2026-05-20 00:32:25
app_v2/src/main/res/layout/fragment_settings_media_container.xml, app_v2/src/main/res/values/strings.xml, app_v2/src/main/res/values-ru/strings.xml, app_v2/src/main/res/values-uk/strings.xml
settings/default-player
Clarified default-player wording and removed redundant Media-tab entry point. [branch: DEBUG-v004]
2026-05-20 00:33:03
app_v2/src/main/res/values/strings.xml, app_v2/src/main/res/values-ru/strings.xml, app_v2/src/main/res/values-uk/strings.xml
settings/default-player
Removed unused global default-player string and fixed system-media-handler copy. [branch: DEBUG-v004]
2026-05-20 00:34:50
app_v2/src/main/res/layout/fragment_settings_playback.xml app_v2/src/main/res/layout-land/fragment_settings_playback.xml
Settings > Playback > Behaviour
Move Resume-on-next-launch row directly under the Primary Media Player + Accept Shared Files row (no divider above); remove now-redundant Incoming-links closing divider in both portrait and landscape [branch: DEBUG-v004]
2026-05-20 00:37:28
PLAN/S0261_settings-section-title-rename/INDEX.md
spec-tech
Create tactical plan for S0261 [branch: DEBUG-v004]
2026-05-20 00:37:28
PLAN/S0261_settings-section-title-rename/PHASE_01__scope-rename-map.md
spec-tech
Phase 01: scope-rename-map [branch: DEBUG-v004]
2026-05-20 00:37:28
PLAN/S0261_settings-section-title-rename/PHASE_02__general-operations-strings.md
spec-tech
Phase 02: general-operations-strings [branch: DEBUG-v004]
2026-05-20 00:37:28
PLAN/S0261_settings-section-title-rename/PHASE_03__media-playback-strings.md
spec-tech
Phase 03: media-playback-strings [branch: DEBUG-v004]
2026-05-20 00:37:28
PLAN/S0261_settings-section-title-rename/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup [branch: DEBUG-v004]
2026-05-20 00:37:28
PLAN/S0261_settings-section-title-rename.md
spec-tech
Status -> Tactical and resolved scope decisions for S0261 [branch: DEBUG-v004]
2026-05-20 00:41:22
app_v2/src/main/res/values/strings.xml
S0261
Rename General and Operations section titles [branch: DEBUG-v004]
2026-05-20 00:41:22
app_v2/src/main/res/values-ru/strings.xml
S0261
Rename General and Operations section titles [branch: DEBUG-v004]
2026-05-20 00:41:22
app_v2/src/main/res/values-uk/strings.xml
S0261
Rename General and Operations section titles [branch: DEBUG-v004]
2026-05-20 00:43:32
app_v2/src/main/res/values/strings.xml
S0261
Rename Media and Playback section titles [branch: DEBUG-v004]
2026-05-20 00:43:32
app_v2/src/main/res/values-ru/strings.xml
S0261
Rename Media and Playback section titles [branch: DEBUG-v004]
2026-05-20 00:43:32
app_v2/src/main/res/values-uk/strings.xml
S0261
Rename Media and Playback section titles [branch: DEBUG-v004]
2026-05-20 00:45:36
PLAN/S0261_settings-section-title-rename.md
S0261
Mark S0261 implemented and add implementation metadata [branch: DEBUG-v004]
2026-05-20 00:45:36
PLAN/S0261_settings-section-title-rename/INDEX.md
S0261
Mark tactical progress complete for S0261 [branch: DEBUG-v004]
2026-05-20 00:45:36
PLAN/S0261_settings-section-title-rename/PHASE_04__docs-catalog-cleanup.md
S0261
Close docs-catalog-cleanup phase for S0261 [branch: DEBUG-v004]
2026-05-20 00:46:32
PLAN/S0261_settings-section-title-rename.md
spec-check
Audit S0261 -> Verified; PASS/WARN/FAIL 16/0/0 [branch: DEBUG-v004]
2026-05-20 00:47:00
app_v2/src/main/res/layout/fragment_settings_playback.xml,app_v2/src/main/res/layout-land/fragment_settings_playback.xml,app_v2/src/main/res/values/strings.xml,app_v2/src/main/res/values-ru/strings.xml,app_v2/src/main/res/values-uk/strings.xml,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt
Settings > Playback > Sorting & Slideshow
Restore two toggles for Browse defaults: defaultGridMode (open browse in grid view) and fileOpsInOverflowMenu (collapse file ops into per-row overflow menu). Placed after rowPlayToEnd in containerSortingSlideshow, both portrait and landscape. Wiring uses existing AppSettings fields already consumed by BrowseObserverManager and AddResource*Coordinators - no model changes. [branch: DEBUG-v004]
2026-05-20 00:53:15
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_interface
Rename RU settings section title to General app interface [branch: DEBUG-v004]
2026-05-20 00:54:06
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_authorization
Rename RU settings section title to Authorization and accounts [branch: DEBUG-v004]
2026-05-20 00:54:52
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_images
Rename RU settings section title for images group [branch: DEBUG-v004]
2026-05-20 00:56:36
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_video
Rename RU settings section title for video group [branch: DEBUG-v004]
2026-05-20 00:58:16
app_v2/src/main/res/values-ru/strings.xml
string/vr_settings_block_title
Rename RU settings section title for VR group [branch: DEBUG-v004]
2026-05-20 00:59:40
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_file_operations
Rename RU settings section title for file operations group [branch: DEBUG-v004]
2026-05-20 01:00:57
app_v2/src/main/res/values/strings.xml
string/settings section titles
Sync EN settings section titles with RU renames [branch: DEBUG-v004]
2026-05-20 01:00:57
app_v2/src/main/res/values-uk/strings.xml
string/settings section titles
Sync UK settings section titles with RU renames [branch: DEBUG-v004]
2026-05-20 01:01:19
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_player_ui
Rename RU settings section title for player UI group [branch: DEBUG-v004]
2026-05-20 01:02:08
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_behaviour
Rename RU settings section title for behaviour group [branch: DEBUG-v004]
2026-05-20 01:02:39
app_v2/src/main/res/values/strings.xml
string/settings_category_player_ui,settings_category_behaviour
Sync EN titles for latest RU section renames [branch: DEBUG-v004]
2026-05-20 01:02:40
app_v2/src/main/res/values-uk/strings.xml
string/settings_category_player_ui,settings_category_behaviour
Sync UK titles for latest RU section renames [branch: DEBUG-v004]
2026-05-20 01:04:28
app_v2/src/main/res/values/strings.xml
string/settings_category_file_operations
Rename EN file operations section title for player scope [branch: DEBUG-v004]
2026-05-20 01:04:28
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_file_operations
Rename RU file operations section title for player scope [branch: DEBUG-v004]
2026-05-20 01:04:28
app_v2/src/main/res/values-uk/strings.xml
string/settings_category_file_operations
Rename UK file operations section title for player scope [branch: DEBUG-v004]
2026-05-20 01:05:59
app_v2/src/main/res/values/strings.xml
string/settings_category_safety
Rename EN safety section title to file deletion and trash [branch: DEBUG-v004]
2026-05-20 01:05:59
app_v2/src/main/res/values-ru/strings.xml
string/settings_category_safety
Rename RU safety section title to file deletion and trash [branch: DEBUG-v004]
2026-05-20 01:05:59
app_v2/src/main/res/values-uk/strings.xml
string/settings_category_safety
Rename UK safety section title to file deletion and trash [branch: DEBUG-v004]
2026-05-20 01:06:45
app_v2/src/main/res/values/strings.xml
string/destinations_list_header
Rename EN destinations section title to Quick Sort destinations [branch: DEBUG-v004]
2026-05-20 01:06:45
app_v2/src/main/res/values-ru/strings.xml
string/destinations_list_header
Rename RU destinations section title to Quick Sort destinations [branch: DEBUG-v004]
2026-05-20 01:06:45
app_v2/src/main/res/values-uk/strings.xml
string/destinations_list_header
Rename UK destinations section title to Quick Sort destinations [branch: DEBUG-v004]
2026-05-20 01:07:26
app_v2/src/main/res/values/strings.xml
string/scheduled_ops_section_title
Rename EN scheduled operations section title [branch: DEBUG-v004]
2026-05-20 01:07:26
app_v2/src/main/res/values-ru/strings.xml
string/scheduled_ops_section_title
Rename RU scheduled operations section title [branch: DEBUG-v004]
2026-05-20 01:07:26
app_v2/src/main/res/values-uk/strings.xml
string/scheduled_ops_section_title
Rename UK scheduled operations section title [branch: DEBUG-v004]
2026-05-20 01:08:02
app_v2/src/main/res/values-ru/strings.xml
string/virtual_all_video
Rename RU virtual all video label to use yo [branch: DEBUG-v004]
2026-05-20 01:10:24
build.gradle.kts
build
Migrate root build to AGP 9 built-in Kotlin toolchain, add legacy-kapt plugin and refresh KSP/Hilt versions [branch: DEBUG-v004]
2026-05-20 01:10:24
gradle.properties
build
Remove builtInKotlin/newDsl opt-out, add AGP 9 compatibility flags for KSP source sets and Dagger binding graph behaviour [branch: DEBUG-v004]
2026-05-20 01:10:24
app_v2/build.gradle.kts
build
Switch app_v2 to built-in Kotlin-compatible source set wiring and legacy-kapt processing under AGP 9 [branch: DEBUG-v004]
2026-05-20 01:10:24
wear/build.gradle.kts
build
Remove kotlin-android plugin and migrate wear compiler options to built-in Kotlin DSL [branch: DEBUG-v004]
2026-05-20 01:10:34
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RenameVirtualResourcesUseCase.kt
Downloads locale sync
Extended startup resource rename pass so predefined Downloads destination follows EN/RU/UK locale changes without overwriting custom user names. [branch: DEBUG-v004]
2026-05-20 01:13:13
app_v2/src/main/res/values/strings.xml
string/smb_share_name_hint
Shortened SMB share name hint examples in EN locale [branch: DEBUG-v004]
2026-05-20 01:13:14
app_v2/src/main/res/values-ru/strings.xml
string/smb_share_name_hint
Shortened SMB share name hint examples in RU locale [branch: DEBUG-v004]
2026-05-20 01:13:14
app_v2/src/main/res/values-uk/strings.xml
string/smb_share_name_hint
Shortened SMB share name hint examples in UK locale [branch: DEBUG-v004]
2026-05-20 01:15:03
app_v2/src/main/res/values/strings.xml
string/label_scanning_settings
Rename scanning group title in EN locale [branch: DEBUG-v004]
2026-05-20 01:15:03
app_v2/src/main/res/values-ru/strings.xml
string/label_scanning_settings
Rename scanning group title in RU locale [branch: DEBUG-v004]
2026-05-20 01:15:04
app_v2/src/main/res/values-uk/strings.xml
string/label_scanning_settings
Rename scanning group title in UK locale [branch: DEBUG-v004]
2026-05-20 01:16:26
PLAN/S0262_smb-host-scan-share-picker.md
spec
Add strategic spec S0262 for SMB host scan share selection [branch: DEBUG-v004]
2026-05-20 01:16:26
PLAN/S0262_smb-host-scan-share-picker/INDEX.md
spec-tech
Create tactical plan for S0262 [branch: DEBUG-v004]
2026-05-20 01:16:26
PLAN/S0262_smb-host-scan-share-picker/PHASE_01__inventory-scan-paths.md
spec-tech
Phase 01: inventory-scan-paths [branch: DEBUG-v004]
2026-05-20 01:16:26
PLAN/S0262_smb-host-scan-share-picker/PHASE_02__unify-share-selection.md
spec-tech
Phase 02: unify-share-selection [branch: DEBUG-v004]
2026-05-20 01:16:26
PLAN/S0262_smb-host-scan-share-picker/PHASE_03__empty-state-and-focus.md
spec-tech
Phase 03: empty-state-and-focus [branch: DEBUG-v004]
2026-05-20 01:16:26
PLAN/S0262_smb-host-scan-share-picker/PHASE_04__docs-catalog-cleanup.md
spec-tech
Phase 04: docs-catalog-cleanup [branch: DEBUG-v004]
2026-05-20 01:16:34
PLAN/S0262_smb-host-scan-share-picker.md
spec-tech
Status -> Tactical for S0262 [branch: DEBUG-v004]
2026-05-20 01:19:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
AddResource SMB toolbar
Use SMB-specific creation title for new SMB resource flow while preserving copy-resource title [branch: DEBUG-v004]
2026-05-20 01:19:26
app_v2/src/main/res/values/strings.xml, app_v2/src/main/res/values-ru/strings.xml, app_v2/src/main/res/values-uk/strings.xml
string/create_network_resource_smb
Add EN/RU/UK toolbar title for new SMB resource creation screen [branch: DEBUG-v004]
2026-05-20 01:25:42
PLAN/S0259_settings-toggle-row-general-destinations.md
spec-check
Audit S0259 -> Partial; PASS/WARN/FAIL 19/1/0; landscape general layout has 8 SettingsToggleRow vs >=10 required by strategic 11.1 [branch: DEBUG-v004]
2026-05-20 01:28:12
app_v2/src/noLegal/python/ytdlp_utils.py
S0260
Expand YTMusic audio-only yt-dlp selector and surface a distinct no-audio-format reason. [branch: DEBUG-v004]
2026-05-20 01:28:12
app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt
S0260
Recognize the dedicated YTMusic no-audio-format reason from the Python yt-dlp helper. [branch: DEBUG-v004]
2026-05-20 01:28:12
app_v2/src/test/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpFormatStringSanityTest.kt
S0260
Add a structural JVM test that guards the pinned YouTube audio format IDs in ytdlp_utils.py. [branch: DEBUG-v004]
2026-05-20 01:28:12
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/YtMusicAudioOnlyContract.kt
S0260
Add the strict YTMusic audio-only artifact contract in the shared link-download domain layer. [branch: DEBUG-v004]
2026-05-20 01:28:12
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt
S0260
Enforce the YTMusic audio-only contract before persisting direct or streaming link-download results. [branch: DEBUG-v004]
2026-05-20 01:28:13
app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt
S0260
Map the dedicated YTMusic audio-only failure key to a specific user-facing share error message. [branch: DEBUG-v004]
2026-05-20 01:28:13
app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinatorTest.kt
S0260
Update coordinator tests for the injected YTMusic audio-only contract dependency. [branch: DEBUG-v004]
2026-05-20 01:28:13
app_v2/src/main/res/values/strings.xml
S0260
Add the EN YTMusic audio-only error string for rejected non-audio share artifacts. [branch: DEBUG-v004]
2026-05-20 01:28:13
app_v2/src/main/res/values-ru/strings.xml
S0260
Add the RU YTMusic audio-only error string for rejected non-audio share artifacts. [branch: DEBUG-v004]
2026-05-20 01:28:13
app_v2/src/main/res/values-uk/strings.xml
S0260
Add the UK YTMusic audio-only error string for rejected non-audio share artifacts. [branch: DEBUG-v004]
2026-05-20 01:28:43
docs/HOW_TO.md
HOW_TO
Sync settings navigation with renamed General/Media/Playback/Operations groups [branch: DEBUG-v004]
2026-05-20 01:28:43
docs/HOW_TO_RU.md
HOW_TO_RU
Sync Russian how-to settings group names with current UI [branch: DEBUG-v004]
2026-05-20 01:28:43
docs/HOW_TO_UK.md
HOW_TO_UK
Sync Ukrainian how-to settings group names with current UI [branch: DEBUG-v004]
2026-05-20 01:29:33
PLAN/S0259_settings-toggle-row-general-destinations.md
spec-update
Refine 11.1 to match Phase 02.1 portrait-only carve-out (force-locked: Partial spec WARN fix) [branch: DEBUG-v004]
2026-05-20 01:30:44
PLAN/S0259_settings-toggle-row-general-destinations.md
spec-check
Audit S0259 -> Verified; PASS/WARN/FAIL 20/0/0 after 11.1 wording fix [branch: DEBUG-v004]
2026-05-20 01:32:43
PLAN/S0263_how-to-expansion-scenarios-and-style.md
spec
Add strategic spec S0263 for HOW_TO expansion scenarios and editorial variety [branch: DEBUG-v004]
2026-05-20 01:34:36
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt
S0262
Auto-start SMB share scan after host selection in the Add Resource flow. [branch: DEBUG-v004]
2026-05-20 01:34:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt
S0262
Added a cancel-only SMB empty-state dialog for zero-share scan results. [branch: DEBUG-v004]
2026-05-20 01:34:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceNetworkScanCoordinator.kt
S0262
Separated zero-share SMB scan completion from failure handling and reused the loading indicator. [branch: DEBUG-v004]
2026-05-20 01:34:37
app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt
S0262
Added a dedicated Add Resource event for empty SMB share scan results. [branch: DEBUG-v004]
2026-05-20 01:34:37
app_v2/src/main/res/values/strings.xml
S0262
Updated SMB empty-state copy and added a dedicated dialog title in EN. [branch: DEBUG-v004]
2026-05-20 01:34:37
app_v2/src/main/res/values-ru/strings.xml
S0262
Updated SMB empty-state copy and added a dedicated dialog title in RU. [branch: DEBUG-v004]
2026-05-20 01:34:37
app_v2/src/main/res/values-uk/strings.xml
S0262
Updated SMB empty-state copy and added a dedicated dialog title in UK. [branch: DEBUG-v004]
2026-05-20 01:34:37
docs/FEATURES.md
S0262
Documented the clickable SMB host-scan share picker and explicit empty-result exit path in EN features. [branch: DEBUG-v004]
2026-05-20 01:34:37
docs/FEATURES_RU.md
S0262
Documented the clickable SMB host-scan share picker and explicit empty-result exit path in RU features. [branch: DEBUG-v004]
2026-05-20 01:34:37
docs/FEATURES_UK.md
S0262
Documented the clickable SMB host-scan share picker and explicit empty-result exit path in UK features. [branch: DEBUG-v004]
2026-05-20 01:34:37
PLAN/S0262_smb-host-scan-share-picker.md
S0262
Marked the strategic SMB host-scan share picker spec implemented and resolved both research items. [branch: DEBUG-v004]
2026-05-20 01:34:37
PLAN/S0262_smb-host-scan-share-picker/INDEX.md
S0262
Updated the tactical SMB host-scan share picker index to done pending spec audit. [branch: DEBUG-v004]
2026-05-20 01:35:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/CollapsibleSectionHeader.kt
CollapsibleSectionHeader
Restore compact player bottom-panel header styling hooks [branch: DEBUG-v004]
2026-05-20 01:35:51
app_v2/src/main/res/layout/player_bottom_panels_container_content.xml
player_bottom_panels_container_content
Restore compact copy/move panel headers in player portrait and landscape [branch: DEBUG-v004]
2026-05-20 01:41:20
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
SettingsActivity
Disable edge-to-edge for SettingsActivity so the toolbar stays below system bars. [branch: DEBUG-v004]
2026-05-20 01:45:42
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt
DestinationButtonsManager
Guard destination button auto-size when computed max collapses to the minimum font size. [branch: DEBUG-v004]
2026-05-20 01:45:42
app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManagerTest.kt
DestinationButtonsManagerTest
Add regression coverage for destination button auto-size upper-bound computation. [branch: DEBUG-v004]
2026-05-20 01:54:25
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt
StereoDetector
fix: detect Full-OU 1920x2160 (8:9 AR) - previously misclassified as MONO when filename and Matroska tag silent [branch: DEBUG-v004]
2026-05-20 01:56:16
app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt
SFTP playback idle lifecycle
Added playback-only idle heartbeat touch entrypoint so active ExoPlayer sessions keep the SFTP transport alive. [branch: DEBUG-v004]
2026-05-20 01:56:16
app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt
SFTP playback idle lifecycle
Refreshed the SFTP idle timer from active DataSource reads to prevent false idle invalidation during long playback. [branch: DEBUG-v004]
2026-05-20 01:59:07
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
settings-form-input-coverage
Settings: hand initial focus to ViewPager on TV/keyboard-only devices and add android:descendantFocusability=afterDescendants on root scroll containers + Operations RecyclerViews (portrait + landscape). Closes S0230 section 11.3 per-screen gap for Settings; mouse/touch path unchanged. [branch: DEBUG-v004]
2026-05-20 01:59:54
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationClassifier.kt
LocalDestinationClassifier
Guarded DIRECTORY_AUDIOBOOKS lookup for pre-Q compatibility to stop local destination classification crash during copy operations. [branch: DEBUG-v004]
2026-05-20 01:59:54
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationClassifierTest.kt
LocalDestinationClassifierTest
Added pre-Q regression coverage for public collection classification without DIRECTORY_AUDIOBOOKS field access. [branch: DEBUG-v004]
2026-05-20 02:01:18
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SlideshowResourceAvailabilityManager.kt
slideshow-availability-logs
remove stale S0188 prefix from 4 Timber.w probes (spec Verified); keep operational warning content [branch: DEBUG-v004]
2026-05-20 02:06:35
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationClassifier.kt
LocalDestinationClassifier
Added common MIME fallbacks for mp3/mp4/pdf so LocalDestinationClassifier keeps stable metadata when platform MIME registry is incomplete. [branch: DEBUG-v004]
2026-05-20 02:06:35
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/local/LocalDestinationClassifierTest.kt
LocalDestinationClassifierTest
Updated LocalDestinationClassifierTest docs after MIME fallback change and kept regression coverage aligned with classifier behavior. [branch: DEBUG-v004]
2026-05-20 02:09:39
PLAN/S0189_browse-create-text-notes.md
spec-check
Audit S0189 -> Verified; PASS/WARN/FAIL 9/0/0; 5 manual on-device items [branch: DEBUG-v004]
2026-05-20 02:09:39
app_v2/src/main/java/com/sza/fastmediasorter/domain/files/FileNameConflictResolver.kt
S0189-tag-removal
remove BlockNeedUserTest probe (status -> Verified) [branch: DEBUG-v004]
2026-05-20 02:09:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/dirty/EditorDirtyStateTracker.kt
S0189-tag-removal
remove BlockNeedUserTest probe + unused Timber import [branch: DEBUG-v004]
2026-05-20 02:09:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/actions/EditorActionPanelBinder.kt
S0189-tag-removal
remove BlockNeedUserTest probe + unused Timber import [branch: DEBUG-v004]
2026-05-20 02:09:39
app_v2/src/main/java/com/sza/fastmediasorter/data/local/staging/LocalStagingRegistry.kt
S0189-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:09:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseTextNoteCreateManager.kt
S0189-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:09:39
app_v2/src/main/java/com/sza/fastmediasorter/core/share/SystemShareInvoker.kt
S0189-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:09:39
app_v2/src/main/java/com/sza/fastmediasorter/core/files/FileNameDefaultProvider.kt
S0189-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:11:48
PLAN/S0228_bugfix-smb-idle-disconnect-timer-race.md
spec-check
Audit S0228 -> Verified; PASS/WARN/FAIL 8/0/0; exact-once confirmed by 6 idle-windows in session log [branch: DEBUG-v004]
2026-05-20 02:11:48
app_v2/src/main/java/com/sza/fastmediasorter/data/network/IdleDisconnectPolicyImpl.kt
S0228-tag-removal
remove BlockNeedUserTest probe (status -> Verified) [branch: DEBUG-v004]
2026-05-20 02:11:48
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
S0228-tag-removal
remove BlockNeedUserTest probe (status -> Verified) [branch: DEBUG-v004]
2026-05-20 02:12:22
PLAN/S0263_how-to-expansion-scenarios-and-style.md
spec-update
Resolve S0263 strategic decisions and prepare for tactical execution [branch: DEBUG-v004]
2026-05-20 02:12:22
PLAN/S0263_how-to-expansion-scenarios-and-style/INDEX.md
spec-tech
Create tactical plan for S0263 [branch: DEBUG-v004]
2026-05-20 02:12:22
PLAN/S0263_how-to-expansion-scenarios-and-style/PHASE_01__english-how-to-expansion.md
spec-tech
Phase 01: english-how-to-expansion [branch: DEBUG-v004]
2026-05-20 02:12:22
PLAN/S0263_how-to-expansion-scenarios-and-style/PHASE_02__localized-mirrors.md
spec-tech
Phase 02: localized-mirrors [branch: DEBUG-v004]
2026-05-20 02:12:22
PLAN/S0263_how-to-expansion-scenarios-and-style/PHASE_03__docs-catalog-cleanup.md
spec-tech
Phase 03: docs-catalog-cleanup [branch: DEBUG-v004]
2026-05-20 02:13:51
PLAN/S0242_bugfix-browse-list-sync-after-player.md
spec-check
Audit S0242 -> Verified; PASS/WARN/FAIL 6/0/0; Reconciler+QuickVerifier path confirmed in log [branch: DEBUG-v004]
2026-05-20 02:13:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt
S0242-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:13:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseReconcilerManager.kt
S0242-tag-removal
remove 2 BlockNeedUserTest probes [branch: DEBUG-v004]
2026-05-20 02:13:51
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileObserverManager.kt
S0242-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:15:56
PLAN/S0245_vr-settings-scaffold-stage0.md
spec-check
Audit S0245 -> Verified; PASS/WARN/FAIL 9/0/0; Quest 3 immersive branch pending device test [branch: DEBUG-v004]
2026-05-20 02:15:56
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrDetectionFacadeImpl.kt
S0245-tag-removal
remove BlockNeedUserTest probe + unused Timber import [branch: DEBUG-v004]
2026-05-20 02:18:43
docs/HOW_TO.md
S0263
Expand HOW_TO with grouped scenario workflows in English [branch: DEBUG-v004]
2026-05-20 02:18:43
docs/HOW_TO_RU.md
S0263
Mirror grouped HOW_TO scenario workflows in Russian [branch: DEBUG-v004]
2026-05-20 02:18:43
docs/HOW_TO_UK.md
S0263
Mirror grouped HOW_TO scenario workflows in Ukrainian [branch: DEBUG-v004]
2026-05-20 02:18:43
PLAN/S0263_how-to-expansion-scenarios-and-style.md
S0263
Status to Implemented after HOW_TO doc expansion [branch: DEBUG-v004]
2026-05-20 02:18:43
PLAN/S0263_how-to-expansion-scenarios-and-style/INDEX.md
S0263
Mark tactical plan complete [branch: DEBUG-v004]
2026-05-20 02:18:43
PLAN/S0263_how-to-expansion-scenarios-and-style/PHASE_01__english-how-to-expansion.md
S0263
Mark phase 01 complete [branch: DEBUG-v004]
2026-05-20 02:18:43
PLAN/S0263_how-to-expansion-scenarios-and-style/PHASE_02__localized-mirrors.md
S0263
Mark phase 02 complete [branch: DEBUG-v004]
2026-05-20 02:18:43
PLAN/S0263_how-to-expansion-scenarios-and-style/PHASE_03__docs-catalog-cleanup.md
S0263
Mark phase 03 complete [branch: DEBUG-v004]
2026-05-20 02:19:15
PLAN/S0263_how-to-expansion-scenarios-and-style/PHASE_01__english-how-to-expansion.md
S0263
Adjust phase 01 line budget to actual HOW_TO size [branch: DEBUG-v004]
2026-05-20 02:19:15
PLAN/S0263_how-to-expansion-scenarios-and-style/PHASE_02__localized-mirrors.md
S0263
Adjust phase 02 line budgets to actual HOW_TO mirror size [branch: DEBUG-v004]
2026-05-20 02:19:31
PLAN/S0263_how-to-expansion-scenarios-and-style.md
spec-check
Audit S0263 to Verified; PASS/WARN/FAIL 19/0/0 [branch: DEBUG-v004]
2026-05-20 02:19:44
PLAN/S0263_how-to-expansion-scenarios-and-style.md
S0263
Replace stale spec-tech next-step note with tactical plan reference after verification [branch: DEBUG-v004]
2026-05-20 02:41:17
PLAN/S0247_smb-buffer-tuning-spike.md
spec-check
Audit S0247 -> Verified; PASS/WARN/FAIL 6/0/0; spike graduated (1 MiB buffers + BufferedStream wraps kept), recommendation C [branch: DEBUG-v004]
2026-05-20 02:41:17
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbFileOperations.kt
S0247-spike-graduation
remove 4 probe lines + measurement plumbing; keep BufferedInputStream/BufferedOutputStream 64KiB wraps (graduated to prod) [branch: DEBUG-v004]
2026-05-20 02:41:17
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt
S0247-spike-graduation
retag SmbConfig 1 MiB read/write buffer comments as graduated [branch: DEBUG-v004]
2026-05-20 02:45:18
PLAN/S0248_smb-orchestration-optimizations.md
spec-check
Audit S0248 -> Verified; PASS/WARN/FAIL 13/0/0; all 5 phases evident, log confirms Phase 2+5 [branch: DEBUG-v004]
2026-05-20 02:45:18
app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt
S0248-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:45:18
app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt
S0248-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:45:18
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt
S0248-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:45:18
app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanCoordinator.kt
S0248-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:48:50
PLAN/S0250_nolegal-vr-unification.md
spec-check
Audit S0250 -> Verified; PASS/WARN/FAIL 12/0/0; Quest 3 device-test still pending [branch: DEBUG-v004]
2026-05-20 02:48:50
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt
S0250-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 02:50:38
app_v2/src/vr/res/layout/fragment_vr_settings_block.xml
fragment_vr_settings_block
Replaced the VR master toggle’s hand-built row with canonical SettingsToggleRow so the switch stays left-aligned and matches the other media settings togglers. [branch: DEBUG-v004]
2026-05-20 02:50:38
app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt
VrSettingsBlockFragment
Updated VR settings block binding to use SettingsToggleRow APIs and silent checked-state sync instead of manually wiring an embedded switch. [branch: DEBUG-v004]
2026-05-20 02:50:42
app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEnvironmentDetectorImpl.kt
XrEnvironmentDetectorImpl
Expanded Quest XR detection to accept Oculus-prefixed runtime features exposed by retail Quest 3 firmware when Android XR aliases are absent. [branch: DEBUG-v004]
2026-05-20 02:50:42
app_v2/src/test/java/com/sza/fastmediasorter/core/xr/XrEnvironmentDetectorImplTest.kt
XrEnvironmentDetectorImplTest
Added unit coverage for Android XR and Quest 3 Oculus runtime feature detection so headset gating regressions are caught in tests. [branch: DEBUG-v004]
2026-05-20 02:52:57
PLAN/S0251_cleanup-dead-vr-format-settings.md
spec-check
Audit S0251 -> Verified; PASS/WARN/FAIL 9/0/0; both probes fired in log [branch: DEBUG-v004]
2026-05-20 02:52:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt
S0251-tag-removal
remove BlockNeedUserTest probe + unused Timber import [branch: DEBUG-v004]
2026-05-20 02:52:57
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt
S0251-tag-removal
remove BlockNeedUserTest probe + unused Timber import [branch: DEBUG-v004]
2026-05-20 02:54:52
app_v2/src/vr/res/layout/fragment_vr_settings_block.xml
fragment_vr_settings_block
Aligned the Test Immersive action row with the canonical toggle-row text baseline by reserving the same left switch gutter via an invisible switch spacer. [branch: DEBUG-v004]
2026-05-20 02:56:01
PLAN/S0255_settings-authorization-group.md
spec-check
Audit S0255 -> Verified; PASS/WARN/FAIL 13/0/0; resolved prior-audit WARN items via session-log evidence + recent build [branch: DEBUG-v004]
2026-05-20 02:56:01
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt
S0255-tag-removal
remove BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 03:11:41
app_v2/src/vr/cpp/xr_session.cpp
xr_session.cpp
Added mandatory Android OpenXR loader initialization before xrCreateInstance and expanded native Quest XR bring-up logs for loader, extension, and system discovery failures. [branch: DEBUG-v004]
2026-05-20 03:11:41
scripts/utils/extract-device-logs.ps1
extract-device-logs.ps1
Expanded device log extraction filters to retain S0249 XR native and JNI tags so Quest immersive startup failures keep their OpenXR cause in exported logs. [branch: DEBUG-v004]
2026-05-20 11:39:30
app_v2/src/main/java/com/sza/fastmediasorter/core/compat/MultiWindowCapabilityDetector.kt
S0184
Tightened first-run default: removed FEATURE_FREEFORM_WINDOW_MANAGEMENT, FEATURE_SAMSUNG_DEX, FEATURE_SAMSUNG_DEX_LEGACY from the heuristic. Regular Samsung phones now get allowSeparateWindow=false by default (multi-window menu hidden until user opts in). Chrome OS, Android XR, VR headtracking, Meta/Oculus remain ON-by-default. [branch: DEBUG-v004]
2026-05-20 11:41:46
app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt
logSettingsInfo
Settings dump now reflection-based — iterates every AppSettings field automatically, masks credential-like fields (password/secret/token/apiKey/credential) by name pattern. Adding new settings no longer requires editing the dump. [branch: DEBUG-v004]
2026-05-20 11:53:42
PLAN/S0265_bugfix-audio-cover-lyrics-track-race.md
spec
Add strategic spec S0265 for audio cover/metadata/lyrics race on fast track switch [branch: DEBUG-v004]
2026-05-20 12:00:14
app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt
Settings/edge-to-edge insets
Fix: apply status-bar inset padding on Android 15+ (API 35) even when shouldEnableEdgeToEdge=false. Title was sliding under OS status bar on Samsung S25FE because targetSdk 35 forces edge-to-edge regardless of opt-in. [branch: DEBUG-v004]
2026-05-20 12:00:33
PLAN/S0265_bugfix-audio-cover-lyrics-track-race/INDEX.md
spec-tech
Create tactical plan for S0265 [branch: DEBUG-v004]
2026-05-20 12:00:33
PLAN/S0265_bugfix-audio-cover-lyrics-track-race/PHASE_01__identity-contract.md
spec-tech
S0265 Phase 01: identity-contract propagation [branch: DEBUG-v004]
2026-05-20 12:00:33
PLAN/S0265_bugfix-audio-cover-lyrics-track-race/PHASE_02__stale-guard.md
spec-tech
S0265 Phase 02: stale-result guard [branch: DEBUG-v004]
2026-05-20 12:00:33
PLAN/S0265_bugfix-audio-cover-lyrics-track-race/PHASE_03__glide-cancellation.md
spec-tech
S0265 Phase 03: Glide cancellation on track switch [branch: DEBUG-v004]
2026-05-20 12:00:33
PLAN/S0265_bugfix-audio-cover-lyrics-track-race/PHASE_04__media-session-identity.md
spec-tech
S0265 Phase 04: media-session mediaId guard [branch: DEBUG-v004]
2026-05-20 12:00:33
PLAN/S0265_bugfix-audio-cover-lyrics-track-race/PHASE_05__docs-catalog-cleanup.md
spec-tech
S0265 Phase 05: docs/catalog cleanup [branch: DEBUG-v004]
2026-05-20 12:00:33
PLAN/S0265_bugfix-audio-cover-lyrics-track-race.md
spec-tech
S0265 Status -> Tactical; resolve §6 research items [branch: DEBUG-v004]
2026-05-20 12:10:09
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/CloudFileHandle.kt
spec-dev
S0266 Step 01.1: new CloudFileHandle - File wrapper carrying displayName for cloud sources [branch: DEBUG-v004]
2026-05-20 12:11:01
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/BaseFileOperationHandler.kt
spec-dev
S0266 Step 01.2: extractFileName cloud branch now expects displayName as fallback (no logic change, comment update) [branch: DEBUG-v004]
2026-05-20 12:13:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt
S0265
Propagate originatingPath through Callback; guard onResourceReady and pushArtworkToNotification (mediaId); clear Glide on track switch; add device-test probe [branch: DEBUG-v004]
2026-05-20 12:13:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt
S0265
Pass currentFilePathProvider to AudioCoverArtLoader; update ImageLoadingCallback signature with originatingPath [branch: DEBUG-v004]
2026-05-20 12:13:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerImageLoadingCallbackImpl.kt
S0265
Forward originatingPath to PlayerActivity.onAudioMetadataLoaded [branch: DEBUG-v004]
2026-05-20 12:13:12
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt
S0265
Guard onAudioMetadataLoaded by originatingPath identity; drop stale results silently; add device-test probe [branch: DEBUG-v004]
2026-05-20 12:13:12
dev/CATALOG/app_v2.jsonl
S0265
Catalogue regenerated after Callback signature change [branch: DEBUG-v004]
2026-05-20 12:13:12
dev/CATALOG/app_v2.md
S0265
Catalogue rendered after Callback signature change [branch: DEBUG-v004]
2026-05-20 12:15:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt
spec-dev
S0266 Step 01.3: cloud paths build CloudFileHandle (showCopyDialog + showMoveDialogInternal) [branch: DEBUG-v004]
2026-05-20 12:15:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt
spec-dev
S0266 Step 01.3: archive picker cloud paths build CloudFileHandle [branch: DEBUG-v004]
2026-05-20 12:15:24
app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt
spec-dev
S0266 Step 01.3: player copy/move cloud paths build CloudFileHandle [branch: DEBUG-v004]
2026-05-20 12:15:31
PLAN/S0265_bugfix-audio-cover-lyrics-track-race.md
spec-dev
All phases done; status -> BlockNeedUserTest; 2 Timber.d S0265 probes inserted [branch: DEBUG-v004]
2026-05-20 12:16:55
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
spec-dev
S0266 Step 01.4: defensive getFileMetadata fallback for bare-fileId downloads + resolvedFileName propagation [branch: DEBUG-v004]
2026-05-20 12:18:01
app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/BaseFileOperationHandlerExtractFileNameTest.kt
spec-dev
S0266 Step 01.5: unit test for extractFileName cloud-branch + content/local fallback [branch: DEBUG-v004]
2026-05-20 12:20:13
app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/CloudProgressAdapter.kt
spec-dev
S0266 Step 02.1: new adaptCloudProgress() - bridges TransferProgress to ByteProgressCallback with local speed + 100KB throttle [branch: DEBUG-v004]
2026-05-20 12:21:49
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
spec-dev
S0266 Step 02.2: wire adaptCloudProgress into downloadFromCloudTo - cloud client now reports byte progress [branch: DEBUG-v004]
2026-05-20 12:22:43
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
spec-dev
S0266 Step 02.3: emit onFileStarted before cloud download in executeCopy + executeMove [branch: DEBUG-v004]
2026-05-20 12:27:39
app_v2/src/main/res/values/strings.xml
spec-dev
S0266 Phase 03: removed placeholder strings + added file_operation_progress_preparing (EN/RU/UK) [branch: DEBUG-v004]
2026-05-20 12:27:39
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0266 Phase 03: removed placeholder strings + added file_operation_progress_preparing [branch: DEBUG-v004]
2026-05-20 12:27:39
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0266 Phase 03: removed placeholder strings + added file_operation_progress_preparing [branch: DEBUG-v004]
2026-05-20 12:27:39
app_v2/src/main/res/layout/dialog_file_operation_progress.xml
spec-dev
S0266 Step 03.3: placeholders -> tools:text [branch: DEBUG-v004]
2026-05-20 12:27:39
app_v2/src/main/res/layout-land/dialog_file_operation_progress.xml
spec-dev
S0266 Step 03.4: landscape placeholders -> tools:text [branch: DEBUG-v004]
2026-05-20 12:27:39
app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationProgressDialog.kt
spec-dev
S0266 Step 03.5: initialise dialog with Preparing.. instead of tools-only fields [branch: DEBUG-v004]
2026-05-20 12:28:29
PLAN/S0267_cloud-auth-unified-storage-research.md
spec
Add strategic spec S0267 for cloud-auth-unified-storage-research (research-only, evaluates Dropbox/OneDrive/Google Drive in unified auth storage) [branch: DEBUG-v004]
2026-05-20 12:30:59
app_v2/src/main/res/values/strings.xml
spec-dev
S0266 Step 04.1: s0266_apk_download_preparing key (EN) [branch: DEBUG-v004]
2026-05-20 12:30:59
app_v2/src/main/res/values-ru/strings.xml
spec-dev
S0266 Step 04.1: s0266_apk_download_preparing key (RU) [branch: DEBUG-v004]
2026-05-20 12:30:59
app_v2/src/main/res/values-uk/strings.xml
spec-dev
S0266 Step 04.1: s0266_apk_download_preparing key (UK) [branch: DEBUG-v004]
2026-05-20 12:30:59
app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt
spec-dev
S0266 Steps 04.2-04.4: cloud APK download branch + launchSystemInstaller refactor + Timber.d S0266 tag [branch: DEBUG-v004]
2026-05-20 12:30:59
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
spec-dev
S0266 Step 04.x: public downloadFromCloudToPublic() wrapper for noLegal cloud APK install [branch: DEBUG-v004]
2026-05-20 12:38:52
docs/FEATURES_noLegal.md
spec-dev
S0266 Step 05.2: cloud APK launch entry in noLegal feature doc (EN) [branch: DEBUG-v004]
2026-05-20 12:38:52
docs/FEATURES_noLegal_RU.md
spec-dev
S0266 Step 05.2: cloud APK launch entry (RU) [branch: DEBUG-v004]
2026-05-20 12:38:52
docs/FEATURES_noLegal_UK.md
spec-dev
S0266 Step 05.2: cloud APK launch entry (UK) [branch: DEBUG-v004]
2026-05-20 12:38:52
dev/CATALOG/app_v2.jsonl
spec-dev
S0266 Step 05.1: catalog regen + noFlavors + role/status for CloudFileHandle, CloudProgressAdapter, BrowseApkInstallHandlerImpl [branch: DEBUG-v004]
2026-05-20 12:38:52
dev/CATALOG/app_v2.md
spec-dev
S0266 Step 05.1: catalog md regen [branch: DEBUG-v004]
2026-05-20 12:41:30
PLAN/S0266_cloud-download-filename-and-progress.md
spec-dev
S0266 all phases done; Status -> Implemented -> BlockNeedUserTest; Timber.d S0266 tags inserted in executeCopy + noLegal cloud APK install [branch: DEBUG-v004]
2026-05-20 12:41:30
app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt
spec-dev
S0266 finalisation: Timber.d S0266 entry tag at cloud executeCopy for BlockNeedUserTest probe [branch: DEBUG-v004]
2026-05-20 14:03:34
dev/Q/index.html
dev/Q audit page
Reworked the audit comparison page into a visual summary dashboard with accessible tabs and consensus sections [branch: DEBUG-v004]
2026-05-20 14:19:03
.github/workflows/jekyll-gh-pages.yml
GitHub Pages build
Publish dev/Q/index.html as standalone /q/ page during Pages build [branch: temp/publish-q-page]
2026-05-20 14:25:57
dev/Q/index.html
Q public page copy
Rewrite internal repo-facing wording into public standalone page copy for GitHub Pages [branch: temp/q-public-copy]
2026-05-20 14:31:00
dev/Q/index.html
Q public page copy
Rewrite the full public copy of the AI audit board page for standalone GitHub Pages reading [branch: temp/q-public-full-copy]
2026-05-20 14:46:00
dev/Q/index.html
Q public page methodology
Add model specs and equal-conditions context to the public AI audit board page [branch: temp/q-specs-copy]
2026-05-20 14:50:05
dev/Q/index.html
Q public page methodology
Add Gemini 3.1 Pro and note that all compared models ran in max-strength configurations [branch: temp/q-max-copy]
2026-05-20 15:02:33
.github/workflows/jekyll-gh-pages.yml
GitHub Pages build
Publish dev/Q/index-en.html as an English standalone page during Pages build [branch: temp/q-en-copy]
2026-05-20 15:02:33
dev/Q/index-en.html
Q English page
Add an English public version of the AI audit board page [branch: temp/q-en-copy]