Skip to the content.

Development Changelog

Auto-generated log of all code modifications. Format: | datetime | file | target | description |


DateTime File Target Description
2026-03-02 00:59:40 scripts/add_to_dev_log.ps1 add_to_dev_log.ps1 Created dev changelog logging script for mandatory change tracking
2026-03-19 21:48:20 app_v2/build.gradle.kts minSdk+coreLibraryDesugaring Lower minSdk 28->26 for Android 8+ support; add coreLibraryDesugaring for legacy flavor (API 23-25 java.time fix)
2026-03-19 21:55:00 dev/TECH_REQUIREMENTS.md, CLAUDE.md, README.md, docs/TECH_STACK.md, dev/PROJECT_OPERATIONS_INDEX.md documentation Update all docs to reflect minSdk 26 (Android 8+) and coreLibraryDesugaring
2026-03-02 01:03:07 AGENTS.md AGENTS.md Added section 6 DEV CHANGELOG (MANDATORY) with script usage rule
2026-03-02 01:03:12 .agent/CUSTOM_RULES.md CUSTOM_RULES Added Dev Changelog Rule section with script usage and examples
2026-03-02 01:03:17 dev/universal_copilot_instructions.md AI_AGENT_DIRECTIVES Added mandatory DEV_CHANGELOG directive to agent-specific section
2026-03-02 01:03:22 .github/copilot-instructions.md strict_constraints Added DEV_CHANGELOG constraint to copilot instructions
2026-03-02 01:03:27 dev/WORK_PLAN_ACTIONABLE_RU.md P2-4 Marked P2-4 (A1-T13..T15) as completed - 31 tests, 4 classes
2026-03-02 01:12:20 app_v2/src/test/.../CloudFileOperationHandlerTest.kt CloudFileOperationHandlerTest Fixed MockK exception: stubbed cloudPathParser.isCloudPath + relaxed context mock
2026-03-02 01:12:20 dev/TECH_REQUIREMENTS.md TECH_REQUIREMENTS Created full tech stack document: platform, 60+ libraries, constraints, min/recommended requirements
2026-03-02 01:12:20 docs/DOCS_MAP.md DOCS_MAP Added TECH_REQUIREMENTS.md reference to Technical Specifications section
2026-03-02 01:12:20 dev/PROJECT_OPERATIONS_INDEX.md PROJECT_OPERATIONS_INDEX Added TECH_REQUIREMENTS.md to research routing
2026-03-02 01:12:20 AGENTS.md AGENTS Added TECH_REQUIREMENTS.md to research order and tech requirements directive
2026-03-02 01:12:20 .github/copilot-instructions.md copilot-instructions Added TECH_REQUIREMENTS.md to routing rules and research shortcuts
2026-03-02 01:12:20 dev/universal_copilot_instructions.md universal_copilot_instructions Added TECH_REQUIREMENTS.md to fast routing section
2026-03-02 01:41:00 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt ImportSettingsUseCase Fixed credential import overwriting existing passwords with empty string - now preserves DB password when import XML has no password (OnConflictStrategy.REPLACE was destroying working FTP/SFTP/SMB credentials)
2026-03-02 01:55:50 scripts/builders/build-aab-release.ps1 build-aab-release.ps1 Fixed: ZIP always contained previous build - now deletes old ZIP before recreating + uses 7z -w flag to store only filename (not full path) in archive
2026-03-02 02:08:42 scripts/builders/build-aab-release.ps1 build-aab-release.ps1 Fixed empty ZIP: replaced incorrect 7z -w flag with Push-Location/Pop-Location so 7z archives file by relative name
2026-03-02 02:21:25 scripts/builders/build-aab-release.ps1 build-aab-release.ps1 Added assembleStandardRelease build step - ZIP now contains both AAB and APK release files
2026-03-02 03:24:28 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl.getFoldersWithMedia Two-segment resource name: use parent/folder when parent < 15 chars to avoid collisions (e.g. Pictures/Telegram vs Movies/Telegram)
2026-03-02 03:24:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt AddResourceViewModel.suggestLocalResourceName Added helper: two-segment name suggestion for manually added SAF folder URIs
2026-03-02 03:24:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/ResourceToAddAdapter.kt ResourceToAddAdapter.ViewHolder.bind Fix cursor-jump bug: skip etName.setText when field has focus during inline edit
2026-03-02 03:40:01 app_v2/src/main/res/raw/msal_config.json msal_config Fix MSAL redirect URI hash to match release keystore SHA1 (FYsxzaNPAAPFK3rigkV29z+r0es=)
2026-03-02 03:40:01 app_v2/src/main/AndroidManifest.xml BrowserTabActivity Update msauth intent-filter path to release keystore SHA1 hash
2026-03-02 03:40:01 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/InteractiveCloudAuthenticator.kt InteractiveCloudAuthenticator Add consumeImmediateResult() default method for synchronous MSAL failure detection
2026-03-02 03:40:01 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/OneDriveAuthPlugin.kt OneDriveAuthPlugin Override consumeImmediateResult() to drain deferred when MSAL fails synchronously (no UI shown)
2026-03-02 03:40:01 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/UnifiedCloudAuthManager.kt UnifiedCloudAuthManager Check consumeImmediateResult() after startInteractiveSignIn to surface silent MSAL errors
2026-03-02 03:40:01 app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LoggingHelper.kt LoggingHelper Plant FileLoggingTree in release (minPriority=WARN) to enable log export in release builds
2026-03-02 03:40:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt GeneralSettingsFragment Long-press version info triggers shareLogs() in release instead of returning false
2026-03-02 23:53:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt ResourceEditorFragment Fix: guard-pattern for all boolean checkboxes in renderFormData to prevent spurious onFieldChanged from programmatic setChecked; remove redundant btnSave.isEnabled from renderLoadingStates (canSave already covers it)
2026-03-02 23:58:38 app_v2/src/main/res/values-night/colors.xml player_filename_overlay_text Fix: player filename overlay text color was black on black background in night mode (audio file, no cover art); changed to white
2026-03-03 00:26:12 app_v2/src/.../db/FileMetadataCacheEntity.kt FileMetadataCacheEntity Added artist, album, title nullable columns for audio metadata persistence
2026-03-03 00:26:17 app_v2/src/.../db/AppDatabase.kt AppDatabase Added MIGRATION_17_18: ALTER TABLE file_metadata_cache ADD artist/album/title columns; bumped version to 18
2026-03-03 00:26:21 app_v2/src/.../di/DatabaseModule.kt DatabaseModule Registered MIGRATION_17_18 in Room builder
2026-03-03 00:26:26 app_v2/src/.../util/CachedMediaMetadataExtractor.kt CachedMediaMetadataExtractor Fix: cache hit now restores artist/album/title; mapToEntity now persists artist/album/title
2026-03-03 00:26:31 app_v2/src/.../player/ImageLoadingManager.kt ImageLoadingManager showAudioFileInfo: instant display of embedded artist/title/album from MediaFile instead of waiting for online search
2026-03-03 00:26:36 app_v2/src/.../player/PlayerActivity.kt PlayerActivity onAudioMetadataLoaded: do not overwrite embedded metadata with empty online results
2026-03-03 00:43:26 app_v2/src/.../ui/browse/BrowseViewModel.kt BrowseViewModel Background audio metadata enrichment: inject CachedMediaMetadataExtractor, add enrichAudioMetadataInBackground() method triggered after DB/RAM cache hit and fresh scan
2026-03-03 00:43:31 app_v2/src/.../ui/browse/MediaFileAdapter.kt MediaFileAdapter PAYLOAD_AUDIO_METADATA partial rebind: DiffUtil getChangePayload detects audio metadata changes, updateAudioMetadataText() updates text labels without thumbnail reload
2026-03-03 02:01:46 app_v2/src/main/res/layout/activity_add_resource.xml activity_add_resource Added cbSmbRememberFileList, btnSmbHelpRememberFileList, cbSftpRememberFileList, btnSftpHelpRememberFileList to add-resource form
2026-03-03 02:01:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt AddResourceViewModel Added rememberFileList param to addSmbResourceManually, addSftpFtpResource, addSftpResourceWithKey; passed to MediaResource construction
2026-03-03 02:01:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt AddResourceActivity Fixed form parity with ResourceEditorFragment: added rememberFileList wiring, full 6-profile preset dialog, showRememberFileListHelpDialog()
2026-03-03 02:01:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceHelper.kt AddResourceHelper Added rememberFileList pre-fill in SMB, SFTP-SSH, and FTP copy-mode cases
2026-03-03 02:03:22 app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorClassifier.kt NetworkErrorClassifier Added STATUS_BAD_NETWORK_NAME to isSmbNotFound() - maps to NetworkFileNotFoundException instead of unclassified ConnectionLost
2026-03-03 02:05:00 app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbClient.kt SmbClient.performTestConnection Fix: use folderExists()||fileExists() for subpath check - fileExists() returns false for directories in SMBJ
2026-03-03 02:10:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt renderConnectionResult Show diagnosticMessage (live stats) in SUCCESS result instead of generic string
2026-03-03 02:10:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceFormViewModel.kt onTestConnection Refresh state.statistics from DB after successful test in EDIT mode; add ResourceConnectionStatus import
2026-03-03 02:16:54 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResourceEditorUseCase.kt updateCredentialInPlace Fix: shareName not updated in NetworkCredentialsEntity on EDIT - caused stale share name in SMB connection
2026-03-03 02:20:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceFormViewModel.kt onTestConnection Fix: Unresolved reference ‘mode’/’resourceId’ - use currentForm.mode/currentForm.id instead of initialize() params
2026-03-03 02:23:43 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt testSmbConnection Fix: derive shareName from resource.path (authoritative) instead of stale credentials value - self-heals existing resources without DB migration
2026-03-03 02:34:33 app_v2/src/main/res/layout-land/activity_player_unified.xml audioCoverArtView Fix: audio controls not visible in landscape - cover art view expanded to full height blocking player controls
2026-03-04 18:56:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourcePasswordManager.kt ResourcePasswordManager Added generic PIN validation callback method for protected resource actions
2026-03-04 18:56:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt MainActivity Added PIN gate before NavigateToAddResourceCopy for protected resources
2026-03-04 20:12:04 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL Created comprehensive improvement proposal document covering documentation, UI/UX, functionality, stability, and web presence
2026-03-04 20:18:22 docs/V2_Specification.md V2_Specification Added missing technical specification page with stable permalink for landing links
2026-03-04 20:18:22 docs/V2_Specification_RU.md V2_Specification_RU Added missing Russian technical specification page with stable permalink
2026-03-04 20:18:22 docs/V2_architecture_overview.md V2_architecture_overview Added missing architecture overview page with stable permalink
2026-03-04 20:18:22 docs/V2_TERMS.md V2_TERMS Added missing terminology reference page with stable permalink
2026-03-04 20:18:22 docs/TODO_V2.md TODO_V2 Added missing roadmap page with stable permalink
2026-03-04 20:18:35 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL Marked task I.1 as completed after adding missing landing documentation pages
2026-03-04 20:22:51 gradle.properties org.gradle.jvmargs Replaced R:/temp java.io.tmpdir with project-local ./temp
2026-03-04 20:23:09 scripts/utils/init-ramdisk.ps1 init-ramdisk Migrated directory initialization from R: RAM disk to project temp/* paths
2026-03-04 20:25:06 docs/V2_Specification_UK.md V2_Specification_UK Added missing Ukrainian technical specification page with stable permalink
2026-03-04 20:25:06 docs/V2_architecture_overview_RU.md V2_architecture_overview_RU Added missing Russian architecture overview page with stable permalink
2026-03-04 20:25:06 docs/V2_architecture_overview_UK.md V2_architecture_overview_UK Added missing Ukrainian architecture overview page with stable permalink
2026-03-04 20:25:06 docs/V2_TERMS_RU.md V2_TERMS_RU Added missing Russian terminology page with stable permalink
2026-03-04 20:25:06 docs/V2_TERMS_UK.md V2_TERMS_UK Added missing Ukrainian terminology page with stable permalink
2026-03-04 20:25:06 docs/TODO_V2_RU.md TODO_V2_RU Added missing Russian roadmap page with stable permalink
2026-03-04 20:25:06 docs/TODO_V2_UK.md TODO_V2_UK Added missing Ukrainian roadmap page with stable permalink
2026-03-04 20:25:06 index-ru.html index-ru Documentation section Switched V2 documentation cards to Russian-localized pages
2026-03-04 20:25:06 index-uk.html index-uk Documentation section Switched V2 documentation cards to Ukrainian-localized pages
2026-03-04 20:25:06 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL Updated I.1 status to fully completed for all three languages
2026-03-04 20:26:00 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL Clearly marked I.1 as implemented in section title and prioritization list
2026-03-04 20:27:23 dev/IMPROVEMENT_PROPOSAL.md Section II UI/UX Expanded item II with detailed user-centric examples: current behavior, pain points, and target UX for points II.1-II.6
2026-03-04 20:28:23 dev/IMPROVEMENT_PROPOSAL.md Section III Functionality Expanded item III with detailed examples and user use-cases for points III.1-III.10 (current pain points and target UX)
2026-03-04 20:30:36 gradle.properties org.gradle.jvmargs Removed java.io.tmpdir from gradle.properties to avoid relative path issues
2026-03-04 20:30:36 gradlew.bat DEFAULT_JVM_OPTS Added project-local absolute java.io.tmpdir and auto-create temp/gradle-tmp
2026-03-04 20:30:36 gradlew DEFAULT_JVM_OPTS Added project-local absolute java.io.tmpdir and mkdir -p temp/gradle-tmp
2026-03-04 20:31:02 gradlew.bat TEMP/TMP Forced TEMP and TMP to project temp/gradle-tmp to remove R: dependency
2026-03-04 20:31:02 gradlew TMPDIR/TMP/TEMP Forced TMPDIR, TMP and TEMP to project temp/gradle-tmp
2026-03-04 20:31:04 app_v2/src/main/res/layout/activity_player.xml activity_player.xml Removed confirmed-unused legacy player layout after pre-change backup
2026-03-04 20:31:04 app_v2/src/main/res/values/bools.xml values/bools.xml Removed 4 unused bool flags (is_small_screen, enable_compact_layout, reduce_animations, use_single_pane_layout)
2026-03-04 20:31:04 app_v2/src/main/res/values-sw480dp/bools.xml values-sw480dp/bools.xml Removed duplicate unused bool flags for sw480dp
2026-03-04 20:31:04 dev/IMPROVEMENT_PROPOSAL.md IV.3 status Marked IV.3 as safe-pass partial implementation with explicit backup path and cleaned resources
2026-03-04 20:32:54 app_v2/src/main/res/drawable/badge_background.xml badge_background Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/bg_progress_dialog.xml bg_progress_dialog Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/button_hover_selector.xml button_hover_selector Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/error_placeholder.xml error_placeholder Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/ic_add_24.xml ic_add_24 Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/ic_image_error.xml ic_image_error Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/ic_save.xml ic_save Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/ic_swap_vert.xml ic_swap_vert Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/ic_video_error.xml ic_video_error Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 app_v2/src/main/res/drawable/ic_video_placeholder.xml ic_video_placeholder Removed confirmed-unused drawable (safe-pass #2, with backup)
2026-03-04 20:32:54 dev/IMPROVEMENT_PROPOSAL.md IV.3 status Updated IV.3 status after safe-pass #2 cleanup with backup paths
2026-03-04 20:40:55 app_v2/src/main/res/drawable/touch_zones_numbered.xml touch_zones_numbered Removed confirmed-unused drawable (safe-pass #3, backup 20260304_204007)
2026-03-04 20:40:55 app_v2/src/main/res/drawable/touch_zones_numbered_simple.xml touch_zones_numbered_simple Removed confirmed-unused drawable (safe-pass #3, backup 20260304_204007)
2026-03-04 20:40:55 app_v2/src/main/res/drawable/touch_zones_video_image.xml touch_zones_video_image Removed confirmed-unused drawable (safe-pass #3, backup 20260304_204007)
2026-03-04 20:40:55 app_v2/src/main/res/drawable/touch_zones_with_labels.xml touch_zones_with_labels Removed confirmed-unused drawable (safe-pass #3, backup 20260304_204007)
2026-03-04 20:40:55 app_v2/src/main/res/layout/touch_zones_overlay.xml touch_zones_overlay Removed confirmed-unused layout (safe-pass #3, backup 20260304_204007)
2026-03-04 20:40:55 app_v2/src/main/res/layout/player_command_panel_mode.xml player_command_panel_mode Removed confirmed-unused layout (safe-pass #3, backup 20260304_204007)
2026-03-04 20:40:55 app_v2/src/main/res/layout/dialog_rename_single.xml dialog_rename_single Removed confirmed-unused layout (safe-pass #3, backup 20260304_204007)
2026-03-04 20:40:55 app_v2/src/main/res/menu/context_menu_file.xml context_menu_file Removed confirmed-unused menu (safe-pass #3, backup 20260304_204007)
2026-03-04 20:40:55 dev/IMPROVEMENT_PROPOSAL.md IV.3 status Updated IV.3 status after safe-pass #3 cleanup with backup path
2026-03-04 20:48:18 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt AppDatabase Reset DB version from 18 to 1, removed all 17 migration objects
2026-03-04 20:48:18 app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt DatabaseModule Replaced addMigrations() with fallbackToDestructiveMigration()
2026-03-04 20:48:19 gradle.properties jvmargs/kapt Added java.io.tmpdir=C: to jvmargs, kapt.use.worker.api=false to fix R: disk space issue
2026-03-04 20:48:33 dev/IMPROVEMENT_PROPOSAL.md IV.7 status Marked IV.7 as DONE - DB migrations reset, fallbackToDestructiveMigration
2026-03-04 20:50:16 favicon.ico favicon Created favicon.ico (16+32+48px) from ic_launcher xxxhdpi
2026-03-04 20:50:16 index.html favicon Added favicon links (ico/32/16/apple-touch) to EN landing
2026-03-04 20:50:16 index-ru.html favicon Added favicon links to RU landing
2026-03-04 20:50:16 index-uk.html favicon Added favicon links to UK landing
2026-03-04 20:50:32 dev/IMPROVEMENT_PROPOSAL.md V.2 status Marked V.2 as DONE - favicon created and inserted into all 3 HTML pages
2026-03-04 20:56:02 robots.txt robots.txt Add robots.txt: allow all crawlers, reference sitemap
2026-03-04 20:56:02 sitemap.xml sitemap.xml Add sitemap.xml with 3 language URLs + hreflang annotations
2026-03-04 20:56:02 index.html index.html SEO: add OG tags, Twitter Card, canonical, hreflang alternates, JSON-LD schema
2026-03-04 20:56:02 index-ru.html index-ru.html SEO: add OG tags (ru_RU), Twitter Card, canonical, hreflang alternates, JSON-LD schema
2026-03-04 20:56:02 index-uk.html index-uk.html SEO: add OG tags (uk_UA), Twitter Card, canonical, hreflang alternates, JSON-LD schema
2026-03-04 20:56:02 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL Mark V.4 (SEO) as done
2026-03-04 20:59:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/views/TranslationOverlayView.kt TranslationOverlayView a11y stub: add override performClick() to satisfy ClickableViewAccessibility lint
2026-03-04 20:59:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerGestureSetupManager.kt PlayerGestureSetupManager a11y stub: call performClick on ACTION_UP in root and playerView touch listeners
2026-03-04 20:59:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt TextViewerManager a11y stub: call performClick on ACTION_UP in all 5 setOnTouchListener lambdas
2026-03-04 20:59:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt EpubViewerManager a11y stub: call performClick on ACTION_UP in WebView and translationOverlay touch listeners
2026-03-04 20:59:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MouseEventHandler.kt MouseEventHandler a11y stub: call performClick on ACTION_UP in createTouchListener
2026-03-04 20:59:47 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL Mark II.4 (a11y stub) as done
2026-03-04 21:14:05 app_v2/src/main/res/layout/fragment_settings_general.xml containerDocLinks Added btnOpenWelcome button to Documentation Links section
2026-03-04 21:14:05 app_v2/src/main/res/layout-land/fragment_settings_general.xml containerDocLinks Added btnOpenWelcome button (landscape)
2026-03-04 21:14:05 app_v2/src/main/res/values/strings.xml open_welcome_tutorial Added string open_welcome_tutorial (EN)
2026-03-04 21:14:05 app_v2/src/main/res/values-ru/strings.xml open_welcome_tutorial Added string open_welcome_tutorial (RU)
2026-03-04 21:14:05 app_v2/src/main/res/values-uk/strings.xml open_welcome_tutorial Added string open_welcome_tutorial (UK)
2026-03-04 21:14:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt btnOpenWelcome Added WelcomeActivity import and btnOpenWelcome click handler
2026-03-04 21:16:37 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL II.6 Touch Zones: обновлён статус на ЧАСТИЧНО РЕАЛИЗОВАНО - overlay/настройки есть, кнопка ? в toolbar плеера отсутствует
2026-03-04 21:17:15 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL III.1: marked as covered by existing filter - no separate search needed; updated priority section
2026-03-04 21:20:42 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL III.6 Wear OS: переведён в высокий приоритет; уточнён MVP - кнопки экспорта/импорта ресурсов через Wearable Data Layer API
2026-03-04 21:20:53 docs/FAQ.md, docs/FAQ_RU.md, docs/FAQ_UK.md FAQ (3 langs) Added ‘How to find a file by name’ Q&A: filter panel covers search scenario, no separate search bar needed
2026-03-04 21:32:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/DynamicBackgroundProcessor.kt DynamicBackgroundProcessor Remove 150ms artificial debounce delay: job cancellation already acts as debounce; fixes strips appearing late vs image
2026-03-04 21:32:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Fix strip/image order mismatch: always clear old background on navigation; skip crossfade in slideshow mode so strips and image appear simultaneously
2026-03-04 21:39:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationManager.kt PlayerNavigationManager Enable slideshow bias for prefetch queue during slideshow: improves next image loading time
2026-03-04 21:39:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Start prefetch immediately in displayImage() instead of waiting for current image to load: ensures next image ready during slideshow interval
2026-03-07 20:51:37 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl Exclude .trash paths from MediaStore browse results to hide metadata.json artifacts
2026-03-07 22:02:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Fix: audioEmptyStateController not called in network-file path and searchOnlineAndDisplayCover; add hide() before cover load, show(mode) on failure/no-cover; fetch mode in IO context
2026-03-07 22:02:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBreathingBarsView.kt AudioBreathingBarsView Fix: remove unused dead variable barWidth in onDraw (lint warning)
2026-03-07 22:16:44 app_v2/src/main/res/layout-land/activity_player_unified.xml mediaContentArea Fix: constrain bottom to bottomPanelsContainer top instead of parent, so ExoPlayer controls are not hidden behind Copy/Move panels in landscape mode
2026-03-07 22:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Fix: call audioEmptyStateController.hide() in displayImage() to clear bars when navigating to file with own cover
2026-03-07 22:55:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBreathingBarsView.kt AudioBreathingBarsView Enhancement: 15 bars (was 9), 5000ms cycle (was 2400ms), per-bar pastel colours (hue 255-310deg), gap 15% (was 30%)
2026-03-07 23:06:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Refactor showAudioFileInfo: Artist-Album-Title on one line, single-line info (SizeFormatDuration), audioFileName always gone; add buildAudioInfoLine(); update updateAudioFormatInfo() to use it
2026-03-07 23:06:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerUiStateCoordinator.kt PlayerUiStateCoordinator tvFileNameOverlay: for audio show full filename only (no index); for other types keep filename + (index/total)
2026-03-07 23:09:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Fix: remove preemptive audioEmptyStateController.show() before searchOnlineAndDisplayCover() in network-file path; bars now shown only after both embedded and online search fail
2026-03-07 23:12:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Fix: network file path now checks searchAudioCoversOnline before calling searchOnlineAndDisplayCover; shows bars immediately if online search disabled (mirrors local file path logic)
2026-03-07 23:38:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt onAudioMetadataLoaded Replaced multi-line/hyphen format with single-line en-dash: Artist – Album (Year) – Title
2026-03-07 23:38:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt updatePanelVisibility tvFileNameOverlay: set margin=topCommandPanel.height via doOnNextLayout so it shows below status bar
2026-03-07 23:38:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerUiStateCoordinator.kt updateUI tvFileNameOverlay: 14sp for audio, 10sp for others; text=file.name for audio
2026-03-07 23:47:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt buildAudioDisplayName Added guard for invisible chars (BOM/NUL) in artist/title tags + diagnostic logging
2026-03-08 00:07:42 app_v2/src/main/res/layout/item_media_file.xml tvFileName/tvFileInfo Fixed blank names in audio-only mode: re-anchor constraints from ivThumbnail (GONE=0height chain collapse) to parent
2026-03-08 00:18:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt updatePanelVisibility Player audio: enforce top-left filename overlay visibility and restore default top margin (remove panel.height offset)
2026-03-08 00:24:55 app_v2/src/main/res/layout-land/activity_player_unified.xml tvFileNameOverlay Added missing tvFileNameOverlay and tvAnimatedBadge to landscape layout (was null in binding, causing overlay to never appear in landscape mode)
2026-03-08 00:26:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBreathingBarsView.kt AudioBreathingBarsView Add slow hue-drift animator (45s cycle, full spectrum): bars shift from purple through green/yellow and back, almost imperceptibly
2026-03-08 00:29:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBreathingBarsView.kt, AudioEmptyStateController.kt AudioEmptyStateController.showPulseNote Fix AVD_PULSE mode: add RenderMode.RINGS to AudioBreathingBarsView (3 concentric pulsing circles), AVD_PULSE now shows music note + rings instead of bars
2026-03-08 00:53:34 app_v2/src/main/res/raw/anim_audio_bg_1.webp, anim_audio_bg_2.webp, anim_audio_bg_3.webp res/raw Added 3 animated WebP (640x360 ping-pong loop) as audio empty-state backgrounds
2026-03-08 00:53:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController.showGif GIF_LOOP mode: random selection from 3 animated WebP resources; asGif() replaced with asDrawable()
2026-03-08 00:54:03 app_v2/src/main/res/raw/raw_audio_empty_state.gif res/raw Deleted unused 71MB GIF (replaced by 3 animated WebP resources)
2026-03-08 00:57:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController Pause/resume animated WebP (Animatable.stop/start) on music play state and Activity lifecycle
2026-03-08 01:00:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController.showGif Fix: DiskCacheStrategy.RESOURCE -> DATA for AnimatedImageDrawable (API28 NoResultEncoderAvailableException)
2026-03-08 01:02:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController.showGif API split: animated WebP (API28+) vs CANVAS_BARS fallback (API23-27/legacy)
2026-03-08 01:05:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBreathingBarsView.kt AudioBreathingBarsView.drawRings RINGS mode: ripple effect (center to off-screen), 8 rings, random vivid colors per startAnimation()
2026-03-08 01:08:58 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/glide/CloudThumbnailModelLoader.kt CloudThumbnailDataFetcher Fix DeadObjectException: added 1-retry backoff + 55-min token cache (companion object) for GoogleAuthUtil.getToken()
2026-03-08 01:17:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController.showGif Fix black screen: replaced Glide with ImageDecoder.decodeDrawable() for animated WebP on API28+ (Glide fails silently for R.raw animated WebP)
2026-03-08 01:25:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController.showGif Decode AnimatedImageDrawable off main thread; defer start() via post() to ensure ImageView bounds are set; explicit REPEAT_INFINITE
2026-03-08 01:31:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager.loadCloudImage Fix GDrive black screen: show cached thumbnail as Glide .thumbnail() placeholder while full image downloads
2026-03-08 01:32:21 scripts/utils/search-log.ps1 search-log.ps1 Add log analysis utility: Summary, Spam, Flow, Pattern, Tag, Level, Context, Top/Last, From/To, Count, OutFile modes
2026-03-08 01:34:34 .github/copilot-instructions.md copilot-instructions.md Add scripts_reference section: log analysis, build, device, test, utility scripts and gradlew shortcuts
2026-03-08 01:40:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController API 28: switch to MovieAnimatedDrawable (software canvas) to bypass broken EGL/RenderThread on emulator; API 29+: keep AnimatedImageDrawable; set LAYER_TYPE_SOFTWARE/HARDWARE accordingly
2026-03-08 01:40:54 app_v2/src/main/AndroidManifest.xml BrowserTabActivity Added debug keystore intent-filter for MSAL (path /WdRIvjP3wXJ5jte7TPUOqtT59es=) alongside release hash
2026-03-08 01:46:43 app_v2/src/main/res/layout/activity_player_unified.xml audioBarsView/audioGifView Add layout_marginBottom=80dp + clickable/focusable=false: animation views no longer overlap exo_bottom_bar controls; applied to both portrait and landscape layouts
2026-03-08 01:46:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt configurePlayerViewForMediaType Add showController() for audio: controls appear immediately without tap
2026-03-08 01:51:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController.showGif Remove Movie-based path (Movie doesn’t support WebP); use ImageDecoder+ALLOCATOR_SOFTWARE+LAYER_TYPE_SOFTWARE for all API 28+ to bypass broken EGL on emulator
2026-03-08 02:04:28 app_v2/src/main/res/layout/activity_player_unified.xml audioBarsView/audioGifView z-order Move animation views BEFORE playerView in FrameLayout z-order: animations render behind PlayerView+controls; remove marginBottom (full-screen background); both portrait+landscape
2026-03-08 02:04:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt configurePlayerViewForMediaType Set PlayerView background+shutterColor TRANSPARENT for audio (animations visible behind), BLACK for video
2026-03-08 02:13:32 app_v2/src/main/res/values/colors.xml colors Increase resource_item_bg_odd contrast (#F5F5F5->#E8E8E8), add chip_*_bg colors per resource type (light theme)
2026-03-08 02:13:32 app_v2/src/main/res/values-night/colors.xml colors-night Add chip_*_bg colors per resource type (dark theme), increase even/odd bg contrast
2026-03-08 02:13:32 app_v2/src/main/res/drawable/bg_resource_type_chip.xml bg_resource_type_chip New rounded-rect chip background drawable for resource type badge
2026-03-08 02:13:32 app_v2/src/main/res/layout/item_resource.xml tvResourceType Add chip background + padding to resource type TextView
2026-03-08 02:13:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt ResourceViewHolder.bind Set chip backgroundTintList per resource type (LOCAL/SMB/SFTP/FTP/CLOUD)
2026-03-08 02:16:11 app_v2/src/main/res/values/colors.xml chip_*_bg Increase chip saturation: Material 50->200 for light theme (A5D6A7/90CAF9/FFE082/FFCC80/CE93D8)
2026-03-08 02:16:11 app_v2/src/main/res/values-night/colors.xml chip_*_bg Increase chip saturation: Material 700-800 for dark theme (2E7D32/1565C0/F57F17/E65100/6A1B9A)
2026-03-08 02:16:11 app_v2/src/main/res/drawable/bg_resource_type_chip.xml bg_resource_type_chip Add 0.5dp stroke, increase corner radius 4->6dp
2026-03-08 02:16:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt ResourceViewHolder.bind Auto-contrast text in chip: dark text on light bg, white on dark bg (luminance calc)
2026-03-08 02:23:59 app_v2/src/main/res/layout/activity_player_unified.xml audioBarsView/audioGifView z-order REVERT+FIX: move animation views AFTER playerView (SurfaceView is always opaque, animations behind it are invisible); restore marginBottom=@dimen/player_audio_overlay_margin_bottom (portrait+landscape)
2026-03-08 02:23:59 app_v2/src/main/res/values/dimens.xml player_audio_overlay_margin_bottom Increase 80dp->96dp: exo_bottom_bar actual height=90dp (4+26+56+4), 96dp provides 6dp clearance above seekbar
2026-03-08 02:39:13 app_v2/src/main/res/layout/activity_player_unified.xml audioCoverArtView z-order Fix AVD_PULSE: insert audioCoverArtView BETWEEN playerView and audioBarsView so rings draw on top of note icon. Order: playerView -> coverArt -> bars(rings) -> gif (portrait+landscape)
2026-03-08 02:41:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBreathingBarsView.kt startAnimation/pauseAnimation Fix: isPaused animator still returns isRunning=true, so resume after pause never triggered. startAnimation now calls resume() if paused, start() if not running. pauseAnimation guards against double-pause.
2026-03-08 02:48:37 app_v2/src/main/res/layout/activity_player_unified.xml PlayerView surface_type Switch PlayerView SurfaceView->TextureView (app:surface_type=texture_view). TextureView is a normal View (no hole-punching), transparent for audio. Animation layers moved BEFORE playerView; controls (seekbar) always on top. Remove marginBottom hacks. Applied portrait+landscape.
2026-03-08 03:00:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController Replace WebP/ImageDecoder/Glide with MP4/MediaPlayer+TextureView. New MODE_VISUALIZATION (API 16+, muted loop). MODE_GIF_LOOP kept as legacy alias. Removed API 28 guard.
2026-03-08 03:00:58 app_v2/src/main/res/layout/activity_player_unified.xml audioGifView→audioVideoView Replace ImageView audioGifView with TextureView audioVideoView (portrait+landscape). TextureView needed for MediaPlayer surface.
2026-03-08 03:01:35 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt audioEmptyStateMode default Change default audioEmptyStateMode from NONE to VISUALIZATION. Same in SettingsRepositoryImpl DataStore fallback.
2026-03-08 03:23:42 app_v2/src/main/res/layout/activity_player_unified.xml TextureView#audioVideoView Removed android:background - TextureView doesn’t support background drawables (crash on API 36)
2026-03-08 03:23:47 app_v2/src/main/res/layout-land/activity_player_unified.xml TextureView#audioVideoView Removed android:background - TextureView doesn’t support background drawables (crash on API 36)
2026-03-08 03:23:52 app_v2/src/main/res/drawable/ic_music_note.xml ic_music_note Replace flat single-color note with 3D shiny gold metallic vector: linear gradient (cream->gold->dark), drop shadow, rim light, specular gloss spot on note head. API 24+ gradients; flat fallback on older.
2026-03-08 03:31:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController Fix MediaPlayer error -38: guard pause() with isPlaying check to prevent call in PREPARED(state=8) state
2026-03-08 03:34:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController Fix black screen: always start muted background video in onPreparedListener, pause immediately if audio is paused
2026-03-08 03:40:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt PlayerDialogAndUiStateManager Show tvFileNameOverlay for all file types (not just audio); add bg_rounded_badge background for readability on any BG
2026-03-08 03:43:31 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/glide/CloudThumbnailModelLoader.kt CloudThumbnailDataFetcher Fix 404 on expired Google Drive thumbnailLink: fetch fresh URL via metadata API and retry
2026-03-08 03:43:31 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/glide/GoogleDriveThumbnailModelLoader.kt GoogleDriveThumbnailDataFetcher Fix 404 on expired Google Drive thumbnailLink: fetch fresh URL via metadata API and retry
2026-03-08 03:44:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController Apply CENTER_CROP Matrix transform to TextureView after MediaPlayer prepare to preserve video aspect ratio
2026-03-08 03:56:49 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl.getRecentFiles Fix Recent Media always empty: use Bundle-based ContentResolver.query on API 26+ (QUERY_ARG_SORT_COLUMNS + QUERY_ARG_LIMIT) instead of raw LIMIT in sortOrder string which was silently rejected by MediaStore on Android 10+
2026-03-08 17:43:35 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/UnifiedCloudAuthManager.kt UnifiedCloudAuthManager Fix swallowed MSAL async errors: inject ApplicationScope, add 1s delayed poll to surface fast-fail OneDrive auth errors when onResume never fires
2026-03-08 17:53:01 app_v2/build.gradle.kts buildTypes Added ‘staging’ build type: release config + isDebuggable=true, applicationIdSuffix=.staging for on-device release testing
2026-03-08 18:06:55 app_v2/src/main/AndroidManifest.xml BrowserTabActivity Added missing MSAL intent-filter for release keystore hash /rk9B49kRMWq5OZ+1ZF76MAavAIg=
2026-03-08 18:16:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/player/render/DualSurfaceStaticImageRenderer.kt CloudProvider detection Fix bug: cloud provider misdetected when filename contains ‘google_drive’ (e.g. Dropbox file named ‘32px-Google_Drive_icon.svg.png’); replaced contains() on full path with startsWith() on cloud:// URL scheme authority in 7 locations
2026-03-08 18:18:30 app_v2/build.gradle.kts staging buildType Fix warning: staging buildType inherited isMinifyEnabled=true from release + set isDebuggable=true; added explicit isMinifyEnabled=false
2026-03-08 18:20:29 app_v2/build.gradle.kts kapt Suppress kapt ‘options not recognized by any processor’ warning via -Xlint:-processing javacOption
2026-03-08 18:22:50 gradle.properties kotlin.daemon.jvm.options Add kotlin.daemon.jvm.options=–enable-native-access=ALL-UNNAMED to suppress JDK21 native-access warnings from Kotlin compiler daemon (separate JVM from Gradle daemon)
2026-03-08 18:34:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerUiStateCoordinator.kt PlayerUiStateCoordinator Downgrade 9x Timber.w debug-tracing to Timber.d; guard expensive stackTrace call with BuildConfig.DEBUG
2026-03-08 18:34:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Downgrade 3x Timber.w Preload failed to Timber.d (normal/expected failures)
2026-03-08 18:39:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerUiStateCoordinator.kt PlayerUiStateCoordinator Remove personal file names/paths from all Timber log calls (security/privacy)
2026-03-08 18:44:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt MediaFileAdapter Fix Type mismatch String? vs String in audioTitle when-block: add !! to non-null-guaranteed branches
2026-03-08 19:02:24 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/glide/CloudThumbnailModelLoader.kt CloudThumbnailDataFetcher Fix: don’t log cancelled Glide requests as Timber.e - downgrade to Timber.d when isCancelled=true (eliminates 98 false errors in release log)
2026-03-08 19:02:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt VideoPlayerManager.getMimeTypeFromPath Fix: return null immediately for cloud:// URIs (no file extension) to avoid spurious Unknown extension warning
2026-03-08 19:02:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt VideoPlayerManager.getMimeTypeFromPath Fix: return null immediately for cloud:// URIs (no file extension) to avoid spurious Unknown extension warning
2026-03-08 19:04:36 app_v2/src/main/AndroidManifest.xml application Add android:enableOnBackInvokedCallback=true - fix OnBackInvokedCallback warning (Android 13+ predictive back gesture)
2026-03-08 19:05:28 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/glide/CloudThumbnailModelLoader.kt CloudThumbnailDataFetcher Downgrade ‘No thumbnail URL’ from Timber.w to Timber.d + remove fileId from log (privacy)
2026-03-08 19:19:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt PlayerViewModel nextFile/previousFile: Timber.w->Timber.d, wrap stackTrace in BuildConfig.DEBUG, remove file names from logs (privacy)
2026-03-08 19:19:36 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt SftpClient.listFiles Remove remotePath from Timber.e log message (privacy)
2026-03-08 19:19:36 app_v2/src/main/java/com/sza/fastmediasorter/utils/GlideCacheStats.kt GlideCacheStats.logStats Downgrade ‘No loads recorded’ from Timber.w to Timber.d
2026-03-08 19:19:41 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt SftpClient.listFiles Remove remotePath from Timber.e log message (privacy)
2026-03-08 19:19:41 app_v2/src/main/java/com/sza/fastmediasorter/utils/GlideCacheStats.kt GlideCacheStats.logStats Downgrade no-loads-recorded from Timber.w to Timber.d
2026-03-08 19:19:44 app_v2/src/main/java/com/sza/fastmediasorter/utils/GlideCacheStats.kt GlideCacheStats.logStats Downgrade no-loads-recorded from Timber.w to Timber.d
2026-03-08 19:22:58 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt SftpMediaScanner Propagate SFTP errors instead of returning emptyList (scanFolder/scanFolderPaged/listDirectoryContents now throw IOException on failure)
2026-03-08 19:58:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt BrowseActivity Fix: PIN not requested when editing resource from BrowseActivity - added ResourcePasswordManager and PIN check before launchEditResource
2026-03-08 20:06:09 app_v2/src/main/res/layout/activity_add_resource.xml activity_add_resource Add cbSmbDisableThumbnails and cbSftpDisableThumbnails checkboxes to resource creation UI
2026-03-08 20:06:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt AddResourceViewModel Add disableThumbnails param to addSmbResourceManually/addSftpFtpResource/addSftpResourceWithKey; fix scan blocks to OR user flag with auto-enable threshold
2026-03-08 20:09:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerUiStateCoordinator.kt PlayerUiStateCoordinator Remove unnecessary safe calls on non-null TextView binding.tvFileNameOverlay (lines 170-174)
2026-03-08 20:26:58 index.html headerCanvas Add procedural canvas wave+particle animation to header background (blue-purple palette, motion blur effect)
2026-03-08 20:27:01 index-ru.html, index-uk.html headerCanvas Same canvas animation applied to RU and UK index pages
2026-03-08 20:37:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioWaveParticleView.kt AudioWaveParticleView New custom View: procedural wave+particle canvas animation for audio empty-state (CANVAS_WAVES mode)
2026-03-08 20:37:45 AudioEmptyStateController, PlayerActivity, AudioSettingsFragment, AppSettings, activity_player_unified.xml x2, strings.xml x3 CANVAS_WAVES Integrated CANVAS_WAVES mode into audio empty-state pipeline: new mode key, wavesView param, dropdown entry, string resources
2026-03-08 21:16:30 AudioWaveParticleView.kt, AudioEmptyStateController.kt AudioWaveParticleView Fix: startAnimation() now calls resume() if isPaused (paused animator returns isRunning=true); pauseAnimation() guards double-pause; showWaves() sets black background before show
2026-03-08 21:34:45 PlayerMediaLoaderManager.kt configurePlayerViewForMediaType Fix audio player black screen: hide PlayerView exo_content_frame for audio so external audio backgrounds and audioCoverArtView are visible; restore content frame for video
2026-03-08 21:44:13 app_v2/src/main/res/values/dimens.xml player_audio_overlay_margin_bottom UI tweak: raise centered audio info overlay from 96dp to 116dp to avoid overlap with playback progress bar
2026-03-08 21:59:22 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt, app_v2/src/main/java/com/sza/fastmediasorter/core/di/DatabaseModule.kt Room migrations Fix data loss on upgrade: restore DB version 18, remove fallbackToDestructiveMigration(), register Room migrations, add schema-aware MIGRATION_1_18 for reset-to-v1 builds
2026-03-08 22:17:34 app_v2/build.gradle.kts debug buildType Fix settings loss on emulator: remove .debug applicationId suffix for debug builds and reuse release signing when keystore exists so updates preserve the same app sandbox/data
2026-03-08 22:23:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/loading/BrowseLoadingManager.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt browse logging Reduced excessive debug logging in browse UI observers and scan progress callbacks
2026-03-08 22:26:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/loading/BrowseLoadingManager.kt BrowseLoadingManager Added aggregated scan progress logging throttled to 1000 files or 5 seconds
2026-03-08 22:47:06 app_v2/src/main/res/values-uk/strings.xml values-uk strings Fixed invalid Android escape sequences in three Ukrainian string resources blocking resource merge
2026-03-08 22:54:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt Browse PIN navigation Fix PIN-protected resource opening by passing the clicked resource directly to browse navigation
2026-03-08 22:55:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt Resource PIN flows Ensure browse and copy actions use the clicked resource directly; edit path remains PIN-protected
2026-03-08 23:14:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceHelper.kt Add resource PIN persistence Persist accessPin for manual local/SMB/SFTP/FTP resource creation and prefill PIN fields in copy-resource flow
2026-03-09 03:03:50 app_v2/src/main/java/com/sza/fastmediasorter/core/network/NetworkContextAnalyzer.kt NetworkContextAnalyzer New: detects cellular transport and private IP addresses for context-aware error diagnostics
2026-03-09 03:03:56 app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapper.kt NetworkErrorMessageMapper Added toContextAwareMessageRes(): returns SMB-specific messages when on cellular or private IP on WiFi
2026-03-09 03:03:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceNavigationCoordinator.kt ResourceNavigationCoordinator Switched error message lookup to toContextAwareMessageRes using NetworkContextAnalyzer
2026-03-09 03:03:56 app_v2/src/main/res/values/strings.xml strings Added error_smb_mobile_network and error_smb_not_on_local_network in EN/RU/UK locales
2026-03-09 03:04:25 app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt LocalMediaScanner Add extension-based fallback in scanFolderSAFFast and listDirectoryContentsSAF when MIME is null/unrecognized (fixes FLAC not detected via SAF)
2026-03-09 03:04:29 app_v2/src/main/java/com/sza/fastmediasorter/data/common/MediaTypeUtils.kt MediaTypeUtils Remove duplicate mimeType.startsWith(video/) check in getMediaTypeFromMime
2026-03-09 03:06:38 app_v2/src/main/res/values*/strings.xml strings EN/RU/UK Updated error_smb_mobile_network (added %1s IP placeholder), changed error_network_connection_lost text; refactored mapper to toContextAwareMessage returning String
2026-03-09 03:09:51 app_v2/src/main/java/com/sza/fastmediasorter/data/common/MediaTypeUtils.kt MediaTypeUtils Add getMediaTypeFromMimeOrExtension() aggregator (MIME-first, extension fallback)
2026-03-09 03:09:51 app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt LocalMediaScanner Replace getMediaTypeFromMime+getMediaType chains with getMediaTypeFromMimeOrExtension() in all 3 SAF scan paths
2026-03-09 03:16:52 app_v2/src/test/java/com/sza/fastmediasorter/data/common/MediaTypeUtilsTest.kt MediaTypeUtilsTest Add 22 unit tests for getMediaType, getMediaTypeFromMime, getMediaTypeFromMimeOrExtension (incl. FLAC null-MIME and non-standard MIME fallback scenarios)
2026-03-09 03:23:20 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt GoogleDriveAuthPlugin Map Google Sign-In status codes to friendly error messages; code 10=SHA-1/config hint, 4/5/7/8/16 mapped, 12501 returns AuthResult.Cancelled
2026-03-09 03:27:39 app_v2/src/main/res/raw/msal_config.json msal_config Updated redirect_uri hash to rk9B49kRMWq5OZ (actual signing cert hash from MSAL error)
2026-03-09 03:27:39 app_v2/src/debug/res/raw/msal_config.json msal_config (debug) Updated redirect_uri hash to rk9B49kRMWq5OZ (actual signing cert hash)
2026-03-09 03:27:39 wear/src/main/res/raw/msal_config.json msal_config (wear) Updated redirect_uri hash to rk9B49kRMWq5OZ (actual signing cert hash)
2026-03-09 03:27:47 app_v2/src/main/res/raw/msal_config.json, app_v2/src/debug/res/raw/msal_config.json, wear/src/main/res/raw/msal_config.json msal_config.json Updated redirect_uri signature hash to match current keystore (iRMe/7fhUe3Plj8y2z5NIOOXsZ8=)
2026-03-09 03:30:54 app_v2/src/main/res/raw/msal_config.json, wear/src/main/res/raw/msal_config.json msal_config.json Reverted main+wear to release hash (rk9B49k…); debug config keeps debug hash (iRMe…)
2026-03-09 03:39:37 app_v2/google-services.json google-services.json Add missing oauth_client entries: Android client (type 1, SHA-1 ae4f41…) and Web client (type 3) from GCP project 764216752430; was empty after firebase project switch to fastmediasorter-4f44c
2026-03-11 01:29:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt MainActivity Fix LOCAL resource copy: route NavigateToAddResourceCopy to ResourceEditorActivity.createCopyIntent() instead of AddResourceActivity (which showed add-new-resource UI for LOCAL type)
2026-03-11 01:47:07 app_v2/src/main/res/values/colors.xml colors.xml IV.3 UnusedResources: removed purple_200/500/700, blue_200, teal_200, ic_launcher_background, audio_icon_bg, button_hover, button_focused, player_touch_zone_inactive, 9 touch_zones_overlay aliases, text_color_tertiary
2026-03-11 01:47:14 app_v2/src/main/res/values-night/colors.xml colors.xml (night) IV.3: same cleanup for night theme - blue_200, teal_200, ic_launcher_background, audio_icon_bg, button_hover, button_focused, player_touch_zone_inactive, 9 touch_zones_overlay aliases, text_color_tertiary
2026-03-11 01:47:14 app_v2/src/main/res/values/dimens.xml dimens.xml IV.3: removed player_deprecated_button_bottom_offset_1/2 (explicitly deprecated, unused)
2026-03-11 01:47:14 app_v2/src/main/res/layout/dialog_move_to.xml dialog_move_to.xml IV.3: deleted unused dialog layout (DialogMoveToBinding not referenced in any Kotlin source)
2026-03-11 01:47:14 app_v2/src/main/res/drawable/bg_move_dialog.xml bg_move_dialog.xml IV.3: deleted unused shape drawable (only referenced from deleted dialog_move_to.xml)
2026-03-11 01:58:06 app_v2/src/main/res/values/dimens.xml dimens.xml Hotfix: restored 14 deleted dimens (touch_zones_overlay_zone, player_command_panel_mode_topCommandPanel_) that were used in layout files but removed in earlier IV.3 pass
2026-03-11 01:58:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt SettingsViewModel Hotfix: removed importSzaResources() function (referenced deleted R.xml.sza_resources)
2026-03-11 01:58:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt GeneralSettingsFragment Hotfix: removed sza easter egg dialog (importSzaResources call) from etDefaultUser listener
2026-03-11 02:02:17 app_v2/src/main/res/xml/sza_resources.xml sza_resources.xml RESTORED from git: file was accidentally deleted; it is git-excluded via .gitignore (line 233) but must remain on filesystem
2026-03-11 02:02:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt SettingsViewModel RESTORED importSzaResources() function that was incorrectly removed
2026-03-11 02:02:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt GeneralSettingsFragment RESTORED sza easter egg dialog in etDefaultUser listener
2026-03-11 02:37:42 dev/IMPROVEMENT_PROPOSAL.md IMPROVEMENT_PROPOSAL Appended new improvement sections: V (Security), VIII (Accessibility), IX (Architecture debt), X (New use cases) - 20+ new proposals
2026-03-11 15:28:13 app_v2/…/AppDatabase.kt AppDatabase Made migrations 12-13,14-15,15-16,17-18 idempotent with hasColumn guards
2026-03-11 15:28:25 app_v2/…/core/di/DatabaseModule.kt DatabaseModule Added fallbackToDestructiveMigration + try-catch with auto-reset and toast on migration failure
2026-03-11 15:30:42 gradle.properties gradle.properties Reduced Gradle daemon heap from 16g to 4g added MaxMetaspaceSize 512m cap
2026-03-11 16:14:22 VideoPlayerManager.kt VideoPlayerManager Added content URI fallback via MediaStore query in playLocalVideoInternal when File.canRead fails
2026-03-11 16:14:22 MediaFileAdapter.kt MediaFileAdapter Added content URI fallback for Glide thumbnail loading at 4 locations (list+grid, image+video)
2026-03-11 16:14:22 BrowseViewModel.kt BrowseViewModel Added content URI fallback for inline MediaPlayer audio when setDataSource fails with IOException
2026-03-11 16:14:22 ImageLoadingManager.kt ImageLoadingManager Added content URI fallback for Glide image display and preload when File.canRead fails
2026-03-11 17:24:08 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt FastMediaSorterApp Enhanced logAppStartupInfo with full device diagnostics
2026-03-11 20:04:33 gradle.properties JvmArgs Removed hardcoded tmpdir for SerhiiZhyhunenko user; use system default
2026-03-11 20:04:33 local.properties sdk.dir Updated SDK path from SerhiiZhyhunenko to serzh user
2026-03-11 20:20:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt MainActivity Add startup local storage permission check: dialog on first ask, toast if previously denied
2026-03-11 20:20:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity Mark storage_permission_requested=true in app_prefs when permission launcher fires
2026-03-11 20:20:25 app_v2/src/main/res/values/strings.xml strings Add storage_permission_denied_toast string
2026-03-11 21:48:07 app_v2/src/main/java/com/sza/fastmediasorter/core/util/PermissionHelper.kt PermissionHelper Fixed requested storage permissions logic for API <= 29
2026-03-11 21:48:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt MainActivity Fixed storage permission requests for complete access
2026-03-11 21:48:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity Added missing Context import
2026-03-11 21:48:07 app_v2/src/main/res/values/integers.xml integers Added default integers to fix lint MissingDefaultResource error
2026-03-11 22:41:15 gradle.properties org.gradle.jvmargs Added -Djava.io.tmpdir=C:/Windows/Temp to override missing R:\temp RAM-disk set via _JAVA_OPTIONS
2026-03-11 23:24:22 app_v2/src/main/res/values/dimens.xml dimens.xml Added browse_navigation_button_spacing for new scroll buttons
2026-03-11 23:24:25 app_v2/src/main/res/values/strings.xml strings.xml Added scroll_page_up and scroll_page_down strings
2026-03-11 23:35:04 app_v2/src/main/res/layout/activity_browse.xml fabPageUp,fabPageDown Added Page Up/Down buttons to browse scroll controls (spec SPEC_BROWSE_NAVIGATION_CONTROLS)
2026-03-11 23:35:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt updateScrollButtonsVisibility,fabPageUp,fabPageDown Position-aware scroll button visibility + page up/down click handlers
2026-03-11 23:47:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt updateScrollButtonsVisibility Fix stale layout positions: post{} after instant scroll + update in SCROLL_STATE_IDLE
2026-03-11 23:49:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt updateScrollButtonsVisibility,updateDisplayMode Position-based scroll button logic: allVisible hides all buttons; post{} on submitList+displayMode switch
2026-03-11 23:59:50 gradle.properties org.gradle.jvmargs Added -Dorg.sqlite.tmpdir=C:/Windows/Temp to fix KAPT SQLite ExceptionInInitializerError when R:\temp RAM-disk is absent
2026-03-12 00:07:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt SettingsViewModel.importSzaResources Added parsing of rememberTheFileList attribute from sza_resources.xml; passed as rememberFileList to MediaResource constructor
2026-03-12 00:11:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt BrowseActivity Implement SPEC_BROWSE_RESTORE_POSITION: save lastViewedFile on onPause, file click, inline play, and selection events
2026-03-12 00:17:45 app_v2/build.gradle.kts kapt Remove redundant kapt arguments{} block - Hilt Gradle plugin already injects dagger.* args; global block caused ‘not recognized’ warnings from Glide/Room processors
2026-03-12 00:21:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt BrowseActivity.onResume Fix scroll restoration: add direct restore in onResume for return-from-player case when list is unchanged (submitList doesnt fire)
2026-03-12 11:53:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/DialogUtils.kt DialogUtils Added Share button to scrollable dialog via Intent.ACTION_SEND
2026-03-12 12:15:25 app_v2/src/.../ToastThrottler.kt ToastThrottler New utility: throttles duplicate toasts with 15s cooldown
2026-03-12 12:15:31 app_v2/src/.../BrowseActivity.kt BrowseActivity.showError Network error toasts now throttled via ToastThrottler
2026-03-12 12:15:37 app_v2/src/.../PlayerActivity.kt PlayerActivity.showError Network error toasts now throttled via ToastThrottler
2026-03-12 12:15:43 app_v2/src/.../FastMediaSorterApp.kt setupSmbAutoReset SMB auto-reset toast now throttled via ToastThrottler
2026-03-12 12:29:47 app_v2/src/.../ToastThrottler.kt ToastThrottler.showNetworkError Added debug-only showNetworkError: toast visible in debug, suppressed in release, always logged via Timber
2026-03-12 14:26:17 app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt AudioMetadataLoader New viewport-based audio metadata loader for network files
2026-03-12 14:26:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt MediaFileAdapter Added loadVisibleAudioMetadata and resolveAudioMetadata for viewport metadata enrichment
2026-03-12 14:26:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt BrowseActivity Injected AudioMetadataLoader and hooked into scroll-idle listener for audio metadata loading
2026-03-12 15:55:39 PLAN/SPEC_GOOGLE_DRIVE_BACKUP_RESTORE.md SPEC_GOOGLE_DRIVE_BACKUP_RESTORE Created specification for one-tap Google Drive backup/restore of settings + resource list with multi-account support
2026-03-12 15:55:49 dev/ -> PLAN/ Folder reorganization Moved 9 files (IMPROVEMENT_PROPOSAL, IMPROVEMENT_ROADMAP, PLAN_AUDIO_METADATA_ENRICHMENT_PROMPTS, 5 SPEC_* files, todo2) from dev/ to PLAN/. Updated cross-refs in PROJECT_OPERATIONS_INDEX, copilot-instructions, IMPROVEMENT_ROADMAP
2026-03-12 16:08:48 PLAN/ -> temp/Done/ PLAN cleanup Moved 2 fully-implemented specs to temp/Done/: SPEC_BROWSE_NAVIGATION_CONTROLS, SPEC_BROWSE_RESTORE_POSITION
2026-03-12 17:10:04 domain/usecase/BackupData.kt BackupPayload,BackupSettings,BackupResource Created Gson DTOs for Google Drive backup/restore
2026-03-12 17:10:04 domain/usecase/BackupMapper.kt BackupMapper Bidirectional conversion between domain models and backup DTOs
2026-03-12 17:10:04 domain/usecase/BackupToGoogleDriveUseCase.kt BackupToGoogleDriveUseCase Backup orchestrator: collect data, serialize, upload to Drive
2026-03-12 17:10:04 domain/usecase/RestoreFromGoogleDriveUseCase.kt RestoreFromGoogleDriveUseCase Restore orchestrator: download, parse, replace settings, merge resources
2026-03-12 17:10:04 ui/settings/BackupRestoreViewModel.kt BackupRestoreViewModel UI state management for backup/restore feature
2026-03-12 17:10:04 ui/settings/fragments/BackupRestoreFragment.kt BackupRestoreFragment Fragment with backup/restore buttons, sign-in, confirmation dialogs
2026-03-12 17:10:04 res/layout/fragment_settings_backup_restore.xml layout Layout with backup/restore cards and progress indicators
2026-03-12 17:10:04 ui/settings/SettingsPagerAdapter.kt SettingsPagerAdapter Added 5th tab for Backup and Restore
2026-03-12 17:10:04 ui/settings/SettingsActivity.kt SettingsActivity Added Backup tab label to TabLayoutMediator
2026-03-12 17:10:04 proguard-rules.pro ProGuard Keep rules for Backup DTOs preventing R8 stripping
2026-03-12 17:10:04 res/values/strings.xml strings Added 18 strings for Google Drive backup/restore UI
2026-03-12 17:24:01 domain/usecase/BackupToGoogleDriveUseCase.kt BackupToGoogleDriveUseCase Changed backup filename to timestamped backup_YYMMDD-HHmm.json, removed old-file deletion
2026-03-12 17:24:01 domain/usecase/RestoreFromGoogleDriveUseCase.kt RestoreFromGoogleDriveUseCase Restore now finds latest backup_*.json by modifiedDate
2026-03-12 17:26:19 domain/usecase/BackupToGoogleDriveUseCase.kt BackupToGoogleDriveUseCase Upload localized README.md (en/ru/uk) when creating FastMediaSorter folder on Google Drive
2026-03-12 18:25:08 app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt AudioMetadataLoader Switched from native MediaMetadataRetriever to Media3 MetadataRetriever (no SIGSEGV on truncated files); added kill-switch (15 consecutive failures auto-disables feature); wrapped all protocol reads in try-catch
2026-03-12 18:30:08 app_v2/src/.../SettingsRepositoryImpl.kt audioSizeMax Changed default audioSizeMax fallback from 100MB to 1GB to match AppSettings default - FLAC files were filtered out
2026-03-12 19:09:03 gradle.properties org.gradle.jvmargs Fixed java.io.tmpdir path from build/TEMP to temp/gradle-tmp to survive gradle clean
2026-03-13 01:10:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt MediaFileAdapter Fix: propagate network audio metadata to MediaFilesCacheManager in loadVisibleAudioMetadata callback so Player picks up artist/album/title
2026-03-13 01:24:52 app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt AudioMetadataLoader Add warmMemoryCacheForResource(): bulk-loads audio metadata from DB into memoryCache before first RecyclerView bind
2026-03-13 01:24:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt BrowseViewModel Inject AudioMetadataLoader; call warmMemoryCacheForResource() before updateState in both DB-cache and in-memory-cache load paths so adapter renders artist/album immediately on revisit
2026-03-13 01:58:22 app_v2/src/main/res/raw/anim_audio_bg_4.mp4, anim_audio_bg_5.mp4 anim_audio_bg_4/5 Add two new ping-pong background videos (rand04/05): 1280x720 H.264 24fps 16sec no-audio CRF28, ping-pong via ffmpeg reverse+concat
2026-03-13 01:58:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController Expand random background pool from 3 to 5 (added anim_audio_bg_4, anim_audio_bg_5)
2026-03-13 02:10:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Fix stale coverArtJob: cancel previous coroutine on track change to prevent visualization/cover from wrong track bleeding into new track
2026-03-13 02:16:02 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt SmbDataSource Treat DiskShare-already-closed as recoverable: retry via reopenConnection() instead of throwing Non-recoverable
2026-03-13 02:16:57 app_v2/src/main/res/raw/anim_audio_bg_*.mp4 anim_audio_bg_1..5 Downscale all 5 background videos 1280x720->1024x576 @ CRF28: total 9.8MB->6.2MB (-37%)
2026-03-13 02:21:50 app_v2/src/main/res/drawable/ic_vinyl_record.xml ic_vinyl_record Improve vinyl rotation visibility: rim stroke #585858, groove contrast up, glare arc 6%->22% + second glare for asymmetry
2026-03-13 02:31:14 app_v2/src/main/res/drawable/destinations.xml destinations Converted destinations.png (34KB) to VectorDrawable XML (~3KB); deleted PNG; cleaned lint-baseline
2026-03-13 11:53:13 app_v2/src/main/res/drawable/destinations.png drawable Removed duplicate destinations.png (replaced by destinations.xml vector drawable) to fix build failure
2026-03-13 12:11:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt PlayerViewModel Auto-activate slideshow for AUDIO_LIBRARY and VIDEO_LIBRARY resource profiles on Player launch
2026-03-13 12:36:03 app_v2/.../SlideshowController.kt SlideshowController Added isMediaLibraryMode flag to suppress timer/countdown for AUDIO_LIBRARY/VIDEO_LIBRARY
2026-03-13 12:36:03 app_v2/.../PlayerNavigationManager.kt PlayerNavigationManager Added syncMediaLibraryMode() to set controller flag before slideshow operations
2026-03-13 12:36:03 app_v2/.../PlayerDialogAndUiStateManager.kt PlayerDialogAndUiStateManager Added resource profile guard to hide countdown for media library resources
2026-03-13 12:59:34 app_v2/.../SlideshowController.kt SlideshowController Task 3: Added shouldSuppressTimer() callback for mixed resource playToEnd mode; fixed countdown cleanup in restartTimer()
2026-03-13 12:59:34 app_v2/.../PlayerNavigationManager.kt PlayerNavigationManager Task 3: Implemented shouldSuppressTimer() - suppress timer for audio/video files when playToEnd enabled
2026-03-13 12:59:34 app_v2/.../PlayerDialogAndUiStateManager.kt PlayerDialogAndUiStateManager Task 3: Added countdown display guard for mixed resources with playToEnd + audio/video
2026-03-13 13:10:45 app_v2/.../domain/usecase/SearchQueryUtils.kt SearchQueryUtils Task 4: Created shared utility for filename query preparation and placeholder filtering (DRY extraction)
2026-03-13 13:10:45 app_v2/.../domain/usecase/SearchAudioCoverUseCase.kt SearchAudioCoverUseCase Task 4: Delegated prepareSearchQuery() to shared SearchQueryUtils
2026-03-13 13:10:45 app_v2/.../domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase Task 4: Added resolvedTitle/resolvedArtist params to execute(); priority-based buildSearchQueries with SearchQueryUtils
2026-03-13 13:10:45 app_v2/.../ui/player/helpers/LyricsManager.kt LyricsManager Task 4: Added resolvedTitle/resolvedArtist params to searchAndShowLyrics()
2026-03-13 13:10:45 app_v2/.../ui/player/PlayerActivity.kt PlayerActivity Task 4: Cache AudioMetadata from cover search; pass to lyrics search for priority queries
2026-03-13 13:26:09 app_v2/.../helpers/PlayerKeyboardHandler.kt PlayerKeyboardHandler Task 5: Added MEDIA_NEXT, MEDIA_PREVIOUS, MEDIA_PLAY, MEDIA_PAUSE, MEDIA_STOP, HEADSETHOOK key handling with debounce and long-press filtering
2026-03-13 13:26:09 app_v2/.../AudioPlaybackService.kt AudioSessionCallback Task 5: Enhanced MediaSession callback with explicit command availability and connection logging
2026-03-13 14:04:52 app_v2/.../helpers/PlayerKeyboardHandler.kt PlayerKeyboardHandler Task 5 ext: Added SPACE, DPAD_CENTER (play/pause), FAST_FORWARD/REWIND/brackets (seek +-10s), SKIP_FORWARD/BACKWARD, CHANNEL_UP/DOWN (file nav), BOOKMARK (favorite), Ctrl+Z (undo)
2026-03-13 14:04:52 app_v2/.../PlayerActivity.kt PlayerActivity Task 5 ext: Added onSeekForward/onSeekBackward callback implementations delegating to VideoPlayerManager
2026-03-13 15:20:26 app_v2/.../ui/player/model/TouchZoneHintType.kt TouchZoneHintType Task 6: New enum for 3 context-aware touch zone hint types (9-zone, 3-zone, media)
2026-03-13 15:20:26 app_v2/.../domain/repository/SettingsRepository.kt SettingsRepository Task 6: Added isTouchZoneHintShown/setTouchZoneHintShown/resetAllTouchZoneHints methods
2026-03-13 15:20:26 app_v2/.../data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Task 6: Added 3 DataStore keys (hint_shown_9zone/3zone/media_bottom) + per-type hint tracking
2026-03-13 15:20:26 app_v2/.../ui/player/helpers/PlayerUiStateCoordinator.kt PlayerUiStateCoordinator Task 6: Per-type hint logic with determineTouchZoneHintType(); removed showCommandPanel restriction
2026-03-13 15:20:26 app_v2/.../ui/player/PlayerActivity.kt PlayerActivity Task 6: Replaced hasShownFirstRunHint with Set; context-aware showTouchZoneHintOverlay()
2026-03-13 15:20:26 app_v2/.../ui/settings/SettingsViewModel.kt SettingsViewModel Task 6: resetPlayerFirstRun/resetPlaybackSection now also reset per-type touch zone hints
2026-03-13 15:20:26 app_v2/.../res/layout/player_first_run_hint_overlay_content.xml Layout Task 6: Added tvFirstRunHintText ID for dynamic text; added include to portrait layout
2026-03-13 15:20:26 app_v2/.../res/values/strings.xml Strings Task 6: Added hint_touch_zone_3zone and hint_touch_zone_media strings (EN/RU/UK)
2026-03-13 15:29:53 app_v2/.../layout/custom_player_controls.xml PlayerControls Task 7: Reordered buttons to PrevFile-Rewind-Play-Forward-NextFile; added group separator margins
2026-03-13 15:29:53 app_v2/.../values/dimens.xml dimens Task 7: Added player_group_separator_margin (20dp) for visual separation between button groups
2026-03-13 16:54:06 app_v2/src/.../multiple_files + PLAN/task_08 enableBackgroundAudio rename Renamed enableBackgroundAudio to enablePersistentAudioPlayback across 6 Kotlin files (11 replacements) and spec file (30+ references). DataStore key KEY_ENABLE_BACKGROUND_AUDIO preserved for compat.
2026-03-13 16:55:02 app_v2/.../SettingsRepositoryImpl.kt KEY_ENABLE_BACKGROUND_AUDIO Added clarifying comment to DataStore key explaining what it is, what it is NOT, and why the string key is preserved
2026-03-13 20:01:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LyricsManager.kt LyricsManager Fixed false ERROR log: ‘Lyrics not found’ is now logged at DEBUG level instead of Timber.e with stacktrace
2026-03-13 20:05:40 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase Fix Beatles-type bug: add ‘Artist - Title’ format queries in buildSearchQueries(); fix searchAZLyrics() and searchLyricsOvhApi() to split on ‘ - ‘ before space (multi-word artist support)
2026-03-13 20:31:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase AZLyrics: early return for non-ASCII (Cyrillic) queries instead of empty URL; add HTTP response code logging for AZLyrics/Lyrics.ovh/Musixmatch
2026-03-13 20:33:24 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase Add Megalyrics.ru as 5th lyrics source for Russian-language tracks (search + scrape flow)
2026-03-13 20:36:26 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase Script-aware source routing: Cyrillic tracks go to Megalyrics first (AZLyrics skipped); Latin tracks keep AZLyrics-first order; added hasCyrillic() helper
2026-03-13 20:44:53 app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt AudioMetadataLoader Fix kill-switch: remove recordFailure() from no-metadata path; change >= to == to prevent duplicate logging
2026-03-13 20:53:13 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase Fix Cyrillic routing: add hasCyrillic(filename) and dirArtist to isCyrillic check; extract artist from parent dir (YYYY-Artist-Album pattern); pass dirArtist to buildSearchQueries as fallback
2026-03-13 20:57:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager.showAudioFileInfo Add parseArtistFromPath() fallback: show artist inferred from parent dir name (YYYY-Artist-Album) when ID3 tags absent
2026-03-13 21:05:06 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchAudioCoverUseCase.kt SearchAudioCoverUseCase Add Deezer + MusicBrainz/CAA as cover art fallbacks after iTunes; inject OkHttpClient; enrich query with artist from parent dir
2026-03-13 21:05:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager.loadAudioCoverArt Pass file.path to searchAudioCoverUseCase for dir-artist enrichment
2026-03-13 21:22:42 app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt AudioMetadataLoader.fixCp1251Encoding Add CP1251->ISO-8859-1 auto-detect and re-decode for ID3 TextInformationFrame values (fix garbled Cyrillic in Browse list)
2026-03-13 21:34:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt BrowseActivity Fix scroll position restore on resource reopen: replaced isFirstResume (cleared before async files arrive) with pendingScrollRestore flag that survives until submitList fires with actual items
2026-03-13 21:55:58 app_v2/build.gradle.kts build.gradle.kts Added ENABLE_PERSISTENT_AUDIO_PLAYBACK buildConfigField for all 4 flavors (standard/legacy=true, lite/photos=false)
2026-03-13 21:55:58 app_v2/src/main/res/layout/fragment_settings_playback.xml fragment_settings_playback.xml Added Background Audio section with switch toggle and notification permission button
2026-03-13 21:55:58 app_v2/.../PlaybackSettingsFragment.kt PlaybackSettingsFragment Wired background audio switch: permission request, lite guard, battery hint dialog, expandable section
2026-03-13 21:55:58 app_v2/.../SettingsViewModel.kt SettingsViewModel Fixed resetPlaybackSection: added enablePersistentAudioPlayback reset
2026-03-13 21:55:58 app_v2/src/main/res/values/strings.xml strings.xml Added 5 new string keys for background audio feature
2026-03-13 21:55:58 app_v2/src/main/res/values-ru/strings.xml strings-ru.xml Translated background_audio_setting_summary + added 6 new RU strings
2026-03-13 21:55:58 app_v2/src/main/res/values-uk/strings.xml strings-uk.xml Translated background_audio_setting_summary + added 6 new UK strings
2026-03-13 21:55:58 app_v2/.../PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Rewritten playAudioViaService with filtered playlist, local-only guard, stop-on-non-audio switch
2026-03-13 21:55:58 app_v2/.../AudioPlaybackService.kt AudioPlaybackService Added REPEAT_MODE_ALL for playlist, REPEAT_MODE_OFF for single file
2026-03-13 21:55:58 app_v2/.../AudioServiceController.kt AudioServiceController Added REPEAT_MODE_ALL/OFF in playAudio and playAudioPlaylist
2026-03-13 21:55:58 app_v2/.../PlayerActivity.kt PlayerActivity Added reconnectToServiceIfActive in onResume + stop service on back-pressed
2026-03-13 22:08:07 app_v2/src/.../ui/welcome/WelcomeActivity.kt WelcomeActivity Fix: removed premature storage_permission_requested flag, fixed getRequiredMediaPermissions to include WRITE for API 23-32, unified completeWelcomeFlow to always use goToMainActivity
2026-03-13 22:14:54 app_v2/src/main/res/layout/fragment_settings_audio.xml fragment_settings_audio Moved background audio toggle (switch + notification button) here from Playback section
2026-03-13 22:14:54 app_v2/src/main/res/layout/fragment_settings_playback.xml fragment_settings_playback Removed Background Audio MaterialCardView section (moved to Audio settings)
2026-03-13 22:14:54 app_v2/src/.../AudioSettingsFragment.kt AudioSettingsFragment Added background audio setup, permission launcher, battery hint (moved from PlaybackSettingsFragment)
2026-03-13 22:14:54 app_v2/src/.../PlaybackSettingsFragment.kt PlaybackSettingsFragment Removed all background audio code (moved to AudioSettingsFragment)
2026-03-13 22:28:32 app_v2/src/main/res/layout/fragment_settings_general.xml fragment_settings_general Added Google Drive backup/restore UI block into Files & Data section
2026-03-13 22:28:32 app_v2/src/main/res/layout-land/fragment_settings_general.xml fragment_settings_general (land) Added Google Drive backup/restore UI block into Files & Data section (landscape)
2026-03-13 22:28:32 app_v2/src/.../GeneralSettingsFragment.kt GeneralSettingsFragment Added backup/restore logic: signInLauncher, BackupRestoreViewModel, state handling, UI wiring
2026-03-13 22:28:32 app_v2/src/.../SettingsPagerAdapter.kt SettingsPagerAdapter Removed BackupRestoreFragment tab, reduced page count from 5 to 4
2026-03-13 22:28:32 app_v2/src/.../SettingsActivity.kt SettingsActivity Removed Backup tab from TabLayoutMediator
2026-03-13 22:28:32 app_v2/src/.../SettingsSearchIndex.kt SettingsSearchIndex Added backup/restore search entries pointing to General tab
2026-03-13 22:39:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase.searchAZLyrics Strip parenthetical suffixes from title before AZLyrics slug generation (fix ‘Breathe (In the Air)’ -> breathe.html)
2026-03-13 22:45:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Pre-cache network audio (SMB/SFTP/FTP) via UnifiedFileCache for background playback; extracted playLocalAudioViaService; added downloadSmbFull/downloadSftpFull/downloadFtpFull helpers
2026-03-13 22:45:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Pass unifiedCache, smbClient, sftpClient, ftpClient, credentialsRepository to PlayerMediaLoaderManager constructor
2026-03-13 22:50:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt AudioPlaybackService Guard setWakeMode with runtime WAKE_LOCK permission check to prevent SecurityException on API 28 AOSP emulator
2026-03-13 22:54:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt GeneralSettingsFragment Add @AndroidEntryPoint annotation to fix BackupRestoreViewModel Hilt injection crash
2026-03-13 22:59:47 app_v2/src/.../RestoreFromGoogleDriveUseCase.kt RestoreFromGoogleDriveUseCase Fixed downloadAndParseBackup: replaced broken searchFiles (double-wrapped query) with findFolderByName + listFiles
2026-03-13 22:59:51 app_v2/src/.../BackupToGoogleDriveUseCase.kt BackupToGoogleDriveUseCase Fixed findOrCreateFolder: replaced broken searchFiles with findFolderByName, removed unused MIME_FOLDER
2026-03-13 23:05:33 app_v2/src/main/res/layout/fragment_settings_general.xml BackupInfoTooltip Replaced inline backup info text with ? ImageButton tooltip (portrait+landscape+backup_restore layouts)
2026-03-13 23:05:38 app_v2/src/main/java/.../GeneralSettingsFragment.kt setupBackupButtons Added iconHelpBackupInfo click handler showing TooltipDialog for backup info
2026-03-13 23:09:42 app_v2/src/.../BackupData.kt BackupPayload Made settings/resources/String fields nullable for cross-version Gson deseriaization safety
2026-03-13 23:09:42 app_v2/src/.../BackupMapper.kt BackupMapper Added gsonSafe/gsonSafeList helpers; hardened toAppSettings and toMediaResource against runtime nulls from older backups
2026-03-13 23:09:43 app_v2/src/.../RestoreFromGoogleDriveUseCase.kt RestoreFromGoogleDriveUseCase Lenient Gson; null-safe payload access; version warning; per-resource try-catch isolation
2026-03-13 23:21:08 app_v2/src/.../BackupRestoreViewModel.kt BackupRestoreViewModel/BackupRestoreUiState Added NeedsSignIn state; emit it after pendingAction set (was: silent auth fail produced no state change, sign-in never launched)
2026-03-13 23:28:45 docs/FEATURES.md FEATURES Created canonical user-facing feature inventory (EN)
2026-03-13 23:28:45 docs/FEATURES_RU.md FEATURES_RU Created Russian translation of feature inventory
2026-03-13 23:28:45 docs/FEATURES_UK.md FEATURES_UK Created Ukrainian translation of feature inventory
2026-03-13 23:28:52 docs/FEATURES_RU.md FEATURES_RU Created Russian translation of feature inventory
2026-03-13 23:28:52 docs/FEATURES_UK.md FEATURES_UK Created Ukrainian translation of feature inventory
2026-03-13 23:35:03 docs/DOCS_MAP.md DOCS_MAP Added FEATURES.md row to User Guides table; added FEATURES_RU.md and FEATURES_UK.md to multi-language section
2026-03-13 23:35:03 README.md README Added link to docs/FEATURES.md in English Documentation section
2026-03-13 23:35:03 docs/README.md README Added link to docs/FEATURES.md in English Documentation section
2026-03-13 23:35:03 docs/README_RU.md README_RU Added link to docs/FEATURES_RU.md in Russian Documentation section
2026-03-13 23:35:03 docs/README_UK.md README_UK Added link to docs/FEATURES_UK.md in Ukrainian Documentation section
2026-03-13 23:35:03 index.html index.html Added FEATURES.html card in Documentation section
2026-03-13 23:35:03 index-ru.html index-ru.html Added FEATURES_RU.html card in Dokumentaciya section
2026-03-13 23:35:03 index-uk.html index-uk.html Added FEATURES_UK.html card in Dokumentaciya section
2026-03-13 23:36:16 app_v2/src/.../GeneralSettingsFragment.kt,BackupRestoreFragment.kt signInLauncher Fixed crash ApiException 12502: wrap GoogleSignIn.getSignedInAccountFromIntent in try-catch, pass null to handleSignInResult on cancel/failure
2026-03-13 23:36:34 AGENTS.md AGENTS Added mandatory FEATURES docs update rule (section 7) for all AI agents
2026-03-13 23:36:34 GEMINI.md GEMINI Added mandatory FEATURES docs update rule (section 8) for all AI agents
2026-03-13 23:36:34 dev/AGENT_WORKFLOW.md AGENT_WORKFLOW Added FEATURES UPDATE note to Implementation Phase 8.4
2026-03-13 23:36:34 .github/copilot-instructions.md copilot-instructions Added FEATURES_DOCS_UPDATE constraint and step 4 note for feature inventory update
2026-03-13 23:40:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt signInLauncher Improved sign-in crash fix: fallback to getLastSignedInAccount on ApiException/Exception instead of null - handles successful auth with garbled result delivery (12502 race on emulator)
2026-03-13 23:52:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt servicePlaybackListener / onAudioServiceReady Fix: visualization not showing for service-based SMB audio. Added onAudioServiceReady callback (STATE_READY hook) to servicePlaybackListener; PlayerActivity wires it to loadAudioCoverArt(). Also added audioEmptyStateController.onIsPlayingChanged() to onAudioServicePlaybackChanged callback.
2026-03-14 00:00:30 app_v2/src/main/java/com/sza/fastmediasorter/data/network/helpers/SmbDirectoryScanner.kt SmbDirectoryScanner Removed per-directory Timber.d in scanRecursiveWithLimit - caused log flood (1 log per directory, 1000s of directories)
2026-03-14 00:07:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt DestinationButtonsManager Side-by-side panels: both collapsed -> HORIZONTAL 50/50; any expanded -> VERTICAL MATCH_PARENT
2026-03-14 00:08:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchQueryUtils.kt SearchQueryUtils.cleanForSearch Add cleanForSearch(): strip all bracket types ((),[],{},<>) and special chars from metadata strings before search queries
2026-03-14 00:08:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase.buildSearchQueries+searchAZLyrics Apply cleanForSearch to resolvedArtist/resolvedTitle; extend AZLyrics slug to strip all bracket types
2026-03-14 00:08:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchAudioCoverUseCase.kt SearchAudioCoverUseCase.invoke Apply cleanForSearch to dirArtist before enrichedQuery construction
2026-03-14 00:10:06 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchQueryUtils.kt SearchQueryUtils.prepareSearchQuery Add [^\p{L}\p{N}\s] final filter to prepareSearchQuery: keep only Unicode letters/digits/spaces (matches cleanForSearch logic)
2026-03-14 00:15:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Added onAudioServicePlaybackEnded callback param; handle STATE_ENDED in servicePlaybackListener
2026-03-14 00:15:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity.initializeManagers Wire onAudioServicePlaybackEnded: advance slideshow on audio STATE_ENDED from AudioPlaybackService
2026-03-14 00:17:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Back-press shows confirmation dialog when background audio is playing: Stop or Continue
2026-03-14 00:18:00 app_v2/src/main/res/values/strings.xml strings Added background_audio_exit_title/message/stop/continue strings (EN/RU/UK)
2026-03-14 00:26:55 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase.searchAZLyrics Strip leading articles (the/a/an) from AZLyrics artist slug: ‘The Beatles’ -> ‘beatles’
2026-03-14 00:26:55 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase.searchGeniusApi+fetchGeniusLyrics Add User-Agent header and response logging to Genius API search and lyrics page fetching
2026-03-14 00:41:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase.searchMusixmatch Rewrote Musixmatch: direct URL /lyrics/Artist/Title instead of blocked /search/; parse lyrics from JSON body field; full browser User-Agent
2026-03-14 00:41:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase sources routing Removed dead sources Lyrics.ovh (502) and Megalyrics (WordPress blog now); 3 active sources: AZLyrics, Musixmatch, Genius
2026-03-14 00:49:49 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt SearchLyricsUseCase.searchLyricsOnline Fixed second routing point: replaced dead searchLyricsOvhApi reference with AZLyrics/Musixmatch/Genius order
2026-03-14 01:17:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Fixed back-press dialog: replaced isPlaying check with isConnected+enablePersistent+AUDIO check; added debug log; added onCancelListener to keep callback active
2026-03-14 01:20:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Added handleMediaLoadErrorAndSkip(): auto-skip to next file on any media load error with Toast notification
2026-03-14 01:20:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt VideoPlayerManager Replaced error dialogs/toasts with auto-skip on playback error (format, source, network errors); MediaPlayer fallback preserved
2026-03-14 01:20:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Added onPlayerError listener for AudioPlaybackService errors + onAudioServicePlaybackError callback
2026-03-14 01:20:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt PlayerPlaybackCallbackImpl Wired onPlaybackError to auto-skip via PlayerActivity.handleMediaLoadErrorAndSkip()
2026-03-14 01:20:33 app_v2/src/main/res/values/strings.xml strings Added file_skipped_playback_error string resource for auto-skip Toast
2026-03-14 01:29:20 app_v2/src/.../PlayerViewModel.kt PlayerViewModel Added getNextAudioFile() for audio prefetch
2026-03-14 01:29:20 app_v2/src/.../PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Added prefetchNextAudio() and cancelAudioPrefetch() - downloads next network audio to UnifiedFileCache on STATE_READY
2026-03-14 01:29:20 app_v2/src/.../PlayerActivity.kt PlayerActivity Wired audio prefetch: onAudioServiceReady triggers prefetchNextAudio, added internal bridge method
2026-03-14 01:29:20 app_v2/src/.../PlayerPlaybackCallbackImpl.kt PlayerPlaybackCallbackImpl Added prefetchNextAudio call in onPlaybackReady for inline ExoPlayer audio path
2026-03-14 01:41:41 app_v2/src/.../helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Added preCacheCloudAudio() for Google Drive/OneDrive/Dropbox audio prefetch
2026-03-14 01:41:46 app_v2/src/.../PlayerActivity.kt PlayerActivity Wired cloudClients map (googledrive/onedrive/dropbox) to PlayerMediaLoaderManager constructor
2026-03-14 01:56:39 app_v2/src/.../PlayerActivity.kt PlayerActivity Override finish() with background audio exit dialog; removed audio dialog from handleOnBackPressed
2026-03-14 01:56:47 app_v2/src/.../PlayerControlsSetupManager.kt PlayerControlsSetupManager Toolbar back button now routes through onBackPressedDispatcher instead of direct finish()
2026-03-14 02:14:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt,app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt loadAudioCoverArt / AppStartupInitializer Fix: show empty-state animation immediately as placeholder for both network and local audio files (before artwork search). Previously caused 3-4s black screen. Also added audioEmptyStateMode to startup settings log.
2026-03-14 02:25:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager.playAudioViaService Enable cloud audio (Google Drive/OneDrive/Dropbox) background playback via AudioPlaybackService. Cloud files now pre-cached to UnifiedFileCache via preCacheCloudAudio before passing local URI to service. Removed stub that fell back to inline player.
2026-03-14 02:30:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt loadAudioCoverArt Fix: add cloud:// to non-local file detection. Cloud files now routed through ExoPlayer artwork branch instead of crashing in MediaMetadataRetriever.setDataSource(cloud://…)
2026-03-14 11:26:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt BackupRestoreViewModel Inject ApplicationContext; handleSignInResult accepts apiErrorCode param; error messages use string resources instead of hardcoded English
2026-03-14 11:26:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt signInLauncher Log resultCode; capture apiErrorCode from ApiException; pass to handleSignInResult for diagnostic error message
2026-03-14 11:26:56 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 backup/restore strings Add google_sign_in_failed/auth_failed to EN; add full backup&restore translations to RU and UK
2026-03-14 11:29:52 app_v2/src/.../helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Fixed audio prefetch: pass fileSize param to preCacheNetworkAudio, track prefetch path, await running prefetch instead of re-downloading, conditional cancel in playVideo
2026-03-14 11:29:57 app_v2/src/.../GeneralSettingsFragment.kt GeneralSettingsFragment Fixed nullable safe calls for btnNotificationPermission binding
2026-03-14 11:31:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController Added detailed debug logging for MP4 visualization: surface state, resource info, MediaPlayer error code decoding, onInfo listener
2026-03-14 12:54:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt AudioPlaybackService Replaced immediate stopSelf on STATE_ENDED with 10s auto-stop delay; wrapped ExoPlayer in ForwardingPlayer for single-file seekToNext/Previous; added COMMAND_SEEK_TO_NEXT/PREVIOUS to available commands for notification buttons
2026-03-14 12:54:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Extended onAudioServicePlaybackEnded to advance next file when enablePersistentAudioPlayback is ON (not only slideshow)
2026-03-14 12:54:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Added onMediaItemTransition listener to servicePlaybackListener for playlist auto-advance prefetch
2026-03-14 13:50:05 app_v2/src/.../data/repository/MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl.resolveType Fixed APE audio leak: validate MEDIA_TYPE_AUDIO against AUDIO_EXTENSIONS, unsupported codecs now return BINARY_OTHER
2026-03-14 13:50:10 app_v2/src/.../util/ThumbnailColorMapper.kt ThumbnailColorMapper Removed APE color mapping (unsupported format)
2026-03-14 13:50:14 app_v2/src/.../ui/player/VideoPlayerManager.kt VideoPlayerManager.startPlaybackHealthCheck Removed dead .ape check from playback health monitor
2026-03-14 13:55:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager Fix: audio metadata fallback now shows ‘DirName / filename’ instead of just directory name when ID3 tags are absent; parseArtistFromPath no longer returns generic dir names like Music/Downloads
2026-03-14 13:56:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt GeneralSettingsFragment Fixed Privacy Policy URLs: added missing /docs/ path segment to all three language variants (EN/RU/UK) to resolve 404 errors
2026-03-14 14:24:38 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt, app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt, app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt audioEmptyStateMode Changed default audio empty state visualization from VISUALIZATION (MP4) to CANVAS_WAVES (wave+particle animation)
2026-03-14 14:27:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt ImageLoadingManager.loadAudioCoverArt Fix: skip cover art reload on seek - add coverArtDisplayedForPath guard; ExoPlayer STATE_READY after seek no longer flashes visualization then re-downloads cover
2026-03-14 15:36:40 PLAN/SPEC_VIRTUAL_AGGREGATE_FOLDERS.md SPEC Applied answers A-G: scan-at-creation, limit 10000, no DATE_MODIFIED ordering, limited edit dialog, displayMode & favorites edge cases, updated tests/manual checks/plan
2026-03-14 15:55:23 PLAN/IMPL_VIRTUAL_AGGREGATE_FOLDERS.md Implementation Plan Created 12-phase implementation plan for virtual aggregate folders feature with sub-plans, QA use cases, and risk map
2026-03-14 17:24:51 app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt LocalMediaScanner Added virtual path constants
2026-03-14 17:24:56 app_v2/src/main/java/com/sza/fastmediasorter/util/VirtualPathUtils.kt VirtualPathUtils New helper for virtual path detection
2026-03-14 17:38:42 app_v2/build.gradle.kts build.gradle.kts Restored ENABLE_PERSISTENT_AUDIO_PLAYBACK buildConfigField for all 4 flavors
2026-03-14 17:38:48 app_v2/src/.../PlayerActivity.kt PlayerActivity Added prefetchNextAudio() and handleMediaLoadErrorAndSkip() bridge methods
2026-03-14 17:39:09 app_v2/src/main/res/values*/strings.xml strings Added error_loading_media string in EN/RU/UK
2026-03-14 19:01:06 app_v2/src/.../MediaStoreRepository.kt MediaStoreRepository Added getAllFilesByTypes() interface method for virtual aggregate folders
2026-03-14 19:01:14 app_v2/src/.../MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl Implemented getAllFilesByTypes() with MIME filtering for docs, extended buildSelectionForAllowedTypes for TEXT/PDF/EPUB
2026-03-14 19:01:20 app_v2/src/.../LocalMediaScanner.kt LocalMediaScanner Added scanAllByTypes(), docTypesFromSettings(), branches for all_audio/video/docs in scanFolder/getFileCount, updated isWritable to use VirtualPathUtils
2026-03-14 19:01:26 app_v2/src/.../ScanLocalFoldersUseCase.kt ScanLocalFoldersUseCase Added 3 virtual aggregate resources (All Music, All Videos, All Documents) to scan results with flavor guards
2026-03-14 19:01:33 app_v2/src/main/res/values*/strings.xml strings Added virtual_all_music, virtual_all_video, virtual_all_docs strings in EN/RU/UK
2026-03-14 19:02:10 app_v2/src/main/res/layout/dialog_folder_selection.xml dialog_folder_selection Phase 6: Added Special Virtual Folders section with 4 MaterialButton entries (Recent, All Music, All Videos, All Documents)
2026-03-14 19:02:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt AddResourceViewModel Phase 6: Added addVirtualResource() method with duplicate check and buildVirtualResource() helper for virtual path to resource conversion
2026-03-14 19:02:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt AddResourceActivity Phase 6: Wired virtual folder buttons in showFolderSelectionDialog() with click listeners and flavor visibility guards (SUPPORT_AUDIO, SUPPORT_DOCUMENTS)
2026-03-14 19:02:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt ResourceEditorFragment Phase 7: Hide tilPath, tilServerPath, cardScanning, cardDestination, and media types section for virtual resources via VirtualPathUtils.isVirtualPath() check
2026-03-14 19:02:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceFormViewModel.kt ResourceFormViewModel Phase 7: Added guard in onFieldChanged() to prevent PATH and MEDIA_TYPES modifications for virtual resources
2026-03-14 19:02:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceScanCoordinator.kt ResourceScanCoordinator Phase 8: Added hasAggregateVirtualResources() method to detect virtual aggregate folders for mass rescan warning dialog
2026-03-14 19:02:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt MainViewModel Phase 8: Integrated hasAggregateVirtualResources() check in mass rescan flow to show confirmation dialog
2026-03-14 19:41:45 app_v2/src/.../ProvisionDefaultResourcesUseCase.kt ProvisionDefaultResourcesUseCase New use case: creates 4 virtual resources on first launch (Phase 5)
2026-03-14 19:41:51 app_v2/src/.../MainViewModel.kt MainViewModel Hook ProvisionDefaultResourcesUseCase into init, add rescan warning with ConfirmRescanWithVirtualResources event (Phase 5+8)
2026-03-14 19:41:58 app_v2/src/.../AddResourceViewModel.kt AddResourceViewModel Added addVirtualResource() and buildVirtualResource() for manual virtual folder add (Phase 6)
2026-03-14 19:41:58 app_v2/src/main/res/layout/dialog_folder_selection.xml dialog_folder_selection Added Special Virtual Folders section with 4 buttons (Phase 6)
2026-03-14 19:41:58 app_v2/src/.../AddResourceActivity.kt AddResourceActivity Wired virtual folder buttons in showFolderSelectionDialog() (Phase 6)
2026-03-14 19:42:06 app_v2/src/.../ResourceEditorFragment.kt ResourceEditorFragment Hide path, media types, scanning, destination for virtual resources (Phase 7)
2026-03-14 19:42:06 app_v2/src/.../ResourceFormViewModel.kt ResourceFormViewModel Guard against path/mediaTypes changes for virtual resources (Phase 7)
2026-03-14 19:42:06 app_v2/src/.../ResourceScanCoordinator.kt ResourceScanCoordinator Added hasAggregateVirtualResources() for mass rescan warning (Phase 8)
2026-03-14 19:42:06 app_v2/src/.../MainActivity.kt MainActivity Handle ConfirmRescanWithVirtualResources event with AlertDialog (Phase 8)
2026-03-14 19:42:15 app_v2/src/main/res/drawable/ic_virtual_*.xml icons Added 4 virtual resource vector drawables (recent, music, video, docs) (Phase 9)
2026-03-14 19:42:15 app_v2/src/.../ResourceAdapter.kt ResourceAdapter Virtual resource icon assignment by path in Grid and List ViewHolders (Phase 9)
2026-03-14 19:42:15 app_v2/src/main/res/values*/strings.xml strings Added special_virtual_folders, virtual_resource_already_added, rescan warning strings EN/RU/UK (Phase 10)
2026-03-14 19:42:15 app_v2/src/.../IncrementalScanStrategy.kt IncrementalScanStrategy Explicit virtual path guard in currentFolderMtime() (Phase 11)
2026-03-14 19:54:10 app_v2/src/test/.../VirtualPathUtilsTest.kt VirtualPathUtilsTest Phase 12: Added 11 unit tests for VirtualPathUtils (isVirtualPath, isAggregateVirtualPath, ALL_VIRTUAL_PATHS)
2026-03-14 19:54:15 app_v2/src/test/.../LocalMediaScannerTest.kt LocalMediaScannerTest Phase 12: Extended with 8 virtual aggregate path tests (scanFolder, getFileCount, isWritable)
2026-03-14 19:54:21 app_v2/src/test/.../ProvisionDefaultResourcesUseCaseTest.kt ProvisionDefaultResourcesUseCaseTest Phase 12: Added 10 tests for provisioning (skip non-empty, 4 resources, displayOrder, paths, profiles, feature toggles, doc types)
2026-03-14 19:54:26 app_v2/src/test/.../IncrementalScanStrategyTest.kt IncrementalScanStrategyTest Phase 12: Added 5 tests for virtual path guard in currentFolderMtime (all 4 virtual paths + non-existent)
2026-03-14 20:02:25 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/MediaStoreRepository.kt MediaStoreRepository Added countAllFilesByTypes() for lightweight virtual aggregate counting
2026-03-14 20:02:25 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl Implemented countAllFilesByTypes() and reused selection/filter rules for virtual aggregate counts
2026-03-14 20:02:25 app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt LocalMediaScanner Replaced virtual aggregate file-count full scans with countAllByTypes() fast path
2026-03-14 20:02:25 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ScanLocalFoldersUseCase.kt ScanLocalFoldersUseCase Switched supported media type discovery to settings.getGloballyEnabledMediaTypes() to include EPUB
2026-03-14 20:02:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceScanCoordinator.kt ResourceScanCoordinator Switched resource scan supported type set to settings.getGloballyEnabledMediaTypes() to include EPUB
2026-03-14 20:02:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt AddResourceViewModel Added existing virtual path lookup helper and success toast for added virtual resources
2026-03-14 20:02:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt AddResourceActivity Disabled already-added virtual resource buttons in manual add dialog
2026-03-14 20:02:25 app_v2/src/test/java/com/sza/fastmediasorter/data/local/LocalMediaScannerTest.kt LocalMediaScannerTest Updated virtual aggregate count test to cover countAllFilesByTypes() fast path
2026-03-14 20:02:25 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ScanLocalFoldersUseCaseTest.kt ScanLocalFoldersUseCaseTest Added regression test covering EPUB propagation into virtual docs and folder discovery
2026-03-14 20:05:06 app_v2/src/main/res/values/strings.xml strings Added missing virtual folder dialog and feedback strings in EN
2026-03-14 20:05:06 app_v2/src/main/res/values-ru/strings.xml strings Added missing virtual folder dialog and feedback strings in RU
2026-03-14 20:05:06 app_v2/src/main/res/values-uk/strings.xml strings Added missing virtual folder dialog and feedback strings in UK
2026-03-14 20:07:56 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl Removed shadowed cursor warning in countAllFilesByTypes()
2026-03-14 20:09:38 app_v2/src/.../MainViewModel.kt MainViewModel Safety fix: await provisionDefaultResources before observeResourcesFromDatabase to eliminate race condition
2026-03-14 20:09:43 app_v2/src/.../LocalMediaScanner.kt LocalMediaScanner Safety fix: added explicit virtual path guard in listDirectoryContents() and clarified scanFolderPaged() comment
2026-03-14 20:19:16 app_v2/src/.../ResourceScanCoordinator.kt ResourceScanCoordinator Skip testConnection/isWritable for virtual paths in scanSingleResource(); new processVirtualResource() fast path
2026-03-14 20:19:16 app_v2/src/.../MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl LOWER() wrapper for PDF/EPUB MIME_TYPE in buildSelectionForAllowedTypes() for case-insensitive matching
2026-03-14 23:13:15 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SyncMediaStoreUseCase.kt SyncMediaStoreUseCase Fix: guard against virtual:// paths (e.g. all_audio) that have type=LOCAL but no real filesystem path
2026-03-14 23:36:31 scripts/utils/setup_test_media.ps1 setup_test_media Fix MediaStore scan: replace broken shell heredoc (PS expands $f as empty var) with PowerShell per-file adb broadcast loop
2026-03-14 23:37:02 app_v2/src/main/java/.../data/local/LocalMediaScanner.kt LocalMediaScanner Added VIRTUAL_PATH_ALL_IMAGES constant + scanFolder/getFileCount handling for all_images virtual path
2026-03-14 23:37:17 app_v2/src/main/java/.../util/VirtualPathUtils.kt VirtualPathUtils Added VIRTUAL_PATH_ALL_IMAGES to isAggregateVirtualPath() and ALL_VIRTUAL_PATHS (now 5 paths)
2026-03-14 23:37:22 app_v2/src/main/java/.../domain/usecase/ProvisionDefaultResourcesUseCase.kt ProvisionDefaultResourcesUseCase Added All Images (IMAGE+GIF) virtual resource provisioning with SUPPORT_IMAGES guard
2026-03-14 23:37:27 app_v2/src/main/java/.../domain/usecase/ScanLocalFoldersUseCase.kt ScanLocalFoldersUseCase Added All Images virtual resource to scan results (PHOTO_STORAGE profile, IMAGE+GIF types)
2026-03-14 23:37:32 app_v2/src/main/java/.../ui/addresource/AddResourceViewModel.kt AddResourceViewModel Added VIRTUAL_PATH_ALL_IMAGES case to buildVirtualResource()
2026-03-14 23:37:37 app_v2/src/main/java/.../ui/addresource/AddResourceActivity.kt AddResourceActivity Added btnVirtualAllImages button mapping + SUPPORT_IMAGES flavor guard
2026-03-14 23:37:42 app_v2/src/main/res/layout/dialog_folder_selection.xml dialog_folder_selection Added btnVirtualAllImages button, reorganized rows: Videos+Images / Documents
2026-03-14 23:37:47 app_v2/src/main/res/values*/strings.xml strings.xml (EN/RU/UK) Added virtual_all_images string, updated rescan_all_virtual_warning_message to include All Images
2026-03-14 23:37:53 app_v2/src/test/.../VirtualPathUtilsTest.kt + LocalMediaScannerTest.kt Unit Tests Added tests for VIRTUAL_PATH_ALL_IMAGES: isVirtualPath, isAggregate, ALL_VIRTUAL_PATHS(5), scanFolder, getFileCount, isWritable
2026-03-14 23:58:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity.setupBackPressHandler Added dialog on back-press when audio service is playing: Stop or Keep Playing
2026-03-14 23:58:13 app_v2/src/main/res/values/strings.xml strings Added background_audio_exit_title/message/stop/continue strings (EN/RU/UK)
2026-03-15 00:02:32 gradle.properties gradle.properties Increased MaxMetaspaceSize to 1024m to resolve JVM Metaspace exhaustion build errors
2026-03-15 00:02:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt VideoPlayerManager Removed unused variables isSourceError and details
2026-03-15 00:02:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt BackupRestoreViewModel Added deprecation suppression for GoogleSignInAccount and fixed redundant elvis operator
2026-03-15 00:04:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Extract exitPlayerWithAudioCheck(): route all 3 user-exit paths (onExitPlayer/onBackClicked/onBack) through audio dialog instead of finish() directly
2026-03-15 00:25:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt PlayerDialogAndUiStateManager Fixed VIDEO_LIBRARY slideshow incorrectly hiding command panel: added isVideoFile exception to shouldHideForSlideshow (same as audio)
2026-03-15 00:25:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Fixed VIDEO_LIBRARY slideshow incorrectly hiding system bars: video/audio slideshow no longer forces immersive fullscreen
2026-03-15 00:50:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceOrderManager.kt ResourceOrderManager Fix moveResourceUp/Down: use position index as authoritative displayOrder instead of domain model field - fixes no-op swap when all resources have displayOrder=0
2026-03-15 01:39:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Removed outdated background_audio_local_only_warning toast - network audio is supported via pre-caching, toast was shown only on fallback and was misleading
2026-03-15 01:53:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Fixed audio visualization empty state by supplying missing onAudioServiceReady and onAudioServicePlaybackChanged callbacks to PlayerMediaLoaderManager
2026-03-15 21:16:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/DynamicBackgroundProcessor.kt DynamicBackgroundProcessor Replaced 2D blur with 1D edge color smoothing algorithm
2026-03-15 21:21:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/DynamicBackgroundProcessor.kt DynamicBackgroundProcessor Updated 1D edge color smoothing multiplier to 0.0006f and removed Int cast before multiplication
2026-03-15 23:58:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt ProvisionDefaultResourcesUseCase Set isWritable=true for virtual folders
2026-03-15 23:58:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ScanLocalFoldersUseCase.kt ScanLocalFoldersUseCase Set isWritable=true for virtual folders
2026-03-16 00:00:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt ResourceEditorFragment Hide connection settings card for virtual folders
2026-03-16 00:37:35 PLAN/back_to_last_audio.md back_to_last_audio Added missing edge cases to plan (TTL, UI loader, permissions, playlist rebuild, state clear logic)
2026-03-16 00:39:30 PLAN/back_to_last_audio_spec.md back_to_last_audio_spec Refined implementation steps to match updated main plan (TTL, UI, permissions, playlist rebuild) and added developer directives.
2026-03-16 00:47:36 app_v2/src/.../domain/model/ResumeState.kt ResumeState Step 1: Created ResumeState model, ScreenType enum, ResumeStateRepository interface+impl (SharedPreferences), 3 UseCases (Save/Get/Clear), Hilt binding in RepositoryModule
2026-03-16 00:54:32 app_v2/src/.../ui/player/PlayerViewModel.kt PlayerViewModel,BrowseViewModel,PlayerActivity,BrowseActivity Step 2: Integrated ClearResumeStateUseCase - clear on explicit exit (doFinish, handleOnBackPressed, btnBack) and resource switch (BrowseViewModel.init)
2026-03-16 01:04:30 docs/FEATURES.md FEATURES Added Resume Next Time feature to Russian, Ukrainian and English docs
2026-03-16 01:04:45 docs/FEATURES_RU.md FEATURES_RU Added Resume Next Time feature to Russian, Ukrainian and English docs
2026-03-16 01:04:56 docs/FEATURES_UK.md FEATURES_UK Added Resume Next Time feature to Russian, Ukrainian and English docs
2026-03-16 01:05:50 app_v2/src/.../PlayerViewModel.kt, VideoPlayerManager.kt, PlayerActivity.kt, BrowseViewModel.kt Resume State Save Step 3: Integrated SaveResumeStateUseCase - periodic save via VideoPlayerManager timer (5s), onPause, inline play/pause/track-change in BrowseViewModel
2026-03-16 01:08:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt PlayerViewModel Fixed missing saveResumeState() triggers on play/pause and track changes
2026-03-16 01:23:34 app_v2/src/.../ui/main/MainActivity.kt MainActivity Step 4: Resume routing logic - shouldAttemptResume, attemptResumePlayback, checkResourceAvailability, dismissResumeLoading
2026-03-16 01:23:40 app_v2/src/.../ui/player/PlayerViewModel.kt PlayerViewModel Step 4: Added resumeIsPlaying/resumeSlideshowEnabled SavedStateHandle, isPaused=true on resume with isPlaying=false
2026-03-16 01:23:46 app_v2/src/.../ui/player/PlayerActivity.kt PlayerActivity Step 4: Resume slideshow one-shot flag via viewModel.resumeSlideshowEnabled, createIntent extended with isPlaying/isSlideshowEnabled
2026-03-16 01:23:52 app_v2/src/.../ui/browse/BrowseViewModel.kt BrowseViewModel Step 4: Resume extras (initialFolderPath/initialFilePath/resumeIsPlaying) via SavedStateHandle + attemptResumeInlinePlayback()
2026-03-16 01:23:57 app_v2/src/.../ui/browse/BrowseActivity.kt BrowseActivity Step 4: createIntent extended with initialFolderPath/initialFilePath/isPlaying resume extras
2026-03-16 01:24:03 app_v2/src/.../ui/player/AudioPlaybackService.kt AudioPlaybackService Step 4: Added isRunning volatile flag in companion for resume logic gating
2026-03-16 01:24:09 app_v2/src/main/res/values/strings.xml strings Step 4: Added resume_unavailable and resume_checking string resources
2026-03-16 01:26:15 docs/FEATURES.md FEATURES.md Rewrote English docs to correctly expand user-facing features descriptions.
2026-03-16 01:27:45 docs/FEATURES.md FEATURES.md Added Table of Contents.
2026-03-16 01:30:09 docs/FEATURES.md FEATURES_TOC Added Table of Contents at the top of the English features list
2026-03-16 01:37:41 app_v2/src/main/res/values-ru/strings.xml strings-ru Added resume_unavailable and resume_checking translations
2026-03-16 01:37:45 app_v2/src/main/res/values-uk/strings.xml strings-uk Added resume_unavailable and resume_checking translations
2026-03-16 01:39:58 docs/FEATURES_RU.md FEATURES_RU_TRANSLATION Translated the full features list to Russian based on the English version
2026-03-16 01:40:09 docs/FEATURES_UK.md FEATURES_UK_TRANSLATION Translated the full features list to Ukrainian based on the English version
2026-03-16 01:48:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt VideoPlayerManager Fix: add onResume() lifecycle override to resume ExoPlayer after Activity returns from background
2026-03-16 01:48:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt PlayerViewModel Fix: preserve isPaused state on reloadFiles() instead of resetting to resumeIsPlaying==false
2026-03-16 18:14:30 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CleanupOrphanedTempFilesUseCase.kt CleanupOrphanedTempFilesUseCase Add VirtualPathUtils.isVirtualPath() guard to skip virtual:// paths (all_audio/all_video/all_images) - fixes IllegalArgumentException spam in logs on every virtual resource open
2026-03-16 18:14:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager Fix EACCES on local audio background playback: playLocalAudioViaService now uses MediaFile.contentUri (content:// MediaStore URI) via buildUriForMediaFile() instead of file:// path - fixes Permission denied on Android 10+ scoped storage
2026-03-16 18:23:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioBackgroundPhotosManager.kt AudioBackgroundPhotosManager LOW-3: downgrade Timber.w to Timber.d in advanceToNextPhoto() - race condition with async photo load, not an error
2026-03-16 18:23:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt PlayerViewModel.saveResumeState LOW-4: wrap saveResumeStateUseCase call in withContext(NonCancellable) to prevent resume position loss on fast navigation
2026-03-16 18:48:12 app_v2/src/main/AndroidManifest.xml AndroidManifest.xml Added Activity-Aliases for file open associations and MediaButtonReceiver
2026-03-16 18:49:37 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveFileIntentUseCase.kt ResolveFileIntentUseCase Created UseCase to resolve absolute path from external file Intents
2026-03-16 18:55:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt PlayerViewModel.saveResumeState LOW-4 (re-applied): wrap saveResumeStateUseCase in withContext(NonCancellable) - fix was lost after user edit
2026-03-16 19:59:44 PLAN/player_by_default_spec.md player_by_default_spec v2.0: rewrote spec based on questionnaire answers - replaced Temporary Resource with StandalonePlayerActivity, fixed extensions, added phases, updated UI/Settings/Flavors/MediaButton sections
2026-03-16 20:11:56 build-debug.PS1 Build Script Created wrapper in root to delegate to scripts/builders/build-debug.PS1
2026-03-16 20:15:52 PLAN/player_by_default_tactical_phase1.md player_by_default_tactical_phase1 Fixed Steps 1.1-1.5: 1.1 marked DONE, corrected VM pattern (no SavedStateHandle), ContentResolver for displayName, all 7 MediaType branches, ImageLoadingManager reference
2026-03-16 20:15:55 PLAN/player_by_default_roadmap.md player_by_default_roadmap Fixed Phase 5: added Playback Settings toggle, MediaSession, quiet restart notes
2026-03-16 20:18:20 PLAN/player_by_default_roadmap.md player_by_default_roadmap Rewritten Phases 1-4,6-7: removed AI-bloat, corrected Phase 1 scope (no file mgmt), added 4-alias detail to Phase 2, clear language throughout
2026-03-16 20:43:06 PLAN/player_by_default_tactical_phases_other.md player_by_default_tactical_phases_other Rewrote Phases 2-7: removed AI-bloat, corrected Phase 4 (no new Activity), full developer prompts with code for Phases 3,5,6,7
2026-03-18 15:43:44 app_v2/src/.../StandalonePlayerViewModel.kt StandalonePlayerViewModel Phase 1 Step 1.2: created VM with StandalonePlayerState, loadFromUri, type detection via MediaTypeUtils
2026-03-18 15:43:49 app_v2/src/.../StandalonePlayerActivity.kt StandalonePlayerActivity Phase 1 Steps 1.3-1.5: intent parsing, close button (ic_clear), back handler, playlist controls hidden, media type routing stubs
2026-03-18 15:47:00 app_v2/src/main/AndroidManifest.xml AndroidManifest Phase 2 Steps 2.1-2.3: 4 activity-aliases (Audio/Video/Image/Docs) with ACTION_VIEW intent filters, enabled=false by default
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt StandalonePlayerActivity Fix High: errorMessage state handler now shows toast + calls finish. Fix Medium: replace hardcoded “Unsupported file type” with R.string.unsupported_format_use_external_player
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt StandalonePlayerViewModel Fix Medium: inject @ApplicationContext, use R.string.error_opening_file for errorMessage, remove redundant ShowError event
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt AudioSettingsFragment Phase 3 Step 3.2: call setupDefaultPlayerButton() from setupViews()
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt VideoSettingsFragment Phase 3 Step 3.2: add setupDefaultPlayerButton() wiring btnSetDefaultVideoPlayer via DefaultPlayerHelper
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/ImagesSettingsFragment.kt ImagesSettingsFragment Phase 3 Step 3.2: add setupDefaultPlayerButton() wiring btnSetDefaultImageViewer via DefaultPlayerHelper
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/DocumentsSettingsFragment.kt DocumentsSettingsFragment Phase 3 Step 3.2: add setupDefaultPlayerButton() wiring btnSetDefaultDocsViewer via DefaultPlayerHelper
2026-03-19 00:00:00 app_v2/src/main/res/values/strings.xml strings Phase 4: add welcome_default_player_* strings (title, description, 4 type buttons, skip) in EN
2026-03-19 00:00:00 app_v2/src/main/res/values-ru/strings.xml strings-ru Phase 4: add welcome_default_player_* strings in RU
2026-03-19 00:00:00 app_v2/src/main/res/values-uk/strings.xml strings-uk Phase 4: add welcome_default_player_* strings in UK
2026-03-19 00:00:00 app_v2/src/main/res/values/colors.xml colors Phase 4: add welcome_page_7_background color (#E8EAF6)
2026-03-19 00:00:00 app_v2/src/main/res/layout/page_welcome_default_player.xml page_welcome_default_player Phase 4: new layout with title, description, 4 media-type buttons, skip link
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt WelcomePagerAdapter Phase 4: add VIEW_TYPE_DEFAULT_PLAYER, DefaultPlayerViewHolder, isDefaultPlayerPage/onSkipClick to WelcomePage
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel Phase 4: add isDefaultPlayerOnboardingShown() and markDefaultPlayerOnboardingShown()
2026-03-19 00:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity Phase 4: conditionally insert default player onboarding page before permissions page; add page_7 background
2026-03-19 12:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt DefaultPlayerHelper Add isAlreadyDefaultPlayer (RoleManager.ROLE_MEDIA_PLAYER API31+) and applyButtonState helper
2026-03-19 12:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt AudioSettingsFragment Fix missing DefaultPlayerHelper import; add applyButtonState call + onResume refresh
2026-03-19 12:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt VideoSettingsFragment Add R import; add applyButtonState call + onResume refresh for default player button
2026-03-19 12:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/ImagesSettingsFragment.kt ImagesSettingsFragment Add R import; add applyButtonState call + onResume refresh for default player button
2026-03-19 12:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/DocumentsSettingsFragment.kt DocumentsSettingsFragment Add R import; add applyButtonState call + onResume refresh for default player button
2026-03-19 12:00:00 app_v2/src/main/res/layout/fragment_settings_media_container.xml fragment_settings_media_container Add btnSetDefaultMediaPlayer button at top of layout
2026-03-19 12:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt MediaSettingsFragment Add DefaultPlayerHelper import; wire btnSetDefaultMediaPlayer with applyButtonState + onResume
2026-03-19 12:00:00 app_v2/src/main/res/values/strings.xml strings Add settings_set_default_media_player string
2026-03-19 12:00:00 app_v2/src/main/res/values-ru/strings.xml strings-ru Add settings_set_default_media_player string (RU)
2026-03-19 12:00:00 app_v2/src/main/res/values-uk/strings.xml strings-uk Add settings_set_default_media_player string (UK)
2026-03-19 13:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity Fix [High]: defer markDefaultPlayerOnboardingShown to onPageSelected when user reaches the page
2026-03-19 13:00:00 app_v2/src/main/res/layout/page_welcome_default_player.xml page_welcome_default_player Fix [Medium]: replace 4-type buttons with single btnSetDefault per roadmap spec
2026-03-19 13:00:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt DefaultPlayerViewHolder Fix [Medium]: update bind() to use single btnSetDefault instead of 4 type buttons
2026-03-19 13:00:00 app_v2/src/main/res/values/strings.xml strings Add welcome_default_player_btn_set_default string (EN)
2026-03-19 13:00:00 app_v2/src/main/res/values-ru/strings.xml strings-ru Add welcome_default_player_btn_set_default string (RU)
2026-03-19 13:00:00 app_v2/src/main/res/values-uk/strings.xml strings-uk Add welcome_default_player_btn_set_default string (UK)
2026-03-19 14:00:00 app_v2/build.gradle.kts build Fix build error: replace deprecated proguard-android.txt with proguard-android-optimize.txt (AGP 9 requirement)
2026-03-19 04:18:54 app_v2/build.gradle.kts dependencies(androidx.hilt) Bumped androidx.hilt hilt-work and hilt-compiler from 1.1.0 to 1.2.0 to fix Kotlin 2.2 metadata kapt failure
2026-03-19 04:19:58 app_v2/build.gradle.kts dependencies(androidx.room) Bumped Room runtime/ktx/compiler/testing from 2.6.1 to 2.7.0 to resolve Kotlin metadata 2.2 kapt incompatibility
2026-03-19 04:21:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt DefaultPlayerHelper Replaced unsupported ROLE_MEDIA_PLAYER logic with resolver-based default app probe and generalized button type to TextView
2026-03-19 10:38:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/MediaButtonRestartReceiver.kt MediaButtonRestartReceiver Phase 5: hardware media button cold-restart receiver for killed service
2026-03-19 10:38:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerManager.kt DefaultPlayerManager Phase 5+6: enables/disables VIEW aliases + MediaButtonReceiver + SEND aliases via PackageManager
2026-03-19 10:38:16 app_v2/src/main/AndroidManifest.xml AndroidManifest Phase 5+6: add MediaButtonRestartReceiver and 3 ACTION_SEND activity-aliases
2026-03-19 10:38:16 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt AppSettings Phase 5+6: add isPrimaryMediaPlayer + acceptSharedFiles fields
2026-03-19 10:38:16 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Phase 5+6: persist isPrimaryMediaPlayer + acceptSharedFiles to DataStore
2026-03-19 10:38:16 app_v2/src/main/res/layout/fragment_settings_playback.xml fragment_settings_playback Phase 5+6: add Default Player card with two toggle switches
2026-03-19 10:38:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt PlaybackSettingsFragment Phase 5+6+7: wire primary player and share receiver toggles with BuildConfig gate
2026-03-19 10:38:16 app_v2/build.gradle.kts build.gradle.kts Phase 7: add SUPPORTS_DEFAULT_PLAYER flag per flavor
2026-03-19 10:38:16 app_v2/src/lite/AndroidManifest.xml lite/AndroidManifest Phase 7: remove all default player components from lite flavor via manifest overlay
2026-03-19 10:46:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt AudioPlaybackService Phase 5 fix (High): add setMediaButtonReceiver(PendingIntent) to MediaSession.Builder
2026-03-19 10:46:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/MediaButtonRestartReceiver.kt MediaButtonRestartReceiver Phase 5 fix (Medium): handle NEXT/PREV keys; clarify quiet-restart notification semantics
2026-03-19 10:51:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity Phase 4 fix: global Skip redirects to default player card when not yet seen instead of bypassing it
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 alt 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%, storage25%, 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-rsin(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]