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]
2026-05-20 14:10:01 dev/development_audit.md development_audit Add consolidated development audit synthesized from Claude, Codex, Gemini, and GPT audits [branch: DEBUG-v004]
2026-05-20 14:46:26 PLAN/spec-catalog.jsonl + PLAN/S0268..S0277_*.md Spec Catalog Created 10 strategic specs (S0268..S0277) from dev/development_audit.md: Agent Continuity Layer, Post-Change Ritual Unification, Workspace Noise & Lookup Strategy, Truth Drift Detection, Repo Knowledge Search Expansion, Build Failure Diagnostics, Kotlin Hotspots Decomposition, Test Suite Triage, Configuration Cache Recovery, Per-Agent Memory Seeding. All Draft status, priority 70/55/50/40 by tier. [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0268_agent_continuity_layer.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0269_post_change_ritual_unification.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0270_workspace_noise_and_lookup_strategy.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0271_truth_drift_detection.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0272_repo_knowledge_search_expansion.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0273_build_failure_diagnostics.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0274_kotlin_hotspots_decomposition.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0275_test_suite_triage.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0276_configuration_cache_recovery.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 14:58:43 PLAN/S0277_per_agent_memory_seeding.md spec-update Refinement (GPT-5.4, focus: consistency/completeness) [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0268_agent_continuity_layer.md spec-update Refine strategic spec for continuity layer [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0269_post_change_ritual_unification.md spec-update Refine strategic spec for post-change ritual unification [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0270_workspace_noise_and_lookup_strategy.md spec-update Refine strategic spec for workspace noise and lookup strategy [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0271_truth_drift_detection.md spec-update Refine strategic spec for docs-vs-Gradle truth drift detection [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0272_repo_knowledge_search_expansion.md spec-update Refine strategic spec for repo knowledge search expansion [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0273_build_failure_diagnostics.md spec-update Refine strategic spec for build failure diagnostics [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0274_kotlin_hotspots_decomposition.md spec-update Refine strategic spec for Kotlin hotspot decomposition [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0275_test_suite_triage.md spec-update Refine strategic spec for unit test triage [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0276_configuration_cache_recovery.md spec-update Refine strategic spec for configuration cache recovery [branch: DEBUG-v004]
2026-05-20 15:03:40 PLAN/S0277_per_agent_memory_seeding.md spec-update Refine strategic spec for per-agent memory seeding [branch: DEBUG-v004]
2026-05-20 15:04:29 PLAN/S0269_post_change_ritual_unification.md spec-update Polish strategic spec wording and style details [branch: DEBUG-v004]
2026-05-20 15:04:30 PLAN/S0270_workspace_noise_and_lookup_strategy.md spec-update Polish strategic spec wording and style details [branch: DEBUG-v004]
2026-05-20 15:04:30 PLAN/S0276_configuration_cache_recovery.md spec-update Polish strategic spec wording and style details [branch: DEBUG-v004]
2026-05-20 15:04:30 PLAN/S0277_per_agent_memory_seeding.md spec-update Polish strategic spec wording and style details [branch: DEBUG-v004]
2026-05-20 15:10:59 .github/prompts/spec.prompt.md prompt-rule Add human approval gate for strategic Draft specs [branch: DEBUG-v004]
2026-05-20 15:10:59 .github/prompts/spec-tech.prompt.md prompt-rule Require completed owner approval gate before Draft -> Approved [branch: DEBUG-v004]
2026-05-20 15:10:59 .github/prompts/spec-all.prompt.md prompt-rule Remove strategic Draft auto-approve bypasses [branch: DEBUG-v004]
2026-05-20 15:17:16 scripts/spec_catalog/check-owner-inputs.ps1 + scripts/spec_catalog/update.ps1 + PLAN/S0268..S0277_*.md + .claude/agent-memory/android-rd-specialist/ Spec Catalog Gate Added §3.3 ‘Owner inputs (Approval gate)’ subsection to all strategic specs S0268..S0277 with 12 placeholder fields; new check-owner-inputs.ps1 validates that every field is filled before Draft -> Approved; update.ps1 now hard-blocks the transition if the checker exits non-zero; new feedback memory feedback_strategic_spec_owner_gate.md encodes the rule for android-rd-specialist agent. [branch: DEBUG-v004]
2026-05-20 15:35:51 PLAN/S0268_agent_continuity_layer.md spec-all F1: filled S3.3 Owner inputs from S3.2/S8/S10/S11; promoted Draft -> Approved [branch: DEBUG-v004]
2026-05-20 15:39:07 PLAN/S0270_workspace_noise_and_lookup_strategy.md spec-update Filled Owner inputs for Draft->Approved gate readiness [branch: DEBUG-v004]
2026-05-20 15:39:58 PLAN/S0270_workspace_noise_and_lookup_strategy.md spec-update Set Owner sign-off date for Approved promotion [branch: DEBUG-v004]
2026-05-20 15:42:57 scripts/post-change.ps1 post-change.ps1 Add change-type routing and fail-closed step dispatch [branch: DEBUG-v004]
2026-05-20 15:43:23 PLAN/S0270_workspace_noise_and_lookup_strategy/INDEX.md spec-tech Create tactical plan for S0270 [branch: DEBUG-v004]
2026-05-20 15:43:23 PLAN/S0270_workspace_noise_and_lookup_strategy/PHASE_01__workspace-excludes.md spec-tech Phase 01: workspace excludes [branch: DEBUG-v004]
2026-05-20 15:43:24 PLAN/S0270_workspace_noise_and_lookup_strategy/PHASE_02__research-order-rules.md spec-tech Phase 02: research order rules [branch: DEBUG-v004]
2026-05-20 15:43:24 PLAN/S0270_workspace_noise_and_lookup_strategy/PHASE_03__catalog-guidance.md spec-tech Phase 03: catalog guidance [branch: DEBUG-v004]
2026-05-20 15:43:24 PLAN/S0270_workspace_noise_and_lookup_strategy/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs catalog cleanup [branch: DEBUG-v004]
2026-05-20 15:43:24 PLAN/S0270_workspace_noise_and_lookup_strategy.md spec-tech Status -> Tactical and tactical plan link [branch: DEBUG-v004]
2026-05-20 15:44:20 PLAN/S0268_agent_continuity_layer.md spec-tech F2: Status Approved -> Tactical; link tactical plan [branch: DEBUG-v004]
2026-05-20 15:44:33 PLAN/S0268_agent_continuity_layer/INDEX.md spec-tech F2: tactical INDEX with 7 phases [branch: DEBUG-v004]
2026-05-20 15:44:33 PLAN/S0268_agent_continuity_layer/PHASE_01__foundations.md spec-tech F2: Phase 01 foundations README [branch: DEBUG-v004]
2026-05-20 15:44:33 PLAN/S0268_agent_continuity_layer/PHASE_02__bootstrap-packet.md spec-tech F2: Phase 02 bootstrap packet [branch: DEBUG-v004]
2026-05-20 15:44:33 PLAN/S0268_agent_continuity_layer/PHASE_03__resume-layer.md spec-tech F2: Phase 03 resume layer + spec-dev hook [branch: DEBUG-v004]
2026-05-20 15:44:33 PLAN/S0268_agent_continuity_layer/PHASE_04__request-logger.md spec-tech F2: Phase 04 request logger + gitignore [branch: DEBUG-v004]
2026-05-20 15:44:34 PLAN/S0268_agent_continuity_layer/PHASE_05__request-digest.md spec-tech F2: Phase 05 request digest [branch: DEBUG-v004]
2026-05-20 15:44:34 PLAN/S0268_agent_continuity_layer/PHASE_06__dirty-tree-guard.md spec-tech F2: Phase 06 dirty-tree guard [branch: DEBUG-v004]
2026-05-20 15:44:34 PLAN/S0268_agent_continuity_layer/PHASE_07__docs-catalog-cleanup.md spec-tech F2: Phase 07 docs + catalog cleanup [branch: DEBUG-v004]
2026-05-20 15:46:21 scripts/agent_continuity/README.md spec-dev Phase 01.1: foundational README with 5 pillars and 6 tactical decisions [branch: DEBUG-v004]
2026-05-20 15:47:47 CLAUDE.md Post-Change Steps Collapse post-change ritual to change-type dispatcher [branch: DEBUG-v004]
2026-05-20 15:48:00 .claude/commands/quick.md quick Update post-change helper hint to the ChangeType API [branch: DEBUG-v004]
2026-05-20 15:48:00 .claude/agents/android-rd-specialist.md android-rd-specialist Switch catalog instructions to catalog_sync and mark catalog outputs as gitignored [branch: DEBUG-v004]
2026-05-20 15:48:00 .github/agents/android-rd-specialist.agent.md android-rd-specialist.agent Switch catalog instructions to catalog_sync and mark catalog outputs as gitignored [branch: DEBUG-v004]
2026-05-20 15:48:00 .github/copilot-instructions.md catalog routing Switch catalog routing guidance from scan/render to catalog_sync [branch: DEBUG-v004]
2026-05-20 15:48:10 scripts/agent_continuity/start-packet.ps1 spec-dev Phase 02.1: bootstrap packet with 7 informational blocks [branch: DEBUG-v004]
2026-05-20 15:50:17 scripts/agent_continuity/session-snapshot.ps1 spec-dev Phase 03.1: session snapshot writer with 6-section schema [branch: DEBUG-v004]
2026-05-20 15:50:53 scripts/agent_continuity/session-resume.ps1 spec-dev Phase 03.2: session snapshot reader with NO-SNAPSHOT tolerance [branch: DEBUG-v004]
2026-05-20 15:52:16 .claude/commands/spec-dev.md spec-dev Phase 03.4: hook /spec-dev to write session-snapshot at every phase boundary [branch: DEBUG-v004]
2026-05-20 15:53:39 scripts/agent_continuity/request-log.ps1 spec-dev Phase 04.1: request logger appending 11-key JSONL to dev/agent-continuity/requests.jsonl [branch: DEBUG-v004]
2026-05-20 15:54:07 .gitignore spec-dev Phase 04.2: ignore dev/agent-continuity/ artifacts [branch: DEBUG-v004]
2026-05-20 15:56:14 scripts/agent_continuity/request-digest.ps1 spec-dev Phase 05.1: request digest with empty-log tolerance [branch: DEBUG-v004]
2026-05-20 15:56:56 .vscode/settings.json S0270 Add heavy-directory workspace excludes for search, watcher, and Java import surfaces [branch: DEBUG-v004]
2026-05-20 15:56:56 CLAUDE.md S0270 Split Research Order into semantic vs exact-match lookup modes and document default rg excludes [branch: DEBUG-v004]
2026-05-20 15:56:56 dev/CATALOG/README.md S0270 Document semantic query.ps1 usage, exact-match JSONL reads, and script-only catalogue writes [branch: DEBUG-v004]
2026-05-20 15:56:56 PLAN/S0270_workspace_noise_and_lookup_strategy.md spec-all Pipeline Verified: S0270 research resolutions, status, and inline audit [branch: DEBUG-v004]
2026-05-20 15:56:56 PLAN/S0270_workspace_noise_and_lookup_strategy/INDEX.md spec-all Resolve S0270 blockers and mark all tactical phases complete [branch: DEBUG-v004]
2026-05-20 15:56:56 PLAN/S0270_workspace_noise_and_lookup_strategy/PHASE_01__workspace-excludes.md spec-all Mark Phase 01 complete with verification evidence [branch: DEBUG-v004]
2026-05-20 15:56:56 PLAN/S0270_workspace_noise_and_lookup_strategy/PHASE_02__research-order-rules.md spec-all Mark Phase 02 complete with verification evidence [branch: DEBUG-v004]
2026-05-20 15:56:56 PLAN/S0270_workspace_noise_and_lookup_strategy/PHASE_03__catalog-guidance.md spec-all Mark Phase 03 complete with verification evidence [branch: DEBUG-v004]
2026-05-20 15:56:56 PLAN/S0270_workspace_noise_and_lookup_strategy/PHASE_04__docs-catalog-cleanup.md spec-all Mark Phase 04 complete with verification evidence [branch: DEBUG-v004]
2026-05-20 15:58:08 scripts/agent_continuity/dirty-tree-guard.ps1 spec-dev Phase 06.1: dirty-tree guard with 4-way classification, baseline high-risk list [branch: DEBUG-v004]
2026-05-20 16:00:21 dev/AGENT_WORKFLOW.md spec-dev Phase 07: document Agent Continuity Layer pillars [branch: DEBUG-v004]
2026-05-20 16:01:46 PLAN/S0268_agent_continuity_layer.md spec-dev All 7 phases done; status Tactical -> Implemented [branch: DEBUG-v004]
2026-05-20 16:01:46 PLAN/S0268_agent_continuity_layer/INDEX.md spec-dev INDEX closed: 7/7 phases done [branch: DEBUG-v004]
2026-05-20 16:03:35 PLAN/S0268_agent_continuity_layer.md spec-check Audit S0268 -> Verified; PASS/WARN/FAIL 43/0/0; status Implemented -> Verified [branch: DEBUG-v004]
2026-05-20 16:04:13 PLAN/S0269_post_change_ritual_unification.md spec-all Fill owner gate, resolve research items, and advance S0269 to Tactical [branch: DEBUG-v004]
2026-05-20 16:04:13 PLAN/S0269_post_change_ritual_unification/INDEX.md spec-tech Create tactical plan for S0269 [branch: DEBUG-v004]
2026-05-20 16:04:13 PLAN/S0269_post_change_ritual_unification/PHASE_01__dispatcher-core.md spec-tech Phase 01 tactical plan for S0269 [branch: DEBUG-v004]
2026-05-20 16:04:13 PLAN/S0269_post_change_ritual_unification/PHASE_02__canonical-rules.md spec-tech Phase 02 tactical plan for S0269 [branch: DEBUG-v004]
2026-05-20 16:04:13 PLAN/S0269_post_change_ritual_unification/PHASE_03__prompt-adoption.md spec-tech Phase 03 tactical plan for S0269 [branch: DEBUG-v004]
2026-05-20 16:04:13 PLAN/S0269_post_change_ritual_unification/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04 tactical plan for S0269 [branch: DEBUG-v004]
2026-05-20 16:12:35 .github/prompts/quick.prompt.md quick.prompt Route quick closure through post-change dispatcher [branch: DEBUG-v004]
2026-05-20 16:12:35 .claude/commands/quick.md quick Route quick closure through post-change dispatcher [branch: DEBUG-v004]
2026-05-20 16:12:35 .github/prompts/spec-dev.prompt.md spec-dev.prompt Route spec-dev per-file closure through post-change dispatcher [branch: DEBUG-v004]
2026-05-20 16:12:35 .claude/commands/spec-dev.md spec-dev Route spec-dev per-file closure through post-change dispatcher and drop raw scan/render fallback [branch: DEBUG-v004]
2026-05-20 16:12:35 PLAN/S0269_post_change_ritual_unification.md spec-all Advance S0269 to Implemented after tactical execution [branch: DEBUG-v004]
2026-05-20 16:12:35 PLAN/S0269_post_change_ritual_unification/INDEX.md spec-dev Mark all S0269 tactical phases done pending audit [branch: DEBUG-v004]
2026-05-20 16:12:35 PLAN/S0269_post_change_ritual_unification/PHASE_03__prompt-adoption.md spec-dev Mark Phase 03 done for S0269 [branch: DEBUG-v004]
2026-05-20 16:12:35 PLAN/S0269_post_change_ritual_unification/PHASE_04__docs-catalog-cleanup.md spec-dev Mark Phase 04 done for S0269 [branch: DEBUG-v004]
2026-05-20 16:14:23 PLAN/S0269_post_change_ritual_unification.md spec-check Audit S0269 -> Verified; PASS/WARN/FAIL 10/0/0 [branch: DEBUG-v004]
2026-05-20 16:14:23 PLAN/S0269_post_change_ritual_unification/INDEX.md spec-check Close S0269 completion gate after verified audit [branch: DEBUG-v004]
2026-05-20 16:29:09 PLAN/S0271_truth_drift_detection.md spec-all Strategic spec approved: S0271 Truth Drift Detection (docs vs Gradle) [branch: DEBUG-v004]
2026-05-20 16:31:19 PLAN/S0272_repo_knowledge_search_expansion.md S0272 Fill owner approval gate for infrastructure spec [branch: DEBUG-v004]
2026-05-20 16:34:39 PLAN/S0273_build_failure_diagnostics.md spec-tech Promote S0273 to Tactical and resolve approval gate [branch: DEBUG-v004]
2026-05-20 16:34:39 PLAN/S0273_build_failure_diagnostics/INDEX.md spec-tech Create tactical plan index for S0273 [branch: DEBUG-v004]
2026-05-20 16:34:39 PLAN/S0273_build_failure_diagnostics/PHASE_01__failure-parser.md spec-tech Create phase 01 tactical plan for S0273 [branch: DEBUG-v004]
2026-05-20 16:34:39 PLAN/S0273_build_failure_diagnostics/PHASE_02__launcher-integration.md spec-tech Create phase 02 tactical plan for S0273 [branch: DEBUG-v004]
2026-05-20 16:34:39 PLAN/S0273_build_failure_diagnostics/PHASE_03__docs-catalog-cleanup.md spec-tech Create phase 03 tactical plan for S0273 [branch: DEBUG-v004]
2026-05-20 16:36:49 scripts/builders/get-last-build-failure.ps1 S0273 Add last build failure extraction helper [branch: DEBUG-v004]
2026-05-20 16:36:49 scripts/builders/testdata/build-success.log S0273 Add success fixture log for build diagnostics [branch: DEBUG-v004]
2026-05-20 16:36:49 scripts/builders/testdata/build-failure-middle.log S0273 Add failure fixture log for build diagnostics [branch: DEBUG-v004]
2026-05-20 16:36:50 scripts/builders/testdata/build-truncated.log S0273 Add truncated fixture log for build diagnostics [branch: DEBUG-v004]
2026-05-20 16:36:50 PLAN/S0273_build_failure_diagnostics/PHASE_01__failure-parser.md spec-dev Update phase 01 progress for S0273 [branch: DEBUG-v004]
2026-05-20 16:36:50 PLAN/S0273_build_failure_diagnostics/INDEX.md spec-dev Update tactical index progress for S0273 [branch: DEBUG-v004]
2026-05-20 16:36:56 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md spec-tech Create tactical plan for S0272 [branch: DEBUG-v004]
2026-05-20 16:36:56 PLAN/S0272_repo_knowledge_search_expansion/PHASE_01__search-server.md spec-tech Phase 01: search-server [branch: DEBUG-v004]
2026-05-20 16:36:56 PLAN/S0272_repo_knowledge_search_expansion/PHASE_02__registration-smoke.md spec-tech Phase 02: registration-smoke [branch: DEBUG-v004]
2026-05-20 16:36:56 PLAN/S0272_repo_knowledge_search_expansion/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v004]
2026-05-20 16:36:56 PLAN/S0272_repo_knowledge_search_expansion.md spec-tech Status -> Tactical [branch: DEBUG-v004]
2026-05-20 16:38:52 PLAN/S0271_truth_drift_detection/INDEX.md spec-tech Tactical INDEX for S0271 [branch: DEBUG-v004]
2026-05-20 16:38:52 PLAN/S0271_truth_drift_detection/PHASE_01__decisions-and-contracts.md spec-tech Phase 01: decisions and contracts [branch: DEBUG-v004]
2026-05-20 16:38:52 PLAN/S0271_truth_drift_detection/PHASE_02__gradle-source-parser.md spec-tech Phase 02: gradle source parser [branch: DEBUG-v004]
2026-05-20 16:38:52 PLAN/S0271_truth_drift_detection/PHASE_03__pin-manifest-and-doc-parser.md spec-tech Phase 03: pin manifest and doc parser [branch: DEBUG-v004]
2026-05-20 16:38:52 PLAN/S0271_truth_drift_detection/PHASE_04__comparator-output-cli.md spec-tech Phase 04: comparator, output, cli [branch: DEBUG-v004]
2026-05-20 16:38:52 PLAN/S0271_truth_drift_detection/PHASE_05__test-harness-and-integration.md spec-tech Phase 05: test harness and integration [branch: DEBUG-v004]
2026-05-20 16:38:52 PLAN/S0271_truth_drift_detection/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs and catalog cleanup [branch: DEBUG-v004]
2026-05-20 16:38:52 PLAN/S0271_truth_drift_detection.md spec-tech Status -> Tactical, tactical plan linked [branch: DEBUG-v004]
2026-05-20 16:39:39 scripts/mcp/docs-search-mcp/repo-knowledge-server.js repo-knowledge server Create curated repo-knowledge MCP server skeleton [branch: DEBUG-v004]
2026-05-20 16:39:39 PLAN/S0272_repo_knowledge_search_expansion/PHASE_01__search-server.md S0272 phase 01 Mark Step 01.1 done [branch: DEBUG-v004]
2026-05-20 16:39:39 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Advance Phase 01 progress to 1/3 [branch: DEBUG-v004]
2026-05-20 16:41:03 scripts/mcp/docs-search-mcp/repo-knowledge-server.js repo-knowledge server Add markdown and JSONL search entry builders [branch: DEBUG-v004]
2026-05-20 16:41:03 PLAN/S0272_repo_knowledge_search_expansion/PHASE_01__search-server.md S0272 phase 01 Mark Step 01.2 done [branch: DEBUG-v004]
2026-05-20 16:41:03 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Advance Phase 01 progress to 2/3 [branch: DEBUG-v004]
2026-05-20 16:41:38 PLAN/S0271_truth_drift_detection/DECISIONS.md spec-dev S0271 Phase 01: locked decisions D-1..D-5 (manifest format, missing-pin semantics, range handling, multi-mention, output grammar) [branch: DEBUG-v004]
2026-05-20 16:41:42 a.ps1 S0273 Add bf launcher alias for build failure diagnostics [branch: DEBUG-v004]
2026-05-20 16:41:42 scripts/builders/build-debug.PS1 S0273 Persist fast debug build logs to temp for bf diagnostics [branch: DEBUG-v004]
2026-05-20 16:41:42 PLAN/S0273_build_failure_diagnostics/PHASE_02__launcher-integration.md spec-dev Update phase 02 progress for S0273 [branch: DEBUG-v004]
2026-05-20 16:41:42 PLAN/S0273_build_failure_diagnostics/INDEX.md spec-dev Update tactical index progress for S0273 after phase 02 [branch: DEBUG-v004]
2026-05-20 16:43:14 scripts/mcp/docs-search-mcp/repo-knowledge-server.js repo-knowledge server Register repo-knowledge MCP tools and spec catalog query [branch: DEBUG-v004]
2026-05-20 16:43:14 PLAN/S0272_repo_knowledge_search_expansion/PHASE_01__search-server.md S0272 phase 01 Mark Step 01.3 done [branch: DEBUG-v004]
2026-05-20 16:43:14 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Advance Phase 01 progress to 3/3 [branch: DEBUG-v004]
2026-05-20 16:43:54 scripts/doc-drift/GradleParser.ps1 spec-dev S0271 Phase 02: Get-GradlePins parser extracts Class-1/2/3 pins from gradle-wrapper.properties + root and app_v2 build.gradle.kts [branch: DEBUG-v004]
2026-05-20 16:45:56 PLAN/S0273_build_failure_diagnostics/INDEX.md spec-dev Mark tactical plan complete for S0273 [branch: DEBUG-v004]
2026-05-20 16:45:56 PLAN/S0273_build_failure_diagnostics.md spec-dev Mark S0273 implemented [branch: DEBUG-v004]
2026-05-20 16:45:56 PLAN/S0273_build_failure_diagnostics/PHASE_03__docs-catalog-cleanup.md spec-dev Update phase 03 progress for S0273 [branch: DEBUG-v004]
2026-05-20 16:45:56 CLAUDE.md S0273 Add canonical build failure diagnostics rule [branch: DEBUG-v004]
2026-05-20 16:45:56 .github/prompts/build.prompt.md S0273 Document bf diagnostics path in build prompt [branch: DEBUG-v004]
2026-05-20 16:45:57 scripts/builders/README.md S0273 Add build failure diagnostics note to builders README [branch: DEBUG-v004]
2026-05-20 16:47:58 PLAN/S0272_repo_knowledge_search_expansion/PHASE_01__search-server.md S0272 phase 01 Close Phase 01 after smoke and build pass [branch: DEBUG-v004]
2026-05-20 16:47:58 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Mark Phase 01 done and bump phase count [branch: DEBUG-v004]
2026-05-20 16:48:32 PLAN/S0273_build_failure_diagnostics.md spec-check Audit S0273 and mark verified [branch: DEBUG-v004]
2026-05-20 16:49:30 .vscode/mcp.json repo-knowledge MCP config Register repo-knowledge MCP server [branch: DEBUG-v004]
2026-05-20 16:49:31 PLAN/S0272_repo_knowledge_search_expansion/PHASE_02__registration-smoke.md S0272 phase 02 Mark Step 02.1 done [branch: DEBUG-v004]
2026-05-20 16:49:31 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Advance Phase 02 progress to 1/2 [branch: DEBUG-v004]
2026-05-20 16:51:22 scripts/doc-drift/pins.psd1 spec-dev S0271 Phase 03: declarative pin manifest (8 Class-1 + 8 Class-2 + 14 Class-3 entries, per-doc required-flag + matcher per D-1/D-2/D-4) [branch: DEBUG-v004]
2026-05-20 16:51:22 scripts/doc-drift/DocParser.ps1 spec-dev S0271 Phase 03: Get-DocMentions extracts pin mentions per manifest with exclude/policy enforcement [branch: DEBUG-v004]
2026-05-20 16:51:24 PLAN/S0272_repo_knowledge_search_expansion/PHASE_02__registration-smoke.md S0272 phase 02 Mark Step 02.2 done [branch: DEBUG-v004]
2026-05-20 16:51:24 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Advance Phase 02 progress to 2/2 [branch: DEBUG-v004]
2026-05-20 16:54:56 PLAN/S0272_repo_knowledge_search_expansion/PHASE_02__registration-smoke.md S0272 phase 02 Close Phase 02 after config smoke and build pass [branch: DEBUG-v004]
2026-05-20 16:54:56 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Mark Phase 02 done and bump phase count [branch: DEBUG-v004]
2026-05-20 16:56:26 scripts/mcp/docs-search-mcp/README.md repo-knowledge README Document repo-knowledge server and tool surface [branch: DEBUG-v004]
2026-05-20 16:56:26 PLAN/S0272_repo_knowledge_search_expansion/PHASE_03__docs-catalog-cleanup.md S0272 phase 03 Mark Step 03.1 done [branch: DEBUG-v004]
2026-05-20 16:56:26 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Advance Phase 03 progress to 1/2 [branch: DEBUG-v004]
2026-05-20 16:57:37 scripts/mcp/docs-search-mcp/README.md repo-knowledge README Document internal-only repo-knowledge source coverage [branch: DEBUG-v004]
2026-05-20 16:57:37 PLAN/S0272_repo_knowledge_search_expansion/PHASE_03__docs-catalog-cleanup.md S0272 phase 03 Mark Step 03.2 done [branch: DEBUG-v004]
2026-05-20 16:57:37 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Advance Phase 03 progress to 2/2 [branch: DEBUG-v004]
2026-05-20 17:00:13 PLAN/S0272_repo_knowledge_search_expansion.md S0272 Mark S0272 implemented [branch: DEBUG-v004]
2026-05-20 17:00:14 PLAN/S0272_repo_knowledge_search_expansion/PHASE_03__docs-catalog-cleanup.md S0272 phase 03 Close Phase 03 after cleanup and build pass [branch: DEBUG-v004]
2026-05-20 17:00:14 PLAN/S0272_repo_knowledge_search_expansion/INDEX.md S0272 index Mark tactical plan done and bump phase count to 3/3 [branch: DEBUG-v004]
2026-05-20 17:02:54 scripts/mcp/docs-search-mcp/repo-knowledge-server.js repo-knowledge server Allow curated directory roots during repo knowledge index build [branch: DEBUG-v004]
2026-05-20 17:04:16 PLAN/S0272_repo_knowledge_search_expansion.md spec-check Audit S0272 to Verified [branch: DEBUG-v004]
2026-05-20 17:10:00 scripts/spec_catalog/check-owner-inputs.ps1 + scripts/spec_catalog/update.ps1 + .claude/commands/spec.md + .claude/commands/spec-tech.md + .claude/commands/spec-all.md + .claude/agent-memory/android-rd-specialist/feedback_strategic_spec_owner_gate.md spec-catalog gate Make Draft->Approved Owner-Inputs gate relevance-driven: check-owner-inputs.ps1 now validates only bullets actually emitted into S3.3 (no hardcoded 12-field list); ‘Related tickets’ is the sole universal requirement. /spec gains Process step 5.1 (scope-tag detection from slug+S1+S2; emits matching S3.3 bullets only); /spec-tech and /spec-all Simple Path documented for the new gate behavior; feedback memory rewritten. Existing S0268..S0277 with full 12-bullet S3.3 still pass the gate (backward compatible). [branch: DEBUG-v004]
2026-05-20 17:25:08 PLAN/S0274_kotlin_hotspots_decomposition.md spec-all S0274 strategic spec auto-approved (Draft -> Approved); 12 owner-input fields filled from spec body [branch: DEBUG-v004]
2026-05-20 17:26:24 PLAN/S0276_configuration_cache_recovery.md spec-owner-inputs Replace non-applicable owner-input placeholders with concrete infrastructure values for S0276 [branch: DEBUG-v004]
2026-05-20 17:27:12 PLAN/S0275_test_suite_triage.md spec-all Fill S0275 owner approval gate [branch: DEBUG-v004]
2026-05-20 17:36:52 gradle.properties S0276 Enable configuration cache by default with explicit noLegal opt-out [branch: DEBUG-v004]
2026-05-20 17:36:53 app_v2/build.gradle.kts S0276 Remove local.properties Chaquopy fallback for configuration-cache-safe gating [branch: DEBUG-v004]
2026-05-20 17:36:53 a.ps1 S0276 Stop launcher from mutating local Chaquopy state [branch: DEBUG-v004]
2026-05-20 17:36:54 scripts/builders/build-debug.PS1 S0276 Add noLegal configuration-cache opt-out to generic debug builder [branch: DEBUG-v004]
2026-05-20 17:36:55 scripts/builders/build-and-push-all.ps1 S0276 Split batch build cache mode between non-noLegal and noLegal passes [branch: DEBUG-v004]
2026-05-20 17:36:56 scripts/utils/recover-kapt-stall.ps1 S0276 Add noLegal configuration-cache opt-out to KAPT stall recovery retry [branch: DEBUG-v004]
2026-05-20 17:36:57 PLAN/S0276_configuration_cache_recovery.md S0276 Sync strategic spec with configuration cache recovery findings [branch: DEBUG-v004]
2026-05-20 17:36:58 PLAN/S0276_configuration_cache_recovery/INDEX.md S0276 Create tactical index for configuration cache recovery [branch: DEBUG-v004]
2026-05-20 17:36:59 PLAN/S0274_kotlin_hotspots_decomposition/INDEX.md spec-tech S0274 tactical INDEX: Wave 01 scope + 15-file Wave Backlog [branch: DEBUG-v004]
2026-05-20 17:36:59 PLAN/S0274_kotlin_hotspots_decomposition/PHASE_01__foundation-and-methodology.md spec-tech S0274 Phase 01: baseline LOC snapshot + gradle.properties reminder capture [branch: DEBUG-v004]
2026-05-20 17:36:59 PLAN/S0276_configuration_cache_recovery/PHASE_01__chaquopy-gating.md S0276 Create phase 01 tactical plan for Chaquopy gating [branch: DEBUG-v004]
2026-05-20 17:36:59 PLAN/S0274_kotlin_hotspots_decomposition/PHASE_02__wave-01-videoplayermanager.md spec-tech S0274 Phase 02: Wave 01 VideoPlayerManager decomposition steps [branch: DEBUG-v004]
2026-05-20 17:37:00 PLAN/S0274_kotlin_hotspots_decomposition/PHASE_03__docs-catalog-cleanup.md spec-tech S0274 Phase 03: catalog+changelog cleanup, status to BlockNeedUserTest [branch: DEBUG-v004]
2026-05-20 17:37:00 PLAN/S0274_kotlin_hotspots_decomposition.md spec-tech S0274 strategic spec: Status Approved -> Tactical; Tactical plan link wired [branch: DEBUG-v004]
2026-05-20 17:37:00 PLAN/S0276_configuration_cache_recovery/PHASE_02__cc-rollout.md S0276 Create phase 02 tactical plan for configuration cache rollout [branch: DEBUG-v004]
2026-05-20 17:37:01 PLAN/S0276_configuration_cache_recovery/PHASE_03__docs-catalog-cleanup.md S0276 Create phase 03 tactical plan for docs cleanup and closure [branch: DEBUG-v004]
2026-05-20 17:38:09 PLAN/S0276_configuration_cache_recovery.md S0276 Mark S0276 strategic spec implemented with resolved research status [branch: DEBUG-v004]
2026-05-20 17:38:10 PLAN/S0276_configuration_cache_recovery/INDEX.md S0276 Mark S0276 tactical index complete [branch: DEBUG-v004]
2026-05-20 17:38:11 PLAN/S0276_configuration_cache_recovery/PHASE_01__chaquopy-gating.md S0276 Mark S0276 phase 01 complete [branch: DEBUG-v004]
2026-05-20 17:38:12 PLAN/S0276_configuration_cache_recovery/PHASE_02__cc-rollout.md S0276 Mark S0276 phase 02 complete [branch: DEBUG-v004]
2026-05-20 17:38:13 PLAN/S0276_configuration_cache_recovery/PHASE_03__docs-catalog-cleanup.md S0276 Mark S0276 phase 03 complete [branch: DEBUG-v004]
2026-05-20 17:38:55 PLAN/S0276_configuration_cache_recovery.md S0276 Record S0276 final audit and verify configuration cache rollout [branch: DEBUG-v004]
2026-05-20 17:38:56 PLAN/S0276_configuration_cache_recovery/INDEX.md S0276 Mark S0276 tactical completion gate verified [branch: DEBUG-v004]
2026-05-20 17:39:20 PLAN/S0275_test_suite_triage.md spec-tech Status -> Tactical; resolve S0275 research items [branch: DEBUG-v004]
2026-05-20 17:39:20 PLAN/S0275_test_suite_triage/INDEX.md spec-tech Create tactical plan for S0275 [branch: DEBUG-v004]
2026-05-20 17:39:20 PLAN/S0275_test_suite_triage/PHASE_01__baseline-unblock.md spec-tech Phase 01: baseline-unblock [branch: DEBUG-v004]
2026-05-20 17:39:20 PLAN/S0275_test_suite_triage/PHASE_02__failure-inventory.md spec-tech Phase 02: failure-inventory [branch: DEBUG-v004]
2026-05-20 17:39:20 PLAN/S0275_test_suite_triage/PHASE_03__quarantine-infra.md spec-tech Phase 03: quarantine-infra [branch: DEBUG-v004]
2026-05-20 17:39:20 PLAN/S0275_test_suite_triage/PHASE_04__default-suite-stabilization.md spec-tech Phase 04: default-suite-stabilization [branch: DEBUG-v004]
2026-05-20 17:39:20 PLAN/S0275_test_suite_triage/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v004]
2026-05-20 17:40:54 temp/S0274_baseline_2026-05-20.md spec-dev S0274 Phase 01: baseline LOC snapshot (16 waves) + gradle.properties reminder captured [branch: DEBUG-v004]
2026-05-20 17:42:32 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/XrEnvironmentDetectorImplTest.kt S0275 Phase 01 Remove VR-only XR detector test from shared standard unit-test source set [branch: DEBUG-v004]
2026-05-20 17:42:32 app_v2/src/testVr/java/com/sza/fastmediasorter/core/xr/XrEnvironmentDetectorImplTest.kt S0275 Phase 01 Re-home XR detector coverage to VR-only unit-test source set [branch: DEBUG-v004]
2026-05-20 17:45:56 PLAN/S0277_per_agent_memory_seeding.md spec Align S0277 strategic spec with current /spec template and approval gate [branch: DEBUG-v004]
2026-05-20 17:47:11 PLAN/S0275_test_suite_triage.md S0275 Phase 01 Status -> In Progress; Phase 01 started [branch: DEBUG-v004]
2026-05-20 17:47:12 PLAN/S0275_test_suite_triage/INDEX.md S0275 Phase 01 Phase 01 moved to In Progress [branch: DEBUG-v004]
2026-05-20 17:47:12 PLAN/S0275_test_suite_triage/PHASE_01__baseline-unblock.md S0275 Phase 01 Phase 01 moved to In Progress [branch: DEBUG-v004]
2026-05-20 17:52:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerErrorHandler.kt spec-dev S0274 Wave 01 Step 02.2: extract VideoPlayerErrorHandler from VideoPlayerManager.onPlayerError [branch: DEBUG-v004]
2026-05-20 17:52:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0274 Wave 01 Step 02.2: onPlayerError delegates to VideoPlayerErrorHandler; widened playbackRetryCount/lastPlaybackPosition/retryPlayback to internal; removed orphan ExoPlaybackException import [branch: DEBUG-v004]
2026-05-20 17:54:58 scripts/doc-drift/Comparator.ps1 Compare-PinsToDocs stabilized comparator order and classification coverage [branch: DEBUG-v004]
2026-05-20 17:54:59 scripts/doc-drift/pins.psd1 doc-drift pin manifest fixed min-sdk tech stack matchers and kept manifest aligned with tests [branch: DEBUG-v004]
2026-05-20 17:54:59 scripts/doc-drift/README.md doc drift checker readme documented checker usage output grammar tests and limits [branch: DEBUG-v004]
2026-05-20 17:55:00 scripts/doc-drift.tests/Test-Helpers.ps1 doc-drift test helpers added lightweight assertion helpers for S0271 [branch: DEBUG-v004]
2026-05-20 17:55:00 scripts/doc-drift.tests/Run-Tests.ps1 doc-drift test runner added zero-dependency test runner for S0271 [branch: DEBUG-v004]
2026-05-20 17:55:01 scripts/doc-drift.tests/GradleParser.Tests.ps1 gradle parser tests covered fixture-based gradle pin extraction [branch: DEBUG-v004]
2026-05-20 17:55:01 scripts/doc-drift.tests/DocParser.Tests.ps1 doc parser tests covered matcher extraction optional docs and exclude handling [branch: DEBUG-v004]
2026-05-20 17:55:01 scripts/doc-drift.tests/Comparator.Tests.ps1 comparator tests covered all classifier states and stable output order [branch: DEBUG-v004]
2026-05-20 17:55:02 scripts/doc-drift.tests/fixtures/build.gradle.kts gradle test fixture added root gradle fixture for drift checker tests [branch: DEBUG-v004]
2026-05-20 17:55:02 scripts/doc-drift.tests/fixtures/app_v2/build.gradle.kts app gradle test fixture added app gradle fixture for drift checker tests [branch: DEBUG-v004]
2026-05-20 17:55:03 scripts/doc-drift.tests/fixtures/gradle/wrapper/gradle-wrapper.properties wrapper test fixture added gradle wrapper fixture for drift checker tests [branch: DEBUG-v004]
2026-05-20 17:55:03 scripts/doc-drift.tests/fixtures/dev/TECH_REQUIREMENTS.md tech requirements fixture added drifted documentation fixture for parser tests [branch: DEBUG-v004]
2026-05-20 17:55:04 scripts/doc-drift.tests/fixtures/docs/TECH_STACK.md tech stack fixture added optional-doc fixture for parser tests [branch: DEBUG-v004]
2026-05-20 17:55:04 scripts/doc-drift.tests/fixtures/CLAUDE.md claude fixture added range-declaration fixture for parser tests [branch: DEBUG-v004]
2026-05-20 17:55:05 scripts/doc-drift.tests/fixtures/pins.sample.psd1 sample pin manifest fixture added manifest fixture for parser tests [branch: DEBUG-v004]
2026-05-20 17:55:05 scripts/doc-drift.tests/fixtures/pins.exclude.sample.psd1 exclude manifest fixture added exclude-based manifest fixture for parser tests [branch: DEBUG-v004]
2026-05-20 17:55:06 PLAN/S0271_truth_drift_detection.md S0271 strategic spec recorded follow-up placeholders for wear coverage and PR gate [branch: DEBUG-v004]
2026-05-20 17:55:06 PLAN/S0271_truth_drift_detection/PHASE_04__comparator-output-cli.md S0271 phase 04 marked comparator output cli phase complete [branch: DEBUG-v004]
2026-05-20 17:55:06 PLAN/S0271_truth_drift_detection/PHASE_05__test-harness-and-integration.md S0271 phase 05 marked test harness and integration phase complete [branch: DEBUG-v004]
2026-05-20 17:55:07 PLAN/S0271_truth_drift_detection/PHASE_06__docs-catalog-cleanup.md S0271 phase 06 marked docs and catalog cleanup phase complete [branch: DEBUG-v004]
2026-05-20 17:55:07 PLAN/S0271_truth_drift_detection/INDEX.md S0271 tactical index marked all tactical phases complete [branch: DEBUG-v004]
2026-05-20 17:55:08 PLAN/S0278_drift_checker_wear_coverage.md S0278 placeholder spec created wear coverage follow-up placeholder [branch: DEBUG-v004]
2026-05-20 17:55:08 PLAN/S0279_drift_checker_pr_gate_wiring.md S0279 placeholder spec created PR gate wiring follow-up placeholder [branch: DEBUG-v004]
2026-05-20 17:55:08 scripts/doc-drift/Output.ps1 spec-tech-fixup Backfill missed dev-log entry [branch: DEBUG-v004]
2026-05-20 17:55:08 scripts/check-doc-vs-gradle.ps1 spec-tech-fixup Backfill missed dev-log entry [branch: DEBUG-v004]
2026-05-20 17:56:59 PLAN/S0264_panel-stereo-crop-fix.md spec Rebuild S0264 strategic spec into current /spec template and approve owner gate [branch: DEBUG-v004]
2026-05-20 17:57:19 PLAN/S0264_panel-stereo-crop-fix.md spec Add compatibility owner-input section for S0264 approval gate [branch: DEBUG-v004]
2026-05-20 17:57:38 PLAN/S0271_truth_drift_detection.md S0271 strategic spec set verified status and recorded final audit [branch: DEBUG-v004]
2026-05-20 17:57:38 PLAN/S0271_truth_drift_detection/INDEX.md S0271 tactical index checked spec-check completion gate items [branch: DEBUG-v004]
2026-05-20 17:57:39 PLAN/S0271_truth_drift_detection/PHASE_04__comparator-output-cli.md S0271 phase 04 removed self-matching TODO placeholder criterion [branch: DEBUG-v004]
2026-05-20 17:57:40 PLAN/S0271_truth_drift_detection/PHASE_05__test-harness-and-integration.md S0271 phase 05 removed self-matching TODO placeholder criterion [branch: DEBUG-v004]
2026-05-20 17:57:41 PLAN/S0271_truth_drift_detection/PHASE_06__docs-catalog-cleanup.md S0271 phase 06 removed self-matching TODO placeholder criterion [branch: DEBUG-v004]
2026-05-20 17:57:41 PLAN/S0271_truth_drift_detection.md spec-check Audit S0271 -> Verified; PASS/WARN/FAIL 10/0/0 [branch: DEBUG-v004]
2026-05-20 17:59:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt S0275 Phase 01 Widen helper-accessed playback preflight members to unblock standard Kotlin compile [branch: DEBUG-v004]
2026-05-20 17:59:52 PLAN/S0275_test_suite_triage/INDEX.md S0275 Phase 01 Mark Step 01.1 done and Step 01.2 in progress [branch: DEBUG-v004]
2026-05-20 17:59:52 PLAN/S0275_test_suite_triage/PHASE_01__baseline-unblock.md S0275 Phase 01 Mark Step 01.1 done and Step 01.2 in progress [branch: DEBUG-v004]
2026-05-20 18:00:19 PLAN/S0264_panel-stereo-crop-fix/INDEX.md spec-tech Create tactical plan for S0264 [branch: DEBUG-v004]
2026-05-20 18:00:19 PLAN/S0264_panel-stereo-crop-fix/PHASE_01__panel-playback-fix.md spec-tech Phase 01: panel-playback-fix [branch: DEBUG-v004]
2026-05-20 18:00:19 PLAN/S0264_panel-stereo-crop-fix/PHASE_02__settings-strings-parity.md spec-tech Phase 02: settings-strings-parity [branch: DEBUG-v004]
2026-05-20 18:00:19 PLAN/S0264_panel-stereo-crop-fix/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v004]
2026-05-20 18:00:19 PLAN/S0264_panel-stereo-crop-fix.md spec-tech Status -> Tactical [branch: DEBUG-v004]
2026-05-20 18:00:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlaybackPreflightHelper.kt spec-dev S0274 Wave 01 Step 02.3: extract VideoPlaybackPreflightHelper from VideoPlayerManager.playVideo pre-flight [branch: DEBUG-v004]
2026-05-20 18:01:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0274 Wave 01 Step 02.3: playVideo delegates pre-flight to VideoPlaybackPreflightHelper; widened posterExtractor/lastCompletedPath/audioUnsupportedShownForPath/trackChangesSinceRecreate/scenarioTagFor to internal; removed orphan Debug + Glide imports; moved 3 constants [branch: DEBUG-v004]
2026-05-20 18:02:52 PLAN/S0267_cloud-auth-unified-storage-research.md S0267 strategic spec S0267: closed all 7 research items in section 6; recommendation Go variant B (Hybrid Mirror) with all three sources; status BlockQuestions to Approved [branch: DEBUG-v004]
2026-05-20 18:05:19 PLAN/S0275_test_suite_triage.md S0275 Phase 01 Mark S0275 BlockByOtherTask on active S0274 compile fallout [branch: DEBUG-v004]
2026-05-20 18:05:20 PLAN/S0275_test_suite_triage/INDEX.md S0275 Phase 01 Mark Phase 01 blocked by S0274 compile fallout [branch: DEBUG-v004]
2026-05-20 18:05:20 PLAN/S0275_test_suite_triage/PHASE_01__baseline-unblock.md S0275 Phase 01 Record S0274 blocker for Step 01.2 [branch: DEBUG-v004]
2026-05-20 18:06:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerTracksObserver.kt spec-dev S0274 Wave 01 Step 02.4: extract VideoPlayerTracksObserver from VideoPlayerManager.playerListener.onTracksChanged [branch: DEBUG-v004]
2026-05-20 18:06:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0274 Wave 01 Step 02.4: onTracksChanged delegates to VideoPlayerTracksObserver; widened stereoDetector to internal; removed orphan C import [branch: DEBUG-v004]
2026-05-20 18:07:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt S0264 S0264: reapply panel single-eye TextureView crop on immersive toggle and first video size callback [branch: DEBUG-v004]
2026-05-20 18:08:59 PLAN/S0264_panel-stereo-crop-fix/INDEX.md spec-dev S0264: mark tactical plan complete from validated repo state [branch: DEBUG-v004]
2026-05-20 18:08:59 PLAN/S0264_panel-stereo-crop-fix/PHASE_01__panel-playback-fix.md spec-dev S0264: phase 01 completed [branch: DEBUG-v004]
2026-05-20 18:09:00 PLAN/S0264_panel-stereo-crop-fix/PHASE_02__settings-strings-parity.md spec-dev S0264: phase 02 completed [branch: DEBUG-v004]
2026-05-20 18:09:00 PLAN/S0264_panel-stereo-crop-fix/PHASE_03__docs-catalog-cleanup.md spec-dev S0264: phase 03 completed [branch: DEBUG-v004]
2026-05-20 18:09:00 PLAN/S0264_panel-stereo-crop-fix.md spec-dev S0264: status -> Implemented [branch: DEBUG-v004]
2026-05-20 18:09:32 PLAN/S0264_panel-stereo-crop-fix.md spec-check Audit S0264 -> Verified; PASS/WARN/FAIL 16/0/0 [branch: DEBUG-v004]
2026-05-20 18:11:53 gradle.properties spec-dev S0274 Wave 01 Step 02.6: refresh Kotlin daemon reminder; VideoPlayerManager 1700+ -> 706 LOC; heap kept at 4g pending next backlog waves [branch: DEBUG-v004]
2026-05-20 18:11:53 temp/S0274_baseline_2026-05-20.md spec-dev S0274 Wave 01 Step 02.6: append Wave 01 Result block (706 LOC, helpers list, heap decision) [branch: DEBUG-v004]
2026-05-20 18:11:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0274 Wave 01 Step 02.5: insert Timber.d S0274 debug tag at onPlayerError entry for BlockNeedUserTest logcat probe [branch: DEBUG-v004]
2026-05-20 18:17:09 PLAN/S0274_kotlin_hotspots_decomposition.md spec-dev S0274 strategic spec: Status In Progress -> BlockNeedUserTest (Wave 01 implementation done; device-test gate) [branch: DEBUG-v004]
2026-05-20 18:17:10 PLAN/S0274_kotlin_hotspots_decomposition/INDEX.md spec-dev S0274 tactical INDEX: Phase 01+02 done, Phase 03 final closure pending [branch: DEBUG-v004]
2026-05-20 18:17:10 PLAN/S0274_kotlin_hotspots_decomposition/PHASE_01__foundation-and-methodology.md spec-dev S0274 Phase 01: closed with 3/3 steps done [branch: DEBUG-v004]
2026-05-20 18:17:10 PLAN/S0274_kotlin_hotspots_decomposition/PHASE_02__wave-01-videoplayermanager.md spec-dev S0274 Phase 02 (Wave 01): closed with 6/6 steps done; VideoPlayerManager 939->706 LOC [branch: DEBUG-v004]
2026-05-20 18:17:11 PLAN/S0274_kotlin_hotspots_decomposition/PHASE_03__docs-catalog-cleanup.md spec-dev S0274 Phase 03: closed with 4/4 steps done; status moved to BlockNeedUserTest [branch: DEBUG-v004]
2026-05-20 18:18:57 PLAN/S0274_kotlin_hotspots_decomposition.md spec-all Pipeline BlockNeedUserTest: S0274 Wave 01 of 16 done (VideoPlayerManager 939->706 LOC); 3 helpers extracted; device-test gate pending [branch: DEBUG-v004]
2026-05-20 18:19:25 PLAN/S0267_cloud-auth-unified-storage-research.md spec-tech Promote S0267 strategic spec to Tactical and link tactical plan [branch: DEBUG-v004]
2026-05-20 18:19:26 PLAN/S0267_cloud-auth-unified-storage-research/INDEX.md spec-tech Create tactical index for S0267 research decomposition [branch: DEBUG-v004]
2026-05-20 18:19:27 PLAN/S0267_cloud-auth-unified-storage-research/PHASE_01__child-spec-matrix.md spec-tech Add S0267 phase 01 child spec matrix plan [branch: DEBUG-v004]
2026-05-20 18:19:27 PLAN/S0267_cloud-auth-unified-storage-research/PHASE_02__prompt-pack.md spec-tech Add S0267 phase 02 prompt pack plan [branch: DEBUG-v004]
2026-05-20 18:19:28 PLAN/S0267_cloud-auth-unified-storage-research/PHASE_03__rollout-sequencing.md spec-tech Add S0267 phase 03 rollout sequencing plan [branch: DEBUG-v004]
2026-05-20 18:19:29 PLAN/S0267_cloud-auth-unified-storage-research/PHASE_04__docs-catalog-cleanup.md spec-tech Add S0267 phase 04 cleanup plan [branch: DEBUG-v004]
2026-05-20 21:43:14 gradle.properties Chaquopy CC safety Disable repo-default configuration cache for direct noLegal and IDE task safety [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-debug.PS1 Chaquopy CC safety Route generic debug builds to explicit configuration-cache opt-in or noLegal opt-out [branch: DEBUG-v004]
2026-05-20 21:43:14 dev/build-with-version.ps1 Chaquopy CC safety Opt standard versioned build into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-standard-debug.ps1 Chaquopy CC safety Opt standard debug wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-standard-device.ps1 Chaquopy CC safety Opt standard device wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-standard-release.ps1 Chaquopy CC safety Opt standard release wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-lite-debug.ps1 Chaquopy CC safety Opt lite debug wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-lite-device.ps1 Chaquopy CC safety Opt lite device wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-lite-release.ps1 Chaquopy CC safety Opt lite release wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-photos-debug.ps1 Chaquopy CC safety Opt photos debug wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-photos-device.ps1 Chaquopy CC safety Opt photos device wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-photos-release.ps1 Chaquopy CC safety Opt photos release wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-legacy-debug.ps1 Chaquopy CC safety Opt legacy debug wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-legacy-device.ps1 Chaquopy CC safety Opt legacy device wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-legacy-release.ps1 Chaquopy CC safety Opt legacy release wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-release.ps1 Chaquopy CC safety Opt standard release shortcut into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-debug-device.ps1 Chaquopy CC safety Opt debug-device wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-debug-clean.PS1 Chaquopy CC safety Opt clean debug rebuild into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:14 scripts/builders/build-aab-release.ps1 Chaquopy CC safety Opt standard bundle and APK release wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:15 scripts/builders/build-universal.ps1 Chaquopy CC safety Opt universal non-noLegal wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:15 scripts/builders/build-wear-debug.PS1 Chaquopy CC safety Opt wear debug wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:15 scripts/builders/build-wear-release.PS1 Chaquopy CC safety Opt wear release wrapper into configuration cache explicitly [branch: DEBUG-v004]
2026-05-20 21:43:15 dev/TECH_REQUIREMENTS.md Chaquopy CC safety Sync documented configuration-cache default with direct noLegal safety strategy [branch: DEBUG-v004]
2026-05-20 22:00:44 app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/MediaStoreLocalDestinationWriter.kt S0280 S0280: pre-Q legacy branch for PublicCollection routes to FileSystemSink; defensive guard in findExistingItem [branch: DEBUG-v004]
2026-05-20 22:09:43 app_v2/src/main/res/layout-land/fragment_settings_general.xml app_v2:land settings Pack Allow Separate Window toggle onto the first interface row alongside All Files and Show Hidden Files in landscape; helper button preserved. [branch: DEBUG-v004]
2026-05-20 22:14:49 app_v2/src/main/res/layout/card_google_account.xml Settings/General/Authorization UI polish Google account card: place Sign-in button right next to Diagnostics toggle in one row [branch: DEBUG-v004]
2026-05-20 22:14:59 app_v2/src/main/res/layout/fragment_settings_general.xml Settings/General/Authorization UI polish Saved authorizations row: chevron pinned next to text with primary tint; Wear companion button shrunk to wrap_content [branch: DEBUG-v004]
2026-05-20 22:15:00 app_v2/src/main/res/layout-land/fragment_settings_general.xml Settings/General/Authorization UI polish (landscape) Landscape parity: chevron pinned to text with primary tint; Wear companion button width=wrap_content [branch: DEBUG-v004]
2026-05-20 22:16:07 app_v2/src/main/res/layout-land/fragment_settings_general.xml fragment_settings_general.xml Make landscape General settings action buttons hug content width [branch: DEBUG-v004]
2026-05-20 22:20:40 app_v2/src/main/res/layout-land/fragment_settings_video.xml fragment_settings_video.xml Tighten landscape video settings action widths and align snapshot controls on one row [branch: DEBUG-v004]
2026-05-20 22:22:57 app_v2/src/main/res/layout/fragment_settings_general.xml Settings/General/AppData buttons wrap_content Backup-and-export section: all action buttons (Export/Import, Share/Save logs, Backup/Restore, Reset settings) sized to text width instead of stretching to row [branch: DEBUG-v004]
2026-05-20 22:23:01 app_v2/src/main/res/layout-land/fragment_settings_general.xml Settings/General/AppData buttons wrap_content (landscape) Landscape parity: Export/Import, Share/Save logs, Backup/Restore, Reset settings sized to text width [branch: DEBUG-v004]
2026-05-20 22:23:26 app_v2/src/main/res/layout-land/fragment_settings_images.xml fragment_settings_images.xml Adjust landscape image settings row grouping and default viewer button width [branch: DEBUG-v004]
2026-05-20 22:25:19 app_v2/src/main/res/layout/fragment_settings_documents.xml fragment_settings_documents.xml Make default documents viewer button hug content width [branch: DEBUG-v004]
2026-05-20 22:26:51 app_v2/src/main/res/layout-land/fragment_settings_audio.xml Settings/Media tab (landscape) Compact landscape layout: pair WiFi-only+local-cache cover toggles into one row, pair mic-enable+ask-filename toggles into one row, shrink default-audio-player button to wrap_content, constrain visualizer dropdown to 280dp. [branch: DEBUG-v004]
2026-05-20 22:30:31 app_v2/src/main/res/layout-land/fragment_settings_playback.xml fragment_settings_playback.xml Limit landscape playback sort width and pair grid and file ops toggles [branch: DEBUG-v004]
2026-05-20 22:30:43 app_v2/src/main/res/layout-land/fragment_settings_other.xml settings landscape - translation/OCR section Land layout: glue language/OCR-font spinners to their labels (drop weight=1 from labels, add Space spacer); put Translation toggle and Translation Lens Style on one horizontal row [branch: DEBUG-v004]
2026-05-20 22:32:58 app_v2/src/main/res/layout-land/fragment_settings_playback.xml fragment_settings_playback.xml Attach landscape touch zone legend directly to the scheme [branch: DEBUG-v004]
2026-05-20 22:34:46 app_v2/src/main/res/layout-land/fragment_settings_playback.xml fragment_settings_playback.xml Reflow paired playback settings rows in landscape [branch: DEBUG-v004]
2026-05-20 22:40:52 app_v2/src/main/res/layout-land/fragment_settings_destinations.xml fragment_settings_destinations.xml Move add quick sort button before max recipients in landscape [branch: DEBUG-v004]
2026-05-20 22:41:32 app_v2/src/main/res/layout-land/fragment_settings_playback.xml settings playback landscape Compact landscape layout: pair PreventSleep+ResumeOnNextLaunch, ResourcePicker+OpenInPlayer (chevron on resource label), DisableCamera+SkipFilename, BlackScreenButton+DefaultRememberFileList; drop divider above Incoming Links; reduce vertical margins to margin_tiny [branch: DEBUG-v004]
2026-05-20 22:43:12 app_v2/src/main/res/layout-land/fragment_settings_destinations.xml fragment_settings_destinations.xml Move landscape scheduled operations action buttons into the toggle row [branch: DEBUG-v004]
2026-05-20 22:47:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt AddResourceFormManager.kt Apply add-resource status bar inset to toolbar container for stable landscape header [branch: DEBUG-v004]
2026-05-20 22:48:15 app_v2/src/main/res/layout/activity_add_resource.xml activity_add_resource.xml Wrap add-resource toolbar in a container so landscape header keeps back title and icon button [branch: DEBUG-v004]
2026-05-20 22:50:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt audio cover fallback Keep a visible audio placeholder while async cover art loads and add focused diagnostics for blank audio player transitions. [branch: DEBUG-v004]
2026-05-20 22:55:18 app_v2/src/main/res/layout/fragment_settings_destinations.xml operations-settings Mirror layoutScheduledActions id and visibility=gone from landscape variant; fixes noLegal/standard kapt errors after recent landscape edit (S0 rule 12) [branch: DEBUG-v004]
2026-05-20 22:55:45 CLAUDE.md CLAUDE.md Align the list of mandatory skills with the Copilot instructions and AGENTS.md [branch: DEBUG-v004]
2026-05-20 23:03:18 app_v2/src/vr/cpp/CMakeLists.txt CMakeLists.txt Add target_link_options -Wl,-z,max-page-size=16384 for 16 KB page alignment compatibility [branch: DEBUG-v004]
2026-05-20 23:10:14 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.5202.303 - plateau merge from DEBUG-v006 [branch: DEBUG-v006]
2026-05-20 23:20:57 .gitignore .gitignore Add play-console-key.json to .gitignore to exclude Google Play developer API key [branch: DEBUG-v007]
2026-05-21 00:14:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/player/DynamicBackgroundProcessor.kt ImageLoadingManager;DynamicBackgroundProcessor Fix dynamic background flicker on next-image transition: keep previous strips on screen until new bitmap is ready, atomic swap in applyBackground without isVisible toggle [branch: DEBUG-v007]
2026-05-21 01:09:37 PLAN/S0281_link-auth-skip-google-domains.md spec Add strategic spec S0281 to remove the dead-end auth-offer dialog for google-OAuth-only hosts (music.youtube.com, youtube.com) in link-auto-download - resolves contradiction between S0166/S0157/S0144/S0211 and S0200 ADR-4 [branch: DEBUG-v007]
2026-05-21 01:16:00 PLAN/S0281_link-auth-skip-google-domains/INDEX.md spec-tech Create tactical plan for S0281 [branch: DEBUG-v007]
2026-05-21 01:16:00 PLAN/S0281_link-auth-skip-google-domains/PHASE_01__inventory-and-decisions.md spec-tech Phase 01: inventory-and-decisions [branch: DEBUG-v007]
2026-05-21 01:16:00 PLAN/S0281_link-auth-skip-google-domains/PHASE_02__suppress-auth-offer.md spec-tech Phase 02: suppress-auth-offer [branch: DEBUG-v007]
2026-05-21 01:16:00 PLAN/S0281_link-auth-skip-google-domains/PHASE_03__stale-record-cleanup.md spec-tech Phase 03: stale-record-cleanup [branch: DEBUG-v007]
2026-05-21 01:16:00 PLAN/S0281_link-auth-skip-google-domains/PHASE_04__optional-explanation-toast.md spec-tech Phase 04: optional-explanation-toast [branch: DEBUG-v007]
2026-05-21 01:16:00 PLAN/S0281_link-auth-skip-google-domains/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v007]
2026-05-21 01:16:00 PLAN/S0281_link-auth-skip-google-domains.md spec-tech Status -> Tactical [branch: DEBUG-v007]
2026-05-21 01:18:33 PLAN/S0281_link-auth-skip-google-domains/PHASE_01__inventory-and-decisions.md spec-dev Phase 01 Step 01.1: lock Decision Q1=A with call-site inventory [branch: DEBUG-v007]
2026-05-21 01:19:57 PLAN/S0281_link-auth-skip-google-domains/PHASE_01__inventory-and-decisions.md spec-dev Phase 01 Step 01.2: lock Decision Q3=B with storage-shape inventory [branch: DEBUG-v007]
2026-05-21 01:27:07 PLAN/S0281_link-auth-skip-google-domains/PHASE_01__inventory-and-decisions.md spec-dev Phase 01 Step 01.3: record Q2 owner decision = once-per-failed-extract [branch: DEBUG-v007]
2026-05-21 01:33:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt spec-dev S0281 Phase 02: route google-OAuth-only hosts through silent download path in maybeOfferAuthThenDownload + handleNoMediaFoundEscalation + handleReAuthFromNotification [branch: DEBUG-v007]
2026-05-21 01:34:00 app_v2/src/main/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResources.kt spec-dev S0281 Phase 02 Step 02.5 (Decision Q1=A): remove YouTube entry from KnownAuthResources - dead-end path under S0200 ADR-4 [branch: DEBUG-v007]
2026-05-21 01:34:36 app_v2/src/test/java/com/sza/fastmediasorter/data/link/auth/KnownAuthResourcesTest.kt spec-dev S0281 Phase 02 Step 02.5: update test for removed YouTube entry (assertNull matchHost) [branch: DEBUG-v007]
2026-05-21 01:40:36 app_v2/src/main/res/values/strings.xml spec-dev S0281 Phase 04 Step 04.1: add s0281_google_oauth_only_note (EN) [branch: DEBUG-v007]
2026-05-21 01:40:37 app_v2/src/main/res/values-ru/strings.xml spec-dev S0281 Phase 04 Step 04.1: add s0281_google_oauth_only_note (RU) [branch: DEBUG-v007]
2026-05-21 01:40:38 app_v2/src/main/res/values-uk/strings.xml spec-dev S0281 Phase 04 Step 04.1: add s0281_google_oauth_only_note (UK) [branch: DEBUG-v007]
2026-05-21 01:40:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt spec-dev S0281 Phase 04 Step 04.3: emit once-per-failed-extract toast in handleNoMediaFoundEscalation google branch [branch: DEBUG-v007]
2026-05-21 01:43:51 PLAN/S0281_link-auth-skip-google-domains.md spec-dev S0281 all phases done; Status -> BlockNeedUserTest [branch: DEBUG-v007]
2026-05-21 02:51:31 PLAN/S0277_per_agent_memory_seeding.md spec-all S0277: filled owner-gate inputs, resolved sec 6 research items, added sec 3.3, flipped Draft -> Approved [branch: DEBUG-v007]
2026-05-21 02:56:52 PLAN/S0277_per_agent_memory_seeding/INDEX.md spec-all S0277: tactical INDEX + 5 phase files (inventory, 3 seed phases, verify/close); status Approved -> Tactical [branch: DEBUG-v007]
2026-05-21 03:03:25 app_v2/src/vr/cpp/xr_session.cpp S0249 - expand OpenXR exit bindings S0249 fix: expand native createActions() to cover both hands’ face/menu/thumbstick clicks + analog trigger/grip (threshold 0.4); add OnBackPressedCallback to DiagnosticXrActivity as 2D-fallback exit. Closes ‘infinite flight’ bug found in BlockNeedUserTest. [branch: DEBUG-v007]
2026-05-21 03:03:58 .claude/agent-memory/friendly-android-doc-writer/MEMORY.md spec-all S0277 Phase 04: seeded 10 starter memory records + MEMORY.md for friendly-android-doc-writer profile [branch: DEBUG-v007]
2026-05-21 03:06:34 .claude/agent-memory/android-solution-researcher/MEMORY.md spec-all S0277 Phase 03: seeded 24 starter memory records + MEMORY.md for android-solution-researcher profile [branch: DEBUG-v007]
2026-05-21 03:08:28 .claude/agent-memory/android-kotlin-developer/MEMORY.md spec-all S0277 Phase 02: seeded 25 starter memory records + MEMORY.md for android-kotlin-developer profile [branch: DEBUG-v007]
2026-05-21 03:09:34 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity S0249: register OnBackPressedCallback as 2D-fallback exit + refresh BlockNeedUserTest probe at onCreate entry [branch: DEBUG-v007]
2026-05-21 03:09:39 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt VrSettingsBlockFragment.launchDiagnosticImmerse S0249: refresh BlockNeedUserTest probe at launchDiagnosticImmerse entry (status cycle BNUT->InProgress->BNUT) [branch: DEBUG-v007]
2026-05-21 03:09:43 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt XrEntryGatewayImpl.enterDiagnosticImage S0249: refresh BlockNeedUserTest probe at enterDiagnosticImage entry (status cycle BNUT->InProgress->BNUT) [branch: DEBUG-v007]
2026-05-21 03:09:49 PLAN/S0249_vr-test-immersive-image-stage1a.md S0249 spec Refresh Last Audit with post-probe rebuild result (1m 4s, APK v2.60.5210.307); document workflow cycle BNUT->InProgress->BNUT [branch: DEBUG-v007]
2026-05-21 03:12:06 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt S0249 follow-up - keep EGL on render thread S0249 follow-up fix: drop Dispatchers.Default hops from NativeDiagnosticXrRuntime suspend setup methods. EGL context was being created on a coroutine-pool thread and runFrameLoop ran on the render thread without a current GL context, producing a black composition layer. [branch: DEBUG-v007]
2026-05-21 03:12:57 PLAN/S0277_per_agent_memory_seeding.md spec-check Audit S0277 -> Verified; PASS/WARN/FAIL 11/0/0; flipped Implemented -> Verified [branch: DEBUG-v007]
2026-05-21 03:26:40 app_v2/src/vr/cpp/xr_session.cpp viewFromPose + buildSphereMesh S0249 fix: transpose 3x3 block of view matrix in viewFromPose (mirror xr_linear.h InvertRigidBody pattern) + drop incorrect UV.y flip in buildSphereMesh; cures inverted-image + reverse-head-rotation defects found in BlockNeedUserTest [branch: DEBUG-v007]
2026-05-21 03:26:47 PLAN/S0249_vr-test-immersive-image-stage1a.md S0249 Last Audit Append second BlockNeedUserTest defect block: view matrix not transposed + UV.y mistakenly flipped; document fix scope + asset research (Poly Haven CC0 16K JPG vs current 4K Navier8) [branch: DEBUG-v007]
2026-05-21 10:01:19 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt S0260 ytmusic-audio-share-recovery S0260 fix: propagate audioOnly hint into LinkDownloadSessionContext even when no cookies are available, so YouTube Music shares without login (mandatory path after S0281 google-OAuth gate) reach YtDlpExtractionStrategy with the audio-only signal and pass YtMusicAudioOnlyContract validation. [branch: DEBUG-v007]
2026-05-21 10:07:36 PLAN/S0262_smb-host-scan-share-picker.md spec-check Audit S0262 -> Partial; PASS/WARN/FAIL 18/4/0 [branch: DEBUG-v007]
2026-05-21 10:09:05 PLAN/S0262_smb-host-scan-share-picker.md spec-fix Annotate Last Audit (S0262): all 4 WARN -> FOLLOW-UP (tactical bookkeeping outside auto-fix scope) [branch: DEBUG-v007]
2026-05-21 10:12:50 PLAN/S0262_smb-host-scan-share-picker.md spec-check Audit S0262 -> Verified; PASS/WARN/FAIL 22/0/0 [branch: DEBUG-v007]
2026-05-21 10:12:50 PLAN/S0262_smb-host-scan-share-picker/INDEX.md spec-check Sync tactical bookkeeping: phase rows -> Done, completion gate ticked [branch: DEBUG-v007]
2026-05-21 10:12:50 PLAN/S0262_smb-host-scan-share-picker/PHASE_01__inventory-scan-paths.md spec-check Sync phase header to Done 3/3 with step boxes ticked [branch: DEBUG-v007]
2026-05-21 10:12:50 PLAN/S0262_smb-host-scan-share-picker/PHASE_02__unify-share-selection.md spec-check Sync phase header to Done 3/3 with step boxes ticked [branch: DEBUG-v007]
2026-05-21 10:12:50 PLAN/S0262_smb-host-scan-share-picker/PHASE_03__empty-state-and-focus.md spec-check Sync phase header to Done 3/3 with step boxes ticked [branch: DEBUG-v007]
2026-05-21 10:12:50 PLAN/S0262_smb-host-scan-share-picker/PHASE_04__docs-catalog-cleanup.md spec-check Sync phase header to Done 3/3 with step boxes ticked [branch: DEBUG-v007]
2026-05-21 10:13:12 PLAN/S0262_smb-host-scan-share-picker.md spec-all Pipeline Verified: S0262 [branch: DEBUG-v007]
2026-05-21 10:14:30 PLAN/spec-catalog.jsonl spec-next Session: 1 processed, 1 verified, 0 blocked, 4 skip-cached [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0071_use-trash-setting.md spec-arc Archive S0071 (use-trash-setting) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0112_android-tv-launcher-support.md spec-arc Archive S0112 (android-tv-launcher-support) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0135_play-store-listing-optimization.md spec-arc Archive S0135 (play-store-listing-optimization) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0149_enh-sftp-permission-denied-message.md spec-arc Archive S0149 (enh-sftp-permission-denied-message) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0158_player-large-buttons.md spec-arc Archive S0158 (player-large-buttons) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0159_file-ops-overflow-menu.md spec-arc Archive S0159 (file-ops-overflow-menu) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0160_resource-ops-overflow-toggle.md spec-arc Archive S0160 (resource-ops-overflow-toggle) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0162_screen-rotation-control.md spec-arc Archive S0162 (screen-rotation-control) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0167_bugfix-cover-art-search-cancelled-as-error.md spec-arc Archive S0167 (bugfix-cover-art-search-cancelled-as-error) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0168_bugfix-video-playback-stuck-buffering-no-feedback.md spec-arc Archive S0168 (bugfix-video-playback-stuck-buffering-no-feedback) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0173_refactor-playback-position-persistence.md spec-arc Archive S0173 (refactor-playback-position-persistence) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0175_nolegal-newpipe-version-bump.md spec-arc Archive S0175 (nolegal-newpipe-version-bump) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0176_nolegal-session-context-etld-fix.md spec-arc Archive S0176 (nolegal-session-context-etld-fix) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0177_nolegal-native-site-extractors.md spec-arc Archive S0177 (nolegal-native-site-extractors) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0178_video-thumbnail-black-frame-detection.md spec-arc Archive S0178 (video-thumbnail-black-frame-detection) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0182_sticky_session_user_agent.md spec-arc Archive S0182 (sticky_session_user_agent) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0184_multi-window-capability.md spec-arc Archive S0184 (multi-window-capability) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0185_startup-splash-screen-investigation.md spec-arc Archive S0185 (startup-splash-screen-investigation) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0188_slideshow-stop-on-resource-unavailable.md spec-arc Archive S0188 (slideshow-stop-on-resource-unavailable) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0189_browse-create-text-notes.md spec-arc Archive S0189 (browse-create-text-notes) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0192_draw-editor-toolbar-ux-v2.md spec-arc Archive S0192 (draw-editor-toolbar-ux-v2) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0193_lazy-init-research.md spec-arc Archive S0193 (lazy-init-research) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0194_lazy-hilt-singletons.md spec-arc Archive S0194 (lazy-hilt-singletons) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0195_network-first-use-trigger.md spec-arc Archive S0195 (network-first-use-trigger) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0197_threads-ig-data-sjs-extractor.md spec-arc Archive S0197 (threads-ig-data-sjs-extractor) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0200_google-account-central-binding.md spec-arc Archive S0200 (google-account-central-binding) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:15 PLAN/S0201_developer-workflow-governance-hardening.md spec-arc Archive S0201 (developer-workflow-governance-hardening) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0204_bugfix-toolbar-hidden-behind-statusbar.md spec-arc Archive S0204 (bugfix-toolbar-hidden-behind-statusbar) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0208_player-big-buttons-tuning.md spec-arc Archive S0208 (player-big-buttons-tuning) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0209_deletion-trash-overhaul.md spec-arc Archive S0209 (deletion-trash-overhaul) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0210_video-list-show-file-size.md spec-arc Archive S0210 (video-list-show-file-size) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0212_bugfix-ftp-utf8-filenames.md spec-arc Archive S0212 (bugfix-ftp-utf8-filenames) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0216_playback-order-bottom-bar.md spec-arc Archive S0216 (playback-order-bottom-bar) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0217_bugfix-image-viewer-toolbar-overflow.md spec-arc Archive S0217 (bugfix-image-viewer-toolbar-overflow) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0219_bugfix-sftp-idle-retry-race.md spec-arc Archive S0219 (bugfix-sftp-idle-retry-race) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0221_play-console-deprecated-window-color-apis.md spec-arc Archive S0221 (play-console-deprecated-window-color-apis) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0222_play-console-large-screen-orientation.md spec-arc Archive S0222 (play-console-large-screen-orientation) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0223_instagram-photo-post-download-broken.md spec-arc Archive S0223 (instagram-photo-post-download-broken) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0224_threads-batch-notification-inflated-count.md spec-arc Archive S0224 (threads-batch-notification-inflated-count) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0225_youtube-community-post-url-handling.md spec-arc Archive S0225 (youtube-community-post-url-handling) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0226_player-file-not-found-after-delete-optimistic-advance.md spec-arc Archive S0226 (player-file-not-found-after-delete-optimistic-advance) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0227_copy-move-panel-adaptive-layout.md spec-arc Archive S0227 (copy-move-panel-adaptive-layout) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0228_bugfix-smb-idle-disconnect-timer-race.md spec-arc Archive S0228 (bugfix-smb-idle-disconnect-timer-race) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0230_tv-keyboard-navigation-coverage.md spec-arc Archive S0230 (tv-keyboard-navigation-coverage) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0231_bugfix-sftp-to-local-copy-eacces-scoped-storage.md spec-arc Archive S0231 (bugfix-sftp-to-local-copy-eacces-scoped-storage) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0232_unified-application-id-cloud-flavors.md spec-arc Archive S0232 (unified-application-id-cloud-flavors) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0234_google-account-card-error-ui.md spec-arc Archive S0234 (google-account-card-error-ui) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0241_vr-stack-removal-plan.md spec-arc Archive S0241 (vr-stack-removal-plan) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0242_bugfix-browse-list-sync-after-player.md spec-arc Archive S0242 (bugfix-browse-list-sync-after-player) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0244_vr-preliminary-research.md spec-arc Archive S0244 (vr-preliminary-research) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0245_vr-settings-scaffold-stage0.md spec-arc Archive S0245 (vr-settings-scaffold-stage0) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0246_smb-performance-research.md spec-arc Archive S0246 (smb-performance-research) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0247_smb-buffer-tuning-spike.md spec-arc Archive S0247 (smb-buffer-tuning-spike) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0248_smb-orchestration-optimizations.md spec-arc Archive S0248 (smb-orchestration-optimizations) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0250_nolegal-vr-unification.md spec-arc Archive S0250 (nolegal-vr-unification) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0251_cleanup-dead-vr-format-settings.md spec-arc Archive S0251 (cleanup-dead-vr-format-settings) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0255_settings-authorization-group.md spec-arc Archive S0255 (settings-authorization-group) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0256_collapsible-section-header.md spec-arc Archive S0256 (collapsible-section-header) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0258_settings-toggle-row-template.md spec-arc Archive S0258 (settings-toggle-row-template) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0259_settings-toggle-row-general-destinations.md spec-arc Archive S0259 (settings-toggle-row-general-destinations) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0261_settings-section-title-rename.md spec-arc Archive S0261 (settings-section-title-rename) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0262_smb-host-scan-share-picker.md spec-arc Archive S0262 (smb-host-scan-share-picker) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0263_how-to-expansion-scenarios-and-style.md spec-arc Archive S0263 (how-to-expansion-scenarios-and-style) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0264_panel-stereo-crop-fix.md spec-arc Archive S0264 (panel-stereo-crop-fix) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0268_agent_continuity_layer.md spec-arc Archive S0268 (agent_continuity_layer) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0269_post_change_ritual_unification.md spec-arc Archive S0269 (post_change_ritual_unification) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0270_workspace_noise_and_lookup_strategy.md spec-arc Archive S0270 (workspace_noise_and_lookup_strategy) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0271_truth_drift_detection.md spec-arc Archive S0271 (truth_drift_detection) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0272_repo_knowledge_search_expansion.md spec-arc Archive S0272 (repo_knowledge_search_expansion) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0273_build_failure_diagnostics.md spec-arc Archive S0273 (build_failure_diagnostics) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0276_configuration_cache_recovery.md spec-arc Archive S0276 (configuration_cache_recovery) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:16 PLAN/S0277_per_agent_memory_seeding.md spec-arc Archive S0277 (per_agent_memory_seeding) -> temp/done/ [branch: DEBUG-v007]
2026-05-21 10:52:50 app_v2/src/vr/cpp/xr_session.cpp XrSession Added Exit/Prev/Next action sets, triggers, EGL thread safe frame upload queue, JNI callback piping [branch: DEBUG-v007]
2026-05-21 10:52:50 app_v2/src/vr/cpp/xr_session.h xr_session_queue_frame Added xr_session_queue_frame declaration for dynamic texture streams [branch: DEBUG-v007]
2026-05-21 10:52:50 app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp NativeDiagnosticXrRuntime Added JNI queueFrame binder for OpenGL rendering [branch: DEBUG-v007]
2026-05-21 10:52:50 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt NativeDiagnosticXrRuntime Declared native queueFrame method wrapper [branch: DEBUG-v007]
2026-05-21 10:52:50 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/DiagnosticXrRuntime.kt DiagnosticXrRuntime Delegated queueFrame method to native runtime [branch: DEBUG-v007]
2026-05-21 10:52:50 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Added pictures/movies directory scanning, dynamic playlist controller, JNI event listener, and ExoPlayer to ImageReader RGBA frame harvester [branch: DEBUG-v007]
2026-05-21 10:52:50 scripts/utils/setup_test_vr.ps1 setup_test_vr.ps1 Created Quest 3 media harvesting and adb deployment script [branch: DEBUG-v007]
2026-05-21 10:57:50 scripts/spec_catalog/archive.ps1 spec-catalog Fix CLI exit-code contract: trap { exit 1 } converts terminating errors under _lib Stop preference; explicit exit 0 on success path [branch: DEBUG-v007]
2026-05-21 10:57:50 scripts/spec_catalog/update.ps1 spec-catalog Fix CLI exit-code contract: trap { exit 1 } converts terminating errors under _lib Stop preference; explicit exit 0 on success path [branch: DEBUG-v007]
2026-05-21 10:57:50 scripts/spec_catalog/insert.ps1 spec-catalog Fix CLI exit-code contract: trap { exit 1 } converts terminating errors under _lib Stop preference; explicit exit 0 on success path [branch: DEBUG-v007]
2026-05-21 10:57:50 scripts/spec_catalog/delete.ps1 spec-catalog Fix CLI exit-code contract: trap { exit 1 } converts terminating errors under _lib Stop preference; explicit exit 0 on success path [branch: DEBUG-v007]
2026-05-21 10:57:50 scripts/spec_catalog/close.ps1 spec-catalog Fix CLI exit-code contract: trap { exit 1 } converts terminating errors under _lib Stop preference; explicit exit 0 on success path [branch: DEBUG-v007]
2026-05-21 10:57:50 scripts/spec_catalog/complete.ps1 spec-catalog Fix CLI exit-code contract: trap { exit 1 } converts terminating errors under _lib Stop preference; explicit exit 0 on success path [branch: DEBUG-v007]
2026-05-21 10:57:50 scripts/spec_catalog/bulk-update.ps1 spec-catalog Fix CLI exit-code contract: trap { exit 1 } converts terminating errors under _lib Stop preference; explicit exit 0 on success path [branch: DEBUG-v007]
2026-05-21 11:11:56 app_v2/src/vr/cpp/xr_session.cpp Diagnostic Immersive Mode Fully implemented C++ core, playlist navigation triggers, dynamic Canvas HUD and multi-projection render pipelines [branch: DEBUG-v007]
2026-05-21 11:22:42 app_v2/src/vr/cpp/xr_session.cpp S0249-fix fix viewFromPose: store R^T in column-major (m[c4+row]=r[row3+c]) + translation -R^T*pos; fix buildSphereMesh UV: drop 1.0f-v flip (north pole samples bitmap row 0 = sky) [branch: DEBUG-v007]
2026-05-21 11:22:46 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0249-fix fix probe-tag prefix S0282: -> S0249: on onCreate (S0249 is BlockNeedUserTest; S0282 is In Progress and must carry zero Timber.d tags) [branch: DEBUG-v007]
2026-05-21 11:23:17 PLAN/S0249_vr-test-immersive-image-stage1a.md spec-check record /spec-check follow-up: audit-claimed viewFromPose + UV fixes were never applied; patched now; probe-tag prefix S0282 -> S0249 also fixed [branch: DEBUG-v007]
2026-05-21 11:36:46 PLAN/S0283_vr-immersive-interactive-controls-hud.md spec Add strategic spec S0283 for VR interactive HUD and controls [branch: DEBUG-v007]
2026-05-21 11:38:18 PLAN/S0283_vr-immersive-interactive-controls-hud.md spec Enrich S0283 spec with Haptics, HUD Recenter, Hand Tracking Jitter reduction, and custom gestural hysteresis [branch: DEBUG-v007]
2026-05-21 11:39:32 PLAN/S0283_vr-immersive-interactive-controls-hud/INDEX.md spec-tech Create tactical plan index for S0283 [branch: DEBUG-v007]
2026-05-21 11:39:32 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_01__foundation-xr-input.md spec-tech Phase 01: openxr input foundation [branch: DEBUG-v007]
2026-05-21 11:39:32 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_02__world-hud-raycast.md spec-tech Phase 02: world-space HUD and raycast [branch: DEBUG-v007]
2026-05-21 11:39:32 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_03__interactive-canvas-jni.md spec-tech Phase 03: interactive Canvas JNI controls [branch: DEBUG-v007]
2026-05-21 11:39:32 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs & catalog cleanup [branch: DEBUG-v007]
2026-05-21 11:39:32 PLAN/S0283_vr-immersive-interactive-controls-hud.md spec-tech Status -> Tactical [branch: DEBUG-v007]
2026-05-21 11:40:45 PLAN/S0283_vr-immersive-interactive-controls-hud/INDEX.md spec-tech Update tactical plan INDEX.md - resolved blockers, set status to In Progress [branch: DEBUG-v007]
2026-05-21 11:40:46 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_01__foundation-xr-input.md spec-tech Phase 01: set status to In Progress, marked prerequisites as resolved [branch: DEBUG-v007]
2026-05-21 11:40:46 PLAN/S0283_vr-immersive-interactive-controls-hud.md spec-tech Updated strategic spec metadata alignment [branch: DEBUG-v007]
2026-05-21 11:41:00 PLAN/S0283_vr-immersive-interactive-controls-hud.md spec-tech Status -> In Progress [branch: DEBUG-v007]
2026-05-21 11:41:40 app_v2/src/vr/cpp/xr_session.cpp createInstance Add XR_EXT_HAND_TRACKING_EXTENSION_NAME to exts [branch: DEBUG-v007]
2026-05-21 11:44:12 app_v2/src/vr/cpp/xr_session.cpp S0283 Resolve dynamic hand tracking function pointers, initialize/destroy left and right hand trackers, and bind Oculus Touch grip and thumbstick actions. [branch: DEBUG-v007]
2026-05-21 11:44:14 app_v2/src/vr/cpp/xr_session.h S0283 Document hand tracking pointers and lifecycle updates. [branch: DEBUG-v007]
2026-05-21 11:44:37 app_v2/src/vr/AndroidManifest.xml S0283 Add Quest-specific hand tracking permission and feature declarations. [branch: DEBUG-v007]
2026-05-21 12:03:22 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Added missing REQUEST_CODE_HAND_TRACKING runtime permission prompt constant [branch: DEBUG-v007]
2026-05-21 12:04:23 app_v2/src/vr/cpp/xr_session.cpp createInstance Enabled XR_EXT_hand_interaction and XR_FB_hand_tracking_aim extensions [branch: DEBUG-v007]
2026-05-21 12:04:58 app_v2/src/vr/cpp/xr_input.h xr_input Created header for XR input, hand tracking and haptic modules [branch: DEBUG-v007]
2026-05-21 12:05:01 app_v2/src/vr/cpp/xr_input.cpp xr_input Created implementation for controller actions, symmetric thumbsticks, hand tracking, and haptic feedback [branch: DEBUG-v007]
2026-05-21 12:05:09 app_v2/src/vr/cpp/CMakeLists.txt fms_diagnostic_xr Added xr_input.cpp to CMake compilation sources [branch: DEBUG-v007]
2026-05-21 12:40:14 PLAN/S0282_vr_test_immerse_improvement.md spec Normalize S0282 strategic spec to canonical /spec template [branch: DEBUG-v007]
2026-05-21 12:40:39 PLAN/S0283_vr-immersive-interactive-controls-hud/ S0283 audit follow-up S0283 audit fix-up: §2.3/§5.1.1 enumerate three hand-extension roles (XR_EXT_hand_tracking joints / XR_EXT_hand_interaction pinch_ext+aim_ext / XR_FB_hand_tracking_aim per-finger); INDEX.md aligned to journal In Progress; Phase 01 added Step 01.5 (extract action wiring & PFN hand-tracker pointers from xr_session.cpp -> xr_input.cpp to eliminate duplicate globals); xr_input.cpp budget raised to 500 LOC, xr_session.cpp to 1000; Phase 02 added Step 02.0 (register xr_raycast.cpp + xr_hud_world.cpp in CMake) and CMakeLists.txt to Files Touched; Phase 03 Step 03.4 cast fixed to XrHapticBaseHeader*; diagnostic_xr_runtime.cpp gained #include xr_input.h to resolve xr_input_apply_haptic; DiagnosticXrRenderThread.kt gained stub setParallaxShift / currentFps for Phase 03 wiring; noLegalDebug build green. [branch: DEBUG-v007]
2026-05-21 12:50:21 app_v2/src/vr/cpp/xr_session.cpp S0283 native session host Move S0283 input ownership out of xr_session and keep session file within line budget [branch: DEBUG-v007]
2026-05-21 12:50:22 app_v2/build.gradle.kts build version Auto-version noLegal debug build for S0283 validation [branch: DEBUG-v007]
2026-05-21 12:51:43 PLAN/S0283_vr-immersive-interactive-controls-hud.md S0283 spec Align S0283 strategic status with implementation progress [branch: DEBUG-v007]
2026-05-21 12:51:44 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_01__foundation-xr-input.md S0283 phase 01 Mark S0283 phase 01 verified after noLegal debug build [branch: DEBUG-v007]
2026-05-21 12:51:45 PLAN/S0283_vr-immersive-interactive-controls-hud/INDEX.md S0283 tactical index Update S0283 phase counter after phase 01 verification [branch: DEBUG-v007]
2026-05-21 12:52:26 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_02__world-hud-raycast.md S0283 phase 02 Mark S0283 phase 02 verified after raycast and HUD checks [branch: DEBUG-v007]
2026-05-21 12:52:27 PLAN/S0283_vr-immersive-interactive-controls-hud/INDEX.md S0283 tactical index Update S0283 phase counter after phase 02 verification [branch: DEBUG-v007]
2026-05-21 12:59:00 app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp S0283 JNI bridge Add native parallax shift bridge for interactive HUD depth control [branch: DEBUG-v007]
2026-05-21 12:59:01 app_v2/src/vr/cpp/xr_session.h S0283 native session API Expose parallax shift setter for diagnostic XR runtime [branch: DEBUG-v007]
2026-05-21 12:59:02 app_v2/src/vr/cpp/xr_session.cpp S0283 native session host Wire stereo parallax uniform and keep session host within line budget [branch: DEBUG-v007]
2026-05-21 12:59:03 app_v2/src/vr/cpp/xr_hud_world.h S0283 HUD world state Track HUD drag and recenter state for grip interaction [branch: DEBUG-v007]
2026-05-21 12:59:04 app_v2/src/vr/cpp/xr_hud_world.cpp S0283 HUD world interaction Add grip drag, double-grip recenter, and mono HUD parallax reset [branch: DEBUG-v007]
2026-05-21 12:59:05 app_v2/build.gradle.kts build version Auto-version noLegal debug build for S0283 Phase 03 validation [branch: DEBUG-v007]
2026-05-21 12:59:06 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/DiagnosticXrRuntime.kt S0283 runtime contract Add parallax shift runtime contract for interactive HUD depth control [branch: DEBUG-v007]
2026-05-21 12:59:44 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt S0283 native runtime wrapper Forward parallax shift changes through native runtime wrapper [branch: DEBUG-v007]
2026-05-21 13:00:24 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrRenderThread.kt S0283 render thread Forward HUD parallax shift updates to native runtime [branch: DEBUG-v007]
2026-05-21 13:02:10 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_03__interactive-canvas-jni.md S0283 phase 03 Mark S0283 phase 03 verified after interactive HUD checks [branch: DEBUG-v007]
2026-05-21 13:02:11 PLAN/S0283_vr-immersive-interactive-controls-hud/INDEX.md S0283 tactical index Update S0283 phase counter after phase 03 verification [branch: DEBUG-v007]
2026-05-21 13:03:56 PLAN/S0283_vr-immersive-interactive-controls-hud.md S0283 spec Move S0283 to BlockNeedUserTest after implementation [branch: DEBUG-v007]
2026-05-21 13:03:57 PLAN/S0283_vr-immersive-interactive-controls-hud/PHASE_04__docs-catalog-cleanup.md S0283 phase 04 Mark S0283 phase 04 complete after catalog and status closure [branch: DEBUG-v007]
2026-05-21 13:03:57 PLAN/S0283_vr-immersive-interactive-controls-hud/INDEX.md S0283 tactical index Mark S0283 implementation complete pending Quest verification [branch: DEBUG-v007]
2026-05-21 14:28:27 app_v2/src/main/res/layout/fragment_settings_general.xml,app_v2/src/main/res/layout-land/fragment_settings_general.xml settings/general/saved-authorizations row Wrap ‘Saved authorizations’ settings row in a MaterialCardView so it reads as a tappable action; matches the Google Account card visual language directly above it. Portrait + landscape parity. [branch: DEBUG-v007]
2026-05-21 14:29:29 PLAN/S0283_vr-immersive-interactive-controls-hud.md spec-check Audit S0283 -> Partial; PASS/WARN/FAIL 24/2/0; 7 Timber.d S0283 tags removed on BlockNeedUserTest->Partial transition [branch: DEBUG-v007]
2026-05-21 14:29:47 app_v2/src/main/res/layout/fragment_settings_general.xml Settings > General reset button width Portrait: btnResetGeneralSection width match_parent -> wrap_content to size by text, mirroring landscape [branch: DEBUG-v007]
2026-05-21 14:33:33 app_v2/src/main/res/layout/fragment_settings_destinations.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 > Destinations: + Add button inline with Max recipients Portrait only: move btnAddDestination into Max Recipients row before the input; rename add_destination to ‘+ Add’/’+ Добавить’/’+ Додати’ (EN/RU/UK) [branch: DEBUG-v007]
2026-05-21 14:33:36 app_v2/src/main/res/layout/fragment_settings_backup_restore.xml Settings > Backup/Restore: unify Google Drive buttons visual style Unify Backup and Restore Google Drive buttons: both now use OutlinedM3 style and identical width (Backup wrapped in horizontal LinearLayout with invisible placeholder matching help-icon footprint) [branch: DEBUG-v007]
2026-05-21 14:37:39 app_v2/src/main/res/layout/fragment_settings_destinations.xml,app_v2/src/main/res/layout-land/fragment_settings_destinations.xml,app_v2/src/main/res/drawable/ic_delete_sweep.xml settings/operations/scheduled-operations toolbar Convert ‘Add’ and ‘Clear all’ scheduled-ops buttons to Material3 icon buttons: btnAddScheduledOp uses ic_add (outlined icon-button), btnClearAllScheduled uses new ic_delete_sweep with colorError tint. btnScheduledLog kept as text. Portrait + landscape parity. [branch: DEBUG-v007]
2026-05-21 14:39:27 app_v2/src/main/res/layout/fragment_settings_destinations.xml,app_v2/src/main/res/layout-land/fragment_settings_destinations.xml,app_v2/src/main/res/drawable/ic_history.xml settings/operations/scheduled-operations toolbar Unify scheduled-ops toolbar: btnScheduledLog also becomes a Material3 icon button using new ic_history drawable. All three buttons (Add / Log / Clear) now share the same visual type. [branch: DEBUG-v007]
2026-05-21 14:39:34 app_v2/src/vr/cpp/xr_session.h spec-fix S0283 Declare xr_session_get_fps() atomic getter for the EMA-smoothed OpenXR frame rate [branch: DEBUG-v007]
2026-05-21 14:39:34 app_v2/src/vr/cpp/xr_session.cpp spec-fix S0283 Sample predictedDisplayTime deltas into g_currentFps (EMA alpha=0.1); reset on xr_session_start; expose via xr_session_get_fps() [branch: DEBUG-v007]
2026-05-21 14:39:34 app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp spec-fix S0283 JNI bridge Java_nativeGetCurrentFps to xr_session_get_fps() [branch: DEBUG-v007]
2026-05-21 14:39:34 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/DiagnosticXrRuntime.kt spec-fix S0283 Add getCurrentFps(): Float to interface [branch: DEBUG-v007]
2026-05-21 14:39:34 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt spec-fix S0283 Implement getCurrentFps() via nativeGetCurrentFps() external [branch: DEBUG-v007]
2026-05-21 14:39:34 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrRenderThread.kt spec-fix S0283 Replace hardcoded 60.0 currentFps stub with delegating val from runtime; remove TODO [branch: DEBUG-v007]
2026-05-21 14:39:34 PLAN/S0283_vr-immersive-interactive-controls-hud.md spec-fix S0283 Annotate Last Audit: WARN 2 FIXED (FPS JNI wiring), WARN 1 SKIPPED per owner direction [branch: DEBUG-v007]
2026-05-21 14:41:38 PLAN/S0283_vr-immersive-interactive-controls-hud.md spec-check Audit S0283 -> Verified; PASS/WARN/FAIL 25/0/0; FPS wiring verified end-to-end; LOC budget concern skipped per owner direction [branch: DEBUG-v007]
2026-05-21 14:44:57 PLAN/S0284_settings-search-auto-index.md spec Add strategic spec S0284 for settings-search-auto-index [branch: DEBUG-v007]
2026-05-21 14:53:28 PLAN/S0284_settings-search-auto-index/INDEX.md spec-tech Create tactical plan for S0284 [branch: DEBUG-v007]
2026-05-21 14:53:29 PLAN/S0284_settings-search-auto-index/PHASE_01__foundation-types.md spec-tech S0284 Phase 01: foundation-types [branch: DEBUG-v007]
2026-05-21 14:53:29 PLAN/S0284_settings-search-auto-index/PHASE_02__layout-xml-source.md spec-tech S0284 Phase 02: layout-xml-source [branch: DEBUG-v007]
2026-05-21 14:53:29 PLAN/S0284_settings-search-auto-index/PHASE_03__locale-keyword-collector.md spec-tech S0284 Phase 03: locale-keyword-collector [branch: DEBUG-v007]
2026-05-21 14:53:29 PLAN/S0284_settings-search-auto-index/PHASE_04__registry-refactor-and-di.md spec-tech S0284 Phase 04: registry-refactor-and-di [branch: DEBUG-v007]
2026-05-21 14:53:29 PLAN/S0284_settings-search-auto-index/PHASE_05__docs-catalog-cleanup.md spec-tech S0284 Phase 05: docs-catalog-cleanup [branch: DEBUG-v007]
2026-05-21 14:53:29 PLAN/S0284_settings-search-auto-index.md spec-tech S0284 status -> Tactical [branch: DEBUG-v007]
2026-05-21 14:57:08 CLAUDE.md CLAUDE.md Document that persistent logs must not embed spec ticket ids [branch: DEBUG-v007]
2026-05-21 14:57:09 AGENTS.md AGENTS.md Add logging rule for persistent messages without spec ticket ids [branch: DEBUG-v007]
2026-05-21 14:57:09 .github/copilot-instructions.md copilot-instructions Add persistent logging rule forbidding spec ticket ids [branch: DEBUG-v007]
2026-05-21 14:58:35 PLAN/S0140_extend-market-url-coverage.md spec-check Audit BlockNeedUserTest -> Partial; PASS/WARN/FAIL 8/2/0; runtime pillars P/Q/R+S/U exercised in log_20260521_141313; gaps §11.9 lint-gate + §11.11 FEATURES platform-names persist. [branch: DEBUG-v007]
2026-05-21 14:58:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/UrlInTextDetector.kt spec-check S0140 debug Timber.d tag removed on status flip out of BlockNeedUserTest. [branch: DEBUG-v007]
2026-05-21 14:58:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt spec-check S0140 debug Timber.d tag removed on status flip out of BlockNeedUserTest. [branch: DEBUG-v007]
2026-05-21 14:58:35 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt spec-check S0140 debug Timber.d tag removed on status flip out of BlockNeedUserTest. [branch: DEBUG-v007]
2026-05-21 14:58:35 app_v2/src/main/java/com/sza/fastmediasorter/data/link/StructuredMediaSniffer.kt spec-check S0140 debug Timber.d tag removed on status flip out of BlockNeedUserTest; unused Timber import dropped. [branch: DEBUG-v007]
2026-05-21 14:58:35 app_v2/src/main/java/com/sza/fastmediasorter/data/link/InvisibleWebViewExtractionStrategy.kt spec-check S0140 debug Timber.d tag removed on status flip out of BlockNeedUserTest. [branch: DEBUG-v007]
2026-05-21 14:58:35 app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt spec-check S0140 debug Timber.d tag removed on status flip out of BlockNeedUserTest. [branch: DEBUG-v007]
2026-05-21 15:00:12 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/NewPipeOkHttpDownloader.kt cleanup-archived-spec S0117 (Archived): stripped spec-id prefix from Timber.i + inline comments; kept operational logging content intact. [branch: DEBUG-v007]
2026-05-21 15:00:12 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/NewPipeSiteExtractionStrategy.kt cleanup-archived-spec S0117 (Archived): stripped spec-id prefix from Timber.w + inline comment; kept error-reporting content intact. [branch: DEBUG-v007]
2026-05-21 15:03:49 CLAUDE.md debug ticket-id policy Reserve Sxxxx log prefixes for temporary BlockNeedUserTest probes only in persistent runtime messages [branch: DEBUG-v007]
2026-05-21 15:03:49 .github/copilot-instructions.md copilot logging rules Reserve Sxxxx log prefixes for temporary BlockNeedUserTest probes only in persistent runtime messages [branch: DEBUG-v007]
2026-05-21 15:03:49 AGENTS.md agent protocol Reserve Sxxxx log prefixes for temporary BlockNeedUserTest probes only in persistent runtime messages [branch: DEBUG-v007]
2026-05-21 15:03:49 .github/agents/*.agent.md github agent profiles Reserve Sxxxx log prefixes for temporary BlockNeedUserTest probes only in persistent runtime messages [branch: DEBUG-v007]
2026-05-21 15:03:50 .github/prompts/*.prompt.md github spec and log prompts Reserve Sxxxx log prefixes for temporary BlockNeedUserTest probes and flag I/W/E uses as invalid instrumentation [branch: DEBUG-v007]
2026-05-21 15:03:50 .claude/commands/*.md claude command mirrors Mirror the Sxxxx debug-probe reservation rule and invalid instrumentation handling into Claude command prompts [branch: DEBUG-v007]
2026-05-21 15:05:14 PLAN/S0260_nolegal-ytmusic-audio-share-recovery.md spec-check Audit: file header Tactical -> BlockNeedUserTest (sync with journal); ## Last Audit added; no flip - log lacks music.youtube.com/watch?v= evidence; suspected APK vs source skew on LinkAutoDownloadCoordinator.kt:105-112 audioOnly-without-cookies propagation. [branch: DEBUG-v007]
2026-05-21 15:06:01 PLAN/S0257_download-notification-tap-opens-player.md spec-check Audit refresh: PendingIntent build path exercised 2x in log_20260521_141313 (uris 17498, 17499); tap behaviour still untested - status stays BlockNeedUserTest, Manual block lists tap scenarios. [branch: DEBUG-v007]
2026-05-21 15:09:06 app_v2/src/main/AndroidManifest.xml quick-fix Add tools:remove=’android:maxSdkVersion’ to WAKE_LOCK uses-permission. Fixes WorkManager.startForeground SecurityException on API 26+ caused by Chucker library (4.0.0) merging WAKE_LOCK with maxSdkVersion=25. Confirmed by manifest-merger-blame-noLegal-debug-report.txt: [com.github.chuckerteam.chucker:library:4.0.0] AndroidManifest.xml:17:9-35. [branch: DEBUG-v007]
2026-05-21 15:09:54 PLAN/S0285_nolegal-ocr-cyrillic.md spec Add strategic spec S0285 for nolegal-ocr-cyrillic (OCR Cyrillic research, two-axis STANDARD vs noLegal, follow-up under S0156) [branch: DEBUG-v007]
2026-05-21 15:13:06 PLAN/S0284_settings-search-auto-index.md spec-update S0284 §6 research items 1-4 resolved (defaults) [branch: DEBUG-v007]
2026-05-21 15:14:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/RawSettingsSearchEntry.kt spec-dev S0284 Phase 01.1: add RawSettingsSearchEntry data class [branch: DEBUG-v007]
2026-05-21 15:14:49 scripts/builders/build-nolegal-debug.ps1 quick-fix Replace UTF-8 em-dash with ASCII hyphen on lines 8 (Distribution comment) and 18 (versionCode comment). Fixes Windows PowerShell ParserError ‘Unexpected token )’ when run via a.ps1 nd without UTF-8 BOM. pwsh 7 handled the file fine; legacy PS 5 chokes on multi-byte UTF-8 unless BOM is present. Parse-test confirmed: System.Management.Automation.Language.Parser PARSE OK. [branch: DEBUG-v007]
2026-05-21 15:14:49 scripts/builders/build-nolegal-device.ps1 quick-fix Replace UTF-8 em-dash with ASCII hyphen on line 22 (versionCode comment). Same Windows PowerShell encoding fix as build-nolegal-debug.ps1. [branch: DEBUG-v007]
2026-05-21 15:14:49 scripts/builders/build-nolegal-release.ps1 quick-fix Replace UTF-8 em-dash with ASCII hyphen on lines 8 (Distribution comment) and 18 (versionCode comment). Same Windows PowerShell encoding fix as build-nolegal-debug.ps1. [branch: DEBUG-v007]
2026-05-21 15:15:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchSource.kt spec-dev S0284 Phase 01.2: add SettingsSearchSource interface [branch: DEBUG-v007]
2026-05-21 15:17:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchTabMapping.kt spec-dev S0284 Phase 01.3: add SettingsSearchTabMapping [branch: DEBUG-v007]
2026-05-21 15:17:28 PLAN/S0285_nolegal-ocr-cyrillic/INDEX.md spec-tech Create tactical plan INDEX for S0285 [branch: DEBUG-v007]
2026-05-21 15:17:28 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_01__foundations.md spec-tech Phase 01: foundations [branch: DEBUG-v007]
2026-05-21 15:17:28 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_02__store-safe-baseline.md spec-tech Phase 02: store-safe-baseline [branch: DEBUG-v007]
2026-05-21 15:17:28 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_03__on-device-deep-learning.md spec-tech Phase 03: on-device-deep-learning [branch: DEBUG-v007]
2026-05-21 15:17:29 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_04__commercial-pathways.md spec-tech Phase 04: commercial-pathways [branch: DEBUG-v007]
2026-05-21 15:17:29 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_05__sidecar-runtimes.md spec-tech Phase 05: sidecar-runtimes [branch: DEBUG-v007]
2026-05-21 15:17:29 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_06__cross-axis-synthesis.md spec-tech Phase 06: cross-axis-synthesis [branch: DEBUG-v007]
2026-05-21 15:17:29 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v007]
2026-05-21 15:17:29 PLAN/S0285_nolegal-ocr-cyrillic.md spec-tech S0285 Status -> Tactical [branch: DEBUG-v007]
2026-05-21 15:18:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchKeywordCollector.kt spec-dev S0284 Phase 01.4: add SettingsSearchKeywordCollector interface [branch: DEBUG-v007]
2026-05-21 15:20:04 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-dev S0285 phase-01.1: create OCR Cyrillic research doc header [branch: DEBUG-v007]
2026-05-21 15:20:29 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md spec Add strategic spec S0286 - compliance lint-gate + FEATURES platform-name sanitization (split out from S0140 §11.9 + §11.11 follow-up gaps). Tier 3, Priority 65. Five §6 Open questions (YouTube edge-case, Gradle vs Lint, deny-list source location, FEATURES under gate). Approval gate PASS. [branch: DEBUG-v007]
2026-05-21 15:20:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchLayoutCatalog.kt spec-dev S0284 Phase 02.1: add layout catalog [branch: DEBUG-v007]
2026-05-21 15:21:08 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-dev S0285 phase-01.2: append taxonomy and verdict legend [branch: DEBUG-v007]
2026-05-21 15:21:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/XmlAttributeReader.kt spec-dev S0284 Phase 02.2: add XmlAttributeReader helper [branch: DEBUG-v007]
2026-05-21 15:21:50 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-dev S0285 phase-01.3: append 5 quality scenarios (Stolp D) [branch: DEBUG-v007]
2026-05-21 15:22:23 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-dev S0285 phase-01.4: append 7 category sub-section placeholders [branch: DEBUG-v007]
2026-05-21 15:23:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/LayoutSettingsSearchSource.kt spec-dev S0284 Phase 02.3: implement layout XML source extractor [branch: DEBUG-v007]
2026-05-21 15:28:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/XmlAttributeReader.kt spec-dev S0284 Phase 02 fix: switch parser param to XmlResourceParser [branch: DEBUG-v007]
2026-05-21 15:28:08 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-research Populate S0285 phase 02 step 02.1 ML Kit baseline findings [branch: DEBUG-v007]
2026-05-21 15:28:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/LayoutSettingsSearchSource.kt spec-dev S0284 Phase 02 fix: align scan/buildEntry to XmlResourceParser [branch: DEBUG-v007]
2026-05-21 15:29:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SupportedSearchLocales.kt spec-dev S0284 Phase 03.1: add SupportedSearchLocales constant [branch: DEBUG-v007]
2026-05-21 15:30:42 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-research Populate S0285 phase 02 step 02.2 Tesseract model findings [branch: DEBUG-v007]
2026-05-21 15:30:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/LocalizedKeywordCollector.kt spec-dev S0284 Phase 03.2: implement LocalizedKeywordCollector [branch: DEBUG-v007]
2026-05-21 15:31:53 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-research Populate S0285 phase 02 step 02.3 quality blocks for ML Kit and Tesseract [branch: DEBUG-v007]
2026-05-21 15:32:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsSearchIndex.kt spec-dev S0284 Phase 03.3: strip static registry, keep data class + enum only [branch: DEBUG-v007]
2026-05-21 15:33:04 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-research Populate S0285 phase 02 step 02.4 budget blocks for ML Kit and Tesseract [branch: DEBUG-v007]
2026-05-21 15:33:28 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-research Populate S0285 phase 02 step 02.5 phase summary [branch: DEBUG-v007]
2026-05-21 15:34:15 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_02__store-safe-baseline.md spec-phase Mark S0285 phase 02 completed with step logs [branch: DEBUG-v007]
2026-05-21 15:34:15 PLAN/S0285_nolegal-ocr-cyrillic/INDEX.md spec-index Advance S0285 tactical index after phase 02 completion [branch: DEBUG-v007]
2026-05-21 15:36:59 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-research Populate S0285 phase 03 step 03.1 PaddleOCR mobile findings [branch: DEBUG-v007]
2026-05-21 15:37:34 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md spec-tech Advance S0286 to Tactical and attach tactical plan [branch: DEBUG-v007]
2026-05-21 15:37:34 PLAN/S0286_compliance-lint-gate-and-features-sanitization/INDEX.md spec-tech Create tactical plan index for S0286 [branch: DEBUG-v007]
2026-05-21 15:37:34 PLAN/S0286_compliance-lint-gate-and-features-sanitization/PHASE_01__gate-foundation.md spec-tech Author Phase 01 for S0286 compliance gate foundation [branch: DEBUG-v007]
2026-05-21 15:37:34 PLAN/S0286_compliance-lint-gate-and-features-sanitization/PHASE_02__features-sanitization.md spec-tech Author Phase 02 for S0286 public FEATURES sanitization [branch: DEBUG-v007]
2026-05-21 15:37:34 PLAN/S0286_compliance-lint-gate-and-features-sanitization/PHASE_03__docs-catalog-cleanup.md spec-tech Author Phase 03 for S0286 validation and parent-audit closure [branch: DEBUG-v007]
2026-05-21 15:39:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchAvailability.kt spec-dev S0284 Phase 04.1: SettingsSearchAvailability interface + multibinding qualifier [branch: DEBUG-v007]
2026-05-21 15:41:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchRegistry.kt spec-dev S0284 Phase 04.2: SettingsSearchRegistry Hilt-managed class [branch: DEBUG-v007]
2026-05-21 15:42:01 app_v2/src/main/java/com/sza/fastmediasorter/di/SettingsSearchModule.kt spec-dev S0284 Phase 04.3: Hilt module for settings search [branch: DEBUG-v007]
2026-05-21 15:42:49 app_v2/build.gradle.kts verifyNoPlatformNames Add cacheable platform-name compliance gate and preBuild wiring [branch: DEBUG-v007]
2026-05-21 15:42:50 app_v2/compliance/platform-name-denylist.txt platform-name deny-list Add forbidden platform token registry for market-source compliance checks [branch: DEBUG-v007]
2026-05-21 15:42:50 app_v2/compliance/platform-name-baseline.txt platform-name baseline Add reviewed legacy suppressions for the first compliance gate rollout [branch: DEBUG-v007]
2026-05-21 15:42:50 docs/COMPLIANCE_DENYLIST.md compliance deny-list doc Document the compliance deny-list workflow and suppression rules [branch: DEBUG-v007]
2026-05-21 15:42:50 docs/FEATURES.md public features inventory Sanitize named platform references in the English public feature inventory [branch: DEBUG-v007]
2026-05-21 15:42:51 docs/FEATURES_RU.md public features inventory Sanitize named platform references in the Russian public feature inventory [branch: DEBUG-v007]
2026-05-21 15:42:51 docs/FEATURES_UK.md public features inventory Sanitize named platform references in the Ukrainian public feature inventory [branch: DEBUG-v007]
2026-05-21 15:50:21 app_v2/build.gradle.kts verifyNoPlatformNames Fix configuration-cache compatibility for the compliance verification task [branch: DEBUG-v007]
2026-05-21 15:50:21 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md S0286 strategic spec Advance S0286 to Implemented and align the strategic closure criteria with current audit reality [branch: DEBUG-v007]
2026-05-21 15:50:21 PLAN/S0286_compliance-lint-gate-and-features-sanitization/INDEX.md S0286 tactical index Mark all S0286 implementation phases done and record validation completion [branch: DEBUG-v007]
2026-05-21 15:50:21 PLAN/S0286_compliance-lint-gate-and-features-sanitization/PHASE_01__gate-foundation.md S0286 phase 01 Record completed gate-foundation work and validation evidence [branch: DEBUG-v007]
2026-05-21 15:50:22 PLAN/S0286_compliance-lint-gate-and-features-sanitization/PHASE_02__features-sanitization.md S0286 phase 02 Record completed public FEATURES sanitization work and baseline cleanup state [branch: DEBUG-v007]
2026-05-21 15:50:22 PLAN/S0286_compliance-lint-gate-and-features-sanitization/PHASE_03__docs-catalog-cleanup.md S0286 phase 03 Record final validation evidence and remaining formal spec-check note [branch: DEBUG-v007]
2026-05-21 15:50:22 PLAN/S0140_extend-market-url-coverage.md S0140 last audit Close the former S0286-related WARN items in the parent S0140 audit block [branch: DEBUG-v007]
2026-05-21 15:50:43 PLAN/S0286_compliance-lint-gate-and-features-sanitization/INDEX.md S0286 tactical index Clarify that formal spec-check closure is separate from completed implementation phases [branch: DEBUG-v007]
2026-05-21 15:52:10 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-research Phase 07 close-out for S0285 [branch: DEBUG-v007]
2026-05-21 15:52:10 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_03__on-device-deep-learning.md S0285 Phase 03 Mark phase 03 done after filling categories 3 and 4 [branch: DEBUG-v007]
2026-05-21 15:52:10 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_04__commercial-pathways.md S0285 Phase 04 Mark phase 04 done after filling categories 5 and 6 [branch: DEBUG-v007]
2026-05-21 15:52:10 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_05__sidecar-runtimes.md S0285 Phase 05 Mark phase 05 done after filling category 7 [branch: DEBUG-v007]
2026-05-21 15:52:10 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_06__cross-axis-synthesis.md S0285 Phase 06 Mark phase 06 done after cross-axis synthesis and follow-up proposals [branch: DEBUG-v007]
2026-05-21 15:52:10 PLAN/S0285_nolegal-ocr-cyrillic/PHASE_07__docs-catalog-cleanup.md S0285 Phase 07 Mark phase 07 done after close-out and skip confirmations [branch: DEBUG-v007]
2026-05-21 15:52:10 PLAN/S0285_nolegal-ocr-cyrillic/INDEX.md S0285 tactical index Close tactical index with 7 of 7 phases done [branch: DEBUG-v007]
2026-05-21 15:59:17 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md spec-check Audit S0286 -> Partial; PASS/WARN/FAIL 13/3/0 [branch: DEBUG-v007]
2026-05-21 16:00:14 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md spec-fix Annotate Last Audit (S0286): 3 WARN -> FOLLOW-UP [branch: DEBUG-v007]
2026-05-21 16:01:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-dev S0284 Phase 04.4: inject SettingsSearchRegistry, drop static references [branch: DEBUG-v007]
2026-05-21 16:04:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-dev S0284 Phase 04.5: insert S0284 Timber tag in openSearchOverlay [branch: DEBUG-v007]
2026-05-21 16:04:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchRegistry.kt spec-dev S0284 Phase 04.5: S0284 Timber tag in lazy index init [branch: DEBUG-v007]
2026-05-21 16:04:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/LayoutSettingsSearchSource.kt spec-dev S0284 Phase 04.5: S0284 Timber tag on per-layout scan [branch: DEBUG-v007]
2026-05-21 16:07:26 dev/CATALOG/scripts/scan.ps1 spec-dev S0284 Phase 05.1: add src/standard, src/lite, src/photos, src/legacy to scan source roots [branch: DEBUG-v007]
2026-05-21 16:08:09 app_v2/src/standard/java/com/sza/fastmediasorter/di/StandardSettingsSearchAvailabilityModule.kt S0284 Phase 04.1: standard flavor multibinding for settings search [branch: DEBUG-v007]
2026-05-21 16:08:09 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalSettingsSearchAvailabilityModule.kt S0284 Phase 04.1: noLegal flavor multibinding for settings search [branch: DEBUG-v007]
2026-05-21 16:08:09 app_v2/src/lite/java/com/sza/fastmediasorter/di/LiteSettingsSearchAvailabilityModule.kt S0284 Phase 04.1: lite flavor multibinding (images+video) [branch: DEBUG-v007]
2026-05-21 16:08:09 app_v2/src/photos/java/com/sza/fastmediasorter/di/PhotosSettingsSearchAvailabilityModule.kt S0284 Phase 04.1: photos flavor multibinding (images only) [branch: DEBUG-v007]
2026-05-21 16:08:09 app_v2/src/legacy/java/com/sza/fastmediasorter/di/LegacySettingsSearchAvailabilityModule.kt S0284 Phase 04.1: legacy flavor multibinding for settings search [branch: DEBUG-v007]
2026-05-21 16:08:09 app_v2/src/vr/java/com/sza/fastmediasorter/di/VrSettingsSearchAvailabilityModule.kt S0284 Phase 04.1: vr flavor multibinding for settings search [branch: DEBUG-v007]
2026-05-21 16:12:08 PLAN/S0285_nolegal-ocr-cyrillic.md spec-update Incorporate owner guidance: quality-first install-on-demand OCR packs [branch: DEBUG-v007]
2026-05-21 16:12:09 PLAN/S0156_nolegal-capability-surface-audit/ocr-cyrillic.md spec-research Refine budget framing after owner guidance on OCR package downloads [branch: DEBUG-v007]
2026-05-21 16:19:34 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation.md spec Add strategic spec S0287 for S0285 [branch: DEBUG-v007]
2026-05-21 16:19:49 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md spec Add strategic spec S0288 for S0285 [branch: DEBUG-v007]
2026-05-21 16:29:19 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation.md S0287 Update strategic spec status to Tactical [branch: DEBUG-v007]
2026-05-21 16:29:19 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation/INDEX.md S0287 Create tactical INDEX spec [branch: DEBUG-v007]
2026-05-21 16:29:19 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation/PHASE_01__foundations-override.md S0287 Create Phase 1 spec: foundations and override [branch: DEBUG-v007]
2026-05-21 16:29:19 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation/PHASE_02__network-downloader.md S0287 Create Phase 2 spec: network downloader [branch: DEBUG-v007]
2026-05-21 16:29:19 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation/PHASE_03__ui-controls.md S0287 Create Phase 3 spec: UI controls [branch: DEBUG-v007]
2026-05-21 16:29:19 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation/PHASE_04__docs-catalog-cleanup.md S0287 Create Phase 4 spec: docs and catalog cleanup [branch: DEBUG-v007]
2026-05-21 16:31:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TesseractModelManager.kt TesseractModelManager Added TesseractModelManager helper to handle dynamic tessdata_best model downloading, verification and deletion [branch: DEBUG-v007]
2026-05-21 16:31:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TesseractManager.kt TesseractManager Updated Tesseract init to support fallback initialization and dynamic path redirection to tessdata_best [branch: DEBUG-v007]
2026-05-21 16:33:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt S0287 Integrate high-quality Tesseract models downloading and management UI controls [branch: DEBUG-v007]
2026-05-21 16:35:38 docs/FEATURES_RU.md, docs/FEATURES_UK.md documentation Update Russian and Ukrainian features documentation for high-quality Tesseract models integration (S0287) [branch: DEBUG-v007]
2026-05-21 16:47:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TesseractModelManager.kt TesseractModelManager Add pinned tessdata_best SHA-256 integrity validation for S0287 downloads [branch: DEBUG-v007]
2026-05-21 16:47:23 docs/FEATURES.md S0287 docs Document passive SHA-256 validated tessdata_best model downloads in EN features [branch: DEBUG-v007]
2026-05-21 16:47:23 docs/FEATURES_RU.md S0287 docs Document passive SHA-256 validated tessdata_best model downloads in RU features [branch: DEBUG-v007]
2026-05-21 16:47:23 docs/FEATURES_UK.md S0287 docs Document passive SHA-256 validated tessdata_best model downloads in UK features [branch: DEBUG-v007]
2026-05-21 16:48:05 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation.md spec-check Audit S0287 -> Verified; PASS/WARN/FAIL 18/0/0 [branch: DEBUG-v007]
2026-05-21 16:48:05 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation/INDEX.md S0287 Mark tactical plan complete after implementation audit [branch: DEBUG-v007]
2026-05-21 16:48:06 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation/PHASE_03__ui-controls.md S0287 Mark UI controls phase complete after implementation audit [branch: DEBUG-v007]
2026-05-21 16:48:06 PLAN/S0287_tesseract-cyrillic-model-swap-evaluation/PHASE_04__docs-catalog-cleanup.md S0287 Mark docs and catalog cleanup phase complete after implementation audit [branch: DEBUG-v007]
2026-05-21 16:49:28 dev/CATALOG/app_v2.jsonl catalog Mark TesseractModelManager role/status after S0287 checksum validation [branch: DEBUG-v007]
2026-05-21 16:49:42 PLAN/spec-catalog.jsonl spec-check Refresh S0287 Verified closure timestamp after implementation audit [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md spec-tech Create tactical plan for S0288 [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_01__ocr-abstraction-foundations.md spec-tech Phase 01: ocr-abstraction-foundations [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_02__settings-ui-extension.md spec-tech Phase 02: settings-ui-extension [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_03__paddle-lite-runtime.md spec-tech Phase 03: paddle-lite-runtime [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_04__paddle-ocr-engine.md spec-tech Phase 04: paddle-ocr-engine [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_05__paddle-ocr-model-manager.md spec-tech Phase 05: paddle-ocr-model-manager [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_06__translation-manager-integration.md spec-tech Phase 06: translation-manager-integration [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v007]
2026-05-21 17:10:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md spec-tech Status -> Tactical [branch: DEBUG-v007]
2026-05-21 17:12:40 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md S0288 Updated strategic spec with progress animation requirement and closed research questions. [branch: DEBUG-v007]
2026-05-21 17:12:41 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 Unlocked spec blockers: model conversion completed, latency research skipped per user request. [branch: DEBUG-v007]
2026-05-21 17:12:41 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_06__translation-manager-integration.md S0288 Added Step 06.4 to phase 6 plan for progress animation integration in PlayerImageTranslationManager. [branch: DEBUG-v007]
2026-05-21 17:28:07 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md S0288 strategic spec Fix duplicate sections 5/6 and concatenation corruption in sections 1/6.2; consolidate Research items as Closed (resolved + skipped with progress animation) [branch: DEBUG-v007]
2026-05-21 17:30:11 app_v2/src/main/java/com/sza/fastmediasorter/domain/ocr/OfflineOcrEngine.kt OfflineOcrEngine Create OfflineOcrEngine interface [branch: DEBUG-v007]
2026-05-21 17:30:45 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_01__ocr-abstraction-foundations.md PHASE_01 Mark Step 01.1 done [branch: DEBUG-v007]
2026-05-21 17:30:46 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md INDEX.md Update INDEX step count [branch: DEBUG-v007]
2026-05-21 17:31:03 app_v2/src/main/java/com/sza/fastmediasorter/domain/ocr/OcrTextBlock.kt OcrTextBlock Create OcrTextBlock data class [branch: DEBUG-v007]
2026-05-21 17:31:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_01__ocr-abstraction-foundations.md PHASE_01 Mark Step 01.2 done [branch: DEBUG-v007]
2026-05-21 17:31:37 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md INDEX.md Update INDEX step count to 2/4 [branch: DEBUG-v007]
2026-05-21 17:32:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TesseractManager.kt TesseractManager Refactor TesseractManager to implement OfflineOcrEngine [branch: DEBUG-v007]
2026-05-21 17:32:48 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_01__ocr-abstraction-foundations.md PHASE_01 Mark Step 01.3 done [branch: DEBUG-v007]
2026-05-21 17:32:49 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md INDEX.md Update INDEX step count to 3/4 [branch: DEBUG-v007]
2026-05-21 17:33:09 app_v2/src/main/java/com/sza/fastmediasorter/di/OcrModule.kt OcrModule Create Hilt OcrModule [branch: DEBUG-v007]
2026-05-21 17:33:43 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_01__ocr-abstraction-foundations.md PHASE_01 Mark Step 01.4 done [branch: DEBUG-v007]
2026-05-21 17:33:44 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md INDEX.md Update INDEX step count to 4/4 [branch: DEBUG-v007]
2026-05-21 17:34:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TesseractManager.kt TesseractManager Add override modifier to release method [branch: DEBUG-v007]
2026-05-21 17:38:47 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_01__ocr-abstraction-foundations.md PHASE_01 Mark Phase 01 as completed [branch: DEBUG-v007]
2026-05-21 17:38:47 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md INDEX.md Mark Phase 01 as completed in INDEX [branch: DEBUG-v007]
2026-05-21 17:41:12 app_v2/src/main/res/layout-land/fragment_settings_other.xml fragment_settings_other_land_layout Add ocrEngineType and paddleOcrModel spinners to landscape layout [branch: DEBUG-v007]
2026-05-21 17:41:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt OtherMediaSettingsFragment Implement ocrEngineType and paddleOcrModel spinners and visibility logic [branch: DEBUG-v007]
2026-05-21 17:57:42 PLAN/S0002_decompose-giant-files.md spec-update Refinement (Antigravity, focus: language, structure, verifiability) [branch: DEBUG-v007]
2026-05-21 17:57:59 app_v2/src/noLegal/java/com/baidu/paddle/lite Paddle-Lite Java wrappers Add official Paddle-Lite Java API wrappers for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:57:59 app_v2/src/noLegal/jniLibs/arm64-v8a/libpaddle_light_api_shared.so Paddle-Lite native runtime Add 16 KB-aligned Paddle-Lite light API native runtime for noLegal [branch: DEBUG-v007]
2026-05-21 17:57:59 app_v2/src/noLegal/jniLibs/arm64-v8a/libpaddle_lite_jni.so Paddle-Lite JNI runtime Add 16 KB-aligned Paddle-Lite Java JNI runtime for noLegal [branch: DEBUG-v007]
2026-05-21 17:58:00 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_03__paddle-lite-runtime.md S0288 Phase 03 Record Paddle-Lite runtime artifact import evidence [branch: DEBUG-v007]
2026-05-21 17:58:00 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 tactical index Unblock Paddle-Lite runtime phase after artifact import [branch: DEBUG-v007]
2026-05-21 17:59:03 app_v2/src/noLegal/java/com/baidu/paddle/lite/ConfigBase.java Paddle-Lite Java API Add official Paddle-Lite Java wrapper source for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:59:03 app_v2/src/noLegal/java/com/baidu/paddle/lite/CxxConfig.java Paddle-Lite Java API Add official Paddle-Lite Java wrapper source for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:59:03 app_v2/src/noLegal/java/com/baidu/paddle/lite/MobileConfig.java Paddle-Lite Java API Add official Paddle-Lite Java wrapper source for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:59:04 app_v2/src/noLegal/java/com/baidu/paddle/lite/PaddlePredictor.java Paddle-Lite Java API Add official Paddle-Lite Java wrapper source for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:59:04 app_v2/src/noLegal/java/com/baidu/paddle/lite/Tensor.java Paddle-Lite Java API Add official Paddle-Lite Java wrapper source for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:59:04 app_v2/src/noLegal/java/com/baidu/paddle/lite/Place.java Paddle-Lite Java API Add official Paddle-Lite Java wrapper source for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:59:04 app_v2/src/noLegal/java/com/baidu/paddle/lite/PowerMode.java Paddle-Lite Java API Add official Paddle-Lite Java wrapper source for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:59:05 app_v2/src/noLegal/java/com/baidu/paddle/lite/PaddleLiteInitializer.java Paddle-Lite Java API Add official Paddle-Lite Java wrapper source for noLegal OCR runtime [branch: DEBUG-v007]
2026-05-21 17:59:43 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md S0288 strategic spec Resume spec after resolving Paddle-Lite runtime blocker [branch: DEBUG-v007]
2026-05-21 17:59:43 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_03__paddle-lite-runtime.md S0288 Phase 03 Close Paddle-Lite runtime phase after build and APK verification [branch: DEBUG-v007]
2026-05-21 17:59:43 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 tactical index Mark Paddle-Lite runtime phase done [branch: DEBUG-v007]
2026-05-21 18:01:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDrawingSaveHelper.kt PlayerDrawingSaveHelper Created helper and extracted draw overlay/save logic S0107 from PlayerActivity to reduce its size to ~1220 LOC. [branch: DEBUG-v007]
2026-05-21 20:26:38 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/PaddleOcrModelManager.kt PaddleOcrModelManager Add noLegal PaddleOCR model file presence manager [branch: DEBUG-v007]
2026-05-21 20:28:32 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md S0288 strategic spec Block spec on missing PaddleOCR nb model hosting and hashes [branch: DEBUG-v007]
2026-05-21 20:28:32 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 tactical index Record PaddleOCR model artifact blocker [branch: DEBUG-v007]
2026-05-21 20:28:32 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_05__paddle-ocr-model-manager.md S0288 Phase 05 Record model manager step and missing nb artifact blocker [branch: DEBUG-v007]
2026-05-21 20:49:07 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/PaddleOcrModelManager.kt PaddleOcrModelManager Add verified PaddleX-Lite model download and checksum validation [branch: DEBUG-v007]
2026-05-21 20:49:58 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md S0288 strategic spec Resume spec after resolving PaddleX-Lite model download blocker [branch: DEBUG-v007]
2026-05-21 20:49:58 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 tactical index Unblock PaddleOCR model download step [branch: DEBUG-v007]
2026-05-21 20:49:59 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_05__paddle-ocr-model-manager.md S0288 Phase 05 Close PaddleOCR model download step with verified artifacts [branch: DEBUG-v007]
2026-05-21 20:52:52 app_v2/src/noLegal/java/com/sza/fastmediasorter/domain/ocr/PaddleOcrEngine.kt PaddleOcrEngine Add noLegal PaddleOCR engine shell with model initialization [branch: DEBUG-v007]
2026-05-21 20:52:52 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_04__paddle-ocr-engine.md S0288 Phase 04 Record PaddleOCR engine creation step [branch: DEBUG-v007]
2026-05-21 20:52:52 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 tactical index Advance PaddleOCR engine phase cursor [branch: DEBUG-v007]
2026-05-21 20:55:34 app_v2/src/noLegal/java/com/sza/fastmediasorter/domain/ocr/PaddleOcrEngine.kt PaddleOcrEngine Run PaddleOCR detector classifier and recognizer predictors [branch: DEBUG-v007]
2026-05-21 20:55:34 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_04__paddle-ocr-engine.md S0288 Phase 04 Record PaddleOCR predictor sequence step [branch: DEBUG-v007]
2026-05-21 20:55:34 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 tactical index Advance PaddleOCR engine predictor sequence cursor [branch: DEBUG-v007]
2026-05-21 20:58:18 app_v2/src/main Player big buttons UI Adjust big-buttons player layout and audio info overlay [branch: DEBUG-v007]
2026-05-21 20:58:25 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/PaddleOcrModule.kt PaddleOcrModule Add qualified noLegal PaddleOCR Hilt binding [branch: DEBUG-v007]
2026-05-21 20:58:26 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_04__paddle-ocr-engine.md S0288 Phase 04 Close PaddleOCR engine phase [branch: DEBUG-v007]
2026-05-21 20:58:26 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 tactical index Mark PaddleOCR engine phase done [branch: DEBUG-v007]
2026-05-21 20:59:52 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_05__paddle-ocr-model-manager.md S0288 Phase 05 Close PaddleOCR model manager phase [branch: DEBUG-v007]
2026-05-21 20:59:52 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md S0288 tactical index Mark PaddleOCR model manager phase done [branch: DEBUG-v007]
2026-05-21 21:01:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBigButtonsModeManager.kt PlayerBigButtonsModeManager Remove deprecated scaledDensity use in big button labels [branch: DEBUG-v007]
2026-05-21 21:08:27 app_v2/src/main/java/com/sza/fastmediasorter/domain/ocr/OcrEngineContributor.kt OcrEngineContributor Add flavor OCR engine contributor contract [branch: DEBUG-v007]
2026-05-21 21:09:09 app_v2/src/main/java/com/sza/fastmediasorter/domain/ocr/OfflineOcrEngineProvider.kt OfflineOcrEngineProvider Add runtime OCR engine selection with default fallback [branch: DEBUG-v007]
2026-05-21 21:09:51 app_v2/src/main/java/com/sza/fastmediasorter/di/OcrContributorModule.kt OcrContributorModule Declare empty OCR contributor multibinding set [branch: DEBUG-v007]
2026-05-21 21:10:33 app_v2/src/noLegal/java/com/sza/fastmediasorter/domain/ocr/PaddleOcrEngineContributor.kt PaddleOcrEngineContributor Contribute Paddle OCR engine for noLegal Cyrillic selection [branch: DEBUG-v007]
2026-05-21 21:11:15 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/PaddleOcrModule.kt PaddleOcrModule Register Paddle OCR contributor in noLegal Hilt multibinding [branch: DEBUG-v007]
2026-05-21 21:12:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt TranslationManager Route offline OCR through selected engine provider [branch: DEBUG-v007]
2026-05-21 21:13:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerImageTranslationManager.kt PlayerImageTranslationManager Show OCR translation progress while image translation runs [branch: DEBUG-v007]
2026-05-21 21:28:02 docs/FEATURES_noLegal.md spec-dev S0288 phase 07.1: add Offline PaddleOCR (PP-OCRv5 + Paddle-Lite) section to noLegal feature inventory [branch: DEBUG-v007]
2026-05-21 21:28:02 docs/FEATURES_noLegal_RU.md spec-dev S0288 phase 07.1: mirror Offline PaddleOCR section in RU noLegal feature inventory [branch: DEBUG-v007]
2026-05-21 21:28:03 docs/FEATURES_noLegal_UK.md spec-dev S0288 phase 07.1: mirror Offline PaddleOCR section in UK noLegal feature inventory [branch: DEBUG-v007]
2026-05-21 21:35:45 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md spec-dev S0288 finalize: all 7 phases done; status In Progress -> BlockNeedUserTest pending on-device verification [branch: DEBUG-v007]
2026-05-21 21:35:45 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/INDEX.md spec-dev S0288 phase counter 7/7; Phase 06 and 07 rows flipped to Done; completion gate ticked [branch: DEBUG-v007]
2026-05-21 21:35:45 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_06__translation-manager-integration.md spec-dev S0288 phase 06 closed: standardDebug + noLegalDebug builds pass after TranslationManager OCR engine routing [branch: DEBUG-v007]
2026-05-21 21:35:45 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle/PHASE_07__docs-catalog-cleanup.md spec-dev S0288 phase 07 closed: trilingual noLegal docs, catalog sync, 5 BlockNeedUserTest probes inserted [branch: DEBUG-v007]
2026-05-21 21:35:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt spec-dev S0288 phase 07.4: add BlockNeedUserTest Timber probe at OCR engine selector entry [branch: DEBUG-v007]
2026-05-21 21:35:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt spec-dev S0288 phase 07.4: add BlockNeedUserTest Timber probes at recognizeText and recognizeAndTranslateBlocks entries [branch: DEBUG-v007]
2026-05-21 21:35:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerImageTranslationManager.kt spec-dev S0288 phase 07.4: add BlockNeedUserTest Timber probe at translateCurrentImage entry [branch: DEBUG-v007]
2026-05-21 21:35:45 app_v2/src/noLegal/java/com/sza/fastmediasorter/domain/ocr/PaddleOcrEngine.kt spec-dev S0288 phase 07.4: add BlockNeedUserTest Timber probe at PaddleOcrEngine.recognizeTextBlocks entry [branch: DEBUG-v007]
2026-05-21 22:17:33 PLAN/S0289_tv-keyboard-dpad-navigation.md spec Add strategic spec S0289 for TV keyboard/D-pad navigation in MainActivity and PlayerActivity [branch: DEBUG-v007]
2026-05-21 22:29:49 PLAN/S0289_tv-keyboard-dpad-navigation.md spec Broaden S0289 scope to all in-house user-facing Activities (15 screens), resolve owner UX inputs [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation/INDEX.md spec-tech Create tactical plan for S0289 [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_01__foundations.md spec-tech Phase 01: foundations [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_02__main-activity-focus.md spec-tech Phase 02: main-activity-focus [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_03__player-focus.md spec-tech Phase 03: player-focus [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_04__browse-focus.md spec-tech Phase 04: browse-focus [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_05__forms-group.md spec-tech Phase 05: forms-group [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_06__lists-group.md spec-tech Phase 06: lists-group [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v007]
2026-05-21 22:39:02 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-tech S0289 Status -> Tactical [branch: DEBUG-v007]
2026-05-21 22:40:48 app_v2/src/main/res/drawable/focus_button_background.xml S0289 phase-01.1 Add focus_button_background selector drawable (S0289) [branch: DEBUG-v007]
2026-05-21 22:40:48 app_v2/src/main/res/values/colors.xml S0289 phase-01.1 Add focus_button_stroke color key (light) [branch: DEBUG-v007]
2026-05-21 22:40:48 app_v2/src/main/res/values-night/colors.xml S0289 phase-01.1 Add focus_button_stroke color key (dark) [branch: DEBUG-v007]
2026-05-21 22:41:28 app_v2/src/main/res/drawable/focus_tab_background.xml S0289 phase-01.2 Add focus_tab_background selector drawable (S0289) [branch: DEBUG-v007]
2026-05-21 22:42:45 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt S0289 phase-01.3-01.4 Add shouldRequestInitialFocus() and S0289 Timber probe in BaseActivity [branch: DEBUG-v007]
2026-05-21 22:48:23 app_v2/src/main/java/com/sza/fastmediasorter/util/TextNoteTargetPolicy.kt TextNoteTargetPolicy Allow creating text notes from All Documents via public Documents fallback [branch: DEBUG-v007]
2026-05-21 22:49:27 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Guard VR diagnostic video frame bridge against incompatible decoder output [branch: DEBUG-v007]
2026-05-21 22:50:07 app_v2/src/main/res/layout/activity_main.xml S0289 phase-02.2 Wire focus chain in activity_main.xml portrait (focusable, nextFocus*, focus_button_background foreground) [branch: DEBUG-v007]
2026-05-21 22:51:24 app_v2/src/main/res/layout-land/activity_main.xml S0289 phase-02.3 Mirror focus chain to landscape activity_main.xml [branch: DEBUG-v007]
2026-05-21 22:52:38 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Suppress deprecated Quest permission callback warning after VR frame bridge guard [branch: DEBUG-v007]
2026-05-21 22:55:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt S0289 phase-02.4 MainActivity: initial focus on btnStartPlayer, restitch control-bar chain, restore focus to last-played resource on resume [branch: DEBUG-v007]
2026-05-21 22:56:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsToggleRow.kt;app_v2/src/main/res/layout/view_settings_toggle_row.xml;app_v2/src/vr/res/layout/fragment_vr_settings_block.xml;app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt VR settings 3DVR row - landscape test-immersive button placement SettingsToggleRow: add setHugsTextContent() to collapse text-group weights so a trailing sibling sits next to the label. VR media settings 3DVR block uses it so the Test Immersive button stops flying to the right edge in landscape. [branch: DEBUG-v007]
2026-05-21 22:58:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt S0289 phase-02.5 KeyboardNavigationHandler: propagate UP from row 0 to layout nextFocusUp target [branch: DEBUG-v007]
2026-05-21 22:59:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Remove ineffective open modifiers from final helper methods [branch: DEBUG-v007]
2026-05-21 23:03:56 app_v2/src/main/res/layout/activity_player_unified.xml S0289 phase-03.3 Wire focus chain on primary HUD buttons in activity_player_unified.xml portrait [branch: DEBUG-v007]
2026-05-21 23:05:12 app_v2/src/main/res/layout-land/activity_player_unified.xml S0289 phase-03.4 Mirror focus chain to landscape activity_player_unified.xml [branch: DEBUG-v007]
2026-05-21 23:08:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt S0289 phase-03.5 PlayerActivity: getInitialFocusView, isHudFocused helper, EXTRA_LAST_PLAYED_RESOURCE_ID propagation [branch: DEBUG-v007]
2026-05-21 23:11:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0289 phase-03.6 StandalonePlayerActivity: getInitialFocusView returns btnPlayPause with S0289 probe [branch: DEBUG-v007]
2026-05-21 23:14:33 app_v2/src/vr/cpp/xr_input.cpp DiagnosticXrInput Declare OpenXR controller actions with left/right subaction paths and poll buttons independently from aim pose [branch: DEBUG-v007]
2026-05-21 23:14:33 app_v2/src/vr/cpp/xr_session.cpp DiagnosticXrSession Handle left/right trigger navigation without requiring active aim pose [branch: DEBUG-v007]
2026-05-21 23:14:33 app_v2/src/vr/cpp/xr_hud_world.cpp DiagnosticXrHud Remove closed spec id from persistent HUD log tag [branch: DEBUG-v007]
2026-05-21 23:14:33 app_v2/src/vr/cpp/xr_input.h DiagnosticXrInput Remove closed spec id from XR input header comment [branch: DEBUG-v007]
2026-05-21 23:14:41 app_v2\src\vr\java\com\sza\fastmediasorter\ui\xr\DiagnosticXrActivity.kt DiagnosticXrActivity Render bundled diagnostic asset as mono 360 and keep VR video bridge guarded [branch: DEBUG-v007]
2026-05-21 23:27:20 app_v2/src/main/res/layout/activity_browse.xml S0289 phase-04.2 Wire focus chain in activity_browse.xml portrait [branch: DEBUG-v007]
2026-05-21 23:27:20 app_v2/src/main/res/layout-land/activity_browse.xml S0289 phase-04.2 Mirror focus chain to landscape activity_browse.xml [branch: DEBUG-v007]
2026-05-21 23:28:26 app_v2/src/vr/res/layout/fragment_vr_settings_block.xml VR settings 3DVR row - Test Immersive looks like a button fragment_vr_settings_block: Test Immersive switched from TextView+selectableItemBackground to MaterialButton with Widget.FastMediaSorter.SettingsButton.Outlined style, matching btnShareLogs/btnSaveLogs/btnClearStreamingCache pattern. [branch: DEBUG-v007]
2026-05-21 23:28:27 app_v2/src/main/res/layout/view_collapsible_section_header.xml csh_headerRow focus highlight Add focus_button_background foreground to CollapsibleSectionHeader row so keyboard and TV-remote focus is visible (2dp blue stroke per S0289 pattern) [branch: DEBUG-v007]
2026-05-21 23:33:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0289 phase-04.3 BrowseActivity: getInitialFocusView fallback to btnBack, restitchBrowseControlChain, S0289 probe [branch: DEBUG-v007]
2026-05-21 23:40:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt S0289 phase-05.1 Settings: Timber probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-21 23:41:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt S0289 phase-05.2 AddResource: getInitialFocusView -> btnAddToResources [branch: DEBUG-v007]
2026-05-21 23:41:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorActivity.kt S0289 phase-05.3 ResourceEditor: getInitialFocusView -> fragmentContainer [branch: DEBUG-v007]
2026-05-21 23:42:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingRemapActivity.kt S0289 phase-05.5 KeybindingRemap: getInitialFocusView -> recyclerView [branch: DEBUG-v007]
2026-05-21 23:42:35 app_v2/src/vr/cpp/xr_session.cpp DiagnosticXrSession Debounce controller media navigation to prevent trigger-repeat playlist skipping [branch: DEBUG-v007]
2026-05-21 23:42:35 app_v2/src/vr/cpp/xr_input.cpp DiagnosticXrInput Add controller grip pose action for visible ray origins [branch: DEBUG-v007]
2026-05-21 23:42:35 app_v2/src/vr/cpp/xr_input.h DiagnosticXrInput Expose grip pose validity for HUD ray rendering [branch: DEBUG-v007]
2026-05-21 23:42:35 app_v2/src/vr/cpp/xr_hud_world.cpp DiagnosticXrHud Render HUD head-locked above media and use grip pose as ray origin [branch: DEBUG-v007]
2026-05-21 23:42:35 app_v2/src/vr/cpp/xr_hud_world.h DiagnosticXrHud Remove closed spec id from HUD header comment [branch: DEBUG-v007]
2026-05-21 23:42:35 app_v2\src\vr\java\com\sza\fastmediasorter\ui\xr\DiagnosticXrActivity.kt DiagnosticXrActivity Use software video frame pump for VR diagnostic playback and preserve detected render modes [branch: DEBUG-v007]
2026-05-21 23:42:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt S0289 phase-05.6 Welcome: Timber probe + Timber import [branch: DEBUG-v007]
2026-05-21 23:43:15 app_v2/src/main/res/layout/activity_welcome.xml S0289 phase-05.6 Welcome: focus chain on nav buttons [branch: DEBUG-v007]
2026-05-21 23:44:20 app_v2/src/vr/cpp/xr_hud_world.cpp DiagnosticXrHud Remove unused HUD interpolation helpers after head-locked diagnostic HUD change [branch: DEBUG-v007]
2026-05-21 23:46:44 app_v2/src/vr/cpp/xr_session.cpp DiagnosticXrSession Remove per-frame HUD queue debug log spam [branch: DEBUG-v007]
2026-05-22 00:05:18 app_v2\src\vr\java\com\sza\fastmediasorter\ui\xr\DiagnosticXrActivity.kt DiagnosticXrActivity Restrict VR diagnostic playlist to setup_test_vr sample files [branch: DEBUG-v007]
2026-05-22 00:05:18 scripts\utils\setup_test_vr.ps1 setup_test_vr.ps1 Deploy VR diagnostic media into dedicated test folders and ignore stale local harvest files [branch: DEBUG-v007]
2026-05-22 00:22:01 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Route VR test videos through native GL video surface and restrict playlist to VR test folders [branch: DEBUG-v007]
2026-05-22 00:22:49 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrRenderThread.kt DiagnosticXrRenderThread Signal native session readiness before starting video playback [branch: DEBUG-v007]
2026-05-22 00:22:49 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/DiagnosticXrRuntime.kt DiagnosticXrRuntime Expose native GL-backed video surface controls [branch: DEBUG-v007]
2026-05-22 00:22:50 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt NativeDiagnosticXrRuntime Bridge video surface controls to JNI [branch: DEBUG-v007]
2026-05-22 00:22:50 app_v2/src/vr/cpp/xr_session.cpp xr_session Render ExoPlayer video through SurfaceTexture external texture [branch: DEBUG-v007]
2026-05-22 00:22:50 app_v2/src/vr/cpp/xr_session.h xr_session Declare native video surface API [branch: DEBUG-v007]
2026-05-22 00:22:51 app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp diagnostic_xr_runtime Expose native video surface JNI methods [branch: DEBUG-v007]
2026-05-22 01:12:10 PLAN/S0282_vr_test_immerse_improvement.md spec-arc Archive S0282 (VR Test Immerse Improvement) -> temp/done/; superseded by new strategic spec covering bundle-first playlist + auto-detect stereo + render-quality overhaul + bug fixes [branch: DEBUG-v007]
2026-05-22 01:14:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsActivity.kt S0289 Add TV initial focus hook to auth sessions activity [branch: DEBUG-v007]
2026-05-22 01:15:05 app_v2/src/main/res/layout/activity_auth_sessions.xml S0289 Wire auth sessions layout focus links for TV navigation [branch: DEBUG-v007]
2026-05-22 01:16:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesActivity.kt S0289 Add TV initial focus target to duplicates activity [branch: DEBUG-v007]
2026-05-22 01:16:49 app_v2/src/main/res/layout/fragment_duplicates.xml S0289 Add focus styling to duplicates controls [branch: DEBUG-v007]
2026-05-22 01:17:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesActivity.kt S0289 Flatten duplicates initial-focus debug probe to single-line grep target [branch: DEBUG-v007]
2026-05-22 01:17:54 PLAN/S0290_vr_test_quality_overhaul.md spec Add strategic spec S0290 for VR Test Mode Quality Overhaul (bundle-first cyclic playlist + auto-detect stereo + render-quality + 4 known bug fixes) [branch: DEBUG-v007]
2026-05-22 01:18:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt S0289 Add TV initial focus handling to Google Drive folder picker [branch: DEBUG-v007]
2026-05-22 01:19:43 app_v2/src/main/res/layout/activity_google_drive_folder_picker.xml S0289 Add focus chain to Google Drive folder picker controls [branch: DEBUG-v007]
2026-05-22 01:20:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt S0289 Add TV initial focus handling to Dropbox folder picker [branch: DEBUG-v007]
2026-05-22 01:21:10 app_v2/src/main/res/layout/activity_dropbox_folder_picker.xml S0289 Add focus chain to Dropbox folder picker controls [branch: DEBUG-v007]
2026-05-22 01:21:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt S0289 Add TV initial focus handling to OneDrive folder picker [branch: DEBUG-v007]
2026-05-22 01:22:36 app_v2/src/main/res/layout/activity_onedrive_folder_picker.xml S0289 Add focus chain to OneDrive folder picker controls [branch: DEBUG-v007]
2026-05-22 01:24:03 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt S0289 Add TV initial focus handling to widget config compose host [branch: DEBUG-v007]
2026-05-22 01:24:54 app_v2/src/main/res/layout/activity_resource_launch_widget_config.xml S0289 Add ComposeView host layout for widget config focus integration [branch: DEBUG-v007]
2026-05-22 01:26:55 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt S0289 Fix Compose focusable import for widget config build [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/INDEX.md spec-tech Create tactical plan for S0290 [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/PHASE_01__render-correctness-fixes.md spec-tech Phase 01: render-correctness-fixes [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/PHASE_02__bundle-first-playlist.md spec-tech Phase 02: bundle-first-playlist [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/PHASE_03__filename-parser-extension.md spec-tech Phase 03: filename-parser-extension [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/PHASE_04__metadata-strategies.md spec-tech Phase 04: metadata-strategies [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/PHASE_05__test-asset-coverage.md spec-tech Phase 05: test-asset-coverage [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/PHASE_06__render-quality.md spec-tech Phase 06: render-quality [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/PHASE_07__equirect2-and-ffr-experiment.md spec-tech Phase 07: equirect2-and-ffr-experiment [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul/PHASE_08__docs-catalog-cleanup.md spec-tech Phase 08: docs-catalog-cleanup [branch: DEBUG-v007]
2026-05-22 01:27:36 PLAN/S0290_vr_test_quality_overhaul.md spec-tech Status -> Tactical [branch: DEBUG-v007]
2026-05-22 01:30:43 dev/S0289_multimodal_input_task_definition.md S0289 Document multimodal input clarification gate and unresolved scope decisions [branch: DEBUG-v007]
2026-05-22 01:33:15 PLAN/S0280_bugfix-local-copy-mediastore-pre-q-regression.md spec-arc Archive S0280 (bugfix-local-copy-mediastore-pre-q-regression) -> temp/done/ [branch: DEBUG-v007]
2026-05-22 01:33:15 app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/local/MediaStoreLocalDestinationWriter.kt spec-arc Remove Timber.d S0280 verification tag on archive [branch: DEBUG-v007]
2026-05-22 01:34:29 PLAN/S0289_tv-keyboard-dpad-navigation.md spec S0289 status BlockNeedUserTest after Phase 07 [branch: DEBUG-v007]
2026-05-22 01:34:54 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_05__forms-group.md spec Mark S0289 Phase 05 done after final validation [branch: DEBUG-v007]
2026-05-22 01:34:55 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_06__lists-group.md spec Mark S0289 Phase 06 done after final validation [branch: DEBUG-v007]
2026-05-22 01:34:55 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_07__docs-catalog-cleanup.md spec Track S0289 Phase 07 completion [branch: DEBUG-v007]
2026-05-22 01:34:55 PLAN/S0289_tv-keyboard-dpad-navigation/INDEX.md spec Refresh S0289 tactical index progress [branch: DEBUG-v007]
2026-05-22 01:35:37 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_07__docs-catalog-cleanup.md spec Finalize S0289 Phase 07 verification notes [branch: DEBUG-v007]
2026-05-22 01:35:37 PLAN/S0289_tv-keyboard-dpad-navigation/INDEX.md spec Set S0289 tactical index to BlockNeedUserTest [branch: DEBUG-v007]
2026-05-22 01:45:32 dev/S0289_multimodal_input_task_definition.md S0289 Expand S0289 to multimodal input execution plan [branch: DEBUG-v007]
2026-05-22 01:45:33 PLAN/S0289_tv-keyboard-dpad-navigation.md S0289 Expand S0289 to multimodal input execution plan [branch: DEBUG-v007]
2026-05-22 01:45:33 PLAN/S0289_tv-keyboard-dpad-navigation/INDEX.md S0289 Expand S0289 to multimodal input execution plan [branch: DEBUG-v007]
2026-05-22 01:45:34 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_07__multimodal-foundation.md S0289 Expand S0289 to multimodal input execution plan [branch: DEBUG-v007]
2026-05-22 01:45:35 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_08__complex-surfaces-multimodal.md S0289 Expand S0289 to multimodal input execution plan [branch: DEBUG-v007]
2026-05-22 01:45:35 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_09__remaining-activities-multimodal.md S0289 Expand S0289 to multimodal input execution plan [branch: DEBUG-v007]
2026-05-22 01:45:36 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_10__docs-catalog-cleanup.md S0289 Expand S0289 to multimodal input execution plan [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/INDEX.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/PHASE_01__render-correctness-fixes.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/PHASE_02__bundle-first-playlist.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/PHASE_03__filename-parser-extension.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/PHASE_04__metadata-strategies.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/PHASE_05__test-asset-coverage.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/PHASE_06__render-quality.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/PHASE_07__equirect2-and-ffr-experiment.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:47:52 PLAN/S0290_vr_test_quality_overhaul/PHASE_08__docs-catalog-cleanup.md spec-update Refinement (GPT-5.4, focus: consistency/completeness/verifiability/stability) [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingRemapActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/KeyboardNavigationHandler.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0289 Remove stale S0289 BlockNeedUserTest probe after reopening the ticket [branch: DEBUG-v007]
2026-05-22 01:54:12 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt S0289 Phase 07 multimodal mouse foundation [branch: DEBUG-v007]
2026-05-22 01:54:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MouseEventHandler.kt S0289 Phase 07 multimodal mouse foundation [branch: DEBUG-v007]
2026-05-22 01:55:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/ActivityMouseDispatchHelper.kt S0289 Phase 07 multimodal mouse foundation [branch: DEBUG-v007]
2026-05-22 01:56:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt S0289 Fix generic motion override signature after BaseActivity mouse foundation [branch: DEBUG-v007]
2026-05-22 01:56:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0289 Fix generic motion override signature after BaseActivity mouse foundation [branch: DEBUG-v007]
2026-05-22 01:57:04 PLAN/S0289_tv-keyboard-dpad-navigation/PHASE_07__multimodal-foundation.md S0289 Update tactical tracking after Phase 07 completion [branch: DEBUG-v007]
2026-05-22 01:57:04 PLAN/S0289_tv-keyboard-dpad-navigation/INDEX.md S0289 Update tactical tracking after Phase 07 completion [branch: DEBUG-v007]
2026-05-22 02:21:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev S0289 Phase 08.1: route wheel scroll via shared ActivityMouseDispatchHelper (drop ad-hoc onGenericMotionEvent override) [branch: DEBUG-v007]
2026-05-22 02:23:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-dev S0289 Phase 08.2: route wheel scroll via shared ActivityMouseDispatchHelper; gamepad/keyboard routing preserved [branch: DEBUG-v007]
2026-05-22 02:26:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0289 Phase 08.3: extract player gamepad surface; pointer defaults fall through to shared BaseActivity foundation [branch: DEBUG-v007]
2026-05-22 02:28:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0289 Phase 08.4: document multimodal baseline alignment with PlayerActivity (no gamepad-analog dup) [branch: DEBUG-v007]
2026-05-22 02:36:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-dev S0289 Phase 09.1: route mouse wheel onto the settings pager [branch: DEBUG-v007]
2026-05-22 02:37:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsActivity.kt spec-dev S0289 Phase 09.1: add multimodal surface marker and wheel target onto sessions list [branch: DEBUG-v007]
2026-05-22 02:37:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingRemapActivity.kt spec-dev S0289 Phase 09.1: add multimodal surface marker and wheel target onto bindings list [branch: DEBUG-v007]
2026-05-22 02:37:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-dev S0289 Phase 09.1: add multimodal surface marker and wheel target onto onboarding pager [branch: DEBUG-v007]
2026-05-22 02:40:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt spec-dev S0289 Phase 09.2: route mouse wheel onto cloud-folders RecyclerView [branch: DEBUG-v007]
2026-05-22 02:40:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt spec-dev S0289 Phase 09.2: route mouse wheel onto cloud-folders RecyclerView [branch: DEBUG-v007]
2026-05-22 02:41:19 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt spec-dev S0289 Phase 09.2: add multimodal surface marker and wheel target onto LazyColumn ComposeView [branch: DEBUG-v007]
2026-05-22 02:43:58 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-dev S0289 Phase 09.3 audit: mark DiagnosticXrActivity as n/a (OpenXR vendor-protocol surface) [branch: DEBUG-v007]
2026-05-22 02:47:42 PLAN/S0290_vr_test_quality_overhaul.md S0290 strategic spec Expand S0290 scope: add §1.1 with on-device findings (re-enter crash, OOM, main-thread freeze, video over-brightness, pinch debounce, sample coverage); add goals 10-15, pillar D, ADR-5/6/7, criteria 11-15; reorder phases [branch: DEBUG-v007]
2026-05-22 02:47:53 PLAN/S0290_vr_test_quality_overhaul/INDEX.md,PLAN/S0290_vr_test_quality_overhaul/PHASE_09__diagnostic-lifecycle-fix.md,PLAN/S0290_vr_test_quality_overhaul/PHASE_10__input-edge-detection.md,PLAN/S0290_vr_test_quality_overhaul/PHASE_11__video-gamma-and-bitmap-pipeline.md S0290 tactical: new phases 09/10/11 + INDEX reorder Add PHASE_09 (diagnostic lifecycle fix paired init-shutdown), PHASE_10 (input pinch edge-detection), PHASE_11 (video gamma manual sRGB + off-main bitmap pool); rewire INDEX with new dependencies and execution order 09->11->01->10->02->03->05->04->06->07->08 [branch: DEBUG-v007]
2026-05-22 02:55:26 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-dev S0289 Phase 10: status -> BlockNeedUserTest after multimodal pipeline [branch: DEBUG-v007]
2026-05-22 02:55:26 PLAN/S0289_tv-keyboard-dpad-navigation/INDEX.md spec-dev S0289 Phase 10: phase counters synced, status -> BlockNeedUserTest [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probes in getInitialFocusView and gamepad dispatchGenericMotionEvent [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/auth/AuthSessionsActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingRemapActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicatesActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe + getMouseScrollTargetView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt spec-dev S0289 Phase 10.3: insert BlockNeedUserTest probe in getInitialFocusView [branch: DEBUG-v007]
2026-05-22 02:56:56 PLAN/S0290_vr_test_quality_overhaul.md,PLAN/S0290_vr_test_quality_overhaul/INDEX.md,PLAN/S0290_vr_test_quality_overhaul/PHASE_10__input-edge-detection.md,PLAN/S0290_vr_test_quality_overhaul/PHASE_11__video-gamma-and-bitmap-pipeline.md S0290 ADR refinement after research pass Refine ADR-5/6 by web research (Khronos OES spec, Meta OpenXR samples, Ultraleap pinch, Glide BitmapPool): video gamma is decode pow(2.2) not encode; bitmap pipeline uses existing Glide BitmapPool not custom class; cooldown 100ms race-guard not 200ms because Meta runtime hysteresis already applied to bool triggerClicked. Resolves §6.6/6.7/6.8 owner-decision blockers [branch: DEBUG-v007]
2026-05-22 03:02:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MouseEventHandler.kt BaseActivity dispatch S0289 fix: isMouseEvent now uses getToolType(), no longer misclassifies finger taps as mouse on emulator/Quest3/touchpad devices where source carries SOURCE_MOUSE bit. Was eating ACTION_UP and blocking all click delivery. [branch: DEBUG-v007]
2026-05-22 03:02:55 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt Activity dispatch S0289 fix: dispatchTouchEvent and dispatchGenericMotionEvent now guard with getToolType()==FINGER before routing into ActivityMouseDispatchHelper. Safety net so a future helper method cannot silently consume finger UP events again. [branch: DEBUG-v007]
2026-05-22 03:08:01 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-check S0289 Static audit of S0289 - all invariants PASS (probes present, classes declared, dev-log and catalog coverage OK). Status retained at BlockNeedUserTest pending on-device verification of the touch-click regression fix landed today in Phase 07 surface (MouseEventHandler.isMouseEvent + BaseActivity dispatch guards). [branch: DEBUG-v007]
2026-05-22 03:19:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageOcrManager.kt ui/player/helpers ImageOcrManager: show progressBar and disable OCR button during recognition; add S0288 diagnostic markers to OCR launch path [branch: DEBUG-v007]
2026-05-22 03:37:00 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.5220.333 - plateau merge from DEBUG-v007 [branch: DEBUG-v007]
2026-05-22 12:13:54 PLAN/S0285_nolegal-ocr-cyrillic.md spec-check Audit S0285 -> Verified; PASS/WARN/FAIL 13/0/0 [branch: DEBUG-v008]
2026-05-22 12:13:54 PLAN/S0285_nolegal-ocr-cyrillic/INDEX.md spec-check Tick Completion Gate items after Verified audit [branch: DEBUG-v008]
2026-05-22 12:14:38 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md spec-fix Annotate Last Audit action items (S0286) [branch: DEBUG-v008]
2026-05-22 12:14:38 PLAN/S0286_compliance-lint-gate-and-features-sanitization/INDEX.md spec-fix Flip INDEX completion gate [All phases show Done] to [x] (S0286) [branch: DEBUG-v008]
2026-05-22 12:14:38 PLAN/S0286_compliance-lint-gate-and-features-sanitization/PHASE_02__features-sanitization.md spec-fix Flip Phase 02 prerequisite checkboxes to [x] to match finished state (S0286) [branch: DEBUG-v008]
2026-05-22 12:14:38 PLAN/S0286_compliance-lint-gate-and-features-sanitization/PHASE_03__docs-catalog-cleanup.md spec-fix Flip Phase 03 prerequisite checkboxes to [x] to match finished state (S0286) [branch: DEBUG-v008]
2026-05-22 12:16:48 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md spec-update Sync strategic narrative to shipped reality: §6 items 1/2/3/5 Resolved with shipped decisions; §10 S0140 auto-flip clause corrected; §11.9 criterion rewritten around baseline file (S0286) [branch: DEBUG-v008]
2026-05-22 12:18:38 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md spec-check Audit S0286 -> Verified; PASS/WARN/FAIL 16/0/0; flip strategic Status Partial -> Verified [branch: DEBUG-v008]
2026-05-22 12:18:38 PLAN/S0286_compliance-lint-gate-and-features-sanitization/INDEX.md spec-check Flip Completion Gate /spec-check Verified -> [x] (S0286) [branch: DEBUG-v008]
2026-05-22 12:46:50 app_v2/src/main/res/layout/player_draw_overlay_toolbar_content.xml draw overlay toolbar (portrait) Merge draw overlay toolbar two rows into single horizontal strip (portrait) [branch: DEBUG-v008]
2026-05-22 12:51:29 app_v2/src/main/res/layout/activity_main.xml,app_v2/src/main/res/layout-land/activity_main.xml MainActivity top bar Add 2dp spacers between top-bar buttons (excl. exit and slideshow); replace settings icon with gear (ic_settings) in portrait and land [branch: DEBUG-v008]
2026-05-22 13:00:06 app_v2/src/main/res/layout/player_draw_overlay_toolbar_content.xml,app_v2/src/main/res/layout-land/player_draw_overlay_toolbar_content.xml,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt draw overlay toolbar overflow refactor Move Save_and_send + Share from draw toolbar into overflow popup (drop two buttons from portrait+landscape, simplify ImageDrawOverlayManager wiring) [branch: DEBUG-v008]
2026-05-22 13:07:59 PLAN/S0267_cloud-auth-unified-storage-research/CHILD_SPECS.md spec-dev S0267 Phase 01.1 - Create child-spec matrix with 6 required cloud-auth follow-on tickets [branch: DEBUG-v008]
2026-05-22 13:08:43 PLAN/S0267_cloud-auth-unified-storage-research/CHILD_SPECS.md spec-dev S0267 Phase 01.2 - Append optional post-release cloud-auth-auditor-extension [branch: DEBUG-v008]
2026-05-22 13:09:47 PLAN/S0267_cloud-auth-unified-storage-research/CHILD_SPECS.md spec-dev S0267 Phase 01.3 - Add delivery waves and shared source anchors [branch: DEBUG-v008]
2026-05-22 13:11:39 PLAN/S0267_cloud-auth-unified-storage-research/PROMPTS.md spec-dev S0267 Phase 02.1 - Create prompt pack with 7 child-spec /spec ad-hoc commands [branch: DEBUG-v008]
2026-05-22 13:13:16 PLAN/S0267_cloud-auth-unified-storage-research/PROMPTS.md spec-dev S0267 Phase 02.2 - Owner-input packets for 6 required child specs [branch: DEBUG-v008]
2026-05-22 13:14:11 app_v2/src/vr/cpp/xr_session.h S0290 Phase 09.1 Declare xr_session_is_initialized() to detect stale native state before re-init [branch: DEBUG-v008]
2026-05-22 13:14:12 app_v2/src/vr/cpp/xr_session.cpp S0290 Phase 09.1 Define xr_session_is_initialized() returning true while instance/vm/activity still allocated [branch: DEBUG-v008]
2026-05-22 13:14:12 app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp S0290 Phase 09.1 Replace intentionally-leaks comment with paired-shutdown guard; reject nativeInitSession when previous session alive [branch: DEBUG-v008]
2026-05-22 13:14:25 PLAN/S0267_cloud-auth-unified-storage-research/PROMPTS.md spec-dev S0267 Phase 02.3 - Validation expectations per child ticket [branch: DEBUG-v008]
2026-05-22 13:15:31 PLAN/S0267_cloud-auth-unified-storage-research/ROLLOUT_ORDER.md spec-dev S0267 Phase 03.1 - Define wave-by-wave execution order with entry/output/exit gate per wave [branch: DEBUG-v008]
2026-05-22 13:16:34 PLAN/S0267_cloud-auth-unified-storage-research/ROLLOUT_ORDER.md spec-dev S0267 Phase 03.2 - Parallelism and serialization rules across waves [branch: DEBUG-v008]
2026-05-22 13:17:41 PLAN/S0267_cloud-auth-unified-storage-research/ROLLOUT_ORDER.md spec-dev S0267 Phase 03.3 - Stop-go checkpoints per wave + suggested operator sequence [branch: DEBUG-v008]
2026-05-22 13:18:29 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0290 Phase 09.3 Synchronous render-thread teardown in onPause/onDestroy via shutdownRenderThreadSync helper for Quest 3 re-entry safety [branch: DEBUG-v008]
2026-05-22 13:18:58 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt S0290 Phase 09.3 Idempotent shutdown via _shutdownCalled AtomicBoolean; flag re-arms on initSession [branch: DEBUG-v008]
2026-05-22 13:19:19 PLAN/S0267_cloud-auth-unified-storage-research/INDEX.md spec-dev S0267 tactical execution - phase counter + row status flips for Phases 01..04 [branch: DEBUG-v008]
2026-05-22 13:19:22 PLAN/S0267_cloud-auth-unified-storage-research/PHASE_01__child-spec-matrix.md spec-dev S0267 Phase 01 status flips + step log entries + Done Criteria ticks [branch: DEBUG-v008]
2026-05-22 13:19:27 PLAN/S0267_cloud-auth-unified-storage-research/PHASE_02__prompt-pack.md spec-dev S0267 Phase 02 status flips + step log entries + Done Criteria ticks [branch: DEBUG-v008]
2026-05-22 13:19:30 PLAN/S0267_cloud-auth-unified-storage-research/PHASE_03__rollout-sequencing.md spec-dev S0267 Phase 03 status flips + step log entries + Done Criteria ticks [branch: DEBUG-v008]
2026-05-22 13:19:36 PLAN/S0267_cloud-auth-unified-storage-research/PHASE_04__docs-catalog-cleanup.md spec-dev S0267 Phase 04 - cross-link verification + dev log closure entries [branch: DEBUG-v008]
2026-05-22 13:20:13 PLAN/S0290_vr_test_quality_overhaul/PHASE_09__diagnostic-lifecycle-fix.md S0290 Phase 09.4 Document mandatory 5x(enter->exit) on-device verification loop with heap delta and S0290 probe expectations [branch: DEBUG-v008]
2026-05-22 13:23:04 PLAN/S0267_cloud-auth-unified-storage-research.md spec-check Audit S0267 strategic -> Verified; PASS/WARN/FAIL 13/0/0 (1 EXEMPT for FEATURES trilingual) [branch: DEBUG-v008]
2026-05-22 13:24:41 PLAN/S0267_cloud-auth-unified-storage-research/INDEX.md spec-dev S0267 INDEX - tick Completion Gate; add Change Log entry for finished tactical execution [branch: DEBUG-v008]
2026-05-22 13:25:40 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0290 Phase 11.1+11.2 Off-main bitmap decode via Glide BitmapPool; pool.put after queueFrame replaces recycle; remove legacy inSampleSize loop helpers [branch: DEBUG-v008]
2026-05-22 13:26:18 app_v2/src/vr/cpp/xr_session.cpp S0290 Phase 11.3 Video fragment shader decodes BT.709 gamma to linear before sRGB swapchain re-encodes; prevents double-encode over-bright video [branch: DEBUG-v008]
2026-05-22 13:31:53 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0290 Phase 09.5 + 11.4 Insert 3 Timber S0290 BlockNeedUserTest probes (re-enter, bitmap recycled, video gamma); strip Sxxxx prefix from 6 persistent warn/error log lines [branch: DEBUG-v008]
2026-05-22 13:31:53 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt S0290 Phase 09.5 Insert Timber S0290 native session init guarded probe at initSession entry [branch: DEBUG-v008]
2026-05-22 13:31:53 PLAN/S0290_vr_test_quality_overhaul/PHASE_09__diagnostic-lifecycle-fix.md S0290 Phase 09 close-out Mark all 5 steps done; phase 5/5 In Progress (manual on-device pending); record build PASS evidence [branch: DEBUG-v008]
2026-05-22 13:31:53 PLAN/S0290_vr_test_quality_overhaul/PHASE_11__video-gamma-and-bitmap-pipeline.md S0290 Phase 11 close-out Mark all 4 steps done; phase 4/4 In Progress (manual on-device pending); record build PASS evidence [branch: DEBUG-v008]
2026-05-22 13:31:53 PLAN/S0290_vr_test_quality_overhaul/INDEX.md S0290 INDEX close-out Bump phase 09 and 11 step counters 5/5 and 4/4; document BlockNeedUserTest scope (only 09+11 implemented, other phases untouched) [branch: DEBUG-v008]
2026-05-22 13:56:33 scripts/utils/setup_test_vr.ps1 setup_test_vr.ps1 Generate deterministic VR diagnostic videos and derived stereo variants [branch: DEBUG-v008]
2026-05-22 13:56:33 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Add SBS/LR stereo filenames to VR diagnostic parser and playlist [branch: DEBUG-v008]
2026-05-22 13:57:56 PLAN/spec_vr_test_colosseum_sample_url_dead.md spec_vr_test_colosseum_sample_url_dead Record dead Wikimedia URL for VR colosseum QA sample [branch: DEBUG-v008]
2026-05-22 13:58:17 .github/prompts/skill-fix.prompt.md,.claude/commands/skill-fix.md,.github/copilot-instructions.md,AGENTS.md,CLAUDE.md,.github/prompts/quick.prompt.md,.claude/commands/quick.md skill-fix Add /skill-fix fast-patch routing and quick fallbacks [branch: DEBUG-v008]
2026-05-22 14:00:29 scripts/utils/setup_test_vr.ps1 setup_test_vr.ps1 Replace dead colosseum URL with deterministic local flat fallback [branch: DEBUG-v008]
2026-05-22 14:14:01 app_v2/build.gradle.kts build.gradle.kts Ignore locked native linker temp files during CMake build and JNI merge [branch: DEBUG-v008]
2026-05-22 14:34:47 app_v2/src/vr/cpp/xr_session.cpp S0290 Phase 10 (owner remap) Thumbstick X-axis edge-detection replaces trigger-based navigation; triggers stay free for Quest 3 system gestures (screenshot, recenter); per-hand rest hysteresis +-0.25 with 0.6 deflect threshold [branch: DEBUG-v008]
2026-05-22 14:34:47 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0290 Phase 11.1+ + HUD always-on Bounds-based preflight pickSampleSizeForBudget keeps external decodes under 96 MB; HUD always renders full HudCanvasRenderer panel with FILE: filename via new renderAndQueueHud helper (replaces tiny generateFilenameHudBytes) [branch: DEBUG-v008]
2026-05-22 14:40:07 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0290 parseFilenameConfig fix Re-order parser: specific SBS/TB/MONO markers checked before generic stereo fallback; video*_stereo_sbs no longer mis-routed to TB. Logs parsed config per file [branch: DEBUG-v008]
2026-05-22 14:40:32 app_v2/src/vr/cpp/xr_session.cpp S0290 video Y-flip Pre-flip uv.y before SurfaceTexture u_texTransform multiply (GL bottom-left convention) so MediaCodec videos no longer display upside-down on Quest 3; stereo TB/SBS half-splits remain in bitmap convention upstream of the flip [branch: DEBUG-v008]
2026-05-22 15:01:58 app_v2/src/vr/cpp/xr_session.cpp S0290 owner round 2 Stick deflect threshold 0.6->0.85, return 0.25->0.40, debounce 100ms->500ms (one navigation per deliberate gesture) [branch: DEBUG-v008]
2026-05-22 15:01:58 app_v2/src/vr/cpp/xr_input.cpp S0290 raycast staleness fix Reset pointerPose/gripPose to identity each frame; state.active set only after successful XrLocateSpace with valid flags; eliminates random ray stripes from stale tracking [branch: DEBUG-v008]
2026-05-22 15:01:58 scripts/utils/setup_test_vr.ps1 S0290 BBB URL upgrade Replace w3schools 320x176 mov_bbb.mp4 with Blender peach 480p trailer 854x480 for usable flat-video reference [branch: DEBUG-v008]
2026-05-22 15:42:37 scripts/utils/setup_test_vr.ps1 setup_test_vr.ps1 Add real 360/180/flat stereo sample masters to VR test setup and harden synthetic fallback generation [branch: DEBUG-v008]
2026-05-22 15:43:18 scripts/utils/setup_test_vr.ps1 setup_test_vr.ps1 Add real 360/180/flat stereo sample masters to VR test setup and document the 19-file playlist correctly [branch: DEBUG-v008]
2026-05-22 18:12:25 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md S0291 strategic spec authored New strategic spec from owner on-device feedback after v641 test; locks working baselines (HUD pipeline, joystick rays, grip-drag-HUD, Magic Forest 3D rendering), catalogues open issues (lifecycle re-entry crash, eye-order suspicion, 360-SBS shader bug, provisioning correctness, sample content quality, MSAA). S0290 closed Partial. [branch: DEBUG-v008]
2026-05-22 18:12:25 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0290 -> Partial; remove BlockNeedUserTest probes Remove 3 Timber S0290 probes (bitmap recycled, video gamma path, re-enter path) per CLAUDE.md probe lifecycle rule on transition out of BlockNeedUserTest [branch: DEBUG-v008]
2026-05-22 18:13:07 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt S0290 -> Partial; remove BlockNeedUserTest probe Remove Timber S0290 probe (native session init guarded) per probe lifecycle rule [branch: DEBUG-v008]
2026-05-22 18:21:51 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md spec-update Refine S0291 strategic spec from owner VR retest feedback [branch: DEBUG-v008]
2026-05-22 18:28:39 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/INDEX.md spec-tech Create or update S0291 tactical implementation plan [branch: DEBUG-v008]
2026-05-22 18:28:40 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_01__lifecycle-reentry.md spec-tech Create or update S0291 tactical implementation plan [branch: DEBUG-v008]
2026-05-22 18:28:40 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_02__sample-provisioning.md spec-tech Create or update S0291 tactical implementation plan [branch: DEBUG-v008]
2026-05-22 18:28:41 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_03__render-quality.md spec-tech Create or update S0291 tactical implementation plan [branch: DEBUG-v008]
2026-05-22 18:28:41 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_04__regression-verification.md spec-tech Create or update S0291 tactical implementation plan [branch: DEBUG-v008]
2026-05-22 18:28:42 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_05__docs-catalog-cleanup.md spec-tech Create or update S0291 tactical implementation plan [branch: DEBUG-v008]
2026-05-22 18:28:43 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md spec-tech Create or update S0291 tactical implementation plan [branch: DEBUG-v008]
2026-05-22 18:37:50 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt NativeDiagnosticXrRuntime Add stale native-state probe before diagnostic XR init [branch: DEBUG-v008]
2026-05-22 18:38:26 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Rename misleading VR flat mono sample in diagnostic playlist [branch: DEBUG-v008]
2026-05-22 18:39:02 app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp diagnostic_xr_runtime Clean stale native XR state before new JNI session [branch: DEBUG-v008]
2026-05-22 18:39:02 app_v2/src/vr/cpp/xr_session.cpp xr_session Add mipmap and anisotropic filtering for static XR textures [branch: DEBUG-v008]
2026-05-22 18:39:03 app_v2/src/vr/cpp/xr_session.h xr_session Expose native XR initialized-state probe [branch: DEBUG-v008]
2026-05-22 18:39:03 scripts/utils/setup_test_vr.ps1 setup_test_vr Regenerate VR test samples with visible eye labels and better sources [branch: DEBUG-v008]
2026-05-22 18:42:06 app_v2/build.gradle.kts android.defaultConfig.version Update noLegal debug build version metadata after validation build [branch: DEBUG-v008]
2026-05-22 18:43:42 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt NativeDiagnosticXrRuntime Add temporary S0291 verification probe for XR init [branch: DEBUG-v008]
2026-05-22 18:44:19 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Add temporary S0291 verification probe for VR playlist loading [branch: DEBUG-v008]
2026-05-22 18:44:54 app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp diagnostic_xr_runtime Add temporary S0291 verification probe for native XR init [branch: DEBUG-v008]
2026-05-22 18:44:55 app_v2/src/vr/cpp/xr_session.cpp xr_session Add temporary S0291 verification probe for static texture filtering [branch: DEBUG-v008]
2026-05-22 18:46:43 app_v2/build.gradle.kts android.defaultConfig.version Update noLegal debug build version metadata after final validation build [branch: DEBUG-v008]
2026-05-22 18:51:57 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md S0291 strategic spec Record implementation notes and owner verification checklist [branch: DEBUG-v008]
2026-05-22 18:51:57 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/INDEX.md S0291 tactical index Mark S0291 tactical plan done [branch: DEBUG-v008]
2026-05-22 18:51:58 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_01__lifecycle-reentry.md S0291 phase 01 Mark lifecycle re-entry phase done [branch: DEBUG-v008]
2026-05-22 18:51:58 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_02__sample-provisioning.md S0291 phase 02 Mark sample provisioning phase done [branch: DEBUG-v008]
2026-05-22 18:51:59 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_03__render-quality.md S0291 phase 03 Mark render quality phase done [branch: DEBUG-v008]
2026-05-22 18:51:59 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_04__regression-verification.md S0291 phase 04 Mark regression verification phase done [branch: DEBUG-v008]
2026-05-22 18:52:00 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_05__docs-catalog-cleanup.md S0291 phase 05 Mark docs and catalog cleanup phase done [branch: DEBUG-v008]
2026-05-22 19:03:13 scripts/utils/setup_test_vr.ps1 S0291 Remove stale remote VR diagnostic samples before device push [branch: DEBUG-v008]
2026-05-22 19:03:13 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md S0291 Record researched answers for VR diagnostic open questions [branch: DEBUG-v008]
2026-05-22 21:02:55 .gitignore .gitignore Ignore root logs folder and stop tracking logs [branch: DEBUG-v008]
2026-05-22 21:18:39 .mcp.json mobile-mcp Register mobile-mcp server in project .mcp.json (npx @mobilenext/mobile-mcp@latest) so on-device verification skills work for any team member, not just users who configured it globally [branch: DEBUG-v008]
2026-05-22 21:18:48 scripts/devtest/device-ready.ps1 device-ready Pre-flight readiness check for on-device testing skills: ADB, online device, optional package install + versionName + mobile-mcp launcher resolvability. Stable exit codes 0..6 for skills to branch on. JSON or human output [branch: DEBUG-v008]
2026-05-22 21:18:52 .claude/commands/verify.md C:/Program Files/Git/verify-skill Project-scoped /verify skill: lightweight on-device smoke (build optional, install optional, launch via mobile-mcp, walk minimal scenario, capture logcat) without touching PLAN/, journal, or dev log. Complements /spec-test-device for the in-between cases [branch: DEBUG-v008]
2026-05-22 21:18:56 .claude/commands/spec-test-device.md C:/Program Files/Git/spec-test-device Reference scripts/devtest/device-ready.ps1 for unified pre-flight (replaces ad-hoc adb checks in step 3) [branch: DEBUG-v008]
2026-05-22 21:19:00 CLAUDE.md mandatory-skills-table Add /verify row to Mandatory Skills table - lightweight on-device sanity check distinct from /spec-test-device [branch: DEBUG-v008]
2026-05-22 21:32:16 .claude/commands/quick.md C:/Program Files/Git/quick Add opt-in –verify-device flag: after post-change.ps1 run /verify smoke; off by default to preserve zero-bureaucracy philosophy [branch: DEBUG-v008]
2026-05-22 21:32:21 .claude/commands/skill-fix.md C:/Program Files/Git/skill-fix Add opt-in –verify-device flag: after local validation PASS optionally run /verify (–build chosen by edit type); skip cleanly when no device online so fast-patch philosophy holds [branch: DEBUG-v008]
2026-05-22 21:32:25 .claude/commands/spec-dev.md C:/Program Files/Git/spec-dev Add opt-in –verify-smoke flag: after all phases done, before status flip, run /verify –build default smoke to catch trivial launch-crash. FAIL aborts the status flip; missing device skips cleanly [branch: DEBUG-v008]
2026-05-22 21:33:39 scripts/utils/setup_test_vr.ps1 VR Test Immersive playlist sync Centralize VR test playlist names and validate sync with DiagnosticXrActivity rotation order [branch: DEBUG-v008]
2026-05-22 22:58:12 PLAN/S0292_vr-content-launch-ui.md spec S0292 vr-content-launch-ui placeholder spec - next VR step continuing S0240 epic [branch: DEBUG-v008]
2026-05-22 23:01:39 app_v2/src/vr/cpp/xr_hud_world.cpp S0291 round 8 S0291 round 8: HUD height halved 1.5x (0.169->0.113m), width preserved [branch: DEBUG-v008]
2026-05-22 23:02:12 app_v2/src/vr/cpp/xr_session.cpp S0291 round 8 S0291 round 8: zoom reset to 1.0 on every set_render_config (slide nav) [branch: DEBUG-v008]
2026-05-22 23:02:45 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0291 round 8 S0291 round 8: re-entry trace tags on onCreate, proceedWithInitialization, surfaceCreated [branch: DEBUG-v008]
2026-05-22 23:04:08 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md S0291 round 8 deltas Document round 8 owner deltas: HUD 1.5x slimmer, zoom reset on slide nav, Activity re-entry probes [branch: DEBUG-v008]
2026-05-22 23:23:41 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md S0291 round 9 root cause S0291 round 9: re-entry root cause (loader stops tracking after first Activity destroyed); fix via moveTaskToBack to keep Activity alive [branch: DEBUG-v008]
2026-05-22 23:32:11 PLAN/S0293_bugfix-multi-window-discoverability.md spec Add strategic spec S0293 for multi-window discoverability fixes (Bug A/B/C) [branch: DEBUG-v008]
2026-05-22 23:37:28 PLAN/S0293_bugfix-multi-window-discoverability.md spec Extend S0293 scope: add runtime DeX/desktop-mode detection (4th pillar + ADR-3 + Research items §6.2-6.3) [branch: DEBUG-v008]
2026-05-22 23:44:52 PLAN/S0293_bugfix-multi-window-discoverability/INDEX.md spec-tech Create tactical plan for S0293 [branch: DEBUG-v008]
2026-05-22 23:44:52 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_01__detector-foundations.md spec-tech Phase 01: detector-foundations [branch: DEBUG-v008]
2026-05-22 23:44:52 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_02__settings-defaults-wiring.md spec-tech Phase 02: settings-defaults-wiring [branch: DEBUG-v008]
2026-05-22 23:44:52 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_03__browse-mouse-routing-fix.md spec-tech Phase 03: browse-mouse-routing-fix (Bug A) [branch: DEBUG-v008]
2026-05-22 23:44:52 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_04__player-portrait-inline.md spec-tech Phase 04: player-portrait-inline (Bug C) [branch: DEBUG-v008]
2026-05-22 23:44:52 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_05__runtime-reactivity.md spec-tech Phase 05: runtime-reactivity (DeX entry/exit) [branch: DEBUG-v008]
2026-05-22 23:44:52 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v008]
2026-05-22 23:44:52 PLAN/S0293_bugfix-multi-window-discoverability.md spec-tech Status: Approved -> Tactical [branch: DEBUG-v008]
2026-05-22 23:46:19 app_v2/src/main/java/com/sza/fastmediasorter/core/compat/MultiWindowCapabilityDetector.kt spec-dev S0293 Phase 01.1: extract hasInstallTimeMultiWindowSignal helper [branch: DEBUG-v008]
2026-05-22 23:47:21 app_v2/src/main/java/com/sza/fastmediasorter/core/compat/MultiWindowCapabilityDetector.kt spec-dev S0293 Phase 01.2: add defaultFileOpsInOverflowMenu pair method [branch: DEBUG-v008]
2026-05-22 23:48:33 app_v2/src/main/java/com/sza/fastmediasorter/core/compat/MultiWindowCapabilityDetector.kt spec-dev S0293 Phase 01.3: add runtime-aware isMultiWindowActiveNow [branch: DEBUG-v008]
2026-05-22 23:52:32 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0293 Phase 02.1+02.2: capability-aware defaults for fileOpsInOverflowMenu and fileOpsOverflowMenuHintShown [branch: DEBUG-v008]
2026-05-22 23:56:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt spec-dev S0293 Phase 03.1: route mouse context menu to per-file overflow (Bug A) [branch: DEBUG-v008]
2026-05-23 00:07:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt spec-dev S0293 Phase 04.1: pin btnOpenInSeparateWindowCmd inline in portrait + big-buttons (Bug C) [branch: DEBUG-v008]
2026-05-23 00:15:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt spec-dev S0293 Phase 05: OR-compose runtime detector + notifyMultiWindowModeChanged [branch: DEBUG-v008]
2026-05-23 00:15:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt spec-dev S0293 Phase 05: OR-compose runtime + notifyMultiWindowModeChanged [branch: DEBUG-v008]
2026-05-23 00:15:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-dev S0293 Phase 05.2: override onMultiWindowModeChanged + onConfigurationChanged [branch: DEBUG-v008]
2026-05-23 00:16:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0293 Phase 05.3: override onMultiWindowModeChanged [branch: DEBUG-v008]
2026-05-23 00:35:17 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md spec-update Refinement (claude-sonnet-4.5, focus: language structure verifiability consistency completeness style); re-opened BlockNeedUserTest -> Tactical; added 1.7 / Goal 9 / 6.8 / 6.9 / 11.15 / 11.16; 2 DISCUSS proposals for round 10 phase [branch: DEBUG-v008]
2026-05-23 00:35:17 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-update Removed 7 Timber.d(S0291) re-entry verification probes after re-opening S0291 from BlockNeedUserTest to Tactical [branch: DEBUG-v008]
2026-05-23 00:35:17 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrRenderThread.kt spec-update Removed 14 Timber.d(S0291.RT) lifecycle trace probes and round 4 instrumentation comment; rewrote warn/error log subjects to plain English [branch: DEBUG-v008]
2026-05-23 00:35:17 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/runtime/NativeDiagnosticXrRuntime.kt spec-update Removed Timber.d(S0291) initSession entry probe after re-opening S0291 from BlockNeedUserTest to Tactical [branch: DEBUG-v008]
2026-05-23 00:51:49 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/XrEntryGateway.kt XR hybrid exit flow Remove launchTaskId from XR entry contract; exclusive flow now recreates panel instead of restoring a background task. [branch: DEBUG-v008]
2026-05-23 00:51:49 app_v2/src/vrStub/java/com/sza/fastmediasorter/core/xr/NoOpXrEntryGateway.kt XR hybrid exit flow Keep stub entry gateway aligned with the simplified no-argument XR entry contract. [branch: DEBUG-v008]
2026-05-23 00:51:49 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt XR hybrid exit flow Stop passing panel task ids into the immersive host and keep entry semantics aligned with Meta exclusive-mode guidance. [branch: DEBUG-v008]
2026-05-23 00:51:49 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt XR hybrid exit flow Finish the Settings panel after a successful immersive launch so HorizonOS does not keep a duplicate panel alive in the background. [branch: DEBUG-v008]
2026-05-23 00:51:49 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt XR hybrid exit flow Replace moveToFront-based panel restore with the documented Home plus PendingIntent return path from immersive XR. [branch: DEBUG-v008]
2026-05-23 00:59:19 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-update Removed stale Timber.d(S0291) probe from onNewIntent after S0291 left BlockNeedUserTest [branch: DEBUG-v008]
2026-05-23 01:12:20 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt XR hybrid entry flow Stop XR gateway from short-circuiting reentry on stale running state and relaunch immersive host as ACTION_MAIN NEW_TASK. [branch: DEBUG-v008]
2026-05-23 01:16:49 PLAN/spec-catalog.jsonl spec catalog Insert S0294 record for Quest 3 Google Drive browser-auth strategic spec [branch: DEBUG-v008]
2026-05-23 01:16:49 PLAN/S0294_google-drive-browser-auth-quest3.md strategic spec Add strategic spec for Quest 3 Google Drive browser-based Google Drive resource auth [branch: DEBUG-v008]
2026-05-23 01:24:23 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt XR immersive exit handoff Make immersive-to-settings handoff idempotent so duplicate Home pending-intent dispatches reuse one SettingsActivity instance. [branch: DEBUG-v008]
2026-05-23 01:33:24 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt XR immersive exit teardown Stop force-removing the XR task after Home handoff and finish the immersive host normally to avoid FocusPlaceholder-driven Settings relaunch. [branch: DEBUG-v008]
2026-05-23 01:50:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt spec-dev S0293 Phase 07: fileOpsInOverflowMenu runtime override via MultiWindowCapabilityDetector [branch: DEBUG-v008]
2026-05-24 23:25:45 dev/CATALOG/app_v2.jsonl catalog Regenerate app_v2 catalog after S0293 [branch: DEBUG-v008]
2026-05-24 23:27:54 PLAN/S0294_google-drive-browser-auth-quest3.md spec Approve strategic spec S0294 [branch: DEBUG-v008]
2026-05-24 23:28:14 PLAN/S0293_bugfix-multi-window-discoverability.md spec-dev S0293 Phase 06 complete: status -> BlockNeedUserTest, 6 BlockNeedUserTest probes active [branch: DEBUG-v008]
2026-05-24 23:28:14 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_06__docs-catalog-cleanup.md spec-dev S0293 Phase 06: all 3 steps done (probes, catalog regen, status flip) [branch: DEBUG-v008]
2026-05-24 23:28:14 PLAN/S0293_bugfix-multi-window-discoverability/INDEX.md spec-dev S0293 tactical INDEX: 6/6 phases done [branch: DEBUG-v008]
2026-05-24 23:28:26 PLAN/S0294_google-drive-browser-auth-quest3.md spec Add owner inputs gate for S0294 approval [branch: DEBUG-v008]
2026-05-24 23:30:45 PLAN/S0294_google-drive-browser-auth-quest3.md spec-tech Create tactical plan artifacts for S0294 [branch: DEBUG-v008]
2026-05-24 23:30:45 PLAN/S0294_google-drive-browser-auth-quest3/INDEX.md spec-tech Create tactical plan artifacts for S0294 [branch: DEBUG-v008]
2026-05-24 23:30:46 PLAN/S0294_google-drive-browser-auth-quest3/PHASE_01__browser-oauth-foundation.md spec-tech Create tactical plan artifacts for S0294 [branch: DEBUG-v008]
2026-05-24 23:30:46 PLAN/S0294_google-drive-browser-auth-quest3/PHASE_02__drive-auth-routing.md spec-tech Create tactical plan artifacts for S0294 [branch: DEBUG-v008]
2026-05-24 23:30:47 PLAN/S0294_google-drive-browser-auth-quest3/PHASE_03__reauth-surfaces.md spec-tech Create tactical plan artifacts for S0294 [branch: DEBUG-v008]
2026-05-24 23:30:48 PLAN/S0294_google-drive-browser-auth-quest3/PHASE_04__docs-catalog-cleanup.md spec-tech Create tactical plan artifacts for S0294 [branch: DEBUG-v008]
2026-05-24 23:33:36 PLAN/S0292_vr-content-launch-ui.md spec-update Refined player-first VR launch UI and resolved player-entry ui-clarify decisions [branch: DEBUG-v008]
2026-05-24 23:33:38 app_v2/build.gradle.kts S0294 Add AppAuth dependency for Google Drive browser OAuth [branch: DEBUG-v008]
2026-05-24 23:33:39 app_v2/src/main/AndroidManifest.xml S0294 Register Google Drive AppAuth redirect receiver and completion activity [branch: DEBUG-v008]
2026-05-24 23:33:39 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveBrowserAuthManager.kt S0294 Add Google Drive browser OAuth manager for AppAuth round-trip [branch: DEBUG-v008]
2026-05-24 23:33:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudauth/GoogleDriveAuthCompletionActivity.kt S0294 Add Google Drive browser auth completion activity [branch: DEBUG-v008]
2026-05-24 23:34:05 PLAN/S0292_vr-content-launch-ui.md spec-update Normalized Russian wording in S0292 and removed draft placeholder terminology [branch: DEBUG-v008]
2026-05-24 23:35:39 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveBrowserAuthManager.kt S0294 Fix AppAuth manager compile issues and wire S0294 string keys [branch: DEBUG-v008]
2026-05-24 23:35:40 app_v2/src/main/res/values/strings_s0294.xml S0294 Add EN browser auth strings for S0294 [branch: DEBUG-v008]
2026-05-24 23:35:40 app_v2/src/main/res/values-ru/strings_s0294.xml S0294 Add RU browser auth strings for S0294 [branch: DEBUG-v008]
2026-05-24 23:35:40 app_v2/src/main/res/values-uk/strings_s0294.xml S0294 Add UK browser auth strings for S0294 [branch: DEBUG-v008]
2026-05-24 23:36:57 app_v2/src/main/res/values/strings_s0294.xml S0294 Adjust EN S0294 browser auth copy to avoid aapt escaping issue [branch: DEBUG-v008]
2026-05-24 23:40:26 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveInteractiveSignInCoordinator.kt S0294 Add shared Google Drive interactive sign-in router for browser and Credential Manager paths [branch: DEBUG-v008]
2026-05-24 23:40:26 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveBrowserAuthManager.kt S0294 Expose browser auth session restore helpers for Google Drive routing [branch: DEBUG-v008]
2026-05-24 23:40:26 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthPlugin.kt S0294 Route Google Drive interactive sign-in through shared coordinator and onResume consumption [branch: DEBUG-v008]
2026-05-24 23:40:27 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthCoordinator.kt S0294 Teach Google Drive token coordination about browser-backed credentials [branch: DEBUG-v008]
2026-05-24 23:40:27 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt S0294 Use backend-agnostic Google Drive auth restoration and token access [branch: DEBUG-v008]
2026-05-24 23:40:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt S0294 Show browser-backed Google Drive account status in Add Resource [branch: DEBUG-v008]
2026-05-24 23:40:27 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/helpers/GoogleDriveCredentialsManager.kt S0294 Update Google Drive credential store comment for browser OAuth usage [branch: DEBUG-v008]
2026-05-24 23:41:03 PLAN/S0293_bugfix-multi-window-discoverability.md spec-check Audit S0293 -> Broken; PASS/WARN/FAIL 16/1/1 [branch: DEBUG-v008]
2026-05-24 23:41:03 app_v2/src/main/java/com/sza/fastmediasorter/core/compat/MultiWindowCapabilityDetector.kt spec-check Remove S0293 BlockNeedUserTest probe after Broken audit [branch: DEBUG-v008]
2026-05-24 23:41:03 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-check Remove S0293 BlockNeedUserTest probe after Broken audit [branch: DEBUG-v008]
2026-05-24 23:41:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt spec-check Remove S0293 BlockNeedUserTest probe after Broken audit [branch: DEBUG-v008]
2026-05-24 23:41:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt spec-check Remove S0293 BlockNeedUserTest probe after Broken audit [branch: DEBUG-v008]
2026-05-24 23:41:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-check Remove S0293 BlockNeedUserTest probe after Broken audit [branch: DEBUG-v008]
2026-05-24 23:41:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-check Remove S0293 BlockNeedUserTest probe after Broken audit [branch: DEBUG-v008]
2026-05-24 23:42:32 PLAN/S0292_vr-content-launch-ui.md spec-update Refinement (claude-sonnet-4.5, focus: completeness, consistency) - badge-first UI rewrite, UI Clarification Status READY->PENDING, added round-trip + entry-surfaces contracts, dropped format-chip [branch: DEBUG-v008]
2026-05-24 23:43:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCloudAuthManager.kt S0294 Route Browse and Player Google reauth through shared coordinator with onResume browser result handling [branch: DEBUG-v008]
2026-05-24 23:43:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt S0294 Add Google Drive browser auth failure fallback copy for Add Resource errors [branch: DEBUG-v008]
2026-05-24 23:46:25 PLAN/S0294_google-drive-browser-auth-quest3.md spec-check Audit S0294 -> Verified; PASS/WARN/FAIL 18/0/0; record compact Last Audit block [branch: DEBUG-v008]
2026-05-24 23:46:25 PLAN/S0294_google-drive-browser-auth-quest3/INDEX.md S0294 Sync tactical index state to 4/4 phases done and Verified closure gate [branch: DEBUG-v008]
2026-05-24 23:46:26 PLAN/S0294_google-drive-browser-auth-quest3/PHASE_01__browser-oauth-foundation.md S0294 Mark Phase 01 complete with compile validation evidence [branch: DEBUG-v008]
2026-05-24 23:46:26 PLAN/S0294_google-drive-browser-auth-quest3/PHASE_02__drive-auth-routing.md S0294 Mark Phase 02 complete with compile validation evidence [branch: DEBUG-v008]
2026-05-24 23:46:26 PLAN/S0294_google-drive-browser-auth-quest3/PHASE_03__reauth-surfaces.md S0294 Mark Phase 03 complete with compile and string-audit evidence [branch: DEBUG-v008]
2026-05-24 23:46:26 PLAN/S0294_google-drive-browser-auth-quest3/PHASE_04__docs-catalog-cleanup.md S0294 Mark Phase 04 complete and note Verified audit outcome [branch: DEBUG-v008]
2026-05-24 23:50:00 PLAN/S0295_vr-generic-immerse-playback-contract.md spec Create S0295 as sub-step of S0240 §10.3, blocker for S0292: generic immerse playback contract (accept arbitrary uri+mediaType, return typed VrLaunchResult, StartVrPlaybackUseCase + VrLaunchPoint) [branch: DEBUG-v008]
2026-05-24 23:50:05 PLAN/S0292_vr-content-launch-ui.md spec-update Add S0295 as additional Depends on (generic immerse playback contract) [branch: DEBUG-v008]
2026-05-24 23:54:09 PLAN/S0295_vr-generic-immerse-playback-contract.md spec-all Repair owner-input gate and promote S0295 to Approved [branch: DEBUG-v008]
2026-05-24 23:56:57 PLAN/S0294_google-drive-browser-auth-quest3.md spec-check Audit S0294 -> Broken; PASS/WARN/FAIL 16/0/2; Add Resource fallback copy not wired, browser auth scope leaks into backup/restore [branch: DEBUG-v008]
2026-05-25 00:02:50 PLAN/S0293_bugfix-multi-window-discoverability.md spec-fix Annotate Last Audit (S0293): 2 items marked FOLLOW-UP (control-flow + tactical drift) [branch: DEBUG-v008]
2026-05-25 00:04:38 PLAN/S0295_vr-generic-immerse-playback-contract.md spec-all Promote S0295 to Tactical and align strategic design [branch: DEBUG-v008]
2026-05-25 00:04:38 PLAN/S0295_vr-generic-immerse-playback-contract/INDEX.md spec-tech Create tactical plan for S0295 [branch: DEBUG-v008]
2026-05-25 00:04:38 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_01__contracts-models.md spec-tech Phase 01: contracts-models [branch: DEBUG-v008]
2026-05-25 00:04:38 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_02__activity-contract.md spec-tech Phase 02: activity-contract [branch: DEBUG-v008]
2026-05-25 00:04:38 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_03__launch-orchestration.md spec-tech Phase 03: launch-orchestration [branch: DEBUG-v008]
2026-05-25 00:04:38 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_04__settings-integration.md spec-tech Phase 04: settings-integration [branch: DEBUG-v008]
2026-05-25 00:04:38 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_05__validation-cleanup.md spec-tech Phase 05: validation-cleanup [branch: DEBUG-v008]
2026-05-25 00:06:42 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrLaunchContract.kt VrLaunchContract Add shared VR launch transport models [branch: DEBUG-v008]
2026-05-25 00:07:45 PLAN/S0295_vr-generic-immerse-playback-contract.md S0295 Advance S0295 status to In Progress [branch: DEBUG-v008]
2026-05-25 00:07:46 PLAN/S0295_vr-generic-immerse-playback-contract/INDEX.md S0295 tactical index Track S0295 phase progress [branch: DEBUG-v008]
2026-05-25 00:07:46 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_01__contracts-models.md S0295 phase 01 Mark Step 01.1 done [branch: DEBUG-v008]
2026-05-25 00:08:14 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/XrEntryGateway.kt XrEntryGateway Add generic immersive intent seam [branch: DEBUG-v008]
2026-05-25 00:09:31 PLAN/S0295_vr-generic-immerse-playback-contract/INDEX.md S0295 tactical index Track S0295 step 01.2 progress [branch: DEBUG-v008]
2026-05-25 00:09:31 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_01__contracts-models.md S0295 phase 01 Mark Step 01.2 done [branch: DEBUG-v008]
2026-05-25 00:09:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt spec-all S0293 fix-loop: OR-compose persistent fileOpsInOverflowMenu with isMultiWindowActiveNow(activity) via multiWindowTick StateFlow; add notifyMultiWindowModeChanged() entry point [branch: DEBUG-v008]
2026-05-25 00:09:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt spec-all S0293 fix-loop: pass activity to BrowseObserverManager; pipe notifyMultiWindowModeChanged through observer first so per-row overflow visibility refreshes on DeX transitions [branch: DEBUG-v008]
2026-05-25 00:11:55 PLAN/S0293_bugfix-multi-window-discoverability.md spec-check Audit S0293 -> Partial (13 PASS / 1 WARN / 0 FAIL); FAIL §11.4 from prior audit now closed by BrowseObserverManager OR-compose; tactical drift WARN remains (Phase 07/08 markers not in INDEX) [branch: DEBUG-v008]
2026-05-25 00:14:26 PLAN/S0293_bugfix-multi-window-discoverability/INDEX.md spec-all S0293 retrofit: bump INDEX to 8/8 phases (Phase 07 observer OR-compose + Phase 08 main-list per-resource entry) [branch: DEBUG-v008]
2026-05-25 00:14:26 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_07__browse-observer-runtime-orcompose.md spec-all S0293 Phase 07 retrofit file: BrowseObserverManager OR-compose + ticker [branch: DEBUG-v008]
2026-05-25 00:14:26 PLAN/S0293_bugfix-multi-window-discoverability/PHASE_08__main-list-per-resource-new-window.md spec-all S0293 Phase 08 retrofit file: per-resource Open in new window on main list [branch: DEBUG-v008]
2026-05-25 00:15:36 PLAN/S0293_bugfix-multi-window-discoverability.md spec-check Audit S0293 -> Verified (16 PASS / 0 WARN / 0 FAIL); WARN tactical drift closed via INDEX retrofit (Phase 07+08 documented). Debug tags removed: 0. [branch: DEBUG-v008]
2026-05-25 00:23:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt spec-all S0294 fix-loop: showDetailedErrorDialog now passes through curated (s0294 browser-auth messages); Dropbox caller switched to null (was raw e.message) [branch: DEBUG-v008]
2026-05-25 00:24:37 PLAN/S0294_google-drive-browser-auth-quest3.md spec-check Audit S0294 iter 2 -> Broken (17 PASS / 0 WARN / 1 FAIL); item 1 string-wiring resolved; item 2 auth-scope leak remains FOLLOW-UP owner-design-needed [branch: DEBUG-v008]
2026-05-25 00:27:50 PLAN/spec-catalog.jsonl spec-next Session: 4 picked (1 Verified S0293; 1 progressed S0294 Broken->Broken with item 1 fixed; 2 skipped drift-needs-review S0290 S0291); 3 round-memoryed (S0292 deps-in-progress, S0295 concurrent, S0140 research-heavy) [branch: DEBUG-v008]
2026-05-25 00:43:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt PlayerVrLaunchManager added player VR badge, prompt, and panel return handling [branch: DEBUG-v008]
2026-05-25 00:44:05 app_v2/src/main/res/values/strings_s0292.xml string/player_vr_* added player VR launch strings [branch: DEBUG-v008]
2026-05-25 00:44:06 docs/FEATURES.md VR Edition documented player VR launch entry in feature docs [branch: DEBUG-v008]
2026-05-25 00:44:37 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrLaunchContract.kt VrLaunchContract expanded shared VR launch and panel return contract for player round-trip [branch: DEBUG-v008]
2026-05-25 00:44:38 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/IntentSerializationCompat.kt IntentSerializationCompat added typed Serializable extra helper for VR intents [branch: DEBUG-v008]
2026-05-25 00:44:38 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/StartVrPlaybackUseCase.kt StartVrPlaybackUseCase added unified VR launch orchestration and unsupported-media gating [branch: DEBUG-v008]
2026-05-25 00:44:38 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt XrEntryGatewayImpl added generic immersive intent builder for XR host launches [branch: DEBUG-v008]
2026-05-25 00:44:39 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity added generic launch input handling and typed panel return handoff [branch: DEBUG-v008]
2026-05-25 00:44:39 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt VrSettingsBlockFragment moved settings diagnostic launch to StartVrPlaybackUseCase [branch: DEBUG-v008]
2026-05-25 00:44:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt AppSettings added dismissal flag for the one-time player VR prompt [branch: DEBUG-v008]
2026-05-25 00:44:39 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl persisted the one-time player VR prompt dismissal flag [branch: DEBUG-v008]
2026-05-25 00:44:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity added player VR dependencies and panel return intent window routing [branch: DEBUG-v008]
2026-05-25 00:44:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt CommandPanelController added overflow VR action routing [branch: DEBUG-v008]
2026-05-25 00:44:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt CommandPanelLayoutPlanner added overflow-only Open in VR command [branch: DEBUG-v008]
2026-05-25 00:44:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt PlayerCommandPanelCallbackImpl routed overflow VR action to PlayerVrLaunchManager [branch: DEBUG-v008]
2026-05-25 00:44:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FilenameOverlayAutoHideManager.kt FilenameOverlayAutoHideManager mirrored fullscreen filename overlay timing to VR companion views [branch: DEBUG-v008]
2026-05-25 00:44:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt PlayerBindingSafeViews added safe accessors for player VR overlay views [branch: DEBUG-v008]
2026-05-25 00:44:41 app_v2/src/main/res/layout/player_vr_launch_overlay_content.xml player_vr_launch_overlay_content added player VR badge and inline prompt overlay [branch: DEBUG-v008]
2026-05-25 00:44:42 app_v2/src/main/res/layout/activity_player_unified.xml activity_player_unified included the player VR launch overlay in portrait layout [branch: DEBUG-v008]
2026-05-25 00:44:42 app_v2/src/main/res/layout-land/activity_player_unified.xml activity_player_unified landscape included the player VR launch overlay in landscape layout [branch: DEBUG-v008]
2026-05-25 00:44:42 docs/FEATURES_RU.md VR section documented the player VR launch entry in the RU feature mirror [branch: DEBUG-v008]
2026-05-25 00:44:42 docs/FEATURES_UK.md VR section documented the player VR launch entry in the UK feature mirror [branch: DEBUG-v008]
2026-05-25 00:45:38 PLAN/S0292_vr-content-launch-ui.md S0292 spec marked S0292 implemented and recorded non-device-test validation results [branch: DEBUG-v008]
2026-05-25 00:45:38 PLAN/S0292_vr-content-launch-ui/INDEX.md S0292 tactical index marked all S0292 phases done and recorded closure notes [branch: DEBUG-v008]
2026-05-25 22:38:12 PLAN/S0295_vr-generic-immerse-playback-contract/INDEX.md S0295 index Advance activity contract phase status [branch: DEBUG-v008]
2026-05-25 22:38:12 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_02__activity-contract.md S0295 phase 02 Mark pre-resolved activity contract phase [branch: DEBUG-v008]
2026-05-25 22:39:26 PLAN/S0292_vr-content-launch-ui.md spec-check Audit S0292 -> Partial; PASS/WARN/FAIL 16/3/0; 3 snapshot-field gaps (sleepTimer, audioFocus, partial restoration) [branch: DEBUG-v008]
2026-05-25 22:39:30 PLAN/S0292_vr-content-launch-ui/INDEX.md spec-check INDEX status Implemented -> Partial after audit found 3 snapshot/restoration WARN items [branch: DEBUG-v008]
2026-05-25 22:40:07 PLAN/S0292_vr-content-launch-ui.md spec-fix Annotate Last Audit: 3 WARN items marked FOLLOW-UP (snapshot field capture + round-trip restoration require manual implementation) [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrLaunchContract.kt VrLaunchContract Finalize shared VR launch transport and result models [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/XrEntryGateway.kt XrEntryGateway Expose generic immersive intent transport seam [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vrStub/java/com/sza/fastmediasorter/core/xr/NoOpXrEntryGateway.kt NoOpXrEntryGateway Return null generic immersive intents for non-VR flavors [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt XrEntryGatewayImpl Route diagnostic immersive launches through typed VR launch input [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/IntentSerializationCompat.kt IntentSerializationCompat Add typed serializable extra reader for VR launch contracts [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContract.kt VrPlaybackActivityContract Add ActivityResult contract for immersive playback results [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrLaunchArgs.kt DiagnosticXrLaunchArgs Parse typed launch args for the immersive XR host [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Load diagnostic playlist or image URI and return typed VR results [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/StartVrPlaybackUseCase.kt StartVrPlaybackUseCase Define shared Ready or Completed VR preflight contract [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/StartVrPlaybackUseCaseImpl.kt StartVrPlaybackUseCaseImpl Implement VR launch preflight and unsupported media mapping [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vrStub/java/com/sza/fastmediasorter/core/xr/NoOpStartVrPlaybackUseCase.kt NoOpStartVrPlaybackUseCase Return no-runtime VR launch results for non-VR flavors [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/di/XrModule.kt XrModule Bind real VR launch preflight use case [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vrStub/java/com/sza/fastmediasorter/core/xr/di/NoOpXrModule.kt NoOpXrModule Bind no-op VR launch preflight use case [branch: DEBUG-v008]
2026-05-25 22:43:24 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt VrSettingsBlockFragment Route Test Immersive through ActivityResult VR contract [branch: DEBUG-v008]
2026-05-25 22:43:24 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_03__launch-orchestration.md S0295 phase 03 Mark launch orchestration phase done [branch: DEBUG-v008]
2026-05-25 22:43:24 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_04__settings-integration.md S0295 phase 04 Mark settings integration phase done [branch: DEBUG-v008]
2026-05-25 22:43:24 PLAN/S0295_vr-generic-immerse-playback-contract/INDEX.md S0295 index Advance launch and settings phase status [branch: DEBUG-v008]
2026-05-25 22:51:18 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContract.kt spec-all S0295 Phase 02 Step 02.1: VrPlaybackActivityContract for ActivityResult-based VR launches [branch: DEBUG-v008]
2026-05-25 22:51:18 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrLaunchArgs.kt spec-all S0295 Phase 02 Step 02.2: immutable launch-args parsing helper extracted from DiagnosticXrActivity inline [branch: DEBUG-v008]
2026-05-25 22:51:18 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-all S0295 Phase 02 Steps 02.3+02.4: ContentResolver path for FILE_URI, NotYetSupported short-circuit for VIDEO/GIF, split exit via deliveryMode (ACTIVITY_RESULT vs LEGACY_PANEL_RETURN), render-thread natural exit emits CompletedNormally [branch: DEBUG-v008]
2026-05-25 22:52:41 PLAN/S0295_vr-generic-immerse-playback-contract.md spec-check Audit S0295 -> Verified (14 PASS / 0 WARN / 0 FAIL); all 5 phases done, builds PASS standard+noLegal; debug tags removed: 0 [branch: DEBUG-v008]
2026-05-25 22:54:24 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_05__validation-cleanup.md S0295 phase 05 Record validation cleanup gates [branch: DEBUG-v008]
2026-05-25 22:54:24 PLAN/S0295_vr-generic-immerse-playback-contract/INDEX.md S0295 index Record completion gate build and catalog checks [branch: DEBUG-v008]
2026-05-25 22:54:24 app_v2/build.gradle.kts debug build version Version updated by S0295 standard and noLegal debug build gates [branch: DEBUG-v008]
2026-05-25 22:55:11 PLAN/spec-catalog.jsonl spec-next Session: 1 Verified (S0295); 6 skip-cached (S0240 tier-5, S0294 owner-design, S0292 owner-design, S0174 blocker-not-verified, S0046 mid-phase, S0082 manual-verify); S0140/S0290/S0291 still cached from prior session [branch: DEBUG-v008]
2026-05-25 22:56:24 PLAN/S0295_vr-generic-immerse-playback-contract.md spec-check Audit S0295 -> Verified; PASS/WARN/FAIL 17/0/0 [branch: DEBUG-v008]
2026-05-25 22:56:24 PLAN/S0295_vr-generic-immerse-playback-contract/PHASE_05__validation-cleanup.md S0295 phase 05 Record spec-check completion [branch: DEBUG-v008]
2026-05-25 22:56:24 PLAN/S0295_vr-generic-immerse-playback-contract/INDEX.md S0295 index Close completion gate after Verified audit [branch: DEBUG-v008]
2026-05-25 22:56:30 PLAN/spec_vr_test_colosseum_sample_url_dead.md spec_vr_test_colosseum_sample_url_dead Archive obsolete standalone VR dead URL note after S0291 absorbed the fix [branch: DEBUG-v008]
2026-05-25 22:57:35 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt XrEntryGatewayImpl Keep NEW_TASK flag only on legacy VR panel-return launches [branch: DEBUG-v008]
2026-05-25 22:59:31 app_v2/build.gradle.kts debug build version Version updated by final noLegal debug rebuild gate [branch: DEBUG-v008]
2026-05-25 22:59:53 PLAN/S0296_vr-immerse-video-playback.md S0296 Created strategic spec S0296 vr-immerse-video-playback (Draft, prio 80, tier 3) covering S0240 §10.3 next step after S0295: ExoPlayer-in-XR with CINEMA quad layer baseline, mono-flat video focus, per-format and auto-detect deferred to follow-up tickets [branch: DEBUG-v008]
2026-05-25 22:59:53 PLAN/S0297_nolegal-vr-capability-research.md S0297 Created research-only strategic spec S0297 nolegal-vr-capability-research (Draft, prio 55, tier 3): 12-candidate matrix with A/B/C recommendations for noLegal-only VR additions (out-of-legal-field), first-wave A1 yt-dlp VR-extraction + A2 PaddleOCR subtitles, defers DRM-bypass / passthrough capture / Whisper / experimental OpenXR loaders [branch: DEBUG-v008]
2026-05-25 23:04:58 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContract.kt S0295 Preserve InvalidUri in the VR activity contract fallback path [branch: DEBUG-v008]
2026-05-25 23:05:44 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContractTest.kt S0295 Add focused unit tests for VR launch unavailable mapping [branch: DEBUG-v008]
2026-05-25 23:10:49 app_v2/src/test/java/com/sza/fastmediasorter/data/cloud/GoogleDriveTokenRefreshTest.kt test-fix Pass browserAuthManager to GoogleDriveRestClient test setup [branch: DEBUG-v008]
2026-05-25 23:11:36 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContractTest.kt S0295 Pin VR contract Robolectric test to SDK 34 [branch: DEBUG-v008]
2026-05-25 23:19:10 PLAN/S0296_vr-immerse-video-playback.md spec-update Research-backed refinement proposals for VR immersive video playback [branch: DEBUG-v008]
2026-05-25 23:24:51 PLAN/S0297_nolegal-vr-capability-research/RESEARCH.md S0297 Populated S0297 research artefact with detailed per-candidate blocks (A1 yt-dlp VR / A2 PaddleOCR subtitles / B1 adult-VR catalog / B2 libVLC codec pack / B3 VR APK classifier). Findings: YouTube VR180 anonymous extraction broken upstream (yt-dlp #14413); no Quest VR-player ships real-time subtitle OCR (A2 differentiation); Media3 FFmpeg is audio-only and FFmpegKit archived (libVLC AAR only viable for B2). Recommended order B3 -> A2 -> A1 -> B1.3. [branch: DEBUG-v008]
2026-05-25 23:24:51 PLAN/S0297_nolegal-vr-capability-research.md S0297 Strategic spec Last Audit updated with research-artefact completion summary; surprise facts surfaced (YouTube VR180 upstream broken, A2 has zero direct competitor on Quest, libVLC AAR sole viable B2 path). [branch: DEBUG-v008]
2026-05-25 23:42:39 PLAN/S0297_nolegal-vr-capability-research/DECISION_BRIEF.md S0297 Added owner decision brief: seven checkbox-style decisions (first-wave order / A1 variant / B1 scope / B2 stack / C-list retention / S0156 relationship / SpatialMetadataInjector shared primitive) with recommended defaults and post-decision mechanical next steps for impl-ticket allocation [branch: DEBUG-v008]
2026-05-25 23:52:19 PLAN/S0296_vr-immerse-video-playback.md spec Finish S0296 strategic spec and approve researched VR video baseline [branch: DEBUG-v008]
2026-05-25 23:54:52 PLAN/S0297_nolegal-vr-capability-research.md S0297 Owner-decision recorded: composite default chosen 2026-05-25 (all D-1..D-7 set to recommended); §3.3 Owner inputs section added; status transitioned Draft -> Approved [branch: DEBUG-v008]
2026-05-25 23:54:52 PLAN/S0297_nolegal-vr-capability-research/DECISION_BRIEF.md S0297 Owner ticked recommended options on all 7 decision blocks (D-1.a / D-2.a / D-3.a / D-4.a / D-5.a / D-6.a / D-7.a) [branch: DEBUG-v008]
2026-05-25 23:54:52 PLAN/S0298_vr-companion-apk-badge.md S0298 Created strategic spec S0298 vr-companion-apk-badge (Draft, prio 70, tier 3): first-wave D-1.a impl ticket from S0297 - adds visual VR badge on .apk tiles in noLegal Browse via PackageManager.getPackageArchiveInfo(GET_META_DATA | GET_CONFIGURATIONS), B3.2 variant without AXML walk, cache by (path, size, mtime), lazy on-viewport classification, flavor-isolated to src/noLegal/ [branch: DEBUG-v008]
2026-05-26 00:05:07 PLAN/S0296_vr-immerse-video-playback/INDEX.md spec-tech Create S0296 tactical index [branch: DEBUG-v008]
2026-05-26 00:05:07 PLAN/S0296_vr-immerse-video-playback/PHASE_01__return-snapshot-contract.md spec-tech Create S0296 phase 01 return snapshot contract [branch: DEBUG-v008]
2026-05-26 00:05:07 PLAN/S0296_vr-immerse-video-playback/PHASE_02__video-launch-gates.md spec-tech Create S0296 phase 02 video launch gates [branch: DEBUG-v008]
2026-05-26 00:05:08 PLAN/S0296_vr-immerse-video-playback/PHASE_03__xr-owned-playback.md spec-tech Create S0296 phase 03 XR-owned playback [branch: DEBUG-v008]
2026-05-26 00:05:08 PLAN/S0296_vr-immerse-video-playback/PHASE_04__flat-return-restore.md spec-tech Create S0296 phase 04 flat return restore [branch: DEBUG-v008]
2026-05-26 00:05:08 PLAN/S0296_vr-immerse-video-playback/PHASE_05__docs-catalog-cleanup.md spec-tech Create S0296 phase 05 docs catalog cleanup [branch: DEBUG-v008]
2026-05-26 00:05:08 PLAN/S0296_vr-immerse-video-playback.md spec-tech Advance S0296 to Tactical [branch: DEBUG-v008]
2026-05-26 00:10:03 PLAN/S0298_vr-companion-apk-badge.md spec-tech Advance S0298 to Tactical and record UI clarification readiness [branch: DEBUG-v008]
2026-05-26 00:10:03 PLAN/S0298_vr-companion-apk-badge/INDEX.md spec-tech Create tactical plan for S0298 [branch: DEBUG-v008]
2026-05-26 00:10:03 PLAN/S0298_vr-companion-apk-badge/PHASE_01__browse-hooks.md spec-tech Add Phase 01 browse hook plan for S0298 [branch: DEBUG-v008]
2026-05-26 00:10:03 PLAN/S0298_vr-companion-apk-badge/PHASE_02__apk-classification.md spec-tech Add Phase 02 classification plan for S0298 [branch: DEBUG-v008]
2026-05-26 00:10:03 PLAN/S0298_vr-companion-apk-badge/PHASE_03__nolegal-badge-ui.md spec-tech Add Phase 03 UI plan for S0298 [branch: DEBUG-v008]
2026-05-26 00:10:03 PLAN/S0298_vr-companion-apk-badge/PHASE_04__docs-catalog-cleanup.md spec-tech Add Phase 04 cleanup plan for S0298 [branch: DEBUG-v008]
2026-05-26 00:10:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkTileBadgeBinder.kt S0298 phase 01.1 Add Browse APK tile badge binder contract [branch: DEBUG-v008]
2026-05-26 00:11:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/NoOpBrowseApkTileBadgeBinder.kt S0298 phase 01.1 Add no-op Browse APK tile badge binder [branch: DEBUG-v008]
2026-05-26 00:12:31 app_v2/src/main/java/com/sza/fastmediasorter/di/BrowseApkTileBadgeModule.kt S0298 phase 01.1 Bind default Browse APK tile badge binder [branch: DEBUG-v008]
2026-05-26 00:13:19 app_v2/src/main/res/values/ids.xml S0298 phase 01.1 Add shared Browse APK badge view ids [branch: DEBUG-v008]
2026-05-26 00:14:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0298 phase 01.2 Inject Browse APK tile badge binder into BrowseActivity [branch: DEBUG-v008]
2026-05-26 00:14:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt S0298 phase 01.2 Thread Browse APK tile badge binder into manager initializer [branch: DEBUG-v008]
2026-05-26 00:15:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt S0298 phase 01.2 Bind and clear Browse APK tile badges from MediaFileAdapter [branch: DEBUG-v008]
2026-05-26 00:17:15 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkClassification.kt S0298 phase 02.1 Add VR APK classification model [branch: DEBUG-v008]
2026-05-26 00:17:59 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkClassifier.kt S0298 phase 02.1 Add manifest-based VR APK classifier [branch: DEBUG-v008]
2026-05-26 00:19:56 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkArchiveResolver.kt S0298 phase 02.2 Add APK archive resolver for local network and cloud Browse paths [branch: DEBUG-v008]
2026-05-26 00:20:41 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkClassificationCache.kt S0298 phase 02.2 Add bounded VR APK classification cache [branch: DEBUG-v008]
2026-05-26 00:23:13 app_v2/src/noLegal/res/layout/item_media_file.xml S0298 phase 03.1 Add noLegal list tile VR badge layout override [branch: DEBUG-v008]
2026-05-26 00:23:13 app_v2/src/noLegal/res/layout/item_media_file_grid.xml S0298 phase 03.1 Add noLegal grid tile VR badge layout override [branch: DEBUG-v008]
2026-05-26 00:23:13 app_v2/src/noLegal/res/values/strings_s0298.xml S0298 phase 03.1 Add EN accessibility string for VR APK badge [branch: DEBUG-v008]
2026-05-26 00:23:14 app_v2/src/noLegal/res/values-ru/strings_s0298.xml S0298 phase 03.1 Add RU accessibility string for VR APK badge [branch: DEBUG-v008]
2026-05-26 00:23:15 app_v2/src/noLegal/res/values-uk/strings_s0298.xml S0298 phase 03.1 Add UK accessibility string for VR APK badge [branch: DEBUG-v008]
2026-05-26 00:23:58 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/NoLegalBrowseApkTileBadgeBinder.kt S0298 phase 03.2 Bind VR APK badge state into noLegal Browse tiles [branch: DEBUG-v008]
2026-05-26 00:24:42 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/BrowseApkTileBadgeModule.kt S0298 phase 03.2 Override Browse APK tile badge binder in noLegal Hilt graph [branch: DEBUG-v008]
2026-05-27 00:25:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkTileBadgeBinder.kt app_v2 main Browse badge hook Add Browse APK tile badge binder contract [branch: DEBUG-v008]
2026-05-27 00:25:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/NoOpBrowseApkTileBadgeBinder.kt app_v2 main Browse badge hook Add no-op Browse APK tile badge binder [branch: DEBUG-v008]
2026-05-27 00:26:39 app_v2/src/main/java/com/sza/fastmediasorter/di/BrowseApkTileBadgeModule.kt app_v2 main Hilt binding Bind default Browse APK tile badge binder [branch: DEBUG-v008]
2026-05-27 00:26:57 PLAN/S0297_nolegal-vr-capability-research/RESEARCH.md S0297 Refine S0297 research artifact wording and proposals [branch: DEBUG-v008]
2026-05-27 00:26:57 PLAN/S0297_nolegal-vr-capability-research.md S0297 Record S0297 spec-update structural proposal [branch: DEBUG-v008]
2026-05-27 00:27:10 PLAN/S0297_nolegal-vr-capability-research.md S0297 Remove S0297 forbidden ellipsis placeholder [branch: DEBUG-v008]
2026-05-27 00:27:34 app_v2/src/main/res/values/ids.xml app_v2 shared badge IDs Add shared Browse APK VR badge view IDs [branch: DEBUG-v008]
2026-05-27 00:31:48 PLAN/S0298_vr-companion-apk-badge/PHASE_01__browse-hooks.md S0298 tactical tracking Mark Phase 01 Browse hooks complete [branch: DEBUG-v008]
2026-05-27 00:31:49 PLAN/S0298_vr-companion-apk-badge/INDEX.md S0298 tactical index Update Phase 01 status and counters [branch: DEBUG-v008]
2026-05-27 00:35:19 PLAN/S0298_vr-companion-apk-badge/PHASE_02__apk-classification.md S0298 tactical tracking Mark Phase 02 APK classification complete [branch: DEBUG-v008]
2026-05-27 00:35:20 PLAN/S0298_vr-companion-apk-badge/INDEX.md S0298 tactical index Update Phase 02 status and counters [branch: DEBUG-v008]
2026-05-27 00:36:50 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/BrowseApkTileBadgeModule.kt app_v2 noLegal Hilt binding Name noLegal Browse APK tile badge binder binding for S0298 tracking [branch: DEBUG-v008]
2026-05-27 00:39:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt app_v2 Browse adapter click helpers Restore local click helper functions used by Browse badge hook refactor [branch: DEBUG-v008]
2026-05-27 00:41:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt app_v2 Browse adapter click helpers Remove duplicate Browse adapter click helpers after S0298 build repair [branch: DEBUG-v008]
2026-05-27 00:44:50 PLAN/S0298_vr-companion-apk-badge/PHASE_03__nolegal-badge-ui.md S0298 tactical tracking Mark Phase 03 noLegal badge UI complete [branch: DEBUG-v008]
2026-05-27 00:44:51 PLAN/S0298_vr-companion-apk-badge/INDEX.md S0298 tactical index Update Phase 03 status and counters [branch: DEBUG-v008]
2026-05-27 00:46:21 docs/FEATURES_noLegal.md S0298 noLegal feature inventory Document VR companion APK badge in noLegal inventory [branch: DEBUG-v008]
2026-05-27 00:46:22 docs/FEATURES_noLegal_RU.md S0298 noLegal feature inventory RU Document VR companion APK badge in Russian noLegal inventory [branch: DEBUG-v008]
2026-05-27 00:46:23 docs/FEATURES_noLegal_UK.md S0298 noLegal feature inventory UK Document VR companion APK badge in Ukrainian noLegal inventory [branch: DEBUG-v008]
2026-05-27 00:48:23 PLAN/S0298_vr-companion-apk-badge.md S0298 strategic spec Mark S0298 implemented [branch: DEBUG-v008]
2026-05-27 00:48:24 PLAN/S0298_vr-companion-apk-badge/PHASE_04__docs-catalog-cleanup.md S0298 tactical tracking Mark Phase 04 docs and cleanup complete [branch: DEBUG-v008]
2026-05-27 00:48:24 PLAN/S0298_vr-companion-apk-badge/INDEX.md S0298 tactical index Mark S0298 tactical plan done [branch: DEBUG-v008]
2026-05-27 00:50:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt standard build syntax cleanup Remove orphan panel geometry log fragments left after Timber cleanup [branch: DEBUG-v008]
2026-05-27 00:51:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt standard build syntax cleanup Remove orphan touch debug log fragment left after Timber cleanup [branch: DEBUG-v008]
2026-05-27 00:51:46 dev/TEST_COVERAGE_AUDIT_TASK.md test coverage audit Document whole-app test coverage audit task [branch: DEBUG-v008]
2026-05-27 00:52:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt standard build syntax cleanup Remove orphan text viewer log fragments left after Timber cleanup [branch: DEBUG-v008]
2026-05-27 00:54:17 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/IntentSerializationCompatTest.kt XR launch tests Add serializable intent compatibility unit tests [branch: DEBUG-v008]
2026-05-27 00:54:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerFileOpsInitializer.kt standard build syntax cleanup Fix player file ops imports and drained branch expression [branch: DEBUG-v008]
2026-05-27 00:55:18 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrLaunchContractTest.kt XR launch tests Add VR launch contract unit tests [branch: DEBUG-v008]
2026-05-27 00:56:40 app_v2/src/testNoLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkClassificationCacheTest.kt noLegal APK classification tests Add VR APK classification cache unit tests [branch: DEBUG-v008]
2026-05-27 01:00:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingGlideListeners.kt image loading glide listeners Fix stale image loading helper imports [branch: DEBUG-v008]
2026-05-27 01:00:54 PLAN/S0298_vr-companion-apk-badge.md spec-check Audit S0298 -> Verified [branch: DEBUG-v008]
2026-05-27 01:00:55 PLAN/S0298_vr-companion-apk-badge/INDEX.md S0298 tactical index Mark S0298 completion gate verified [branch: DEBUG-v008]
2026-05-27 01:03:33 PLAN/S0002_decompose-giant-files.md app_v2 S0002 Wave 53: drove 12/16 hard-limit-zone Kotlin files <= 1000 LOC via mass KDoc collapse + helper extractions (StandaloneLaunchDebugLogger, MainEventHandler, EpubWebViewLifecycle, PlayerFileOpsInitializer, GoogleDriveMultipartUploader, ImageLoadingGlideListeners). 4 large files (TextViewer, PdfViewer, PlayerActivity, CommandPanelController) remain for Wave 54. [branch: DEBUG-v008]
2026-05-27 01:39:41 PLAN/S0002_decompose-giant-files.md app_v2 S0002 Wave 53 COMPLETE: drove all 16 hard-limit-zone Kotlin files <= 1000 LOC via 15 helper extractions + mass mechanical compression. Status -> Verified. Build standardDebug PASS. Helpers: StandaloneLaunchDebugLogger, MainEventHandler, EpubWebViewLifecycle, PlayerFileOpsInitializer, GoogleDriveMultipartUploader, ImageLoadingGlideListeners, CommandPanelAvailabilityUpdater, PdfTranslationCoordinator, PdfThumbnailSheet, PlayerInputDispatcher, PlayerActivityLifecycleBridge, TextEditorActionPanelCallbacks, TextViewerGestureDetectors, TextViewerLoader, TextEditorModeController. [branch: DEBUG-v008]
2026-05-28 00:08:51 wear/src/test/java/com/sza/fastmediasorter/wear/domain/usecase/ApplyWearSettingsUseCaseTest.kt Wear settings tests Add Wear settings apply use case unit test [branch: DEBUG-v008]
2026-05-28 00:08:56 wear/src/test/java/com/sza/fastmediasorter/wear/domain/model/WearEventEnvelopeTest.kt Wear event envelope tests Add Wear event envelope equality unit tests [branch: DEBUG-v008]
2026-05-28 00:08:59 wear/src/test/java/com/sza/fastmediasorter/wear/data/network/itunes/ITunesTrackTest.kt Wear iTunes artwork tests Add iTunes artwork URL mapping unit tests [branch: DEBUG-v008]
2026-05-28 00:10:11 wear/src/test/java/com/sza/fastmediasorter/wear/domain/usecase/ImportNetworkSourcesUseCaseTest.kt Wear import source tests Update fake repository for observeSources contract [branch: DEBUG-v008]
2026-05-28 00:10:52 dev/TEST_COVERAGE_AUDIT_TASK.md test coverage audit Record completed test slices and coverage baseline limitation [branch: DEBUG-v008]
2026-05-28 00:11:16 wear/src/test/java/com/sza/fastmediasorter/wear/data/network/ftp/FtpConnectionTestTest.kt Wear FTP connection tests Add FTP connection stub contract unit test [branch: DEBUG-v008]
2026-05-28 00:11:19 wear/src/test/java/com/sza/fastmediasorter/wear/data/network/sftp/SftpConnectionTestTest.kt Wear SFTP connection tests Add SFTP connection stub contract unit test [branch: DEBUG-v008]
2026-05-28 00:11:54 dev/TEST_COVERAGE_AUDIT_TASK.md test coverage audit Record Wear FTP and SFTP test slice [branch: DEBUG-v008]
2026-05-28 23:38:03 PLAN/S0299_office-document-viewing-legal-routing.md spec Add strategic spec S0299 for office document viewing legal routing [branch: DEBUG-v008]
2026-05-29 00:00:28 PLAN/S0299_office-document-viewing-legal-routing/INDEX.md spec-tech Create tactical plan for S0299 [branch: DEBUG-v008]
2026-05-29 00:00:29 PLAN/S0299_office-document-viewing-legal-routing/PHASE_01__classification.md spec-tech Phase 01: classification [branch: DEBUG-v008]
2026-05-29 00:00:29 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-tech Phase 02: external handoff [branch: DEBUG-v008]
2026-05-29 00:00:29 PLAN/S0299_office-document-viewing-legal-routing/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs catalog cleanup [branch: DEBUG-v008]
2026-05-29 00:00:29 PLAN/S0299_office-document-viewing-legal-routing.md spec-tech Status to Tactical for S0299 [branch: DEBUG-v008]
2026-05-29 00:00:31 PLAN/S0300_domain-data-unit-tests.md spec Add strategic spec S0300 for domain+data unit test coverage (ad-hoc) [branch: DEBUG-v008]
2026-05-29 00:01:04 PLAN/S0299_office-document-viewing-legal-routing.md spec-dev Status to In Progress for S0299 [branch: DEBUG-v008]
2026-05-29 00:01:04 PLAN/S0299_office-document-viewing-legal-routing/INDEX.md spec-dev Start Phase 01 for S0299 [branch: DEBUG-v008]
2026-05-29 00:01:04 PLAN/S0299_office-document-viewing-legal-routing/PHASE_01__classification.md spec-dev Start Step 01.1 for S0299 [branch: DEBUG-v008]
2026-05-29 00:02:04 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt MediaType Add Office document media type [branch: DEBUG-v008]
2026-05-29 00:02:04 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/MediaExtensions.kt MediaExtensions Classify Office document extensions [branch: DEBUG-v008]
2026-05-29 00:02:05 app_v2/src/main/java/com/sza/fastmediasorter/data/common/MediaTypeUtils.kt MediaTypeUtils Map Office document extensions and MIME types [branch: DEBUG-v008]
2026-05-29 00:02:05 PLAN/S0299_office-document-viewing-legal-routing/PHASE_01__classification.md spec-dev Complete Step 01.1 for S0299 [branch: DEBUG-v008]
2026-05-29 00:02:48 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceEntity.kt ResourceEntity Document resource flags include Office documents [branch: DEBUG-v008]
2026-05-29 00:02:48 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt ResourceRepositoryImpl Persist Office document media type flag [branch: DEBUG-v008]
2026-05-29 00:02:48 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt AppSettings Enable Office documents with document settings [branch: DEBUG-v008]
2026-05-29 00:02:48 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ResourceFormData.kt ResourceFormData Include Office documents in document profile [branch: DEBUG-v008]
2026-05-29 00:02:48 PLAN/S0299_office-document-viewing-legal-routing/PHASE_01__classification.md spec-dev Complete Step 01.2 for S0299 [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/FileTypeFilter.kt FileTypeFlags Document masks include Office documents [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCase.kt ProvisionDefaultResourcesUseCase Include Office documents in default document resource [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProvisionDownloadsDestinationUseCase.kt ProvisionDownloadsDestinationUseCase Include Office documents in downloads destination types [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ScanLocalFoldersUseCase.kt ScanLocalFoldersUseCase Include Office documents in virtual document resource [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt ExecuteScheduledOperationUseCase Include Office documents in scheduled document operations [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt GetMediaFilesUseCase Allow Office document filtering for document-enabled flavors [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt LocalMediaScanner Include Office documents in document scans [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt MediaStoreRepositoryImpl Select Office documents from MediaStore [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpMediaScanner.kt FtpMediaScanner Treat Office documents as unbounded document files [branch: DEBUG-v008]
2026-05-29 00:05:23 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt SftpMediaScanner Treat Office documents as unbounded document files [branch: DEBUG-v008]
2026-05-29 00:05:23 PLAN/S0299_office-document-viewing-legal-routing/PHASE_01__classification.md spec-dev Complete Step 01.3 for S0299 [branch: DEBUG-v008]
2026-05-29 00:06:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt AdapterThumbnailLoader Render Office document extension thumbnails [branch: DEBUG-v008]
2026-05-29 00:06:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt PagingMediaFileAdapter Render Office document extension placeholders [branch: DEBUG-v008]
2026-05-29 00:06:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt ResourceAdapter Include Office documents in document resource indicators [branch: DEBUG-v008]
2026-05-29 00:06:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/FilterResourceDialog.kt FilterResourceDialog Add Office document media filter chip [branch: DEBUG-v008]
2026-05-29 00:06:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MediaGroupPalette.kt MediaGroupPalette Color Office documents as documents [branch: DEBUG-v008]
2026-05-29 00:06:12 PLAN/S0299_office-document-viewing-legal-routing/PHASE_01__classification.md spec-dev Complete Step 01.4 for S0299 [branch: DEBUG-v008]
2026-05-29 00:08:59 app_v2/src/main/java/com/sza/fastmediasorter/core/util/MediaMetadataHelper.kt MediaMetadataHelper Handle Office document metadata fallback [branch: DEBUG-v008]
2026-05-29 00:08:59 app_v2/src/main/java/com/sza/fastmediasorter/util/ThumbnailColorMapper.kt ThumbnailColorMapper Color Office documents as documents [branch: DEBUG-v008]
2026-05-29 00:08:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoLaunchManager.kt FileInfoLaunchManager Resolve Office document MIME for external open [branch: DEBUG-v008]
2026-05-29 00:13:18 PLAN/S0299_office-document-viewing-legal-routing/INDEX.md spec-dev Complete Phase 01 for S0299 [branch: DEBUG-v008]
2026-05-29 00:13:18 PLAN/S0299_office-document-viewing-legal-routing/PHASE_01__classification.md spec-dev Phase 01 done for S0299 [branch: DEBUG-v008]
2026-05-29 00:13:30 PLAN/S0299_office-document-viewing-legal-routing/INDEX.md spec-dev Start Phase 02 for S0299 [branch: DEBUG-v008]
2026-05-29 00:13:30 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-dev Start Step 02.1 for S0299 [branch: DEBUG-v008]
2026-05-29 00:14:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentOpenManager.kt OfficeDocumentOpenManager Add external Office document opener [branch: DEBUG-v008]
2026-05-29 00:14:17 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-dev Complete Step 02.1 for S0299 [branch: DEBUG-v008]
2026-05-29 00:15:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/MediaDisplayCoordinator.kt MediaDisplayCoordinator Route Office documents to external handoff callback [branch: DEBUG-v008]
2026-05-29 00:15:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerUiStateCoordinator.kt PlayerUiStateCoordinator Add Office document display callback path [branch: DEBUG-v008]
2026-05-29 00:15:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerUiStateCoordinatorCallbackImpl.kt PlayerUiStateCoordinatorCallbackImpl Open Office documents through PlayerShareManager [branch: DEBUG-v008]
2026-05-29 00:15:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt PlayerShareManager Prepare and launch Office documents externally [branch: DEBUG-v008]
2026-05-29 00:15:25 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-dev Complete Step 02.2 for S0299 [branch: DEBUG-v008]
2026-05-29 00:16:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt StandaloneViewManager Redirect standalone Office documents to external viewer [branch: DEBUG-v008]
2026-05-29 00:16:16 app_v2/src/main/AndroidManifest.xml StandaloneDocsPlayer Add Office document MIME intent filters [branch: DEBUG-v008]
2026-05-29 00:16:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt DefaultPlayerHelper Probe DOCX default document association [branch: DEBUG-v008]
2026-05-29 00:16:16 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-dev Complete Step 02.3 for S0299 [branch: DEBUG-v008]
2026-05-29 00:16:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseBinaryFileHandler.kt BrowseBinaryFileHandler Resolve Office document MIME for secondary open actions [branch: DEBUG-v008]
2026-05-29 00:16:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoLaunchManager.kt FileInfoLaunchManager Use Office document MIME for file info open action [branch: DEBUG-v008]
2026-05-29 00:16:42 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-dev Complete Step 02.4 for S0299 [branch: DEBUG-v008]
2026-05-29 00:20:15 PLAN/S0299_office-document-viewing-legal-routing/INDEX.md spec-dev Complete Phase 02 for S0299 [branch: DEBUG-v008]
2026-05-29 00:20:15 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-dev Phase 02 done for S0299 [branch: DEBUG-v008]
2026-05-29 00:21:10 docs/FEATURES.md features Document Office handoff feature [branch: DEBUG-v008]
2026-05-29 00:21:10 docs/FEATURES_RU.md features Document Office handoff feature RU [branch: DEBUG-v008]
2026-05-29 00:21:10 docs/FEATURES_UK.md features Document Office handoff feature UK [branch: DEBUG-v008]
2026-05-29 00:21:10 PLAN/S0299_office-document-viewing-legal-routing/INDEX.md spec-dev Start Phase 03 for S0299 [branch: DEBUG-v008]
2026-05-29 00:21:10 PLAN/S0299_office-document-viewing-legal-routing/PHASE_03__docs-catalog-cleanup.md spec-dev Complete Step 03.1 for S0299 [branch: DEBUG-v008]
2026-05-29 00:22:31 PLAN/S0299_office-document-viewing-legal-routing/PHASE_03__docs-catalog-cleanup.md spec-dev Complete Step 03.2 for S0299 [branch: DEBUG-v008]
2026-05-29 00:27:43 PLAN/S0299_office-document-viewing-legal-routing/PHASE_03__docs-catalog-cleanup.md spec-dev S0299 phase 03 build verification recorded [branch: DEBUG-v008]
2026-05-29 00:28:21 PLAN/S0299_office-document-viewing-legal-routing.md spec-dev S0299 implementation status set to Implemented [branch: DEBUG-v008]
2026-05-29 00:29:22 dev/FUNCTIONALITY.log functionality-log Record S0299 Office document handoff feature [branch: DEBUG-v008]
2026-05-29 00:29:36 PLAN/S0299_office-document-viewing-legal-routing/PHASE_03__docs-catalog-cleanup.md spec-dev S0299 phase 03 prerequisite and line budget synchronized [branch: DEBUG-v008]
2026-05-29 00:29:36 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-dev S0299 phase 02 prerequisite state synchronized [branch: DEBUG-v008]
2026-05-29 00:31:02 PLAN/S0299_office-document-viewing-legal-routing/PHASE_01__classification.md spec-dev S0299 phase 01 line budgets synchronized [branch: DEBUG-v008]
2026-05-29 00:31:02 PLAN/S0299_office-document-viewing-legal-routing/PHASE_02__external-handoff.md spec-dev S0299 phase 02 line budget synchronized [branch: DEBUG-v008]
2026-05-29 00:31:03 PLAN/S0299_office-document-viewing-legal-routing/PHASE_03__docs-catalog-cleanup.md spec-dev S0299 phase 03 line budgets synchronized [branch: DEBUG-v008]
2026-05-29 00:32:50 PLAN/S0299_office-document-viewing-legal-routing.md spec-check Audit S0299 -> Verified; PASS/WARN/FAIL 22/0/0 [branch: DEBUG-v008]
2026-05-29 00:32:50 PLAN/S0299_office-document-viewing-legal-routing/INDEX.md spec-check Close S0299 tactical plan as Done [branch: DEBUG-v008]
2026-05-29 00:32:51 PLAN/S0299_office-document-viewing-legal-routing/PHASE_03__docs-catalog-cleanup.md spec-check Complete S0299 phase 03 after audit [branch: DEBUG-v008]
2026-05-29 00:32:51 PLAN/spec-catalog.jsonl spec-check Close S0299 as Verified [branch: DEBUG-v008]
2026-05-29 00:38:19 PLAN/S0300_domain-data-unit-tests/INDEX.md spec-tech Create tactical plan for S0300 [branch: DEBUG-v008]
2026-05-29 00:38:19 PLAN/S0300_domain-data-unit-tests/PHASE_01__test-foundations.md spec-tech Phase 01: test-foundations [branch: DEBUG-v008]
2026-05-29 00:38:19 PLAN/S0300_domain-data-unit-tests/PHASE_02__domain-usecases.md spec-tech Phase 02: domain-usecases [branch: DEBUG-v008]
2026-05-29 00:38:19 PLAN/S0300_domain-data-unit-tests/PHASE_03__domain-models-strategies.md spec-tech Phase 03: domain-models-strategies [branch: DEBUG-v008]
2026-05-29 00:38:20 PLAN/S0300_domain-data-unit-tests/PHASE_04__data-repositories-local.md spec-tech Phase 04: data-repositories-local [branch: DEBUG-v008]
2026-05-29 00:38:20 PLAN/S0300_domain-data-unit-tests/PHASE_05__data-network-remote.md spec-tech Phase 05: data-network-remote [branch: DEBUG-v008]
2026-05-29 00:38:20 PLAN/S0300_domain-data-unit-tests/PHASE_06__data-transfer-link-cloud.md spec-tech Phase 06: data-transfer-link-cloud [branch: DEBUG-v008]
2026-05-29 00:38:21 PLAN/S0300_domain-data-unit-tests/PHASE_07__flavor-data-logic.md spec-tech Phase 07: flavor-data-logic [branch: DEBUG-v008]
2026-05-29 00:38:21 PLAN/S0300_domain-data-unit-tests/PHASE_08__docs-catalog-cleanup.md spec-tech Phase 08: docs-catalog-cleanup [branch: DEBUG-v008]
2026-05-29 00:38:21 PLAN/S0300_domain-data-unit-tests.md spec-tech Status -> Tactical [branch: DEBUG-v008]
2026-05-29 00:53:17 app_v2/src/test/java/com/sza/fastmediasorter/testing/MainDispatcherRule.kt spec-dev S0300 P01.1: add MainDispatcherRule test harness [branch: DEBUG-v008]
2026-05-29 00:57:22 PLAN/S0301_nolegal-office-document-embedded-renderer.md spec Add strategic draft S0301 for noLegal Office embedded renderer follow-up [branch: DEBUG-v008]
2026-05-29 00:57:52 PLAN/S0300_domain-data-unit-tests/COVERAGE_INVENTORY.md spec-dev S0300 P01.5: coverage inventory (382 in-scope of 593 domain+data classes) [branch: DEBUG-v008]
2026-05-29 01:01:03 app_v2/src/test/java/com/sza/fastmediasorter/testing/DomainModelFactories.kt spec-dev S0300 P01.2: domain model test factories [branch: DEBUG-v008]
2026-05-29 01:01:03 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeResourceRepository.kt spec-dev S0300 P01.3: FakeResourceRepository [branch: DEBUG-v008]
2026-05-29 01:01:04 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeSettingsRepository.kt spec-dev S0300 P01.3: FakeSettingsRepository [branch: DEBUG-v008]
2026-05-29 01:01:04 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeFavoritesRepository.kt spec-dev S0300 P01.3: FakeFavoritesRepository [branch: DEBUG-v008]
2026-05-29 01:01:04 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeScheduledOperationRepository.kt spec-dev S0300 P01.3: FakeScheduledOperationRepository [branch: DEBUG-v008]
2026-05-29 01:01:04 app_v2/src/test/java/com/sza/fastmediasorter/testing/InMemoryRoomHelper.kt spec-dev S0300 P01.4: in-memory Room helper [branch: DEBUG-v008]
2026-05-29 01:02:57 PLAN/S0301_nolegal-office-document-embedded-renderer.md spec-update Refine S0301 with PDF EPUB style viewer parity and read-only action scope [branch: DEBUG-v008]
2026-05-29 01:11:00 PLAN/S0301_nolegal-office-document-embedded-renderer.md spec-update Refine S0301 with owner decisions for scope fallback links and runtime budget [branch: DEBUG-v008]
2026-05-29 01:22:55 PLAN/S0301_nolegal-office-document-embedded-renderer/INDEX.md spec-tech Create tactical plan for S0301 [branch: DEBUG-v008]
2026-05-29 01:22:55 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_01__family-catalog.md spec-tech Phase 01: family-catalog [branch: DEBUG-v008]
2026-05-29 01:22:55 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_02__viewer-boundary.md spec-tech Phase 02: viewer-boundary [branch: DEBUG-v008]
2026-05-29 01:22:55 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_03__word-family-viewer.md spec-tech Phase 03: word-family-viewer [branch: DEBUG-v008]
2026-05-29 01:22:55 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_04__sheet-slide-viewer.md spec-tech Phase 04: sheet-slide-viewer [branch: DEBUG-v008]
2026-05-29 01:22:55 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_05__action-parity-fallbacks.md spec-tech Phase 05: action-parity-fallbacks [branch: DEBUG-v008]
2026-05-29 01:22:55 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v008]
2026-05-29 01:22:55 PLAN/S0301_nolegal-office-document-embedded-renderer.md spec-tech Status -> Tactical and tactical plan authored for S0301 [branch: DEBUG-v008]
2026-05-29 01:26:20 PLAN/S0301_nolegal-office-document-embedded-renderer.md spec-update Close engine-family blocker with JVM/WebView recommendation for S0301 [branch: DEBUG-v008]
2026-05-29 01:26:20 PLAN/S0301_nolegal-office-document-embedded-renderer/INDEX.md spec-update Mark engine-related blockers resolved for S0301 [branch: DEBUG-v008]
2026-05-29 01:44:21 PLAN/S0301_nolegal-office-document-embedded-renderer.md spec-update Resolve remote lifecycle and docs wording blockers for S0301 [branch: DEBUG-v008]
2026-05-29 01:44:21 PLAN/S0301_nolegal-office-document-embedded-renderer/INDEX.md spec-update Mark remaining pre-implementation blockers resolved for S0301 [branch: DEBUG-v008]
2026-05-29 01:44:21 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_01__family-catalog.md spec-update Make S0301 Phase 01 family and MIME contract concrete [branch: DEBUG-v008]
2026-05-29 01:46:13 app_v2/src/main/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamily.kt S0301 Phase 01 Step 01.1 Add shared Office document family model [branch: DEBUG-v008]
2026-05-29 01:47:12 app_v2/src/standard/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamilyCatalog.kt S0301 Phase 01 Step 01.1 Add standard Office family catalog [branch: DEBUG-v008]
2026-05-29 01:48:13 app_v2/src/legacy/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamilyCatalog.kt S0301 Phase 01 Step 01.1 Add legacy Office family catalog [branch: DEBUG-v008]
2026-05-29 01:49:15 app_v2/src/vr/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamilyCatalog.kt S0301 Phase 01 Step 01.1 Add VR Office family catalog [branch: DEBUG-v008]
2026-05-29 01:50:15 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamilyCatalog.kt S0301 Phase 01 Step 01.1 Add noLegal Office family catalog [branch: DEBUG-v008]
2026-05-29 01:51:12 app_v2/src/photos/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamilyCatalog.kt S0301 Phase 01 Step 01.1 Add photos Office family catalog [branch: DEBUG-v008]
2026-05-29 01:51:13 app_v2/src/lite/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamilyCatalog.kt S0301 Phase 01 Step 01.1 Add lite Office family catalog [branch: DEBUG-v008]
2026-05-29 01:54:00 app_v2/src/main/java/com/sza/fastmediasorter/data/common/MediaTypeUtils.kt S0301 Phase 01 Step 01.2 Route Office media type detection through flavor catalogs [branch: DEBUG-v008]
2026-05-29 01:55:05 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt S0301 Phase 01 Step 01.2 Build Office MediaStore selection from flavor catalog [branch: DEBUG-v008]
2026-05-29 01:56:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt S0301 Phase 01 Step 01.2 Probe default-player Office MIME types through flavor catalog [branch: DEBUG-v008]
2026-05-29 02:04:08 app_v2/src/vr/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamilyCatalog.kt S0301 Phase 01 build repair Remove VR catalog from source set inherited by noLegal [branch: DEBUG-v008]
2026-05-29 02:04:08 app_v2/src/vrOnly/java/com/sza/fastmediasorter/data/common/OfficeDocumentFamilyCatalog.kt S0301 Phase 01 build repair Add VR-only Office family catalog [branch: DEBUG-v008]
2026-05-29 02:04:08 app_v2/build.gradle.kts S0301 Phase 01 build repair Mount vrOnly source set for vr flavor [branch: DEBUG-v008]
2026-05-29 02:06:27 PLAN/S0301_nolegal-office-document-embedded-renderer/INDEX.md S0301 Phase 01 Mark family-catalog phase complete [branch: DEBUG-v008]
2026-05-29 02:06:27 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_01__family-catalog.md S0301 Phase 01 Record completed phase checks and noLegal build pass [branch: DEBUG-v008]
2026-05-29 02:07:14 PLAN/S0301_nolegal-office-document-embedded-renderer.md S0301 BlockQuestions Block before Phase 02 pending UI placement decisions [branch: DEBUG-v008]
2026-05-29 02:07:14 PLAN/S0301_nolegal-office-document-embedded-renderer/INDEX.md S0301 BlockQuestions Mark Phase 02 blocked pending UI placement decisions [branch: DEBUG-v008]
2026-05-29 03:14:21 PLAN/S0300_domain-data-unit-tests/PHASE_02__domain-usecases.md spec-dev S0300 Phase 02 done: 56 domain usecase/core unit-test classes (~338 methods), all green [branch: DEBUG-v008]
2026-05-29 03:39:15 PLAN/S0300_domain-data-unit-tests/PHASE_03__domain-models-strategies.md spec-dev S0300 Phase 03 done: 26 domain model/strategy/identity/input/ocr/transfer unit-test classes (154 methods), all green [branch: DEBUG-v008]
2026-05-29 04:34:32 PLAN/S0300_domain-data-unit-tests/PHASE_04__data-repositories-local.md spec-dev S0300 Phase 04 done: 18 data repository/local unit-test classes (163 methods), all green [branch: DEBUG-v008]
2026-05-29 05:34:53 PLAN/S0300_domain-data-unit-tests/PHASE_05__data-network-remote.md spec-dev S0300 Phase 05 done: 41 data network/remote unit-test classes (295 methods), all green [branch: DEBUG-v008]
2026-05-29 06:27:41 PLAN/S0300_domain-data-unit-tests/PHASE_06__data-transfer-link-cloud.md spec-dev S0300 Phase 06 done: 27 data transfer/link/cloud unit-test classes (214 methods), all green [branch: DEBUG-v008]
2026-05-29 06:56:56 PLAN/S0300_domain-data-unit-tests/PHASE_07__flavor-data-logic.md spec-dev S0300 Phase 07 done: 9 noLegal flavor unit-test classes (93 methods) in testNoLegal, all green [branch: DEBUG-v008]
2026-05-29 06:59:13 PLAN/S0300_domain-data-unit-tests/COVERAGE_INVENTORY.md spec-dev S0300 P08.1: finalize coverage inventory - all in-scope rows resolved [branch: DEBUG-v008]
2026-05-29 06:59:14 PLAN/S0300_domain-data-unit-tests/PHASE_08__docs-catalog-cleanup.md spec-dev S0300 Phase 08: docs/catalog cleanup [branch: DEBUG-v008]
2026-05-29 07:00:50 PLAN/S0300_domain-data-unit-tests.md spec-dev S0300 all 8 phases done; status -> Implemented (domain+data unit coverage, ~1260 test methods) [branch: DEBUG-v008]
2026-05-29 07:02:05 PLAN/S0300_domain-data-unit-tests.md spec-check Audit S0300 -> Verified; PASS/WARN/FAIL 7/0/0; 0 debug tags [branch: DEBUG-v008]
2026-05-30 00:49:32 PLAN/S0301_nolegal-office-document-embedded-renderer.md spec-update Apply S0301 UI clarification answers [branch: DEBUG-v008]
2026-05-30 00:49:32 PLAN/S0301_nolegal-office-document-embedded-renderer/INDEX.md spec-update Record S0301 UI clarification readiness [branch: DEBUG-v008]
2026-05-30 00:49:33 PLAN/S0301_nolegal-office-document-embedded-renderer/PHASE_02__viewer-boundary.md spec-update Document S0301 Phase 02 approved UI decisions [branch: DEBUG-v008]
2026-05-30 01:01:42 PLAN/S0300_domain-data-unit-tests.md spec-check Re-audit S0300 -> Verified; static checks 10/0/0 PASS/WARN/FAIL, no debug tags, inventory clean [branch: DEBUG-v008]
2026-05-30 01:11:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProvider.kt S0301 Phase 02 Add flavor-safe Office viewer provider contract + ExternalOfficeDocumentViewerProvider (S0299 delegation) [branch: DEBUG-v008]
2026-05-30 01:11:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerSession.kt S0301 Phase 02 Add OfficeDocumentViewerSession + OfficeDocumentViewerOutcome (display/fallback/delegate) [branch: DEBUG-v008]
2026-05-30 01:11:18 app_v2/src/{standard,legacy,vrOnly,noLegal,photos,lite}/java/.../OfficeDocumentViewerProviderFactory.kt S0301 Phase 02 Add 6 per-flavor OfficeDocumentViewerProviderFactory peers (vrOnly not vr to avoid noLegal duplicate) [branch: DEBUG-v008]
2026-05-30 01:11:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt;PlayerActivity.kt;callbacks/PlayerUiStateCoordinatorCallbackImpl.kt;helpers/PlayerShareManager.kt;helpers/StandaloneViewManager.kt S0301 Phase 02 Route Player + Standalone Office handling through provider seam; conditional finish() on DELEGATE_EXTERNAL [branch: DEBUG-v008]
2026-05-30 01:11:18 app_v2/src/main/res/layout{,-land}/activity_player_unified.xml S0301 Phase 02 Add neutral officeDocumentViewerContainer host slot in portrait and landscape [branch: DEBUG-v008]
2026-05-30 01:13:12 PLAN/S0301_nolegal-office-document-embedded-renderer.md;INDEX.md;PHASE_02__viewer-boundary.md S0301 Phase 02 marked Done; status -> BlockExternal pending Office engine dependency pin (Phases 03-06) [branch: DEBUG-v008]
2026-05-30 01:15:51 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrLaunchContract.kt PlayerStateSnapshot, VrLaunchInput added videoIsPlaying and videoVolume to snapshot, carried snapshot in launch input [branch: DEBUG-v008]
2026-05-30 01:15:51 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrLaunchArgs.kt DiagnosticXrLaunchArgs.Parsed expose launch snapshot for immediate retrieval [branch: DEBUG-v008]
2026-05-30 01:15:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt PlayerVrLaunchManager.captureSnapshot capture current video play state and volume on launch [branch: DEBUG-v008]
2026-05-30 01:15:51 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrLaunchContractTest.kt VrLaunchContractTest added JVM contract serialization unit test [branch: DEBUG-v008]
2026-05-30 01:19:58 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/StartVrPlaybackUseCaseImpl.kt StartVrPlaybackUseCaseImpl.validateRequest allow local video URIs, reject GIFs and non-local schemes [branch: DEBUG-v008]
2026-05-30 01:19:58 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity.prepareLaunchMedia, resolveSingleLaunchFile route video launches to unresolved, keep content cache copy for image only [branch: DEBUG-v008]
2026-05-30 01:23:45 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity.startVideoPlayback apply launch snapshot, add Player.Listener, and return typed DecoderFailed [branch: DEBUG-v008]
2026-05-30 01:25:04 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity.buildPlayerReturnTarget construct return snapshot before panel return [branch: DEBUG-v008]
2026-05-30 01:25:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt PlayerVrLaunchManager.applyPendingReturnIfReady restore flat player position, speed, and volume from return snapshot [branch: DEBUG-v008]
2026-05-30 01:52:41 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-all S0291 round-10: re-queue filename HUD banner on session-ready for all media types so image items repaint on session re-entry [branch: DEBUG-v008]
2026-05-30 01:52:41 app_v2/src/vr/cpp/xr_session.cpp spec-all S0291: remove stale BlockNeedUserTest debug probe; de-identify 180-mirror-fix comment [branch: DEBUG-v008]
2026-05-30 01:52:41 app_v2/src/vr/cpp/diagnostic_xr_runtime.cpp spec-all S0291: remove stale initSession debug probe [branch: DEBUG-v008]
2026-05-30 01:52:41 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md spec-all S0291 round-10: Phase 06 created, drift Last Audit, section 6.8/6.9 updated, P-1/P-2 applied [branch: DEBUG-v008]
2026-05-30 01:54:08 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_06__lifecycle-round10-exit-and-hud-rebind.md spec-all S0291 Phase 06 tactical: HUD re-bind (done) + exit-handshake/passthrough (deferred) [branch: DEBUG-v008]
2026-05-30 01:54:08 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/INDEX.md spec-all S0291 tactical INDEX reopened to In Progress 5/6 for round 10 [branch: DEBUG-v008]
2026-05-30 01:57:58 docs/FEATURES.md S0296 features Align VR cinema video feature bullet [branch: DEBUG-v008]
2026-05-30 01:57:59 docs/FEATURES_RU.md S0296 features Align Russian VR cinema video feature bullet [branch: DEBUG-v008]
2026-05-30 01:58:01 docs/FEATURES_UK.md S0296 features Align Ukrainian VR cinema video feature bullet [branch: DEBUG-v008]
2026-05-30 01:59:51 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md spec-all S0291: record owner diagnostic-first decision for DEFECT A (no successor ticket until Quest 3 confirms passthrough symptom) [branch: DEBUG-v008]
2026-05-30 02:04:45 PLAN/S0296_vr-immerse-video-playback/INDEX.md S0296 phase 05 Close S0296 tactical phase 05 and add device handoff [branch: DEBUG-v008]
2026-05-30 02:04:45 PLAN/S0296_vr-immerse-video-playback/PHASE_05__docs-catalog-cleanup.md S0296 phase 05 Mark docs catalog cleanup phase complete [branch: DEBUG-v008]
2026-05-30 02:04:46 PLAN/S0296_vr-immerse-video-playback.md S0296 handoff Record static implementation closure and device verification handoff [branch: DEBUG-v008]
2026-05-30 02:05:30 PLAN/S0296_vr-immerse-video-playback.md spec-check Audit S0296 -> Partial; PASS/WARN/FAIL 34/2/0 [branch: DEBUG-v008]
2026-05-30 02:05:43 PLAN/S0296_vr-immerse-video-playback.md spec-check Keep S0296 cold-start placeholder unique after audit [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerHost.kt OfficeDocumentViewerHost S0301 Phase 03: market-safe viewer-host interface + NoOp impl in src/main [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentEngineBridge.kt OfficeDocumentEngineBridge S0301 Phase 03: ZipFile+jsoup OOXML/ODF + RTF renderToHtml engine [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentHyperlinkPolicy.kt OfficeDocumentHyperlinkPolicy S0301 Phase 03: allowOrdinaryLinks/blockActiveContent policy [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerManager.kt OfficeDocumentViewerManager S0301 Phase 03: noLegal read-only WebView Office viewer host impl [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt OfficeDocumentViewerProviderFactory S0301 Phase 03: noLegal factory createViewerHost + internal-display resolve [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/standard/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt OfficeDocumentViewerProviderFactory S0301 Phase 03: standard factory createViewerHost -> NoOp [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/legacy/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt OfficeDocumentViewerProviderFactory S0301 Phase 03: legacy factory createViewerHost -> NoOp [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/vrOnly/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt OfficeDocumentViewerProviderFactory S0301 Phase 03: vrOnly factory createViewerHost -> NoOp [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/photos/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt OfficeDocumentViewerProviderFactory S0301 Phase 03: photos factory createViewerHost -> NoOp [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/lite/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt OfficeDocumentViewerProviderFactory S0301 Phase 03: lite factory createViewerHost -> NoOp [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerViewerFactory.kt PlayerViewerFactory S0301 Phase 03: createOfficeDocumentViewerHost wiring [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity S0301 Phase 03: officeDocumentViewerManager lazy host [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt PlayerShareManager S0301 Phase 03: routeOfficeDocument internal display + external fallback [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt StandaloneViewManager S0301 Phase 03: officeDocumentViewerHost + internal/external display split [branch: DEBUG-v008]
2026-05-30 02:05:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt PlayerLifecycleManager S0301 Phase 03: release office viewer host on shutdown [branch: DEBUG-v008]
2026-05-30 02:07:54 app_v2/build.gradle.kts noLegal debug build Record auto-version bump from S0296 noLegal debug validation [branch: DEBUG-v008]
2026-05-30 02:10:57 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeSpreadsheetViewerDelegate.kt OfficeSpreadsheetViewerDelegate S0301 Phase 04: noLegal spreadsheet render delegate (xls/xlsx/ods) [branch: DEBUG-v008]
2026-05-30 02:10:57 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficePresentationViewerDelegate.kt OfficePresentationViewerDelegate S0301 Phase 04: noLegal presentation render delegate (ppt/pptx/odp) [branch: DEBUG-v008]
2026-05-30 02:10:57 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerManager.kt OfficeDocumentViewerManager S0301 Phase 04: renderByFamily dispatch + explicit fallback dialog seam [branch: DEBUG-v008]
2026-05-30 02:10:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerHost.kt OfficeDocumentViewerHost S0301 Phase 04: Callback.onRequireExternalFallback hook [branch: DEBUG-v008]
2026-05-30 02:10:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt PlayerViewerFactory S0301 Phase 04: external-fallback callback -> shareManager.openOfficeDocument [branch: DEBUG-v008]
2026-05-30 02:10:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt StandaloneViewManager S0301 Phase 04: standalone external-fallback wiring for sheet/slide families [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelAvailabilityUpdater.kt S0301 Phase 05 Show fullscreen command for OFFICE_DOCUMENT in landscape layout [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt S0301 Phase 05 Add Office to fullscreen/print active commands; no edit command for Office [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt S0301 Phase 05 OFFICE_DOCUMENT read-only edit no-op arm [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt S0301 Phase 05 Route OFFICE_DOCUMENT print through office viewer manager print() [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentPrintAdapter.kt S0301 Phase 05 New noLegal WebView print adapter for Office documents [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerGestureCallbackImpl.kt S0301 Phase 05 OFFICE_DOCUMENT swipe navigation parity [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt S0301 Phase 05 OFFICE_DOCUMENT wheel-scroll handled by WebView [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/TouchZoneConfig.kt S0301 Phase 05 OFFICE_DOCUMENT uses REG_DOC touch zone map [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationCoordinator.kt S0301 Phase 05 Treat OFFICE_DOCUMENT as document in skip-documents navigation [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/res/values/strings.xml S0301 Phase 05 Add Office fallback dialog strings (EN) [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/res/values-ru/strings.xml S0301 Phase 05 Add Office fallback dialog strings (RU) [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/res/values-uk/strings.xml S0301 Phase 05 Add Office fallback dialog strings (UK) [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerHost.kt S0301 Phase 05 Add print() to viewer host interface; NoOp returns false [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerManager.kt S0301 Phase 05 Implement print() via OfficeDocumentPrintAdapter [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt S0301 Phase 05 Explicit Office fallback dialog (external/share/cancel) [branch: DEBUG-v008]
2026-05-30 02:28:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt S0301 Phase 05 Route render-failure callback to fallback dialog [branch: DEBUG-v008]
2026-05-30 02:28:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0301 Phase 05 Standalone Office fallback dialog with cancel-finish [branch: DEBUG-v008]
2026-05-30 02:32:52 docs/FEATURES_noLegal.md S0301 Phase 06 Add embedded Office viewer feature entry (EN) [branch: DEBUG-v008]
2026-05-30 02:32:57 docs/FEATURES_noLegal_RU.md S0301 Phase 06 Add embedded Office viewer feature entry (RU) [branch: DEBUG-v008]
2026-05-30 02:33:01 docs/FEATURES_noLegal_UK.md S0301 Phase 06 Add embedded Office viewer feature entry (UK) [branch: DEBUG-v008]
2026-05-30 02:42:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt S0301 Fix Office fallback dialog routing in player [branch: DEBUG-v008]
2026-05-30 02:43:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0301 Keep standalone Office fallback cancel in viewer [branch: DEBUG-v008]
2026-05-30 02:44:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt S0301 Fix Office fallback dialog routing in player [branch: DEBUG-v008]
2026-05-30 02:44:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0301 Keep standalone Office fallback cancel in viewer [branch: DEBUG-v008]
2026-05-30 02:49:21 .github/prompts/spec.prompt.md spec prompt Allow free-form and empty draft /spec requests [branch: DEBUG-v008]
2026-05-30 02:50:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerHost.kt S0301 Expose Office rendered text for command parity [branch: DEBUG-v008]
2026-05-30 02:50:35 PLAN/S0302_file-manager-mode.md spec Add strategic spec S0302 for File Manager Mode positioning [branch: DEBUG-v008]
2026-05-30 02:51:08 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerManager.kt S0301 Store Office rendered plain text for OCR and translation [branch: DEBUG-v008]
2026-05-30 02:51:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt S0301 Expose Office translate and OCR overflow commands [branch: DEBUG-v008]
2026-05-30 02:52:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelAvailabilityUpdater.kt S0301 Expose Office print command availability [branch: DEBUG-v008]
2026-05-30 02:53:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt S0301 Route Office translate and OCR commands [branch: DEBUG-v008]
2026-05-30 02:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelAvailabilityUpdater.kt S0301 Expose Office print command availability [branch: DEBUG-v008]
2026-05-30 02:53:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt S0301 Route Office translate and OCR commands [branch: DEBUG-v008]
2026-05-30 02:54:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt S0301 Preserve OCR text as translation source [branch: DEBUG-v008]
2026-05-30 02:55:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextOcrDisplayManager.kt S0301 Restore Office viewer after OCR text overlay [branch: DEBUG-v008]
2026-05-30 02:58:30 PLAN/S0303_telegram-integration.md spec Add strategic spec S0303 for Telegram integration (t.me download + share) [branch: DEBUG-v008]
2026-05-30 02:59:51 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlannerTest.kt S0301 Update command planner overflow-only test for Office actions [branch: DEBUG-v008]
2026-05-30 03:01:56 PLAN/S0301_nolegal-office-document-embedded-renderer.md S0301 Record Verified spec-check audit [branch: DEBUG-v008]
2026-05-30 03:01:56 PLAN/S0301_nolegal-office-document-embedded-renderer/INDEX.md S0301 Close S0301 completion gate after spec-check [branch: DEBUG-v008]
2026-05-30 03:03:20 PLAN/S0303_telegram-integration/INDEX.md spec-tech Create tactical plan for S0303 [branch: DEBUG-v008]
2026-05-30 03:03:21 PLAN/S0303_telegram-integration/PHASE_01__share-intent.md spec-tech Phase 01: share-intent [branch: DEBUG-v008]
2026-05-30 03:03:21 PLAN/S0303_telegram-integration/PHASE_02__link-extraction.md spec-tech Phase 02: link-extraction [branch: DEBUG-v008]
2026-05-30 03:03:21 PLAN/S0303_telegram-integration/PHASE_03__bot-upload.md spec-tech Phase 03: bot-upload [branch: DEBUG-v008]
2026-05-30 03:03:21 PLAN/S0303_telegram-integration/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v008]
2026-05-30 03:03:21 PLAN/S0303_telegram-integration.md spec-tech Status to Tactical [branch: DEBUG-v008]
2026-05-30 13:38:47 app_v2/src/main/res/values/strings.xml string/backup_to_google_drive,string/restore_from_google_drive,fragment_settings_general.xml Rename Google Drive backup/restore buttons to mention settings (EN/RU/UK) and unify btnBackup style to OutlinedM3 (portrait+land) [branch: DEBUG-v008]
2026-05-30 13:45:06 PLAN/S0302_file-manager-mode/INDEX.md spec-tech Create tactical plan for S0302 [branch: DEBUG-v008]
2026-05-30 13:45:07 PLAN/S0302_file-manager-mode/PHASE_01__ui-terminology.md spec-tech Phase 01: ui-terminology [branch: DEBUG-v008]
2026-05-30 13:45:07 PLAN/S0302_file-manager-mode/PHASE_02__manifest-integration.md spec-tech Phase 02: manifest-integration [branch: DEBUG-v008]
2026-05-30 13:45:07 PLAN/S0302_file-manager-mode/PHASE_03__browse-ux.md spec-tech Phase 03: browse-ux [branch: DEBUG-v008]
2026-05-30 13:45:07 PLAN/S0302_file-manager-mode/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v008]
2026-05-30 13:45:07 PLAN/S0302_file-manager-mode.md spec-tech Status -> Tactical [branch: DEBUG-v008]
2026-05-30 13:45:40 app_v2/src/main/res/values/strings.xml strings.xml Update File Manager Mode EN labels [branch: DEBUG-v008]
2026-05-30 13:45:41 app_v2/src/main/res/values-ru/strings.xml strings.xml Update File Manager Mode RU labels [branch: DEBUG-v008]
2026-05-30 13:45:41 app_v2/src/main/res/values-uk/strings.xml strings.xml Update File Manager Mode UK labels [branch: DEBUG-v008]
2026-05-30 13:46:02 app_v2/src/main/res/layout/fragment_resource_editor.xml fragment_resource_editor.xml Verify cbAllFiles uses label_all_files [branch: DEBUG-v008]
2026-05-30 13:46:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt AddResourceFormManager.kt Verify profile label references in Kotlin [branch: DEBUG-v008]
2026-05-30 13:48:36 app_v2/src/main/AndroidManifest.xml AndroidManifest.xml Add APP_FILES category to MainActivity intent-filter [branch: DEBUG-v008]
2026-05-30 13:50:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseUtilityManager.kt BrowseUtilityManager.kt Add File Manager Mode indicator to Browse screen [branch: DEBUG-v008]
2026-05-30 13:50:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseBinaryFileHandler.kt BrowseBinaryFileHandler.kt Verify BrowseBinaryFileHandler handles unsupported binary files menu [branch: DEBUG-v008]
2026-05-30 13:51:31 PLAN/S0304_office-document-settings-parity.md spec Add strategic spec S0304 for Office document settings parity [branch: DEBUG-v008]
2026-05-30 13:56:28 docs/FAQ.md FAQ.md Add File Manager Mode section [branch: DEBUG-v008]
2026-05-30 13:56:29 docs/FAQ_RU.md FAQ_RU.md Add File Manager Mode section (RU) [branch: DEBUG-v008]
2026-05-30 13:56:31 docs/FAQ_UK.md FAQ_UK.md Add File Manager Mode section (UK) [branch: DEBUG-v008]
2026-05-30 13:56:33 docs/FEATURES.md FEATURES.md Rename All Files to File Manager Mode [branch: DEBUG-v008]
2026-05-30 13:56:34 docs/FEATURES_RU.md docs/FEATURES_RU.md Rename All Files to File Manager Mode (RU) [branch: DEBUG-v008]
2026-05-30 13:56:36 docs/FEATURES_UK.md docs/FEATURES_UK.md Rename All Files to File Manager Mode (UK) [branch: DEBUG-v008]
2026-05-30 13:56:38 docs/README.md docs/README.md Update All Files to File Manager Mode [branch: DEBUG-v008]
2026-05-30 13:56:39 README.md README.md Update All Files to File Manager Mode in root [branch: DEBUG-v008]
2026-05-30 13:56:41 docs/README_RU.md docs/README_RU.md Update All Files to File Manager Mode (RU) [branch: DEBUG-v008]
2026-05-30 13:56:43 docs/README_UK.md docs/README_UK.md Update All Files to File Manager Mode (UK) [branch: DEBUG-v008]
2026-05-30 14:04:32 PLAN/S0305_mid-audio-playback-support.md spec Add strategic spec S0305 for MIDI audio playback support [branch: DEBUG-v008]
2026-05-30 14:35:51 PLAN/S0305_mid-audio-playback-support.md spec-update Resolve S0305 MIDI playback research questions [branch: DEBUG-v008]
2026-05-30 14:41:24 PLAN/S0305_mid-audio-playback-support.md spec-update Record S0305 owner gate decisions for MIDI playback scope and autonomy [branch: DEBUG-v008]
2026-05-30 14:41:37 PLAN/S0305_mid-audio-playback-support.md spec-update Clarify S0305 owner gate marker wording [branch: DEBUG-v008]
2026-05-30 14:44:32 PLAN/S0305_mid-audio-playback-support.md spec-tech Promote S0305 to Approved for tactical planning [branch: DEBUG-v008]
2026-05-30 14:49:42 PLAN/S0305_mid-audio-playback-support.md S0305 Move S0305 strategic spec to Tactical [branch: DEBUG-v008]
2026-05-30 14:49:43 PLAN/spec-catalog.jsonl S0305 Set S0305 catalog status to Tactical [branch: DEBUG-v008]
2026-05-30 14:49:43 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Add S0305 tactical plan index [branch: DEBUG-v008]
2026-05-30 14:49:43 PLAN/S0305_mid-audio-playback-support/PHASE_01__media3-midi-backend.md S0305 Add Media3 MIDI backend tactical phase [branch: DEBUG-v008]
2026-05-30 14:49:43 PLAN/S0305_mid-audio-playback-support/PHASE_02__mime-routing-policy.md S0305 Add MIDI MIME routing tactical phase [branch: DEBUG-v008]
2026-05-30 14:49:44 PLAN/S0305_mid-audio-playback-support/PHASE_03__fallback-error-flow.md S0305 Add MIDI fallback error tactical phase [branch: DEBUG-v008]
2026-05-30 14:49:44 PLAN/S0305_mid-audio-playback-support/PHASE_04__tests-validation.md S0305 Add S0305 tests validation tactical phase [branch: DEBUG-v008]
2026-05-30 14:49:44 PLAN/S0305_mid-audio-playback-support/PHASE_05__docs-catalog-cleanup.md S0305 Add S0305 docs catalog cleanup tactical phase [branch: DEBUG-v008]
2026-05-30 14:50:47 app_v2/src/main/java/com/sza/fastmediasorter/core/share/TelegramShareTargets.kt spec-dev S0303 step 01.1 Add TelegramShareTargets: known Telegram client package ids + installed-client lookup [branch: DEBUG-v008]
2026-05-30 14:52:29 app_v2/src/main/java/com/sza/fastmediasorter/core/share/SystemShareInvoker.kt spec-dev S0303 step 01.2 SystemShareInvoker.invokeFiles: multi-URI targeted send with chooser fallback [branch: DEBUG-v008]
2026-05-30 15:01:08 PLAN/spec-catalog.jsonl S0305 Set S0305 catalog status to In Progress [branch: DEBUG-v008]
2026-05-30 15:01:45 app_v2/build.gradle.kts S0305 Add Media3 MIDI dependency to audio flavors [branch: DEBUG-v008]
2026-05-30 15:01:45 PLAN/S0305_mid-audio-playback-support.md S0305 Mark S0305 implementation in progress [branch: DEBUG-v008]
2026-05-30 15:01:45 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 01 step counter [branch: DEBUG-v008]
2026-05-30 15:01:46 PLAN/S0305_mid-audio-playback-support/PHASE_01__media3-midi-backend.md S0305 Mark S0305 phase 01 step 01 done [branch: DEBUG-v008]
2026-05-30 15:01:54 PLAN/S0305_mid-audio-playback-support/PHASE_01__media3-midi-backend.md S0305 Finalize S0305 phase 01 step 01 log [branch: DEBUG-v008]
2026-05-30 15:02:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackRenderersFactory.kt S0305 Add shared Media3 playback renderers factory [branch: DEBUG-v008]
2026-05-30 15:03:22 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 01 step counter to two [branch: DEBUG-v008]
2026-05-30 15:03:22 PLAN/S0305_mid-audio-playback-support/PHASE_01__media3-midi-backend.md S0305 Mark S0305 phase 01 step 02 done [branch: DEBUG-v008]
2026-05-30 15:03:37 PLAN/S0305_mid-audio-playback-support/PHASE_01__media3-midi-backend.md S0305 Finalize S0305 phase 01 step 02 log [branch: DEBUG-v008]
2026-05-30 15:04:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt S0305 Use shared playback renderers factory in foreground player [branch: DEBUG-v008]
2026-05-30 15:04:29 PLAN/S0304_office-document-settings-parity/INDEX.md S0304 Implemented Office document settings parity across settings, resources, strings, docs, and validation [branch: DEBUG-v008]
2026-05-30 15:05:07 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 01 step counter to three [branch: DEBUG-v008]
2026-05-30 15:05:08 PLAN/S0305_mid-audio-playback-support/PHASE_01__media3-midi-backend.md S0305 Mark S0305 phase 01 step 03 done [branch: DEBUG-v008]
2026-05-30 15:05:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt S0305 Use shared playback renderers factory in audio service [branch: DEBUG-v008]
2026-05-30 15:06:26 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 01 step counter to four [branch: DEBUG-v008]
2026-05-30 15:06:26 PLAN/S0305_mid-audio-playback-support/PHASE_01__media3-midi-backend.md S0305 Mark S0305 phase 01 step 04 done [branch: DEBUG-v008]
2026-05-30 15:06:41 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkExtractionRegistry.kt spec-dev S0303 step 02.1 Add telegram id to CANONICAL_ORDER ahead of ytdlp for t.me extraction [branch: DEBUG-v008]
2026-05-30 15:09:09 app_v2/build.gradle.kts S0305 Record debug build validation version update [branch: DEBUG-v008]
2026-05-30 15:09:20 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Mark S0305 phase 01 done [branch: DEBUG-v008]
2026-05-30 15:09:21 PLAN/S0305_mid-audio-playback-support/PHASE_01__media3-midi-backend.md S0305 Close S0305 phase 01 done criteria [branch: DEBUG-v008]
2026-05-30 15:09:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/MidiPlaybackPolicy.kt S0305 Add MIDI playback extension policy [branch: DEBUG-v008]
2026-05-30 15:10:30 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 02 step counter to one [branch: DEBUG-v008]
2026-05-30 15:10:31 PLAN/S0305_mid-audio-playback-support/PHASE_02__mime-routing-policy.md S0305 Mark S0305 phase 02 step 01 done [branch: DEBUG-v008]
2026-05-30 15:10:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/MediaExtensions.kt S0305 Route audio MIDI extensions through shared policy [branch: DEBUG-v008]
2026-05-30 15:11:46 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 02 step counter to two [branch: DEBUG-v008]
2026-05-30 15:11:47 PLAN/S0305_mid-audio-playback-support/PHASE_02__mime-routing-policy.md S0305 Mark S0305 phase 02 step 02 done [branch: DEBUG-v008]
2026-05-30 15:12:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LocalPlaybackHelper.kt S0305 Use MIDI playback policy for local MIME detection [branch: DEBUG-v008]
2026-05-30 15:13:08 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 02 step counter to three [branch: DEBUG-v008]
2026-05-30 15:13:08 PLAN/S0305_mid-audio-playback-support/PHASE_02__mime-routing-policy.md S0305 Mark S0305 phase 02 step 03 done [branch: DEBUG-v008]
2026-05-30 15:13:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/model/MediaItemWithMeta.kt S0305 Add optional MIME type to audio playlist metadata item [branch: DEBUG-v008]
2026-05-30 15:14:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt S0305 Apply optional MIME type to service MediaItems [branch: DEBUG-v008]
2026-05-30 15:15:36 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 02 step counter to four [branch: DEBUG-v008]
2026-05-30 15:15:36 PLAN/S0305_mid-audio-playback-support/PHASE_02__mime-routing-policy.md S0305 Mark S0305 phase 02 step 04 done [branch: DEBUG-v008]
2026-05-30 15:16:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt S0305 Pass MIDI MIME hints in now playing playlist items [branch: DEBUG-v008]
2026-05-30 15:16:49 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 Advance S0305 phase 02 step counter to five [branch: DEBUG-v008]
2026-05-30 15:16:49 PLAN/S0305_mid-audio-playback-support/PHASE_02__mime-routing-policy.md S0305 Mark S0305 phase 02 step 05 done [branch: DEBUG-v008]
2026-05-30 15:18:49 PLAN/spec-catalog.jsonl spec catalog Insert S0306 record for thematic string resource files strategic spec [branch: DEBUG-v008]
2026-05-30 15:18:49 PLAN/S0306_thematic-string-resource-files.md strategic spec Add strategic spec S0306 for thematic string resource files [branch: DEBUG-v008]
2026-05-30 15:25:42 PLAN/S0002_decompose-giant-files.md spec-arc Archive S0002 (decompose-giant-files) -> temp/done/ [branch: DEBUG-v008]
2026-05-30 15:25:42 PLAN/S0220_google-tv-availability-research.md spec-arc Archive S0220 (google-tv-availability-research) -> temp/done/ [branch: DEBUG-v008]
2026-05-30 15:25:42 PLAN/S0240_vr-stack-rewrite-epic.md spec-arc Archive S0240 (vr-stack-rewrite-epic) -> temp/done/ [branch: DEBUG-v008]
2026-05-30 15:25:42 PLAN/S0267_cloud-auth-unified-storage-research.md spec-arc Archive S0267 (cloud-auth-unified-storage-research) -> temp/done/ [branch: DEBUG-v008]
2026-05-30 15:25:42 PLAN/S0285_nolegal-ocr-cyrillic.md spec-arc Archive S0285 (nolegal-ocr-cyrillic) -> temp/done/ [branch: DEBUG-v008]
2026-05-30 15:25:42 PLAN/S0286_compliance-lint-gate-and-features-sanitization.md spec-arc Archive S0286 (compliance-lint-gate-and-features-sanitization) -> temp/done/ [branch: DEBUG-v008]
2026-05-30 15:29:16 PLAN/S0305_mid-audio-playback-support/PHASE_02__mime-routing-policy.md S0305 Phase 02 Mark S0305 Phase 02 done after build validation [branch: DEBUG-v008]
2026-05-30 15:29:16 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 phase counter after Phase 02 completion [branch: DEBUG-v008]
2026-05-30 15:30:12 temp/VideoPlayerManager_S0305_20260530_152953.kt S0305 backup Create Phase 03 backup for VideoPlayerManager [branch: DEBUG-v008]
2026-05-30 15:30:12 temp/PlayerMediaLoaderManager_S0305_20260530_152953.kt S0305 backup Create Phase 03 backup for PlayerMediaLoaderManager [branch: DEBUG-v008]
2026-05-30 15:30:13 PLAN/S0305_mid-audio-playback-support/PHASE_03__fallback-error-flow.md S0305 Phase 03 Mark S0305 Phase 03 backup step done [branch: DEBUG-v008]
2026-05-30 15:30:13 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 03 step counter [branch: DEBUG-v008]
2026-05-30 15:30:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt S0305 Phase 03.2 Route local MIDI through Media3 instead of eager MediaPlayer fallback [branch: DEBUG-v008]
2026-05-30 15:31:32 PLAN/S0305_mid-audio-playback-support/PHASE_03__fallback-error-flow.md S0305 Phase 03 Mark S0305 Phase 03.2 done [branch: DEBUG-v008]
2026-05-30 15:31:32 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 03 step counter after 03.2 [branch: DEBUG-v008]
2026-05-30 15:32:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt S0305 Phase 03.3 Pass MIDI MIME hints for cached cloud and network audio [branch: DEBUG-v008]
2026-05-30 15:32:45 PLAN/S0305_mid-audio-playback-support/PHASE_03__fallback-error-flow.md S0305 Phase 03 Mark S0305 Phase 03.3 done [branch: DEBUG-v008]
2026-05-30 15:32:45 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 03 step counter after 03.3 [branch: DEBUG-v008]
2026-05-30 15:34:15 app_v2/src/main/res/values/strings.xml string/midi_playback_failed Add English MIDI playback failure message [branch: DEBUG-v008]
2026-05-30 15:34:15 app_v2/src/main/res/values-ru/strings.xml string/midi_playback_failed Add Russian MIDI playback failure message [branch: DEBUG-v008]
2026-05-30 15:34:16 app_v2/src/main/res/values-uk/strings.xml string/midi_playback_failed Add Ukrainian MIDI playback failure message [branch: DEBUG-v008]
2026-05-30 15:34:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt S0305 Phase 03.4 Show MIDI-specific service playback error message [branch: DEBUG-v008]
2026-05-30 15:35:07 PLAN/S0305_mid-audio-playback-support/PHASE_03__fallback-error-flow.md S0305 Phase 03 Mark S0305 Phase 03.4 done [branch: DEBUG-v008]
2026-05-30 15:35:07 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 03 step counter after 03.4 [branch: DEBUG-v008]
2026-05-30 15:37:09 app_v2/build.gradle.kts S0305 build validation Record auto-version update from Phase 03 debug build [branch: DEBUG-v008]
2026-05-30 15:37:21 PLAN/S0305_mid-audio-playback-support/PHASE_03__fallback-error-flow.md S0305 Phase 03 Mark S0305 Phase 03 done after build validation [branch: DEBUG-v008]
2026-05-30 15:37:21 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 phase counter after Phase 03 completion [branch: DEBUG-v008]
2026-05-30 15:38:09 app_v2/src/test/java/com/sza/fastmediasorter/domain/model/MidiPlaybackPolicyTest.kt MidiPlaybackPolicyTest Add MIDI playback policy unit tests [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/res/menu/overflow_menu_player.xml spec-dev S0303 Add Send to Telegram overflow menu item (player) [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt spec-dev S0303 Add SEND_TO_TELEGRAM overflow command + telegramInstalled gate [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelAvailabilityUpdater.kt spec-dev S0303 Pass telegramInstalled to buildActiveCommands [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt spec-dev S0303 Dispatch menu_send_to_telegram + Callback.onSendToTelegramClicked [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt spec-dev S0303 Implement onSendToTelegramClicked [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt spec-dev S0303 Add sendCurrentFileToTelegram via SystemShareInvoker [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt spec-dev S0303 Add Send to Telegram per-file overflow entry (Telegram-installed gate) [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt spec-dev S0303 Expose sendSelectedFilesToTelegram [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt spec-dev S0303 Wire onSendToTelegram in per-file overflow menu [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseShareOperationsHelper.kt spec-dev S0303 Add sendSelectedFilesToTelegram (targeted invokeFiles) [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/res/values/strings.xml spec-dev S0303 Add share_to_telegram + share_to_telegram_failed (EN) [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/res/values-ru/strings.xml spec-dev S0303 Add share_to_telegram + share_to_telegram_failed (RU) [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/main/res/values-uk/strings.xml spec-dev S0303 Add share_to_telegram + share_to_telegram_failed (UK) [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/TelegramExtractionStrategy.kt spec-dev S0303 New public t.me post extraction strategy (noLegal) [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalLinkDownloadModule.kt spec-dev S0303 Bind TelegramExtractionStrategy @IntoSet [branch: DEBUG-v008]
2026-05-30 15:38:31 app_v2/src/testNoLegal/java/com/sza/fastmediasorter/data/link/nolegal/TelegramExtractionStrategyTest.kt spec-dev S0303 Unit tests for TelegramExtractionStrategy [branch: DEBUG-v008]
2026-05-30 15:38:50 PLAN/S0305_mid-audio-playback-support/PHASE_04__tests-validation.md S0305 Phase 04 Mark S0305 Phase 04.1 done [branch: DEBUG-v008]
2026-05-30 15:38:51 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 04 step counter after 04.1 [branch: DEBUG-v008]
2026-05-30 15:39:15 app_v2/src/test/java/com/sza/fastmediasorter/domain/model/MediaExtensionsTest.kt MediaExtensionsTest Extend audio classification tests for S0305 MIDI scope [branch: DEBUG-v008]
2026-05-30 15:40:04 PLAN/S0305_mid-audio-playback-support/PHASE_04__tests-validation.md S0305 Phase 04 Mark S0305 Phase 04.2 done [branch: DEBUG-v008]
2026-05-30 15:40:05 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 04 step counter after 04.2 [branch: DEBUG-v008]
2026-05-30 15:40:29 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/Media3MidiExtensionPresenceTest.kt Media3MidiExtensionPresenceTest Add Media3 MIDI extension classpath presence test [branch: DEBUG-v008]
2026-05-30 15:41:19 PLAN/S0305_mid-audio-playback-support/PHASE_04__tests-validation.md S0305 Phase 04 Mark S0305 Phase 04.3 done [branch: DEBUG-v008]
2026-05-30 15:41:20 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 04 step counter after 04.3 [branch: DEBUG-v008]
2026-05-30 15:46:14 app_v2/build.gradle.kts S0305 Phase 04 build validation Record auto-version update from Phase 04 debug build [branch: DEBUG-v008]
2026-05-30 15:46:14 PLAN/S0305_mid-audio-playback-support/PHASE_04__tests-validation.md S0305 Phase 04.4 Record blocked validation results for S0305 Phase 04 [branch: DEBUG-v008]
2026-05-30 15:48:51 docs/FEATURES.md spec-dev S0303 Add Send to Telegram feature bullet (EN) [branch: DEBUG-v008]
2026-05-30 15:48:51 docs/FEATURES_RU.md spec-dev S0303 Add Send to Telegram feature bullet (RU) [branch: DEBUG-v008]
2026-05-30 15:48:51 docs/FEATURES_UK.md spec-dev S0303 Add Send to Telegram feature bullet (UK) [branch: DEBUG-v008]
2026-05-30 15:48:51 docs/FEATURES_noLegal.md spec-dev S0303 Add t.me public-post download entry (EN, noLegal) [branch: DEBUG-v008]
2026-05-30 15:48:51 docs/FEATURES_noLegal_RU.md spec-dev S0303 Add t.me public-post download entry (RU, noLegal) [branch: DEBUG-v008]
2026-05-30 15:48:51 docs/FEATURES_noLegal_UK.md spec-dev S0303 Add t.me public-post download entry (UK, noLegal) [branch: DEBUG-v008]
2026-05-30 15:52:15 PLAN/S0303_telegram-integration.md spec-dev All phases done (03 skipped); status -> BlockNeedUserTest [branch: DEBUG-v008]
2026-05-30 15:52:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt spec-dev S0303 Insert BlockNeedUserTest debug tag (player send flow) [branch: DEBUG-v008]
2026-05-30 15:52:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseShareOperationsHelper.kt spec-dev S0303 Insert BlockNeedUserTest debug tag (browse send flow) [branch: DEBUG-v008]
2026-05-30 15:52:15 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/TelegramExtractionStrategy.kt spec-dev S0303 Insert BlockNeedUserTest debug tag (t.me extraction flow) [branch: DEBUG-v008]
2026-05-30 17:32:10 PLAN/S0305_mid-audio-playback-support/PHASE_04__tests-validation.md S0305 Phase 04 Close S0305 Phase 04 with focused validation [branch: DEBUG-v008]
2026-05-30 17:32:10 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Mark S0305 Phase 04 done [branch: DEBUG-v008]
2026-05-30 17:33:04 docs/FEATURES.md FEATURES Audio Player Document MID MIDI audio playback support [branch: DEBUG-v008]
2026-05-30 17:33:05 docs/FEATURES_RU.md FEATURES_RU Audio Player Document MID MIDI audio playback support [branch: DEBUG-v008]
2026-05-30 17:33:05 docs/FEATURES_UK.md FEATURES_UK Audio Player Document MID MIDI audio playback support [branch: DEBUG-v008]
2026-05-30 17:33:05 PLAN/S0305_mid-audio-playback-support/PHASE_05__docs-catalog-cleanup.md S0305 Phase 05 Mark S0305 Phase 05.1 done [branch: DEBUG-v008]
2026-05-30 17:33:06 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 05 step counter after 05.1 [branch: DEBUG-v008]
2026-05-30 17:34:21 dev/CATALOG/app_v2.jsonl app_v2 catalog Refresh app_v2 catalog after S0305 Kotlin changes [branch: DEBUG-v008]
2026-05-30 17:34:21 dev/CATALOG/app_v2.md app_v2 catalog Render app_v2 catalog after S0305 Kotlin changes [branch: DEBUG-v008]
2026-05-30 17:34:21 PLAN/S0305_mid-audio-playback-support/PHASE_05__docs-catalog-cleanup.md S0305 Phase 05 Mark S0305 Phase 05.2 done [branch: DEBUG-v008]
2026-05-30 17:34:22 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Update S0305 Phase 05 step counter after 05.2 [branch: DEBUG-v008]
2026-05-30 17:36:08 app_v2/build.gradle.kts S0305 Phase 05 build validation Record auto-version update from Phase 05 final debug build [branch: DEBUG-v008]
2026-05-30 17:36:37 PLAN/S0306_thematic-string-resource-files.md spec-update Refinement (GPT-5, focus: language, structure, verifiability, consistency, completeness, style) [branch: DEBUG-v008]
2026-05-30 17:39:41 PLAN/S0305_mid-audio-playback-support.md spec-check Audit S0305 to Verified [branch: DEBUG-v008]
2026-05-30 17:39:41 PLAN/spec-catalog.jsonl S0305 spec catalog Close S0305 as Verified [branch: DEBUG-v008]
2026-05-30 17:39:41 PLAN/S0305_mid-audio-playback-support/PHASE_05__docs-catalog-cleanup.md S0305 Phase 05 Mark S0305 Phase 05 done [branch: DEBUG-v008]
2026-05-30 17:39:42 PLAN/S0305_mid-audio-playback-support/INDEX.md S0305 tactical index Close S0305 tactical plan [branch: DEBUG-v008]
2026-05-30 17:43:48 PLAN/S0306_thematic-string-resource-files.md spec-update Accept P-1 and defer P-2 for S0306 implementation [branch: DEBUG-v008]
2026-05-30 17:45:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt S0305 Add optional MIME type to single-file audio service controller playback [branch: DEBUG-v008]
2026-05-30 17:46:14 PLAN/S0297_nolegal-vr-capability-research.md spec-all Verify S0297 research closure [branch: DEBUG-v008]
2026-05-30 17:46:14 PLAN/S0297_nolegal-vr-capability-research/RESEARCH.md spec-all Mark S0297 research artifact complete [branch: DEBUG-v008]
2026-05-30 17:46:14 PLAN/S0297_nolegal-vr-capability-research.md spec-all Pipeline Verified: S0297 [branch: DEBUG-v008]
2026-05-30 17:46:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt S0305 Pass MIDI MIME hint through local single-file audio service fallback [branch: DEBUG-v008]
2026-05-30 17:46:52 PLAN/S0306_thematic-string-resource-files/INDEX.md spec-tech Create tactical plan for S0306 [branch: DEBUG-v008]
2026-05-30 17:46:52 PLAN/S0306_thematic-string-resource-files/PHASE_01__resource-regroup.md spec-tech S0306 Phase 01 resource regroup [branch: DEBUG-v008]
2026-05-30 17:46:53 PLAN/S0306_thematic-string-resource-files/PHASE_02__docs-catalog-cleanup.md spec-tech S0306 Phase 02 docs catalog cleanup [branch: DEBUG-v008]
2026-05-30 17:46:53 PLAN/S0306_thematic-string-resource-files.md spec-tech S0306 status to Tactical [branch: DEBUG-v008]
2026-05-30 17:47:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0305 Pass MIDI MIME hint through standalone audio service playback [branch: DEBUG-v008]
2026-05-30 17:47:22 PLAN/S0306_thematic-string-resource-files.md spec-tech Add S0306 owner inputs gate for tactical transition [branch: DEBUG-v008]
2026-05-30 17:49:12 app_v2/src/main/res/values/strings_link_auth.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:12 app_v2/src/main/res/values-ru/strings_link_auth.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:13 app_v2/src/main/res/values-uk/strings_link_auth.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:13 app_v2/src/main/res/values/strings_s0140.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:13 app_v2/src/main/res/values-ru/strings_s0140.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:14 app_v2/src/main/res/values-uk/strings_s0140.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:14 app_v2/src/main/res/values/strings_s0155.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:14 app_v2/src/main/res/values-ru/strings_s0155.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:14 app_v2/src/main/res/values-uk/strings_s0155.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:15 app_v2/src/main/res/values/strings_s0157.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:15 app_v2/src/main/res/values-ru/strings_s0157.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:16 app_v2/src/main/res/values-uk/strings_s0157.xml S0306 Step 01.1 Move link auth strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:49:16 PLAN/S0306_thematic-string-resource-files/PHASE_01__resource-regroup.md S0306 Step 01.1 Mark link auth resource move done [branch: DEBUG-v008]
2026-05-30 17:51:27 app_v2/src/main/res/values/strings_google_account.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:27 app_v2/src/main/res/values-ru/strings_google_account.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:28 app_v2/src/main/res/values-uk/strings_google_account.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:28 app_v2/src/main/res/values/strings_s0200.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:28 app_v2/src/main/res/values-ru/strings_s0200.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:29 app_v2/src/main/res/values-uk/strings_s0200.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:29 app_v2/src/main/res/values/strings_s0294.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:29 app_v2/src/main/res/values-ru/strings_s0294.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:29 app_v2/src/main/res/values-uk/strings_s0294.xml S0306 Step 01.2 Move Google account strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:51:30 PLAN/S0306_thematic-string-resource-files/PHASE_01__resource-regroup.md S0306 Step 01.2 Mark Google account resource move done [branch: DEBUG-v008]
2026-05-30 17:52:11 PLAN/S0305_mid-audio-playback-support.md spec-check Re-audit S0305 after MIME fallback fix; PASS/WARN/FAIL 61/0/0 [branch: DEBUG-v008]
2026-05-30 17:52:17 app_v2/src/main/res/values/strings_vr.xml S0306 Step 01.3 Move VR strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:52:18 app_v2/src/main/res/values-ru/strings_vr.xml S0306 Step 01.3 Move VR strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:52:18 app_v2/src/main/res/values-uk/strings_vr.xml S0306 Step 01.3 Move VR strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:52:18 app_v2/src/main/res/values/strings_s0292.xml S0306 Step 01.3 Move VR strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:52:19 app_v2/src/main/res/values-ru/strings_s0292.xml S0306 Step 01.3 Move VR strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:52:19 app_v2/src/main/res/values-uk/strings_s0292.xml S0306 Step 01.3 Move VR strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:52:19 PLAN/S0306_thematic-string-resource-files/PHASE_01__resource-regroup.md S0306 Step 01.3 Mark VR resource move done [branch: DEBUG-v008]
2026-05-30 17:53:05 PLAN/S0307_emulator-user-test-sweep.md spec Add strategic spec S0307 for emulator user-test sweep [branch: DEBUG-v008]
2026-05-30 17:53:07 app_v2/src/main/res/values/strings_resource_operations.xml S0306 Step 01.4 Move resource operation strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:53:07 app_v2/src/main/res/values-ru/strings_resource_operations.xml S0306 Step 01.4 Move resource operation strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:53:07 app_v2/src/main/res/values-uk/strings_resource_operations.xml S0306 Step 01.4 Move resource operation strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:53:07 app_v2/src/main/res/values/strings_s0160.xml S0306 Step 01.4 Move resource operation strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:53:08 app_v2/src/main/res/values-ru/strings_s0160.xml S0306 Step 01.4 Move resource operation strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:53:08 app_v2/src/main/res/values-uk/strings_s0160.xml S0306 Step 01.4 Move resource operation strings to thematic resource file [branch: DEBUG-v008]
2026-05-30 17:53:08 PLAN/S0306_thematic-string-resource-files/PHASE_01__resource-regroup.md S0306 Step 01.4 Mark resource operations resource move done [branch: DEBUG-v008]
2026-05-30 17:54:54 PLAN/S0306_thematic-string-resource-files/PHASE_01__resource-regroup.md S0306 Phase 01 Mark resource regroup phase done [branch: DEBUG-v008]
2026-05-30 17:54:54 PLAN/S0306_thematic-string-resource-files/INDEX.md S0306 Phase 01 Update Phase 01 completion in tactical index [branch: DEBUG-v008]
2026-05-30 17:54:54 app_v2/build.gradle.kts S0306 Phase 01 build validation Record auto-version update from standard debug build [branch: DEBUG-v008]
2026-05-30 17:55:58 PLAN/S0306_thematic-string-resource-files.md S0306 Step 02.1 Record resource-only implementation handoff [branch: DEBUG-v008]
2026-05-30 17:55:58 PLAN/S0306_thematic-string-resource-files/PHASE_02__docs-catalog-cleanup.md S0306 Phase 02 Mark docs catalog cleanup phase done [branch: DEBUG-v008]
2026-05-30 17:55:59 PLAN/S0306_thematic-string-resource-files/INDEX.md S0306 Phase 02 Update Phase 02 completion in tactical index [branch: DEBUG-v008]
2026-05-30 17:56:11 PLAN/S0306_thematic-string-resource-files.md S0306 implementation Mark S0306 implemented [branch: DEBUG-v008]
2026-05-30 17:57:27 PLAN/S0307_emulator-user-test-sweep.md spec Add owner inputs gate for S0307 spec-all continuation [branch: DEBUG-v008]
2026-05-30 17:57:38 PLAN/S0306_thematic-string-resource-files.md spec-check Audit S0306 to Verified; PASS/WARN/FAIL 38/0/0 [branch: DEBUG-v008]
2026-05-30 17:57:54 PLAN/S0306_thematic-string-resource-files/INDEX.md S0306 spec-check Mark S0306 completion gate verified [branch: DEBUG-v008]
2026-05-30 17:59:50 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-tech Create or update S0307 tactical plan artifact [branch: DEBUG-v008]
2026-05-30 17:59:50 PLAN/S0307_emulator-user-test-sweep/PHASE_01__bootstrap-discovery.md spec-tech Create or update S0307 tactical plan artifact [branch: DEBUG-v008]
2026-05-30 17:59:51 PLAN/S0307_emulator-user-test-sweep/PHASE_02__route-matrix.md spec-tech Create or update S0307 tactical plan artifact [branch: DEBUG-v008]
2026-05-30 17:59:51 PLAN/S0307_emulator-user-test-sweep/PHASE_03__fixtures-build-plan.md spec-tech Create or update S0307 tactical plan artifact [branch: DEBUG-v008]
2026-05-30 17:59:52 PLAN/S0307_emulator-user-test-sweep/PHASE_04__emulator-execution.md spec-tech Create or update S0307 tactical plan artifact [branch: DEBUG-v008]
2026-05-30 17:59:52 PLAN/S0307_emulator-user-test-sweep/PHASE_05__verdict-report.md spec-tech Create or update S0307 tactical plan artifact [branch: DEBUG-v008]
2026-05-30 17:59:53 PLAN/S0307_emulator-user-test-sweep.md spec-tech Create or update S0307 tactical plan artifact [branch: DEBUG-v008]
2026-05-30 18:00:35 PLAN/S0307_emulator-user-test-sweep/PHASE_01__bootstrap-discovery.md spec-dev Mark S0307 Phase 01 discovery complete [branch: DEBUG-v008]
2026-05-30 18:00:35 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-dev Update S0307 tactical index after Phase 01 [branch: DEBUG-v008]
2026-05-30 18:00:49 PLAN/S0307_emulator-user-test-sweep.md spec-dev Set S0307 implementation status in progress [branch: DEBUG-v008]
2026-05-30 18:02:01 PLAN/S0307_emulator-user-test-sweep/PHASE_02__route-matrix.md spec-dev Mark S0307 Phase 02 route matrix complete [branch: DEBUG-v008]
2026-05-30 18:02:01 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-dev Update S0307 tactical index after Phase 02 [branch: DEBUG-v008]
2026-05-30 18:02:43 PLAN/S0307_emulator-user-test-sweep/PHASE_03__fixtures-build-plan.md spec-dev Mark S0307 Phase 03 fixtures plan complete [branch: DEBUG-v008]
2026-05-30 18:02:43 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-dev Update S0307 tactical index after Phase 03 [branch: DEBUG-v008]
2026-05-30 18:03:29 PLAN/S0307_emulator-user-test-sweep/PHASE_04__emulator-execution.md spec-dev Block S0307 Phase 04 because emulator is offline [branch: DEBUG-v008]
2026-05-30 18:03:29 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-dev Record S0307 emulator execution blocker [branch: DEBUG-v008]
2026-05-30 18:03:39 PLAN/S0307_emulator-user-test-sweep.md spec-dev Set S0307 strategic status to BlockExternal [branch: DEBUG-v008]
2026-05-30 18:04:22 PLAN/S0307_emulator-user-test-sweep.md spec-dev Update S0307 Last Audit after blocked sweep [branch: DEBUG-v008]
2026-05-30 18:04:23 PLAN/S0307_emulator-user-test-sweep/PHASE_05__verdict-report.md spec-dev Mark S0307 Phase 05 report complete [branch: DEBUG-v008]
2026-05-30 18:04:23 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-dev Mark S0307 tactical plan blocked after report [branch: DEBUG-v008]
2026-05-30 18:11:45 PLAN/S0307_emulator-user-test-sweep.md spec-dev Resume S0307 after emulator became online [branch: DEBUG-v008]
2026-05-30 18:11:46 PLAN/S0307_emulator-user-test-sweep/PHASE_04__emulator-execution.md spec-dev Mark S0307 Phase 04 device ready [branch: DEBUG-v008]
2026-05-30 18:11:47 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-dev Resume S0307 tactical Phase 04 [branch: DEBUG-v008]
2026-05-30 18:15:41 app_v2/build.gradle.kts build Auto-version standard debug build for S0307 emulator sweep [branch: DEBUG-v008]
2026-05-30 18:16:17 PLAN/S0307_emulator-user-test-sweep/PHASE_04__emulator-execution.md spec-dev Mark S0307 Phase 04 build install complete [branch: DEBUG-v008]
2026-05-30 18:16:18 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-dev Update S0307 index after build install [branch: DEBUG-v008]
2026-05-30 18:17:07 PLAN/S0307_emulator-user-test-sweep/PHASE_04__emulator-execution.md spec-dev Mark S0307 Phase 04 fixture push complete [branch: DEBUG-v008]
2026-05-30 18:17:07 PLAN/S0307_emulator-user-test-sweep/INDEX.md spec-dev Update S0307 index after fixture push [branch: DEBUG-v008]
2026-05-30 18:38:43 PLAN/S0307_emulator-user-test-sweep.md S0307 Update emulator sweep audit after partial standardDebug verification run [branch: DEBUG-v008]
2026-05-30 18:45:06 .claude/commands/spec-sweep.md spec-sweep New /spec-sweep skill: batch device-test sweep over BlockNeedUserTest tickets (operationalizes S0307); wired auto device-test gate into /spec-dev, /spec-all, /spec-next; registered in CLAUDE.md [branch: DEBUG-v008]
2026-05-30 18:46:22 .github/prompts/spec-sweep.prompt.md spec-sweep.prompt.md Add /spec-sweep skill prompt file [branch: DEBUG-v008]
2026-05-30 18:46:23 AGENTS.md AGENTS.md Register /spec-sweep skill in mandatory routing and imported skills lists [branch: DEBUG-v008]
2026-05-30 18:54:30 PLAN/S0307_emulator-user-test-sweep/PHASE_04__emulator-execution.md S0307 Mark emulator execution phase complete after partial standardDebug sweep [branch: DEBUG-v008]
2026-05-30 18:54:30 PLAN/S0307_emulator-user-test-sweep/PHASE_05__verdict-report.md S0307 Update verdict phase for candidate-only partial execution report [branch: DEBUG-v008]
2026-05-30 18:54:31 PLAN/S0307_emulator-user-test-sweep/INDEX.md S0307 Synchronize tactical index with partial emulator sweep completion [branch: DEBUG-v008]
2026-05-30 18:56:56 PLAN/S0254_settings-grid-to-interface.md S0254 Mark settings grid relocation verification broken after emulator evidence [branch: DEBUG-v008]
2026-05-30 18:56:56 PLAN/S0307_emulator-user-test-sweep.md S0307 Record S0254 broken transition in sweep audit [branch: DEBUG-v008]
2026-05-30 18:56:57 PLAN/S0307_emulator-user-test-sweep/PHASE_05__verdict-report.md S0307 Record applied S0254 transition in verdict phase [branch: DEBUG-v008]
2026-05-30 18:56:57 PLAN/S0307_emulator-user-test-sweep/INDEX.md S0307 Record S0254 broken transition in tactical index [branch: DEBUG-v008]
2026-05-30 18:59:21 PLAN/S0307_emulator-user-test-sweep.md S0307 Record S0281 share-alias blocker in sweep audit [branch: DEBUG-v008]
2026-05-30 18:59:21 PLAN/S0307_emulator-user-test-sweep/PHASE_04__emulator-execution.md S0307 Update evidence counters after S0281 share attempt [branch: DEBUG-v008]
2026-05-30 19:08:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt S0165 Remove S0165 debug verification probe after emulator pass [branch: DEBUG-v008]
2026-05-30 19:10:34 PLAN/S0165_browse-create-folder.md S0165 Record emulator verification for browse create folder [branch: DEBUG-v008]
2026-05-30 19:12:36 PLAN/S0307_emulator-user-test-sweep.md S0307 Record S0165 verified result in sweep audit [branch: DEBUG-v008]
2026-05-30 19:12:36 PLAN/S0307_emulator-user-test-sweep/INDEX.md S0307 Update sweep completion notes for S0165 [branch: DEBUG-v008]
2026-05-30 19:12:36 PLAN/S0307_emulator-user-test-sweep/PHASE_04__emulator-execution.md S0307 Update Phase 04 S0165 evidence summary [branch: DEBUG-v008]
2026-05-30 19:12:37 PLAN/S0307_emulator-user-test-sweep/PHASE_05__verdict-report.md S0307 Update Phase 05 mutation count for S0165 [branch: DEBUG-v008]
2026-05-30 21:00:18 docs/WHATS_NEW.md WHATS_NEW Release notes and README for v2.60.5302.057 - plateau merge from DEBUG-v008 [branch: DEBUG-v008]
2026-05-30 21:48:58 PLAN/S0308_password-protected-files.md spec/S0308 Add strategic spec S0308 for password-protected files [branch: DEBUG-v009]
2026-05-30 21:51:36 index.html GitHub Pages site Update landing What’s New cards (EN/RU/UK) and sitemap lastmod for v2.60.5302.057 release - standard features only [branch: DEBUG-v009]
2026-05-30 21:57:42 index.html GitHub Pages site Fix image lib Coil->Glide, add Office/Telegram/MIDI/File Manager Mode to Key Features, bump section count and schema dateModified (EN/RU/UK) [branch: DEBUG-v009]
2026-05-30 22:08:54 docs/FEATURES_RU.md docs/FEATURES*.md consolidate public features, classify standard vs VR, hide noLegal [branch: DEBUG-v009]
2026-05-30 22:08:55 index-ru.html index*.html redesign landing pages with dark ambient, responsive grids, and interactive feature explorer [branch: DEBUG-v009]
2026-05-30 22:08:55 styles.css styles.css add dark ambient theme colors, variables, animations, and glassmorphic card styles [branch: DEBUG-v009]
2026-05-30 22:13:36 PLAN/S0308_password-protected-files.md spec-update/S0308 Refine S0308 owner inputs for password-protected files [branch: DEBUG-v009]
2026-05-30 22:15:08 PLAN/S0310_nolegal-edition-landing-page.md spec Add strategic spec S0310 for noLegal edition public GitHub page (EN/RU/UK, indexed, no inbound link from index) [branch: DEBUG-v009]
2026-05-30 23:09:10 index-uk.html index-uk.html Rearrange usage scenarios and user guides to the beginning of the container in Ukrainian locale [branch: DEBUG-v009]
2026-05-30 23:09:10 index.html index.html Rearrange usage scenarios and user guides to the beginning of the container in English locale [branch: DEBUG-v009]
2026-05-30 23:18:06 styles.css styles.css Implement interactive collapsable accordion design for feature cards and hide duplicate full features details panel [branch: DEBUG-v009]
2026-05-30 23:18:07 index-ru.html index-ru.html Apply accordion toggles and click listeners to feature explorer [branch: DEBUG-v009]
2026-05-30 23:18:07 index.html index.html Apply accordion toggles and click listeners to feature explorer [branch: DEBUG-v009]
2026-05-30 23:18:08 index-uk.html index-uk.html Apply accordion toggles and click listeners to feature explorer [branch: DEBUG-v009]
2026-05-30 23:27:16 PLAN/S0310_nolegal-edition-landing-page/INDEX.md spec-tech Create tactical plan for S0310 (noLegal public page) [branch: DEBUG-v009]
2026-05-30 23:27:17 PLAN/S0310_nolegal-edition-landing-page/PHASE_01__en-page.md spec-tech Phase 01: en-page [branch: DEBUG-v009]
2026-05-30 23:27:17 PLAN/S0310_nolegal-edition-landing-page/PHASE_02__ru-uk-pages.md spec-tech Phase 02: ru-uk-pages [branch: DEBUG-v009]
2026-05-30 23:27:17 PLAN/S0310_nolegal-edition-landing-page/PHASE_03__sitemap-seo-isolation.md spec-tech Phase 03: sitemap-seo-isolation [branch: DEBUG-v009]
2026-05-30 23:27:18 PLAN/S0310_nolegal-edition-landing-page/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v009]
2026-05-30 23:27:18 PLAN/S0310_nolegal-edition-landing-page.md spec-tech Status -> Tactical [branch: DEBUG-v009]
2026-05-30 23:32:39 nolegal.html site S0310 Phase 01: English noLegal edition page (topology, full feature catalog, outbound links, indexed SEO) [branch: DEBUG-v009]
2026-05-30 23:32:39 styles.css site S0310 Phase 01: append-only noLegal accent styles [branch: DEBUG-v009]
2026-05-30 23:34:20 PLAN/S0308_password-protected-files.md spec-update/S0308 Resolve S0308 implementation research decisions [branch: DEBUG-v009]
2026-05-30 23:36:35 PLAN/S0308_password-protected-files/INDEX.md spec-tech/S0308 Create tactical plan for S0308 [branch: DEBUG-v009]
2026-05-30 23:36:35 PLAN/S0308_password-protected-files/PHASE_01__zip-domain.md spec-tech/S0308 Create S0308 phase 01 zip domain [branch: DEBUG-v009]
2026-05-30 23:36:35 PLAN/S0308_password-protected-files/PHASE_02__browse-password-ui.md spec-tech/S0308 Create S0308 phase 02 browse password UI [branch: DEBUG-v009]
2026-05-30 23:36:35 PLAN/S0308_password-protected-files/PHASE_03__document-fallbacks.md spec-tech/S0308 Create S0308 phase 03 document fallbacks [branch: DEBUG-v009]
2026-05-30 23:36:36 PLAN/S0308_password-protected-files/PHASE_04__docs-catalog-cleanup.md spec-tech/S0308 Create S0308 phase 04 docs catalog cleanup [branch: DEBUG-v009]
2026-05-30 23:36:36 PLAN/S0308_password-protected-files.md spec-tech/S0308 Move S0308 strategic spec to Tactical [branch: DEBUG-v009]
2026-05-30 23:37:19 app_v2/build.gradle.kts spec-dev/S0308/phase-01 Add zip4j dependency for encrypted ZIP extraction [branch: DEBUG-v009]
2026-05-30 23:37:19 PLAN/S0308_password-protected-files.md spec-dev/S0308 Mark S0308 implementation in progress [branch: DEBUG-v009]
2026-05-30 23:37:19 PLAN/S0308_password-protected-files/INDEX.md spec-dev/S0308/phase-01 Mark S0308 phase 01 in progress [branch: DEBUG-v009]
2026-05-30 23:37:20 PLAN/S0308_password-protected-files/PHASE_01__zip-domain.md spec-dev/S0308/phase-01 Complete S0308 phase 01 dependency step [branch: DEBUG-v009]
2026-05-30 23:37:23 nolegal-ru.html site S0310 Phase 02: Russian noLegal edition page mirror [branch: DEBUG-v009]
2026-05-30 23:37:24 nolegal-uk.html site S0310 Phase 02: Ukrainian noLegal edition page mirror [branch: DEBUG-v009]
2026-05-30 23:38:50 sitemap.xml site S0310 Phase 03: register noLegal triplet in sitemap (indexed, hreflang isolated) [branch: DEBUG-v009]
2026-05-30 23:39:24 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExtractArchiveUseCase.kt spec-dev/S0308/phase-01 Add password-aware ZIP extraction contract [branch: DEBUG-v009]
2026-05-30 23:40:11 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ExtractArchiveUseCaseTest.kt spec-dev/S0308/phase-01 Add encrypted ZIP extraction tests [branch: DEBUG-v009]
2026-05-30 23:42:50 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExtractArchiveUseCase.kt spec-dev/S0308/phase-01 Fix password ZIP compile helpers [branch: DEBUG-v009]
2026-05-30 23:45:47 PLAN/S0308_password-protected-files/INDEX.md spec-dev/S0308/phase-01 Mark S0308 phase 01 done [branch: DEBUG-v009]
2026-05-30 23:45:47 PLAN/S0308_password-protected-files/PHASE_01__zip-domain.md spec-dev/S0308/phase-01 Record S0308 phase 01 validation evidence [branch: DEBUG-v009]
2026-05-30 23:46:37 PLAN/S0310_nolegal-edition-landing-page.md spec-dev All phases done; published noLegal page to main 566e43e9; status -> Implemented [branch: DEBUG-v009]
2026-05-30 23:48:01 PLAN/S0310_nolegal-edition-landing-page.md spec-check Audit S0310 -> Verified; PASS/WARN/FAIL 12/0/0; published main 566e43e9 [branch: DEBUG-v009]
2026-05-30 23:48:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseEvent.kt spec-dev/S0308/phase-02 Add archive password prompt event [branch: DEBUG-v009]
2026-05-30 23:48:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt spec-dev/S0308/phase-02 Add archive password extraction entry point [branch: DEBUG-v009]
2026-05-30 23:49:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseArchiveManager.kt spec-dev/S0308/phase-02 Route protected ZIP extraction through password preflight [branch: DEBUG-v009]
2026-05-30 23:49:37 index.html landing Restructure English landing cards with short/detail blocks and expanded scenarios [branch: DEBUG-v009]
2026-05-30 23:49:37 index-ru.html landing Restructure Russian landing cards with short/detail blocks and expanded scenarios [branch: DEBUG-v009]
2026-05-30 23:49:37 index-uk.html landing Restructure Ukrainian landing cards with short/detail blocks and expanded scenarios [branch: DEBUG-v009]
2026-05-30 23:49:37 styles.css landing Add shared short/detail card styling for landing pages [branch: DEBUG-v009]
2026-05-30 23:50:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseArchiveDialogManager.kt spec-dev/S0308/phase-02 Add archive password prompt dialog [branch: DEBUG-v009]
2026-05-30 23:50:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt spec-dev/S0308/phase-02 Handle archive password prompt event [branch: DEBUG-v009]
2026-05-30 23:51:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt spec-dev/S0308/phase-02 Wire archive password extraction callback [branch: DEBUG-v009]
2026-05-30 23:51:49 app_v2/src/main/res/values/strings.xml spec-dev/S0308/phase-02 Add protected archive strings [branch: DEBUG-v009]
2026-05-30 23:51:50 app_v2/src/main/res/values-ru/strings.xml spec-dev/S0308/phase-02 Add Russian protected archive strings [branch: DEBUG-v009]
2026-05-30 23:51:51 app_v2/src/main/res/values-uk/strings.xml spec-dev/S0308/phase-02 Add Ukrainian protected archive strings [branch: DEBUG-v009]
2026-05-30 23:53:15 PLAN/S0308_password-protected-files/INDEX.md spec-dev/S0308/phase-02 Mark S0308 phase 02 done [branch: DEBUG-v009]
2026-05-30 23:53:16 PLAN/S0308_password-protected-files/PHASE_02__browse-password-ui.md spec-dev/S0308/phase-02 Record S0308 phase 02 validation evidence [branch: DEBUG-v009]
2026-05-30 23:54:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt spec-dev/S0308/phase-03 Classify protected PDF renderer failures [branch: DEBUG-v009]
2026-05-30 23:55:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt spec-dev/S0308/phase-03 Classify protected EPUB parse failures [branch: DEBUG-v009]
2026-05-30 23:55:38 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentEngineBridge.kt spec-dev/S0308/phase-03 Classify protected Office ZIP container failures [branch: DEBUG-v009]
2026-05-30 23:57:35 PLAN/S0308_password-protected-files/INDEX.md spec-dev/S0308/phase-03 Mark S0308 phase 03 done [branch: DEBUG-v009]
2026-05-30 23:57:35 PLAN/S0308_password-protected-files/PHASE_03__document-fallbacks.md spec-dev/S0308/phase-03 Record S0308 phase 03 validation evidence [branch: DEBUG-v009]
2026-05-30 23:58:27 docs/FEATURES.md doc-update/S0308 Document protected archive and document fallback support [branch: DEBUG-v009]
2026-05-30 23:58:27 docs/FEATURES_RU.md doc-update/S0308 Document Russian protected archive and document fallback support [branch: DEBUG-v009]
2026-05-30 23:58:27 docs/FEATURES_UK.md doc-update/S0308 Document Ukrainian protected archive and document fallback support [branch: DEBUG-v009]
2026-05-30 23:58:27 docs/TECH_STACK.md doc-update/S0308 Document zip4j dependency [branch: DEBUG-v009]
2026-05-30 23:58:28 dev/TECH_REQUIREMENTS.md doc-update/S0308 Add zip4j to dependency inventory [branch: DEBUG-v009]
2026-05-31 00:01:07 PLAN/S0308_password-protected-files.md spec-dev/S0308 Mark S0308 implemented [branch: DEBUG-v009]
2026-05-31 00:01:07 PLAN/S0308_password-protected-files/INDEX.md spec-dev/S0308/phase-04 Mark S0308 tactical plan done [branch: DEBUG-v009]
2026-05-31 00:01:08 PLAN/S0308_password-protected-files/PHASE_04__docs-catalog-cleanup.md spec-dev/S0308/phase-04 Record S0308 phase 04 validation evidence [branch: DEBUG-v009]
2026-05-31 00:08:40 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.5310.007 - plateau merge from DEBUG-v009 [branch: DEBUG-v009]
2026-05-31 00:47:41 index.html website landing page EN updated landing cards, feature highlights, and responsive grid [branch: DEBUG-v010]
2026-05-31 00:47:41 index-ru.html website landing page RU updated landing cards, feature highlights, and responsive grid [branch: DEBUG-v010]
2026-05-31 00:47:41 index-uk.html website landing page UK updated landing cards, feature highlights, and responsive grid [branch: DEBUG-v010]
2026-05-31 00:47:42 styles.css website responsive card grid expanded responsive card grid up to ten columns [branch: DEBUG-v010]
2026-05-31 00:56:49 PLAN/S0311_agent-workflow-tooling-overhaul.md PLAN/S0311_agent-workflow-tooling-overhaul.md Create strategic specification for agent cooperation and DX tooling overhaul [branch: DEBUG-v010]
2026-05-31 00:58:16 PLAN/S0311_agent-workflow-tooling-overhaul.md PLAN/S0311_agent-workflow-tooling-overhaul.md Translate strategic specification S0311 to Russian [branch: DEBUG-v010]
2026-05-31 01:03:32 gradle.properties CI / Gradle bootstrap Remove machine-specific org.gradle.java.home (Windows JBR path) from committed gradle.properties; it aborted Gradle on the Linux CI runner before lint ran. Relocated to per-user GRADLE_USER_HOME. [branch: DEBUG-v010]
2026-05-31 01:04:03 PLAN/S0311_agent-workflow-tooling-overhaul.md spec-update Refine S0311 strategic agent workflow tooling overhaul spec [branch: DEBUG-v010]
2026-05-31 01:07:35 PLAN/S0311_agent-workflow-tooling-overhaul.md spec-update Add agent coordination model to S0311 tooling overhaul spec [branch: DEBUG-v010]
2026-05-31 01:11:06 PLAN/S0311_agent-workflow-tooling-overhaul.md spec-update expanded S0311 organizational workflow contracts [branch: DEBUG-v010]
2026-05-31 01:31:56 app_v2/src/streamingEnabled/java/com/sza/fastmediasorter/data/link/streaming/MediaMuxerRemuxer.kt CI Android Lint gate Fix WrongConstant: translate MediaExtractor.sampleFlags (SAMPLE_FLAG_*) to MediaCodec BUFFER_FLAG_KEY_FRAME before MediaMuxer.writeSampleData [branch: DEBUG-v010]
2026-05-31 01:32:36 app_v2/src/main/AndroidManifest.xml CI Android Lint gate Fix AppLinkUrlError: suppress host-required check on custom-scheme AppAuth redirect (com.sza.fastmediasorter:/oauth2redirect has no host by design) [branch: DEBUG-v010]
2026-05-31 01:32:37 app_v2/src/main/res/layout/player_draw_overlay_toolbar_content.xml CI Android Lint gate Fix UseAppTint: replace android:tint with app:tint on ImageButtons (portrait + landscape draw overlay toolbar) [branch: DEBUG-v010]
2026-05-31 01:32:37 app_v2/src/main/res/layout/player_vr_launch_overlay_content.xml CI Android Lint gate Fix UseAppTint: android:tint -> app:tint on VR launch badge icon [branch: DEBUG-v010]
2026-05-31 01:32:37 app_v2/src/main/res/layout/view_collapsible_section_header.xml CI Android Lint gate Fix UseAppTint: android:tint -> app:tint on help icon [branch: DEBUG-v010]
2026-05-31 01:32:38 app_v2/src/main/res/layout/view_settings_toggle_row.xml CI Android Lint gate Fix UseAppTint: android:tint -> app:tint on help icon [branch: DEBUG-v010]
2026-05-31 01:32:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt CI Android Lint gate Fix StringFormatInvalid: drop extra arg from getString(error_delete_failed) - string has no format placeholder [branch: DEBUG-v010]
2026-05-31 01:32:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt CI Android Lint gate Fix StringFormatInvalid: toastDeleteFailed() no longer passes fileName to getString(delete_failed) - string has no placeholder [branch: DEBUG-v010]
2026-05-31 01:32:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubWebViewLifecycle.kt CI Android Lint gate Fix JavascriptInterface: type selectionBridge as EpubViewerManager.EpubSelectionBridge so lint sees the @JavascriptInterface annotation [branch: DEBUG-v010]
2026-05-31 01:42:08 PLAN/S0311_agent-workflow-tooling-overhaul.md spec-update Refactored S0311 into a tooling umbrella (Claude Opus 4.8): split into sub-tickets S0312-S0315, cut governance layer, corrected false Maestro/hasTests repo-facts [branch: DEBUG-v010]
2026-05-31 01:42:08 PLAN/S0312_build-failure-digest.md spec-update Created sub-ticket carved from S0311: build failure digest [branch: DEBUG-v010]
2026-05-31 01:42:08 PLAN/S0313_flavor-isolation-diff-guard.md spec-update Created sub-ticket carved from S0311: flavor isolation diff-guard [branch: DEBUG-v010]
2026-05-31 01:42:08 PLAN/S0314_catalog-dependency-test-enrichment.md spec-update Created sub-ticket carved from S0311: catalog dependency and test enrichment [branch: DEBUG-v010]
2026-05-31 01:42:08 PLAN/S0315_rule-prompt-drift-audit.md spec-update Created sub-ticket carved from S0311: rule and prompt drift audit [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0311_agent-workflow-tooling-overhaul.md spec-tech Premise correction: catalog hasTests field exists (regression from gitignored-zone rg); S0314 hardens not creates [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0312_build-failure-digest.md spec-tech Status -> Tactical [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0313_flavor-isolation-diff-guard.md spec-tech Status -> Tactical [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0314_catalog-dependency-test-enrichment.md spec-tech Status -> Tactical; premise correction (hasTests exists, ticket hardens it) [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0315_rule-prompt-drift-audit.md spec-tech Status -> Tactical [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0312_build-failure-digest/INDEX.md spec-tech Tactical plan: 3 phases (contract-parser, one-shot-digest, docs-catalog-cleanup) [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0313_flavor-isolation-diff-guard/INDEX.md spec-tech Tactical plan: 4 phases (foundations, diff-classify-gate, self-test-fixtures, docs-catalog-cleanup) [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0314_catalog-dependency-test-enrichment/INDEX.md spec-tech Tactical plan: 3 phases (schema-enrich, query-flags, docs-catalog-cleanup) [branch: DEBUG-v010]
2026-05-31 02:14:45 PLAN/S0315_rule-prompt-drift-audit/INDEX.md spec-tech Tactical plan: 3 phases (sources-contract, mismatch-detectors, docs-catalog-cleanup) [branch: DEBUG-v010]
2026-05-31 02:32:45 scripts/guard/FlavorTokens.ps1 S0313 Phase 01 Add FlavorTokens.ps1: data-only module exposing Get-FlavorTokenPatterns (forbidden BuildConfig.IS_/SUPPORT_/ENABLE_ flavor-gate regex + remediation categories) [branch: DEBUG-v010]
2026-05-31 02:32:55 scripts/guard/ChangeSource.ps1 S0313 Phase 01 Add ChangeSource.ps1: Get-ChangedMainKotlin resolves app_v2/src/main/java Kotlin scan set from git diff (unstaged+staged, optional base ref) or explicit -Path override [branch: DEBUG-v010]
2026-05-31 02:32:59 scripts/guard/ViolationRecord.ps1 S0313 Phase 01 Add ViolationRecord.ps1: New-FlavorViolation builds the ordered violation record (file/line/matchedToken/tokenFamily/remediationCategory/classification, classification defaults to unset) [branch: DEBUG-v010]
2026-05-31 02:38:33 scripts/guard/Classifier.ps1 S0313 Phase 02 Add Classifier.ps1: Get-LineClassification marks a match new-or-touched when its line is in the git diff -U0 added set (or explicit -Path intent), else legacy [branch: DEBUG-v010]
2026-05-31 02:38:37 scripts/guard/flavor-isolation-guard.ps1 S0313 Phase 02 Add flavor-isolation-guard.ps1: diff-aware Rule 15 guard - blocks only new/touched main-source flavor gates (exit 1), reports legacy non-blocking via -LegacyAudit, JSON+human output, temp/flavor-guard/report.json artifact [branch: DEBUG-v010]
2026-05-31 02:42:40 scripts/guard.tests/fixtures/clean_sample.kt.txt S0313 Phase 03 Add clean_sample.kt.txt fixture: main-source Kotlin with zero forbidden flavor gates (uses injected delegate) [branch: DEBUG-v010]
2026-05-31 02:42:41 scripts/guard.tests/fixtures/new_violation.kt.txt S0313 Phase 03 Add new_violation.kt.txt fixture: one BuildConfig.IS_NO_LEGAL_FLAVOR gate to prove the blocking path [branch: DEBUG-v010]
2026-05-31 02:42:41 scripts/guard.tests/fixtures/legacy_only.kt.txt S0313 Phase 03 Add legacy_only.kt.txt fixture: one BuildConfig.SUPPORT_VR_PLAYER gate for explicit-vs-LegacyAudit assertions [branch: DEBUG-v010]
2026-05-31 02:42:41 scripts/guard.tests/Run-Tests.ps1 S0313 Phase 03 Add Run-Tests.ps1 fixture self-test: drives the guard via -ScanFile seam, asserts blocking flag + exit code per fixture (4 cases), dirty-tree-safe and hermetic [branch: DEBUG-v010]
2026-05-31 02:42:55 scripts/guard.tests/fixtures/clean_sample.kt.txt S0313 Phase 03 Add clean_sample.kt.txt fixture: main-source Kotlin with zero forbidden flavor gates (uses injected delegate) [branch: DEBUG-v010]
2026-05-31 02:42:56 scripts/guard.tests/fixtures/new_violation.kt.txt S0313 Phase 03 Add new_violation.kt.txt fixture: one BuildConfig.IS_NO_LEGAL_FLAVOR gate to prove the blocking path [branch: DEBUG-v010]
2026-05-31 02:42:56 scripts/guard.tests/fixtures/legacy_only.kt.txt S0313 Phase 03 Add legacy_only.kt.txt fixture: one BuildConfig.SUPPORT_VR_PLAYER gate for explicit-vs-LegacyAudit assertions [branch: DEBUG-v010]
2026-05-31 02:42:56 scripts/guard.tests/Run-Tests.ps1 S0313 Phase 03 Add Run-Tests.ps1 fixture self-test: drives the guard via -ScanFile seam, asserts blocking flag + exit code per fixture (4 cases), dirty-tree-safe and hermetic [branch: DEBUG-v010]
2026-05-31 02:48:44 scripts/builders/build-failure-digest.ps1 spec-dev S0312: build failure digest one-shot command (JSON+human, exit 0/10/20/2) [branch: DEBUG-v010]
2026-05-31 02:48:44 scripts/builders/build-failure-digest.contract.ps1 spec-dev S0312: digest contract + parser dot-source helper [branch: DEBUG-v010]
2026-05-31 02:48:44 scripts/builders/build-failure-digest.SCHEMA.md spec-dev S0312: digest JSON schema reference [branch: DEBUG-v010]
2026-05-31 02:48:44 a.ps1 spec-dev S0312: add bfd alias for build failure digest [branch: DEBUG-v010]
2026-05-31 02:48:44 scripts/builders/README.md spec-dev S0312: document bfd + digest schema [branch: DEBUG-v010]
2026-05-31 02:48:44 scripts/README.md spec-dev S0312: add bfd to alias block [branch: DEBUG-v010]
2026-05-31 02:48:44 scripts/guard/flavor-isolation-guard.ps1 spec-dev S0313: diff-aware flavor isolation guard (blocks new/touched main-source flavor gates; exit 0/1/2/3) [branch: DEBUG-v010]
2026-05-31 02:48:45 scripts/guard/FlavorTokens.ps1 spec-dev S0313: forbidden flavor token patterns [branch: DEBUG-v010]
2026-05-31 02:48:45 scripts/guard/ViolationRecord.ps1 spec-dev S0313: violation record contract [branch: DEBUG-v010]
2026-05-31 02:48:45 scripts/guard/ChangeSource.ps1 spec-dev S0313: git-diff / -Path change source [branch: DEBUG-v010]
2026-05-31 02:48:45 scripts/guard/Classifier.ps1 spec-dev S0313: new-vs-legacy violation classifier [branch: DEBUG-v010]
2026-05-31 02:48:45 scripts/guard.tests/Run-Tests.ps1 spec-dev S0313: fixture self-test runner [branch: DEBUG-v010]
2026-05-31 02:48:45 scripts/guard.tests/fixtures spec-dev S0313: self-test fixtures (clean, new_violation, legacy_only .kt.txt) [branch: DEBUG-v010]
2026-05-31 02:48:45 scripts/guard/README.md spec-dev S0313: guard usage + contract doc [branch: DEBUG-v010]
2026-05-31 02:58:28 PLAN/S0317_embedded-calculator.md spec Add strategic spec S0317 for embedded calculator [branch: DEBUG-v010]
2026-05-31 02:59:52 PLAN/S0316_embedded-mini-game.md spec Add strategic spec S0316 for embedded mini-game [branch: DEBUG-v010]
2026-05-31 03:05:59 PLAN/spec-catalog.jsonl spec catalog Register S0318 playback pro features group strategic spec [branch: DEBUG-v010]
2026-05-31 03:07:04 dev/CATALOG/scripts/scan.ps1 spec-dev S0314: harden Test-HasTests for flavor roots; add Get-ConstructorDeps + constructorDeps append-only field [branch: DEBUG-v010]
2026-05-31 03:07:04 dev/CATALOG/scripts/query.ps1 spec-dev S0314: add -DependsOn dependency filter [branch: DEBUG-v010]
2026-05-31 03:07:04 dev/CATALOG/README.md spec-dev S0314: document constructorDeps + hardened hasTests + -DependsOn [branch: DEBUG-v010]
2026-05-31 03:07:49 PLAN/S0318_playback-pro-features-group.md strategic spec Add S0318 playback pro features group strategic spec [branch: DEBUG-v010]
2026-05-31 03:09:14 PLAN/S0318_playback-other-functionality-group.md strategic spec Rename S0318 strategic spec to other-functionality group slug [branch: DEBUG-v010]
2026-05-31 03:09:14 PLAN/spec-catalog.jsonl spec catalog Update S0318 spec slug to other-functionality group [branch: DEBUG-v010]
2026-05-31 03:09:57 PLAN/S0318_playback-other-functionality-group.md spec-update Refine S0318 title to Other functionality group [branch: DEBUG-v010]
2026-05-31 03:09:57 PLAN/spec-catalog.jsonl spec catalog Touch S0318 after spec refinement [branch: DEBUG-v010]
2026-05-31 03:10:18 PLAN/S0318_playback-other-functionality-group.md spec-update Remove stale pro wording from S0318 [branch: DEBUG-v010]
2026-05-31 03:15:54 scripts/doc-drift/check-rule-prompt-drift.ps1 spec-dev S0315: rule/prompt executable drift audit entrypoint (6 mismatch kinds; exit 0/1/2) [branch: DEBUG-v010]
2026-05-31 03:15:54 scripts/doc-drift/RulePromptRecord.ps1 spec-dev S0315: executable-mismatch record contract (closed 6-kind taxonomy) [branch: DEBUG-v010]
2026-05-31 03:15:54 scripts/doc-drift/RulePromptSources.ps1 spec-dev S0315: manifest-driven source set + on-disk script inventory [branch: DEBUG-v010]
2026-05-31 03:15:54 scripts/doc-drift/RulePromptDetectors.ps1 spec-dev S0315: five executable-mismatch detectors [branch: DEBUG-v010]
2026-05-31 03:15:54 scripts/doc-drift/RulePromptOutput.ps1 spec-dev S0315: record stream + JSON formatter [branch: DEBUG-v010]
2026-05-31 03:15:54 scripts/doc-drift/sources.psd1 spec-dev S0315: canonical-source manifest (data-declared audited surfaces) [branch: DEBUG-v010]
2026-05-31 03:15:54 scripts/doc-drift/RULE_PROMPT_DRIFT.md spec-dev S0315: audit categories + grammar + reuse boundary doc [branch: DEBUG-v010]
2026-05-31 03:15:54 scripts/doc-drift/README.md spec-dev S0315: link rule/prompt drift audit alongside S0271 doc-vs-gradle checker [branch: DEBUG-v010]
2026-05-31 03:19:11 PLAN/S0317_embedded-calculator.md spec-update Refine S0317 calculator settings group and non-engineering scope [branch: DEBUG-v010]
2026-05-31 03:22:07 PLAN/S0316_embedded-mini-game.md spec-update Refine S0316 settings placement and KnC game rules [branch: DEBUG-v010]
2026-05-31 03:26:08 PLAN/S0319_main-window-dropdown-menu-button.md spec Add strategic spec S0319 for main window dropdown menu button [branch: DEBUG-v010]
2026-05-31 03:31:43 PLAN/S0319_main-window-dropdown-menu-button.md S0319 mark S0319 approved for implementation [branch: DEBUG-v010]
2026-05-31 03:31:43 app_v2/src/main/res/layout/activity_main.xml main dropdown menu button add portrait main dropdown menu button placeholder [branch: DEBUG-v010]
2026-05-31 03:31:43 app_v2/src/main/res/layout-land/activity_main.xml main dropdown menu button add landscape main dropdown menu button placeholder [branch: DEBUG-v010]
2026-05-31 03:31:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt MainActivity wire main dropdown menu visibility and popup placeholder [branch: DEBUG-v010]
2026-05-31 03:34:24 PLAN/S0316_embedded-mini-game.md spec-update Refine S0316 main dropdown menu launch surface [branch: DEBUG-v010]
2026-05-31 03:34:30 PLAN/S0317_embedded-calculator.md spec-update Refine S0317 main dropdown menu visibility [branch: DEBUG-v010]
2026-05-31 03:35:00 PLAN/S0319_main-window-dropdown-menu-button.md S0319 mark S0319 awaiting user test [branch: DEBUG-v010]
2026-05-31 03:35:00 app_v2/build.gradle.kts debug version record debug build auto-version bump [branch: DEBUG-v010]
2026-05-31 03:36:34 app_v2/src/main/res/layout/activity_main.xml main dropdown menu container hide portrait main dropdown spacer with button [branch: DEBUG-v010]
2026-05-31 03:36:34 app_v2/src/main/res/layout-land/activity_main.xml main dropdown menu container hide landscape main dropdown spacer with button [branch: DEBUG-v010]
2026-05-31 03:36:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt MainActivity sync main dropdown container visibility [branch: DEBUG-v010]
2026-05-31 03:39:20 app_v2/build.gradle.kts debug version record final debug build auto-version bump [branch: DEBUG-v010]
2026-05-31 03:45:33 PLAN/S0316_embedded-mini-game.md spec-update Rewrite S0316 from Kryvavitsa game design docs [branch: DEBUG-v010]
2026-05-31 03:45:41 PLAN/S0317_embedded-calculator.md spec-update Refine S0317 dependencies and blockers [branch: DEBUG-v010]
2026-05-31 11:57:35 PLAN/S0317_embedded-calculator.md spec-update Resolve S0317 owner decision package [branch: DEBUG-v010]
2026-05-31 11:57:50 PLAN/S0317_embedded-calculator.md spec-update Clear S0317 approval gate marker [branch: DEBUG-v010]
2026-05-31 11:59:20 PLAN/S0316_embedded-mini-game.md spec-update Approve S0316 owner decision package [branch: DEBUG-v010]
2026-05-31 12:01:59 PLAN/S0318_playback-other-functionality-group/INDEX.md spec-tech Create tactical plan for S0318 [branch: DEBUG-v010]
2026-05-31 12:01:59 PLAN/S0318_playback-other-functionality-group/PHASE_01__strings.md spec-tech Phase 01: strings [branch: DEBUG-v010]
2026-05-31 12:01:59 PLAN/S0318_playback-other-functionality-group/PHASE_02__regroup-layout.md spec-tech Phase 02: regroup-layout [branch: DEBUG-v010]
2026-05-31 12:01:59 PLAN/S0318_playback-other-functionality-group/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v010]
2026-05-31 12:01:59 PLAN/S0318_playback-other-functionality-group.md spec-tech Status -> Tactical [branch: DEBUG-v010]
2026-05-31 12:03:17 PLAN/S0316_embedded-mini-game.md spec-tech Promote S0316 to Tactical [branch: DEBUG-v010]
2026-05-31 12:03:17 PLAN/S0316_embedded-mini-game/INDEX.md spec-tech Create S0316 tactical index [branch: DEBUG-v010]
2026-05-31 12:03:17 PLAN/S0316_embedded-mini-game/PHASE_01__domain-engine.md spec-tech Create S0316 domain engine phase [branch: DEBUG-v010]
2026-05-31 12:03:17 PLAN/S0316_embedded-mini-game/PHASE_02__local-state-settings-model.md spec-tech Create S0316 local state phase [branch: DEBUG-v010]
2026-05-31 12:03:18 PLAN/S0316_embedded-mini-game/PHASE_03__resources-strings-layouts.md spec-tech Create S0316 resources phase [branch: DEBUG-v010]
2026-05-31 12:03:18 PLAN/S0316_embedded-mini-game/PHASE_04__game-screen.md spec-tech Create S0316 game screen phase [branch: DEBUG-v010]
2026-05-31 12:03:18 PLAN/S0316_embedded-mini-game/PHASE_05__main-menu-settings-entry.md spec-tech Create S0316 main menu settings phase [branch: DEBUG-v010]
2026-05-31 12:03:18 PLAN/S0316_embedded-mini-game/PHASE_06__launcher-widget.md spec-tech Create S0316 widget phase [branch: DEBUG-v010]
2026-05-31 12:03:19 PLAN/S0316_embedded-mini-game/PHASE_07__validation-docs-catalog.md spec-tech Create S0316 validation docs phase [branch: DEBUG-v010]
2026-05-31 12:03:46 PLAN/S0316_embedded-mini-game.md spec-dev Move S0316 to In Progress for implementation [branch: DEBUG-v010]
2026-05-31 12:03:52 app_v2/src/main/res/values/strings.xml spec-dev S0318 P01: add settings_category_other_features (EN) [branch: DEBUG-v010]
2026-05-31 12:03:52 app_v2/src/main/res/values-ru/strings.xml spec-dev S0318 P01: add settings_category_other_features (RU) [branch: DEBUG-v010]
2026-05-31 12:03:53 app_v2/src/main/res/values-uk/strings.xml spec-dev S0318 P01: add settings_category_other_features (UK) [branch: DEBUG-v010]
2026-05-31 12:06:27 PLAN/S0317_embedded-calculator.md spec-tech Promote S0317 to Tactical [branch: DEBUG-v010]
2026-05-31 12:06:27 PLAN/S0317_embedded-calculator/INDEX.md spec-tech Create S0317 tactical index [branch: DEBUG-v010]
2026-05-31 12:06:28 PLAN/S0317_embedded-calculator/PHASE_01__calculator-feature.md spec-tech Create S0317 calculator feature phase [branch: DEBUG-v010]
2026-05-31 12:06:28 PLAN/S0317_embedded-calculator/PHASE_02__docs-catalog-cleanup.md spec-tech Create S0317 cleanup phase [branch: DEBUG-v010]
2026-05-31 12:07:16 PLAN/S0317_embedded-calculator/INDEX.md spec-dev Start S0317 phase 01 [branch: DEBUG-v010]
2026-05-31 12:07:16 PLAN/S0317_embedded-calculator/PHASE_01__calculator-feature.md spec-dev Complete S0317 step 01.1 backups [branch: DEBUG-v010]
2026-05-31 12:08:02 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt S0317 Add calculator setting model flag [branch: DEBUG-v010]
2026-05-31 12:09:07 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt S0317 Persist calculator setting [branch: DEBUG-v010]
2026-05-31 12:09:17 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameModels.kt S0316-phase-01 Create game domain models [branch: DEBUG-v010]
2026-05-31 12:09:21 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0318 P02: move camera-capture + black-screen into Other features group (portrait) [branch: DEBUG-v010]
2026-05-31 12:09:21 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0318 P02: move camera-capture + black-screen into Other features group (landscape) [branch: DEBUG-v010]
2026-05-31 12:09:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0318 P02: register Other features collapsible section [branch: DEBUG-v010]
2026-05-31 12:10:10 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameScoring.kt S0316-phase-01 Create game scoring rules [branch: DEBUG-v010]
2026-05-31 12:10:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameRulesEngine.kt S0316-phase-01 Create game rules engine [branch: DEBUG-v010]
2026-05-31 12:11:50 app_v2/src/main/res/values/strings.xml S0317 Add calculator English strings [branch: DEBUG-v010]
2026-05-31 12:11:51 app_v2/src/main/res/values-ru/strings.xml S0317 Add calculator Russian strings [branch: DEBUG-v010]
2026-05-31 12:11:53 app_v2/src/main/res/values-uk/strings.xml S0317 Add calculator Ukrainian strings [branch: DEBUG-v010]
2026-05-31 12:11:55 app_v2/src/main/res/drawable/ic_calculator.xml S0317 Add calculator icon [branch: DEBUG-v010]
2026-05-31 12:11:56 app_v2/src/main/res/drawable/ic_widget_calculator.xml S0317 Add calculator widget icon [branch: DEBUG-v010]
2026-05-31 12:11:59 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameBoardGenerator.kt S0316-phase-01 Create game board generator [branch: DEBUG-v010]
2026-05-31 12:13:09 app_v2/src/main/res/layout/fragment_settings_general.xml S0317 Add calculator settings row portrait [branch: DEBUG-v010]
2026-05-31 12:13:10 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0317 Add calculator settings row landscape [branch: DEBUG-v010]
2026-05-31 12:13:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt S0317 Add calculator settings section state [branch: DEBUG-v010]
2026-05-31 12:13:51 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameRulesEngineTest.kt S0316-phase-01 Add game rules engine tests [branch: DEBUG-v010]
2026-05-31 12:13:51 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameBoardGeneratorTest.kt S0316-phase-01 Add game board generator tests [branch: DEBUG-v010]
2026-05-31 12:14:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt S0317 Wire calculator settings toggle [branch: DEBUG-v010]
2026-05-31 12:14:14 PLAN/S0316_embedded-mini-game/PHASE_01__domain-engine.md spec-dev Mark S0316 phase 01 complete [branch: DEBUG-v010]
2026-05-31 12:14:14 PLAN/S0316_embedded-mini-game/INDEX.md spec-dev Update S0316 phase 01 status [branch: DEBUG-v010]
2026-05-31 12:14:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt S0317 Observe calculator settings toggle [branch: DEBUG-v010]
2026-05-31 12:14:48 PLAN/S0316_embedded-mini-game/PHASE_02__local-state-settings-model.md spec-dev Add S0316 phase 02 DI scope file [branch: DEBUG-v010]
2026-05-31 12:17:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev Insert S0318 debug verification tag at playback section setup [branch: DEBUG-v010]
2026-05-31 12:17:08 PLAN/S0318_playback-other-functionality-group.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v010]
2026-05-31 12:20:22 app_v2/src/main/java/com/sza/fastmediasorter/data/game/GameStateRepositoryImpl.kt S0317-build-blocker Fix game state snapshot null helper blocking app_v2 compile [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt S0316-phase-02 Add embedded game settings flag [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/SettingsRepository.kt S0316-phase-02 Expose embedded game setting update [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt S0316-phase-02 Persist embedded game setting [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt S0316-phase-02 Add embedded game setting updater [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt S0316-phase-02 Include embedded game in backup settings [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt S0316-phase-02 Map embedded game backup settings [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt S0316-phase-02 Export embedded game setting [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt S0316-phase-02 Import embedded game setting [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/core/di/RepositoryModule.kt S0316-phase-02 Bind game state repository [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameStateSnapshot.kt S0316-phase-02 Create game state snapshot [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameStateRepository.kt S0316-phase-02 Create game state repository contract [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/data/game/GameStateRepositoryImpl.kt S0316-phase-02 Create DataStore game state repository [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/test/java/com/sza/fastmediasorter/data/game/GameStateRepositoryImplTest.kt S0316-phase-02 Add game state repository tests [branch: DEBUG-v010]
2026-05-31 12:21:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameBoardGenerator.kt S0316-phase-02 Make game board generator injectable [branch: DEBUG-v010]
2026-05-31 12:21:22 PLAN/S0316_embedded-mini-game/PHASE_02__local-state-settings-model.md spec-dev Mark S0316 phase 02 complete [branch: DEBUG-v010]
2026-05-31 12:21:22 PLAN/S0316_embedded-mini-game/INDEX.md spec-dev Update S0316 phase 02 status [branch: DEBUG-v010]
2026-05-31 12:22:55 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeSettingsRepository.kt S0317-build-blocker Implement embedded game toggle in fake settings repository [branch: DEBUG-v010]
2026-05-31 12:24:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt S0317 Add calculator engine [branch: DEBUG-v010]
2026-05-31 12:25:04 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt S0317 Add calculator engine unit tests [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/values/strings.xml S0316 Phase 03 Add English embedded game strings [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/values-ru/strings.xml S0316 Phase 03 Add Russian embedded game strings [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/values-uk/strings.xml S0316 Phase 03 Add Ukrainian embedded game strings [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/layout/activity_game.xml S0316 Phase 03 Add portrait embedded game layout [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/layout-land/activity_game.xml S0316 Phase 03 Add landscape embedded game layout [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/layout/widget_game_launch.xml S0316 Phase 03 Add embedded game launcher widget layout [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/xml/widget_game_launch_info.xml S0316 Phase 03 Add embedded game widget provider metadata [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/drawable/ic_game_kryvavitsa.xml S0316 Phase 03 Add embedded game launcher icon drawable [branch: DEBUG-v010]
2026-05-31 12:26:15 app_v2/src/main/res/drawable/widget_preview_game_launch.xml S0316 Phase 03 Add embedded game widget preview drawable [branch: DEBUG-v010]
2026-05-31 12:26:49 PLAN/S0316_embedded-mini-game/PHASE_03__resources-strings-layouts.md S0316 Phase 03 Mark resources phase complete after validation [branch: DEBUG-v010]
2026-05-31 12:26:49 PLAN/S0316_embedded-mini-game/INDEX.md S0316 Phase 03 Mark Phase 03 complete and align tactical status [branch: DEBUG-v010]
2026-05-31 12:28:28 app_v2/src/main/res/values/strings.xml S0316 Phase 04 Add game board accessibility strings [branch: DEBUG-v010]
2026-05-31 12:28:28 app_v2/src/main/res/values-ru/strings.xml S0316 Phase 04 Add Russian game board accessibility strings [branch: DEBUG-v010]
2026-05-31 12:28:28 app_v2/src/main/res/values-uk/strings.xml S0316 Phase 04 Add Ukrainian game board accessibility strings [branch: DEBUG-v010]
2026-05-31 12:30:46 app_v2/src/main/res/values/strings.xml S0316 Phase 04 Add next-level game action string [branch: DEBUG-v010]
2026-05-31 12:30:46 app_v2/src/main/res/values-ru/strings.xml S0316 Phase 04 Add Russian next-level game action string [branch: DEBUG-v010]
2026-05-31 12:30:46 app_v2/src/main/res/values-uk/strings.xml S0316 Phase 04 Add Ukrainian next-level game action string [branch: DEBUG-v010]
2026-05-31 12:31:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt S0317 Add calculator input manager [branch: DEBUG-v010]
2026-05-31 12:32:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/CalculatorActivity.kt S0317 Add calculator activity [branch: DEBUG-v010]
2026-05-31 12:33:06 app_v2/src/main/res/layout/activity_calculator.xml S0317 Add calculator portrait layout [branch: DEBUG-v010]
2026-05-31 12:33:06 app_v2/src/main/res/layout-land/activity_calculator.xml S0317 Add calculator landscape layout [branch: DEBUG-v010]
2026-05-31 12:33:07 app_v2/src/main/AndroidManifest.xml S0317 Declare calculator activity [branch: DEBUG-v010]
2026-05-31 12:33:08 app_v2/src/main/res/values/strings.xml S0317 Add calculator error string [branch: DEBUG-v010]
2026-05-31 12:33:09 app_v2/src/main/res/values-ru/strings.xml S0317 Add calculator Russian error string [branch: DEBUG-v010]
2026-05-31 12:33:10 app_v2/src/main/res/values-uk/strings.xml S0317 Add calculator Ukrainian error string [branch: DEBUG-v010]
2026-05-31 12:34:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt S0317 Add calculator main dropdown action [branch: DEBUG-v010]
2026-05-31 12:35:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameActivity.kt S0316 Phase 04 Add thin embedded game activity [branch: DEBUG-v010]
2026-05-31 12:35:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt S0316 Phase 04 Add embedded game ViewModel with movement persistence [branch: DEBUG-v010]
2026-05-31 12:35:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameUiState.kt S0316 Phase 04 Add embedded game UI state model [branch: DEBUG-v010]
2026-05-31 12:35:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameBoardView.kt S0316 Phase 04 Add custom game board view [branch: DEBUG-v010]
2026-05-31 12:35:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/helpers/GameInputManager.kt S0316 Phase 04 Add embedded game input helper [branch: DEBUG-v010]
2026-05-31 12:35:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/helpers/GameBoardRenderMapper.kt S0316 Phase 04 Add embedded game render mapper [branch: DEBUG-v010]
2026-05-31 12:35:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/helpers/GameScalingManager.kt S0316 Phase 04 Add embedded game scaling helper [branch: DEBUG-v010]
2026-05-31 12:35:42 app_v2/src/main/AndroidManifest.xml S0316 Phase 04 Register embedded game activity [branch: DEBUG-v010]
2026-05-31 12:35:42 app_v2/src/test/java/com/sza/fastmediasorter/ui/game/GameViewModelTest.kt S0316 Phase 04 Add embedded game ViewModel tests [branch: DEBUG-v010]
2026-05-31 12:36:15 PLAN/S0316_embedded-mini-game/PHASE_04__game-screen.md S0316 Phase 04 Mark game screen phase complete with external Gradle blocker [branch: DEBUG-v010]
2026-05-31 12:36:15 PLAN/S0316_embedded-mini-game/INDEX.md S0316 Phase 04 Mark Phase 04 complete [branch: DEBUG-v010]
2026-05-31 12:37:11 app_v2/src/main/java/com/sza/fastmediasorter/widget/CalculatorWidgetProvider.kt S0317 Add calculator widget provider [branch: DEBUG-v010]
2026-05-31 12:37:55 app_v2/src/main/res/layout/widget_calculator.xml S0317 Add calculator widget layout [branch: DEBUG-v010]
2026-05-31 12:37:55 app_v2/src/main/res/xml/widget_calculator_info.xml S0317 Add calculator widget metadata [branch: DEBUG-v010]
2026-05-31 12:37:56 app_v2/src/main/AndroidManifest.xml S0317 Declare calculator widget [branch: DEBUG-v010]
2026-05-31 12:40:45 app_v2/src/main/res/layout/activity_calculator.xml S0317 Add calculator percent button portrait [branch: DEBUG-v010]
2026-05-31 12:40:45 app_v2/src/main/res/layout-land/activity_calculator.xml S0317 Add calculator percent button landscape [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/res/layout/fragment_settings_general.xml S0316 Phase 05 Add embedded game Settings toggle [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0316 Phase 05 Add landscape embedded game Settings toggle [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt S0316 Phase 05 Add Settings highlight extra for game toggle [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt S0316 Phase 05 Scroll and focus embedded game Settings toggle when requested [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt S0316 Phase 05 Wire embedded game Settings toggle changes [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt S0316 Phase 05 Observe embedded game Settings toggle state [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/java/com/sza/fastmediasorter/core/game/GameLaunchIntents.kt S0316 Phase 05 Add embedded game launch intents [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainMiniGameMenuManager.kt S0316 Phase 05 Add main dropdown mini-game manager [branch: DEBUG-v010]
2026-05-31 12:40:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt S0316 Phase 05 Delegate embedded game main dropdown entry [branch: DEBUG-v010]
2026-05-31 12:41:25 PLAN/S0316_embedded-mini-game/PHASE_05__main-menu-settings-entry.md S0316 Phase 05 Mark Settings and main menu phase complete [branch: DEBUG-v010]
2026-05-31 12:41:25 PLAN/S0316_embedded-mini-game/INDEX.md S0316 Phase 05 Mark Phase 05 complete [branch: DEBUG-v010]
2026-05-31 12:42:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt S0317-build-fix Compose calculator and mini game menu handlers [branch: DEBUG-v010]
2026-05-31 12:44:15 app_v2/src/main/java/com/sza/fastmediasorter/widget/GameLaunchWidgetProvider.kt S0316 Phase 06 Add embedded game launcher widget provider [branch: DEBUG-v010]
2026-05-31 12:44:15 app_v2/src/main/AndroidManifest.xml S0316 Phase 06 Register embedded game launcher widget receiver [branch: DEBUG-v010]
2026-05-31 12:44:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt S0316 Phase 06 Refresh embedded game widget after toggle changes [branch: DEBUG-v010]
2026-05-31 12:44:38 PLAN/S0316_embedded-mini-game/PHASE_06__launcher-widget.md S0316 Phase 06 Mark launcher widget phase complete [branch: DEBUG-v010]
2026-05-31 12:44:38 PLAN/S0316_embedded-mini-game/INDEX.md S0316 Phase 06 Mark Phase 06 complete [branch: DEBUG-v010]
2026-05-31 12:45:31 docs/FEATURES.md S0316 Phase 07 Document embedded mini-game feature [branch: DEBUG-v010]
2026-05-31 12:45:31 docs/FEATURES_RU.md S0316 Phase 07 Document embedded mini-game feature in Russian [branch: DEBUG-v010]
2026-05-31 12:45:31 docs/FEATURES_UK.md S0316 Phase 07 Document embedded mini-game feature in Ukrainian [branch: DEBUG-v010]
2026-05-31 12:47:44 docs/FEATURES.md S0317 Document embedded calculator feature in English feature catalog. [branch: DEBUG-v010]
2026-05-31 12:47:45 docs/FEATURES_RU.md S0317 Document embedded calculator feature in Russian feature catalog. [branch: DEBUG-v010]
2026-05-31 12:47:45 docs/FEATURES_UK.md S0317 Document embedded calculator feature in Ukrainian feature catalog. [branch: DEBUG-v010]
2026-05-31 12:47:45 PLAN/S0317_embedded-calculator/INDEX.md S0317 Start S0317 docs and catalog cleanup phase. [branch: DEBUG-v010]
2026-05-31 12:47:46 PLAN/S0317_embedded-calculator/PHASE_02__docs-catalog-cleanup.md S0317 Start S0317 docs and catalog cleanup phase step. [branch: DEBUG-v010]
2026-05-31 12:48:22 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameBoardGeneratorTest.kt S0316 Phase 07 Fix unreachable-board test fixture [branch: DEBUG-v010]
2026-05-31 12:48:22 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameRulesEngineTest.kt S0316 Phase 07 Fix enemy-order movement test fixture [branch: DEBUG-v010]
2026-05-31 12:48:27 PLAN/S0317_embedded-calculator/PHASE_02__docs-catalog-cleanup.md S0317 Mark S0317 feature documentation step complete. [branch: DEBUG-v010]
2026-05-31 12:48:27 dev/FUNCTIONALITY.log S0317 Record opt-in embedded calculator functionality. [branch: DEBUG-v010]
2026-05-31 12:48:27 dev/CATALOG/app_v2.jsonl S0317 Refresh app_v2 catalog for embedded calculator classes. [branch: DEBUG-v010]
2026-05-31 12:48:28 dev/CATALOG/app_v2.md S0317 Refresh app_v2 catalog report for embedded calculator classes. [branch: DEBUG-v010]
2026-05-31 12:49:37 PLAN/S0316_embedded-mini-game.md S0316 Phase 07 Record implementation completion and validation notes [branch: DEBUG-v010]
2026-05-31 12:49:37 PLAN/S0316_embedded-mini-game/INDEX.md S0316 Phase 07 Mark validation phase complete [branch: DEBUG-v010]
2026-05-31 12:49:37 PLAN/S0316_embedded-mini-game/PHASE_07__validation-docs-catalog.md S0316 Phase 07 Record final validation passes [branch: DEBUG-v010]
2026-05-31 12:49:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt S0317-BNT Add temporary S0317 debug probe for calculator main menu launch. [branch: DEBUG-v010]
2026-05-31 12:50:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/CalculatorActivity.kt S0317-BNT Add temporary S0317 debug probes for widget launch and disabled fallback. [branch: DEBUG-v010]
2026-05-31 12:51:19 PLAN/S0317_embedded-calculator.md S0317 Mark S0317 as implemented and awaiting device verification. [branch: DEBUG-v010]
2026-05-31 12:54:11 PLAN/S0317_embedded-calculator/INDEX.md S0317 Close S0317 tactical index as BlockNeedUserTest. [branch: DEBUG-v010]
2026-05-31 12:54:11 PLAN/S0317_embedded-calculator/PHASE_02__docs-catalog-cleanup.md S0317 Close S0317 docs catalog cleanup phase with final validation results. [branch: DEBUG-v010]
2026-05-31 13:12:27 docs/FEATURES.md S0316 check/fix Align embedded mini-game flavor label with implemented scope [branch: DEBUG-v010]
2026-05-31 13:12:27 docs/FEATURES_RU.md S0316 check/fix Align embedded mini-game Russian flavor label with implemented scope [branch: DEBUG-v010]
2026-05-31 13:12:27 docs/FEATURES_UK.md S0316 check/fix Align embedded mini-game Ukrainian flavor label with implemented scope [branch: DEBUG-v010]
2026-05-31 13:14:13 PLAN/S0316_embedded-mini-game.md spec-check Audit S0316 -> Verified; PASS/WARN/FAIL 18/0/0 [branch: DEBUG-v010]
2026-05-31 13:15:06 PLAN/S0318_playback-other-functionality-group.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 13/0/0; S0318 D-tag exercised [branch: DEBUG-v010]
2026-05-31 13:16:44 PLAN/S0318_playback-other-functionality-group.md spec-check Audit S0318 -> Verified; PASS/WARN/FAIL 14/0/0 [branch: DEBUG-v010]
2026-05-31 13:16:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-check Remove S0318 debug verification tag (Verified transition) [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameScoring.kt S0316 check/fix Align game scoring constants with S0316 rules [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameModels.kt S0316 check/fix Add shadow-crushed game event [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameRulesEngine.kt S0316 check/fix Align wall push enemy collision and restart rules with S0316 [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt S0316 check/fix Add game-over level restart flow [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameActivity.kt S0316 check/fix Route game-over primary action to restart level [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/main/res/values/strings.xml S0316 check/fix Add restart-level game string [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/main/res/values-ru/strings.xml S0316 check/fix Add Russian restart-level game string [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/main/res/values-uk/strings.xml S0316 check/fix Add Ukrainian restart-level game string [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameRulesEngineTest.kt S0316 check/fix Cover S0316 scoring wall push and enemy collision rules [branch: DEBUG-v010]
2026-05-31 13:18:16 app_v2/src/test/java/com/sza/fastmediasorter/ui/game/GameViewModelTest.kt S0316 check/fix Cover game-over restart flow [branch: DEBUG-v010]
2026-05-31 13:19:56 PLAN/S0316_embedded-mini-game.md spec-check Refresh S0316 audit after gameplay rule fixes; PASS/WARN/FAIL 23/0/0 [branch: DEBUG-v010]
2026-05-31 13:27:35 PLAN/S0316_embedded-mini-game.md spec-test-device Verify S0316 settings portrait landscape and main menu launch on emulator-5554 [branch: DEBUG-v010]
2026-05-31 20:55:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt calculator-engine Add operation history and repeated equals support [branch: DEBUG-v010]
2026-05-31 20:56:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt calculator-input Add calculator menu copy paste round actions [branch: DEBUG-v010]
2026-05-31 20:56:52 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt calculator-tests Cover operation history repeated equals and round [branch: DEBUG-v010]
2026-05-31 20:57:35 app_v2/src/main/res/layout/activity_calculator.xml calculator-layout Compact portrait calculator layout with history and menu [branch: DEBUG-v010]
2026-05-31 20:57:35 app_v2/src/main/res/layout-land/activity_calculator.xml calculator-layout-land Compact landscape calculator layout with history and menu [branch: DEBUG-v010]
2026-05-31 20:57:35 app_v2/src/main/res/values/dimens.xml calculator-resources Add calculator sizing dimensions [branch: DEBUG-v010]
2026-05-31 20:57:35 app_v2/src/main/res/values/themes.xml calculator-styles Add calculator button styles [branch: DEBUG-v010]
2026-05-31 20:57:36 app_v2/src/main/res/values/strings.xml calculator-strings Add calculator menu command strings [branch: DEBUG-v010]
2026-05-31 20:57:36 app_v2/src/main/res/values-ru/strings.xml calculator-strings-ru Add calculator menu command strings RU [branch: DEBUG-v010]
2026-05-31 20:57:37 app_v2/src/main/res/values-uk/strings.xml calculator-strings-uk Add calculator menu command strings UK [branch: DEBUG-v010]
2026-05-31 20:57:38 PLAN/S0317_embedded-calculator.md spec-update Capture calculator UI feedback requirements [branch: DEBUG-v010]
2026-05-31 20:59:15 app_v2/build.gradle.kts build-version Auto-version debug build after calculator feedback [branch: DEBUG-v010]
2026-05-31 20:59:34 PLAN/S0317_embedded-calculator/INDEX.md spec-index Record S0317 calculator feedback patch [branch: DEBUG-v010]
2026-05-31 21:00:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt calculator-engine Clear stale history when starting new calculation [branch: DEBUG-v010]
2026-05-31 21:01:35 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt calculator-tests Cover clearing history after equals [branch: DEBUG-v010]
2026-05-31 21:02:59 PLAN/spec-catalog.jsonl spec-catalog Refresh S0317 BlockNeedUserTest catalog record [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameRulesEngine.kt game-rules Make purple enemies wander randomly [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameBoardGenerator.kt game-generator Randomize board starts and remove boundary wall cells [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameUiState.kt game-ui-state Track defeat connection without pause state [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt game-viewmodel Use fresh seeds and remove pause handling [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/helpers/GameBoardRenderMapper.kt game-render-mapper Map defeat connection for board rendering [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameBoardView.kt game-board-view Draw thick border and defeat connection highlight [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameActivity.kt game-activity Add back and help actions and remove pause button [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameHelpActivity.kt game-help-activity Add game legend and rules screen [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/AndroidManifest.xml game-help-manifest Register game help activity [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/res/layout/activity_game.xml game-layout-portrait Make board larger with back help and triangle controls [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/res/layout-land/activity_game.xml game-layout-landscape Make landscape board larger with side controls [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/res/layout/activity_game_help.xml game-help-layout-portrait Add portrait game help screen [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/res/layout-land/activity_game_help.xml game-help-layout-landscape Add landscape game help screen [branch: DEBUG-v010]
2026-05-31 21:14:20 app_v2/src/main/res/layout/view_game_help_legend.xml game-help-legend Add reusable legend rows [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/ic_game_triangle_up.xml game-direction-icons Add up triangle control icon [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/ic_game_triangle_down.xml game-direction-icons Add down triangle control icon [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/ic_game_triangle_left.xml game-direction-icons Add left triangle control icon [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/ic_game_triangle_right.xml game-direction-icons Add right triangle control icon [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/bg_game_ball_player.xml game-help-colors Add player legend marker [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/bg_game_ball_kryvavitsa.xml game-help-colors Add Kryvavitsa legend marker [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/bg_game_ball_shadow.xml game-help-colors Add purple enemy legend marker [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/bg_game_ball_exit.xml game-help-colors Add exit legend marker [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/drawable/bg_game_ball_wall.xml game-help-colors Add wall legend marker [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/values/strings.xml game-strings-en Add game help and defeat strings [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/values-ru/strings.xml game-strings-ru Add game help and defeat strings RU [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/main/res/values-uk/strings.xml game-strings-uk Add game help and defeat strings UK [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameRulesEngineTest.kt game-rules-tests Cover random purple enemy movement [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameBoardGeneratorTest.kt game-generator-tests Cover no boundary wall cells [branch: DEBUG-v010]
2026-05-31 21:14:21 app_v2/src/test/java/com/sza/fastmediasorter/ui/game/GameViewModelTest.kt game-viewmodel-tests Cover fresh seed new games [branch: DEBUG-v010]
2026-05-31 21:17:21 app_v2/src/test/java/com/sza/fastmediasorter/ui/game/GameViewModelTest.kt game-viewmodel-tests Make move persistence test accept random starts [branch: DEBUG-v010]
2026-05-31 21:18:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt calculator-engine Add calculator history log and context-aware percent [branch: DEBUG-v010]
2026-05-31 21:18:08 docs/FEATURES.md features-docs-en Document mini-game rules legend screen [branch: DEBUG-v010]
2026-05-31 21:18:08 docs/FEATURES_RU.md features-docs-ru Document mini-game rules legend screen RU [branch: DEBUG-v010]
2026-05-31 21:18:08 docs/FEATURES_UK.md features-docs-uk Document mini-game rules legend screen UK [branch: DEBUG-v010]
2026-05-31 21:18:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorHistoryFileWriter.kt calculator-history-downloads Add calculator history Downloads writer [branch: DEBUG-v010]
2026-05-31 21:19:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt calculator-menu Add share result save history and clear history menu actions [branch: DEBUG-v010]
2026-05-31 21:20:30 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt calculator-tests Cover calculator history and percent behavior [branch: DEBUG-v010]
2026-05-31 21:21:13 app_v2/src/main/res/values/strings.xml calculator-strings Add calculator menu history strings [branch: DEBUG-v010]
2026-05-31 21:21:14 app_v2/src/main/res/values-ru/strings.xml calculator-strings-ru Add Russian calculator menu history strings [branch: DEBUG-v010]
2026-05-31 21:21:15 app_v2/src/main/res/values-uk/strings.xml calculator-strings-uk Add Ukrainian calculator menu history strings [branch: DEBUG-v010]
2026-05-31 21:21:15 app_v2/src/main/res/values/colors.xml calculator-style Add calculator clear button light color [branch: DEBUG-v010]
2026-05-31 21:21:16 app_v2/src/main/res/values-night/colors.xml calculator-style-night Add calculator clear button dark color [branch: DEBUG-v010]
2026-05-31 21:21:16 app_v2/src/main/res/values/themes.xml calculator-style Add calculator clear button style [branch: DEBUG-v010]
2026-05-31 21:21:17 app_v2/src/main/res/layout/activity_calculator.xml calculator-layout Apply calculator clear button style in portrait [branch: DEBUG-v010]
2026-05-31 21:21:17 app_v2/src/main/res/layout-land/activity_calculator.xml calculator-layout-land Apply calculator clear button style in landscape [branch: DEBUG-v010]
2026-05-31 21:21:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameActivity.kt game-activity Show placeholder messages for non-ready game states [branch: DEBUG-v010]
2026-05-31 21:21:39 app_v2/src/main/res/values/strings.xml game-strings-en Remove obsolete game pause strings [branch: DEBUG-v010]
2026-05-31 21:21:39 app_v2/src/main/res/values-ru/strings.xml game-strings-ru Remove obsolete game pause strings RU [branch: DEBUG-v010]
2026-05-31 21:21:39 app_v2/src/main/res/values-uk/strings.xml game-strings-uk Remove obsolete game pause strings UK [branch: DEBUG-v010]
2026-05-31 21:22:41 PLAN/S0317_embedded-calculator.md spec Document S0317 calculator history and share feedback [branch: DEBUG-v010]
2026-05-31 21:22:41 PLAN/S0317_embedded-calculator/INDEX.md spec-index Record S0317 calculator second feedback patch [branch: DEBUG-v010]
2026-05-31 21:23:33 docs/FEATURES.md features-docs Document calculator result sharing and history actions [branch: DEBUG-v010]
2026-05-31 21:23:33 docs/FEATURES_RU.md features-docs-ru Document Russian calculator result sharing and history actions [branch: DEBUG-v010]
2026-05-31 21:23:34 docs/FEATURES_UK.md features-docs-uk Document Ukrainian calculator result sharing and history actions [branch: DEBUG-v010]
2026-05-31 21:23:34 PLAN/spec-catalog.jsonl spec-catalog Refresh S0317 BlockNeedUserTest catalog record [branch: DEBUG-v010]
2026-05-31 21:25:37 app_v2/src/main/res/drawable/bg_game_ball_exit.xml game-help-colors Make exit legend marker square [branch: DEBUG-v010]
2026-05-31 21:25:37 app_v2/src/main/res/drawable/bg_game_ball_wall.xml game-help-colors Make wall legend marker square [branch: DEBUG-v010]
2026-05-31 21:35:37 PLAN/S0320_camera-ocr-translate.md spec/S0320 Add strategic spec S0320 for camera OCR translation flow [branch: DEBUG-v010]
2026-05-31 21:58:55 PLAN/S0320_camera-ocr-translate.md spec-update/S0320 Refine strategic spec S0320 owner inputs and camera OCR translation decisions [branch: DEBUG-v010]
2026-05-31 22:24:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt app_v2 settings Move Calculator + Embedded game toggles from General tab ‘Other functionality’ group into Playback tab ‘Other features’ group (portrait+landscape); delete source group; retarget calculator/game deep-links and section reset to Playback tab [branch: DEBUG-v010]
2026-05-31 22:40:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt calculator-history-panel Render scrollable calculator history panel [branch: DEBUG-v010]
2026-05-31 22:41:21 app_v2/src/main/res/layout/activity_calculator.xml calculator-layout Make portrait calculator history panel scrollable [branch: DEBUG-v010]
2026-05-31 22:41:22 app_v2/src/main/res/layout-land/activity_calculator.xml calculator-layout-land Make landscape calculator history panel scrollable [branch: DEBUG-v010]
2026-05-31 22:41:22 app_v2/src/main/res/values/dimens.xml calculator-dimens Reduce calculator history text size [branch: DEBUG-v010]
2026-05-31 22:41:37 PLAN/S0317_embedded-calculator.md spec Document scrollable calculator history panel [branch: DEBUG-v010]
2026-05-31 22:41:37 PLAN/S0317_embedded-calculator/INDEX.md spec-index Record scrollable calculator history patch [branch: DEBUG-v010]
2026-05-31 22:42:12 app_v2/src/main/res/layout/activity_calculator.xml calculator-layout Fix portrait calculator history scrollbar attribute [branch: DEBUG-v010]
2026-05-31 22:42:12 app_v2/src/main/res/layout-land/activity_calculator.xml calculator-layout-land Fix landscape calculator history scrollbar attribute [branch: DEBUG-v010]
2026-05-31 22:43:25 PLAN/spec-catalog.jsonl spec-catalog Refresh S0317 BlockNeedUserTest catalog record after scrollable history patch [branch: DEBUG-v010]
2026-05-31 22:47:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt calculator-paste-parser Parse noisy pasted calculator expressions [branch: DEBUG-v010]
2026-05-31 22:48:42 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt calculator-tests Cover noisy pasted calculator expressions [branch: DEBUG-v010]
2026-05-31 22:50:09 PLAN/S0317_embedded-calculator.md S0317-spec Document noisy paste parsing for calculator [branch: DEBUG-v010]
2026-05-31 22:50:09 PLAN/S0317_embedded-calculator/INDEX.md S0317-plan Record noisy paste parsing feedback patch [branch: DEBUG-v010]
2026-05-31 22:50:10 PLAN/spec-catalog.jsonl S0317-spec-catalog Refresh S0317 after noisy paste parsing update [branch: DEBUG-v010]
2026-05-31 22:50:44 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameModels.kt game-models Align game events and block reasons with reference implementation [branch: DEBUG-v010]
2026-05-31 22:50:44 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameBoardGenerator.kt game-generator Port reference board generation density and placement rules [branch: DEBUG-v010]
2026-05-31 22:50:44 app_v2/src/main/java/com/sza/fastmediasorter/domain/game/GameRulesEngine.kt game-rules Port reference movement blocking and enemy behavior rules [branch: DEBUG-v010]
2026-05-31 22:50:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt game-viewmodel Use reference board size and level shadow count [branch: DEBUG-v010]
2026-05-31 22:50:44 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameRulesEngineTest.kt game-rules-tests Cover reference movement and blocking rules [branch: DEBUG-v010]
2026-05-31 22:50:44 app_v2/src/test/java/com/sza/fastmediasorter/domain/game/GameBoardGeneratorTest.kt game-generator-tests Cover reference wall density and shadow count [branch: DEBUG-v010]
2026-05-31 22:50:44 app_v2/src/test/java/com/sza/fastmediasorter/ui/game/GameViewModelTest.kt game-viewmodel-tests Cover reference default board configuration [branch: DEBUG-v010]
2026-05-31 22:51:37 PLAN/spec-catalog.jsonl spec-catalog Register S0321 text editor calculator integration strategic spec [branch: DEBUG-v010]
2026-05-31 22:53:24 PLAN/S0321_text-editor-calculator-integration.md S0321 Add strategic spec for text editor calculator integration [branch: DEBUG-v010]
2026-05-31 23:02:17 PLAN/S0321_text-editor-calculator-integration.md spec-update Resolve S0321 owner gate and approve strategic spec [branch: DEBUG-v010]
2026-05-31 23:09:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt CameraOcrTranslateActivity Implement S0320 Camera OCR Translation activity base class abstract methods setupViews and observeData [branch: DEBUG-v010]
2026-05-31 23:09:33 PLAN/S0321_text-editor-calculator-integration/INDEX.md spec-tech Create S0321 tactical plan [branch: DEBUG-v010]
2026-05-31 23:09:34 PLAN/S0321_text-editor-calculator-integration/PHASE_01__calculator-result-contract.md spec-tech Create S0321 phase 01 calculator result contract [branch: DEBUG-v010]
2026-05-31 23:09:34 PLAN/S0321_text-editor-calculator-integration/PHASE_02__editor-overflow-entry.md spec-tech Create S0321 phase 02 editor overflow entry [branch: DEBUG-v010]
2026-05-31 23:09:35 PLAN/S0321_text-editor-calculator-integration/PHASE_03__player-round-trip.md spec-tech Create S0321 phase 03 player round trip [branch: DEBUG-v010]
2026-05-31 23:09:35 PLAN/S0321_text-editor-calculator-integration/PHASE_04__docs-catalog-cleanup.md spec-tech Create S0321 phase 04 docs catalog cleanup [branch: DEBUG-v010]
2026-05-31 23:09:36 PLAN/S0321_text-editor-calculator-integration.md spec-tech Status to Tactical for S0321 [branch: DEBUG-v010]
2026-05-31 23:10:08 app_v2/src/main/res/layout-land/fragment_settings_playback.xml fragment_settings_playback Add Camera OCR Translation settings layout to landscape configuration for compilation validation [branch: DEBUG-v010]
2026-05-31 23:10:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt S0321 phase 01.1 Expose calculator input parseability [branch: DEBUG-v010]
2026-05-31 23:11:22 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt S0321 phase 01.1 Cover calculator input parseability [branch: DEBUG-v010]
2026-05-31 23:12:05 PLAN/S0321_text-editor-calculator-integration/PHASE_01__calculator-result-contract.md S0321 phase 01.1 Mark calculator parseability step done [branch: DEBUG-v010]
2026-05-31 23:12:05 PLAN/S0321_text-editor-calculator-integration.md spec-dev Status to In Progress for S0321 [branch: DEBUG-v010]
2026-05-31 23:13:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt S0321 step 01.1 Expose calculator input parseability for editor integration [branch: DEBUG-v010]
2026-05-31 23:14:46 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt S0321 step 01.1 Cover calculator input parseability for editor integration [branch: DEBUG-v010]
2026-05-31 23:15:33 PLAN/S0321_text-editor-calculator-integration/PHASE_01__calculator-result-contract.md S0321 phase 01 Record calculator parseability verification [branch: DEBUG-v010]
2026-05-31 23:17:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt S0321 step 01.2 Add calculator initial input and returnable result API [branch: DEBUG-v010]
2026-05-31 23:18:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/CalculatorActivity.kt S0321 step 01.3 Return calculator result through Activity close paths [branch: DEBUG-v010]
2026-05-31 23:19:00 PLAN/S0321_text-editor-calculator-integration/PHASE_01__calculator-result-contract.md S0321 phase 01 Record calculator result contract implementation [branch: DEBUG-v010]
2026-05-31 23:25:51 app_v2/src/main/res/layout/player_text_viewer_container_content.xml S0321 step 02.1 Add text editor calculator overflow button in portrait [branch: DEBUG-v010]
2026-05-31 23:25:52 app_v2/src/main/res/layout-land/player_text_viewer_container_content.xml S0321 step 02.1 Add text editor calculator overflow button in landscape [branch: DEBUG-v010]
2026-05-31 23:25:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt S0321 step 02.2 Expose text editor overflow button through safe views [branch: DEBUG-v010]
2026-05-31 23:26:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/actions/EditorActionPanel.kt S0321 step 02.3 Extend editor action contract for calculator overflow [branch: DEBUG-v010]
2026-05-31 23:27:09 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthCoordinator.kt S0294 Implement gmsOnlyMode to bypass browser-auth state for global surfaces [branch: DEBUG-v010]
2026-05-31 23:27:09 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt S0294 Expose setGmsOnlyMode to coordinator delegation [branch: DEBUG-v010]
2026-05-31 23:27:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt S0294 Lock Google Drive client to GMS-only mode during Backup/Restore screen lifetime [branch: DEBUG-v010]
2026-05-31 23:27:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/actions/EditorActionPanelBinder.kt S0321 step 02.3 Bind calculator overflow command to editor action panel [branch: DEBUG-v010]
2026-05-31 23:28:47 PLAN/S0321_text-editor-calculator-integration/PHASE_02__editor-overflow-entry.md S0321 phase 02 Record editor overflow entry implementation [branch: DEBUG-v010]
2026-05-31 23:33:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorActionPanelCallbacks.kt S0321 step 03.1 Pass selected text into editor calculator launch [branch: DEBUG-v010]
2026-05-31 23:33:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt S0321 step 03.2 Insert returned calculator result into text editor [branch: DEBUG-v010]
2026-05-31 23:34:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorCalculatorBridge.kt S0321 step 03.3 Bridge text editor calculator Activity result [branch: DEBUG-v010]
2026-05-31 23:35:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt S0321 step 03.3 Register text editor calculator result launcher [branch: DEBUG-v010]
2026-05-31 23:36:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt S0321 step 03.3 Delegate text editor calculator launch from player viewer [branch: DEBUG-v010]
2026-05-31 23:36:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt S0321 step 03.3 Initialize text editor calculator bridge [branch: DEBUG-v010]
2026-05-31 23:37:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0321 step 03.3 No-op calculator launch for standalone text viewer [branch: DEBUG-v010]
2026-05-31 23:38:31 PLAN/S0321_text-editor-calculator-integration/PHASE_03__player-round-trip.md S0321 phase 03 Record player calculator round-trip implementation [branch: DEBUG-v010]
2026-05-31 23:48:33 docs/FEATURES.md S0321 docs Document text editor calculator round-trip in English feature inventory [branch: DEBUG-v010]
2026-05-31 23:48:33 docs/FEATURES_RU.md S0321 docs Document text editor calculator round-trip in Russian feature inventory [branch: DEBUG-v010]
2026-05-31 23:48:34 docs/FEATURES_UK.md S0321 docs Document text editor calculator round-trip in Ukrainian feature inventory [branch: DEBUG-v010]
2026-05-31 23:48:34 PLAN/S0321_text-editor-calculator-integration.md S0321 closure Mark strategic spec implemented [branch: DEBUG-v010]
2026-05-31 23:48:35 PLAN/S0321_text-editor-calculator-integration/INDEX.md S0321 closure Mark tactical plan done [branch: DEBUG-v010]
2026-05-31 23:48:36 PLAN/S0321_text-editor-calculator-integration/PHASE_01__calculator-result-contract.md S0321 closure Mark calculator result contract phase done [branch: DEBUG-v010]
2026-05-31 23:48:36 PLAN/S0321_text-editor-calculator-integration/PHASE_02__editor-overflow-entry.md S0321 closure Mark editor overflow entry phase done [branch: DEBUG-v010]
2026-05-31 23:48:37 PLAN/S0321_text-editor-calculator-integration/PHASE_03__player-round-trip.md S0321 closure Mark player round-trip phase done [branch: DEBUG-v010]
2026-05-31 23:48:37 PLAN/S0321_text-editor-calculator-integration/PHASE_04__docs-catalog-cleanup.md S0321 closure Mark docs catalog cleanup phase done [branch: DEBUG-v010]
2026-05-31 23:48:38 dev/FUNCTIONALITY.log S0321 functionality-log Record text editor calculator user-visible capability [branch: DEBUG-v010]
2026-05-31 23:49:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt S0321 spec-check fix Trim comments to keep player viewer factory within phase line budget [branch: DEBUG-v010]
2026-05-31 23:51:36 PLAN/S0321_text-editor-calculator-integration.md spec-check Audit S0321 implementation to Verified [branch: DEBUG-v010]
2026-05-31 23:51:37 PLAN/S0321_text-editor-calculator-integration/INDEX.md spec-check Record S0321 spec-check completion gate [branch: DEBUG-v010]
2026-05-31 23:51:37 PLAN/spec-catalog.jsonl spec-check Close S0321 as Verified in spec catalog [branch: DEBUG-v010]
2026-06-01 00:41:22 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthCoordinator.kt S0294 Return previous Google Drive GMS-only mode for scoped backup restore routing [branch: DEBUG-v010]
2026-06-01 00:42:36 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveRestClient.kt S0294 Expose previous Google Drive GMS-only mode for scoped callers [branch: DEBUG-v010]
2026-06-01 00:43:29 app_v2/src/main/res/values/strings.xml string/app_name Align launcher title with Android TV banner title [branch: DEBUG-v010]
2026-06-01 00:43:30 app_v2/src/main/res/values-ru/strings.xml string/app_name Align Russian launcher title with Android TV banner title [branch: DEBUG-v010]
2026-06-01 00:43:32 app_v2/src/main/res/values-uk/strings.xml string/app_name Align Ukrainian launcher title with Android TV banner title [branch: DEBUG-v010]
2026-06-01 00:43:33 app_v2/src/main/res/drawable-mdpi/tv_banner.png tv_banner Replace mdpi Android TV banner with compliant title artwork [branch: DEBUG-v010]
2026-06-01 00:43:33 app_v2/src/main/res/drawable-hdpi/tv_banner.png tv_banner Replace hdpi Android TV banner with compliant title artwork [branch: DEBUG-v010]
2026-06-01 00:43:34 app_v2/src/main/res/drawable-xhdpi/tv_banner.png tv_banner Replace xhdpi Android TV banner with compliant 320x180 title artwork [branch: DEBUG-v010]
2026-06-01 00:43:35 app_v2/src/main/res/drawable-xxhdpi/tv_banner.png tv_banner Replace xxhdpi Android TV banner with compliant title artwork [branch: DEBUG-v010]
2026-06-01 00:43:35 app_v2/src/main/res/drawable-xxxhdpi/tv_banner.png tv_banner Replace xxxhdpi Android TV banner with compliant title artwork [branch: DEBUG-v010]
2026-06-01 00:43:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt S0294 Scope Google Drive GMS-only mode to backup restore operations [branch: DEBUG-v010]
2026-06-01 00:45:20 PLAN/S0294_google-drive-browser-auth-quest3.md spec-check Refresh S0294 audit after scoped GMS-only fix [branch: DEBUG-v010]
2026-06-01 00:48:06 app_v2/src/main/res/values/strings.xml string/app_name Align launcher title with full Play listing title [branch: DEBUG-v010]
2026-06-01 00:48:07 app_v2/src/main/res/values-ru/strings.xml string/app_name Align Russian launcher title with full Play listing title [branch: DEBUG-v010]
2026-06-01 00:48:08 app_v2/src/main/res/values-uk/strings.xml string/app_name Align Ukrainian launcher title with full Play listing title [branch: DEBUG-v010]
2026-06-01 00:48:09 app_v2/src/main/res/drawable-mdpi/tv_banner.png tv_banner Update mdpi Android TV banner with full Play listing title [branch: DEBUG-v010]
2026-06-01 00:48:10 app_v2/src/main/res/drawable-hdpi/tv_banner.png tv_banner Update hdpi Android TV banner with full Play listing title [branch: DEBUG-v010]
2026-06-01 00:48:10 app_v2/src/main/res/drawable-xhdpi/tv_banner.png tv_banner Update xhdpi Android TV banner with full Play listing title [branch: DEBUG-v010]
2026-06-01 00:48:11 app_v2/src/main/res/drawable-xxhdpi/tv_banner.png tv_banner Update xxhdpi Android TV banner with full Play listing title [branch: DEBUG-v010]
2026-06-01 00:48:12 app_v2/src/main/res/drawable-xxxhdpi/tv_banner.png tv_banner Update xxxhdpi Android TV banner with full Play listing title [branch: DEBUG-v010]
2026-06-01 00:48:49 fastlane/metadata/android/en-US/title.txt fastlane title en-US Align Play metadata title with Android TV banner title [branch: DEBUG-v010]
2026-06-01 00:48:49 fastlane/metadata/android/ru-RU/title.txt fastlane title ru-RU Align Russian Play metadata title with listing source [branch: DEBUG-v010]
2026-06-01 00:48:50 fastlane/metadata/android/uk-UA/title.txt fastlane title uk-UA Align Ukrainian Play metadata title with listing source [branch: DEBUG-v010]
2026-06-01 00:49:25 store_assets/icon_512.png Play icon 512 Add canonical Play Console 512 icon asset [branch: DEBUG-v010]
2026-06-01 00:58:24 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.6010.057 [branch: DEBUG-v010]
2026-06-01 00:58:25 docs/WHATS_NEW_RU.md WHATS_NEW_RU Russian release notes for v2.60.6010.057 [branch: DEBUG-v010]
2026-06-01 00:58:25 docs/WHATS_NEW_UK.md WHATS_NEW_UK Ukrainian release notes for v2.60.6010.057 [branch: DEBUG-v010]
2026-06-01 00:58:26 README.md README README current release block for v2.60.6010.057 [branch: DEBUG-v010]
2026-06-01 00:59:04 app_v2/build.gradle.kts release version Bump release version to v2.60.6010.057 [branch: DEBUG-v010]
2026-06-01 01:12:38 scripts/release/gen_fastlane_changelog.ps1 fastlane changelog generator Fix release changelog extraction loop [branch: main]
2026-06-01 01:15:06 fastlane/metadata/android/en-US/changelogs/260601005.txt fastlane changelog en-US Generate fastlane changelog for versionCode 260601005 [branch: main]
2026-06-01 01:15:07 fastlane/metadata/android/ru-RU/changelogs/260601005.txt fastlane changelog ru-RU Generate Russian fastlane changelog for versionCode 260601005 [branch: main]
2026-06-01 01:15:08 fastlane/metadata/android/uk-UA/changelogs/260601005.txt fastlane changelog uk-UA Generate Ukrainian fastlane changelog for versionCode 260601005 [branch: main]
2026-06-01 01:51:40 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.6010.151 [branch: main]
2026-06-01 01:51:41 docs/WHATS_NEW_RU.md WHATS_NEW_RU Russian release notes for v2.60.6010.151 [branch: main]
2026-06-01 01:51:41 docs/WHATS_NEW_UK.md WHATS_NEW_UK Ukrainian release notes for v2.60.6010.151 [branch: main]
2026-06-01 01:51:42 README.md README README current release block for v2.60.6010.151 [branch: main]
2026-06-01 01:55:31 app_v2/build.gradle.kts release version Bump release version to v2.60.6010.151 [branch: main]
2026-06-01 01:55:31 fastlane/metadata/android/en-US/changelogs/260601015.txt fastlane changelog en-US Generate fastlane changelog for versionCode 260601015 [branch: main]
2026-06-01 01:55:32 fastlane/metadata/android/ru-RU/changelogs/260601015.txt fastlane changelog ru-RU Generate Russian fastlane changelog for versionCode 260601015 [branch: main]
2026-06-01 01:55:33 fastlane/metadata/android/uk-UA/changelogs/260601015.txt fastlane changelog uk-UA Generate Ukrainian fastlane changelog for versionCode 260601015 [branch: main]
2026-06-01 01:06:56 PLAN/S0320_camera-ocr-translate.md spec-check Audit S0320 -> Partial; PASS/WARN/FAIL 9/3/0 [branch: DEBUG-v011]
2026-06-01 01:06:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-check Remove stale S0320 debug tag [branch: DEBUG-v011]
2026-06-01 01:10:23 docs/FEATURES.md doc-update Add Photo OCR translation feature bullet (S0320) [branch: DEBUG-v011]
2026-06-01 01:10:23 docs/FEATURES_RU.md doc-update Add Photo OCR translation feature bullet RU (S0320) [branch: DEBUG-v011]
2026-06-01 01:10:23 docs/FEATURES_UK.md doc-update Add Photo OCR translation feature bullet UK (S0320) [branch: DEBUG-v011]
2026-06-01 01:10:23 PLAN/S0320_camera-ocr-translate.md spec-fix Annotate Last Audit (S0320) [branch: DEBUG-v011]
2026-06-01 01:18:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrStorageManager.kt CameraOcrStorageManager Extract Camera-OCR filesystem IO (temp/gallery/txt export) from Activity (S0320) [branch: DEBUG-v011]
2026-06-01 01:18:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt CameraOcrFlowManager Extract Camera-OCR-Translate orchestration + flow state from Activity (S0320) [branch: DEBUG-v011]
2026-06-01 01:18:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt CameraOcrTranslateActivity Thin out Activity to view-binding + callback rendering; delegate logic to managers (S0320) [branch: DEBUG-v011]
2026-06-01 01:19:47 PLAN/S0320_camera-ocr-translate.md spec-check Re-audit S0320 -> Verified after arch refactor; PASS/WARN/FAIL 12/0/0 [branch: DEBUG-v011]
2026-06-01 02:05:20 scripts/release/publish-play-release.py publish-play-release Add automated resumable Google Play Console AAB uploader script with retry and timeout guards [branch: DEBUG-v011]
2026-06-01 02:05:22 scripts/release/publish-play-release.ps1 publish-play-release Add PowerShell wrapper for publish-play-release.py supporting -Track and -Status flags [branch: DEBUG-v011]
2026-06-01 02:05:23 scripts/release/README.md release handbook Integrate Google Play Console automated release process into the release manual [branch: DEBUG-v011]
2026-06-01 03:28:20 PLAN/S0290_vr_test_quality_overhaul.md spec-update Refinement (claude-opus-4.6, focus: completeness, consistency) - added 1.2 moved-OOM observation from Quest 3 logs 2026-06-01 + risk row; Proposal P-1 reopen Phase 11 [branch: DEBUG-v011]
2026-06-01 03:36:47 PLAN/S0322_bugfix-vr-diagnostic-video-playback.md spec Add strategic spec S0322 (VR diagnostic 7K 180 video playback failure, research) from Quest 3 log analysis 2026-06-01 [branch: DEBUG-v011]
2026-06-01 03:39:13 scripts/utils/extract-device-logs.ps1 tooling Resolve adb from PATH or SDK locations (null-safe env vars); auto-detect installed package variant (.debug suffix) so logcat filter is not empty on debug builds. Validation: ParseFile 0 errors; live run resolves adb to SDK path and exits gracefully on absent device. Full device pull not re-confirmed - Quest 3 dropped when adb daemon cold-restarted mid-session. [branch: DEBUG-v011]
2026-06-01 03:42:40 PLAN/S0290_vr_test_quality_overhaul/PHASE_11__video-gamma-and-bitmap-pipeline.md spec-update Reopen Phase 11: add Step 11.5 texture-copy allocation hardening (P-1 accepted, strategic 1.2) [branch: DEBUG-v011]
2026-06-01 03:42:40 PLAN/S0290_vr_test_quality_overhaul/INDEX.md spec-update Phase 11 counter 4/4 -> 4/5; reopen note for Step 11.5 [branch: DEBUG-v011]
2026-06-01 12:16:31 PLAN/S0323_document-double-tap-text-selection.md spec Add strategic spec S0323 for double-tap text selection in document viewers [branch: DEBUG-v011]
2026-06-01 12:19:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt PdfViewerManager Rename PDF text-mode button label T to TXT and show OCR-in-progress toast on tap [branch: DEBUG-v011]
2026-06-01 12:26:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt PdfViewerManager Use neutral pdf_text_extracting string for TXT button toast; drop pdf_ocr_in_progress [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/res/menu/document_selection_menu.xml document_selection_menu Added calculator item to the document text selection menu [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentSelectionActionModeCallback.kt DocumentSelectionActionModeCallback Added settings-gated calculator launch for selected text [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt TextViewerManager Routed read-only text selections to calculator without result insertion [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt TextViewerCallback Split editor calculator round-trip from read-only selection launch [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt StandaloneViewManager Enabled read-only selected text calculator launch in standalone text viewer [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt PdfTextSelectionManager Added calculator launch to PDF text selection overlay [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt EpubViewerManager Added calculator launch to EPUB WebView selection menu [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LyricsManager.kt LyricsManager Added calculator and Google actions to lyrics selection menu [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt LyricsManager Provided settings repository for calculator availability in lyrics selection [branch: DEBUG-v011]
2026-06-01 12:33:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt CameraOcrTranslateActivity Added calculator and Google selection menu actions to OCR and translation results [branch: DEBUG-v011]
2026-06-01 12:33:00 docs/FEATURES.md FEATURES Documented calculator launch from read-only text selection menus [branch: DEBUG-v011]
2026-06-01 12:33:00 docs/FEATURES_RU.md FEATURES_RU Documented calculator launch from read-only text selection menus [branch: DEBUG-v011]
2026-06-01 12:33:00 docs/FEATURES_UK.md FEATURES_UK Documented calculator launch from read-only text selection menus [branch: DEBUG-v011]
2026-06-01 12:34:25 PLAN/S0323_document-double-tap-text-selection.md spec-update Refinement: selection entry gesture = long-press (EPUB-native), double-tap stays zoom; resolve open Q1, add ADR-3 [branch: DEBUG-v011]
2026-06-01 12:37:15 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt vr-diagnostic-playback Add detailed video player error logging and active immersive HUD failure warnings [branch: DEBUG-v011]
2026-06-01 12:38:21 PLAN/S0322_bugfix-vr-diagnostic-video-playback.md spec-update Update status to BlockNeedUserTest and record implementation notes [branch: DEBUG-v011]
2026-06-01 12:46:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt PlayerVrLaunchManager Restore photo zoom and pan coordinates when returning from VR to flat player [branch: DEBUG-v011]
2026-06-01 12:50:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt PlayerVrLaunchManager Add Timber verification probe for spec S0292 inside applyPendingReturnIfReady [branch: DEBUG-v011]
2026-06-01 12:53:33 PLAN/S0254_settings-grid-to-interface.md spec-update Reopen S0254 with current SettingsToggleRow repair phase [branch: DEBUG-v011]
2026-06-01 12:53:33 PLAN/S0254_settings-grid-to-interface/INDEX.md spec-update Add S0254 Phase 04 repair phase to tactical index [branch: DEBUG-v011]
2026-06-01 12:53:34 PLAN/S0254_settings-grid-to-interface/PHASE_04__repair-current-settings-ui.md spec-update Add S0254 current settings UI repair phase [branch: DEBUG-v011]
2026-06-01 12:54:11 PLAN/S0254_settings-grid-to-interface.md spec-dev Start S0254 repair implementation [branch: DEBUG-v011]
2026-06-01 12:54:11 PLAN/S0254_settings-grid-to-interface/INDEX.md spec-dev Mark S0254 Phase 04 in progress [branch: DEBUG-v011]
2026-06-01 12:54:12 PLAN/S0254_settings-grid-to-interface/PHASE_04__repair-current-settings-ui.md spec-dev Mark S0254 Step 04.1 in progress [branch: DEBUG-v011]
2026-06-01 12:56:07 PLAN/S0323_document-double-tap-text-selection/INDEX.md spec-tech Create tactical plan for S0323 (4 phases, full scope) [branch: DEBUG-v011]
2026-06-01 12:56:07 PLAN/S0323_document-double-tap-text-selection/PHASE_01__pdf-longpress-selection-entry.md spec-tech Phase 01: pdf-longpress-selection-entry [branch: DEBUG-v011]
2026-06-01 12:56:07 PLAN/S0323_document-double-tap-text-selection/PHASE_02__pdf-word-preselection.md spec-tech Phase 02: pdf-word-preselection [branch: DEBUG-v011]
2026-06-01 12:56:07 PLAN/S0323_document-double-tap-text-selection/PHASE_03__office-selection-actionmode.md spec-tech Phase 03: office-selection-actionmode [branch: DEBUG-v011]
2026-06-01 12:56:07 PLAN/S0323_document-double-tap-text-selection/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v011]
2026-06-01 12:56:07 PLAN/S0323_document-double-tap-text-selection.md spec-tech Status -> Tactical [branch: DEBUG-v011]
2026-06-01 12:56:32 app_v2/src/main/res/layout/fragment_settings_general.xml S0254 Phase 04.1 Add relocated grid and file-operation controls to General Interface portrait layout [branch: DEBUG-v011]
2026-06-01 12:56:33 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0254 Phase 04.1 Add relocated grid and file-operation controls to General Interface landscape layout [branch: DEBUG-v011]
2026-06-01 12:56:33 PLAN/S0254_settings-grid-to-interface/INDEX.md spec-dev Record S0254 Step 04.1 progress [branch: DEBUG-v011]
2026-06-01 12:56:34 PLAN/S0254_settings-grid-to-interface/PHASE_04__repair-current-settings-ui.md spec-dev Complete S0254 Step 04.1 [branch: DEBUG-v011]
2026-06-01 12:58:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt PdfViewerManager S0323 Phase01: long-press opens PDF text-selection overlay; add requestPdfFullscreen() [branch: DEBUG-v011]
2026-06-01 12:59:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt PlayerCommandPanelCallbackImpl S0323 Phase01: route overflow menu_fullscreen to PDF page-fullscreen [branch: DEBUG-v011]
2026-06-01 13:01:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt S0254 Phase 04.2 Wire relocated grid and file-operation controls in General settings [branch: DEBUG-v011]
2026-06-01 13:02:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt S0254 Phase 04.2 Observe relocated grid and file-operation controls in General settings [branch: DEBUG-v011]
2026-06-01 13:03:05 PLAN/S0254_settings-grid-to-interface/INDEX.md spec-dev Record S0254 Step 04.2 progress [branch: DEBUG-v011]
2026-06-01 13:03:05 PLAN/S0254_settings-grid-to-interface/PHASE_04__repair-current-settings-ui.md spec-dev Complete S0254 Step 04.2 [branch: DEBUG-v011]
2026-06-01 13:10:58 app_v2/src/main/res/layout/fragment_settings_playback.xml S0254 Phase 04.3 Remove relocated grid and file-operation controls from Playback portrait layout [branch: DEBUG-v011]
2026-06-01 13:10:58 app_v2/src/main/res/layout-land/fragment_settings_playback.xml S0254 Phase 04.3 Remove relocated grid and file-operation controls from Playback landscape layout [branch: DEBUG-v011]
2026-06-01 13:10:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt S0254 Phase 04.3 Remove relocated grid and file-operation bindings from Playback settings [branch: DEBUG-v011]
2026-06-01 13:11:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerGestureSetupManager.kt spec-dev S0323 Phase02: capture PDF long-press point, pass to selection entry [branch: DEBUG-v011]
2026-06-01 13:11:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt spec-dev S0323 Phase02: forward long-press coordinates to text-selection overlay [branch: DEBUG-v011]
2026-06-01 13:11:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt spec-dev S0323 Phase02: add recognizeTextBlocksForSelection (word boxes, no translation) [branch: DEBUG-v011]
2026-06-01 13:11:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt spec-dev S0323 Phase02: pre-select word under long-press in overlay [branch: DEBUG-v011]
2026-06-01 13:11:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfSelectionCoordinateMapper.kt spec-dev S0323 Phase02: new coordinate->word mapper [branch: DEBUG-v011]
2026-06-01 13:11:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt build unblock Use positional PDF text-selection point argument to satisfy current Kotlin signature [branch: DEBUG-v011]
2026-06-01 13:12:45 PLAN/S0254_settings-grid-to-interface/INDEX.md spec-dev Record S0254 Step 04.3 progress [branch: DEBUG-v011]
2026-06-01 13:12:45 PLAN/S0254_settings-grid-to-interface/PHASE_04__repair-current-settings-ui.md spec-dev Complete S0254 Step 04.3 [branch: DEBUG-v011]
2026-06-01 13:14:11 PLAN/S0324_nolegal-office-unified-selection-menu.md spec-all Split from S0323: noLegal Office unified selection menu (deferred Phase 03) [branch: DEBUG-v011]
2026-06-01 13:15:59 docs/FEATURES.md spec-dev S0323 Phase04: document long-press text selection (PDF/EPUB/TXT) [branch: DEBUG-v011]
2026-06-01 13:15:59 docs/FEATURES_RU.md spec-dev S0323 Phase04: RU mirror of text selection feature [branch: DEBUG-v011]
2026-06-01 13:15:59 docs/FEATURES_UK.md spec-dev S0323 Phase04: UK mirror of text selection feature [branch: DEBUG-v011]
2026-06-01 13:19:50 PLAN/S0323_document-double-tap-text-selection.md spec-dev S0323 all implementable phases done; status -> BlockNeedUserTest; debug tags inserted (3) [branch: DEBUG-v011]
2026-06-01 13:21:31 app_v2/src/main/res/layout/fragment_settings_general.xml S0254 Phase 04.4 Restore grid icon-size control in General Interface portrait layout [branch: DEBUG-v011]
2026-06-01 13:21:32 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0254 Phase 04.4 Restore grid icon-size control in General Interface landscape layout [branch: DEBUG-v011]
2026-06-01 13:21:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt S0254 Phase 04.4 Wire grid icon-size input in General settings [branch: DEBUG-v011]
2026-06-01 13:22:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt S0254 Phase 04.4 Observe grid icon-size input in General settings [branch: DEBUG-v011]
2026-06-01 13:23:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt S0254 Phase 04.4 Move relocated grid settings reset ownership to General section [branch: DEBUG-v011]
2026-06-01 13:24:10 PLAN/S0254_settings-grid-to-interface/INDEX.md spec-dev Complete S0254 Phase 04 [branch: DEBUG-v011]
2026-06-01 13:24:10 PLAN/S0254_settings-grid-to-interface/PHASE_04__repair-current-settings-ui.md spec-dev Complete S0254 Step 04.4 and phase criteria [branch: DEBUG-v011]
2026-06-01 13:24:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt S0254 BlockNeedUserTest probes Add S0254 device verification probes for relocated General settings controls [branch: DEBUG-v011]
2026-06-01 13:25:35 PLAN/S0254_settings-grid-to-interface.md spec-dev Move S0254 to BlockNeedUserTest after repair implementation [branch: DEBUG-v011]
2026-06-01 14:12:14 PLAN/S0324_nolegal-office-unified-selection-menu/INDEX.md spec-tech Create tactical index for S0324 [branch: DEBUG-v011]
2026-06-01 14:12:14 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_01__action-mode-routing.md spec-tech Create S0324 action mode routing phase [branch: DEBUG-v011]
2026-06-01 14:12:15 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_02__nolegal-office-bridge.md spec-tech Create S0324 noLegal Office bridge phase [branch: DEBUG-v011]
2026-06-01 14:12:15 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_03__docs-catalog-validation.md spec-tech Create S0324 docs and validation phase [branch: DEBUG-v011]
2026-06-01 14:12:15 PLAN/S0324_nolegal-office-unified-selection-menu.md spec-tech Advance S0324 to tactical plan [branch: DEBUG-v011]
2026-06-01 14:12:54 PLAN/S0324_nolegal-office-unified-selection-menu.md spec-dev Mark S0324 implementation in progress [branch: DEBUG-v011]
2026-06-01 14:12:54 PLAN/S0324_nolegal-office-unified-selection-menu/INDEX.md spec-dev Mark S0324 phase 01 in progress [branch: DEBUG-v011]
2026-06-01 14:12:55 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_01__action-mode-routing.md spec-dev Start S0324 step 01.1 [branch: DEBUG-v011]
2026-06-01 14:14:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentSelectionActionModeCallback.kt S0324 Phase 01 Add shared document selection ActionMode augmenter [branch: DEBUG-v011]
2026-06-01 14:14:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerHost.kt S0324 Phase 01 Add Office selection ActionMode host seam [branch: DEBUG-v011]
2026-06-01 14:15:39 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_01__action-mode-routing.md spec-dev Complete S0324 step 01.1 [branch: DEBUG-v011]
2026-06-01 14:19:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt S0324 Phase 01 Route player WebView text selection through document action mode [branch: DEBUG-v011]
2026-06-01 14:19:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt S0324 Phase 01 Handle Office selected text translation in player [branch: DEBUG-v011]
2026-06-01 14:20:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0324 Phase 01 Route standalone WebView text selection through document action mode [branch: DEBUG-v011]
2026-06-01 14:21:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0324 Phase 01 Expose standalone document selection callback [branch: DEBUG-v011]
2026-06-01 14:22:22 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_01__action-mode-routing.md spec-dev Complete S0324 step 01.2 [branch: DEBUG-v011]
2026-06-01 14:22:41 PLAN/S0324_nolegal-office-unified-selection-menu/INDEX.md spec-dev Complete S0324 phase 01 in index [branch: DEBUG-v011]
2026-06-01 14:22:42 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_01__action-mode-routing.md spec-dev Mark S0324 phase 01 done [branch: DEBUG-v011]
2026-06-01 14:22:58 PLAN/S0324_nolegal-office-unified-selection-menu/INDEX.md spec-dev Start S0324 phase 02 in index [branch: DEBUG-v011]
2026-06-01 14:22:58 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_02__nolegal-office-bridge.md spec-dev Start S0324 step 02.1 [branch: DEBUG-v011]
2026-06-01 14:23:28 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentEngineBridge.kt S0324 Phase 02 Inject Office generated HTML selection bridge script [branch: DEBUG-v011]
2026-06-01 14:24:16 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_02__nolegal-office-bridge.md spec-dev Complete S0324 step 02.1 [branch: DEBUG-v011]
2026-06-01 14:25:18 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerManager.kt S0324 Phase 02 Add Office WebView selected text action mode bridge [branch: DEBUG-v011]
2026-06-01 14:26:07 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_02__nolegal-office-bridge.md spec-dev Complete S0324 step 02.2 [branch: DEBUG-v011]
2026-06-01 14:26:21 PLAN/S0324_nolegal-office-unified-selection-menu/INDEX.md spec-dev Complete S0324 phase 02 in index [branch: DEBUG-v011]
2026-06-01 14:26:21 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_02__nolegal-office-bridge.md spec-dev Mark S0324 phase 02 done [branch: DEBUG-v011]
2026-06-01 14:27:17 docs/FEATURES_noLegal.md S0324 Phase 03 Document noLegal Office selection menu [branch: DEBUG-v011]
2026-06-01 14:27:17 docs/FEATURES_noLegal_RU.md S0324 Phase 03 Document noLegal Office selection menu RU [branch: DEBUG-v011]
2026-06-01 14:27:18 docs/FEATURES_noLegal_UK.md S0324 Phase 03 Document noLegal Office selection menu UK [branch: DEBUG-v011]
2026-06-01 14:27:18 PLAN/S0324_nolegal-office-unified-selection-menu/INDEX.md spec-dev Start S0324 phase 03 in index [branch: DEBUG-v011]
2026-06-01 14:27:18 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_03__docs-catalog-validation.md spec-dev Complete S0324 step 03.1 [branch: DEBUG-v011]
2026-06-01 14:32:25 PLAN/S0324_nolegal-office-unified-selection-menu.md S0324 Mark noLegal Office selection menu implementation complete [branch: DEBUG-v011]
2026-06-01 14:32:26 PLAN/S0324_nolegal-office-unified-selection-menu/INDEX.md S0324 tactical index Close S0324 tactical implementation gate [branch: DEBUG-v011]
2026-06-01 14:32:26 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_03__docs-catalog-validation.md S0324 phase 03 Record final catalog and noLegal build validation [branch: DEBUG-v011]
2026-06-01 14:32:26 dev/SPEC_CATALOG.json S0324 catalog Advance S0324 status to Implemented [branch: DEBUG-v011]
2026-06-01 14:32:26 dev/FUNCTIONALITY.log S0324 functionality log Record noLegal Office selection menu behavior change [branch: DEBUG-v011]
2026-06-01 14:32:39 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_03__docs-catalog-validation.md S0324 phase 03 Finalize S0324 catalog verification note [branch: DEBUG-v011]
2026-06-01 14:33:22 PLAN/S0324_nolegal-office-unified-selection-menu/PHASE_02__nolegal-office-bridge.md S0324 phase 02 Check completed Phase 01 prerequisite [branch: DEBUG-v011]
2026-06-01 14:35:37 PLAN/S0324_nolegal-office-unified-selection-menu.md spec-check Audit S0324 to Verified; PASS/WARN/FAIL 26/0/0 [branch: DEBUG-v011]
2026-06-01 14:35:37 PLAN/S0324_nolegal-office-unified-selection-menu/INDEX.md spec-check Mark S0324 spec-check completion gate verified [branch: DEBUG-v011]
2026-06-01 14:35:37 dev/SPEC_CATALOG.json spec-check Close S0324 as Verified [branch: DEBUG-v011]
2026-06-01 14:51:26 PLAN/S0323_document-double-tap-text-selection.md spec-test-device Device run on emulator-5554 -> PASS 6/6, 0 errors; all 3 debug tags observed [branch: DEBUG-v011]
2026-06-01 14:52:53 PLAN/S0323_document-double-tap-text-selection.md spec-check Audit S0323 -> Verified; PASS/WARN/FAIL 9/0/0 [branch: DEBUG-v011]
2026-06-01 14:52:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt spec-check Remove S0323 debug tag on Verified [branch: DEBUG-v011]
2026-06-01 14:52:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt spec-check Remove S0323 debug tag on Verified [branch: DEBUG-v011]
2026-06-01 14:52:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt spec-check Remove S0323 debug tag on Verified [branch: DEBUG-v011]
2026-06-01 14:55:02 PLAN/S0325_browse-filter-doc-types-reset.md spec Add strategic spec S0325 for Browse file-filter Office type + reset-checkboxes button (portrait+landscape) [branch: DEBUG-v011]
2026-06-01 14:57:59 PLAN/S0325_browse-filter-doc-types-reset/INDEX.md spec-tech Create tactical plan for S0325 [branch: DEBUG-v011]
2026-06-01 14:57:59 PLAN/S0325_browse-filter-doc-types-reset/PHASE_01__filter-layout-grid.md spec-tech Phase 01: filter-layout-grid [branch: DEBUG-v011]
2026-06-01 14:57:59 PLAN/S0325_browse-filter-doc-types-reset/PHASE_02__dialog-logic.md spec-tech Phase 02: dialog-logic [branch: DEBUG-v011]
2026-06-01 14:57:59 PLAN/S0325_browse-filter-doc-types-reset/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v011]
2026-06-01 14:57:59 PLAN/S0325_browse-filter-doc-types-reset.md spec-tech Status -> Tactical [branch: DEBUG-v011]
2026-06-01 14:59:07 app_v2/src/main/res/values/strings.xml S0325 phase-01.1 Add filter_check_all_types string (reset-checkboxes button label) EN/RU/UK [branch: DEBUG-v011]
2026-06-01 15:00:56 app_v2/src/main/res/layout/dialog_filter.xml S0325 phase-01.2 Browse filter portrait: add Office type checkbox + check-all-types reset button, 4x2 type grid [branch: DEBUG-v011]
2026-06-01 15:01:44 app_v2/src/main/res/layout-land/dialog_filter.xml S0325 phase-01.3 Browse filter landscape: add Office type checkbox + check-all-types reset button [branch: DEBUG-v011]
2026-06-01 15:02:53 PLAN/S0165_browse-create-folder.md spec-arc Archive S0165 (browse-create-folder) -> temp/done/ [branch: DEBUG-v011]
2026-06-01 15:05:24 PLAN/S0186_nolegal-pipeline-cascade-resilience.md spec-arc Archive S0186 (noLegal-pipeline-cascade-resilience) -> temp/done/ [branch: DEBUG-v011]
2026-06-01 15:05:24 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt spec-arc Remove stale Timber.d(S0186) debug verification tag on archive [branch: DEBUG-v011]
2026-06-01 15:06:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt S0325 phase-02 Browse filter: wire Office type checkbox (visibility/init/apply) and check-all-types reset button [branch: DEBUG-v011]
2026-06-01 15:08:17 PLAN/S0207_radical-memory-reduction.md spec-arc Archive S0207 (radical-memory-reduction) -> temp/done/ [branch: DEBUG-v011]
2026-06-01 15:08:51 PLAN/S0211_webview-auth-account-dedup-and-loop-prevention.md spec-arc Archive S0211 (webview-auth-account-dedup-and-loop-prevention) -> temp/done/ [branch: DEBUG-v011]
2026-06-01 15:08:51 app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt spec-arc Remove stale Timber.d(S0211) debug verification tag on archive [branch: DEBUG-v011]
2026-06-01 15:08:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DedupAuthAccountsUseCase.kt spec-arc Remove stale Timber.d(S0211) debug verification tag on archive [branch: DEBUG-v011]
2026-06-01 15:08:51 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt spec-arc Remove stale Timber.d(S0211) debug verification tag on archive [branch: DEBUG-v011]
2026-06-01 15:10:24 PLAN/S0252_bugfix-sftp-audio-car-playback-resilience.md spec-arc Archive S0252 (bugfix-sftp-audio-car-playback-resilience) -> temp/done/ [branch: DEBUG-v011]
2026-06-01 15:10:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-arc Remove stale Timber.d(S0252) debug verification tags on archive [branch: DEBUG-v011]
2026-06-01 15:10:25 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt spec-arc Remove stale Timber.d(S0252) debug verification tag on archive [branch: DEBUG-v011]
2026-06-01 15:10:29 docs/FEATURES.md spec-dev S0325 phase-03 Browse filter: note Office type + check-all-types reset action [branch: DEBUG-v011]
2026-06-01 15:10:29 docs/FEATURES_RU.md spec-dev S0325 phase-03 Browse filter: note Office type + check-all-types reset action (RU) [branch: DEBUG-v011]
2026-06-01 15:10:29 docs/FEATURES_UK.md spec-dev S0325 phase-03 Browse filter: note Office type + check-all-types reset action (UK) [branch: DEBUG-v011]
2026-06-01 15:11:35 PLAN/S0253_overflow-menus-default-on-fresh-install.md spec-arc Archive S0253 (overflow-menus-default-on-fresh-install) -> temp/done/ [branch: DEBUG-v011]
2026-06-01 15:11:35 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-arc Remove stale Timber.d(S0253) debug verification tag on archive [branch: DEBUG-v011]
2026-06-01 15:11:40 PLAN/S0325_browse-filter-doc-types-reset.md spec-dev All phases done; status -> BlockNeedUserTest (S0325 probe tag in BrowseDialogHelper) [branch: DEBUG-v011]
2026-06-01 15:15:55 PLAN/S0325_browse-filter-doc-types-reset.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 4/0/2; S0325 probe exercised; Office visibility inconclusive (resource allowed-set) [branch: DEBUG-v011]
2026-06-01 15:17:50 PLAN/S0325_browse-filter-doc-types-reset.md spec-check Audit S0325 -> Verified; PASS/WARN/FAIL 11/0/0 [branch: DEBUG-v011]
2026-06-01 15:17:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt spec-check Remove S0325 probe tag + unused Timber import on Verified [branch: DEBUG-v011]
2026-06-01 15:20:26 app_v2/src/main/res/layout/fragment_settings_playback.xml fragment_settings_playback.xml Remove camera subsection headings from playback settings portrait layout [branch: DEBUG-v011]
2026-06-01 15:20:26 app_v2/src/main/res/layout-land/fragment_settings_playback.xml fragment_settings_playback.xml Remove camera subsection headings from playback settings landscape layout [branch: DEBUG-v011]
2026-06-01 15:20:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt PlaybackSettingsFragment Remove binding reference for deleted camera OCR subsection heading [branch: DEBUG-v011]
2026-06-01 15:23:30 app_v2/src/main/res/layout/fragment_settings_general.xml S0254 follow-up Merge icon-size dropdown + default grid mode into one row (portrait); drop grid-mode subtitle [branch: DEBUG-v011]
2026-06-01 15:23:30 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0254 follow-up Merge icon-size + grid mode into one row, pair hide-grid-buttons with file-ops-overflow (landscape) [branch: DEBUG-v011]
2026-06-01 17:52:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/actions/EditorActionPanelBinder.kt Text editor Move Save / Save & send / Send to Keep into the editor toolbar overflow menu (More always visible); add Calculator to the EditText selection ActionMode, gated on the calculator setting, inserting the result after the selection [branch: DEBUG-v011]
2026-06-01 17:57:06 app_v2/src/main/res/layout/fragment_settings_general.xml string/setting_allow_separate_window_desc Add subtitle/support text to the Allow new windows toggle in Settings -> Common -> Interface (portrait + landscape) [branch: DEBUG-v011]
2026-06-01 18:05:01 app_v2/src/main/res/layout/fragment_settings_general.xml Settings General Add help (?) icon next to Wear Companion button explaining the feature; TooltipDialog wiring in GeneralSettingsBackupHelper; new tooltip_wear_companion strings (EN/RU/UK); portrait + landscape layouts [branch: DEBUG-v011]
2026-06-01 18:08:25 app_v2/src/main/res/layout-land/fragment_settings_general.xml Settings/Common Landscape: place Sync Now button and Never synced status on the same lane as Enable background sync toggle (status left of button) [branch: DEBUG-v011]
2026-06-01 18:09:15 app_v2/src/main/res/layout-land/fragment_settings_general.xml fragment_settings_general.xml Landscape interface settings: pair Allow-new-windows with Enable-favourites on one row; move Resource-ops-overflow into the All-Files/Show-Hidden row [branch: DEBUG-v011]
2026-06-01 18:41:14 PLAN/S0326_media-3dvr-default-settings.md spec Add strategic spec S0326 for global 3D/VR default settings screen [branch: DEBUG-v011]
2026-06-01 18:46:20 PLAN/S0326_media-3dvr-default-settings/INDEX.md spec-tech Create tactical plan for S0326 [branch: DEBUG-v011]
2026-06-01 18:46:20 PLAN/S0326_media-3dvr-default-settings/PHASE_01__foundations-settings-fields.md spec-tech Phase 01: foundations-settings-fields [branch: DEBUG-v011]
2026-06-01 18:46:20 PLAN/S0326_media-3dvr-default-settings/PHASE_02__detection-config.md spec-tech Phase 02: detection-config [branch: DEBUG-v011]
2026-06-01 18:46:20 PLAN/S0326_media-3dvr-default-settings/PHASE_03__coordinator-default-slot.md spec-tech Phase 03: coordinator-default-slot [branch: DEBUG-v011]
2026-06-01 18:46:20 PLAN/S0326_media-3dvr-default-settings/PHASE_04__settings-screen-shared.md spec-tech Phase 04: settings-screen-shared [branch: DEBUG-v011]
2026-06-01 18:46:20 PLAN/S0326_media-3dvr-default-settings/PHASE_05__settings-screen-vr.md spec-tech Phase 05: settings-screen-vr [branch: DEBUG-v011]
2026-06-01 18:46:20 PLAN/S0326_media-3dvr-default-settings/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v011]
2026-06-01 18:46:20 PLAN/S0326_media-3dvr-default-settings.md spec-tech Status -> Tactical [branch: DEBUG-v011]
2026-06-01 19:05:03 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0326 phase-01.1 Add global 3D/VR default settings fields to AppSettings [branch: DEBUG-v011]
2026-06-01 19:07:26 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0326 phase-01.2 Persist global 3D/VR default settings in DataStore [branch: DEBUG-v011]
2026-06-01 19:12:28 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt spec-dev S0326 phase-01.3 Add global 3D/VR fields to backup DTO [branch: DEBUG-v011]
2026-06-01 19:12:56 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt spec-dev S0326 phase-01.3 Round-trip global 3D/VR fields through backup [branch: DEBUG-v011]
2026-06-01 19:24:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StereoDetector.kt spec-dev S0326 phase-02 Add StereoDetectionConfig + per-source gating to detect entry points [branch: DEBUG-v011]
2026-06-01 19:24:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0326 phase-02 Collect 3D/VR detection config from settings [branch: DEBUG-v011]
2026-06-01 19:24:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerTracksObserver.kt spec-dev S0326 phase-02 Pass detection config to detectForVideo [branch: DEBUG-v011]
2026-06-01 19:25:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-dev S0326 phase-02 Pass detection config to detectForImage [branch: DEBUG-v011]
2026-06-01 19:25:55 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StereoDetectorConfigTest.kt spec-dev S0326 phase-02 Tests for configurable detection cascade [branch: DEBUG-v011]
2026-06-01 19:33:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinator.kt spec-dev S0326 phase-03 Add global-default fallback slot + injectable ioDispatcher [branch: DEBUG-v011]
2026-06-01 19:33:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt spec-dev S0326 phase-03 Supply global default stereo mode from settings to coordinator [branch: DEBUG-v011]
2026-06-01 19:34:23 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinatorTest.kt spec-dev S0326 phase-03 Tests for coordinator precedence and global-default slot [branch: DEBUG-v011]
2026-06-01 20:00:38 PLAN/S0326_media-3dvr-default-settings.md ui-clarify S0326: owner reframe - all 3D/VR settings UI is VR-only (ADR-3); update flavor scope + resolve open Q3 [branch: DEBUG-v011]
2026-06-01 20:00:38 PLAN/S0326_media-3dvr-default-settings/INDEX.md ui-clarify S0326: supersede Phase 04, merge groups A/D into VR-only Phase 05 [branch: DEBUG-v011]
2026-06-01 20:10:03 PLAN/S0326_media-3dvr-default-settings/PHASE_05__settings-screen-vr.md spec-tech S0326: re-detail Phase 05 (VR-only, all groups A-E in existing VR block) [branch: DEBUG-v011]
2026-06-01 20:19:41 app_v2/src/vr/res/values/strings.xml spec-dev S0326 phase-05.1 3D/VR settings strings (en) [branch: DEBUG-v011]
2026-06-01 20:19:42 app_v2/src/vr/res/values-ru/strings.xml spec-dev S0326 phase-05.1 3D/VR settings strings (ru) [branch: DEBUG-v011]
2026-06-01 20:19:42 app_v2/src/vr/res/values-uk/strings.xml spec-dev S0326 phase-05.1 3D/VR settings strings (uk) [branch: DEBUG-v011]
2026-06-01 20:19:43 app_v2/src/vr/res/layout/fragment_vr_settings_block.xml spec-dev S0326 phase-05.2 Add 3D/VR settings rows to VR block layout [branch: DEBUG-v011]
2026-06-01 20:19:43 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt spec-dev S0326 phase-05.3 Bind 3D/VR settings controls + unified switch in VR block [branch: DEBUG-v011]
2026-06-01 20:24:29 docs/FEATURES.md spec-dev S0326 Add 3D/VR default settings feature (EN) [branch: DEBUG-v011]
2026-06-01 20:24:29 docs/FEATURES_RU.md spec-dev S0326 Add 3D/VR default settings feature (RU) [branch: DEBUG-v011]
2026-06-01 20:24:29 docs/FEATURES_UK.md spec-dev S0326 Add 3D/VR default settings feature (UK) [branch: DEBUG-v011]
2026-06-01 20:24:29 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt spec-dev S0326 Insert BlockNeedUserTest debug tag [branch: DEBUG-v011]
2026-06-01 20:24:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0326 Insert BlockNeedUserTest debug tag [branch: DEBUG-v011]
2026-06-01 20:24:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinator.kt spec-dev S0326 Insert BlockNeedUserTest debug tag [branch: DEBUG-v011]
2026-06-01 20:26:24 PLAN/S0327_device-profile-onboarding.md spec Add strategic spec S0327 for device profile onboarding [branch: DEBUG-v011]
2026-06-01 20:31:28 PLAN/S0327_device-profile-onboarding.md spec-update Refinement (GPT-5.3-Codex, focus: language/structure/verifiability/completeness) [branch: DEBUG-v011]
2026-06-01 20:35:43 PLAN/S0327_device-profile-onboarding.md spec-update Refinement (Claude Opus 4.8, focus: language, style): removed ASCII-arrow flow in 5.4, fixed missing yo [branch: DEBUG-v011]
2026-06-01 21:09:15 PLAN/S0327_device-profile-onboarding.md spec-update Refine S0327 owner decisions for device profile onboarding [branch: DEBUG-v011]
2026-06-01 21:09:52 PLAN/S0327_device-profile-onboarding.md spec-update Align S0327 TV media box ADR and owner decisions [branch: DEBUG-v011]
2026-06-01 21:16:14 PLAN/S0327_device-profile-onboarding.md spec-update Refine S0327 research-first defaults and batch preset semantics [branch: DEBUG-v011]
2026-06-01 21:16:57 PLAN/S0191_browse-create-new-drawing.md spec-arc Archive S0191 (browse-create-new-drawing) -> temp/done/ [branch: DEBUG-v011]
2026-06-01 21:16:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CreateDrawingUseCase.kt spec-arc Remove stale S0191 Timber.d verification tags + unused Timber import [branch: DEBUG-v011]
2026-06-01 21:16:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDrawingCreateManager.kt spec-arc Remove stale S0191 Timber.d verification tag [branch: DEBUG-v011]
2026-06-01 22:21:16 temp/S0196/04_measurement_journal.md S0196 Add measurement journal [branch: DEBUG-v011]
2026-06-01 22:21:18 temp/S0196/04_trace_inventory.md S0196 Add trace inventory [branch: DEBUG-v011]
2026-06-01 22:21:20 temp/S0196/04_frame_notes.md S0196 Add frame notes [branch: DEBUG-v011]
2026-06-01 22:21:22 PLAN/S0196_activity-render-priority-research/PHASE_04__perf-measurements.md S0196 Complete Phase 04 [branch: DEBUG-v011]
2026-06-01 22:32:33 PLAN/S0196_activity-render-priority-research.md S0196 Close S0196 render-priority research as Verified: transfer consolidated verdict (ADR-4, resolved research items), repair corrupted spec file (drop duplicate stale tail, fix section 5 truncation); no child specs [branch: DEBUG-v011]
2026-06-01 22:34:48 temp/done/S0196_activity-render-priority-research.md spec-arc Archive S0196 (activity-render-priority-research) -> temp/done/ [branch: DEBUG-v011]
2026-06-01 22:50:08 PLAN/S0328_color-theme-setting.md spec Add strategic spec S0328 for color-theme-setting [branch: DEBUG-v011]
2026-06-01 23:27:33 PLAN/S0328_color-theme-setting/INDEX.md spec-tech Create tactical plan for S0328 [branch: DEBUG-v011]
2026-06-01 23:27:33 PLAN/S0328_color-theme-setting/PHASE_01__domain-persistence.md spec-tech Phase 01: domain-persistence [branch: DEBUG-v011]
2026-06-01 23:27:33 PLAN/S0328_color-theme-setting/PHASE_02__theme-apply-point.md spec-tech Phase 02: theme-apply-point [branch: DEBUG-v011]
2026-06-01 23:27:33 PLAN/S0328_color-theme-setting/PHASE_03__settings-ui.md spec-tech Phase 03: settings-ui [branch: DEBUG-v011]
2026-06-01 23:27:33 PLAN/S0328_color-theme-setting/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v011]
2026-06-01 23:27:34 PLAN/S0328_color-theme-setting.md spec-tech Status -> Tactical [branch: DEBUG-v011]
2026-06-02 00:12:13 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0328 phase-01.1: add colorTheme field to AppSettings [branch: DEBUG-v011]
2026-06-02 00:14:03 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0328 phase-01.2-01.4: persist+read colorTheme in DataStore [branch: DEBUG-v011]
2026-06-02 00:15:36 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt spec-dev S0328 phase-02.1: add ColorThemePrefs startup night-mode applier [branch: DEBUG-v011]
2026-06-02 00:17:05 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt spec-dev S0328 phase-02.2: apply color theme at startup + sync mirror [branch: DEBUG-v011]
2026-06-02 00:18:58 app_v2/src/main/res/values/strings.xml spec-dev S0328 phase-03.1: add color_theme label + options array (EN) [branch: DEBUG-v011]
2026-06-02 00:18:59 app_v2/src/main/res/values-ru/strings.xml spec-dev S0328 phase-03.1: color_theme strings (RU) [branch: DEBUG-v011]
2026-06-02 00:18:59 app_v2/src/main/res/values-uk/strings.xml spec-dev S0328 phase-03.1: color_theme strings (UK) [branch: DEBUG-v011]
2026-06-02 00:19:55 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev S0328 phase-03.2: color theme spinner (portrait) [branch: DEBUG-v011]
2026-06-02 00:19:55 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev S0328 phase-03.2: color theme spinner (landscape) [branch: DEBUG-v011]
2026-06-02 00:21:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsColorThemeHelper.kt spec-dev S0328 phase-03.3: color theme settings spinner helper [branch: DEBUG-v011]
2026-06-02 00:22:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt spec-dev S0328 phase-03.4: wire color theme helper into General settings [branch: DEBUG-v011]
2026-06-02 00:29:42 docs/FEATURES.md spec-dev S0328 phase-04.1: color theme feature bullet (EN) [branch: DEBUG-v011]
2026-06-02 00:29:42 docs/FEATURES_RU.md spec-dev S0328 phase-04.1: color theme feature bullet (RU) [branch: DEBUG-v011]
2026-06-02 00:29:42 docs/FEATURES_UK.md spec-dev S0328 phase-04.1: color theme feature bullet (UK) [branch: DEBUG-v011]
2026-06-02 00:34:27 PLAN/S0328_color-theme-setting.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v011]
2026-06-02 00:34:27 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt spec-dev S0328: insert BlockNeedUserTest debug tag (startup apply) [branch: DEBUG-v011]
2026-06-02 00:34:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsColorThemeHelper.kt spec-dev S0328: insert BlockNeedUserTest debug tag (settings change) [branch: DEBUG-v011]
2026-06-02 00:56:20 PLAN/S0327_device-profile-onboarding.md spec-update Clarify Welcome immediate apply and Settings confirmation semantics [branch: DEBUG-v011]
2026-06-02 01:03:07 PLAN/S0327_device-profile-onboarding.md spec-update Refine S0327 media-only profiles, shared images task, and docs-first task [branch: DEBUG-v011]
2026-06-02 01:08:12 PLAN/S0327_device-profile-onboarding.md spec-update Add S0327 e-book reader profile to profile matrix and spec [branch: DEBUG-v011]
2026-06-02 01:11:31 PLAN/S0327_device-profile-onboarding.md spec-update Preserve S0327 preset matrix artifact and require profile values technical documentation [branch: DEBUG-v011]
2026-06-02 01:13:15 PLAN/S0327_device-profile-onboarding.md spec-update Define existing installs as Other profile on S0327 migration [branch: DEBUG-v011]
2026-06-02 01:16:20 PLAN/S0327_device-profile-onboarding.md spec-update Add localized profile description copy requirement and draft artifact [branch: DEBUG-v011]
2026-06-02 01:20:30 PLAN/S0327_device-profile-onboarding.md spec-update Refinement: removed catalog notation, clarified research process, added DISCUSS proposals on profile resolution, detector signals, override tracking [branch: DEBUG-v011]
2026-06-02 01:33:51 PLAN/S0327_device-profile-onboarding/INDEX.md spec-tech Create tactical plan for S0327 with 9 phases [branch: DEBUG-v011]
2026-06-02 01:33:51 PLAN/S0327_device-profile-onboarding/PHASE_01__foundations.md spec-tech Phase 01: foundations (DeviceProfile model, Room schema, interfaces) [branch: DEBUG-v011]
2026-06-02 01:33:51 PLAN/S0327_device-profile-onboarding/PHASE_02__detector.md spec-tech Phase 02: detector (auto-detection with confidence levels) [branch: DEBUG-v011]
2026-06-02 01:33:52 PLAN/S0327_device-profile-onboarding/PHASE_03__repository.md spec-tech Phase 03: repository (persistence and lifecycle management) [branch: DEBUG-v011]
2026-06-02 01:33:52 PLAN/S0327_device-profile-onboarding/PHASE_04__di-bindings.md spec-tech Phase 04: di-bindings (Hilt wiring) [branch: DEBUG-v011]
2026-06-02 01:33:52 PLAN/S0327_device-profile-onboarding/PHASE_05__welcome-ui.md spec-tech Phase 05: welcome-ui (first-run profile selector) [branch: DEBUG-v011]
2026-06-02 01:33:53 PLAN/S0327_device-profile-onboarding/PHASE_06__settings-ui.md spec-tech Phase 06: settings-ui (Settings profile change) [branch: DEBUG-v011]
2026-06-02 01:33:53 PLAN/S0327_device-profile-onboarding/PHASE_07__preset-apply.md spec-tech Phase 07: preset-apply (batch settings application) [branch: DEBUG-v011]
2026-06-02 01:33:53 PLAN/S0327_device-profile-onboarding/PHASE_08__migration-existing.md spec-tech Phase 08: migration-existing (upgrade path for existing installs) [branch: DEBUG-v011]
2026-06-02 01:33:53 PLAN/S0327_device-profile-onboarding/PHASE_09__docs-catalog-cleanup.md spec-tech Phase 09: docs-catalog-cleanup (final documentation and catalog sync) [branch: DEBUG-v011]
2026-06-02 01:33:54 PLAN/S0327_device-profile-onboarding.md spec-tech Status → Tactical; tactical plan created [branch: DEBUG-v011]
2026-06-02 01:40:10 app_v2/src/main/java/com/sza/fastmediasorter/data/model/DeviceProfile.kt spec-dev-phase-01 Add DeviceProfile enum, DeviceProfileSource, DetectionConfidence, and related data classes [branch: DEBUG-v011]
2026-06-02 02:08:10 temp/S0328_mobile_test_scenario_20260602_0036.md spec-test-device Device run aborted: emulator dropped post-install; build+install PASS, UI scenario NOT RUN. Spec stays BlockNeedUserTest [branch: DEBUG-v011]
2026-06-02 02:15:41 app_v2/src/main/java/com/sza/fastmediasorter/data/detector/RealDeviceProfileDetector.kt spec-check Removed stale debug tag S0327 (status Tactical not BlockNeedUserTest); converted Timber.d to Timber.i [branch: DEBUG-v011]
2026-06-02 02:15:49 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/RealDeviceProfileRepository.kt spec-check Removed stale debug tag S0327 (status Tactical not BlockNeedUserTest); converted Timber.d to Timber.i [branch: DEBUG-v011]
2026-06-02 02:16:14 PLAN/S0327_device-profile-onboarding.md spec-check Audit S0327 -> Broken; 2 FAILs (FEATURES not updated, preset matrix blocker unchecked) + 1 WARN (2 stale debug tags removed) [branch: DEBUG-v011]
2026-06-02 02:19:03 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/RealDeviceProfileRepository.kt spec-fix Remove ticket id from persistent device profile migration log [branch: DEBUG-v011]
2026-06-02 02:21:52 PLAN/S0327_device-profile-onboarding.md spec-check Audit S0327 implementation after mechanical fixes [branch: DEBUG-v011]
2026-06-02 02:25:14 docs/FEATURES.md spec-check Added device profile first-run feature entry (Section 0) per strategic §8 mandate [branch: DEBUG-v011]
2026-06-02 02:25:24 docs/FEATURES_RU.md spec-check Added device profile first-run feature entry (Section 0) per strategic §8 mandate (Russian) [branch: DEBUG-v011]
2026-06-02 02:25:31 docs/FEATURES_UK.md spec-check Added device profile first-run feature entry (Section 0) per strategic §8 mandate (Ukrainian) [branch: DEBUG-v011]
2026-06-02 02:25:39 PLAN/S0327_device-profile-onboarding/INDEX.md spec-check Marked Completion Gate items done: FEATURES updated, preset matrix deferred to future task [branch: DEBUG-v011]
2026-06-02 02:27:45 PLAN/S0327_device-profile-onboarding.md spec-check Final audit: Verified. FAILs fixed (FEATURES updated, blocker deferred). Build verified, 6 core implementation files, catalog regenerated, manual device testing pending. [branch: DEBUG-v011]
2026-06-02 03:15:41 app_v2/proguard-nolegal.pro noLegal R8 release Add noLegal-only proguard -dontwarn rules for NewPipeExtractor optional deps (Rhino java.beans., jsoup com.google.re2j.); wire via noLegal proguardFiles. Fixes minifyNoLegalReleaseWithR8 missing-class failure. [branch: DEBUG-v011]
2026-06-02 13:16:34 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt S0328 Apply night mode in-process on theme change so it takes effect on the in-app restart without force-killing the process [branch: DEBUG-v011]
2026-06-02 14:35:27 app_v2/src/main/res/layout/fragment_settings_playback.xml fragment_settings_playback.xml Indent ‘Only OCR’ setting under ‘Camera OCR Translation’ in portrait playback settings [branch: DEBUG-v011]
2026-06-02 14:38:18 app_v2/src/main/res/layout-land/fragment_settings_playback.xml fragment_settings_playback.xml Place ‘Calculator’ and ‘Embedded Game’ toggles on a single row in landscape playback settings [branch: DEBUG-v011]
2026-06-02 14:57:57 PLAN/S0329_calculator-history-and-functions.md spec Add strategic spec S0329 for calculator persistent history and scientific functions [branch: DEBUG-v011]
2026-06-02 15:01:06 app_v2/src/main/res/layout/activity_camera_ocr_translate.xml CameraOcrTranslateActivity Compact camera OCR result actions into equal icon buttons [branch: DEBUG-v011]
2026-06-02 15:01:32 PLAN/S0329_calculator-history-and-functions/INDEX.md spec-tech Create tactical plan for S0329 (5 phases) [branch: DEBUG-v011]
2026-06-02 15:01:32 PLAN/S0329_calculator-history-and-functions.md spec-tech S0329 status -> Tactical [branch: DEBUG-v011]
2026-06-02 15:02:36 app_v2/build.gradle.kts Android build config Restore version values after validation build [branch: DEBUG-v011]
2026-06-02 15:11:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt spec-dev S0329 P01: add scientific unary functions, power operator, pi, MATH_DOMAIN error [branch: DEBUG-v011]
2026-06-02 15:11:24 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt spec-dev S0329 P01: unit tests for scientific functions and domain errors [branch: DEBUG-v011]
2026-06-02 15:11:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt spec-dev S0329 P01/P03: render MATH_DOMAIN error branch [branch: DEBUG-v011]
2026-06-02 15:11:24 app_v2/src/main/res/values/strings.xml spec-dev S0329 P03: calculator_error_math_domain (en) [branch: DEBUG-v011]
2026-06-02 15:12:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt spec-dev S0329 P01: add scientific unary functions, power operator, pi, MATH_DOMAIN error [branch: DEBUG-v011]
2026-06-02 15:12:01 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt spec-dev S0329 P01: unit tests for scientific functions and domain errors [branch: DEBUG-v011]
2026-06-02 15:12:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt spec-dev S0329 P01/P03: render MATH_DOMAIN error branch [branch: DEBUG-v011]
2026-06-02 15:12:01 app_v2/src/main/res/values/strings.xml spec-dev S0329 P03: calculator_error_math_domain trilingual [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorExpressionEvaluator.kt spec-dev S0329 P06: expression evaluator (precedence, parens, sqrt, implicit sum, decimal normalization) [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorExpressionEvaluatorTest.kt spec-dev S0329 P06: evaluator unit tests [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt spec-dev S0329 P06/P02: route inputNumber through evaluator; restoreHistory [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorHistoryStore.kt spec-dev S0329 P02: persistent file-backed history store [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt spec-dev S0329 P02/P03: load/append/clear persisted history; Function submenu [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/main/res/values/strings.xml spec-dev S0329 P03: Function submenu strings (en) [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/main/res/values-ru/strings.xml spec-dev S0329 P03: Function submenu strings (ru) [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/main/res/values-uk/strings.xml spec-dev S0329 P03: Function submenu strings (uk) [branch: DEBUG-v011]
2026-06-02 15:28:31 app_v2/src/main/res/layout/activity_calculator.xml spec-dev S0329 P04: portrait buttons pinned to bottom, history fills top [branch: DEBUG-v011]
2026-06-02 15:33:44 docs/FEATURES.md spec-dev S0329 P07: calculator persistent history + scientific functions + expression eval (en) [branch: DEBUG-v011]
2026-06-02 15:33:44 docs/FEATURES_RU.md spec-dev S0329 P07: calculator feature (ru) [branch: DEBUG-v011]
2026-06-02 15:33:44 docs/FEATURES_UK.md spec-dev S0329 P07: calculator feature (uk) [branch: DEBUG-v011]
2026-06-02 15:33:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt spec-dev S0329: defer selection eval until history load; BlockNeedUserTest debug tags [branch: DEBUG-v011]
2026-06-02 15:35:29 PLAN/S0330_player-control-menu-redesign.md spec Add strategic spec S0330 for player control menu redesign [branch: DEBUG-v011]
2026-06-02 15:39:34 PLAN/S0330_player-control-menu-redesign.md spec-update Approve S0330 owner inputs for implementation [branch: DEBUG-v011]
2026-06-02 15:41:03 PLAN/S0330_player-control-menu-redesign/INDEX.md spec-tech Create tactical plan for S0330 [branch: DEBUG-v011]
2026-06-02 15:41:03 PLAN/S0330_player-control-menu-redesign/PHASE_01__navigation-redesign.md spec-tech Phase 01 navigation redesign [branch: DEBUG-v011]
2026-06-02 15:41:03 PLAN/S0330_player-control-menu-redesign/PHASE_02__docs-catalog-cleanup.md spec-tech Phase 02 docs catalog cleanup [branch: DEBUG-v011]
2026-06-02 15:41:03 PLAN/S0330_player-control-menu-redesign.md spec-tech Status to Tactical [branch: DEBUG-v011]
2026-06-02 15:44:10 app_v2/src/main/res/layout/dialog_playback_control.xml ui Replace playback control radio tabs with portrait segmented menu [branch: DEBUG-v011]
2026-06-02 15:44:10 app_v2/src/main/res/layout-land/dialog_playback_control.xml ui Replace playback control landscape tabs with left navigation rail [branch: DEBUG-v011]
2026-06-02 15:44:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlPreferences.kt ui Add stable playback control section preference key [branch: DEBUG-v011]
2026-06-02 15:46:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt ui Wire playback control menu navigation to stable sections [branch: DEBUG-v011]
2026-06-02 15:50:55 PLAN/S0330_player-control-menu-redesign.md spec-dev Block S0330 closeout on unrelated build failure [branch: DEBUG-v011]
2026-06-02 15:50:55 PLAN/S0330_player-control-menu-redesign/INDEX.md spec-dev Record S0330 build blocker [branch: DEBUG-v011]
2026-06-02 15:50:55 PLAN/S0330_player-control-menu-redesign/PHASE_01__navigation-redesign.md spec-dev Record Phase 01 build blocker [branch: DEBUG-v011]
2026-06-02 15:51:31 PLAN/S0330_player-control-menu-redesign/PHASE_02__docs-catalog-cleanup.md spec-dev Fix S0330 tactical placeholder style [branch: DEBUG-v011]
2026-06-02 15:54:20 PLAN/S0331_calculator-memory-and-modulo.md spec Add strategic spec S0331 for calculator memory register and modulo [branch: DEBUG-v011]
2026-06-02 15:57:37 PLAN/S0331_calculator-memory-and-modulo/INDEX.md spec-tech Create tactical plan for S0331 (5 phases) [branch: DEBUG-v011]
2026-06-02 15:57:37 PLAN/S0331_calculator-memory-and-modulo.md spec-tech S0331 status -> Tactical [branch: DEBUG-v011]
2026-06-02 16:09:40 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PresetMatrix.kt PresetMatrix Add PresetMatrix domain model for device profile configuration defaults [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/core/di/RepositoryModule.kt RepositoryModule Provide PresetMatrix via Hilt dependency injection [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/SettingsRepository.kt SettingsRepository Add applyBatchSettings declaration to repository contract [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Implement applyBatchSettings using DataStore preferences [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyProfilePresetUseCase.kt ApplyProfilePresetUseCase Add UseCase to apply configuration presets based on selected device profile [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel Inject and invoke ApplyProfilePresetUseCase on profile selection and skip [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsProfileViewModel.kt SettingsProfileViewModel Inject and invoke ApplyProfilePresetUseCase on settings profile updates [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsProfileDialogFragment.kt SettingsProfileDialogFragment Handle migration explanation hint and dynamic warning message visibility [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/DeviceProfileRepository.kt DeviceProfileRepository Add isMigrationExisting declaration to repository contract [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/RealDeviceProfileRepository.kt RealDeviceProfileRepository Implement isMigrationExisting and fix existing install migration [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/res/values/strings.xml strings.xml Add settings_profile_migration_hint English resource key [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/res/values-ru/strings.xml strings_ru Add settings_profile_migration_hint Russian translation key [branch: DEBUG-v011]
2026-06-02 16:09:41 app_v2/src/main/res/values-uk/strings.xml strings_uk Add settings_profile_migration_hint Ukrainian translation key [branch: DEBUG-v011]
2026-06-02 16:10:07 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeSettingsRepository.kt FakeSettingsRepository Implement applyBatchSettings for unit testing settings repository fake [branch: DEBUG-v011]
2026-06-02 16:12:59 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeSettingsRepository.kt FakeSettingsRepository Remove duplicate applyBatchSettings stub to fix compilation conflict [branch: DEBUG-v011]
2026-06-02 16:12:59 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/RealDeviceProfileRepository.kt RealDeviceProfileRepository Remove unused deprecated PreferenceManager import [branch: DEBUG-v011]
2026-06-02 16:13:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt spec-dev S0331 P01/P02: memory register, M-ops, mod operator, restoreMemory [branch: DEBUG-v011]
2026-06-02 16:13:53 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt spec-dev S0331 P01: memory and modulo unit tests [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorMemoryStore.kt spec-dev S0331 P02: persistent memory + row-state store [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt spec-dev S0331 P04: memory buttons, toggle, indicator, mod menu, persistence [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/res/values/themes.xml spec-dev S0331 P03: operator/plus/memory button styles [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/res/values/dimens.xml spec-dev S0331 P03: plus/memory text sizes, memory row height [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/res/values/colors.xml spec-dev S0331 P03: calculator_plus_button_text red [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/res/layout/activity_calculator.xml spec-dev S0331 P03: memory row+toggle+indicator, operator styles (portrait) [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/res/layout-land/activity_calculator.xml spec-dev S0331 P03: memory row+toggle+indicator, operator styles (landscape) [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/res/values/strings.xml spec-dev S0331 P04: mod + memory strings (en) [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/res/values-ru/strings.xml spec-dev S0331 P04: mod + memory strings (ru) [branch: DEBUG-v011]
2026-06-02 16:13:54 app_v2/src/main/res/values-uk/strings.xml spec-dev S0331 P04: mod + memory strings (uk) [branch: DEBUG-v011]
2026-06-02 16:13:54 docs/FEATURES.md spec-dev S0331 P05: calculator memory + modulo (en) [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngine.kt spec-dev S0331 P01/P02: memory register, M-ops, mod operator, restoreMemory [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/test/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorEngineTest.kt spec-dev S0331 P01: memory and modulo unit tests [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorMemoryStore.kt spec-dev S0331 P02: persistent memory store [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt spec-dev S0331 P04: memory buttons, toggle, indicator, mod menu [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/res/values/themes.xml spec-dev S0331 P03: operator/plus/memory styles [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/res/values/dimens.xml spec-dev S0331 P03: text sizes and row height [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/res/values/colors.xml spec-dev S0331 P03: plus button red [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/res/layout/activity_calculator.xml spec-dev S0331 P03: memory row + operator styles (portrait) [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/res/layout-land/activity_calculator.xml spec-dev S0331 P03: memory row + operator styles (landscape) [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/res/values/strings.xml spec-dev S0331 P04: mod + memory strings (en) [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/res/values-ru/strings.xml spec-dev S0331 P04: mod + memory strings (ru) [branch: DEBUG-v011]
2026-06-02 16:14:36 app_v2/src/main/res/values-uk/strings.xml spec-dev S0331 P04: mod + memory strings (uk) [branch: DEBUG-v011]
2026-06-02 16:14:37 docs/FEATURES.md spec-dev S0331 P05: calculator memory + modulo (en) [branch: DEBUG-v011]
2026-06-02 16:17:02 PLAN/S0331_calculator-memory-and-modulo.md spec-dev S0331 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v011]
2026-06-02 16:52:28 app_v2/src/test/java/com/sza/fastmediasorter/data/detector/RealDeviceProfileDetectorTest.kt RealDeviceProfileDetectorTest Add unit tests for device profile detector: VR, automotive, TV, tablet, phone signals plus low-confidence fallback and VR priority [branch: DEBUG-v011]
2026-06-02 16:52:29 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PresetMatrix.kt PresetMatrix Mark preset matrix values as provisional pending owner approval; document subset scope [branch: DEBUG-v011]
2026-06-02 16:52:29 app_v2/src/main/java/com/sza/fastmediasorter/core/di/RepositoryModule.kt RepositoryModule Annotate preset matrix provider values as provisional best-guess, not owner-approved [branch: DEBUG-v011]
2026-06-02 16:52:29 PLAN/S0327_device-profile-onboarding.md spec-check Re-audit device profile onboarding: Verified to Partial; reconcile tracking; record open matrix, doc and asset items [branch: DEBUG-v011]
2026-06-02 16:52:29 PLAN/S0327_device-profile-onboarding/INDEX.md INDEX Reconcile tactical tracking with actual code; add Remaining-for-Verified block; mark matrix provisional [branch: DEBUG-v011]
2026-06-02 16:52:29 PLAN/S0327_device-profile-onboarding/PHASE_01__foundations.md PHASE_01 Fix database file paths in Files Touched to data/local/db [branch: DEBUG-v011]
2026-06-02 16:52:29 PLAN/S0327_device-profile-onboarding/PHASE_02__detector.md PHASE_02 Mark detector implementation, test and injection steps done with verification logs [branch: DEBUG-v011]
2026-06-02 16:52:29 PLAN/S0327_device-profile-onboarding/PHASE_03__repository.md PHASE_03 Correct phase status from Not started to Done; mark all repository steps done [branch: DEBUG-v011]
2026-06-02 16:52:29 PLAN/S0327_device-profile-onboarding/PHASE_07__preset-apply.md PHASE_07 Mark phase done with provisional matrix note; correct done criteria [branch: DEBUG-v011]
2026-06-02 16:52:29 PLAN/S0327_device-profile-onboarding/PHASE_08__migration-existing.md PHASE_08 Fix strings resource paths in Files Touched to src/main/res [branch: DEBUG-v011]
2026-06-02 17:15:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt S0330 Insert BlockNeedUserTest probe at section-navigation setup [branch: DEBUG-v011]
2026-06-02 17:15:20 PLAN/S0330_player-control-menu-redesign/INDEX.md S0330 Close Phase 01+02; build green; move to BlockNeedUserTest for device verification [branch: DEBUG-v011]
2026-06-02 17:23:10 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/RealDeviceProfileRepository.kt RealDeviceProfileRepository Move first-run bootstrap fully onto Dispatchers.IO; add device-test probe for existing-install migration [branch: DEBUG-v011]
2026-06-02 17:23:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel Add device-test probes for profile auto-detection and welcome save flows [branch: DEBUG-v011]
2026-06-02 17:23:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsProfileViewModel.kt SettingsProfileViewModel Add device-test probe for settings profile change flow [branch: DEBUG-v011]
2026-06-02 17:23:10 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyProfilePresetUseCase.kt ApplyProfilePresetUseCase Add device-test probe for preset matrix application [branch: DEBUG-v011]
2026-06-02 17:23:10 app_v2/src/main/res/drawable/ic_profile_personal_smartphone.xml ic_profile_set Add unified vector profile icon set (11 icons: smartphone, tablet, tv, car, media, photo frame, video, audio, ebook, vr, other) [branch: DEBUG-v011]
2026-06-02 17:23:10 dev/DEVICE_PROFILE_PRESET_MATRIX.md DEVICE_PROFILE_PRESET_MATRIX New developer doc: device profile rationale, provisional preset matrix with change rules, and profile icon asset registry [branch: DEBUG-v011]
2026-06-02 17:23:10 CLAUDE.md CLAUDE.md Reference device profile preset matrix doc in research order [branch: DEBUG-v011]
2026-06-02 17:23:10 dev/PROJECT_OPERATIONS_INDEX.md PROJECT_OPERATIONS_INDEX Reference device profile preset matrix doc in research routing [branch: DEBUG-v011]
2026-06-02 17:23:10 docs/DOCS_MAP.md DOCS_MAP Register device profile preset matrix doc in documentation map [branch: DEBUG-v011]
2026-06-02 17:23:10 PLAN/S0327_device-profile-onboarding.md spec-readiness Move to BlockNeedUserTest; add device test plan and readiness summary [branch: DEBUG-v011]
2026-06-02 17:23:11 PLAN/S0327_device-profile-onboarding/INDEX.md INDEX Update status to BlockNeedUserTest; refresh remaining-for-verified block [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/QUICK_START.md QUICK_START Add first-launch device profile picker section [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/QUICK_START_RU.md QUICK_START_RU Add first-launch device profile picker section (Russian) [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/QUICK_START_UK.md QUICK_START_UK Add first-launch device profile picker section (Ukrainian) [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/README.md README Mention first-launch device profile picker with link to quick start [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/README_RU.md README_RU Mention first-launch device profile picker (Russian) [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/README_UK.md README_UK Mention first-launch device profile picker (Ukrainian) [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/howto/index.md howto-index Note device profile picker pre-tunes scenarios [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/howto/index-ru.md howto-index-ru Note device profile picker pre-tunes scenarios (Russian) [branch: DEBUG-v011]
2026-06-02 17:23:11 docs/howto/index-uk.md howto-index-uk Note device profile picker pre-tunes scenarios (Ukrainian) [branch: DEBUG-v011]
2026-06-02 17:53:51 app_v2/src/main/res/values/strings.xml device profiles Rename HOME_TABLET profile display name from ‘Home tablet’ to ‘Tablet & desktop mode’ (EN/RU/UK), reword desc to cover tablets/Chromebook/Samsung DeX; update QUICK_START docs and preset matrix doc [branch: DEBUG-v011]
2026-06-02 17:59:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MouseEventHandler.kt MouseEventHandler Add consumePrimaryClick flag; when false the primary left click is not consumed so it reaches the view under the cursor [branch: DEBUG-v011]
2026-06-02 17:59:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/ActivityMouseDispatchHelper.kt ActivityMouseDispatchHelper Set consumePrimaryClick=false so activity-level mouse dispatch never steals left clicks from buttons, dropdowns and other controls [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/DeviceProfileUi.kt DeviceProfileUi Central mapping of device profile type to icon, title and description resources [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/profile/DeviceProfileTileAdapter.kt DeviceProfileTileAdapter Grid adapter of pressable profile tiles with selection highlight and recommended badge [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/profile/DeviceProfilePickerDialogFragment.kt DeviceProfilePickerDialogFragment Shared full-screen device profile picker (tile grid + description), returns selection via FragmentResult; reused by Welcome and Settings [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt WelcomePagerAdapter Replace profile dropdown with a pressable selected-profile card that opens the picker; drop dead description helper [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity Open shared profile picker from the welcome card and apply the FragmentResult selection [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsProfileHelper.kt GeneralSettingsProfileHelper Open shared profile picker with overwrite warning and apply selection; centralize title via DeviceProfileUi [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsProfileDialogFragment.kt SettingsProfileDialogFragment Remove orphaned spinner-based profile dialog, superseded by the shared tile picker [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/res/layout/item_device_profile_tile.xml item_device_profile_tile New pressable MaterialCardView tile (icon plus title) for the profile picker grid [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/res/layout/dialog_device_profile_picker.xml dialog_device_profile_picker New shared profile picker dialog layout (tile grid, description, select and cancel) [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/res/layout/page_welcome_enhanced.xml page_welcome_enhanced Replace profile dropdown with pressable selected-profile card (portrait and layout-land in sync) [branch: DEBUG-v011]
2026-06-02 18:23:03 app_v2/src/main/res/values/strings.xml strings Add profile_picker_title and profile_picker_select (EN/RU/UK) [branch: DEBUG-v011]
2026-06-02 18:25:35 dev/DEVICE_PROFILE_PRESET_MATRIX.md DEVICE_PROFILE_PRESET_MATRIX Note profile icons are now wired into the shared device-profile picker [branch: DEBUG-v011]
2026-06-02 18:25:35 PLAN/S0327_device-profile-onboarding.md spec Record visual tile picker wired into Welcome and Settings; drop the deferred-UI remaining item [branch: DEBUG-v011]
2026-06-02 18:25:35 PLAN/S0327_device-profile-onboarding/INDEX.md INDEX Mark profile icon set wired into the shared tile picker [branch: DEBUG-v011]
2026-06-02 20:43:15 app_v2/src/main/res/layout/item_device_profile_tile.xml item_device_profile_tile Redesign tile to horizontal info card: small leading icon, large bold title, two-line description [branch: DEBUG-v011]
2026-06-02 20:43:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/profile/DeviceProfileTileAdapter.kt DeviceProfileTileAdapter Bind per-tile description; include it in tile content description [branch: DEBUG-v011]
2026-06-02 20:43:15 app_v2/src/main/res/layout/dialog_device_profile_picker.xml dialog_device_profile_picker Remove bottom selected-description (now shown per tile) [branch: DEBUG-v011]
2026-06-02 20:43:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/profile/DeviceProfilePickerDialogFragment.kt DeviceProfilePickerDialogFragment Scale picker columns by smallest width (3/2/1) for readable info tiles; drop bottom-description handling [branch: DEBUG-v011]
2026-06-02 22:36:16 app_v2/src/main/res/layout/dialog_device_profile_picker.xml dialog_device_profile_picker Centered content-sized card (rounded, transparent window); remove confirm/cancel buttons and bottom description [branch: DEBUG-v011]
2026-06-02 22:36:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/profile/DeviceProfilePickerDialogFragment.kt DeviceProfilePickerDialogFragment Tap-tile-to-select-and-close (Settings keeps overwrite warning); center window and size to content with transparent background [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/main/assets/device_profile_presets.csv device_profile_presets Owner-authored device profile preset matrix as CSV asset (7 profiles + 4 seeded columns: media/video<-tv, audio<-car, ebook<-home_tablet) [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetCsvDataSource.kt DeviceProfilePresetCsvDataSource Parse preset CSV asset into per-profile non-empty override maps (cached) [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt DeviceProfilePresetApplier Typed applier: coerce CSV cell to AppSettings field (bool/int/float/size-units/enum/string), skip unknown [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyProfilePresetUseCase.kt ApplyProfilePresetUseCase Apply profile by folding CSV overrides over current settings and saving; OTHER and no-override profiles are no-ops [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/SettingsRepository.kt SettingsRepository Remove applyBatchSettings (superseded by CSV preset engine) [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Remove applyBatchSettings implementation [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/main/java/com/sza/fastmediasorter/core/di/RepositoryModule.kt RepositoryModule Remove providePresetMatrix provider (CSV engine replaces hardcoded matrix) [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/PresetMatrix.kt PresetMatrix Delete provisional 5-field preset matrix model, replaced by CSV-driven engine [branch: DEBUG-v011]
2026-06-02 23:08:08 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ApplyProfilePresetUseCaseTest.kt ApplyProfilePresetUseCaseTest Rewrite for CSV apply flow (override applied; no-override profile is no-op) [branch: DEBUG-v011]
2026-06-02 23:10:36 dev/DEVICE_PROFILE_PRESET_MATRIX.md DEVICE_PROFILE_PRESET_MATRIX Rewrite for CSV-driven owner-authored matrix: format, size-unit conventions, how-to-change, data caveats [branch: DEBUG-v011]
2026-06-02 23:10:36 PLAN/S0327_device-profile-onboarding.md spec Record CSV-driven matrix; mark owner-gate 6.1 resolved (matrix now owner-authored CSV, verified on device) [branch: DEBUG-v011]
2026-06-02 23:10:36 PLAN/S0327_device-profile-onboarding/INDEX.md INDEX Mark matrix owner approval done via CSV; note CSV data fixes remaining [branch: DEBUG-v011]
2026-06-02 23:38:38 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetCsvDataSource.kt DeviceProfilePresetCsvDataSource Robust CSV field parser: handle quoted spreadsheet exports (strip quotes, unescape doubled quotes, keep embedded commas) [branch: DEBUG-v011]
2026-06-02 23:38:38 scripts/check_device_profile_presets.ps1 check_device_profile_presets New consistency guard: verify AppSettings fields <-> CSV rows and DeviceProfileType <-> CSV columns; -AddMissing scaffolds empty rows/columns; exit 1 on mismatch [branch: DEBUG-v011]
2026-06-02 23:38:38 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt AppSettings KDoc: adding a field requires a matching device-profile preset CSV row (check script) [branch: DEBUG-v011]
2026-06-02 23:38:38 app_v2/src/main/java/com/sza/fastmediasorter/data/model/DeviceProfile.kt DeviceProfileType KDoc: adding a profile requires a CSV column + COLUMN_TO_PROFILE + DeviceProfileUi mapping [branch: DEBUG-v011]
2026-06-02 23:38:38 dev/DEVICE_PROFILE_PRESET_MATRIX.md DEVICE_PROFILE_PRESET_MATRIX Document consistency-check script and quoted/plain CSV support [branch: DEBUG-v011]
2026-06-02 23:38:38 dev/PROJECT_OPERATIONS_INDEX.md PROJECT_OPERATIONS_INDEX Reference preset CSV asset and consistency-check script [branch: DEBUG-v011]
2026-06-02 23:56:58 PLAN/S0332_max-translation-ocr-languages.md spec Add strategic spec S0332 for maximum translation and OCR language coverage [branch: DEBUG-v011]
2026-06-03 00:00:29 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetCsvDataSource.kt DeviceProfilePresetCsvDataSource Strip leading UTF-8 BOM from spreadsheet-exported CSV lines [branch: DEBUG-v011]
2026-06-03 00:08:20 PLAN/S0332_max-translation-ocr-languages.md spec-update Refinement: added mandatory 3.3 Owner inputs approval-gate section (was failing check-owner-inputs.ps1), Revision History, P-1 structural proposal [branch: DEBUG-v011]
2026-06-03 00:09:41 PLAN/S0332_max-translation-ocr-languages.md spec-update Refinement (gemini-3.5-flash, focus: language, structure, completeness, style) [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/profile/DeviceProfileAvailability.kt DeviceProfileAvailability New flavor-gated interface for selectable device profiles (VR gated by flavor) [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/vrStub/java/com/sza/fastmediasorter/di/VrStubDeviceProfileAvailabilityModule.kt VrStubDeviceProfileAvailabilityModule Non-VR flavors: hide VR headset profile from the picker [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/vr/java/com/sza/fastmediasorter/di/VrDeviceProfileAvailabilityModule.kt VrDeviceProfileAvailabilityModule VR-capable flavors (vr/noLegal): all profiles incl VR headset selectable [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/profile/DeviceProfilePickerDialogFragment.kt DeviceProfilePickerDialogFragment Inject DeviceProfileAvailability; list flavor-selectable profiles (no BuildConfig in main) [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel Fall back recommendation when detected profile is unavailable in this flavor [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/profile/DeviceProfileTileAdapter.kt DeviceProfileTileAdapter Brighter thicker frame on the auto-detected (recommended) tile [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/main/java/com/sza/fastmediasorter/data/detector/DetectionHelper.kt DetectionHelper Add UiModeManager mode type, PC feature, Chromebook (ARC) detection helpers [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/main/java/com/sza/fastmediasorter/data/detector/RealDeviceProfileDetector.kt RealDeviceProfileDetector Strengthen detection: UiModeManager-first car/TV/VR/desk + Chromebook/PC to tablet-and-desktop [branch: DEBUG-v011]
2026-06-03 00:22:16 app_v2/src/test/java/com/sza/fastmediasorter/data/detector/RealDeviceProfileDetectorTest.kt RealDeviceProfileDetectorTest Stub new helpers; add UiMode car + Chromebook detection tests [branch: DEBUG-v011]
2026-06-03 00:22:17 PLAN/S0332_max-translation-ocr-languages.md spec-tech Status -> Tactical [branch: DEBUG-v011]
2026-06-03 00:22:17 PLAN/S0332_max-translation-ocr-languages/INDEX.md spec-tech Create tactical plan for S0332 [branch: DEBUG-v011]
2026-06-03 00:22:17 PLAN/S0332_max-translation-ocr-languages/PHASE_01__foundations.md spec-tech Phase 01: foundations [branch: DEBUG-v011]
2026-06-03 00:22:18 PLAN/S0332_max-translation-ocr-languages/PHASE_02__ui-picker.md spec-tech Phase 02: ui-picker [branch: DEBUG-v011]
2026-06-03 00:22:18 PLAN/S0332_max-translation-ocr-languages/PHASE_03__integration.md spec-tech Phase 03: integration [branch: DEBUG-v011]
2026-06-03 00:22:18 PLAN/S0332_max-translation-ocr-languages/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v011]
2026-06-03 00:24:09 PLAN/S0327_device-profile-onboarding.md spec Record VR profile flavor-gating (11.8 done) and recommended-tile highlight; detector strengthened [branch: DEBUG-v011]
2026-06-03 00:28:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationLanguageCatalog.kt app_v2 Add unified translation language catalog [branch: DEBUG-v011]
2026-06-03 00:30:16 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/TranslationLanguageCatalogTest.kt app_v2 Add translation language catalog unit tests [branch: DEBUG-v011]
2026-06-03 00:36:20 app_v2/src/main/res/layout/dialog_searchable_language_picker.xml app_v2 Add searchable language picker dialog layout [branch: DEBUG-v011]
2026-06-03 00:36:21 app_v2/src/main/res/layout/item_searchable_language.xml app_v2 Add searchable language picker row layout [branch: DEBUG-v011]
2026-06-03 00:38:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SearchableLanguagePickerDialog.kt app_v2 Add searchable language picker dialog [branch: DEBUG-v011]
2026-06-03 00:46:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt app_v2 Integrate searchable translation language picker in settings [branch: DEBUG-v011]
2026-06-03 00:47:56 app_v2/src/main/res/layout/fragment_settings_other.xml app_v2 Replace settings translation language spinners with clickable selectors [branch: DEBUG-v011]
2026-06-03 00:47:58 app_v2/src/main/res/layout-land/fragment_settings_other.xml app_v2 Replace landscape settings translation language spinners with clickable selectors [branch: DEBUG-v011]
2026-06-03 00:51:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt Welcome Refresh visible profile card directly; ViewPager2 notifyItemChanged is unreliable for the current page [branch: DEBUG-v011]
2026-06-03 00:51:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt Welcome Call direct profile-card refresh after state change so the summary card matches the pick [branch: DEBUG-v011]
2026-06-03 00:51:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MouseEventHandler.kt S0333 Add primary-click passthrough probe tag (BlockNeedUserTest device verification) [branch: DEBUG-v011]
2026-06-03 00:51:30 app_v2/src/test/java/com/sza/fastmediasorter/ui/common/MouseEventHandlerTest.kt S0333 Fix stale MotionEvent mock (getToolType/actionButton) and add primary-click passthrough regression guards [branch: DEBUG-v011]
2026-06-03 00:51:30 PLAN/S0333_bugfix-mouse-primary-click-dispatch.md spec Add bugfix spec S0333 for mouse primary-click dispatch regression [branch: DEBUG-v011]
2026-06-03 00:51:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationButtonManager.kt app_v2 Integrate searchable translation language picker in player dialog [branch: DEBUG-v011]
2026-06-03 00:52:44 app_v2/src/main/res/layout/dialog_translation_settings.xml app_v2 Replace player translation language spinners with clickable selectors [branch: DEBUG-v011]
2026-06-03 00:52:45 app_v2/src/main/res/layout-land/dialog_translation_settings.xml app_v2 Replace landscape player translation language spinners with clickable selectors [branch: DEBUG-v011]
2026-06-03 00:54:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt app_v2 Integrate searchable language picker in Camera OCR settings [branch: DEBUG-v011]
2026-06-03 00:55:40 app_v2/src/main/res/layout/dialog_camera_ocr_settings.xml app_v2 Replace Camera OCR language spinners with clickable selectors [branch: DEBUG-v011]
2026-06-03 00:56:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt app_v2 Expand ML Kit language mapping through shared catalog [branch: DEBUG-v011]
2026-06-03 00:57:48 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/TranslationLanguageCatalogTest.kt app_v2 Add Czech ML Kit mapping regression test [branch: DEBUG-v011]
2026-06-03 01:03:05 docs/FEATURES.md docs Document expanded searchable translation language picker [branch: DEBUG-v011]
2026-06-03 01:03:06 docs/FEATURES_RU.md docs Document expanded searchable translation language picker in Russian [branch: DEBUG-v011]
2026-06-03 01:03:07 docs/FEATURES_UK.md docs Document expanded searchable translation language picker in Ukrainian [branch: DEBUG-v011]
2026-06-03 01:05:35 PLAN/S0333_bugfix-mouse-primary-click-dispatch.md spec-test-device Device run on emulator-5554 (standardDebug) -> PASS/FAIL/SKIPPED 4/0/1; S0333 probe fired once, no crash; Welcome card refresh + S0327 picker confirmed [branch: DEBUG-v011]
2026-06-03 01:07:49 PLAN/S0332_max-translation-ocr-languages.md S0332 Mark S0332 implemented [branch: DEBUG-v011]
2026-06-03 01:07:50 PLAN/S0332_max-translation-ocr-languages/INDEX.md S0332 Update S0332 tactical index completion [branch: DEBUG-v011]
2026-06-03 01:07:50 PLAN/S0332_max-translation-ocr-languages/PHASE_01__foundations.md S0332 Record S0332 foundation phase completion [branch: DEBUG-v011]
2026-06-03 01:07:51 PLAN/S0332_max-translation-ocr-languages/PHASE_02__ui-picker.md S0332 Record S0332 UI picker phase completion [branch: DEBUG-v011]
2026-06-03 01:07:51 PLAN/S0332_max-translation-ocr-languages/PHASE_03__integration.md S0332 Record S0332 integration phase completion [branch: DEBUG-v011]
2026-06-03 01:07:52 PLAN/S0332_max-translation-ocr-languages/PHASE_04__docs-catalog-cleanup.md S0332 Record S0332 docs phase completion [branch: DEBUG-v011]
2026-06-03 01:21:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationLanguageCatalog.kt TranslationLanguageCatalog Add language capability metadata for translation and OCR picker labels [branch: DEBUG-v011]
2026-06-03 01:21:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SearchableLanguagePickerDialog.kt SearchableLanguagePickerDialog Show localized language capability labels in searchable picker rows [branch: DEBUG-v011]
2026-06-03 01:21:38 app_v2/src/main/res/layout/item_searchable_language.xml item_searchable_language Add second row for language capability labels [branch: DEBUG-v011]
2026-06-03 01:21:38 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/TranslationLanguageCatalogTest.kt TranslationLanguageCatalogTest Cover Czech basic OCR and noLegal capability metadata [branch: DEBUG-v011]
2026-06-03 01:21:38 app_v2/src/main/res/values/strings.xml language_capability_* Add English language capability labels [branch: DEBUG-v011]
2026-06-03 01:21:38 app_v2/src/main/res/values-ru/strings.xml language_capability_* Add Russian language capability labels [branch: DEBUG-v011]
2026-06-03 01:21:38 app_v2/src/main/res/values-uk/strings.xml language_capability_* Add Ukrainian language capability labels [branch: DEBUG-v011]
2026-06-03 01:21:38 docs/FEATURES.md S0332 features Document language picker capability labels [branch: DEBUG-v011]
2026-06-03 01:21:38 docs/FEATURES_RU.md S0332 features RU Document language picker capability labels in Russian [branch: DEBUG-v011]
2026-06-03 01:21:38 docs/FEATURES_UK.md S0332 features UK Document language picker capability labels in Ukrainian [branch: DEBUG-v011]
2026-06-03 01:21:38 PLAN/S0332_max-translation-ocr-languages/PHASE_01__foundations.md S0332 phase 01 Record capability metadata completion [branch: DEBUG-v011]
2026-06-03 01:21:38 PLAN/S0332_max-translation-ocr-languages/PHASE_02__ui-picker.md S0332 phase 02 Record picker capability label completion [branch: DEBUG-v011]
2026-06-03 01:21:38 PLAN/S0332_max-translation-ocr-languages/PHASE_04__docs-catalog-cleanup.md S0332 phase 04 Record capability label docs completion [branch: DEBUG-v011]
2026-06-03 01:41:38 PLAN/S0332_max-translation-ocr-languages.md spec-check Audit S0332 -> Partial: implementation complete (PASS 27 / WARN 1 / FAIL 0), but strategic spec artifact corrupted (duplicate S7-S12 tail, mojibake, conflicting S11 counts); flipped Status to Partial and added Last Audit block [branch: DEBUG-v011]
2026-06-03 01:47:44 app_v2/src/main/java/com/sza/fastmediasorter/utils/ViewExtensions.kt ViewExtensions Add reusable system bar inset padding helper [branch: DEBUG-v011]
2026-06-03 01:48:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt CameraOcrTranslateActivity Apply system bar safe padding to camera OCR result states [branch: DEBUG-v011]
2026-06-03 01:49:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameHelpActivity.kt GameHelpActivity Apply system bar safe padding to game help screen [branch: DEBUG-v011]
2026-06-03 01:50:30 CLAUDE.md ProjectRules Document mandatory system bar safe area rule [branch: DEBUG-v011]
2026-06-03 01:50:31 AGENTS.md ProjectRules Document mandatory system bar safe area rule [branch: DEBUG-v011]
2026-06-03 01:50:31 .github/copilot-instructions.md ProjectRules Document mandatory system bar safe area rule [branch: DEBUG-v011]
2026-06-03 02:06:01 PLAN/S0332_max-translation-ocr-languages.md spec-check Re-audit S0332 -> Verified: implementation passes all static checks; repaired corrupted strategic artifact (split scope/S1 header, removed duplicated S7-S12 tail + mojibake splice, P-1 marked Applied), Status and Last Audit set to Verified [branch: DEBUG-v011]
2026-06-03 02:06:23 PLAN/S0332_max-translation-ocr-languages/INDEX.md spec-check Checked Completion Gate item: strategic Status advanced to Verified [branch: DEBUG-v011]
2026-06-03 02:10:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/ActivityMouseDispatchHelper.kt ActivityMouseDispatchHelper S0289: mouse wheel walks up to nearest scrollable ancestor so long forms scroll from any focus [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/java/com/sza/fastmediasorter/util/KeyboardShortcutHandler.kt KeyboardShortcutHandler S0289: Settings/AddResource use native focus traversal (arrowFocus=false); fixes D-pad Spinner/dropdown reachability [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity S0289: edge-aware slider (FocusFinder) so arrows reach in-page controls; removed dead InputSurface marker [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/res/layout/page_welcome_enhanced.xml page_welcome_enhanced S0289: language picker buttons made focusable (portrait+land) [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt StandalonePlayerActivity S0289: initial focus retargeted from GONE btnPlayPause to always-visible btnBack [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt AddResourceActivity S0289: initial focus -> first visible resource-type card when btnAddToResources is hidden [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/res/layout/activity_keybinding_remap.xml activity_keybinding_remap S0289: explicit focus chain back->search->list->resetAll [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/res/layout/activity_main.xml activity_main S0289: empty-state CTA made focusable+clickable with nextFocusUp (portrait+land) [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/res/layout/fragment_duplicates.xml fragment_duplicates S0289: rvDuplicates nextFocusDown -> delete FAB so D-pad reaches it [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/CloudFolderAdapter.kt CloudFolderAdapter S0289: row ENTER/click navigates into folder; Select button confirms destination (3 cloud pickers) [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity S0289: removed dead isHudFocused(); restored HUD-focus debug probe [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerInputDispatcher.kt PlayerInputDispatcher S0289: added gamepad-analog debug probe (was missing from the verification gate) [branch: DEBUG-v011]
2026-06-03 02:10:34 app_v2/src/test/java/com/sza/fastmediasorter/core/input/TvKeyRouterTest.kt TvKeyRouterTest S0289: unit guard for the TvKeyRouter key->action table (was manual-only) [branch: DEBUG-v011]
2026-06-03 02:37:02 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-test-device Device run emulator-5554: Welcome D-pad FAILED (ViewPager2 focus interception, owner symptom persists); PASS/FAIL/INCONCLUSIVE 1/2/1 [branch: DEBUG-v011]
2026-06-03 02:51:21 PLAN/S0334_translation-model-prewarm.md spec Add strategic spec S0334 for translation model prewarm on language selection [branch: DEBUG-v011]
2026-06-03 02:56:59 PLAN/S0334_translation-model-prewarm/INDEX.md spec-tech Create tactical plan for S0334 [branch: DEBUG-v011]
2026-06-03 02:56:59 PLAN/S0334_translation-model-prewarm/PHASE_01__prewarm-core.md spec-tech Phase 01: prewarm-core [branch: DEBUG-v011]
2026-06-03 02:56:59 PLAN/S0334_translation-model-prewarm/PHASE_02__settings-trigger.md spec-tech Phase 02: settings-trigger [branch: DEBUG-v011]
2026-06-03 02:56:59 PLAN/S0334_translation-model-prewarm/PHASE_03__settings-ui-status.md spec-tech Phase 03: settings-ui-status [branch: DEBUG-v011]
2026-06-03 02:56:59 PLAN/S0334_translation-model-prewarm/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v011]
2026-06-03 02:56:59 PLAN/S0334_translation-model-prewarm.md spec-tech Status -> Tactical [branch: DEBUG-v011]
2026-06-03 02:59:10 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/TranslationModelPrewarmStatus.kt spec-dev S0334 Phase 01.1: add TranslationModelPrewarmStatus domain model [branch: DEBUG-v011]
2026-06-03 03:01:04 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/PrewarmTranslationModelUseCase.kt spec-dev S0334 Phase 01.2: add PrewarmTranslationModelUseCase [branch: DEBUG-v011]
2026-06-03 03:02:17 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/PrewarmTranslationModelUseCase.kt spec-dev S0334 Phase 01.3: add BlockNeedUserTest probe at prewarm entry [branch: DEBUG-v011]
2026-06-03 03:04:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity Force day (light) resource set for onboarding so welcome pages stay pastel with readable dark text in dark mode (fixes white-on-orange) [branch: DEBUG-v011]
2026-06-03 10:53:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt S0334 Wire translation model prewarm triggers in settings ViewModel [branch: DEBUG-v011]
2026-06-03 10:59:03 app_v2/src/main/res/values/strings.xml S0334 Add translation model prewarm status strings [branch: DEBUG-v011]
2026-06-03 10:59:04 app_v2/src/main/res/values-ru/strings.xml S0334 Add Russian translation model prewarm status strings [branch: DEBUG-v011]
2026-06-03 10:59:05 app_v2/src/main/res/values-uk/strings.xml S0334 Add Ukrainian translation model prewarm status strings [branch: DEBUG-v011]
2026-06-03 11:02:18 app_v2/src/main/res/layout/fragment_settings_other.xml S0334 Add translation model prewarm status row [branch: DEBUG-v011]
2026-06-03 11:02:19 app_v2/src/main/res/layout-land/fragment_settings_other.xml S0334 Add landscape translation model prewarm status row [branch: DEBUG-v011]
2026-06-03 11:02:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt S0334 Render translation model prewarm status in settings [branch: DEBUG-v011]
2026-06-03 11:02:42 PLAN/S0335_settings-system-info-dialog.md spec Add strategic spec S0335 for Settings-Common System info dialog [branch: DEBUG-v011]
2026-06-03 11:06:12 PLAN/S0335_settings-system-info-dialog/INDEX.md spec-tech Create tactical plan for S0335 [branch: DEBUG-v011]
2026-06-03 11:06:12 PLAN/S0335_settings-system-info-dialog/PHASE_01__system-info-collector.md spec-tech Phase 01: system-info-collector [branch: DEBUG-v011]
2026-06-03 11:06:12 PLAN/S0335_settings-system-info-dialog/PHASE_02__settings-button-ui.md spec-tech Phase 02: settings-button-ui [branch: DEBUG-v011]
2026-06-03 11:06:12 PLAN/S0335_settings-system-info-dialog/PHASE_03__wire-and-show.md spec-tech Phase 03: wire-and-show [branch: DEBUG-v011]
2026-06-03 11:06:12 PLAN/S0335_settings-system-info-dialog/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v011]
2026-06-03 11:06:12 PLAN/S0335_settings-system-info-dialog.md spec-tech Status -> Tactical [branch: DEBUG-v011]
2026-06-03 11:07:52 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-dev Add GatherSystemInfoUseCase: collect device/OS/app/memory/storage/display/locale summary [branch: DEBUG-v011]
2026-06-03 11:08:44 dev/CATALOG/app_v2.jsonl S0334 Regenerate app_v2 catalog for translation model prewarm classes [branch: DEBUG-v011]
2026-06-03 11:08:45 docs/FEATURES.md S0334 Confirm no feature inventory update needed for translation model prewarm [branch: DEBUG-v011]
2026-06-03 11:09:47 PLAN/S0334_translation-model-prewarm.md S0334 Move translation model prewarm spec to device verification [branch: DEBUG-v011]
2026-06-03 11:12:13 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCaseTest.kt spec-dev Add GatherSystemInfoUseCaseTest: assert non-blank summary, section labels, version name [branch: DEBUG-v011]
2026-06-03 11:14:52 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev Add System info button to General settings diagnostics row (portrait) [branch: DEBUG-v011]
2026-06-03 11:15:35 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev Add System info button to General settings diagnostics row (landscape) [branch: DEBUG-v011]
2026-06-03 11:16:42 app_v2/src/main/res/values/strings.xml spec-dev Add settings_system_info_button/title strings (EN/RU/UK) [branch: DEBUG-v011]
2026-06-03 11:20:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt spec-dev Inject GatherSystemInfoUseCase, pass to log helper [branch: DEBUG-v011]
2026-06-03 11:21:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt spec-dev Add showSystemInfoDialog + btnSystemInfo binding; S0335 probe tag [branch: DEBUG-v011]
2026-06-03 11:21:55 app_v2/src/main/java/com/sza/fastmediasorter/domain/translation/TranslationLanguageCodeMapper.kt TranslationLanguageCodeMapper added shared ML Kit translation language mapper for model prewarm [branch: DEBUG-v011]
2026-06-03 11:22:50 app_v2/src/main/java/com/sza/fastmediasorter/domain/translation/TranslationModelPrewarmAvailability.kt TranslationModelPrewarmEnabled added flavor availability qualifier for translation model prewarm [branch: DEBUG-v011]
2026-06-03 11:23:53 app_v2/src/main/java/com/sza/fastmediasorter/di/TranslationModelPrewarmModule.kt TranslationModelPrewarmModule added empty multibinding for translation model prewarm availability [branch: DEBUG-v011]
2026-06-03 11:24:54 app_v2/src/translationEnabled/java/com/sza/fastmediasorter/di/TranslationModelPrewarmAvailabilityModule.kt TranslationModelPrewarmAvailabilityModule enabled translation model prewarm only in translation-capable flavors [branch: DEBUG-v011]
2026-06-03 11:25:34 docs/FEATURES.md spec-dev Document System info settings feature (EN) [branch: DEBUG-v011]
2026-06-03 11:25:34 docs/FEATURES_RU.md spec-dev Document System info settings feature (RU) [branch: DEBUG-v011]
2026-06-03 11:25:35 docs/FEATURES_UK.md spec-dev Document System info settings feature (UK) [branch: DEBUG-v011]
2026-06-03 11:26:22 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/PrewarmTranslationModelUseCase.kt PrewarmTranslationModelUseCase removed UI dependency and added silent no-op for disabled translation flavors [branch: DEBUG-v011]
2026-06-03 11:26:23 PLAN/S0335_settings-system-info-dialog.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v011]
2026-06-03 11:27:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationLanguageCatalog.kt TranslationLanguageCatalog reused shared translation language mapper for supported code catalog [branch: DEBUG-v011]
2026-06-03 11:28:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt TranslationManager.languageCodeToMLKit delegated ML Kit language code mapping to shared domain mapper [branch: DEBUG-v011]
2026-06-03 11:29:17 app_v2/build.gradle.kts translationEnabled source set mounted translation model prewarm providers only for translation-capable flavors [branch: DEBUG-v011]
2026-06-03 11:30:27 dev/CATALOG/scripts/scan.ps1 catalog source roots included translationEnabled source set in app catalog scanning [branch: DEBUG-v011]
2026-06-03 11:48:44 PLAN/S0334_translation-model-prewarm/PHASE_04__docs-catalog-cleanup.md S0334 validation handoff recorded post-audit hardening and validation snapshot [branch: DEBUG-v011]
2026-06-03 11:48:44 PLAN/S0334_translation-model-prewarm/INDEX.md S0334 completion gate recorded device verification blocker and hardening summary [branch: DEBUG-v011]
2026-06-03 11:51:32 app_v2/src/test/java/com/sza/fastmediasorter/domain/translation/TranslationLanguageCodeMapperTest.kt TranslationLanguageCodeMapperTest covered shared ML Kit language mapping invariants for translation prewarm [branch: DEBUG-v011]
2026-06-03 11:54:08 PLAN/S0334_translation-model-prewarm/PHASE_04__docs-catalog-cleanup.md S0334 validation handoff recorded targeted mapper test validation [branch: DEBUG-v011]
2026-06-03 12:27:04 PLAN/S0336_nolegal-extended-system-info.md spec Add strategic spec S0336 for noLegal extended system info [branch: DEBUG-v011]
2026-06-03 12:30:46 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev Move System info button into Permissions row (portrait) [branch: DEBUG-v011]
2026-06-03 12:30:46 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev Move System info button into Permissions row (landscape) [branch: DEBUG-v011]
2026-06-03 12:30:46 app_v2/src/main/res/values/strings.xml spec-dev Shorten System info button label to About system (EN/RU/UK) [branch: DEBUG-v011]
2026-06-03 12:30:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-dev Add time, timezone, user name to system info summary [branch: DEBUG-v011]
2026-06-03 12:30:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt spec-dev Remove S0335 probe tag (status leaving BlockNeedUserTest) [branch: DEBUG-v011]
2026-06-03 12:30:46 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCaseTest.kt spec-dev Assert User and Time section labels [branch: DEBUG-v011]
2026-06-03 12:32:38 docs/FEATURES.md spec-dev Refine System info feature copy (fields + placement) [branch: DEBUG-v011]
2026-06-03 12:32:38 docs/FEATURES_RU.md spec-dev Refine System info feature copy RU [branch: DEBUG-v011]
2026-06-03 12:32:38 docs/FEATURES_UK.md spec-dev Refine System info feature copy UK [branch: DEBUG-v011]
2026-06-03 12:32:38 PLAN/S0335_settings-system-info-dialog.md spec-dev S0335 -> Implemented; button relocated, time/timezone/user added [branch: DEBUG-v011]
2026-06-03 12:35:57 PLAN/S0337_system-info-extended-fields.md spec Add strategic spec S0337 for extended system info fields and benchmarks [branch: DEBUG-v011]
2026-06-03 12:38:21 PLAN/S0337_system-info-extended-fields.md spec Resolve S0337 open questions (auto-run, localized labels, include personal fields) [branch: DEBUG-v011]
2026-06-03 12:43:15 PLAN/S0337_system-info-extended-fields/INDEX.md spec-tech Create tactical plan for S0337 [branch: DEBUG-v011]
2026-06-03 12:43:15 PLAN/S0337_system-info-extended-fields/PHASE_01__foundation-sections.md spec-tech Phase 01: foundation-sections [branch: DEBUG-v011]
2026-06-03 12:43:15 PLAN/S0337_system-info-extended-fields/PHASE_02__hardware-system-personal.md spec-tech Phase 02: hardware-system-personal [branch: DEBUG-v011]
2026-06-03 12:43:15 PLAN/S0337_system-info-extended-fields/PHASE_03__battery-display.md spec-tech Phase 03: battery-display [branch: DEBUG-v011]
2026-06-03 12:43:15 PLAN/S0337_system-info-extended-fields/PHASE_04__network.md spec-tech Phase 04: network [branch: DEBUG-v011]
2026-06-03 12:43:15 PLAN/S0337_system-info-extended-fields/PHASE_05__benchmarks.md spec-tech Phase 05: benchmarks [branch: DEBUG-v011]
2026-06-03 12:43:15 PLAN/S0337_system-info-extended-fields/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v011]
2026-06-03 12:43:15 PLAN/S0337_system-info-extended-fields.md spec-tech Status -> Tactical [branch: DEBUG-v011]
2026-06-03 12:44:17 app_v2/src/main/java/com/sza/fastmediasorter/core/systeminfo/SystemInfoSection.kt spec-dev Add SystemInfoSection data model + renderer [branch: DEBUG-v011]
2026-06-03 12:46:38 app_v2/src/main/res/values/strings.xml spec-dev Add sysinfo_ section/field label strings (EN/RU/UK) for S0337 [branch: DEBUG-v011]
2026-06-03 12:50:10 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-dev Refactor system info to localized section-based build [branch: DEBUG-v011]
2026-06-03 12:50:10 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCaseTest.kt spec-dev Assert localized section headers [branch: DEBUG-v011]
2026-06-03 12:50:10 app_v2/src/main/res/values-uk/strings.xml spec-dev Escape UK apostrophes in sysinfo strings [branch: DEBUG-v011]
2026-06-03 12:53:53 PLAN/S0338_camera-ocr-crop-region.md spec Add strategic spec S0338 for camera-OCR crop region before OCR [branch: DEBUG-v011]
2026-06-03 12:56:12 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-dev Add Hardware + System + Personal sections [branch: DEBUG-v011]
2026-06-03 12:56:12 app_v2/src/main/res/values/strings.xml spec-dev Add Hardware/System sysinfo strings (EN) [branch: DEBUG-v011]
2026-06-03 12:56:12 app_v2/src/main/res/values-ru/strings.xml spec-dev Add Hardware/System sysinfo strings (RU) [branch: DEBUG-v011]
2026-06-03 12:56:12 app_v2/src/main/res/values-uk/strings.xml spec-dev Add Hardware/System sysinfo strings (UK) [branch: DEBUG-v011]
2026-06-03 12:57:46 PLAN/S0338_camera-ocr-crop-region/INDEX.md spec-tech Create tactical plan for S0338 (5 phases) [branch: DEBUG-v011]
2026-06-03 12:57:46 PLAN/S0338_camera-ocr-crop-region.md spec-tech Status -> Tactical for S0338 [branch: DEBUG-v011]
2026-06-03 13:01:30 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-dev Add Battery + extended Display sections [branch: DEBUG-v011]
2026-06-03 13:01:30 app_v2/src/main/res/values/strings.xml spec-dev Add Battery/Display sysinfo strings (EN) [branch: DEBUG-v011]
2026-06-03 13:01:30 app_v2/src/main/res/values-ru/strings.xml spec-dev Add Battery/Display sysinfo strings (RU) [branch: DEBUG-v011]
2026-06-03 13:01:30 app_v2/src/main/res/values-uk/strings.xml spec-dev Add Battery/Display sysinfo strings (UK) [branch: DEBUG-v011]
2026-06-03 13:04:30 PLAN/S0336_nolegal-extended-system-info.md S0336 Refined strategic spec: removed Section 0, resolved owner inputs in Section 3.3, and enriched noLegal data collection ideas [branch: DEBUG-v011]
2026-06-03 13:05:55 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-dev Add Network section (transport/metered/vpn/airplane/IP) [branch: DEBUG-v011]
2026-06-03 13:05:55 app_v2/src/main/res/values/strings.xml spec-dev Add Network sysinfo strings (EN) [branch: DEBUG-v011]
2026-06-03 13:05:55 app_v2/src/main/res/values-ru/strings.xml spec-dev Add Network sysinfo strings (RU) [branch: DEBUG-v011]
2026-06-03 13:05:55 app_v2/src/main/res/values-uk/strings.xml spec-dev Add Network sysinfo strings (UK) [branch: DEBUG-v011]
2026-06-03 13:07:49 app_v2/src/main/java/com/sza/fastmediasorter/core/systeminfo/SystemInfoBenchmark.kt spec-dev Add SystemInfoBenchmark (memory + storage throughput) [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/res/values/strings.xml spec-dev S0338 phase: Add camera_ocr_crop_* strings (crop step) [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/res/values-ru/strings.xml spec-dev S0338 phase: Add RU camera_ocr_crop_* strings [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/res/values-uk/strings.xml spec-dev S0338 phase: Add UK camera_ocr_crop_* strings [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/res/values/colors.xml spec-dev S0338 phase: Add crop_frame_red color [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CropRegionManager.kt spec-dev S0338 phase: EXIF-aware load + normalized-rect crop helper [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/test/java/com/sza/fastmediasorter/ui/cameraocr/CropRegionManagerTest.kt spec-dev S0338 phase: Unit tests for crop geometry toPixelRect [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CropOverlayView.kt spec-dev S0338 phase: Draggable red crop selection overlay view [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/res/layout/activity_camera_ocr_translate.xml spec-dev S0338 phase: Add crop state (preview + overlay + Retry/OK) [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrStorageManager.kt spec-dev S0338 phase: Add saveBitmapToGallery for cropped region [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt spec-dev S0338 phase: Insert crop step between capture and OCR [branch: DEBUG-v011]
2026-06-03 13:18:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt spec-dev S0338 phase: Wire crop state UI and Retry/OK actions [branch: DEBUG-v011]
2026-06-03 13:18:18 docs/FEATURES.md spec-dev S0338 phase: Document crop-before-OCR in Photo OCR translation [branch: DEBUG-v011]
2026-06-03 13:18:18 docs/FEATURES_RU.md spec-dev S0338 phase: RU crop-before-OCR feature note [branch: DEBUG-v011]
2026-06-03 13:18:18 docs/FEATURES_UK.md spec-dev S0338 phase: UK crop-before-OCR feature note [branch: DEBUG-v011]
2026-06-03 13:19:23 PLAN/S0338_camera-ocr-crop-region.md spec-dev S0338 all phases done; status -> BlockNeedUserTest (3 debug tags) [branch: DEBUG-v011]
2026-06-03 13:30:16 scripts/strings_tool.ps1 scripts Add strings_tool.ps1: surgical add/get/remove/rename/list of Android string resources across EN/RU/UK locales (text-based, byte-preserving, locale-parity enforced) [branch: DEBUG-v011]
2026-06-03 13:41:04 PLAN/S0339_strings-thematic-split.md spec Add strategic spec S0339 for thematic split of strings.xml by feature areas [branch: DEBUG-v011]
2026-06-03 14:04:57 app_v2/src/main/java/com/sza/fastmediasorter/core/systeminfo/SystemInfoBenchmark.kt spec-dev Use System.nanoTime for benchmark timing (testable) [branch: DEBUG-v011]
2026-06-03 14:04:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-dev Wire Benchmarks section into system info [branch: DEBUG-v011]
2026-06-03 14:04:57 app_v2/src/test/java/com/sza/fastmediasorter/core/systeminfo/SystemInfoBenchmarkTest.kt spec-dev Benchmark unit test (throughput + temp-file cleanup) [branch: DEBUG-v011]
2026-06-03 14:04:57 app_v2/src/main/res/values/strings.xml spec-dev Add Benchmark sysinfo strings (EN) [branch: DEBUG-v011]
2026-06-03 14:04:57 app_v2/src/main/res/values-ru/strings.xml spec-dev Add Benchmark sysinfo strings (RU) [branch: DEBUG-v011]
2026-06-03 14:04:57 app_v2/src/main/res/values-uk/strings.xml spec-dev Add Benchmark sysinfo strings (UK) [branch: DEBUG-v011]
2026-06-03 14:09:27 scripts/utils/set-android-string.ps1 scripts/utils Consolidate string tooling: extend set-android-string.ps1 with add/get/remove/rename/list actions (EN/RU/UK lockstep, thematic-file aware); delete duplicate strings_tool.ps1 [branch: DEBUG-v011]
2026-06-03 14:09:27 .claude/commands+agents skills+roles Wire set-android-string.ps1 (set/add/get/remove/rename/list) into /spec-dev, /spec-tech, /doc-update, /quick, /spec-check and the 3 agent roles as the preferred byte-preserving string editor [branch: DEBUG-v011]
2026-06-03 14:10:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt spec-dev Insert S0337 BlockNeedUserTest probe tag [branch: DEBUG-v011]
2026-06-03 14:10:03 docs/FEATURES.md spec-dev Refresh System info copy: extended sections + benchmarks (EN) [branch: DEBUG-v011]
2026-06-03 14:10:03 docs/FEATURES_RU.md spec-dev Refresh System info copy (RU) [branch: DEBUG-v011]
2026-06-03 14:10:03 docs/FEATURES_UK.md spec-dev Refresh System info copy (UK) [branch: DEBUG-v011]
2026-06-03 14:10:03 PLAN/S0337_system-info-extended-fields.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v011]
2026-06-03 14:33:45 docs/WHATS_NEW.md WHATS_NEW Release notes and README for v2.60.6031.424 - plateau merge from DEBUG-v011 [branch: DEBUG-v011]
2026-06-03 15:16:18 PLAN/S0339_strings-thematic-split/INDEX.md spec-tech Create tactical plan for S0339 [branch: DEBUG-v012]
2026-06-03 15:16:18 PLAN/S0339_strings-thematic-split/PHASE_01__move-tooling.md spec-tech Phase 01: move-tooling [branch: DEBUG-v012]
2026-06-03 15:16:18 PLAN/S0339_strings-thematic-split/PHASE_02__taxonomy-baseline.md spec-tech Phase 02: taxonomy-baseline [branch: DEBUG-v012]
2026-06-03 15:16:18 PLAN/S0339_strings-thematic-split/PHASE_03__execute-migration.md spec-tech Phase 03: execute-migration [branch: DEBUG-v012]
2026-06-03 15:16:18 PLAN/S0339_strings-thematic-split/PHASE_04__validation.md spec-tech Phase 04: validation [branch: DEBUG-v012]
2026-06-03 15:16:18 PLAN/S0339_strings-thematic-split/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v012]
2026-06-03 15:16:18 PLAN/S0339_strings-thematic-split.md spec-tech Status -> Tactical [branch: DEBUG-v012]
2026-06-03 15:30:04 PLAN/S0339_strings-thematic-split/PHASE_01__move-tooling.md spec-fix Fix Step 01.3 audit oracle: 3479->3471 (vr count was double-added) [branch: DEBUG-v012]
2026-06-03 15:34:11 PLAN/S0336_nolegal-extended-system-info/INDEX.md spec-tech Create tactical plan for S0336 [branch: DEBUG-v012]
2026-06-03 15:34:11 PLAN/S0336_nolegal-extended-system-info/PHASE_01__diagnostics-contract.md spec-tech Phase 01: diagnostics contract and aggregation [branch: DEBUG-v012]
2026-06-03 15:34:11 PLAN/S0336_nolegal-extended-system-info/PHASE_02__nolegal-contributor.md spec-tech Phase 02: noLegal diagnostics contributor [branch: DEBUG-v012]
2026-06-03 15:34:11 PLAN/S0336_nolegal-extended-system-info/PHASE_03__redaction-reveal-ui.md spec-tech Phase 03: redaction reveal UI [branch: DEBUG-v012]
2026-06-03 15:34:11 PLAN/S0336_nolegal-extended-system-info/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs catalog cleanup [branch: DEBUG-v012]
2026-06-03 15:34:11 PLAN/S0336_nolegal-extended-system-info.md spec-tech Status -> Tactical [branch: DEBUG-v012]
2026-06-03 15:36:00 scripts/utils/set-android-string.ps1 spec-dev S0339: add move (single/-Prefix bulk) + audit actions; atomic byte-preserving multi-file move [branch: DEBUG-v012]
2026-06-03 15:36:00 app_v2/src/main/res/values/strings.xml spec-dev S0339: split residual strings.xml into 21 thematic files x3 locales (1521 keys moved, union invariant preserved) [branch: DEBUG-v012]
2026-06-03 15:36:00 PLAN/S0339_strings-thematic-split/taxonomy.psd1 spec-dev S0339: deterministic prefix->thematic-file taxonomy [branch: DEBUG-v012]
2026-06-03 15:37:21 PLAN/S0339_strings-thematic-split/INDEX.md spec-dev S0339: all 5 phases done; build green; status -> Implemented [branch: DEBUG-v012]
2026-06-03 15:38:25 PLAN/S0339_strings-thematic-split.md spec-check Audit S0339 -> Verified; PASS/WARN/FAIL 11/0/0 [branch: DEBUG-v012]
2026-06-03 15:56:59 PLAN/S0336_nolegal-extended-system-info.md spec-dev All phases done; status -> BlockNeedUserTest; S0336 probes inserted [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/main/java/com/sza/fastmediasorter/core/systeminfo/ExtendedDiagnostics.kt spec-dev Phase 01: diagnostics contract, section/field models, redaction mapper [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/main/java/com/sza/fastmediasorter/core/systeminfo/SystemInfoReport.kt spec-dev Phase 01: aggregated masked/full report value type [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/main/java/com/sza/fastmediasorter/di/ExtendedDiagnosticsModule.kt spec-dev Phase 01: Multibinds contributor set [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-dev Phase 01: aggregate contributors into masked/full report [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCaseTest.kt spec-dev Phase 01: update test for SystemInfoReport signature [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/noLegal/java/com/sza/fastmediasorter/diagnostics/NoLegalDiagnosticsCollectors.kt spec-dev Phase 02: seven noLegal diagnostic category collectors [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/noLegal/java/com/sza/fastmediasorter/diagnostics/NoLegalExtendedDiagnosticsContributor.kt spec-dev Phase 02: noLegal contributor with S0336 probe [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalExtendedDiagnosticsModule.kt spec-dev Phase 02: IntoSet binding into contributor set [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/noLegal/res/values/strings.xml spec-dev Phase 02: noLegal diagnostics section titles EN [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/noLegal/res/values-ru/strings.xml spec-dev Phase 02: noLegal diagnostics section titles RU [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/noLegal/res/values-uk/strings.xml spec-dev Phase 02: noLegal diagnostics section titles UK [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/main/res/values/strings.xml spec-dev Phase 03: reveal-action strings EN [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/main/res/values-ru/strings.xml spec-dev Phase 03: reveal-action strings RU [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/main/res/values-uk/strings.xml spec-dev Phase 03: reveal-action strings UK [branch: DEBUG-v012]
2026-06-03 15:56:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt spec-dev Phase 03: data-driven full-report reveal with S0336 probe [branch: DEBUG-v012]
2026-06-03 15:56:59 docs/FEATURES_noLegal.md spec-dev Phase 04: section 7 extended diagnostics EN [branch: DEBUG-v012]
2026-06-03 15:56:59 docs/FEATURES_noLegal_RU.md spec-dev Phase 04: section 7 extended diagnostics RU [branch: DEBUG-v012]
2026-06-03 15:56:59 docs/FEATURES_noLegal_UK.md spec-dev Phase 04: section 7 extended diagnostics UK [branch: DEBUG-v012]
2026-06-03 17:17:48 PLAN/S0174_nolegal-ytdlp-universal-extractor.md spec-arc Archive S0174 (nolegal-ytdlp-universal-extractor) -> temp/done/ [branch: DEBUG-v012]
2026-06-03 17:23:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioCoverArtLoader.kt AudioCoverArtLoader Remove stale S0265 debug tag before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:24:27 PLAN/S0082_chromeos-support.md spec-check Audit S0082 -> Partial; PASS/WARN/FAIL 30/1/0. Pillar C resolved (rescheduleAll on startup); residual WARN ADR-3 DetectionHelper; on-device gated on Chromebook [branch: DEBUG-v012]
2026-06-03 17:25:18 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt LinkAutoDownloadCoordinator Remove stale S0260 debug tags before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:26:48 app_v2/src/main/java/com/sza/fastmediasorter/core/util/AudioMetadataLoader.kt AudioMetadataLoader Remove stale S0229 debug tags before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:27:12 PLAN/S0312_build-failure-digest.md S0312 Archive S0312 build-failure-digest (no code changes, no stale tags) [branch: DEBUG-v012]
2026-06-03 17:27:33 PLAN/S0313_flavor-isolation-diff-guard.md S0313 Archive S0313 flavor-isolation-diff-guard (no code changes, no stale tags) [branch: DEBUG-v012]
2026-06-03 17:29:33 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt,app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt CloudFileOperationHandler,BrowseApkInstallHandlerImpl Remove stale S0266 debug/warn/error tags before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:30:55 app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt LinkDownloadWorker Remove stale S0257 debug tag before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:31:17 PLAN/S0315_rule-prompt-drift-audit.md S0315 Archive S0315 rule-prompt-drift-audit (no stale debug tags, no code changes) [branch: DEBUG-v012]
2026-06-03 17:31:35 PLAN/S0314_catalog-dependency-test-enrichment.md S0314 Archive S0314 catalog-dependency-test-enrichment (no stale debug tags, no code changes) [branch: DEBUG-v012]
2026-06-03 17:32:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt VideoPlayerManager Remove stale S0274 debug tag before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:34:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt GeneralSettingsViewSetupHelper Remove stale S0254 debug tags before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:34:37 PLAN/S0307_emulator-user-test-sweep.md S0307 Archive S0307 emulator-user-test-sweep (no stale debug tags, no code changes) [branch: DEBUG-v012]
2026-06-03 17:34:55 PLAN/S0311_agent-workflow-tooling-overhaul.md S0311 Archive S0311 agent-workflow-tooling-overhaul (no stale debug tags, no code changes) [branch: DEBUG-v012]
2026-06-03 17:36:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/CalculatorActivity.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt S0317 Remove 3 stale S0317 debug tags from CalculatorActivity and MainActivity before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:38:03 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsColorThemeHelper.kt S0328 Remove 2 stale S0328 debug tags from ColorThemePrefs and GeneralSettingsColorThemeHelper before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:38:19 PLAN/S0140_extend-market-url-coverage.md spec-arc Archive S0140 (extend-market-url-coverage) -> temp/done/; code shipped, device-round regression baseline left unverified by owner decision [branch: DEBUG-v012]
2026-06-03 17:39:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt S0329 Remove 4 stale S0329 debug tags from CalculatorInputManager before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:41:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt S0331 Remove 3 stale S0331 debug tags from CalculatorInputManager before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:42:51 app_v2/src/.../RealDeviceProfileRepository.kt, ApplyProfilePresetUseCase.kt, SettingsProfileViewModel.kt, WelcomeViewModel.kt S0327 Remove 5 stale S0327 debug tags from 4 files before archiving ticket [branch: DEBUG-v012]
2026-06-03 17:50:49 PLAN/S0082_chromeos-support.md spec-all Audit S0082 -> Verified; Q1-Q4 resolved by research, ADR-3 enforced, ADR-4 added, P1-P4 deferred to S0340 [branch: DEBUG-v012]
2026-06-03 17:50:49 app_v2/src/main/java/com/sza/fastmediasorter/core/compat/ChromeOsCompat.kt S0082 ADR-3: centralize ARC++ detection - org.chromium.arc + device_management [branch: DEBUG-v012]
2026-06-03 17:50:49 app_v2/src/main/java/com/sza/fastmediasorter/data/detector/DetectionHelper.kt S0082 ADR-3: isChromebook delegates to ChromeOsCompat (single detection source) [branch: DEBUG-v012]
2026-06-03 17:50:49 PLAN/S0340_chromeos-3d-single-eye-crop.md spec-all Spin follow-on spec S0340 for 3D single-eye GL-free crop [branch: DEBUG-v012]
2026-06-03 19:04:41 temp/done/S0340_chromeos-3d-single-eye-crop.md spec-tech Archive S0340 - superseded by S0264 (PanelStereoCropApplier already ships GL-free TextureView crop for all devices incl ARC++) [branch: DEBUG-v012]
2026-06-03 19:04:41 PLAN/S0082_chromeos-support.md spec-tech Correct S0082 6.Q3/ADR-4/10/P1-P4 refs: point to existing S0264 impl instead of redundant S0340 [branch: DEBUG-v012]
2026-06-03 19:58:52 PLAN/S0046_sftp-key-auth-hardening.md spec-check Audit S0046 -> Partial; PASS/WARN/FAIL 7/0/4; Phase 01-02 verified, 03-06 not started [branch: DEBUG-v012]
2026-06-03 20:26:31 PLAN/S0046_sftp-key-auth-hardening/PHASE_03__sftp-pin-wiring.md spec-update Realign Phase 03 from stale SSHJ to actual JSch transport (PinnedHostKeyRepository / setHostKeyRepository); fix verification predicates [branch: DEBUG-v012]
2026-06-03 20:33:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameBoardView.kt GameBoardView + legend drawables Mini-game shapes: exit as framed square with diagonal cross, main enemy as triangle, player as five-pointed star; mirrored in help legend drawables [branch: DEBUG-v012]
2026-06-03 20:37:30 app_v2/src/main/res/layout-land/activity_game.xml activity_game portrait+landscape Move multi-purpose reset button into the same row as Help (left side) in portrait; redesign landscape so the board fills the left part and all buttons (back, reset, help, D-pad) move to a right side panel [branch: DEBUG-v012]
2026-06-03 20:44:29 app_v2/src/main/res/layout/activity_game.xml activity_game portrait board sizing Portrait: control panel switched to wrap_content so the 1:1 board square expands to full window width; D-pad re-anchored below the reset/help row (landscape already fills full height) [branch: DEBUG-v012]
2026-06-03 21:03:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt GameViewModel level-scaled board size Board size now scales with level: 1-5 -> 10x10, 6-10 -> 15x15, 11-20 -> 20x20, 21+ -> 25x25; wall count stays density-proportional to cell count [branch: DEBUG-v012]
2026-06-03 21:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt Game resume + actor shape sizing Resume now regenerates a playable level when the saved game is GAME_OVER/LEVEL_WON so controls work right after launch; star and triangle actors enlarged to fill the cell (radius 0.5) [branch: DEBUG-v012]
2026-06-03 22:02:36 app_v2/src/main/AndroidManifest.xml GameActivity rotation Drop orientation/screenSize/screenLayout from GameActivity configChanges so rotation recreates the activity and the landscape layout (board left, controls right) is actually used; game state survives via retained ViewModel [branch: DEBUG-v012]
2026-06-03 23:00:17 app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LoggingHelper.kt log-encoding Write log + crash files explicitly in UTF-8 (OutputStreamWriter) instead of platform default charset that was CP866, fixing garbled Cyrillic resource/file names [branch: DEBUG-v012]
2026-06-03 23:00:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerErrorHandler.kt player-error Handle ExoPlayer ERROR_CODE_FAILED_RUNTIME_CHECK (1004 stuck-buffering) like TIMEOUT: mark file failed for session + named user message instead of generic skip [branch: DEBUG-v012]
2026-06-03 23:07:01 PLAN/S0334_translation-model-prewarm.md spec-check Audit S0334 -> Verified; PASS/WARN/FAIL 13/0/0 [branch: DEBUG-v012]
2026-06-03 23:07:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/PrewarmTranslationModelUseCase.kt spec-check Remove S0334 debug verification tag on Verified [branch: DEBUG-v012]
2026-06-03 23:07:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt spec-check Remove S0334 debug verification tag on Verified [branch: DEBUG-v012]
2026-06-03 23:14:22 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt app_v2 vr flavor Hide 3D/VR detail setting groups (format detection, default mode, immersive/diagnostics) and Test Immersive button when master 3D/VR toggle is off or XR is unavailable; advisory + master toggle + section header stay visible [branch: DEBUG-v012]
2026-06-03 23:15:12 app_v2/src/vr/res/layout/fragment_vr_settings_block.xml app_v2 vr flavor Wrap 3D/VR detail setting groups in vrDetailGroupsContainer (default gone) for runtime visibility gating by master toggle / XR availability [branch: DEBUG-v012]
2026-06-03 23:55:51 PLAN/S0341_bugfix-debug-notification-theme-crash.md spec Add strategic spec S0341: debug error-notification crash under non-Material Activity themes (debug-only FATAL, blocks S0322/S0291 device test) [branch: DEBUG-v012]
2026-06-03 23:59:59 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt code Remove S0322 debug verification tag (spec left BlockNeedUserTest -> BlockByOtherTask) [branch: DEBUG-v012]
2026-06-03 23:59:59 PLAN/S0322_bugfix-vr-diagnostic-video-playback.md spec-update Resolve 3 research items from on-device log (Quest 3 decoder ceiling on 8640x2160 AVC); re-point to S0341+S0291 blockers; BlockNeedUserTest -> BlockByOtherTask [branch: DEBUG-v012]
2026-06-04 00:04:10 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt code Remove S0291 debug verification tag (spec re-opened BlockNeedUserTest -> Tactical) [branch: DEBUG-v012]
2026-06-04 00:04:10 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md spec-update Reopen S0291 6.2 (360 SBS 8640x2160 exceeds Quest3 AVC decoder) and 6.4 (moraine flat-image decode failure) from on-device log; link S0322+S0341; BlockNeedUserTest -> Tactical [branch: DEBUG-v012]
2026-06-04 00:13:39 app_v2/src/debug/java/com/sza/fastmediasorter/core/debug/DebugNotificationCenter.kt code S0341: theme-safe debug notifications - Material-themed Snackbar context + Toast fallback to stop FATAL under non-Material Activity themes; add S0341 debug probe [branch: DEBUG-v012]
2026-06-04 00:15:08 PLAN/S0341_bugfix-debug-notification-theme-crash.md spec-tech S0341 implemented directly (PRIMITIVE): theme-safe debug notifications; Approved -> BlockNeedUserTest [branch: DEBUG-v012]
2026-06-04 00:18:32 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt decodeFilePooled S0291 §6.4: catch IllegalArgumentException (inBitmap incompatible) and retry without pool reuse - fixes moraine_lake_flat_mono/sbs.jpg decode failure [branch: DEBUG-v012]
2026-06-04 00:18:32 scripts/utils/setup_test_vr.ps1 New-LoopedVideo S0291 §6.2: cap SBS synthetic half-width to 2160px before hstack so total output stays at <=4320x2160 (Quest 3 AVC decoder ceiling) [branch: DEBUG-v012]
2026-06-04 00:18:32 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2/PHASE_06__lifecycle-round10-exit-and-hud-rebind.md S0291 Close Phase 06 (Step 06.2 formally deferred); fix §6.2 and §6.4; move S0291 to BlockNeedUserTest [branch: DEBUG-v012]
2026-06-04 00:18:32 PLAN/S0322_bugfix-vr-diagnostic-video-playback.md S0322 Unblock S0322 (S0341 done, S0291 §6.2/§6.4 fixed); all three criteria met - move to BlockNeedUserTest for Quest 3 owner verification [branch: DEBUG-v012]
2026-06-04 00:19:46 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt onPlayerError S0322: add BlockNeedUserTest probe at playback error entry point [branch: DEBUG-v012]
2026-06-04 01:01:33 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrRenderThread.kt, app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt noLegal Fix VR re-entry immersive bug: await onWindowFocusChanged(true) via CompletableDeferred before nativeStartSession to ensure HzOS volumetric window is registered (xrCreateSession Activity-ready race condition) [branch: DEBUG-v012]
2026-06-04 01:01:49 app_v2/src/vr/cpp/xr_session.cpp noLegal Fix frame loop busy-wait: add usleep(1000) in !sessionRunning branch to prevent 100% CPU burn while waiting for XR_SESSION_STATE_READY [branch: DEBUG-v012]
2026-06-04 01:04:49 app_v2/src/vr/res/layout/fragment_vr_settings_block.xml fragment_vr_settings_block (portrait) VR media settings: place spinner label and value adjacent (drop weight) for default layout/projection/render mode [branch: DEBUG-v012]
2026-06-04 01:04:49 app_v2/src/vr/res/layout-land/fragment_vr_settings_block.xml fragment_vr_settings_block (landscape) Add landscape variant: two-column reflow of 3D/VR toggle rows and paired spinners; adjacent label/value [branch: DEBUG-v012]
2026-06-04 01:49:15 PLAN/S0341_bugfix-debug-notification-theme-crash.md spec-check Audit S0341 -> Verified; on-device log confirms no crash under non-Material theme; PASS/WARN/FAIL 5/0/0 [branch: DEBUG-v012]
2026-06-04 01:49:15 app_v2/src/debug/java/com/sza/fastmediasorter/core/debug/DebugNotificationCenter.kt spec-check Remove S0341 BlockNeedUserTest debug probe on Verified flip [branch: DEBUG-v012]
2026-06-04 01:50:39 PLAN/S0322_bugfix-vr-diagnostic-video-playback.md spec-check Audit S0322 -> Verified; on-device retest after S0341 fix confirms predictable degradation; PASS/WARN/FAIL 4/0/0 [branch: DEBUG-v012]
2026-06-04 01:50:39 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-check Remove S0322 BlockNeedUserTest debug probe on Verified flip [branch: DEBUG-v012]
2026-06-04 01:54:24 PLAN/S0342_bugfix-avi-seek-empty-index-crash.md spec Add strategic spec S0342 for AVI seek empty-index playback crash [branch: DEBUG-v012]
2026-06-04 01:55:59 PLAN/S0343_bugfix-smb-datasource-uri-null-race.md spec Add strategic spec S0343 for SMB datasource uri null race NPE [branch: DEBUG-v012]
2026-06-04 01:57:52 PLAN/S0344_smb-streaming-playback-robustness.md spec Add strategic spec S0344 for SMB streaming playback robustness and log-level discipline [branch: DEBUG-v012]
2026-06-04 01:59:15 PLAN/S0345_log-hygiene-expected-permission-denials.md spec Add strategic spec S0345 for log hygiene of expected permission denials in diagnostics [branch: DEBUG-v012]
2026-06-04 02:09:54 PLAN/S0346_sftp-audio-next-prefetch-feedback.md spec Add strategic spec S0346 for SFTP next-track prefetch + readiness-timeout feedback [branch: DEBUG-v012]
2026-06-04 02:10:34 PLAN/S0347_audio-cover-artist-priority-confidence.md spec Add strategic spec S0347 for audio cover artist-priority + confidence threshold [branch: DEBUG-v012]
2026-06-04 10:11:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-all S0342: track last-good playback position for in-place seek recovery [branch: DEBUG-v012]
2026-06-04 10:11:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackPositionHelper.kt spec-all S0342: update lastGoodPositionMs from position save loop [branch: DEBUG-v012]
2026-06-04 10:11:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerErrorHandler.kt spec-all S0342/S0344: classify AVI seek-index failure (recover in place) and honest log levels for recoverable error classes [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt spec-all S0343/S0344: stable URI identity across close; INFO log for recovered seek-past-EOF reset [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt spec-all S0343: preserve URI identity on close (avoid getUri NPE race) [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/FtpDataSource.kt spec-all S0343: preserve URI identity on close (avoid getUri NPE race) [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/java/com/sza/fastmediasorter/core/systeminfo/SystemInfoAccessClassifier.kt spec-all S0345: shared classifier for expected access denials in diagnostics [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-all S0345: quiet logging for expected device-field access denials [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/noLegal/java/com/sza/fastmediasorter/diagnostics/NoLegalDiagnosticsCollectors.kt spec-all S0345: quiet logging for expected access denials in noLegal diagnostics [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchQueryUtils.kt spec-all S0347: structural artist-title parse + artist-weighted confidence scoring [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchAudioCoverUseCase.kt spec-all S0347: multi-candidate fetch + confidence gate (suppress wrong-artist covers) [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SearchQueryUtilsTest.kt spec-all S0347: unit tests for parse + confidence [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-all S0346: next-track readiness-delay feedback toast [branch: DEBUG-v012]
2026-06-04 10:11:09 app_v2/src/main/res/values/strings.xml spec-all S0346: add audio_next_track_loading (EN/RU/UK) [branch: DEBUG-v012]
2026-06-04 10:36:56 PLAN/S0348_home-widget-icon-refresh.md spec Add strategic spec S0348 for icon-style home screen widgets [branch: DEBUG-v012]
2026-06-04 10:39:16 PLAN/S0348_home-widget-icon-refresh.md spec-update Update S0348 with Settings widget placement flow [branch: DEBUG-v012]
2026-06-04 10:40:44 PLAN/S0348_home-widget-icon-refresh.md spec-update Update S0348 with future widget opportunity research [branch: DEBUG-v012]
2026-06-04 10:42:17 PLAN/S0348_home-widget-icon-refresh.md spec-update Update S0348 with interactive widget feasibility research [branch: DEBUG-v012]
2026-06-04 10:46:03 CLAUDE.md workflow-docs Relax draft spec hygiene until approval gate [branch: DEBUG-v012]
2026-06-04 10:46:04 AGENTS.md workflow-docs Relax draft spec hygiene until approval gate [branch: DEBUG-v012]
2026-06-04 10:46:04 .github/copilot-instructions.md workflow-docs Relax draft spec hygiene until approval gate [branch: DEBUG-v012]
2026-06-04 10:46:04 .github/prompts/spec.prompt.md spec-prompt Make spec hygiene an approval gate concern [branch: DEBUG-v012]
2026-06-04 10:46:05 .github/prompts/spec-update.prompt.md spec-update-prompt Skip hygiene-only draft spec rewrites [branch: DEBUG-v012]
2026-06-04 10:46:05 scripts/spec_catalog/check-owner-inputs.ps1 spec-catalog Enforce ellipsis hygiene during approval gate [branch: DEBUG-v012]
2026-06-04 10:46:33 .github/copilot-instructions.md workflow-docs Clarify draft spec exception for author style [branch: DEBUG-v012]
2026-06-04 10:49:20 CLAUDE.md;.claude/commands/spec.md;.claude/commands/spec-update.md rules Relax spec style sanitation (.. /ё + lists-over-tables) during Draft; enforce only as a gate at Draft->Approved [branch: DEBUG-v012]
2026-06-04 10:55:16 PLAN/S0348_home-widget-icon-refresh.md S0348 Resolved widget research findings and interactive widget feasibility matrix [branch: DEBUG-v012]
2026-06-04 10:58:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CropOverlayView.kt S0338 Fix Camera-OCR crop frame not rendering: lazy-init in onDraw + invalidate on size/show so the overlay never reuses an empty render node; bind the draggable frame to the fitCenter photo content rect so it hugs the image and getNormalizedRect maps onto the source bitmap (CameraOcrTranslateActivity now calls setImageSize) [branch: DEBUG-v012]
2026-06-04 11:26:34 PLAN/S0348_home-widget-icon-refresh.md PLAN/S0348_home-widget-icon-refresh.md Update research findings in strategic spec with specific API restrictions, widget configurations, and runtime flags [branch: DEBUG-v012]
2026-06-04 11:33:44 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0290 Insert BlockNeedUserTest probes for Phase 09 (session init/exit), Phase 11 Step 11.5 (texture-copy buffer reuse), Phase 10 (input next/prev navigation) on manual status transition to BlockNeedUserTest [branch: DEBUG-v012]
2026-06-04 11:35:09 PLAN/S0290_vr_test_quality_overhaul/INDEX.md S0290 Record journal flip Tactical->BlockNeedUserTest and device-test probe insertion in Blockers Log [branch: DEBUG-v012]
2026-06-04 11:36:56 PLAN/S0348_home-widget-icon-refresh.md PLAN/S0348_home-widget-icon-refresh.md Add new widgets implementation details and scheduled tasks manager widget [branch: DEBUG-v012]
2026-06-04 11:40:19 PLAN/S0290_vr_test_quality_overhaul.md S0290 Sync stale strategic header Status field Tactical->BlockNeedUserTest to match journal [branch: DEBUG-v012]
2026-06-04 11:45:38 .claude/commands/skill-release.md skill-release Add GitHub Store publication to release pipeline [branch: DEBUG-v012]
2026-06-04 11:45:38 a.ps1 release launcher Add vr release command for GitHub Store publication flow [branch: DEBUG-v012]
2026-06-04 11:45:38 scripts/builders/build-vr-release.ps1 build-vr-release Add VR release APK builder that reuses current release version [branch: DEBUG-v012]
2026-06-04 11:45:38 scripts/release/README.md release handbook Document skill-release ownership of GitHub Store and Google Play publication [branch: DEBUG-v012]
2026-06-04 11:45:39 PLAN/S0214_github-store-publication.md S0214 Record owner decisions for deferred GitHub Store publication [branch: DEBUG-v012]
2026-06-04 11:45:39 PLAN/S0214_github-store-publication/INDEX.md S0214 Move remaining blocker to release-window and owner verification [branch: DEBUG-v012]
2026-06-04 11:47:15 PLAN/S0214_github-store-publication.md S0214 Align resolved research items and ADR with tactical decisions [branch: DEBUG-v012]
2026-06-04 11:49:32 scripts/spec_catalog/update.ps1 spec-catalog update.ps1 now mirrors new status into spec file first Status: header line (fail-soft, first match only) so the in-file header never drifts from the journal [branch: DEBUG-v012]
2026-06-04 11:50:11 CLAUDE.md spec-catalog Document update.ps1 header auto-sync behaviour in Spec Catalog section [branch: DEBUG-v012]
2026-06-04 11:54:14 scripts/spec_catalog/_lib.ps1 spec-catalog Add shared fail-soft Sync-SpecHeaderStatus + Resolve-SpecPath helpers mirroring a status change into the first Status: header line of a spec .md [branch: DEBUG-v012]
2026-06-04 11:54:14 scripts/spec_catalog/update.ps1 spec-catalog Refactor header auto-sync to shared Sync-SpecHeaderStatus helper [branch: DEBUG-v012]
2026-06-04 11:54:15 scripts/spec_catalog/archive.ps1 spec-catalog Sync spec header to Archived before moving artefact to temp/done [branch: DEBUG-v012]
2026-06-04 11:54:15 scripts/spec_catalog/bulk-update.ps1 spec-catalog Sync each spec header to new status after atomic journal write (status changes only) [branch: DEBUG-v012]
2026-06-04 11:54:16 CLAUDE.md spec-catalog Refine header auto-sync note: full mutator coverage via shared helper [branch: DEBUG-v012]
2026-06-04 12:01:46 PLAN/S0348_home-widget-icon-refresh.md spec-update Approve S0348 strategic spec owner gate [branch: DEBUG-v012]
2026-06-04 12:26:16 PLAN/S0348_home-widget-icon-refresh/INDEX.md spec-tech Create tactical plan (first wave) for S0348 [branch: DEBUG-v012]
2026-06-04 12:26:16 PLAN/S0348_home-widget-icon-refresh/PHASE_01__icon-style-layouts.md spec-tech Phase 01: icon-style 1x1 layouts [branch: DEBUG-v012]
2026-06-04 12:26:16 PLAN/S0348_home-widget-icon-refresh/PHASE_02__camera-ocr-compact.md spec-tech Phase 02: Camera-OCR compact sizing [branch: DEBUG-v012]
2026-06-04 12:26:16 PLAN/S0348_home-widget-icon-refresh/PHASE_03__widget-registry.md spec-tech Phase 03: home widget catalog/registry [branch: DEBUG-v012]
2026-06-04 12:26:16 PLAN/S0348_home-widget-icon-refresh/PHASE_04__settings-pin-picker.md spec-tech Phase 04: settings pin picker [branch: DEBUG-v012]
2026-06-04 12:26:17 PLAN/S0348_home-widget-icon-refresh/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog cleanup [branch: DEBUG-v012]
2026-06-04 12:26:17 PLAN/S0348_home-widget-icon-refresh.md spec-tech Status to Tactical; descope new widgets to sub-specs S0349-S0353 [branch: DEBUG-v012]
2026-06-04 12:26:17 PLAN/S0349_widget-quick-audio-recorder.md spec-tech New sub-spec Draft: Quick Audio Recorder widget [branch: DEBUG-v012]
2026-06-04 12:26:17 PLAN/S0350_widget-capture-ocr-panel.md spec-tech New sub-spec Draft: Capture and OCR Panel widget [branch: DEBUG-v012]
2026-06-04 12:26:17 PLAN/S0351_widget-audio-now-playing.md spec-tech New sub-spec Draft: Audio Now Playing widget [branch: DEBUG-v012]
2026-06-04 12:26:17 PLAN/S0352_widget-random-photo-frame.md spec-tech New sub-spec Draft: Random Photo Frame widget [branch: DEBUG-v012]
2026-06-04 12:26:17 PLAN/S0353_widget-scheduled-tasks.md spec-tech New sub-spec Draft: Scheduled Tasks Manager widget [branch: DEBUG-v012]
2026-06-04 12:38:56 .github/prompts/spec-all.prompt.md spec-all Allow spec-all auto-approval when no blocking ambiguity remains [branch: DEBUG-v012]
2026-06-04 12:41:57 PLAN/S0350_widget-capture-ocr-panel.md spec-all Auto-approve S0350 with deferred S0349 audio dependency [branch: DEBUG-v012]
2026-06-04 12:42:17 PLAN/S0350_widget-capture-ocr-panel.md spec-all Add owner-input section for S0350 auto-approval [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/values/dimens.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/layout/widget_calculator.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/layout/widget_camera_photos.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/layout/widget_continue_reading.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/layout/widget_random_music.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/layout/widget_camera_ocr_translate.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/layout/widget_resource_launch.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/layout/widget_game_launch.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/xml/widget_calculator_info.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/xml/widget_camera_photos_info.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/xml/widget_continue_reading_info.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/xml/widget_random_music_info.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/xml/widget_resource_launch_info.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/res/xml/widget_game_launch_info.xml spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetProvider.kt spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:42:28 app_v2/src/main/java/com/sza/fastmediasorter/widget/GameLaunchWidgetProvider.kt spec-dev S0348 Phase 01: icon-style 1x1 widgets (remove labels, enlarge icon, previewLayout, provider updates) [branch: DEBUG-v012]
2026-06-04 12:43:43 PLAN/S0350_widget-capture-ocr-panel/INDEX.md spec-tech Create S0350 tactical index [branch: DEBUG-v012]
2026-06-04 12:43:43 PLAN/S0350_widget-capture-ocr-panel/PHASE_01__widget-surface.md spec-tech Create S0350 widget surface phase [branch: DEBUG-v012]
2026-06-04 12:43:44 PLAN/S0350_widget-capture-ocr-panel/PHASE_02__manifest-provider.md spec-tech Create S0350 manifest provider phase [branch: DEBUG-v012]
2026-06-04 12:43:44 PLAN/S0350_widget-capture-ocr-panel/PHASE_03__docs-catalog-cleanup.md spec-tech Create S0350 cleanup phase [branch: DEBUG-v012]
2026-06-04 12:43:45 PLAN/S0350_widget-capture-ocr-panel.md spec-tech Set S0350 tactical status [branch: DEBUG-v012]
2026-06-04 12:45:20 app_v2/src/main/res/values/strings_widget.xml S0350 Add capture OCR panel widget strings [branch: DEBUG-v012]
2026-06-04 12:45:21 app_v2/src/main/res/values-ru/strings_widget.xml S0350 Add Russian capture OCR panel widget strings [branch: DEBUG-v012]
2026-06-04 12:45:22 app_v2/src/main/res/values-uk/strings_widget.xml S0350 Add Ukrainian capture OCR panel widget strings [branch: DEBUG-v012]
2026-06-04 12:45:23 app_v2/src/main/res/layout/widget_capture_ocr_panel.xml S0350 Add capture OCR panel widget layout [branch: DEBUG-v012]
2026-06-04 12:45:23 app_v2/src/main/res/xml/widget_capture_ocr_panel_info.xml S0350 Add capture OCR panel widget provider info [branch: DEBUG-v012]
2026-06-04 12:45:24 app_v2/src/main/java/com/sza/fastmediasorter/widget/CaptureOcrPanelWidgetProvider.kt S0350 Add capture OCR panel widget provider [branch: DEBUG-v012]
2026-06-04 12:46:11 app_v2/src/main/AndroidManifest.xml S0350 Register capture OCR panel widget provider [branch: DEBUG-v012]
2026-06-04 12:47:23 PLAN/S0350_widget-capture-ocr-panel/INDEX.md spec-dev Update S0350 tactical progress [branch: DEBUG-v012]
2026-06-04 12:47:23 PLAN/S0350_widget-capture-ocr-panel/PHASE_01__widget-surface.md spec-dev Mark S0350 phase 01 done [branch: DEBUG-v012]
2026-06-04 12:47:24 PLAN/S0350_widget-capture-ocr-panel/PHASE_02__manifest-provider.md spec-dev Mark S0350 phase 02 done [branch: DEBUG-v012]
2026-06-04 12:47:24 PLAN/S0350_widget-capture-ocr-panel/PHASE_03__docs-catalog-cleanup.md spec-dev Mark S0350 catalog step done [branch: DEBUG-v012]
2026-06-04 12:50:32 app_v2/src/lite/AndroidManifest.xml S0350 Remove capture OCR panel widget from lite flavor [branch: DEBUG-v012]
2026-06-04 12:50:33 app_v2/src/photos/AndroidManifest.xml S0350 Remove capture OCR panel widget from photos flavor [branch: DEBUG-v012]
2026-06-04 12:57:12 docs/FEATURES.md S0350 Document Capture & OCR panel widget in English feature inventory [branch: DEBUG-v012]
2026-06-04 12:57:12 docs/FEATURES_RU.md S0350 Document Capture & OCR panel widget in Russian feature inventory [branch: DEBUG-v012]
2026-06-04 12:57:12 docs/FEATURES_UK.md S0350 Document Capture & OCR panel widget in Ukrainian feature inventory [branch: DEBUG-v012]
2026-06-04 12:57:34 app_v2/src/main/res/xml/widget_camera_ocr_translate_info.xml spec-dev S0348 Phase 02: Camera-OCR widget resized to 1x1 (provider info + previewLayout) [branch: DEBUG-v012]
2026-06-04 12:57:34 app_v2/src/main/java/com/sza/fastmediasorter/widget/registry/HomeWidgetEntry.kt spec-dev S0348 Phase 03: HomeWidgetEntry catalog model [branch: DEBUG-v012]
2026-06-04 12:57:34 app_v2/src/main/java/com/sza/fastmediasorter/widget/registry/HomeWidgetCatalog.kt spec-dev S0348 Phase 03: HomeWidgetCatalog availability registry (installedProviders + settings gate, no BuildConfig) [branch: DEBUG-v012]
2026-06-04 12:57:34 app_v2/src/lite/AndroidManifest.xml spec-dev S0348 Phase 03: remove Camera-OCR widget receiver in lite (ENABLE_TRANSLATION=false) [branch: DEBUG-v012]
2026-06-04 12:57:34 app_v2/src/photos/AndroidManifest.xml spec-dev S0348 Phase 03: remove Camera-OCR widget receiver in photos (ENABLE_TRANSLATION=false) [branch: DEBUG-v012]
2026-06-04 12:58:15 PLAN/S0350_widget-capture-ocr-panel/PHASE_03__docs-catalog-cleanup.md S0350 Mark S0350 docs and catalog cleanup complete [branch: DEBUG-v012]
2026-06-04 12:58:15 PLAN/S0350_widget-capture-ocr-panel/INDEX.md S0350 Mark S0350 tactical plan complete [branch: DEBUG-v012]
2026-06-04 12:58:15 PLAN/S0350_widget-capture-ocr-panel.md S0350 Mark S0350 implementation ready for final audit [branch: DEBUG-v012]
2026-06-04 12:58:16 PLAN/S0350_widget-capture-ocr-panel/PHASE_02__manifest-provider.md S0350 Record flavor overlay handling for Capture OCR panel widget [branch: DEBUG-v012]
2026-06-04 12:59:10 PLAN/S0350_widget-capture-ocr-panel/PHASE_02__manifest-provider.md S0350 Adjust S0350 manifest line budget for final audit [branch: DEBUG-v012]
2026-06-04 12:59:11 PLAN/S0350_widget-capture-ocr-panel/PHASE_03__docs-catalog-cleanup.md S0350 Adjust S0350 feature docs line budgets for final audit [branch: DEBUG-v012]
2026-06-04 13:00:08 PLAN/S0350_widget-capture-ocr-panel.md spec-check Audit S0350 to Verified; PASS/WARN/FAIL 52/0/0 [branch: DEBUG-v012]
2026-06-04 13:00:36 PLAN/S0350_widget-capture-ocr-panel.md spec-check Sync S0350 strategic header to Verified [branch: DEBUG-v012]
2026-06-04 13:06:10 PLAN/S0351_widget-audio-now-playing.md S0351 Auto-approve S0351 and resolve now-playing widget research [branch: DEBUG-v012]
2026-06-04 13:06:28 PLAN/S0351_widget-audio-now-playing.md S0351 Add owner-input section for S0351 auto-approval [branch: DEBUG-v012]
2026-06-04 13:08:15 PLAN/S0351_widget-audio-now-playing/INDEX.md spec-tech Create tactical plan for S0351 [branch: DEBUG-v012]
2026-06-04 13:08:16 PLAN/S0351_widget-audio-now-playing/PHASE_02__service-snapshot.md spec-tech Phase 02: service snapshot [branch: DEBUG-v012]
2026-06-04 13:08:16 PLAN/S0351_widget-audio-now-playing/PHASE_01__widget-surface.md spec-tech Phase 01: widget surface [branch: DEBUG-v012]
2026-06-04 13:08:27 PLAN/S0351_widget-audio-now-playing/PHASE_03__provider-manifest.md spec-tech Phase 03: provider manifest [branch: DEBUG-v012]
2026-06-04 13:08:28 PLAN/S0351_widget-audio-now-playing.md spec-tech Status to Tactical for S0351 [branch: DEBUG-v012]
2026-06-04 13:08:28 PLAN/S0351_widget-audio-now-playing/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs catalog cleanup [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/java/com/sza/fastmediasorter/widget/registry/HomeWidgetPinner.kt spec-dev S0348 Phase 04: HomeWidgetPinner shared pin primitives (SDK/support/keyguard/requestPin) [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsWidgetHelper.kt spec-dev S0348 Phase 04: settings widget-picker helper (available-only list + pin + fallback) [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt spec-dev S0348 Phase 04: wire GeneralSettingsWidgetHelper (inject catalog+pinner, setup in onViewCreated) [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt spec-dev S0348 Phase 04: route resource widget pin through HomeWidgetPinner [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev S0348 Phase 04: Add widget to home screen button (portrait) [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev S0348 Phase 04: Add widget to home screen button (landscape) [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/res/values/strings_widget.xml spec-dev S0348 Phase 04: settings_add_home_widget_title + widget_picker_dialog_title (EN) [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/res/values-ru/strings_widget.xml spec-dev S0348 Phase 04: widget picker strings (RU) [branch: DEBUG-v012]
2026-06-04 13:09:35 app_v2/src/main/res/values-uk/strings_widget.xml spec-dev S0348 Phase 04: widget picker strings (UK) [branch: DEBUG-v012]
2026-06-04 13:10:24 app_v2/src/main/res/values/strings_widget.xml S0351 Add Audio Now Playing widget English strings [branch: DEBUG-v012]
2026-06-04 13:10:24 app_v2/src/main/res/xml/widget_audio_now_playing_info.xml S0351 Add Audio Now Playing widget provider info [branch: DEBUG-v012]
2026-06-04 13:10:24 app_v2/src/main/res/values-uk/strings_widget.xml S0351 Add Audio Now Playing widget Ukrainian strings [branch: DEBUG-v012]
2026-06-04 13:10:25 app_v2/src/main/res/values-ru/strings_widget.xml S0351 Add Audio Now Playing widget Russian strings [branch: DEBUG-v012]
2026-06-04 13:10:25 app_v2/src/main/res/layout/widget_audio_now_playing.xml S0351 Add Audio Now Playing widget layout [branch: DEBUG-v012]
2026-06-04 13:10:50 PLAN/S0351_widget-audio-now-playing/PHASE_01__widget-surface.md S0351 Record S0351 widget surface verification [branch: DEBUG-v012]
2026-06-04 13:10:51 PLAN/S0351_widget-audio-now-playing/INDEX.md S0351 Mark S0351 phase 01 complete [branch: DEBUG-v012]
2026-06-04 13:13:08 docs/FEATURES.md spec-dev S0348 Phase 05: icon-style home widgets feature bullet (EN) [branch: DEBUG-v012]
2026-06-04 13:13:08 docs/FEATURES_RU.md spec-dev S0348 Phase 05: icon-style home widgets feature bullet (RU) [branch: DEBUG-v012]
2026-06-04 13:13:08 docs/FEATURES_UK.md spec-dev S0348 Phase 05: icon-style home widgets feature bullet (UK) [branch: DEBUG-v012]
2026-06-04 13:13:10 app_v2/src/main/java/com/sza/fastmediasorter/widget/AudioNowPlayingSnapshotStore.kt S0351 Add Audio Now Playing widget snapshot store [branch: DEBUG-v012]
2026-06-04 13:13:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt S0351 Publish Audio Now Playing widget snapshot from playback service [branch: DEBUG-v012]
2026-06-04 13:14:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/model/MediaItemWithMeta.kt S0351 Carry Audio Now Playing widget identity metadata [branch: DEBUG-v012]
2026-06-04 13:15:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NowPlayingManager.kt S0351 Attach source identity to now-playing media items [branch: DEBUG-v012]
2026-06-04 13:16:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt S0351 Persist now-playing identity extras in Media3 metadata [branch: DEBUG-v012]
2026-06-04 13:18:37 PLAN/S0353_widget-scheduled-tasks.md spec-all F1: strategic spec for scheduled-tasks home widget, research-resolved, approved [branch: DEBUG-v012]
2026-06-04 13:18:55 app_v2/src/main/java/com/sza/fastmediasorter/widget/AudioNowPlayingWidgetProvider.kt S0351 Add Audio Now Playing widget provider [branch: DEBUG-v012]
2026-06-04 13:19:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsWidgetHelper.kt spec-dev S0348: BlockNeedUserTest debug probes (picker open + pin request) [branch: DEBUG-v012]
2026-06-04 13:19:20 app_v2/src/main/java/com/sza/fastmediasorter/widget/GameLaunchWidgetProvider.kt spec-dev S0348: BlockNeedUserTest debug probe (game widget render) [branch: DEBUG-v012]
2026-06-04 13:19:42 app_v2/src/main/java/com/sza/fastmediasorter/widget/registry/HomeWidgetCatalog.kt S0351 Add Audio Now Playing widget to picker registry [branch: DEBUG-v012]
2026-06-04 13:20:29 app_v2/src/main/AndroidManifest.xml S0351 Register Audio Now Playing widget provider [branch: DEBUG-v012]
2026-06-04 13:20:29 app_v2/src/lite/AndroidManifest.xml S0351 Remove Audio Now Playing widget from lite flavor [branch: DEBUG-v012]
2026-06-04 13:20:30 app_v2/src/photos/AndroidManifest.xml S0351 Remove Audio Now Playing widget from photos flavor [branch: DEBUG-v012]
2026-06-04 13:21:07 PLAN/S0351_widget-audio-now-playing/INDEX.md S0351 Mark S0351 phases 02 and 03 complete [branch: DEBUG-v012]
2026-06-04 13:21:07 PLAN/S0351_widget-audio-now-playing/PHASE_03__provider-manifest.md S0351 Record S0351 provider manifest verification [branch: DEBUG-v012]
2026-06-04 13:21:08 PLAN/S0351_widget-audio-now-playing/PHASE_02__service-snapshot.md S0351 Record S0351 service snapshot verification [branch: DEBUG-v012]
2026-06-04 13:21:49 docs/FEATURES.md S0351 Document Audio Now Playing widget in English feature inventory [branch: DEBUG-v012]
2026-06-04 13:21:49 docs/FEATURES_RU.md S0351 Document Audio Now Playing widget in Russian feature inventory [branch: DEBUG-v012]
2026-06-04 13:21:49 docs/FEATURES_UK.md S0351 Document Audio Now Playing widget in Ukrainian feature inventory [branch: DEBUG-v012]
2026-06-04 13:24:22 PLAN/S0353_widget-scheduled-tasks/INDEX.md spec-tech Create tactical plan for S0353 (4 phases) [branch: DEBUG-v012]
2026-06-04 13:24:22 PLAN/S0353_widget-scheduled-tasks/PHASE_01__scheduler-controls.md spec-tech Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:24:22 PLAN/S0353_widget-scheduled-tasks/PHASE_02__widget-surface.md spec-tech Phase 02: widget provider, service, layouts, manifest [branch: DEBUG-v012]
2026-06-04 13:24:22 PLAN/S0353_widget-scheduled-tasks/PHASE_03__wiring-refresh-nav.md spec-tech Phase 03: refresh hook, registry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:24:22 PLAN/S0353_widget-scheduled-tasks/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs, catalog, functionality log [branch: DEBUG-v012]
2026-06-04 13:24:22 PLAN/S0353_widget-scheduled-tasks.md spec-tech Status -> Tactical [branch: DEBUG-v012]
2026-06-04 13:27:37 dev/CATALOG/app_v2.md S0351 Render app_v2 catalog for Audio Now Playing widget [branch: DEBUG-v012]
2026-06-04 13:27:37 dev/CATALOG/app_v2.jsonl S0351 Regenerate app_v2 catalog for Audio Now Playing widget [branch: DEBUG-v012]
2026-06-04 13:27:53 app_v2/src/main/java/com/sza/fastmediasorter/widget/AudioNowPlayingWidgetProvider.kt S0351 Keep Audio Now Playing provider within line budget [branch: DEBUG-v012]
2026-06-04 13:31:49 PLAN/S0351_widget-audio-now-playing/INDEX.md spec-dev Close S0351 tactical index after all phases pass [branch: DEBUG-v012]
2026-06-04 13:31:49 PLAN/S0351_widget-audio-now-playing/PHASE_02__service-snapshot.md spec-dev Record Audio Service Controller metadata extras in S0351 phase 02 [branch: DEBUG-v012]
2026-06-04 13:31:50 PLAN/S0351_widget-audio-now-playing/PHASE_03__provider-manifest.md spec-dev Record merged manifest verification for S0351 phase 03 [branch: DEBUG-v012]
2026-06-04 13:31:50 PLAN/S0351_widget-audio-now-playing/PHASE_04__docs-catalog-cleanup.md spec-dev Close S0351 docs catalog and build cleanup phase [branch: DEBUG-v012]
2026-06-04 13:31:50 PLAN/S0351_widget-audio-now-playing.md spec-dev Move S0351 to Implemented after tactical phases pass [branch: DEBUG-v012]
2026-06-04 13:33:34 PLAN/S0351_widget-audio-now-playing.md spec-check Audit S0351 to Verified; PASS/WARN/FAIL 83/0/0; debug tags removed 0 [branch: DEBUG-v012]
2026-06-04 13:33:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:42 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/SettingsRepository.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:42 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ScheduledOperationDao.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ScheduledOperationRepository.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ScheduledOperationRepositoryImpl.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/main/java/com/sza/fastmediasorter/worker/WorkManagerScheduler.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/ScheduledOperationsViewModel.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/main/java/com/sza/fastmediasorter/worker/ScheduledOperationsBootReceiver.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeSettingsRepository.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:33:43 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeScheduledOperationRepository.kt spec-dev S0353 Phase 01: scheduler controls, durable pause, nextRunAt init [branch: DEBUG-v012]
2026-06-04 13:45:02 app_v2/src/main/res/drawable/ic_widget_scheduled_tasks.xml spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:02 app_v2/src/main/res/xml/widget_scheduled_tasks_info.xml spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:03 app_v2/src/main/res/layout/widget_scheduled_tasks.xml spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:03 app_v2/src/main/res/layout/widget_scheduled_tasks_item.xml spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:03 app_v2/src/main/java/com/sza/fastmediasorter/widget/ScheduledTasksWidgetProvider.kt spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:03 app_v2/src/main/java/com/sza/fastmediasorter/widget/ScheduledTasksWidgetService.kt spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:03 app_v2/src/main/AndroidManifest.xml spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:03 app_v2/src/main/res/values/strings_widget.xml spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:03 app_v2/src/main/res/values-ru/strings_widget.xml spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:45:03 app_v2/src/main/res/values-uk/strings_widget.xml spec-dev S0353 Phase 02: scheduled-tasks widget provider/service/layouts/strings/manifest [branch: DEBUG-v012]
2026-06-04 13:50:01 app_v2/src/main/java/com/sza/fastmediasorter/widget/ScheduledTasksWidgetRefresher.kt spec-dev S0353 Phase 03: widget refresh hook, picker registry entry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:50:01 app_v2/src/main/java/com/sza/fastmediasorter/worker/ScheduledOperationsWorker.kt spec-dev S0353 Phase 03: widget refresh hook, picker registry entry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:50:01 app_v2/src/main/java/com/sza/fastmediasorter/worker/WorkManagerScheduler.kt spec-dev S0353 Phase 03: widget refresh hook, picker registry entry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:50:01 app_v2/src/main/java/com/sza/fastmediasorter/widget/registry/HomeWidgetCatalog.kt spec-dev S0353 Phase 03: widget refresh hook, picker registry entry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:50:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-dev S0353 Phase 03: widget refresh hook, picker registry entry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:50:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0353 Phase 03: widget refresh hook, picker registry entry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:50:01 app_v2/src/main/java/com/sza/fastmediasorter/widget/ScheduledTasksWidgetProvider.kt spec-dev S0353 Phase 03: widget refresh hook, picker registry entry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:50:01 app_v2/src/main/java/com/sza/fastmediasorter/widget/ScheduledTasksWidgetService.kt spec-dev S0353 Phase 03: widget refresh hook, picker registry entry, settings deep-link [branch: DEBUG-v012]
2026-06-04 13:56:16 docs/FEATURES.md spec-dev S0353 Phase 04: FEATURES trilingual - Scheduled Tasks widget [branch: DEBUG-v012]
2026-06-04 13:56:16 docs/FEATURES_RU.md spec-dev S0353 Phase 04: FEATURES trilingual - Scheduled Tasks widget [branch: DEBUG-v012]
2026-06-04 13:56:16 docs/FEATURES_UK.md spec-dev S0353 Phase 04: FEATURES trilingual - Scheduled Tasks widget [branch: DEBUG-v012]
2026-06-04 13:57:41 PLAN/S0353_widget-scheduled-tasks.md spec-dev All 4 phases done; build OK; status -> BlockNeedUserTest with S0353 debug probes [branch: DEBUG-v012]
2026-06-04 13:57:41 app_v2/src/main/java/com/sza/fastmediasorter/widget/ScheduledTasksWidgetProvider.kt spec-dev S0353 BlockNeedUserTest debug probes (render/RunAll/Pause-Resume) [branch: DEBUG-v012]
2026-06-04 13:57:41 app_v2/src/main/java/com/sza/fastmediasorter/worker/ScheduledOperationsWorker.kt spec-dev S0353 BlockNeedUserTest debug probe (widget refresh after run) [branch: DEBUG-v012]
2026-06-04 13:57:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0353 BlockNeedUserTest debug probe (settings deep-link) [branch: DEBUG-v012]
2026-06-04 14:00:37 PLAN/S0353_widget-scheduled-tasks.md spec-all Pipeline BlockNeedUserTest: S0353 scheduled-tasks widget implemented, built, unit-tested; awaiting on-device verification [branch: DEBUG-v012]
2026-06-04 14:59:12 PLAN/S0352_widget-random-photo-frame.md spec-all Auto-approve strategic spec S0352 [branch: DEBUG-v012]
2026-06-04 15:07:17 PLAN/S0349_widget-quick-audio-recorder.md spec-all S0349 strategic finalized: resolved open questions, Draft->Approved [branch: DEBUG-v012]
2026-06-04 15:07:26 PLAN/S0352_widget-random-photo-frame.md spec-tech Link tactical plan and advance S0352 to Tactical [branch: DEBUG-v012]
2026-06-04 15:07:26 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-tech Create tactical index for S0352 [branch: DEBUG-v012]
2026-06-04 15:07:27 PLAN/S0352_widget-random-photo-frame/PHASE_01__config-foundation.md spec-tech Create Phase 01 plan for S0352 [branch: DEBUG-v012]
2026-06-04 15:07:27 PLAN/S0352_widget-random-photo-frame/PHASE_02__photo-surface.md spec-tech Create Phase 02 plan for S0352 [branch: DEBUG-v012]
2026-06-04 15:07:27 PLAN/S0352_widget-random-photo-frame/PHASE_03__refresh-scheduling.md spec-tech Create Phase 03 plan for S0352 [branch: DEBUG-v012]
2026-06-04 15:07:27 PLAN/S0352_widget-random-photo-frame/PHASE_04__docs-catalog-cleanup.md spec-tech Create Phase 04 plan for S0352 [branch: DEBUG-v012]
2026-06-04 15:09:03 PLAN/S0352_widget-random-photo-frame.md spec-dev Advance S0352 to In Progress [branch: DEBUG-v012]
2026-06-04 15:09:03 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Start Phase 01 for S0352 [branch: DEBUG-v012]
2026-06-04 15:09:03 PLAN/S0352_widget-random-photo-frame/PHASE_01__config-foundation.md spec-dev Close Step 01.1 for S0352 [branch: DEBUG-v012]
2026-06-04 15:09:03 app_v2/src/main/res/values/strings_widget.xml spec-dev Add Random Photo Frame EN strings [branch: DEBUG-v012]
2026-06-04 15:09:04 app_v2/src/main/res/values-ru/strings_widget.xml spec-dev Add Random Photo Frame RU strings [branch: DEBUG-v012]
2026-06-04 15:09:05 app_v2/src/main/res/values-uk/strings_widget.xml spec-dev Add Random Photo Frame UK strings [branch: DEBUG-v012]
2026-06-04 15:10:11 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 01 progress to 2 of 6 for S0352 [branch: DEBUG-v012]
2026-06-04 15:10:11 PLAN/S0352_widget-random-photo-frame/PHASE_01__config-foundation.md spec-dev Close Step 01.2 for S0352 [branch: DEBUG-v012]
2026-06-04 15:10:11 app_v2/src/main/res/layout/widget_random_photo_frame.xml spec-dev Add Random Photo Frame widget layout [branch: DEBUG-v012]
2026-06-04 15:10:12 app_v2/src/main/res/xml/widget_random_photo_frame_info.xml spec-dev Add Random Photo Frame widget metadata [branch: DEBUG-v012]
2026-06-04 15:10:36 PLAN/S0349_widget-quick-audio-recorder/INDEX.md spec-all S0349 tactical plan: 5 phases (widget shell, mic FGS, trampoline, flavor gating, docs) [branch: DEBUG-v012]
2026-06-04 15:10:58 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 01 progress to 3 of 6 for S0352 [branch: DEBUG-v012]
2026-06-04 15:10:58 PLAN/S0352_widget-random-photo-frame/PHASE_01__config-foundation.md spec-dev Close Step 01.3 for S0352 [branch: DEBUG-v012]
2026-06-04 15:10:58 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameSnapshotStore.kt spec-dev Add Random Photo Frame snapshot store [branch: DEBUG-v012]
2026-06-04 15:13:47 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 01 progress to 4 of 6 for S0352 [branch: DEBUG-v012]
2026-06-04 15:13:48 PLAN/S0352_widget-random-photo-frame/PHASE_01__config-foundation.md spec-dev Close Step 01.4 for S0352 [branch: DEBUG-v012]
2026-06-04 15:13:48 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameConfigActivity.kt spec-dev Add Random Photo Frame config activity [branch: DEBUG-v012]
2026-06-04 15:15:37 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 01 progress to 5 of 6 for S0352 [branch: DEBUG-v012]
2026-06-04 15:15:37 PLAN/S0352_widget-random-photo-frame/PHASE_01__config-foundation.md spec-dev Close Step 01.5 for S0352 [branch: DEBUG-v012]
2026-06-04 15:15:38 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameWidgetProvider.kt spec-dev Add Random Photo Frame widget provider skeleton [branch: DEBUG-v012]
2026-06-04 15:18:29 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 01 progress to 6 of 6 for S0352 [branch: DEBUG-v012]
2026-06-04 15:18:29 PLAN/S0352_widget-random-photo-frame/PHASE_01__config-foundation.md spec-dev Close Step 01.6 for S0352 [branch: DEBUG-v012]
2026-06-04 15:18:29 app_v2/src/main/AndroidManifest.xml spec-dev Register Random Photo Frame widget manifest declarations [branch: DEBUG-v012]
2026-06-04 15:18:30 app_v2/src/main/java/com/sza/fastmediasorter/widget/registry/HomeWidgetCatalog.kt spec-dev Register Random Photo Frame widget in picker catalog [branch: DEBUG-v012]
2026-06-04 15:22:32 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Mark Phase 01 done for S0352 [branch: DEBUG-v012]
2026-06-04 15:22:32 PLAN/S0352_widget-random-photo-frame/PHASE_01__config-foundation.md spec-dev Record Phase 01 closure checks for S0352 [branch: DEBUG-v012]
2026-06-04 15:25:58 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderWidgetProvider.kt spec-all S0349: Quick Audio Recorder widget provider (1x1 icon-only, toggle via trampoline, icon state) [branch: DEBUG-v012]
2026-06-04 15:25:58 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt spec-all S0349: microphone foreground service (MediaRecorder, notification+Stop, save to Music/) [branch: DEBUG-v012]
2026-06-04 15:25:58 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderActivity.kt spec-all S0349: transparent trampoline activity hosting RECORD_AUDIO launcher [branch: DEBUG-v012]
2026-06-04 15:25:58 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderLaunchManager.kt spec-all S0349: launch manager (toggle, permission request, settings fallback) [branch: DEBUG-v012]
2026-06-04 15:25:58 app_v2/src/main/res/layout/widget_quick_audio_recorder.xml spec-all S0349: widget layout + info xml + idle/recording/themed drawables + EN/RU/UK strings [branch: DEBUG-v012]
2026-06-04 15:25:58 app_v2/src/main/AndroidManifest.xml spec-all S0349: receiver+activity+service+FOREGROUND_SERVICE_MICROPHONE; lite/photos manifest removals [branch: DEBUG-v012]
2026-06-04 15:25:58 app_v2/src/main/java/com/sza/fastmediasorter/widget/registry/HomeWidgetCatalog.kt spec-all S0349: register Quick Audio Recorder in in-app widget picker [branch: DEBUG-v012]
2026-06-04 15:25:58 docs/FEATURES.md spec-all S0349: Quick Recorder widget feature entry (EN/RU/UK) [branch: DEBUG-v012]
2026-06-04 15:27:16 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Start Phase 02 and mark Step 02.1 done for S0352 [branch: DEBUG-v012]
2026-06-04 15:27:16 PLAN/S0352_widget-random-photo-frame/PHASE_02__photo-surface.md spec-dev Record Step 02.1 completion for S0352 [branch: DEBUG-v012]
2026-06-04 15:27:16 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameSnapshotStore.kt spec-dev Allow silent snapshot updates for widget refresh [branch: DEBUG-v012]
2026-06-04 15:28:23 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameWidgetRefresher.kt spec-dev Add cache-backed random photo widget refresher [branch: DEBUG-v012]
2026-06-04 15:30:06 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 02 progress to 2 of 3 for S0352 [branch: DEBUG-v012]
2026-06-04 15:30:06 PLAN/S0352_widget-random-photo-frame/PHASE_02__photo-surface.md spec-dev Close Step 02.2 for S0352 [branch: DEBUG-v012]
2026-06-04 15:30:06 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameWidgetProvider.kt spec-dev Render cached photo and fallback state in Random Photo Frame widget [branch: DEBUG-v012]
2026-06-04 15:31:55 PLAN/S0349_widget-quick-audio-recorder.md spec-all Pipeline BlockNeedUserTest: S0349 implemented (3 flavors build), device-test deferred (no device) [branch: DEBUG-v012]
2026-06-04 15:32:10 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 02 progress to 3 of 3 for S0352 [branch: DEBUG-v012]
2026-06-04 15:32:11 PLAN/S0352_widget-random-photo-frame/PHASE_02__photo-surface.md spec-dev Close Step 02.3 for S0352 [branch: DEBUG-v012]
2026-06-04 15:32:11 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameWidgetProvider.kt spec-dev Bind direct-open and browse fallback intents for Random Photo Frame widget [branch: DEBUG-v012]
2026-06-04 15:34:05 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Mark Phase 02 done for S0352 [branch: DEBUG-v012]
2026-06-04 15:34:05 PLAN/S0352_widget-random-photo-frame/PHASE_02__photo-surface.md spec-dev Record Phase 02 closure checks for S0352 [branch: DEBUG-v012]
2026-06-04 15:35:42 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Start Phase 03 and mark Step 03.1 done for S0352 [branch: DEBUG-v012]
2026-06-04 15:35:42 PLAN/S0352_widget-random-photo-frame/PHASE_03__refresh-scheduling.md spec-dev Record Step 03.1 completion for S0352 [branch: DEBUG-v012]
2026-06-04 15:35:43 app_v2/src/main/java/com/sza/fastmediasorter/worker/RandomPhotoFrameRefreshWorker.kt spec-dev Add periodic Random Photo Frame refresh worker [branch: DEBUG-v012]
2026-06-04 15:37:44 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 03 progress to 2 of 3 for S0352 [branch: DEBUG-v012]
2026-06-04 15:37:45 PLAN/S0352_widget-random-photo-frame/PHASE_03__refresh-scheduling.md spec-dev Close Step 03.2 for S0352 [branch: DEBUG-v012]
2026-06-04 15:37:45 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameWidgetProvider.kt spec-dev Schedule periodic Random Photo Frame widget refresh from provider lifecycle [branch: DEBUG-v012]
2026-06-04 15:39:35 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Update Phase 03 progress to 3 of 3 for S0352 [branch: DEBUG-v012]
2026-06-04 15:39:35 PLAN/S0352_widget-random-photo-frame/PHASE_03__refresh-scheduling.md spec-dev Close Step 03.3 for S0352 [branch: DEBUG-v012]
2026-06-04 15:39:35 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameConfigActivity.kt spec-dev Trigger immediate Random Photo Frame refresh after configuration [branch: DEBUG-v012]
2026-06-04 15:42:13 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Mark Phase 03 done for S0352 [branch: DEBUG-v012]
2026-06-04 15:42:14 PLAN/S0352_widget-random-photo-frame/PHASE_03__refresh-scheduling.md spec-dev Record Phase 03 closure checks for S0352 [branch: DEBUG-v012]
2026-06-04 15:43:43 PLAN/S0352_widget-random-photo-frame/INDEX.md spec-dev Start Phase 04 and mark Step 04.1 done for S0352 [branch: DEBUG-v012]
2026-06-04 15:43:43 PLAN/S0352_widget-random-photo-frame/PHASE_04__docs-catalog-cleanup.md spec-dev Record Step 04.1 completion for S0352 [branch: DEBUG-v012]
2026-06-04 15:43:44 docs/FEATURES.md doc-update Document Random Photo Frame widget feature [branch: DEBUG-v012]
2026-06-04 15:43:44 docs/FEATURES_RU.md doc-update Document Random Photo Frame widget feature in Russian [branch: DEBUG-v012]
2026-06-04 15:43:44 docs/FEATURES_UK.md doc-update Document Random Photo Frame widget feature in Ukrainian [branch: DEBUG-v012]
2026-06-04 15:48:37 PLAN/S0352_widget-random-photo-frame.md spec Record final S0352 audit block and verified status [branch: DEBUG-v012]
2026-06-04 15:48:37 PLAN/S0352_widget-random-photo-frame/INDEX.md tactical-plan Close S0352 tactical plan after final audit [branch: DEBUG-v012]
2026-06-04 15:48:38 PLAN/S0352_widget-random-photo-frame/PHASE_04__docs-catalog-cleanup.md phase-04 Close S0352 phase 04 after docs, catalog, and changelog verification [branch: DEBUG-v012]
2026-06-04 16:55:47 PLAN/S0354_camera-ocr-crop-language-buttons.md spec Add draft strategic spec S0354 for camera OCR crop-screen language buttons [branch: DEBUG-v012]
2026-06-04 17:04:17 PLAN/S0354_camera-ocr-crop-language-buttons.md spec Refine S0354 draft: language cluster in crop action row, global settings persistence, target hidden when translation unavailable [branch: DEBUG-v012]
2026-06-04 17:27:19 PLAN/S0354_camera-ocr-crop-language-buttons.md spec Resolve S0354 open questions: no languages in crop hint; results-screen dialog keeps only target language and re-translates existing OCR text, OCR language picker removed there [branch: DEBUG-v012]
2026-06-04 17:37:57 PLAN/S0354_camera-ocr-crop-language-buttons.md spec-all Approve strategic spec S0354 (owner-inputs PASS, drift CLEAN) [branch: DEBUG-v012]
2026-06-04 17:41:00 PLAN/S0354_camera-ocr-crop-language-buttons/INDEX.md spec-all Tactical plan S0354: 4 phases (crop cluster, wiring, results-dialog rework, docs) [branch: DEBUG-v012]
2026-06-04 17:51:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt spec-all S0354: crop-screen OCR/translation language cluster, results dialog target-only re-translate, raw-source auto-detect fix [branch: DEBUG-v012]
2026-06-04 17:51:48 docs/FEATURES.md spec-all S0354: document camera OCR crop-screen language selection and results re-translate [branch: DEBUG-v012]
2026-06-04 17:55:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt spec-all S0354: insert BlockNeedUserTest debug probes at crop language render/pick and results re-translate [branch: DEBUG-v012]
2026-06-04 17:55:50 PLAN/S0354_camera-ocr-crop-language-buttons.md spec-all Pipeline BlockNeedUserTest: S0354 implemented + built; device test deferred (no device) [branch: DEBUG-v012]
2026-06-04 18:04:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt S0354 camera OCR crop language buttons Fix crop-language accessibility and translation gating [branch: DEBUG-v012]
2026-06-04 18:05:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt S0354 camera OCR crop language buttons Fix camera OCR translation gating and re-translate error handling [branch: DEBUG-v012]
2026-06-04 18:07:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt S0354 camera OCR crop language buttons Align effective OCR-only state with global translation toggle [branch: DEBUG-v012]
2026-06-04 21:08:21 PLAN/S0355_bugfix-cloud-apk-classify-crash.md spec Add strategic spec S0355 for cloud APK classification FATAL crash (NoSuchFileException on temp copy) [branch: DEBUG-v012]
2026-06-04 21:11:26 PLAN/S0356_bugfix-player-media-load-npe.md spec Add strategic spec S0356 for MediaFile.copy NPE on player media load (null in non-null field) [branch: DEBUG-v012]
2026-06-04 21:14:44 PLAN/S0357_smb-video-playback-robustness.md spec Add strategic spec S0357 for SMB network video playback robustness (DataSource uri contract, stuck buffering, decoder) [branch: DEBUG-v012]
2026-06-04 21:19:43 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-update Log observation 2026-06-04: S0289 probe floods log (30073 hits/session in analog-stick handler); throttle recommendation, status/probes untouched [branch: DEBUG-v012]
2026-06-04 21:19:43 PLAN/S0336_nolegal-extended-system-info.md spec-update Log observation 2026-06-04: selinux EACCES caught but logs full stacktrace on Quest; quiet-logging recommendation, status/probes untouched [branch: DEBUG-v012]
2026-06-04 21:19:44 PLAN/S0337_system-info-extended-fields.md spec-update Log observation 2026-06-04: getUserName SecurityException caught but logs full stacktrace on Quest; quiet-logging recommendation, status/probes untouched [branch: DEBUG-v012]
2026-06-04 21:20:05 PLAN/S0358_player-resource-playback-order.md spec Add primitive spec S0358 for player resource playback order [branch: DEBUG-v012]
2026-06-04 21:20:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt app_v2 browse random playback Launch player with shuffle override from Browse random play [branch: DEBUG-v012]
2026-06-04 21:20:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlPreferences.kt app_v2 playback order prefs Add per-resource playback order preference helpers [branch: DEBUG-v012]
2026-06-04 21:21:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt app_v2 player playback order Restore and persist playback order per resource [branch: DEBUG-v012]
2026-06-04 21:22:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt app_v2 browse random playback Launch player with shuffle override from Browse random play [branch: DEBUG-v012]
2026-06-04 21:22:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt app_v2 player playback order Restore and persist playback order per resource [branch: DEBUG-v012]
2026-06-04 21:51:44 PLAN/S0355_bugfix-cloud-apk-classify-crash/INDEX.md spec-tech Create tactical plan for S0355 (4 phases) [branch: DEBUG-v012]
2026-06-04 21:51:44 PLAN/S0355_bugfix-cloud-apk-classify-crash.md spec-tech Status -> Tactical [branch: DEBUG-v012]
2026-06-04 21:51:45 PLAN/S0356_bugfix-player-media-load-npe/INDEX.md spec-tech Create tactical plan for S0356 (5 phases) [branch: DEBUG-v012]
2026-06-04 21:51:45 PLAN/S0356_bugfix-player-media-load-npe.md spec-tech Status -> Tactical [branch: DEBUG-v012]
2026-06-04 21:51:45 PLAN/S0357_smb-video-playback-robustness/INDEX.md spec-tech Create tactical plan for S0357 (5 phases) [branch: DEBUG-v012]
2026-06-04 21:51:45 PLAN/S0357_smb-video-playback-robustness.md spec-tech Status -> Tactical [branch: DEBUG-v012]
2026-06-04 22:34:57 PLAN/S0357_smb-video-playback-robustness.md spec-arc Archive S0357 -> temp/done/; duplicate of implemented S0343 (errorCode 2000 getUri null) + S0344 (errorCode 1004 stuck buffering); 8K decoder line was VR diagnostic S0322 [branch: DEBUG-v012]
2026-06-04 23:02:19 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt spec-dev S0355 phase-01 Fault-tolerant cloud temp-copy transfer: exists() precheck + IOException catch (return false/null) across LOCAL/SMB/SFTP/FTP in downloadFromCloudTo and downloadFromCloud; entry probe added [branch: DEBUG-v012]
2026-06-04 23:04:41 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkArchiveResolver.kt spec-dev S0355 phase-02 Defensive try/catch(Exception) around resolveCloudArchive: any cloud-copy failure degrades to null (no archive) instead of propagating [branch: DEBUG-v012]
2026-06-04 23:05:25 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkClassificationCache.kt spec-dev S0355 phase-02 classifyForCache wrapped in try/catch(Exception): any resolver/classifier failure degrades that single item to non-cacheable NOT_VR without crashing the launching coroutine [branch: DEBUG-v012]
2026-06-04 23:10:21 PLAN/S0355_bugfix-cloud-apk-classify-crash.md spec-dev S0355 phase-03 Resolved research items: root cause = OS getCacheDir() eviction under storage pressure; verdict = interception sufficient, no temp protection (Step 03.3 skipped) [branch: DEBUG-v012]
2026-06-04 23:11:04 app_v2/src/main/java/com/sza/fastmediasorter/core/util/MediaFileIntegrity.kt MediaFileIntegrity Added reusable guard for mandatory MediaFile scanner inputs [branch: DEBUG-v012]
2026-06-04 23:11:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt PlayerMediaFilesLoader Isolated favorite reconcile failures per element and lowered handled fallback logging [branch: DEBUG-v012]
2026-06-04 23:11:04 app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt SmbMediaScanner Routed MediaFile construction through MediaFileIntegrity [branch: DEBUG-v012]
2026-06-04 23:11:04 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt SftpMediaScanner Routed MediaFile construction through MediaFileIntegrity [branch: DEBUG-v012]
2026-06-04 23:11:04 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpMediaScanner.kt FtpMediaScanner Routed MediaFile construction through MediaFileIntegrity [branch: DEBUG-v012]
2026-06-04 23:11:04 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoaderReconcileTest.kt PlayerMediaFilesLoaderReconcileTest Added focused reconcile isolation unit test [branch: DEBUG-v012]
2026-06-04 23:11:04 PLAN/S0356_bugfix-player-media-load-npe.md S0356 Recorded the handled favorite reconcile warning-level decision [branch: DEBUG-v012]
2026-06-04 23:48:43 app_v2/src/main/java/com/sza/fastmediasorter/core/util/MediaFileIntegrity.kt spec-dev S0356 New reusable guard: sanitizes platform-typed scanner inputs (name/path/type/metadataState) to non-null MediaFile fields, logs substitutions [branch: DEBUG-v012]
2026-06-04 23:48:43 app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbMediaScanner.kt spec-dev S0356 Route all MediaFile() construction sites through MediaFileIntegrity to prevent null in non-null fields [branch: DEBUG-v012]
2026-06-04 23:48:43 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt spec-dev S0356 Route all MediaFile() construction sites through MediaFileIntegrity (SFTP is the confirmed crash source) [branch: DEBUG-v012]
2026-06-04 23:48:43 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpMediaScanner.kt spec-dev S0356 Route all MediaFile() construction sites through MediaFileIntegrity [branch: DEBUG-v012]
2026-06-04 23:48:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt spec-dev S0356 Per-element favorites-reconcile isolation (reconcileFavoriteFlags), reconcile log lowered to Timber.w, S0356 device probe tag [branch: DEBUG-v012]
2026-06-04 23:48:43 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoaderReconcileTest.kt spec-dev S0356 Unit test: one corrupted element kept, siblings still reconciled (reconcile isolation) [branch: DEBUG-v012]
2026-06-04 23:48:43 PLAN/S0356_bugfix-player-media-load-npe.md spec-dev S0356 Resolved research items 6.1 (creation site = network scanners/SFTP) and 6.2 (log level Timber.w) [branch: DEBUG-v012]
2026-06-05 00:57:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LanguageFlagFormatter.kt LanguageFlagFormatter Render modern white-blue-white (ru) and white-red-white (be) flags as vector images across translation/OCR language pickers, spinners and labels instead of state emoji [branch: DEBUG-v012]
2026-06-05 01:23:54 docs/WHATS_NEW.md WHATS_NEW Release notes and README for v2.60.6050.116 - plateau merge from DEBUG-v012 [branch: DEBUG-v012]
2026-06-05 01:47:43 scripts/release/publish-github-release.ps1 release-publish Resolve gh CLI from standard install dir when missing from PATH (was failing into unwired REST branch) [branch: DEBUG-v013]
2026-06-05 01:47:43 scripts/release/publish-play-release.py release-publish Drop changesNotSentForReview on Play commit (API HTTP 400 for auto-review apps) [branch: DEBUG-v013]
2026-06-05 02:01:18 gradle.properties ci-build Remove machine-specific java.io.tmpdir/org.sqlite.tmpdir absolute path that aborted Linux CI before any task [branch: DEBUG-v013]
2026-06-05 02:48:01 gradlew ci-build Drop unexpanded -Djava.io.tmpdir from gradlew/gradlew.bat DEFAULT_JVM_OPTS (literal APP_HOME aborted Linux CI); mkdir+TMP redirect retained [branch: DEBUG-v013]
2026-06-05 02:59:41 .claude/commands/skill-release.md skill-release Document full 5-channel distribution matrix (Play, GitHub Store, Google Drive, 4pda, IzzyOnDroid) with per-channel per-release actions and gotchas [branch: DEBUG-v013]
2026-06-05 03:18:08 fastlane/metadata/android/ru-RU/changelogs/260605012.txt fastlane-changelog Fix stale RU/UK fastlane changelogs for v2.60.6050.126 (advance WHATS_NEW_RU/UK mirrors + regenerate); skill Step 4 now mandates localized mirror updates [branch: DEBUG-v013]
2026-06-05 10:35:33 PLAN/S0359_camera-permission-inapp-capture.md spec Add skeletal strategic spec S0359 - CAMERA permission + in-app fast capture (CameraX), system-camera fallback, camera-to-resource settings section by analogy with voice recorder, open-for-drawing option [branch: DEBUG-v013]
2026-06-05 10:53:11 PLAN/S0360_drawing-editor-delete-file.md spec Add strategic spec S0360 - Delete file action in drawing editor overflow menu, reuses existing per-resource delete [branch: DEBUG-v013]
2026-06-05 11:00:20 PLAN/S0361_result-screen-ocr-language-reocr.md spec Add strategic spec S0361 - return OCR language to result screen with re-OCR [branch: DEBUG-v013]
2026-06-05 11:05:02 PLAN/S0361_result-screen-ocr-language-reocr/INDEX.md spec-tech Create tactical plan for S0361 [branch: DEBUG-v013]
2026-06-05 11:05:03 PLAN/S0361_result-screen-ocr-language-reocr/PHASE_01__reocr-orchestration.md spec-tech Phase 01: reocr-orchestration [branch: DEBUG-v013]
2026-06-05 11:05:03 PLAN/S0361_result-screen-ocr-language-reocr/PHASE_02__dialog-ocr-language.md spec-tech Phase 02: dialog-ocr-language [branch: DEBUG-v013]
2026-06-05 11:05:03 PLAN/S0361_result-screen-ocr-language-reocr/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-05 11:05:03 PLAN/S0361_result-screen-ocr-language-reocr.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-05 11:05:14 PLAN/S0362_keep-share-editor-regression.md spec Add strategic spec S0362 for Google Keep share regression in text and draw editors [branch: DEBUG-v013]
2026-06-05 11:13:57 PLAN/S0361_result-screen-ocr-language-reocr.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-05 11:13:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt spec-dev Result screen OCR language re-runs recognition over retained image; add hasRetainedSourceImage; debug tag [branch: DEBUG-v013]
2026-06-05 11:13:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt spec-dev Return OCR source-language control to result-screen settings dialog [branch: DEBUG-v013]
2026-06-05 11:13:57 app_v2/src/main/res/layout/dialog_camera_ocr_settings.xml spec-dev Add OCR source-language picker to camera OCR settings dialog [branch: DEBUG-v013]
2026-06-05 11:13:57 docs/FEATURES.md spec-dev Document result-screen OCR-language re-recognition [branch: DEBUG-v013]
2026-06-05 11:13:57 docs/FEATURES_RU.md spec-dev Document result-screen OCR-language re-recognition (RU) [branch: DEBUG-v013]
2026-06-05 11:13:57 docs/FEATURES_UK.md spec-dev Document result-screen OCR-language re-recognition (UK) [branch: DEBUG-v013]
2026-06-05 11:31:04 app_v2/src/main/AndroidManifest.xml manifest S0362: declare Google Keep package visibility in so editor Send-to-Keep resolves on Android 11+ [branch: DEBUG-v013]
2026-06-05 11:31:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt draw-editor S0362: hide draw overflow Send-to-Keep item when Keep is not installed (unified fallback) [branch: DEBUG-v013]
2026-06-05 11:31:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/actions/EditorActionPanelBinder.kt text-editor S0362: device-test probe for text editor Keep item visibility [branch: DEBUG-v013]
2026-06-05 11:39:04 PLAN/S0363_drawing-command-image-resources.md spec Add strategic spec S0363 for drawing command on image resources (all-images/camera/downloads, save routing) [branch: DEBUG-v013]
2026-06-05 11:43:37 PLAN/S0363_drawing-command-image-resources/INDEX.md spec-tech Create tactical plan for S0363 [branch: DEBUG-v013]
2026-06-05 11:43:37 PLAN/S0363_drawing-command-image-resources/PHASE_01__drawing-target-policy.md spec-tech Phase 01: drawing-target-policy [branch: DEBUG-v013]
2026-06-05 11:43:37 PLAN/S0363_drawing-command-image-resources/PHASE_02__save-routing-indexing.md spec-tech Phase 02: save-routing-indexing [branch: DEBUG-v013]
2026-06-05 11:43:37 PLAN/S0363_drawing-command-image-resources/PHASE_03__visibility-wiring.md spec-tech Phase 03: visibility-wiring [branch: DEBUG-v013]
2026-06-05 11:43:37 PLAN/S0363_drawing-command-image-resources/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-05 11:43:38 PLAN/S0363_drawing-command-image-resources.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-05 11:44:57 PLAN/S0359_camera-permission-inapp-capture.md spec-tech S0359 blocked on API constraint: declaring CAMERA breaks ACTION_IMAGE_CAPTURE fallback (SecurityException since API 23); status -> BlockQuestions pending owner decision [branch: DEBUG-v013]
2026-06-05 12:17:00 app_v2/src/main/java/com/sza/fastmediasorter/util/DrawingTargetPolicy.kt S0363 Add DrawingTargetPolicy: visibility + target-dir routing for Create drawing on image resources [branch: DEBUG-v013]
2026-06-05 12:19:00 app_v2/src/test/java/com/sza/fastmediasorter/util/DrawingTargetPolicyTest.kt S0363 Add DrawingTargetPolicyTest: canCreateDrawing visibility cases [branch: DEBUG-v013]
2026-06-05 12:23:30 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CreateDrawingUseCase.kt S0363 Route drawing save dir via DrawingTargetPolicy + index new local file in MediaStore [branch: DEBUG-v013]
2026-06-05 12:25:57 PLAN/S0359_camera-permission-inapp-capture.md spec S0359 owner resolved Variant 1: CAMERA mandatory, in-app CameraX is the sole capture path, OEM confirmation screen removed; §6.6 closed; status -> Approved [branch: DEBUG-v013]
2026-06-05 12:29:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt S0363 Route Create drawing overflow item + dialog guard through DrawingTargetPolicy [branch: DEBUG-v013]
2026-06-05 12:29:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt S0363 Route Create drawing toolbar button visibility through DrawingTargetPolicy [branch: DEBUG-v013]
2026-06-05 12:30:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDrawingCreateManager.kt S0363 Align isAvailableFor predicate with DrawingTargetPolicy [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/INDEX.md spec-tech Create tactical plan INDEX for S0359 (8 phases) [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/PHASE_01__foundations-permission-deps.md spec-tech Phase 01: CameraX deps, CAMERA permission, registry entry, strings [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/PHASE_02__inapp-camera-screen.md spec-tech Phase 02: in-app CameraX capture screen [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/PHASE_03__ocr-inapp-capture.md spec-tech Phase 03: OCR flow uses in-app capture [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/PHASE_04__settings-keys.md spec-tech Phase 04: open-for-editing setting key + backup [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/PHASE_05__camera-resource-settings-ui.md spec-tech Phase 05: Camera-to-Resource settings section [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/PHASE_06__browse-inapp-capture-editing.md spec-tech Phase 06: Browse in-app capture + open-for-editing [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/PHASE_07__optional-permissions-grouping.md spec-tech Phase 07: Optional permissions visual grouping [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture/PHASE_08__docs-catalog-cleanup.md spec-tech Phase 08: docs, functionality log, catalog cleanup [branch: DEBUG-v013]
2026-06-05 12:32:20 PLAN/S0359_camera-permission-inapp-capture.md spec-tech S0359 status to Tactical [branch: DEBUG-v013]
2026-06-05 12:33:35 docs/FEATURES.md S0363 Extend drawing entry: command available on All Images / Camera / Downloads; All Images -> Downloads [branch: DEBUG-v013]
2026-06-05 12:33:36 docs/FEATURES_RU.md S0363 Extend drawing entry (RU): command on All Images / Camera / Downloads [branch: DEBUG-v013]
2026-06-05 12:33:36 docs/FEATURES_UK.md S0363 Extend drawing entry (UK): command on All Images / Camera / Downloads [branch: DEBUG-v013]
2026-06-05 12:39:02 PLAN/S0363_drawing-command-image-resources.md spec-dev All 4 phases done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-05 12:39:02 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CreateDrawingUseCase.kt spec-dev Insert S0363 BlockNeedUserTest debug probe at drawing target-path resolution [branch: DEBUG-v013]
2026-06-05 12:46:35 PLAN/S0363_drawing-command-image-resources.md spec-check Static audit S0363 -> all checks PASS (27/0/0); status kept BlockNeedUserTest, device-test probe retained [branch: DEBUG-v013]
2026-06-05 12:57:31 PLAN/S0360_drawing-editor-delete-file/INDEX.md spec-tech Create tactical plan for S0360 (delete file in drawing editor) [branch: DEBUG-v013]
2026-06-05 12:57:31 PLAN/S0360_drawing-editor-delete-file/PHASE_01__delete-flow.md spec-tech Phase 01: delete-flow [branch: DEBUG-v013]
2026-06-05 12:57:31 PLAN/S0360_drawing-editor-delete-file/PHASE_02__editor-menu.md spec-tech Phase 02: editor-menu [branch: DEBUG-v013]
2026-06-05 12:57:31 PLAN/S0360_drawing-editor-delete-file/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-05 12:57:31 PLAN/S0360_drawing-editor-delete-file.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-05 12:59:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDeleteUndoCoordinator.kt spec-dev S0360 Phase 01.1: add finishOnSuccess branch returning to browse on editor-initiated delete [branch: DEBUG-v013]
2026-06-05 13:00:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt spec-dev S0360 Phase 01.2: add deleteCurrentFileAndFinish() returning to browse on success [branch: DEBUG-v013]
2026-06-05 13:04:38 PLAN/S0364_settings-interface-group-split.md spec Add strategic spec S0364 for settings interface group split [branch: DEBUG-v013]
2026-06-05 13:09:38 app_v2/src/main/res/values/strings_drawing.xml spec-dev S0360 Phase 02.1: add draw_overflow_delete_file string (EN/RU/UK) [branch: DEBUG-v013]
2026-06-05 13:10:15 app_v2/src/main/res/menu/menu_draw_overflow.xml spec-dev S0360 Phase 02.2: add Delete file item to draw overflow menu [branch: DEBUG-v013]
2026-06-05 13:11:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt spec-dev S0360 Phase 02.3: add onDeleteRequested to DrawOverlayActionCallback [branch: DEBUG-v013]
2026-06-05 13:12:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDrawingSaveHelper.kt spec-dev S0360 Phase 02.3: implement confirm+delete of current file in drawing editor [branch: DEBUG-v013]
2026-06-05 13:13:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt spec-dev S0360 Phase 02.4: wire Delete file menu branch and visibility gate [branch: DEBUG-v013]
2026-06-05 13:23:23 docs/FEATURES.md spec-dev S0360: document delete-file action in drawing editor [branch: DEBUG-v013]
2026-06-05 13:23:23 docs/FEATURES_RU.md spec-dev S0360: document delete-file action in drawing editor [branch: DEBUG-v013]
2026-06-05 13:23:23 docs/FEATURES_UK.md spec-dev S0360: document delete-file action in drawing editor [branch: DEBUG-v013]
2026-06-05 13:25:22 PLAN/S0360_drawing-editor-delete-file.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-05 13:25:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDrawingSaveHelper.kt spec-dev S0360: insert BlockNeedUserTest debug tag at editor delete entry [branch: DEBUG-v013]
2026-06-05 13:25:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDeleteUndoCoordinator.kt spec-dev S0360: insert BlockNeedUserTest debug tag at editor-delete success path [branch: DEBUG-v013]
2026-06-05 13:41:03 app_v2/build.gradle.kts spec-dev S0359 Add CameraX dependencies for in-app capture and restore pre-validation version fields after build-script noise [branch: DEBUG-v013]
2026-06-05 13:41:03 app_v2/src/main/AndroidManifest.xml spec-dev S0359 Declare CAMERA permission, optional camera features and the in-app CameraCaptureActivity [branch: DEBUG-v013]
2026-06-05 13:41:04 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt spec-dev S0359 Register optional CAMERA permission entry and explicit camera group mapping [branch: DEBUG-v013]
2026-06-05 13:41:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0359 Add in-app CameraX capture Activity with CAMERA permission request and File output handling [branch: DEBUG-v013]
2026-06-05 13:41:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSessionManager.kt spec-dev S0359 Add CameraX session manager for preview binding and JPEG capture [branch: DEBUG-v013]
2026-06-05 13:41:04 app_v2/src/main/res/layout/activity_camera_capture.xml spec-dev S0359 Add portrait in-app camera capture screen layout [branch: DEBUG-v013]
2026-06-05 13:41:05 app_v2/src/main/res/layout-land/activity_camera_capture.xml spec-dev S0359 Add landscape in-app camera capture screen layout [branch: DEBUG-v013]
2026-06-05 13:41:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrStorageManager.kt spec-dev S0359 Switch OCR camera availability checks to camera hardware and expose capture-intent context [branch: DEBUG-v013]
2026-06-05 13:41:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt spec-dev S0359 Route OCR capture through in-app CameraCaptureActivity and add BlockNeedUserTest debug probe [branch: DEBUG-v013]
2026-06-05 13:41:05 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0359 Add cameraCaptureOpenForEditing setting flag [branch: DEBUG-v013]
2026-06-05 13:41:06 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0359 Persist cameraCaptureOpenForEditing in DataStore settings [branch: DEBUG-v013]
2026-06-05 13:41:06 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt spec-dev S0359 Include cameraCaptureOpenForEditing in settings backup model [branch: DEBUG-v013]
2026-06-05 13:41:06 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt spec-dev S0359 Map cameraCaptureOpenForEditing into and out of backup payloads [branch: DEBUG-v013]
2026-06-05 13:41:06 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt spec-dev S0359 Export cameraCaptureOpenForEditing with settings XML [branch: DEBUG-v013]
2026-06-05 13:41:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt spec-dev S0359 Import cameraCaptureOpenForEditing from settings XML [branch: DEBUG-v013]
2026-06-05 13:41:07 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt spec-dev S0359 Apply cameraCaptureOpenForEditing from device profile presets [branch: DEBUG-v013]
2026-06-05 13:41:07 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0359 Add cameraCaptureOpenForEditing preset row [branch: DEBUG-v013]
2026-06-05 13:41:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt spec-dev S0359 Replace photo ACTION_IMAGE_CAPTURE with in-app capture and route saved photos into drawing editor when enabled [branch: DEBUG-v013]
2026-06-05 13:41:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-dev S0359 Gate camera-to-resource launch on CAMERA permission and open captured photos in drawing editor [branch: DEBUG-v013]
2026-06-05 13:41:08 app_v2/src/main/res/layout/fragment_settings_audio.xml spec-dev S0359 Add Camera-to-Resource settings rows to portrait Audio settings layout [branch: DEBUG-v013]
2026-06-05 13:41:08 app_v2/src/main/res/layout-land/fragment_settings_audio.xml spec-dev S0359 Add Camera-to-Resource settings rows to landscape Audio settings layout [branch: DEBUG-v013]
2026-06-05 13:41:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt spec-dev S0359 Bind Camera-to-Resource settings section and reuse existing camera flags [branch: DEBUG-v013]
2026-06-05 13:41:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0359 Remove legacy camera-capture rows from Playback settings [branch: DEBUG-v013]
2026-06-05 13:41:09 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0359 Remove camera-capture settings block from portrait Playback settings layout [branch: DEBUG-v013]
2026-06-05 13:41:09 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0359 Remove camera-capture settings block from landscape Playback settings layout [branch: DEBUG-v013]
2026-06-05 13:41:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt spec-dev S0359 Group optional permissions under a synthetic Optional permissions header [branch: DEBUG-v013]
2026-06-05 13:41:10 app_v2/src/main/res/values/strings.xml spec-dev S0359 Add camera permission, Camera-to-Resource and optional-permission strings in EN [branch: DEBUG-v013]
2026-06-05 13:41:10 app_v2/src/main/res/values-ru/strings.xml spec-dev S0359 Add camera permission, Camera-to-Resource and optional-permission strings in RU [branch: DEBUG-v013]
2026-06-05 13:41:10 app_v2/src/main/res/values-uk/strings.xml spec-dev S0359 Add camera permission, Camera-to-Resource and optional-permission strings in UK [branch: DEBUG-v013]
2026-06-05 13:41:11 docs/FEATURES.md spec-dev S0359 Document Camera-to-Resource settings and in-app camera capture flow in EN features [branch: DEBUG-v013]
2026-06-05 13:41:11 docs/FEATURES_RU.md spec-dev S0359 Document Camera-to-Resource settings and in-app camera capture flow in RU features [branch: DEBUG-v013]
2026-06-05 13:41:11 docs/FEATURES_UK.md spec-dev S0359 Document Camera-to-Resource settings and in-app camera capture flow in UK features [branch: DEBUG-v013]
2026-06-05 13:41:11 docs/TECH_STACK.md spec-dev S0359 Record CameraX 1.5.3 in the tech stack summary [branch: DEBUG-v013]
2026-06-05 13:41:12 dev/TECH_REQUIREMENTS.md spec-dev S0359 Record CameraX 1.5.3 in the detailed dependency inventory [branch: DEBUG-v013]
2026-06-05 13:41:12 dev/FUNCTIONALITY.log spec-dev S0359 Record the user-visible S0359 behavior change in the functionality log [branch: DEBUG-v013]
2026-06-05 13:41:12 dev/CATALOG/app_v2.jsonl spec-dev S0359 Regenerate app_v2 catalog and add CameraCaptureActivity / CameraCaptureSessionManager records [branch: DEBUG-v013]
2026-06-05 13:41:12 dev/CATALOG/app_v2.md spec-dev S0359 Render app_v2 catalog markdown after S0359 catalog sync [branch: DEBUG-v013]
2026-06-05 13:41:13 PLAN/S0359_camera-permission-inapp-capture.md spec-dev S0359 Advance strategic spec to BlockNeedUserTest after implementation [branch: DEBUG-v013]
2026-06-05 13:41:13 PLAN/S0359_camera-permission-inapp-capture/INDEX.md spec-dev S0359 Mark all tactical phases done and record current validation blocker notes [branch: DEBUG-v013]
2026-06-05 13:41:13 PLAN/S0359_camera-permission-inapp-capture/PHASE_01__foundations-permission-deps.md spec-dev S0359 Mark Phase 01 complete after CameraX foundations, permission and strings work [branch: DEBUG-v013]
2026-06-05 13:41:13 PLAN/S0359_camera-permission-inapp-capture/PHASE_02__inapp-camera-screen.md spec-dev S0359 Mark Phase 02 complete after in-app camera screen implementation [branch: DEBUG-v013]
2026-06-05 13:41:14 PLAN/S0359_camera-permission-inapp-capture/PHASE_03__ocr-inapp-capture.md spec-dev S0359 Mark Phase 03 complete and record OCR capture debug-probe transition [branch: DEBUG-v013]
2026-06-05 13:41:14 PLAN/S0359_camera-permission-inapp-capture/PHASE_04__settings-keys.md spec-dev S0359 Mark Phase 04 complete after settings persistence wiring [branch: DEBUG-v013]
2026-06-05 13:41:14 PLAN/S0359_camera-permission-inapp-capture/PHASE_05__camera-resource-settings-ui.md spec-dev S0359 Mark Phase 05 complete after Camera-to-Resource settings UI wiring [branch: DEBUG-v013]
2026-06-05 13:41:14 PLAN/S0359_camera-permission-inapp-capture/PHASE_06__browse-inapp-capture-editing.md spec-dev S0359 Mark Phase 06 complete and record browse capture debug-probe transition [branch: DEBUG-v013]
2026-06-05 13:41:15 PLAN/S0359_camera-permission-inapp-capture/PHASE_07__optional-permissions-grouping.md spec-dev S0359 Mark Phase 07 complete after optional-permissions grouping [branch: DEBUG-v013]
2026-06-05 13:41:15 PLAN/S0359_camera-permission-inapp-capture/PHASE_08__docs-catalog-cleanup.md spec-dev S0359 Mark Phase 08 complete after docs, catalog and log updates [branch: DEBUG-v013]
2026-06-05 13:43:24 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0359 device profiles Set explicit Camera-to-Resource preset defaults across device profiles (camera enabled only on phone/tablet) [branch: DEBUG-v013]
2026-06-05 13:43:24 dev/DEVICE_PROFILE_PRESET_MATRIX.md device-profile matrix Document explicit Camera-to-Resource preset defaults and rationale in the profile matrix guide [branch: DEBUG-v013]
2026-06-05 14:14:59 app_v2/src/main/assets/device_profile_presets.csv device_profile_presets.csv Disable embedded mini-game (embeddedGameEnabled) by default for all device profiles; user must enable it explicitly [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split/INDEX.md spec-tech Create tactical plan for S0364 [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split/PHASE_01__settings-group-split-layout.md spec-tech Phase 01: settings-group-split-layout [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split/PHASE_02__section-state-and-wiring.md spec-tech Phase 02: section-state-and-wiring [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split/PHASE_03__group-title-strings.md spec-tech Phase 03: group-title-strings [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split/PHASE_04__terminology-inventory-glossary.md spec-tech Phase 04: terminology-inventory-glossary [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split/PHASE_05__terminology-strings-sweep.md spec-tech Phase 05: terminology-strings-sweep [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split/PHASE_06__terminology-docs-sweep.md spec-tech Phase 06: terminology-docs-sweep [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-05 14:18:39 PLAN/S0364_settings-interface-group-split.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-05 14:27:56 PLAN/S0359_camera-permission-inapp-capture.md spec-check Audit S0359: static all-PASS + standardDebug build OK; journal reconciled Tactical->BlockNeedUserTest; debug probes kept for device test [branch: DEBUG-v013]
2026-06-05 15:34:45 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev S0364 P01.1 Split portrait Interface settings card into general + file-browser collapsible cards [branch: DEBUG-v013]
2026-06-05 15:37:22 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev S0364 P01.2 Mirror Interface settings card split (general + file-browser) in landscape layout [branch: DEBUG-v013]
2026-06-05 15:40:29 app_v2/src/main/res/values/strings_settings.xml spec-dev S0364 P03 Retitle interface category + add settings_category_file_browser category [branch: DEBUG-v013]
2026-06-05 15:40:30 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0364 P03 Retitle interface category + add settings_category_file_browser category [branch: DEBUG-v013]
2026-06-05 15:40:30 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0364 P03 Retitle interface category + add settings_category_file_browser category [branch: DEBUG-v013]
2026-06-05 15:41:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt spec-dev S0364 P02.1 Add persisted expand/collapse state for new file-browser settings section [branch: DEBUG-v013]
2026-06-05 15:54:52 docs/COMMUNICATION_POLICY.md spec-dev S0364 P04.1 Add canonical file-browser glossary term to communication policy [branch: DEBUG-v013]
2026-06-05 15:54:52 docs/COMMUNICATION_POLICY_RU.md spec-dev S0364 P04.1 Add canonical file-browser glossary term to communication policy [branch: DEBUG-v013]
2026-06-05 15:54:53 docs/COMMUNICATION_POLICY_UK.md spec-dev S0364 P04.1 Add canonical file-browser glossary term to communication policy [branch: DEBUG-v013]
2026-06-05 16:01:38 app_v2/src/main/res/values/strings_settings.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:01:38 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:01:38 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:01:39 app_v2/src/main/res/values/strings.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:01:39 app_v2/src/main/res/values-ru/strings.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:01:39 app_v2/src/main/res/values-uk/strings.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:01:39 app_v2/src/main/res/values/strings_input.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:01:40 app_v2/src/main/res/values-ru/strings_input.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:01:40 app_v2/src/main/res/values-uk/strings_input.xml spec-dev S0364 P05 Unify Browse-window terminology to file browser / браузер файлов [branch: DEBUG-v013]
2026-06-05 16:06:07 docs/FEATURES.md spec-dev S0364 P06 Align Browse-window wording to file browser term in user docs [branch: DEBUG-v013]
2026-06-05 16:06:07 docs/FEATURES_RU.md spec-dev S0364 P06 Align Browse-window wording to file browser term in user docs [branch: DEBUG-v013]
2026-06-05 16:06:08 docs/FEATURES_UK.md spec-dev S0364 P06 Align Browse-window wording to file browser term in user docs [branch: DEBUG-v013]
2026-06-05 16:06:08 docs/FAQ.md spec-dev S0364 P06 Align Browse-window wording to file browser term in user docs [branch: DEBUG-v013]
2026-06-05 16:06:08 docs/FAQ_RU.md spec-dev S0364 P06 Align Browse-window wording to file browser term in user docs [branch: DEBUG-v013]
2026-06-05 16:06:08 docs/FAQ_UK.md spec-dev S0364 P06 Align Browse-window wording to file browser term in user docs [branch: DEBUG-v013]
2026-06-05 16:09:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt spec-dev S0364 P07.3 Add S0364 device-test verification tag at settings view-setup entry [branch: DEBUG-v013]
2026-06-05 16:11:52 PLAN/S0364_settings-interface-group-split.md spec-dev All phases implemented; status -> BlockNeedUserTest for on-device verification [branch: DEBUG-v013]
2026-06-05 16:56:16 PLAN/S0365_lazy-initialization-audit.md spec Add strategic spec for lazy initialization audit [branch: DEBUG-v013]
2026-06-05 16:56:18 docs/ARCHITECTURE.md doc-update Add performance and resource optimization section to ARCHITECTURE.md [branch: DEBUG-v013]
2026-06-05 16:56:20 CLAUDE.md doc-update Add Strict Rule 19 for lazy optimization to CLAUDE.md [branch: DEBUG-v013]
2026-06-05 16:56:21 .github/copilot-instructions.md doc-update Add lazy optimization constraint to copilot-instructions.md [branch: DEBUG-v013]
2026-06-05 16:56:23 .github/prompts/spec-tech.prompt.md doc-update Add lazy optimization constraint to spec-tech prompt [branch: DEBUG-v013]
2026-06-05 16:56:25 .github/prompts/spec-dev.prompt.md doc-update Add lazy optimization constraint to spec-dev prompt [branch: DEBUG-v013]
2026-06-05 16:56:26 .github/agents/android-kotlin-developer.agent.md doc-update Add lazy optimization rule to android-kotlin-developer agent profile [branch: DEBUG-v013]
2026-06-05 17:06:42 PLAN/S0365_lazy-initialization-audit.md spec-update Refinement (Antigravity, focus: structure) [branch: DEBUG-v013]
2026-06-05 17:16:05 PLAN/S0365_lazy-initialization-audit.md spec-update Refinement (Codex, focus: language/structure/verifiability/consistency/completeness/style) [branch: DEBUG-v013]
2026-06-05 17:24:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0365 Defer standalone network dependencies and short-circuit default-player probes [branch: DEBUG-v013]
2026-06-05 17:25:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0365 Resolve standalone network collaborators lazily on first network use [branch: DEBUG-v013]
2026-06-05 17:47:52 PLAN/S0365_lazy-initialization-audit/INDEX.md spec-tech Create tactical plan index for S0365 [branch: DEBUG-v013]
2026-06-05 17:47:52 PLAN/S0365_lazy-initialization-audit/PHASE_01__player-lazy-deps.md spec-tech Phase 01: player lazy dependencies [branch: DEBUG-v013]
2026-06-05 17:47:52 PLAN/S0365_lazy-initialization-audit/PHASE_02__browse-lazy-strategies.md spec-tech Phase 02: browse lazy strategies [branch: DEBUG-v013]
2026-06-05 17:47:52 PLAN/S0365_lazy-initialization-audit/PHASE_03__player-viewstub-hosts.md spec-tech Phase 03: player ViewStub hosts [branch: DEBUG-v013]
2026-06-05 17:47:52 PLAN/S0365_lazy-initialization-audit/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs catalog cleanup [branch: DEBUG-v013]
2026-06-05 17:47:52 PLAN/S0365_lazy-initialization-audit.md spec-tech Status to Tactical and tactical package created for S0365 [branch: DEBUG-v013]
2026-06-05 17:48:33 PLAN/S0365_lazy-initialization-audit.md spec-tech Add owner approval gate details for S0365 status transition [branch: DEBUG-v013]
2026-06-05 18:13:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt S0365 Add lazy-backed player collaborator providers [branch: DEBUG-v013]
2026-06-05 18:14:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt S0365 Gate player background media setup on demand [branch: DEBUG-v013]
2026-06-05 18:14:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt S0365 Update player observer to configure background media lazily [branch: DEBUG-v013]
2026-06-05 18:15:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt S0365 Guard player background media release behind lazy setup [branch: DEBUG-v013]
2026-06-05 18:16:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioSlideshowPhotoModeManager.kt S0365 Resolve audio slideshow background managers via providers [branch: DEBUG-v013]
2026-06-05 18:16:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerDialogHelper.kt S0365 Delay player dialog network collaborator resolution [branch: DEBUG-v013]
2026-06-05 18:19:32 PLAN/S0365_lazy-initialization-audit.md spec-dev Advance S0365 strategic spec to implemented after tactical phase completion [branch: DEBUG-v013]
2026-06-05 18:19:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NetworkFileManager.kt S0365 Delay player network/cloud collaborator resolution until first use [branch: DEBUG-v013]
2026-06-05 18:19:32 temp/S0365_lazy_init_audit_report.md spec-dev Append S0365 validation summary and next-wave hotspot audit [branch: DEBUG-v013]
2026-06-05 18:20:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCloudAuthManager.kt S0365 Accept lazy cloud auth clients and preserve existing eager call sites [branch: DEBUG-v013]
2026-06-05 18:20:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0365 Resolve upload-only CloudOperationStrategy lazily on cloud branches [branch: DEBUG-v013]
2026-06-05 18:22:05 PLAN/S0365_lazy-initialization-audit/INDEX.md spec-dev Mark canonical S0365 tactical index done and ready for spec-check [branch: DEBUG-v013]
2026-06-05 18:22:05 PLAN/S0365_lazy-initialization-audit/PHASE_01__standalone-lazy-entry.md spec-dev S0365 Mark canonical Phase 01 done after standalone lazy-entry validation [branch: DEBUG-v013]
2026-06-05 18:22:06 PLAN/S0365_lazy-initialization-audit/PHASE_02__player-lazy-deps.md spec-dev S0365 Mark canonical Phase 02 done after player lazy dependency rollout [branch: DEBUG-v013]
2026-06-05 18:22:06 PLAN/S0365_lazy-initialization-audit/PHASE_03__browse-lazy-strategies.md spec-dev S0365 Mark canonical Phase 03 done after browse lazy strategy rollout [branch: DEBUG-v013]
2026-06-05 18:22:06 PLAN/S0365_lazy-initialization-audit/PHASE_04__viewstub-targets-rules.md spec-dev S0365 Mark canonical Phase 04 done after overlay/ViewStub audit and rules capture [branch: DEBUG-v013]
2026-06-05 18:22:07 PLAN/S0365_lazy-initialization-audit/PHASE_05__docs-catalog-cleanup.md spec-dev S0365 Mark canonical Phase 05 done after validation, catalog sync and cleanup [branch: DEBUG-v013]
2026-06-05 18:23:05 PLAN/S0365_lazy-initialization-audit.md spec-check Audit S0365: Verified after static closeout, build pass, catalog sync and probe sweep [branch: DEBUG-v013]
2026-06-05 18:23:05 PLAN/S0365_lazy-initialization-audit/INDEX.md spec-check Mark S0365 tactical completion gate verified and strategic status advanced [branch: DEBUG-v013]
2026-06-06 00:18:54 PLAN/S0366_user-docs-refresh.md docs Add approval-gate owner inputs for the S0366 documentation refresh spec [branch: DEBUG-v013]
2026-06-06 00:22:15 PLAN/S0366_user-docs-refresh.md docs Set S0366 strategic spec to Tactical and add tactical-plan pointer [branch: DEBUG-v013]
2026-06-06 00:22:15 PLAN/S0366_user-docs-refresh/INDEX.md docs Create S0366 tactical plan index [branch: DEBUG-v013]
2026-06-06 00:22:16 PLAN/S0366_user-docs-refresh/PHASE_01__inventory-audit.md docs Create S0366 phase 01 inventory audit plan [branch: DEBUG-v013]
2026-06-06 00:22:16 PLAN/S0366_user-docs-refresh/PHASE_02__rewrite-core-docs.md docs Create S0366 phase 02 docs rewrite plan [branch: DEBUG-v013]
2026-06-06 00:22:16 PLAN/S0366_user-docs-refresh/PHASE_03__sync-language-and-links.md docs Create S0366 phase 03 localization and links plan [branch: DEBUG-v013]
2026-06-06 00:22:16 PLAN/S0366_user-docs-refresh/PHASE_04__docs-catalog-cleanup.md docs Create S0366 phase 04 docs cleanup plan [branch: DEBUG-v013]
2026-06-06 00:22:17 scripts/spec_catalog/_lib.ps1 scripts Fix header status sync for spec catalog updates [branch: DEBUG-v013]
2026-06-06 00:51:28 docs/VR_EDITION_RU.md docs Fix stale VR historical link in Russian docs. [branch: DEBUG-v013]
2026-06-06 00:51:28 docs/VR_EDITION_UK.md docs Fix stale VR historical link in Ukrainian docs. [branch: DEBUG-v013]
2026-06-06 00:51:29 temp/S0366_doc_audit.md temp Record S0366 documentation audit findings. [branch: DEBUG-v013]
2026-06-06 00:51:29 index.html site Point the main landing page to Markdown docs. [branch: DEBUG-v013]
2026-06-06 00:51:29 index-ru.html site Point the Russian landing page to Markdown docs. [branch: DEBUG-v013]
2026-06-06 00:51:29 index-uk.html site Point the Ukrainian landing page to Markdown docs. [branch: DEBUG-v013]
2026-06-06 00:51:30 nolegal.html site Point the noLegal landing page to Markdown docs. [branch: DEBUG-v013]
2026-06-06 00:51:30 nolegal-ru.html site Point the Russian noLegal landing page to Markdown docs. [branch: DEBUG-v013]
2026-06-06 00:51:30 nolegal-uk.html site Point the Ukrainian noLegal landing page to Markdown docs. [branch: DEBUG-v013]
2026-06-06 01:55:25 docs/README.md S0366 docs Refresh EN public overview and flavor matrix [branch: DEBUG-v013]
2026-06-06 01:55:26 docs/QUICK_START.md S0366 docs Refresh EN quick start flavor matrix [branch: DEBUG-v013]
2026-06-06 01:55:26 docs/HOW_TO.md S0366 docs Refresh EN how-to availability matrix [branch: DEBUG-v013]
2026-06-06 01:55:26 docs/TROUBLESHOOTING.md S0366 docs Refresh EN troubleshooting wording [branch: DEBUG-v013]
2026-06-06 01:55:27 docs/LIMITATIONS.md S0366 docs Refresh EN limitations for current build matrix [branch: DEBUG-v013]
2026-06-06 01:55:27 docs/MODULE_SELECTION.md S0366 docs Refresh module selection flavor list [branch: DEBUG-v013]
2026-06-06 01:55:27 docs/DOCS_MAP.md S0366 docs Refresh docs map for current public doc set [branch: DEBUG-v013]
2026-06-06 01:55:28 docs/LIMITATIONS_RU.md S0366 docs Refresh RU limitations build requirements [branch: DEBUG-v013]
2026-06-06 01:55:28 docs/LIMITATIONS_UK.md S0366 docs Refresh UK limitations build requirements [branch: DEBUG-v013]
2026-06-06 01:55:28 docs/TROUBLESHOOTING_RU.md S0366 docs Refresh RU troubleshooting SMB wording [branch: DEBUG-v013]
2026-06-06 01:55:29 docs/TROUBLESHOOTING_UK.md S0366 docs Refresh UK troubleshooting SMB wording [branch: DEBUG-v013]
2026-06-06 01:55:29 docs/README_RU.md S0366 docs Refresh RU public overview and flavor matrix [branch: DEBUG-v013]
2026-06-06 01:55:29 docs/README_UK.md S0366 docs Refresh UK public overview and flavor matrix [branch: DEBUG-v013]
2026-06-06 01:55:30 docs/QUICK_START_RU.md S0366 docs Refresh RU quick start links and flavor matrix [branch: DEBUG-v013]
2026-06-06 01:55:30 docs/QUICK_START_UK.md S0366 docs Refresh UK quick start links and missing sections [branch: DEBUG-v013]
2026-06-06 01:55:30 docs/HOW_TO_RU.md S0366 docs Refresh RU how-to availability matrix [branch: DEBUG-v013]
2026-06-06 01:55:31 docs/HOW_TO_UK.md S0366 docs Refresh UK how-to availability matrix [branch: DEBUG-v013]
2026-06-06 01:55:31 docs/FAQ.md S0366 docs Refresh EN FAQ Android requirements [branch: DEBUG-v013]
2026-06-06 01:55:31 docs/FAQ_RU.md S0366 docs Refresh RU FAQ Android requirements [branch: DEBUG-v013]
2026-06-06 01:55:31 docs/FAQ_UK.md S0366 docs Refresh UK FAQ Android requirements [branch: DEBUG-v013]
2026-06-06 01:56:24 PLAN/S0366_user-docs-refresh/INDEX.md S0366 plan Close tactical index after docs refresh [branch: DEBUG-v013]
2026-06-06 01:56:25 PLAN/S0366_user-docs-refresh/PHASE_01__inventory-audit.md S0366 plan Mark phase 01 audit as done [branch: DEBUG-v013]
2026-06-06 01:56:25 PLAN/S0366_user-docs-refresh/PHASE_02__rewrite-core-docs.md S0366 plan Mark phase 02 core docs rewrite as done [branch: DEBUG-v013]
2026-06-06 01:56:25 PLAN/S0366_user-docs-refresh/PHASE_03__sync-language-and-links.md S0366 plan Mark phase 03 mirror sync as done [branch: DEBUG-v013]
2026-06-06 01:56:26 PLAN/S0366_user-docs-refresh/PHASE_04__docs-catalog-cleanup.md S0366 plan Mark phase 04 docs cleanup as done [branch: DEBUG-v013]
2026-06-06 01:57:19 PLAN/S0366_user-docs-refresh.md spec-check Audit S0366 -> Verified; PASS/WARN/FAIL 8/0/0 [branch: DEBUG-v013]
2026-06-06 02:07:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyProfilePresetUseCase.kt VR profile sync Aligned vr/noLegal 3D-VR settings defaults with the selected device profile via flavor-isolated sync so the Settings block stays visible but becomes off or blocked appropriately. [branch: DEBUG-v013]
2026-06-06 02:07:59 docs/ S0366 Audited and corrected links, horizontal lines, missing sections in Russian and Ukrainian user documents and root html pages. [branch: DEBUG-v013]
2026-06-06 02:12:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0365 Complete browse lazy boundary by deferring remote collaborators to first use [branch: DEBUG-v013]
2026-06-06 02:12:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt S0365 Move browse view-model remote collaborators behind dagger Lazy [branch: DEBUG-v013]
2026-06-06 02:12:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt S0365 Pass browse remote collaborators lazily and resolve them only at auth and file-info paths [branch: DEBUG-v013]
2026-06-06 02:12:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseInlineAudioManager.kt S0365 Resolve SMB client only during inline SMB audio downloads [branch: DEBUG-v013]
2026-06-06 02:12:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt S0365 Resolve cloud clients lazily during browse cloud-auth checks [branch: DEBUG-v013]
2026-06-06 02:12:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt S0365 Remove unused eager network collaborators from browse file-ops wiring [branch: DEBUG-v013]
2026-06-06 02:12:02 temp/S0365_lazy_init_audit_report.md S0365 Document the browse lazy-boundary correction in the audit report [branch: DEBUG-v013]
2026-06-06 02:12:02 PLAN/S0365_lazy-initialization-audit.md spec-check Refresh S0365 Last Audit after the browse lazy-boundary correction [branch: DEBUG-v013]
2026-06-06 03:29:46 PLAN/S0367_playback-camera-microphone-settings-grouping.md S0367 Add strategic draft for regrouping camera and microphone settings from Media Audio to Playback Other features [branch: DEBUG-v013]
2026-06-06 03:32:03 PLAN/S0367_playback-camera-microphone-settings-grouping.md S0367 Rewrite strategic draft to remove duplicated content and keep a single clean S0367 spec file [branch: DEBUG-v013]
2026-06-06 03:36:09 PLAN/S0368_draw-overlay-toolbar-safe-area.md S0368 Add strategic draft for draw overlay toolbar safe-area over player bottom panels [branch: DEBUG-v013]
2026-06-06 03:41:23 PLAN/S0369_widget-camera-capture-target-resource.md S0369 Add strategic draft for a configurable quick camera widget bound to a writable resource or device camera folder [branch: DEBUG-v013]
2026-06-06 03:48:18 PLAN/S0370_browse-filter-large-icon-actions.md S0370 Add strategic draft for browse filter panel large-icon action redesign and OK/apply button repair [branch: DEBUG-v013]
2026-06-06 03:51:44 PLAN/S0371_video-recording-to-resource.md spec Add strategic draft S0371 for video recording to resource [branch: DEBUG-v013]
2026-06-06 03:53:45 PLAN/S0367_playback-camera-microphone-settings-grouping.md S0367 Refine strategic draft with microphone and camera destination settings plus empty-value fallback rules [branch: DEBUG-v013]
2026-06-06 03:55:40 PLAN/S0372_bugfix-mic-recording-stop-failed.md spec Add strategic spec S0372 for mic recording stop-failed defect [branch: DEBUG-v013]
2026-06-06 04:02:20 PLAN/S0373_bugfix-recent-media-scan-cancellation.md spec Add strategic spec S0373 for recent media scan cancellation false error [branch: DEBUG-v013]
2026-06-06 04:03:03 PLAN/S0374_browse-top-command-buttons-20pct.md spec Add strategic draft spec S0374 for browse top command buttons 20pct [branch: DEBUG-v013]
2026-06-06 16:12:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt S0367 Relocate camera/microphone settings from Media-Audio to Playback Other features; add Camera/Mic destination selectors + CaptureDestinationPolicy wired as non-breaking override into camera and mic save paths [branch: DEBUG-v013]
2026-06-06 16:12:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt S0368 Draw editor toolbar safe-area via applySystemBarInsetPadding + portrait reorder above Copy/Move + landscape end-constraints [branch: DEBUG-v013]
2026-06-06 16:12:56 app_v2/src/main/java/com/sza/fastmediasorter/data/capture/CameraCaptureSaver.kt S0369 Extract CameraCaptureSaver (shared target routing) and add quick camera-capture 1x1 widget with target picker, per-widget prefs, settingGate, video mode [branch: DEBUG-v013]
2026-06-06 16:12:56 app_v2/src/main/res/layout/dialog_filter.xml S0370 Convert filter dialog action buttons (apply/cancel/clear-all/reset-types) to large icon buttons with contentDescription + iconTint, both orientations [branch: DEBUG-v013]
2026-06-06 16:12:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt S0371 Video-recording-to-resource full surface: settings, action_video_capture command, ACTION_VIDEO_CAPTURE fork via CameraCaptureSaver, optional post-capture player open, widget video mode [branch: DEBUG-v013]
2026-06-06 16:12:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt S0372 Classify mic recording outcome before save; discard invalid/too-short artifact with cancelled feedback; re-level stop-failed to debug; strip stale S0100 log prefixes [branch: DEBUG-v013]
2026-06-06 16:12:56 app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt S0373 Rethrow CancellationException before generic catch in recent/all-by-type virtual scans; stop false failed-to-scan error on normal cancellation [branch: DEBUG-v013]
2026-06-06 16:12:56 app_v2/src/main/res/values/dimens.xml S0374 Scale Browse top command bar +20% (container+icon) via browse-scoped browse_cmd_* dimens + app:iconSize + HorizontalScrollView clipping fallback, both orientations [branch: DEBUG-v013]
2026-06-06 17:09:55 PLAN/S0367_playback-camera-microphone-settings-grouping.md spec-all Pipeline BlockNeedUserTest: S0367 header sync + Last Audit (device-test pending) [branch: DEBUG-v013]
2026-06-06 17:25:41 app_v2/src/main/java/com/sza/fastmediasorter/widget/CameraQuickCaptureLaunchManager.kt spec-all Remove S0369 debug verification tag [branch: DEBUG-v013]
2026-06-06 17:28:31 PLAN/S0369_widget-camera-capture-target-resource.md spec-all Pipeline Verified: S0369 [branch: DEBUG-v013]
2026-06-06 17:28:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt S0371 Remove temporary BlockNeedUserTest debug probe before audit resume [branch: DEBUG-v013]
2026-06-06 17:29:20 PLAN/S0370_browse-filter-large-icon-actions.md spec-all Pipeline BlockNeedUserTest: S0370 F5 structural audit PASS (4/5 verified, criterion 1 mechanism verified); device-visual check deferred - no device online [branch: DEBUG-v013]
2026-06-06 17:30:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt BrowseMicRecordingManager Stabilize mic recording cancellation cleanup and remove stale device-test tag [branch: DEBUG-v013]
2026-06-06 17:32:56 app_v2/src/main/res/values/strings_widget.xml S0371 Update quick-capture widget copy for photo/video capability (EN) [branch: DEBUG-v013]
2026-06-06 17:32:57 app_v2/src/main/res/values-ru/strings_widget.xml S0371 Update quick-capture widget copy for photo/video capability (RU) [branch: DEBUG-v013]
2026-06-06 17:32:58 app_v2/src/main/res/values-uk/strings_widget.xml S0371 Update quick-capture widget copy for photo/video capability (UK) [branch: DEBUG-v013]
2026-06-06 17:32:59 docs/FEATURES.md S0371 Align quick-capture widget feature naming (EN) [branch: DEBUG-v013]
2026-06-06 17:33:00 docs/FEATURES_RU.md S0371 Align quick-capture widget feature naming (RU) [branch: DEBUG-v013]
2026-06-06 17:33:00 docs/FEATURES_UK.md S0371 Align quick-capture widget feature naming (UK) [branch: DEBUG-v013]
2026-06-06 17:33:23 app_v2/src/main/java/com/sza/fastmediasorter/data/local/LocalMediaScanner.kt spec-all Remove S0373 debug verification tag [branch: DEBUG-v013]
2026-06-06 17:33:41 PLAN/S0372_bugfix-mic-recording-stop-failed.md spec-check Audit S0372 -> Verified; PASS/WARN/FAIL 12/0/0 [branch: DEBUG-v013]
2026-06-06 17:36:00 scripts/spec_catalog/close.ps1 close.ps1 Sync spec header when closing terminal-status tickets [branch: DEBUG-v013]
2026-06-06 17:37:09 PLAN/S0374_browse-top-command-buttons-20pct.md spec-all S0374 review-mode audit: Last Audit block + header sync; impl present, device-test deferred (no device) [branch: DEBUG-v013]
2026-06-06 17:39:19 PLAN/S0371_video-recording-to-resource.md S0371 Record inline audit and build blocker after spec-all resume [branch: DEBUG-v013]
2026-06-06 17:39:20 PLAN/S0371_video-recording-to-resource.md spec-all Pipeline Blocked: S0371 [branch: DEBUG-v013]
2026-06-06 17:39:44 PLAN/S0371_video-recording-to-resource.md S0371 Sync S0371 spec frontmatter status with Partial [branch: DEBUG-v013]
2026-06-06 20:54:20 .idea/gradle.xml ide-gradle-jdk Switch Gradle IDE JDK from the GRADLE_LOCAL_JAVA_HOME macro to the project JBR 21 entry. [branch: DEBUG-v013]
2026-06-06 21:46:06 app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LoggingHelper.kt debug-log-mirror Add debug-only session log mirroring into the currently opened local file directory with 10-second delta appends. [branch: DEBUG-v013]
2026-06-06 21:46:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt webp-debug-trace Set the debug log mirror target from the current image path and log WebP request/mode decisions. [branch: DEBUG-v013]
2026-06-06 21:46:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingGlideListeners.kt webp-debug-trace Add explicit WebP ready/failure traces in Glide drawable and animated-image listeners. [branch: DEBUG-v013]
2026-06-06 22:08:05 app_v2/src/main/res/values/strings_settings.xml capture settings Clarify capture destination labels so resource pickers are not described as folders. [branch: DEBUG-v013]
2026-06-06 22:08:05 app_v2/src/main/res/values-ru/strings_settings.xml capture settings Clarify capture destination labels so resource pickers are not described as folders. [branch: DEBUG-v013]
2026-06-06 22:08:05 app_v2/src/main/res/values-uk/strings_settings.xml capture settings Clarify capture destination labels so resource pickers are not described as folders. [branch: DEBUG-v013]
2026-06-06 22:08:05 README.md resource terminology docs Clarify resource-vs-folder wording for resource-bound widgets and save targets. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/README.md resource terminology docs Clarify resource-vs-folder wording for resource-bound widgets and save targets. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/README_RU.md resource terminology docs Clarify resource-vs-folder wording for resource-bound widgets and save targets. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/README_UK.md resource terminology docs Clarify resource-vs-folder wording for resource-bound widgets and save targets. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/FAQ.md resource terminology docs Clarify resource terminology for resource shortcut widgets and scheduled-operation source selection. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/FAQ_RU.md resource terminology docs Clarify resource terminology for resource shortcut widgets and scheduled-operation source selection. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/FAQ_UK.md resource terminology docs Clarify resource terminology for resource shortcut widgets and scheduled-operation source selection. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/FEATURES.md resource terminology docs Clarify resource-bound widget descriptions and quick capture target wording. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/FEATURES_RU.md resource terminology docs Clarify resource-bound widget descriptions and quick capture target wording. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/FEATURES_UK.md resource terminology docs Clarify resource-bound widget descriptions and quick capture target wording. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/QUICK_START.md resource terminology docs Clarify Resource Shortcut setup wording so it refers to resources instead of folders. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/QUICK_START_RU.md resource terminology docs Clarify Resource Shortcut setup wording so it refers to resources instead of folders. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/QUICK_START_UK.md resource terminology docs Clarify Resource Shortcut setup wording so it refers to resources instead of folders. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/howto/scenario-photo-frame.md resource terminology docs Clarify slideshow music and Resource Shortcut steps to use resource terminology. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/howto/scenario-photo-frame-ru.md resource terminology docs Clarify slideshow music and Resource Shortcut steps to use resource terminology. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/howto/scenario-photo-frame-uk.md resource terminology docs Clarify slideshow music and Resource Shortcut steps to use resource terminology. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/howto/scenario-car-music.md resource terminology docs Clarify Resource Shortcut music setup to use resource terminology. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/howto/scenario-car-music-ru.md resource terminology docs Clarify Resource Shortcut music setup to use resource terminology. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/howto/scenario-car-music-uk.md resource terminology docs Clarify Resource Shortcut music setup to use resource terminology. [branch: DEBUG-v013]
2026-06-06 22:08:05 docs/WHATS_NEW.md resource terminology docs Clarify Save Frame documentation to reference the destination resource. [branch: DEBUG-v013]
2026-06-06 22:08:06 docs/WHATS_NEW_RU.md resource terminology docs Clarify Save Frame documentation to reference the destination resource. [branch: DEBUG-v013]
2026-06-06 22:08:06 docs/WHATS_NEW_UK.md resource terminology docs Clarify Save Frame documentation to reference the destination resource. [branch: DEBUG-v013]
2026-06-06 23:42:43 PLAN/S0375_video-recording-destination-resource.md spec Add strategic spec S0375 for video recording destination resource in playback settings [branch: DEBUG-v013]
2026-06-07 01:50:36 PLAN/S0375_video-recording-destination-resource.md spec-tech Update S0375 owner gate and status to Tactical [branch: DEBUG-v013]
2026-06-07 01:50:36 PLAN/S0375_video-recording-destination-resource/INDEX.md spec-tech Create tactical plan for S0375 [branch: DEBUG-v013]
2026-06-07 01:50:36 PLAN/S0375_video-recording-destination-resource/PHASE_01__settings-surface.md spec-tech Phase 01 tactical plan for S0375 [branch: DEBUG-v013]
2026-06-07 01:50:36 PLAN/S0375_video-recording-destination-resource/PHASE_02__save-routing.md spec-tech Phase 02 tactical plan for S0375 [branch: DEBUG-v013]
2026-06-07 01:50:36 PLAN/S0375_video-recording-destination-resource/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03 tactical plan for S0375 [branch: DEBUG-v013]
2026-06-07 01:53:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt settings Add video recording destination field [branch: DEBUG-v013]
2026-06-07 01:53:57 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt settings Persist video recording destination setting [branch: DEBUG-v013]
2026-06-07 01:53:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt settings-ui Wire video recording destination selector [branch: DEBUG-v013]
2026-06-07 01:53:57 app_v2/src/main/res/layout/fragment_settings_playback.xml settings-ui Add portrait video recording destination selector [branch: DEBUG-v013]
2026-06-07 01:53:57 app_v2/src/main/res/layout-land/fragment_settings_playback.xml settings-ui Add landscape video recording destination selector [branch: DEBUG-v013]
2026-06-07 01:53:57 app_v2/src/main/res/values/strings_settings.xml settings-copy Add EN video recording destination strings [branch: DEBUG-v013]
2026-06-07 01:53:57 app_v2/src/main/res/values-ru/strings_settings.xml settings-copy Add RU video recording destination strings [branch: DEBUG-v013]
2026-06-07 01:53:57 app_v2/src/main/res/values-uk/strings_settings.xml settings-copy Add UK video recording destination strings [branch: DEBUG-v013]
2026-06-07 02:02:28 app_v2/src/main/java/com/sza/fastmediasorter/util/CaptureDestinationPolicy.kt capture-routing Add video destination fallback helper [branch: DEBUG-v013]
2026-06-07 02:02:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt capture-routing Split video save routing from camera destination setting [branch: DEBUG-v013]
2026-06-07 02:02:28 docs/FEATURES.md features-docs Document video destination fallback contract in EN [branch: DEBUG-v013]
2026-06-07 02:02:28 docs/FEATURES_RU.md features-docs Document video destination fallback contract in RU [branch: DEBUG-v013]
2026-06-07 02:02:28 docs/FEATURES_UK.md features-docs Document video destination fallback contract in UK [branch: DEBUG-v013]
2026-06-07 02:02:28 PLAN/S0375_video-recording-destination-resource.md spec-dev Mark S0375 implemented [branch: DEBUG-v013]
2026-06-07 02:02:28 PLAN/S0375_video-recording-destination-resource/INDEX.md spec-dev Mark S0375 tactical plan complete [branch: DEBUG-v013]
2026-06-07 02:02:28 PLAN/S0375_video-recording-destination-resource/PHASE_01__settings-surface.md spec-dev Mark S0375 phase 01 complete [branch: DEBUG-v013]
2026-06-07 02:02:28 PLAN/S0375_video-recording-destination-resource/PHASE_02__save-routing.md spec-dev Mark S0375 phase 02 complete [branch: DEBUG-v013]
2026-06-07 02:02:28 PLAN/S0375_video-recording-destination-resource/PHASE_03__docs-catalog-cleanup.md spec-dev Mark S0375 phase 03 complete [branch: DEBUG-v013]
2026-06-07 02:10:46 PLAN/S0375_video-recording-destination-resource.md spec-check Audit S0375 -> Verified; PASS/WARN/FAIL 20/0/0; debug tags removed 0 [branch: DEBUG-v013]
2026-06-07 02:55:40 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/MediaStoreRepositoryImpl.kt app_v2 Add MediaStore timestamp fallback to prevent 1970 dates for freshly captured media [branch: DEBUG-v013]
2026-06-07 03:07:54 PLAN/S0376_file-manager-predefined-resource.md spec Add strategic spec S0376 for predefined file-manager resource [branch: DEBUG-v013]
2026-06-07 03:13:17 PLAN/S0376_file-manager-predefined-resource.md spec Refine S0376 with minimal list position rule for predefined file-manager resource [branch: DEBUG-v013]
2026-06-07 03:19:29 PLAN/S0376_file-manager-predefined-resource.md spec Capture owner decisions for S0376 UI behavior, root contract and duplicate handling [branch: DEBUG-v013]
2026-06-07 03:21:18 PLAN/S0376_file-manager-predefined-resource.md spec Finalize owner decisions for S0376 naming and profile-reapply confirmation behavior [branch: DEBUG-v013]
2026-06-07 03:31:30 docs/TEST_SCENARIOS.md;app_v2/src/main/res/layout/fragment_duplicates.xml app_v2/src/main/res/layout/fragment_duplicates.xml Replace user-facing three-dot ellipses with two-dot ellipsis style in docs and UI text [branch: DEBUG-v013]
2026-06-07 03:43:09 app_v2,wear res/values*/strings*.xml UI strings Replace ellipsis (U+2026 and …) with ‘..’ across all string resources (EN/RU/UK, app_v2 + wear) per author style [branch: DEBUG-v013]
2026-06-07 03:45:00 PLAN/S0377_resource-menu-open-launch-reorder.md spec Add strategic spec S0377 for resource dropdown menu Open/Launch, move-to-edge, media-storage icon frame [branch: DEBUG-v013]
2026-06-07 03:49:05 PLAN/S0377_resource-menu-open-launch-reorder/INDEX.md spec-tech Create tactical plan for S0377 [branch: DEBUG-v013]
2026-06-07 03:49:05 PLAN/S0377_resource-menu-open-launch-reorder/PHASE_01__reorder-to-edge.md spec-tech Phase 01: reorder-to-edge [branch: DEBUG-v013]
2026-06-07 03:49:05 PLAN/S0377_resource-menu-open-launch-reorder/PHASE_02__menu-open-launch-move.md spec-tech Phase 02: menu-open-launch-move [branch: DEBUG-v013]
2026-06-07 03:49:05 PLAN/S0377_resource-menu-open-launch-reorder/PHASE_03__icon-frame.md spec-tech Phase 03: icon-frame [branch: DEBUG-v013]
2026-06-07 03:49:05 PLAN/S0377_resource-menu-open-launch-reorder/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-07 03:49:05 PLAN/S0377_resource-menu-open-launch-reorder.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-07 03:50:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceOrderManager.kt spec-dev S0377 Phase 01.1: add moveResourceToTop/moveResourceToBottom [branch: DEBUG-v013]
2026-06-07 03:51:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-dev S0377 Phase 01.2: expose moveResourceToTop/moveResourceToBottom in MainViewModel [branch: DEBUG-v013]
2026-06-07 03:57:23 PLAN/S0376_file-manager-predefined-resource.md spec-dev Mark S0376 strategic spec as Implemented [branch: DEBUG-v013]
2026-06-07 03:57:23 PLAN/S0376_file-manager-predefined-resource/INDEX.md spec-dev Complete tactical index for S0376 [branch: DEBUG-v013]
2026-06-07 03:57:23 PLAN/S0376_file-manager-predefined-resource/PHASE_01__resource-foundation.md spec-dev Complete Phase 01 for S0376 [branch: DEBUG-v013]
2026-06-07 03:57:23 PLAN/S0376_file-manager-predefined-resource/PHASE_02__settings-profile-flows.md spec-dev Complete Phase 02 for S0376 [branch: DEBUG-v013]
2026-06-07 03:57:23 PLAN/S0376_file-manager-predefined-resource/PHASE_03__docs-catalog-cleanup.md spec-dev Complete Phase 03 for S0376 [branch: DEBUG-v013]
2026-06-07 03:57:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/AddResourceUseCase.kt spec-dev Support top-insert resource creation for S0376 [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ProfileImpliesAllFilesUseCase.kt spec-dev Add profile all-files detector for S0376 [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/EnsureAllFilesPredefinedResourceUseCase.kt spec-dev Add predefined All Files resource creator for S0376 [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsProfileViewModel.kt spec-dev Wire Settings profile flow into predefined All Files resource creation [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt spec-dev Auto-create predefined All Files resource from first-run profile flow [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt spec-dev Inject predefined All Files resource helper into General settings [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsProfileHelper.kt spec-dev Add Settings confirmation for profile-driven All Files resource creation [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-dev Add General settings CTA for predefined All Files resource [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt spec-dev Preserve hidden-file behavior in subfolder navigation [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/loading/BrowseLoadingManager.kt spec-dev Sort subfolder listings by resource sort mode [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/res/values/strings_settings.xml spec-dev Add EN settings strings for predefined All Files resource [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev Add RU settings strings for predefined All Files resource [branch: DEBUG-v013]
2026-06-07 03:57:24 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev Add UK settings strings for predefined All Files resource [branch: DEBUG-v013]
2026-06-07 03:57:24 docs/FEATURES.md spec-dev Document predefined All Files resource flow in EN features [branch: DEBUG-v013]
2026-06-07 03:57:24 docs/FEATURES_RU.md spec-dev Document predefined All Files resource flow in RU features [branch: DEBUG-v013]
2026-06-07 03:57:24 docs/FEATURES_UK.md spec-dev Document predefined All Files resource flow in UK features [branch: DEBUG-v013]
2026-06-07 03:57:24 dev/CATALOG/app_v2.jsonl spec-dev Regenerate app_v2 catalog JSONL after S0376 [branch: DEBUG-v013]
2026-06-07 03:57:24 dev/CATALOG/app_v2.md spec-dev Regenerate app_v2 catalog markdown after S0376 [branch: DEBUG-v013]
2026-06-07 04:01:25 app_v2/src/main/res/values/strings.xml spec-dev S0377 Phase 02.1: add resource_menu_open/launch/move_to_top/move_to_bottom (EN) [branch: DEBUG-v013]
2026-06-07 04:01:25 app_v2/src/main/res/values-ru/strings.xml spec-dev S0377 Phase 02.1: add resource_menu_* keys (RU) [branch: DEBUG-v013]
2026-06-07 04:01:25 app_v2/src/main/res/values-uk/strings.xml spec-dev S0377 Phase 02.1: add resource_menu_* keys (UK) [branch: DEBUG-v013]
2026-06-07 04:02:15 PLAN/S0371_video-recording-to-resource.md spec-arc Archive S0371 (video-recording-to-resource), video confirmed working -> temp/done/ [branch: DEBUG-v013]
2026-06-07 04:02:40 PLAN/S0376_file-manager-predefined-resource.md spec-check Audit S0376 -> Verified; PASS/WARN/FAIL 16/0/0 [branch: DEBUG-v013]
2026-06-07 04:02:52 app_v2/src/main/res/menu/resource_item_actions.xml spec-dev S0377 Phase 02.2: add menu items action_open_resource, action_launch_player, action_move_to_top/bottom [branch: DEBUG-v013]
2026-06-07 04:05:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt spec-dev S0377 Phase 02.3: wire Open/Launch/MoveToTop/MoveToBottom menu items in both popup blocks; launch visibility gated by isQuickSlideshowEligible [branch: DEBUG-v013]
2026-06-07 04:06:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev S0377 Phase 02.4: wire onMoveToTopClick/onMoveToBottomClick adapter callbacks to viewModel.moveResourceToTop/Bottom [branch: DEBUG-v013]
2026-06-07 04:07:31 app_v2/src/main/res/drawable/bg_icon_media_storage_frame.xml spec-dev S0377 Phase 03.1: add bg_icon_media_storage_frame oval stroke drawable (icon affordance frame) [branch: DEBUG-v013]
2026-06-07 04:08:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt spec-dev S0377 Phase 03.2: apply/clear bg_icon_media_storage_frame on icon in both view holders (eligible=frame, else=null) [branch: DEBUG-v013]
2026-06-07 04:17:13 docs/FEATURES.md doc-update S0377: add Resource menu actions bullet (Open/Launch/move-to-edge + icon frame) [branch: DEBUG-v013]
2026-06-07 04:17:13 docs/FEATURES_RU.md doc-update S0377: mirror Resource menu actions bullet (RU) [branch: DEBUG-v013]
2026-06-07 04:17:13 docs/FEATURES_UK.md doc-update S0377: mirror Resource menu actions bullet (UK) [branch: DEBUG-v013]
2026-06-07 04:22:23 .claude/commands/spec-dev.md spec-dev Insert Timber BlockNeedUserTest tags as last code edits before final-phase build; single build validates code+tags [branch: DEBUG-v013]
2026-06-07 04:22:23 .claude/commands/spec-all.md spec-all Tags before final build; skip redundant F4 build after post-tags build [branch: DEBUG-v013]
2026-06-07 04:22:24 CLAUDE.md docs Debug Verification Tags: insert tags before last build to avoid double build [branch: DEBUG-v013]
2026-06-07 04:23:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-dev S0377: insert BlockNeedUserTest debug probes in moveResourceToTop/Bottom (build verified) [branch: DEBUG-v013]
2026-06-07 04:23:32 PLAN/S0377_resource-menu-open-launch-reorder.md spec-dev S0377: all phases done; status In Progress -> BlockNeedUserTest; Implemented date set [branch: DEBUG-v013]
2026-06-07 04:27:45 PLAN/S0378_system-info-dialog-compact-actions.md spec Add strategic spec S0378 for system-info dialog compact icon actions + readable scroll area [branch: DEBUG-v013]
2026-06-07 11:59:36 PLAN/S0378_system-info-dialog-compact-actions.md spec-update Refinement: resolve research items for compact actions dialog [branch: DEBUG-v013]
2026-06-07 12:26:30 PLAN/S0378_system-info-dialog-compact-actions/INDEX.md spec-tech S0378 tactical plan: compact icon actions in shared ErrorDialog [branch: DEBUG-v013]
2026-06-07 12:26:30 PLAN/S0378_system-info-dialog-compact-actions/PHASE_01__action-assets.md spec-tech S0378 phase 01: action assets [branch: DEBUG-v013]
2026-06-07 12:26:30 PLAN/S0378_system-info-dialog-compact-actions/PHASE_02__dialog-layout.md spec-tech S0378 phase 02: dialog layout [branch: DEBUG-v013]
2026-06-07 12:26:30 PLAN/S0378_system-info-dialog-compact-actions/PHASE_03__dialog-wiring.md spec-tech S0378 phase 03: dialog wiring [branch: DEBUG-v013]
2026-06-07 12:26:30 PLAN/S0378_system-info-dialog-compact-actions/PHASE_04__docs-catalog-cleanup.md spec-tech S0378 phase 04: docs catalog cleanup [branch: DEBUG-v013]
2026-06-07 12:26:30 PLAN/S0378_system-info-dialog-compact-actions.md spec-tech S0378 status -> Tactical [branch: DEBUG-v013]
2026-06-07 12:27:53 PLAN/S0379_standard-nolegal-storage-surface.md spec Add strategic spec S0379 for standard vs noLegal storage surface split [branch: DEBUG-v013]
2026-06-07 12:35:02 app_v2/src/main/res/drawable/ic_copy_full_report.xml spec-dev S0378: add copy-all icon for optional full-report action [branch: DEBUG-v013]
2026-06-07 12:35:02 app_v2/src/main/res/drawable/bg_dialog_scroll_surface.xml spec-dev S0378: distinct surfaceVariant background for dialog text area [branch: DEBUG-v013]
2026-06-07 12:35:02 app_v2/src/main/res/layout/dialog_error_detail.xml spec-dev S0378: compact icon action row + highlighted scroll area (portrait) [branch: DEBUG-v013]
2026-06-07 12:35:02 app_v2/src/main/res/layout-land/dialog_error_detail.xml spec-dev S0378: compact icon action row + highlighted scroll area (landscape) [branch: DEBUG-v013]
2026-06-07 12:35:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ErrorDialog.kt spec-dev S0378: bind actions to icon row, drop AlertDialog button panel, accessibility [branch: DEBUG-v013]
2026-06-07 12:36:12 PLAN/S0379_standard-nolegal-storage-surface.md spec-update Refinement (Gemini 3.5 Flash, focus: language, structure, completeness) [branch: DEBUG-v013]
2026-06-07 12:36:51 PLAN/S0378_system-info-dialog-compact-actions.md spec-all Pipeline BlockNeedUserTest (device-test deferred): S0378 [branch: DEBUG-v013]
2026-06-07 13:04:44 PLAN/S0380_split-standalone-player.md spec-update Applied owner decisions: photo+video grouping, MIME dispatcher (research item resolved), minimal feature-parity, composition over base class (ADR-1) [branch: DEBUG-v013]
2026-06-07 13:09:51 PLAN/S0380_split-standalone-player.md spec Promote S0380 Draft -> Approved (approval gate + style hygiene) [branch: DEBUG-v013]
2026-06-07 13:13:01 PLAN/S0379_standard-nolegal-storage-surface.md spec-update Resolved all 10 section-6 questions, accepted P-1/P-2, style sanitation, promoted Draft->Approved (Claude Opus 4.8) [branch: DEBUG-v013]
2026-06-07 13:19:54 PLAN/S0380_split-standalone-player/INDEX.md spec-tech Create tactical plan for S0380 (7 phases) [branch: DEBUG-v013]
2026-06-07 13:19:54 PLAN/S0380_split-standalone-player.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-07 13:27:07 PLAN/S0380_split-standalone-player/INDEX.md spec-dev Phase 01 hard-stop: PlayerHostCapabilities already exists; status reverted to Tactical for plan revision [branch: DEBUG-v013]
2026-06-07 13:33:34 PLAN/S0379_standard-nolegal-storage-surface/INDEX.md spec-tech Create tactical plan for S0379 [branch: DEBUG-v013]
2026-06-07 13:33:34 PLAN/S0379_standard-nolegal-storage-surface/PHASE_01__foundations.md spec-tech Phase 01: foundations [branch: DEBUG-v013]
2026-06-07 13:33:34 PLAN/S0379_standard-nolegal-storage-surface/PHASE_02__saf-file-destinations.md spec-tech Phase 02: saf-file-destinations [branch: DEBUG-v013]
2026-06-07 13:33:34 PLAN/S0379_standard-nolegal-storage-surface/PHASE_03__overlay-seams.md spec-tech Phase 03: overlay-seams [branch: DEBUG-v013]
2026-06-07 13:33:34 PLAN/S0379_standard-nolegal-storage-surface/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-07 13:33:34 PLAN/S0379_standard-nolegal-storage-surface.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-07 13:34:04 PLAN/S0379_standard-nolegal-storage-surface/INDEX.md spec-dev Phase 01 -> In Progress [branch: DEBUG-v013]
2026-06-07 13:34:04 PLAN/S0379_standard-nolegal-storage-surface/PHASE_01__foundations.md spec-dev Step 01.1 -> in progress [branch: DEBUG-v013]
2026-06-07 13:34:50 PLAN/S0380_split-standalone-player/INDEX.md spec-update Parity audit + plan revision: Phase 01 skipped (contract pre-coded), Phase 02 reduced to gap-check, broad parity deferred [branch: DEBUG-v013]
2026-06-07 13:34:50 PLAN/S0380_split-standalone-player/PHASE_01__foundations-host-contract.md spec-update Mark Phase 01 Skipped (PlayerHostCapabilities already exists) [branch: DEBUG-v013]
2026-06-07 13:34:50 PLAN/S0380_split-standalone-player/PHASE_02__functional-alignment.md spec-update Reduce Phase 02 to parity gap-check + deferral [branch: DEBUG-v013]
2026-06-07 13:34:53 app_v2/src/main/java/com/sza/fastmediasorter/core/util/UriPathResolver.kt S0379 Step 01.1 Use StorageVolume.directory with fallback [branch: DEBUG-v013]
2026-06-07 13:35:56 app_v2/src/main/java/com/sza/fastmediasorter/utils/SafHelper.kt S0379 Step 01.2 Add SAF tree child document helpers [branch: DEBUG-v013]
2026-06-07 13:40:14 PLAN/S0379_standard-nolegal-storage-surface/INDEX.md spec-dev Phase 01 done; Phase 02 -> In Progress [branch: DEBUG-v013]
2026-06-07 13:40:14 PLAN/S0379_standard-nolegal-storage-surface/PHASE_01__foundations.md spec-dev Phase 01 completed [branch: DEBUG-v013]
2026-06-07 13:40:14 PLAN/S0379_standard-nolegal-storage-surface/PHASE_02__saf-file-destinations.md spec-dev Step 02.1 -> in progress [branch: DEBUG-v013]
2026-06-07 13:40:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFolderPickerHandler.kt S0379 Step 02.1 Allow SAF tree destinations in browse picker [branch: DEBUG-v013]
2026-06-07 13:41:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerFolderPickerHandler.kt S0379 Step 02.1 Allow SAF tree destinations in player picker [branch: DEBUG-v013]
2026-06-07 13:42:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt S0379 Step 02.1 Preserve content destinations in browse file ops [branch: DEBUG-v013]
2026-06-07 13:43:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperation.kt S0379 Step 02.1 Preserve content destinations in player file ops [branch: DEBUG-v013]
2026-06-07 13:44:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt S0379 Step 02.1 Support SAF destination labels in player file ops [branch: DEBUG-v013]
2026-06-07 13:45:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/dispatch/MediaFamilyResolver.kt spec-dev S0380 Phase 03.1 Add MediaFamilyResolver: maps intent MIME/extension to MediaFamily (PHOTO_VIDEO/AUDIO/DOCUMENT/TEXT) reusing MediaTypeUtils, no heavy SDK deps [branch: DEBUG-v013]
2026-06-07 13:45:08 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalCopyFileOperation.kt S0379 Step 02.2 Write local copy outputs into SAF trees [branch: DEBUG-v013]
2026-06-07 13:45:54 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalMoveFileOperation.kt S0379 Step 02.2 Write local move outputs into SAF trees [branch: DEBUG-v013]
2026-06-07 13:48:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt S0379 Step 02.1 Fix SAF destination label compile import [branch: DEBUG-v013]
2026-06-07 13:52:26 PLAN/S0380_split-standalone-player/PHASE_03__dispatcher-activity.md spec-dev Step 03.1 done (MediaFamilyResolver); 03.2 reordered after Phase 04; build-validation paused on unrelated WIP [branch: DEBUG-v013]
2026-06-07 13:52:26 PLAN/S0380_split-standalone-player/INDEX.md spec-dev Phase 03 In Progress 1/2; build blocked by uncommitted WIP (FileOperationsHandler missing Uri import) [branch: DEBUG-v013]
2026-06-07 13:53:31 PLAN/S0379_standard-nolegal-storage-surface/INDEX.md spec-dev Phase 02 completed [branch: DEBUG-v013]
2026-06-07 13:53:31 PLAN/S0379_standard-nolegal-storage-surface/PHASE_02__saf-file-destinations.md spec-dev Phase 02 completed [branch: DEBUG-v013]
2026-06-07 14:12:59 app_v2/src/main/java/com/sza/fastmediasorter/core/storage/RestrictedTreeTargetPolicy.kt app_v2 S0379 Phase 03 restricted tree target policy seam [branch: DEBUG-v013]
2026-06-07 14:13:56 app_v2/src/main/java/com/sza/fastmediasorter/di/RestrictedTreeTargetPolicyModule.kt app_v2 S0379 Phase 03 restricted tree target policy module [branch: DEBUG-v013]
2026-06-07 14:14:49 app_v2/src/noLegal/java/com/sza/fastmediasorter/core/storage/NoLegalRestrictedTreeTargetPolicy.kt app_v2 S0379 Phase 03 noLegal restricted tree policy [branch: DEBUG-v013]
2026-06-07 14:15:28 app_v2/src/main/java/com/sza/fastmediasorter/core/storage/RestrictedTreeTargetPolicy.kt app_v2 S0379 Phase 03 restricted tree target policy seam [branch: DEBUG-v013]
2026-06-07 14:16:46 app_v2/src/main/java/com/sza/fastmediasorter/di/RestrictedTreeTargetPolicyModule.kt app_v2 S0379 Phase 03 restricted tree target policy module [branch: DEBUG-v013]
2026-06-07 14:18:19 app_v2/src/noLegal/java/com/sza/fastmediasorter/core/storage/NoLegalRestrictedTreeTargetPolicy.kt app_v2 S0379 Phase 03 noLegal restricted tree policy [branch: DEBUG-v013]
2026-06-07 14:19:38 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalRestrictedTreeTargetPolicyModule.kt app_v2 S0379 Phase 03 noLegal restricted tree module [branch: DEBUG-v013]
2026-06-07 14:20:37 app_v2/src/main/java/com/sza/fastmediasorter/utils/SafHelper.kt app_v2 S0379 Phase 03 restricted tree SAF detection [branch: DEBUG-v013]
2026-06-07 14:21:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFolderPickerHandler.kt app_v2 S0379 Phase 03 browse picker restricted tree policy [branch: DEBUG-v013]
2026-06-07 14:22:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt spec-dev S0380 Phase 04 decouple PlayerBindingSafeViews accepts any root View (secondary ctor keeps ActivityPlayerUnifiedBinding); enables trimmed standalone layouts; backward-compatible, behavior-preserving [branch: DEBUG-v013]
2026-06-07 14:22:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerFolderPickerHandler.kt app_v2 S0379 Phase 03 player picker restricted tree policy [branch: DEBUG-v013]
2026-06-07 14:23:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt app_v2 S0379 Phase 03 browse initializer policy injection [branch: DEBUG-v013]
2026-06-07 14:24:03 PLAN/S0380_split-standalone-player/PHASE_04__specialized-activities.md spec-dev Phase 04 revised: incremental decouple Text-first; D1 (PlayerBindingSafeViews root-capable) done; D2-D6 pending; OCR entanglement noted [branch: DEBUG-v013]
2026-06-07 14:24:03 PLAN/S0380_split-standalone-player/INDEX.md spec-dev Phase 02 done; Phase 03 Step 03.1 build-validated; Phase 04 In Progress D1/6 [branch: DEBUG-v013]
2026-06-07 14:24:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt app_v2 S0379 Phase 03 browse activity policy injection [branch: DEBUG-v013]
2026-06-07 14:25:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt app_v2 S0379 Phase 03 player activity policy injection [branch: DEBUG-v013]
2026-06-07 14:32:32 PLAN/S0379_standard-nolegal-storage-surface.md S0379 strategic spec Moved S0379 from strategic draft into tactical implementation with completion status updates. [branch: DEBUG-v013]
2026-06-07 14:32:32 PLAN/S0379_standard-nolegal-storage-surface/INDEX.md S0379 tactical index Tracked phase progress and completion state for the standard vs noLegal storage surface rollout. [branch: DEBUG-v013]
2026-06-07 14:32:32 PLAN/S0379_standard-nolegal-storage-surface/PHASE_01__foundations.md S0379 phase 01 Documented and closed Phase 01 foundations for resilient SAF destination handling. [branch: DEBUG-v013]
2026-06-07 14:32:32 PLAN/S0379_standard-nolegal-storage-surface/PHASE_02__saf-file-destinations.md S0379 phase 02 Documented and closed Phase 02 SAF-backed local destination support. [branch: DEBUG-v013]
2026-06-07 14:32:32 PLAN/S0379_standard-nolegal-storage-surface/PHASE_03__overlay-seams.md S0379 phase 03 Documented and closed the noLegal restricted-tree policy seam phase. [branch: DEBUG-v013]
2026-06-07 14:32:32 PLAN/S0379_standard-nolegal-storage-surface/PHASE_04__docs-catalog-cleanup.md S0379 phase 04 Documented and closed docs, strings, catalog, and validation cleanup for S0379. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/core/util/UriPathResolver.kt UriPathResolver Preferred public StorageVolume.directory resolution before reflection fallback for SAF/local path bridging. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/utils/SafHelper.kt SafHelper Added tree-root, writable-child, and restricted-tree helpers for SAF-backed destination handling. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalCopyFileOperation.kt LocalCopyFileOperation Added copy-to-SAF-tree fallback when the chosen local destination is a writable content tree. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/LocalMoveFileOperation.kt LocalMoveFileOperation Added move-to-SAF-tree fallback when the chosen local destination is a writable content tree. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt BrowseFileOperationsManager Preserved SAF content destinations through browse copy and move execution. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/fileops/PlayerFileOperation.kt PlayerFileOperation Preserved SAF content destinations through player copy and move execution. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt FileOperationsHandler Accepted SAF content destinations for player copy and move requests. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFolderPickerHandler.kt BrowseFolderPickerHandler Accepted writable SAF trees as local destinations and gated restricted trees through policy. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerFolderPickerHandler.kt PlayerFolderPickerHandler Accepted writable SAF trees as player destinations and gated restricted trees through policy. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt BrowseManagerInitializer Injected the restricted-tree target policy into browse folder-picker wiring. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt BrowseActivity Injected restricted-tree destination policy for browse storage operations. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity Injected restricted-tree destination policy for player storage operations. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerFileOpsInitializer.kt PlayerFileOpsInitializer Passed restricted-tree destination policy into player folder-picker wiring. [branch: DEBUG-v013]
2026-06-07 14:32:32 app_v2/src/main/java/com/sza/fastmediasorter/core/storage/RestrictedTreeTargetPolicy.kt RestrictedTreeTargetPolicy Added the conservative main-source seam for restricted SAF tree destinations. [branch: DEBUG-v013]
2026-06-07 14:32:33 app_v2/src/main/java/com/sza/fastmediasorter/di/RestrictedTreeTargetPolicyModule.kt RestrictedTreeTargetPolicyModule Bound the default restricted-tree destination policy through Hilt with optional flavor override. [branch: DEBUG-v013]
2026-06-07 14:32:33 app_v2/src/noLegal/java/com/sza/fastmediasorter/core/storage/NoLegalRestrictedTreeTargetPolicy.kt NoLegalRestrictedTreeTargetPolicy Enabled restricted SAF tree destinations only in the noLegal source set. [branch: DEBUG-v013]
2026-06-07 14:32:33 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalRestrictedTreeTargetPolicyModule.kt NoLegalRestrictedTreeTargetPolicyModule Bound the noLegal restricted-tree destination policy into the flavor Hilt graph. [branch: DEBUG-v013]
2026-06-07 14:32:33 docs/FEATURES.md FEATURES.md Documented public SAF-backed OTG or SD destination support and clarified hidden-file limits. [branch: DEBUG-v013]
2026-06-07 14:32:33 docs/FEATURES_RU.md FEATURES_RU.md Documented public SAF-backed OTG or SD destination support and clarified hidden-file limits. [branch: DEBUG-v013]
2026-06-07 14:32:33 docs/FEATURES_UK.md FEATURES_UK.md Documented public SAF-backed OTG or SD destination support and clarified hidden-file limits. [branch: DEBUG-v013]
2026-06-07 14:32:33 docs/FEATURES_noLegal.md FEATURES_noLegal.md Documented the noLegal-only restricted SAF tree destination overlay and renumbered later sections. [branch: DEBUG-v013]
2026-06-07 14:32:33 docs/FEATURES_noLegal_RU.md FEATURES_noLegal_RU.md Documented the noLegal-only restricted SAF tree destination overlay and renumbered later sections. [branch: DEBUG-v013]
2026-06-07 14:32:33 docs/FEATURES_noLegal_UK.md FEATURES_noLegal_UK.md Documented the noLegal-only restricted SAF tree destination overlay and renumbered later sections. [branch: DEBUG-v013]
2026-06-07 14:32:33 app_v2/src/main/res/values/strings.xml tooltip_show_hidden_files_message Rewrote hidden-files tooltip to describe accessible-storage visibility without promising unrestricted system access. [branch: DEBUG-v013]
2026-06-07 14:32:33 app_v2/src/main/res/values-ru/strings.xml tooltip_show_hidden_files_message Rewrote hidden-files tooltip to describe accessible-storage visibility without promising unrestricted system access. [branch: DEBUG-v013]
2026-06-07 14:32:33 app_v2/src/main/res/values-uk/strings.xml tooltip_show_hidden_files_message Rewrote hidden-files tooltip to describe accessible-storage visibility without promising unrestricted system access. [branch: DEBUG-v013]
2026-06-07 14:40:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextOcrDisplayManager.kt spec-dev S0380 D2 Decouple TextOcrDisplayManager from ActivityPlayerUnifiedBinding; drive all views via PlayerBindingSafeViews (media views via nullable OrNull accessors) [branch: DEBUG-v013]
2026-06-07 14:40:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt spec-dev S0380 D2 Drop binding arg from TextOcrDisplayManager construction [branch: DEBUG-v013]
2026-06-07 16:33:19 PLAN/S0379_standard-nolegal-storage-surface.md spec-check Audit S0379 -> Partial; PASS/WARN/FAIL 18/1/0; stale volumePath KDoc flagged [branch: DEBUG-v013]
2026-06-07 16:34:26 app_v2/src/main/java/com/sza/fastmediasorter/core/util/UriPathResolver.kt spec-fix Correct stale volumePath KDoc: official getDirectory() on API 30+, reflection fallback below [branch: DEBUG-v013]
2026-06-07 16:34:26 PLAN/S0379_standard-nolegal-storage-surface.md spec-fix Annotate Last Audit (S0379) [branch: DEBUG-v013]
2026-06-07 16:35:12 PLAN/S0379_standard-nolegal-storage-surface.md spec-check Re-audit S0379 -> Verified; PASS/WARN/FAIL 19/0/0 [branch: DEBUG-v013]
2026-06-07 16:43:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerGestureDetectors.kt spec-dev S0380 D3-D4 Decouple text-viewer subsystem from ActivityPlayerUnifiedBinding (root-based); enables trimmed standalone text layout [branch: DEBUG-v013]
2026-06-07 16:43:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerLoader.kt spec-dev S0380 D3-D4 Decouple text-viewer subsystem from ActivityPlayerUnifiedBinding (root-based); enables trimmed standalone text layout [branch: DEBUG-v013]
2026-06-07 16:43:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorActionPanelCallbacks.kt spec-dev S0380 D3-D4 Decouple text-viewer subsystem from ActivityPlayerUnifiedBinding (root-based); enables trimmed standalone text layout [branch: DEBUG-v013]
2026-06-07 16:43:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorModeController.kt spec-dev S0380 D3-D4 Decouple text-viewer subsystem from ActivityPlayerUnifiedBinding (root-based); enables trimmed standalone text layout [branch: DEBUG-v013]
2026-06-07 16:43:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt spec-dev S0380 D3-D4 Decouple text-viewer subsystem from ActivityPlayerUnifiedBinding (root-based); enables trimmed standalone text layout [branch: DEBUG-v013]
2026-06-07 16:43:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt spec-dev S0380 D3-D4 Decouple text-viewer subsystem from ActivityPlayerUnifiedBinding (root-based); enables trimmed standalone text layout [branch: DEBUG-v013]
2026-06-07 16:43:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-dev S0380 D3-D4 Decouple text-viewer subsystem from ActivityPlayerUnifiedBinding (root-based); enables trimmed standalone text layout [branch: DEBUG-v013]
2026-06-07 16:43:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt spec-dev S0380 D3-D4 Decouple text-viewer subsystem from ActivityPlayerUnifiedBinding (root-based); enables trimmed standalone text layout [branch: DEBUG-v013]
2026-06-07 19:28:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt spec-dev S0380 D5-prep Add setVisibleIfPresent(root-based) so trimmed layouts can omit cross-type views [branch: DEBUG-v013]
2026-06-07 19:28:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerLoader.kt spec-dev S0380 D5-prep Route cross-type view hides through setVisibleIfPresent (null-safe for trimmed text layout) [branch: DEBUG-v013]
2026-06-07 19:28:02 PLAN/S0380_split-standalone-player/PHASE_04__specialized-activities.md spec-dev S0380 D3/D4 done; D5 prep done + full recipe recorded [branch: DEBUG-v013]
2026-06-07 19:34:26 PLAN/S0381_neuroslop-hygiene-hardening.md spec Add strategic spec S0381 for neuroslop hygiene and hardening [branch: DEBUG-v013]
2026-06-07 19:39:45 PLAN/S0381_neuroslop-hygiene-hardening.md spec Refine S0381 strategic spec around audit-backed neuroslop hygiene signals [branch: DEBUG-v013]
2026-06-07 19:45:49 PLAN/S0381_neuroslop-hygiene-hardening.md spec Ground S0381 strategic spec in confirmed neuroslop audit findings (permanent-log ticket-ids, verification debt, flavor-gate erosion, doc drift, cosmetic decomposition) [branch: DEBUG-v013]
2026-06-07 19:47:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-dev S0380 D5 Decouple from ActivityPlayerUnifiedBinding -> root: View + safeViews.setVisibleIfPresent [branch: DEBUG-v013]
2026-06-07 19:47:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0380 D5 StandaloneFileOperationsHandler now constructed with root = binding.root [branch: DEBUG-v013]
2026-06-07 19:47:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-dev S0380 D5 New specialized standalone text activity: trimmed layout, only TextViewerManager (no media SDKs class-loaded) [branch: DEBUG-v013]
2026-06-07 19:47:04 app_v2/src/main/res/layout/activity_standalone_text.xml spec-dev S0380 D5 Trimmed text layout: command panel + 3 text includes + progressBar (omits media/pdf/epub/audio views) [branch: DEBUG-v013]
2026-06-07 19:47:04 app_v2/src/main/res/layout-land/activity_standalone_text.xml spec-dev S0380 D5 Landscape variant of trimmed text layout [branch: DEBUG-v013]
2026-06-07 19:47:04 app_v2/src/main/AndroidManifest.xml spec-dev S0380 D5 Register TextStandaloneActivity with text/plain VIEW filter [branch: DEBUG-v013]
2026-06-07 19:48:28 PLAN/S0380_split-standalone-player/PHASE_04__specialized-activities.md spec-dev S0380 Text lane complete (D1-D6), build v2.60.6071.944; awaiting on-device verification [branch: DEBUG-v013]
2026-06-07 19:48:28 PLAN/S0380_split-standalone-player/INDEX.md spec-dev S0380 Phase 04: Text lane done; PhotoVideo/Audio/Document pending [branch: DEBUG-v013]
2026-06-07 19:56:43 PLAN/S0381_neuroslop-hygiene-hardening/INDEX.md spec-tech Create tactical plan index for S0381 [branch: DEBUG-v013]
2026-06-07 19:56:43 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_01__log-hygiene.md spec-tech Phase 01: log-hygiene for S0381 [branch: DEBUG-v013]
2026-06-07 19:56:43 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_02__verification-debt.md spec-tech Phase 02: verification-debt for S0381 [branch: DEBUG-v013]
2026-06-07 19:56:43 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_03__flavor-containment.md spec-tech Phase 03: flavor-containment for S0381 [branch: DEBUG-v013]
2026-06-07 19:56:43 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_04__canonical-doc-sync.md spec-tech Phase 04: canonical-doc-sync for S0381 [branch: DEBUG-v013]
2026-06-07 19:56:43 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_05__hotspot-simplification.md spec-tech Phase 05: hotspot-simplification for S0381 [branch: DEBUG-v013]
2026-06-07 19:56:43 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup for S0381 [branch: DEBUG-v013]
2026-06-07 19:56:43 PLAN/S0381_neuroslop-hygiene-hardening.md spec-tech Status to Tactical and link tactical plan for S0381 [branch: DEBUG-v013]
2026-06-07 20:08:07 PLAN/S0381_neuroslop-hygiene-hardening.md spec Resolve S0381 open questions per owner: full-scope wave, single /spec-sweep of all 49 BlockNeedUserTest, responsibility-based hotspot criterion, generated doc version sync [branch: DEBUG-v013]
2026-06-07 20:16:04 PLAN/S0381_neuroslop-hygiene-hardening.md spec-tech Resolve S0381 §6.2 ticket-id policy via existing CLAUDE.md rule (absolute zero outside probes) [branch: DEBUG-v013]
2026-06-07 20:16:04 PLAN/S0381_neuroslop-hygiene-hardening/INDEX.md spec-tech Clear all §6 pre-impl blockers after owner decisions [branch: DEBUG-v013]
2026-06-07 20:16:04 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_01__log-hygiene.md spec-tech Phase 01: full-scope log hygiene, fail-closed gate ordering [branch: DEBUG-v013]
2026-06-07 20:16:04 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_02__verification-debt.md spec-tech Phase 02: single full /spec-sweep of all 49 BlockNeedUserTest [branch: DEBUG-v013]
2026-06-07 20:16:04 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_04__canonical-doc-sync.md spec-tech Phase 04: generated toolchain pins, removed fabricated versions [branch: DEBUG-v013]
2026-06-07 20:16:04 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_05__hotspot-simplification.md spec-tech Phase 05: responsibility-based target selected from measurement, not pre-named [branch: DEBUG-v013]
2026-06-07 20:22:24 scripts/quality/assert-no-ticket-logs.ps1 spec-dev Phase 01.1: add permanent-log ticket-id audit (report + -Gate, probe-status aware) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/helpers/GoogleDriveCredentialsManager.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/data/link/HtmlPageExtractionStrategy.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/data/migration/S0200AuthStateWipe.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkFileModelLoader.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkMediaDataSource.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/NetworkLifecycleBootstrapper.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackfillSmbCredentialShareNameUseCase.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DedupAuthAccountsUseCase.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:38 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MigrateS0059UseCase.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveDrawingUseCase.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveTextNoteUseCase.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/service/PhoneWearListenerService.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterThumbnailLoader.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivityLifecycleBridge.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageCropManager.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageOcrManager.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDrawingSaveHelper.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerImmersiveModeManager.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorSaveFlow.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/main/java/com/sza/fastmediasorter/worker/ThumbnailExtractorHelper.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/BrowseApkInstallHandlerImpl.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 wear/src/main/java/com/sza/fastmediasorter/wear/data/wear/WatchWearListenerService.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:30:39 wear/src/main/java/com/sza/fastmediasorter/wear/domain/usecase/PublishPlaybackStateUseCase.kt spec-dev Phase 01.2: strip Sxxxx ticket id from permanent log message(s) [branch: DEBUG-v013]
2026-06-07 20:31:54 scripts/post-change.ps1 spec-dev Phase 01.3: add fail-closed ticket-log-audit gate for Kotlin/Mixed changes [branch: DEBUG-v013]
2026-06-07 20:33:32 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_01__log-hygiene.md spec-dev Phase 01 complete: steps + done criteria ticked, status Done [branch: DEBUG-v013]
2026-06-07 20:33:32 PLAN/S0381_neuroslop-hygiene-hardening/INDEX.md spec-dev Phase 01 done; 1/6, status In Progress [branch: DEBUG-v013]
2026-06-07 20:33:32 PLAN/S0381_neuroslop-hygiene-hardening.md spec-dev Correct §1.1.6: S0224 was a comment, not a stale probe [branch: DEBUG-v013]
2026-06-07 21:18:09 CLAUDE.md tech-stack-pins Phase 04.2: generated toolchain pins managed block; remove stale Glide 4.15.1 [branch: DEBUG-v013]
2026-06-07 21:18:24 docs/TECH_STACK.md tech-stack-pins Phase 04.2: generated toolchain pins; fix stale libs.versions.toml reference [branch: DEBUG-v013]
2026-06-07 21:18:24 scripts/quality/generate-toolchain-pins.ps1 spec-dev Phase 04.1/04.3: toolchain-pin generator (Print/-Write/-Check) reading versions from build files [branch: DEBUG-v013]
2026-06-07 21:18:24 scripts/post-change.ps1 spec-dev Phase 04.3: add fail-closed doc-pins-sync gate for Config/Doc/Mixed [branch: DEBUG-v013]
2026-06-07 21:19:22 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_04__canonical-doc-sync.md spec-dev Phase 04 complete: doc-sync via generated pins, status Done [branch: DEBUG-v013]
2026-06-07 21:19:22 PLAN/S0381_neuroslop-hygiene-hardening/INDEX.md spec-dev Phase 04 done; 2/6 [branch: DEBUG-v013]
2026-06-07 21:57:33 PLAN/S0374_browse-top-command-buttons-20pct.md spec-update Re-open BlockNeedUserTest->Approved; overflow contract revised scroll->priority+overflow (claude-opus-4-6) [branch: DEBUG-v013]
2026-06-07 21:57:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseButtonSetupHelper.kt spec-update Removed S0374 debug verification tag on re-open from BlockNeedUserTest [branch: DEBUG-v013]
2026-06-07 22:02:53 app_v2/src/main/res/values-sw720dp/dimens.xml Welcome onboarding (large screens) Welcome: shrink hero icon and top margins on sw600dp/sw720dp so the device-profile selector and feature tiles fit without scrolling in both orientations [branch: DEBUG-v013]
2026-06-07 22:03:36 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/MediaCapabilities.kt spec-dev Phase 03.1: MediaCapabilities surface + per-flavor BuildConfig binding (noLegal served by mounted vr module) [branch: DEBUG-v013]
2026-06-07 22:03:36 app_v2/src/standard/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev Phase 03.1: MediaCapabilities surface + per-flavor BuildConfig binding (noLegal served by mounted vr module) [branch: DEBUG-v013]
2026-06-07 22:03:36 app_v2/src/lite/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev Phase 03.1: MediaCapabilities surface + per-flavor BuildConfig binding (noLegal served by mounted vr module) [branch: DEBUG-v013]
2026-06-07 22:03:36 app_v2/src/photos/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev Phase 03.1: MediaCapabilities surface + per-flavor BuildConfig binding (noLegal served by mounted vr module) [branch: DEBUG-v013]
2026-06-07 22:03:36 app_v2/src/legacy/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev Phase 03.1: MediaCapabilities surface + per-flavor BuildConfig binding (noLegal served by mounted vr module) [branch: DEBUG-v013]
2026-06-07 22:03:36 app_v2/src/vr/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev Phase 03.1: MediaCapabilities surface + per-flavor BuildConfig binding (noLegal served by mounted vr module) [branch: DEBUG-v013]
2026-06-07 22:05:24 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_03__flavor-containment.md spec-dev Phase 03.1 done: MediaCapabilities surface bound per flavor; design note + noLegal/vr mount resolution [branch: DEBUG-v013]
2026-06-07 22:05:24 PLAN/S0381_neuroslop-hygiene-hardening/INDEX.md spec-dev Phase 03 In Progress 1/3 [branch: DEBUG-v013]
2026-06-07 22:13:58 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt GetMediaFilesUseCase Phase 03.2 pilot: inject MediaCapabilities instead of BuildConfig.SUPPORT_* flavor reads [branch: DEBUG-v013]
2026-06-07 22:16:20 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_03__flavor-containment.md spec-dev Phase 03 pilot done: GetMediaFilesUseCase migrated; UI consumers (FilterResourceDialog, AddResourceFormManager) deferred to follow-up [branch: DEBUG-v013]
2026-06-07 22:16:20 PLAN/S0381_neuroslop-hygiene-hardening/INDEX.md spec-dev Phase 03 done (pilot); 3/6 [branch: DEBUG-v013]
2026-06-07 22:22:00 scripts/quality/measure-hotspots.ps1 measure-hotspots Phase 05.1: responsibility-based hotspot ranking (publicApi+collaborators+callbacks+extractMarkers, not LOC) [branch: DEBUG-v013]
2026-06-07 22:23:16 PLAN/S0381_neuroslop-hygiene-hardening/PHASE_05__hotspot-simplification.md spec-dev Phase 05 measurement done: responsibility ranker; SettingsRepositoryImpl top target; extraction deferred to follow-up [branch: DEBUG-v013]
2026-06-07 22:23:16 PLAN/S0381_neuroslop-hygiene-hardening/INDEX.md spec-dev Phase 05 done (measurement); 4/6 [branch: DEBUG-v013]
2026-06-07 22:28:59 scripts/spec_catalog/list-blockneedusertest.ps1 list-blockneedusertest Phase 02.1: read-only BlockNeedUserTest backlog snapshot with expected/actual count [branch: DEBUG-v013]
2026-06-07 22:33:16 scripts/spec_catalog/list-blockneedusertest.ps1 spec-sweep S0381 Phase 02 sweep: gate+smoke PASS on emulator-5554, classification matrix (5 VR / 3 noLegal / 11 external / 29 emulator), backlog 48; no false verifications [branch: DEBUG-v013]
2026-06-07 22:46:56 PLAN/S0284_settings-search-auto-index.md spec-sweep On-device Verified on emulator-5554: settings search auto-index built (154 entries); probes removed [branch: DEBUG-v013]
2026-06-07 22:46:56 PLAN/S0364_settings-interface-group-split.md spec-sweep On-device Verified on emulator-5554: interface groups split shown; probe removed [branch: DEBUG-v013]
2026-06-07 22:46:56 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-sweep On-device PARTIAL: focus-init + D-pad dispatch confirmed; stays BlockNeedUserTest pending browse traversal [branch: DEBUG-v013]
2026-06-07 22:58:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-sweep Remove debug probe on Verified transition (S0284/S0364) [branch: DEBUG-v013]
2026-06-07 22:58:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/LayoutSettingsSearchSource.kt spec-sweep Remove debug probe on Verified transition (S0284/S0364) [branch: DEBUG-v013]
2026-06-07 22:58:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchRegistry.kt spec-sweep Remove debug probe on Verified transition (S0284/S0364) [branch: DEBUG-v013]
2026-06-07 22:58:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt spec-sweep Remove debug probe on Verified transition (S0284/S0364) [branch: DEBUG-v013]
2026-06-07 23:12:13 PLAN/S0367_playback-camera-microphone-settings-grouping.md spec-sweep On-device Verified on emulator-5554: camera/mic grouping under Playback; probe removed [branch: DEBUG-v013]
2026-06-07 23:12:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-sweep Remove debug probe on Verified transition (S0367) [branch: DEBUG-v013]
2026-06-07 23:30:02 PLAN/S0319_main-window-dropdown-menu-button.md spec-sweep On-device Verified (UI behavior): main-window dropdown menu opens; probe removed [branch: DEBUG-v013]
2026-06-07 23:30:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-sweep Remove debug probe on Verified transition (S0319) [branch: DEBUG-v013]
2026-06-07 23:50:51 scripts/quality/assert-flavor-flags-not-growing.ps1 anti-slop Ratchet gate: flavor-flag reads in src/main may only decrease (baseline 175) [branch: DEBUG-v013]
2026-06-07 23:50:52 scripts/quality/flavor-flag-baseline.txt anti-slop Flavor-flag baseline = 175 occurrences in src/main [branch: DEBUG-v013]
2026-06-07 23:50:52 scripts/post-change.ps1 anti-slop Wire flavor-flag-gate into post-change (Kotlin/Mixed) [branch: DEBUG-v013]
2026-06-08 00:00:23 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Anti-slop #3: extract stereo settings domain to StereoSettingsStore (responsibility move, behaviour-preserving); score 173->166 [branch: DEBUG-v013]
2026-06-08 00:01:26 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/StereoSettingsStore.kt anti-slop New: stereo/3D settings section owning keys+defaults+read/write, extracted from SettingsRepositoryImpl [branch: DEBUG-v013]
2026-06-08 00:13:45 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Anti-slop #3: extract text-recognition/translation/OCR domain (12 keys) to TextRecognitionSettingsStore; score 166->154 [branch: DEBUG-v013]
2026-06-08 00:14:26 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/TextRecognitionSettingsStore.kt anti-slop New: text-recognition/translation/OCR settings section (12 keys) extracted from SettingsRepositoryImpl [branch: DEBUG-v013]
2026-06-08 00:23:19 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Anti-slop #3: extract audio settings domain (4 keys) to AudioSettingsStore + shared setOrRemove helper [branch: DEBUG-v013]
2026-06-08 00:24:25 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/AudioSettingsStore.kt anti-slop New: audio settings section (4 keys) extracted from SettingsRepositoryImpl [branch: DEBUG-v013]
2026-06-08 00:24:25 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/SettingsPrefExtensions.kt anti-slop New: shared setOrRemove helper for settings section stores [branch: DEBUG-v013]
2026-06-08 00:34:16 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Anti-slop #3: extract capture (camera+mic) settings domain (5 keys) to CaptureSettingsStore [branch: DEBUG-v013]
2026-06-08 00:34:57 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/CaptureSettingsStore.kt anti-slop New: capture (camera+mic) settings section (5 keys) extracted from SettingsRepositoryImpl [branch: DEBUG-v013]
2026-06-08 00:41:52 PLAN/S0382_bugfix-vr-immersive-launch-anr.md spec Add strategic spec S0382 for VR immersive launch ANR residual root-causes (transport + main-thread decode) [branch: DEBUG-v013]
2026-06-08 00:52:51 PLAN/S0382_bugfix-vr-immersive-launch-anr.md spec S0382: resolve transport research item -> key + process-scoped holder (ADR-2); reject Parcelable [branch: DEBUG-v013]
2026-06-08 00:54:48 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Anti-slop #3: extract slideshow settings domain (4 keys) to SlideshowSettingsStore [branch: DEBUG-v013]
2026-06-08 00:55:28 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/SlideshowSettingsStore.kt anti-slop New: slideshow settings section (4 keys) extracted from SettingsRepositoryImpl [branch: DEBUG-v013]
2026-06-08 00:57:20 PLAN/S0382_bugfix-vr-immersive-launch-anr/INDEX.md spec-tech Create tactical plan for S0382 [branch: DEBUG-v013]
2026-06-08 00:57:21 PLAN/S0382_bugfix-vr-immersive-launch-anr/PHASE_01__payload-holder-foundation.md spec-tech Phase 01: payload-holder-foundation [branch: DEBUG-v013]
2026-06-08 00:57:21 PLAN/S0382_bugfix-vr-immersive-launch-anr/PHASE_02__token-transport-launch.md spec-tech Phase 02: token-transport-launch [branch: DEBUG-v013]
2026-06-08 00:57:22 PLAN/S0382_bugfix-vr-immersive-launch-anr/PHASE_03__token-transport-return.md spec-tech Phase 03: token-transport-return [branch: DEBUG-v013]
2026-06-08 00:57:22 PLAN/S0382_bugfix-vr-immersive-launch-anr/PHASE_04__offthread-initial-decode.md spec-tech Phase 04: offthread-initial-decode (blocked) [branch: DEBUG-v013]
2026-06-08 00:57:22 PLAN/S0382_bugfix-vr-immersive-launch-anr/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-08 00:57:22 PLAN/S0382_bugfix-vr-immersive-launch-anr.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-08 00:58:36 PLAN/S0383_neuroslop-code-and-resource-hygiene.md spec Draft strategic spec S0383 for AI code and resource hygiene [branch: DEBUG-v013]
2026-06-08 01:01:37 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Anti-slop #3: extract link auto-download settings domain (6 keys) to LinkSettingsStore [branch: DEBUG-v013]
2026-06-08 01:02:24 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/LinkSettingsStore.kt anti-slop New: link auto-download settings section (6 keys) extracted from SettingsRepositoryImpl [branch: DEBUG-v013]
2026-06-08 01:12:00 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl Anti-slop #3: extract media size-filter settings domain (4 keys) to MediaSizeFilterSettingsStore [branch: DEBUG-v013]
2026-06-08 01:12:48 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/MediaSizeFilterSettingsStore.kt anti-slop New: media size-filter settings section (4 keys) extracted from SettingsRepositoryImpl [branch: DEBUG-v013]
2026-06-08 01:15:27 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrLaunchPayloadHolder.kt S0382 phase 01 Add process-scoped VrLaunchPayloadHolder token cache for VR launch/return transport [branch: DEBUG-v013]
2026-06-08 01:16:08 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrLaunchPayloadHolderTest.kt spec-dev S0382 phase 01.2: unit-test VrLaunchPayloadHolder semantics [branch: DEBUG-v013]
2026-06-08 01:16:08 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCaseTest.kt fix Pass mediaCapabilities to GetMediaFilesUseCase ctor - unblock pre-existing unit-test source-set compile break (not S0382 scope) [branch: DEBUG-v013]
2026-06-08 01:23:24 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt S0382 phase 02 Launch Intent carries VrLaunchPayloadHolder token instead of Serializable VrLaunchInput [branch: DEBUG-v013]
2026-06-08 01:24:05 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrLaunchContract.kt spec-dev S0382 phase 02.1: add token extra keys for VR launch/return transport [branch: DEBUG-v013]
2026-06-08 01:24:05 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContract.kt spec-dev S0382 phase 02.2: drop Serializable launch-input from unavailable-fallback Intent [branch: DEBUG-v013]
2026-06-08 01:24:05 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrLaunchArgs.kt spec-dev S0382 phase 02.3: resolve launch input from holder token with diagnostic-playlist fallback [branch: DEBUG-v013]
2026-06-08 01:24:05 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-dev S0382 phase 02.3: inject payload holder and pass it to launch-args parse [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0206_ftp-true-partial-read.md spec-arc Archive S0206 (ftp-true-partial-read) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0213_bugfix-video-playback-oom-hardening.md spec-arc Archive S0213 (bugfix-video-playback-oom-hardening) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0214_github-store-publication.md spec-arc Archive S0214 (github-store-publication) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0215_fdroid-publish-research.md spec-arc Archive S0215 (fdroid-publish-research) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0233_google-drive-credentialmanager-fallback.md spec-arc Archive S0233 (google-drive-credentialmanager-fallback) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0275_test_suite_triage.md spec-arc Archive S0275 (test-suite-triage) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0284_settings-search-auto-index.md spec-arc Archive S0284 (settings-search-auto-index) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0294_google-drive-browser-auth-quest3.md spec-arc Archive S0294 (google-drive-browser-auth-quest3) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0300_domain-data-unit-tests.md spec-arc Archive S0300 (domain-data-unit-tests) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 temp/done/S0302_file-manager-mode.md spec-arc Archive S0302 (file-manager-mode) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 01:27:57 app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt spec-arc Remove S0233 BlockNeedUserTest debug tags; invert gms repair guard to drop empty if-branch [branch: DEBUG-v013]
2026-06-08 01:27:57 app_v2/src/main/java/com/sza/fastmediasorter/core/logging/Media3OomSafeLogger.kt spec-arc Remove S0213 BlockNeedUserTest debug tag [branch: DEBUG-v013]
2026-06-08 01:27:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt spec-arc Remove S0213 BlockNeedUserTest debug tag [branch: DEBUG-v013]
2026-06-08 01:27:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-arc Remove S0213 BlockNeedUserTest debug tag [branch: DEBUG-v013]
2026-06-08 01:27:57 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpConnectedOperations.kt spec-arc Remove S0206 BlockNeedUserTest debug tags [branch: DEBUG-v013]
2026-06-08 01:27:57 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpStandaloneOperations.kt spec-arc Remove S0206 BlockNeedUserTest debug tags [branch: DEBUG-v013]
2026-06-08 01:36:31 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/StartVrPlaybackUseCaseImpl.kt S0382 phase 03 Return target carried as VrLaunchPayloadHolder token on the immersive launch intent [branch: DEBUG-v013]
2026-06-08 01:37:11 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrLaunchArgs.kt spec-dev S0382 phase 03.1: resolve inbound return target from holder token; drop readSerializableExtraCompat [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-dev S0382 phase 03.2: host emits launch result and return target as holder tokens [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt spec-dev S0382 phase 03.3: consume return result/target from holder tokens [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0382 phase 03.3: inject VrLaunchPayloadHolder for player VR return path [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt spec-dev S0382 phase 03.3: pass payload holder to PlayerVrLaunchManager [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContract.kt spec-dev S0382 phase 03.3: parseResult and fallback use holder token instead of Serializable result [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt spec-dev S0382 phase 03.3: inject holder and pass it to VrPlaybackActivityContract [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContractTest.kt spec-dev S0382 phase 03.4: contract test uses real shared payload holder for token round-trip [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/IntentSerializationCompat.kt spec-dev S0382 phase 03.4: remove dead readSerializableExtraCompat helper (no production users after tokenization) [branch: DEBUG-v013]
2026-06-08 01:37:12 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/IntentSerializationCompatTest.kt spec-dev S0382 phase 03.4: remove test for deleted readSerializableExtraCompat helper [branch: DEBUG-v013]
2026-06-08 01:40:01 PLAN/S0374_browse-top-command-buttons-20pct/INDEX.md spec-all Tactical plan INDEX: adaptive priority+overflow toolbar [branch: DEBUG-v013]
2026-06-08 01:40:01 PLAN/S0374_browse-top-command-buttons-20pct/PHASE_01__allocation-core.md spec-all Tactical phase [branch: DEBUG-v013]
2026-06-08 01:40:01 PLAN/S0374_browse-top-command-buttons-20pct/PHASE_02__overflow-manager.md spec-all Tactical phase [branch: DEBUG-v013]
2026-06-08 01:40:01 PLAN/S0374_browse-top-command-buttons-20pct/PHASE_03__layout-remove-hsv.md spec-all Tactical phase [branch: DEBUG-v013]
2026-06-08 01:40:01 PLAN/S0374_browse-top-command-buttons-20pct/PHASE_04__overflow-menu.md spec-all Tactical phase [branch: DEBUG-v013]
2026-06-08 01:40:01 PLAN/S0374_browse-top-command-buttons-20pct/PHASE_05__wiring-triggers.md spec-all Tactical phase [branch: DEBUG-v013]
2026-06-08 01:40:01 PLAN/S0374_browse-top-command-buttons-20pct/PHASE_06__debug-tags-build.md spec-all Tactical phase [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCommandBarAllocation.kt spec-all Pure command-bar allocation core (priority cut) [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCommandBarAllocationTest.kt spec-all Unit tests for allocation core [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCommandOverflowManager.kt spec-all Adaptive priority+overflow controller for top command bar [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt spec-all Push-model overflow menu items; removed viewport pull-check [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt spec-all Report command eligibility + trigger overflow recompute [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt spec-all Wire overflow manager; hoist button callbacks; pass overflow to menu [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-all Overflow recompute on mic + orientation; restitch made internal [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/res/layout/activity_browse.xml spec-all Remove HorizontalScrollView; layoutControls is the constrained bar [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/res/layout-land/activity_browse.xml spec-all Remove HorizontalScrollView (landscape) [branch: DEBUG-v013]
2026-06-08 01:57:46 app_v2/src/main/res/menu/menu_resource_ops.xml spec-all Add overflow command items group [branch: DEBUG-v013]
2026-06-08 02:04:23 app_v2/src/main/res/layout/item_media_file.xml item_media_file.xml Compact Browse list row: center checkbox/thumbnail/trailing buttons vertically, pack filename+info text block, shrink checkbox footprint so row height tracks text (~36dp), removing top/bottom empty space [branch: DEBUG-v013]
2026-06-08 02:05:15 PLAN/S0373_bugfix-recent-media-scan-cancellation.md spec-arc Archive S0373 (bugfix-recent-media-scan-cancellation) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 PLAN/S0342_bugfix-avi-seek-empty-index-crash.md spec-arc Archive S0342 (bugfix-avi-seek-empty-index-crash) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 PLAN/S0343_bugfix-smb-datasource-uri-null-race.md spec-arc Archive S0343 (bugfix-smb-datasource-uri-null-race) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 PLAN/S0235_dropbox-files-metadata-read-scope-regression.md spec-arc Archive S0235 (dropbox-files-metadata-read-scope-regression) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 PLAN/S0368_draw-overlay-toolbar-safe-area.md spec-arc Archive S0368 (draw-overlay-toolbar-safe-area) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 PLAN/S0346_sftp-audio-next-prefetch-feedback.md spec-arc Archive S0346 (sftp-audio-next-prefetch-feedback) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 PLAN/S0326_media-3dvr-default-settings.md spec-arc Archive S0326 (media-3dvr-default-settings) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 PLAN/S0330_player-control-menu-redesign.md spec-arc Archive S0330 (player-control-menu-redesign) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 PLAN/S0335_settings-system-info-dialog.md spec-arc Archive S0335 (settings-system-info-dialog) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerViewModel.kt spec-arc Remove S0235 BlockNeedUserTest debug tags on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/DropboxClient.kt spec-arc Remove S0235 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt spec-arc Remove S0326 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-arc Remove S0326 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerStereoModeCoordinator.kt spec-arc Remove S0326 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt spec-arc Remove S0368 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt spec-arc Remove S0330 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-arc Remove S0346 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerErrorHandler.kt spec-arc Remove S0342 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SftpDataSource.kt spec-arc Remove S0343 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/FtpDataSource.kt spec-arc Remove S0343 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 02:05:16 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt spec-arc Remove S0343 BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 10:00:19 PLAN/S0379_standard-nolegal-storage-surface.md spec-arc Archive S0379 (standard-nolegal-storage-surface) to temp/done/ after Verified [branch: DEBUG-v013]
2026-06-08 11:09:19 PLAN/S0380_split-standalone-player/PHASE_04__specialized-activities.md spec-update Repair stale Phase 04 prompts: StandalonePlayerHostController -> PlayerHostCapabilities composition + decouple-first recipe (force-locked, In Progress) [branch: DEBUG-v013]
2026-06-08 11:17:46 PLAN/S0384_unify-scrollable-text-dialogs.md spec Add strategic spec S0384: unify scrollable text dialogs [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene/INDEX.md spec-tech Create tactical plan for S0383 [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_01__detection-harness.md spec-tech Phase 01: detection-harness [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_02__comments-hygiene.md spec-tech Phase 02: comments-hygiene [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_03__exception-handling.md spec-tech Phase 03: exception-handling [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_04__resource-dedup.md spec-tech Phase 04: resource-dedup [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_05__lifecycle-safety.md spec-tech Phase 05: lifecycle-safety [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_06__automation-gates.md spec-tech Phase 06: automation-gates [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-08 11:21:54 PLAN/S0383_neuroslop-code-and-resource-hygiene.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-08 11:24:09 PLAN/S0378_system-info-dialog-compact-actions.md spec-arc Archive S0378 (system-info-dialog-compact-actions) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 11:24:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ErrorDialog.kt spec-arc S0378: remove BlockNeedUserTest debug tag on archive [branch: DEBUG-v013]
2026-06-08 11:28:30 scripts/quality/assert-trivial-comments.ps1 assert-trivial-comments S0383 P01.1: detector for trivial verb-noun comments (ratchet gate) [branch: DEBUG-v013]
2026-06-08 11:28:31 scripts/quality/trivial-comments-baseline.txt spec-dev S0383 P01.1: seed trivial-comments baseline 1037 [branch: DEBUG-v013]
2026-06-08 11:28:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0380 04.1 New specialized standalone activity for image/gif/video external intents (PlayerHostCapabilities, reuses decoupled StandaloneViewManager) [branch: DEBUG-v013]
2026-06-08 11:28:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PhotoVideoStandaloneKeyboardManager.kt spec-dev S0380 04.1 Keyboard handler wiring for the photo/video standalone lane (image/gif/video routes only) [branch: DEBUG-v013]
2026-06-08 11:28:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PhotoVideoStandaloneVideoHandle.kt spec-dev S0380 04.1 VideoPlayerHandle delegation over StandaloneViewManager for the photo/video standalone lane [branch: DEBUG-v013]
2026-06-08 11:28:43 app_v2/src/main/res/layout/activity_standalone_photo_video.xml spec-dev S0380 04.1 Trimmed photo/video standalone layout (portrait + landscape), media surfaces only [branch: DEBUG-v013]
2026-06-08 11:28:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt spec-dev S0380 04.1 Add typed playerView/photoView/photoDualSurfaceContainerOrNull accessors for root-based specialized layouts [branch: DEBUG-v013]
2026-06-08 11:28:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-dev S0380 04.1 Dual-mode decouple: accept root View + nullable binding; image/video/audio via PlayerBindingSafeViews, document paths require full binding [branch: DEBUG-v013]
2026-06-08 11:28:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0380 04.1 Pass root + binding to dual-mode StandaloneViewManager (behavior-preserving) [branch: DEBUG-v013]
2026-06-08 11:29:37 scripts/quality/assert-empty-catch.ps1 assert-empty-catch S0383 P01.2: detector for swallowing catch blocks (ratchet gate) [branch: DEBUG-v013]
2026-06-08 11:29:37 scripts/quality/empty-catch-baseline.txt spec-dev S0383 P01.2: seed empty-catch baseline 75 [branch: DEBUG-v013]
2026-06-08 11:30:15 PLAN/S0382_bugfix-vr-immersive-launch-anr.md spec-dev Phases 04-05 done; 6.2/6.3 resolved; status -> BlockNeedUserTest (awaiting Quest 3 on-device test) [branch: DEBUG-v013]
2026-06-08 11:30:16 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-dev S0382 Phase 04: off-main-thread initial decode + 2D loading overlay; render-thread start gated on initialDecodeComplete; runBlocking removed [branch: DEBUG-v013]
2026-06-08 11:30:16 app_v2/src/main/res/values/strings_vr.xml spec-dev S0382 Phase 04: add vr_immersive_preparing (EN) [branch: DEBUG-v013]
2026-06-08 11:30:16 app_v2/src/main/res/values-ru/strings_vr.xml spec-dev S0382 Phase 04: add vr_immersive_preparing (RU) [branch: DEBUG-v013]
2026-06-08 11:30:16 app_v2/src/main/res/values-uk/strings_vr.xml spec-dev S0382 Phase 04: add vr_immersive_preparing (UK) [branch: DEBUG-v013]
2026-06-08 11:30:32 scripts/quality/assert-layout-hardcoded-colors.ps1 assert-layout-hardcoded-colors S0383 P01.3: detector for hardcoded layout colors (ratchet gate) [branch: DEBUG-v013]
2026-06-08 11:30:32 scripts/quality/layout-hardcoded-colors-baseline.txt spec-dev S0383 P01.3: seed layout-hardcoded-colors baseline 150 [branch: DEBUG-v013]
2026-06-08 11:32:00 scripts/quality/assert-unsafe-collect.ps1 assert-unsafe-collect S0383 P01.4: detector for unsafe lifecycle Flow collects (ratchet gate) [branch: DEBUG-v013]
2026-06-08 11:32:00 scripts/quality/unsafe-collect-baseline.txt spec-dev S0383 P01.4: seed unsafe-collect baseline 8 [branch: DEBUG-v013]
2026-06-08 11:35:27 PLAN/S0384_unify-scrollable-text-dialogs.md spec-update S0384: resolve all 4 §6 owner decisions; unblock (S0378 archived) -> Approved [branch: DEBUG-v013]
2026-06-08 11:39:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-dev S0380 04.2 New specialized standalone activity for audio external intents (reuses decoupled StandaloneViewManager audio path + background AudioServiceController) [branch: DEBUG-v013]
2026-06-08 11:39:36 app_v2/src/main/res/layout/activity_standalone_audio.xml spec-dev S0380 04.2 Trimmed audio standalone layout (portrait + landscape), playerView + command panel only [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrLaunchPayloadHolder.kt VrLaunchPayloadHolder Created process-scoped holder mapping primitive tokens to VR launch/return payloads (S0382) [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrLaunchPayloadHolderTest.kt VrLaunchPayloadHolderTest Unit tests for VrLaunchPayloadHolder token lifecycle and cap-bound eviction [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt XrEntryGatewayImpl Tokenized the launch Intent extra payload mapping [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContract.kt VrPlaybackActivityContract Updated launch contract to use tokens instead of serializable extras [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrLaunchArgs.kt DiagnosticXrLaunchArgs Resolved launch args via token lookup with fallback default input [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/StartVrPlaybackUseCaseImpl.kt StartVrPlaybackUseCaseImpl Tokenized the return-target Intent extra [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Off-main-thread decode, loading state overlay, and tokenized return/result Intents [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt PlayerVrLaunchManager Resolved return target and result from tokens instead of reading serializable extras [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/VrPlaybackActivityContractTest.kt VrPlaybackActivityContractTest Updated contract test assertions to token model [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/test/java/com/sza/fastmediasorter/core/xr/IntentSerializationCompatTest.kt IntentSerializationCompatTest Removed dead tests for serializable extra compat helper [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/res/values/strings_vr.xml strings_vr.xml Added vr_immersive_preparing loading string [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/res/values-ru/strings_vr.xml strings_vr.xml Added Russian translation for vr_immersive_preparing [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/res/values-uk/strings_vr.xml strings_vr.xml Added Ukrainian translation for vr_immersive_preparing [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/res/values/strings.xml strings.xml Phase 4 strings update [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/res/values-ru/strings.xml strings.xml Phase 4 Russian strings update [branch: DEBUG-v013]
2026-06-08 11:41:53 app_v2/src/main/res/values-uk/strings.xml strings.xml Phase 4 Ukrainian strings update [branch: DEBUG-v013]
2026-06-08 11:42:21 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt DiagnosticXrActivity Removed S0382 debug verification tag as part of spec-check transition to Verified [branch: DEBUG-v013]
2026-06-08 11:42:56 PLAN/S0382_bugfix-vr-immersive-launch-anr.md spec-check Audit S0382 → Verified; PASS/WARN/FAIL 16/0/0 [branch: DEBUG-v013]
2026-06-08 11:45:12 scripts/quality/assert-unsafe-collect.ps1 assert-unsafe-collect S0383 P05: brace-match detector body (fix operator-chain false negatives); true count 13 [branch: DEBUG-v013]
2026-06-08 11:45:12 scripts/quality/unsafe-collect-baseline.txt spec-dev S0383 P05: re-seed unsafe-collect baseline 8 -> 13 (detector correction) [branch: DEBUG-v013]
2026-06-08 12:14:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0380 04.3 New specialized standalone activity for PDF/EPUB/Office external intents (drives root-decoupled viewer managers directly) [branch: DEBUG-v013]
2026-06-08 12:14:47 app_v2/src/main/res/layout/activity_standalone_document.xml spec-dev S0380 04.3 Trimmed document standalone layout (portrait + landscape), pdf/epub/office viewers only [branch: DEBUG-v013]
2026-06-08 12:14:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt spec-dev S0380 04.3 Decouple from ActivityPlayerUnifiedBinding to root View + PlayerBindingSafeViews (shared with internal player, behavior-preserving) [branch: DEBUG-v013]
2026-06-08 12:14:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt spec-dev S0380 04.3 Decouple from ActivityPlayerUnifiedBinding to root View + PlayerBindingSafeViews (shared with internal player, behavior-preserving) [branch: DEBUG-v013]
2026-06-08 12:14:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BaseDocumentViewerManager.kt spec-dev S0380 04.3 Decouple base document viewer manager to root View [branch: DEBUG-v013]
2026-06-08 12:14:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTranslationCoordinator.kt spec-dev S0380 04.3 Decouple PDF translation coordinator collaborator to root View [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfTextSelectionManager.kt spec-dev S0380 04.3 Decouple PDF text-selection collaborator to root View [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfLinkAndSearchManager.kt spec-dev S0380 04.3 Decouple PDF link/search collaborator to root View [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfThumbnailSheet.kt spec-dev S0380 04.3 Decouple PDF thumbnail sheet collaborator to root View [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubWebViewLifecycle.kt spec-dev S0380 04.3 Decouple EPUB WebView lifecycle collaborator to root View [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubTranslationOverlayHelper.kt spec-dev S0380 04.3 Decouple EPUB translation overlay collaborator to root View [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubSearchAndTocPresenter.kt spec-dev S0380 04.3 Decouple EPUB search/ToC presenter collaborator to root View [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerBindingSafeViews.kt spec-dev S0380 04.3 Add root-based pdf/epub nav/zoom/font + media/overlay accessors for specialized document layouts [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-dev S0380 04.3 Remove now-unused binding param; pdf/epub/office use root; drop requireNotNull guards [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt spec-dev S0380 04.3 Internal player: pass root to decoupled pdf/epub/office managers (behavior-preserving) [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0380 04.3 Drop binding arg to fully root-based StandaloneViewManager [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerManager.kt spec-dev S0380 04.3 noLegal: decouple embedded Office viewer host to root View [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/standard/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt spec-dev S0380 04.3 Office viewer host factory createViewerHost(root) signature decouple [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/lite/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt spec-dev S0380 04.3 Office viewer host factory createViewerHost(root) signature decouple [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/photos/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt spec-dev S0380 04.3 Office viewer host factory createViewerHost(root) signature decouple [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/legacy/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt spec-dev S0380 04.3 Office viewer host factory createViewerHost(root) signature decouple [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/vrOnly/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt spec-dev S0380 04.3 Office viewer host factory createViewerHost(root) signature decouple [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/player/helpers/OfficeDocumentViewerProviderFactory.kt spec-dev S0380 04.3 Office viewer host factory createViewerHost(root) signature decouple [branch: DEBUG-v013]
2026-06-08 12:14:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt build-unblock Restore missing collectOnLifecycle import in concurrent owner WIP to unblock shared standardDebug build (not S0380 scope) [branch: DEBUG-v013]
2026-06-08 12:19:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/dispatch/StandalonePlayerDispatcherActivity.kt spec-dev S0380 03.2 New no-UI dispatcher trampoline: resolves media family for typeless/wildcard intents and forwards to the matching specialized standalone activity without loading heavy SDKs [branch: DEBUG-v013]
2026-06-08 12:29:43 app_v2/src/main/AndroidManifest.xml spec-dev S0380 05 Register 4 specialized standalone activities + dispatcher; re-target VIEW aliases per type; add toggled text + typeless-dispatcher aliases; resolve MIME overlap (text/plain split from docs, scheme-only dispatcher filter) [branch: DEBUG-v013]
2026-06-08 12:29:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerManager.kt spec-dev S0380 05 Add StandaloneTextPlayer + StandaloneTypelessPlayer to the default-player VIEW alias toggle set [branch: DEBUG-v013]
2026-06-08 12:47:48 PLAN/S0380_split-standalone-player.md spec-dev All phases done (Text/PhotoVideo/Audio/Document + dispatcher + manifest cutover + flavor parity); status In Progress -> BlockNeedUserTest; 6 S0380 debug verification tags inserted at standalone activity / dispatcher / PdfViewerManager flow entries [branch: DEBUG-v013]
2026-06-08 12:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev S0383 P05.2: route share-result collect through collectOnLifecycle [branch: DEBUG-v013]
2026-06-08 12:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-dev S0383 P05.2: route state collect through collectOnLifecycle; drop unused imports [branch: DEBUG-v013]
2026-06-08 12:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/SlideshowSettingsDialogFragment.kt spec-dev S0383 P05.2: route state collect through collectOnLifecycle [branch: DEBUG-v013]
2026-06-08 12:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivityLifecycleBridge.kt spec-dev S0383 P05.2: route FPS overlay collects through collectOnLifecycle [branch: DEBUG-v013]
2026-06-08 12:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LyricsManager.kt spec-dev S0383 P05.2: document intentional lifetime collect (KEEP) [branch: DEBUG-v013]
2026-06-08 12:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SlideshowResourceAvailabilityManager.kt spec-dev S0383 P05.2: document intentional lifetime collect (KEEP) [branch: DEBUG-v013]
2026-06-08 12:53:19 scripts/quality/unsafe-collect-baseline.txt spec-dev S0383 P05.3: ratchet unsafe-collect baseline 13 -> 8 [branch: DEBUG-v013]
2026-06-08 12:56:52 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/dispatch/MediaFamilyResolverTest.kt test Add unit tests for MediaFamilyResolver [branch: DEBUG-v013]
2026-06-08 12:57:20 PLAN/S0380_split-standalone-player.md spec Add Last Audit block to S0380 spec [branch: DEBUG-v013]
2026-06-08 12:57:43 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_04__resource-dedup.md spec-dev S0383 P04.1: resource detection done; 04.2-04.4 blocked on owner inputs (translations, theme convention) + dedup premise correction [branch: DEBUG-v013]
2026-06-08 13:00:10 PLAN/S0384_unify-scrollable-text-dialogs/INDEX.md spec-tech S0384 tactical plan: 6 phases, unify scrollable text dialogs [branch: DEBUG-v013]
2026-06-08 13:00:10 PLAN/S0384_unify-scrollable-text-dialogs.md spec-tech S0384 status -> Tactical [branch: DEBUG-v013]
2026-06-08 13:07:47 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_04__resource-dedup.md spec-dev S0383 P04: re-scope into 04a dedup / 04b parity / 04c colors; park on owner inputs [branch: DEBUG-v013]
2026-06-08 13:11:18 scripts/quality/assert-trivial-comments.ps1 assert-trivial-comments S0383 P02: tighten heuristic (<=4 words, no explanatory connective); true-trivial count 232 not 1037 [branch: DEBUG-v013]
2026-06-08 13:11:18 scripts/quality/trivial-comments-baseline.txt spec-dev S0383 P02: re-seed trivial-comments baseline 1037 -> 232 (detector precision fix) [branch: DEBUG-v013]
2026-06-08 13:15:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/PlayerSettingsDialog.kt PlayerSettingsDialog S0383 P02.2: remove 8 trivial section-label comments [branch: DEBUG-v013]
2026-06-08 13:16:36 scripts/quality/trivial-comments-baseline.txt spec-dev S0383 P02.3: ratchet trivial-comments baseline 232 -> 224 (partial) [branch: DEBUG-v013]
2026-06-08 13:22:44 PLAN/S0385_apk-aab-dead-weight-reduction.md spec Add strategic spec S0385 for APK/AAB dead-weight reduction [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction/INDEX.md spec-tech Create tactical plan for S0385 [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_01__dead-dependency-removal.md spec-tech Phase 01: dead-dependency-removal [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_02__dead-class-removal.md spec-tech Phase 02: dead-class-removal [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_03__test-fixture-debug-isolation.md spec-tech Phase 03: test-fixture-debug-isolation [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_04__keep-narrow-resource-shrink.md spec-tech Phase 04: keep-narrow-resource-shrink [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_05__ml-ocr-flavor-confinement.md spec-tech Phase 05: ml-ocr-flavor-confinement [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_06__flavor-dead-media-placement.md spec-tech Phase 06: flavor-dead-media-placement [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-08 13:30:12 PLAN/S0385_apk-aab-dead-weight-reduction.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-08 13:33:46 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_02__dead-class-removal.md spec-tech Exclude HostKeyMismatchException from deletion - it is S0046 (Partial) scaffolding; cross-ticket guard + link S0381/S0383 [branch: DEBUG-v013]
2026-06-08 13:37:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScrollableTextDialog.kt spec-dev S0384: new unified scrollable-text dialog (replaces ErrorDialog/DialogUtils/ErrorDialogHelper) [branch: DEBUG-v013]
2026-06-08 13:37:16 app_v2/src/main/res/layout/dialog_error_detail.xml spec-dev S0384: add btnExtra action slot (portrait) [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/layout-land/dialog_error_detail.xml spec-dev S0384: add btnExtra action slot (landscape) [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ErrorDialog.kt spec-dev S0384: delete - superseded by ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/DialogUtils.kt spec-dev S0384: delete - showScrollableDialog migrated to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/ErrorDialogHelper.kt spec-dev S0384: delete dead wrapper (0 callers) [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScheduledLogDialog.kt spec-dev S0384: delete - reuses ScrollableTextDialog via extraAction [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/layout/dialog_scrollable_text.xml spec-dev S0384: delete superseded layout [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/layout-land/dialog_scrollable_text.xml spec-dev S0384: delete superseded layout (land) [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/layout/dialog_log_view.xml spec-dev S0384: delete dead layout (0 refs) [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/layout-land/dialog_log_view.xml spec-dev S0384: delete dead layout (land) [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/layout/dialog_scheduled_log.xml spec-dev S0384: delete - scheduled log uses ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/layout-land/dialog_scheduled_log.xml spec-dev S0384: delete (land) [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0384: scheduled log via ScrollableTextDialog + clear extraAction [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsImportExportHelper.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GoogleAccountSettingsHelper.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseErrorDisplayManager.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/copy/UiMessageProjector.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationDestinationDialog.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/java/com/sza/fastmediasorter/util/AppErrorNotifier.kt spec-dev S0384: migrate dialog calls to ScrollableTextDialog [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/values/strings.xml spec-dev S0384: remove orphan dialog_log_view auto-strings [branch: DEBUG-v013]
2026-06-08 13:37:17 app_v2/src/main/res/values/strings_scheduled.xml spec-dev S0384: remove orphan scheduled_ops_log copy/close [branch: DEBUG-v013]
2026-06-08 13:39:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScrollableTextDialog.kt spec-dev S0384: insert BlockNeedUserTest debug tag at show() entry [branch: DEBUG-v013]
2026-06-08 13:40:26 PLAN/S0384_unify-scrollable-text-dialogs.md spec-all Pipeline BlockNeedUserTest (device-test deferred): S0384 [branch: DEBUG-v013]
2026-06-08 15:43:37 app_v2/build.gradle.kts build S0385 Phase 01: remove dead deps (fastscroll, navigation-fragment-ktx, navigation-ui-ktx, navigation-testing); material-icons-extended kept (not dead) [branch: DEBUG-v013]
2026-06-08 15:51:27 app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt app_v2 S0385 Phase 02: remove trailing dead NetworkFileDataInputStream + unused import [branch: DEBUG-v013]
2026-06-08 15:52:17 app_v2/src/main/java/com/sza/fastmediasorter spec-dev S0385 Phase 02: delete dead classes - SafeByteBuffer cluster (4) + EncryptedString + BaseFragment + UiEvent + PdfHelper + KpiAlertChecker + MetricsExporter (10 files) [branch: DEBUG-v013]
2026-06-08 16:01:43 app_v2/proguard-rules.pro app_v2 S0385 Phase 03: drop force-keep for debug-only TestCredential models (R8 strips them in release) [branch: DEBUG-v013]
2026-06-08 16:01:43 app_v2/src/debug/assets/test_credentials.json spec-dev S0385 Phase 03: move test_credentials.json from src/main/assets to src/debug/assets (absent from release; R8 usage.txt confirms TestCredential models stripped) [branch: DEBUG-v013]
2026-06-08 16:26:09 app_v2/build.gradle.kts build S0385 fast-wins: exclude BouncyCastle PQC picnic data + BC _de locale (~1.27MB off networked release); scope googleid per-flavor (drop from lite) [branch: DEBUG-v013]
2026-06-08 16:27:08 scripts/quality/assert-trivial-comments.ps1 spec-dev S0383 P02: add -Fix mode + digit/colon keeper exclusions [branch: DEBUG-v013]
2026-06-08 16:27:08 scripts/quality/trivial-comments-baseline.txt spec-dev S0383 P02.3: ratchet trivial-comments baseline 224 -> 0 (sweep complete) [branch: DEBUG-v013]
2026-06-08 16:27:08 app_v2/src/main spec-dev S0383 P02.2: remove 215 trivial verb-noun comments across ~140 files via assert-trivial-comments.ps1 -Fix [branch: DEBUG-v013]
2026-06-08 16:33:27 CLAUDE.md all-agents Add comment-discipline rule (English-only, WHY-not-WHAT, only non-obvious business logic / edge-cases, no trivial restating comments) to Strict Rule 10 + mirrors in copilot-instructions, both agent defs (.claude + .github), and code-writing skills spec-dev/skill-fix [branch: DEBUG-v013]
2026-06-08 16:34:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameBoardView.kt app_v2 Mini-game: cap board at 20x20, animate actor moves over 0.2s, guarantee Kryvavitsa reachable from player start [branch: DEBUG-v013]
2026-06-08 16:36:00 PLAN/S0316_embedded-mini-game.md spec-arc Archive S0316 (embedded-mini-game) -> temp/done/; mini-game enhancements (20x20 cap, move animation, Kryvavitsa reachability) shipped ticketless [branch: DEBUG-v013]
2026-06-08 16:39:11 scripts/quality/assert-neuroslop.ps1 assert-neuroslop S0383 P06.1: umbrella neuroslop ratchet gate [branch: DEBUG-v013]
2026-06-08 16:39:11 scripts/post-change.ps1 spec-dev S0383 P06.2: wire neuroslop-gate (Kotlin/Xml/Mixed) [branch: DEBUG-v013]
2026-06-08 16:39:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/PlayerSettingsDialog.kt PlayerSettingsDialog S0383 P06.2: verify neuroslop-gate fires on Kotlin path [branch: DEBUG-v013]
2026-06-08 16:53:28 app_v2/build.gradle.kts build S0385: remove dead androidx.navigation.safeargs.kotlin plugin application + buildscript classpath (no nav graphs, 0 navigation classes in APK) [branch: DEBUG-v013]
2026-06-08 16:53:28 build.gradle.kts build S0385: drop unused navigation-safe-args-gradle-plugin buildscript classpath (root) [branch: DEBUG-v013]
2026-06-08 16:59:36 app_v2/src/main/res/drawable/ic_repeat.xml app_v2 S0385: delete 3 unused drawables (ic_image_placeholder, ic_repeat, splash_icon_empty) - 0 refs, not tied to any active ticket [branch: DEBUG-v013]
2026-06-08 17:01:08 CLAUDE.md spec-dev S0383: add Rule 20 (neuroslop avoidance) - 4 anti-patterns + assert-neuroslop gate ref [branch: DEBUG-v013]
2026-06-08 17:01:08 .claude/commands/spec-dev.md spec-dev S0383: neuroslop-avoidance constraint (Rule 20 ref) [branch: DEBUG-v013]
2026-06-08 17:01:08 .claude/commands/spec-tech.md spec-dev S0383: neuroslop-avoidance constraint for phase prompts (Rule 20 ref) [branch: DEBUG-v013]
2026-06-08 17:01:08 .claude/commands/skill-fix.md spec-dev S0383: neuroslop-avoidance in safety floor (Rule 20 ref) [branch: DEBUG-v013]
2026-06-08 17:01:08 .claude/commands/quick.md spec-dev S0383: NEUROSLOP callout (Rule 20 ref) [branch: DEBUG-v013]
2026-06-08 17:01:08 .claude/agents/android-kotlin-developer.md spec-dev S0383: strict coding rule 14 (neuroslop avoidance) [branch: DEBUG-v013]
2026-06-08 17:01:08 .claude/agents/android-rd-specialist.md spec-dev S0383: code-review rule 10 (neuroslop avoidance) [branch: DEBUG-v013]
2026-06-08 17:02:00 CLAUDE.md governance Add Strict Rule 21 - Dead-weight hygiene (remove dead code/artifacts that ship in APK/AAB; hunt native .so/assets/jar-resources/force-kept/flavor-mismatched deps; cross-check active tickets; dead applications too) [branch: DEBUG-v013]
2026-06-08 17:02:01 .claude/commands/spec-dev.md governance Add Dead-weight hygiene (Rule 21) constraint to spec-dev [branch: DEBUG-v013]
2026-06-08 17:02:01 .claude/commands/spec-check.md governance Add Dead-weight introduced (Rule 21) audit row to spec-check [branch: DEBUG-v013]
2026-06-08 17:07:34 PLAN/S0385_apk-aab-dead-weight-reduction.md spec-dev S0385 research §6.1 + §6.3 Resolved: ML/OCR surface enumerated (~37 files, 3 tiers, linchpin TranslationManager); anim shrink confirmed [branch: DEBUG-v013]
2026-06-08 17:07:34 PLAN/S0385_apk-aab-dead-weight-reduction/INDEX.md spec-dev S0385: tick §6.1 research blocker (resolved); owner sign-off remains for Phase 05 [branch: DEBUG-v013]
2026-06-08 17:15:06 PLAN/S0383_neuroslop-code-and-resource-hygiene.md spec-dev S0383: descope close - §2/§10 goals 2/3 deferred (detectors hold floors), goals 1/4/5 done [branch: DEBUG-v013]
2026-06-08 17:15:07 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_03__exception-handling.md spec-dev S0383 P03: deferred (descope); detector holds floor 75 [branch: DEBUG-v013]
2026-06-08 17:15:07 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_04__resource-dedup.md spec-dev S0383 P04: deferred (descope); detector holds floor 150 [branch: DEBUG-v013]
2026-06-08 17:15:07 PLAN/S0383_neuroslop-code-and-resource-hygiene/PHASE_07__docs-catalog-cleanup.md spec-dev S0383 P07: docs-catalog-cleanup done; funclog skipped (internal) [branch: DEBUG-v013]
2026-06-08 17:15:07 PLAN/S0383_neuroslop-code-and-resource-hygiene/INDEX.md spec-dev S0383: 5/7 done + 03/04 deferred; completion gate closed for descope [branch: DEBUG-v013]
2026-06-08 17:25:44 PLAN/S0386_ondemand-ocr-translation-delivery.md spec Add strategic spec S0386 - on-demand OCR/translation + audio-visualization delivery, self-hosted (GitHub); supersedes S0385 Phase 05 [branch: DEBUG-v013]
2026-06-08 17:27:04 PLAN/S0385_apk-aab-dead-weight-reduction/INDEX.md spec-dev S0385: Phase 05 superseded by S0386 (on-demand delivery); owner-sign-off blocker resolved as superseded [branch: DEBUG-v013]
2026-06-08 17:27:04 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_05__ml-ocr-flavor-confinement.md spec-dev S0385 Phase 05 marked Superseded by S0386 [branch: DEBUG-v013]
2026-06-08 17:27:04 PLAN/S0385_apk-aab-dead-weight-reduction.md spec-dev S0385 §10: link S0386 as superseding Phase 05 [branch: DEBUG-v013]
2026-06-08 17:29:18 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-dev S0386 refine: ordered source list per asset - vendor primary + our GitHub mirror auto-fallback when vendor link unresponsive; per-artifact source policy + scale/fair-use caveat [branch: DEBUG-v013]
2026-06-08 17:46:33 AGENTS.md rules Clean up AGENTS.md, make it concise and robot-readable [branch: DEBUG-v013]
2026-06-08 17:46:34 CLAUDE.md rules Optimize CLAUDE.md rules to save tokens [branch: DEBUG-v013]
2026-06-08 17:46:35 .github/copilot-instructions.md rules Optimize Copilot instructions to save tokens [branch: DEBUG-v013]
2026-06-08 17:46:58 AGENTS.md rules Clean up AGENTS.md, make it concise and robot-readable [branch: DEBUG-v013]
2026-06-08 17:47:01 CLAUDE.md rules Optimize CLAUDE.md rules to save tokens [branch: DEBUG-v013]
2026-06-08 17:47:04 .github/copilot-instructions.md rules Optimize Copilot instructions to save tokens [branch: DEBUG-v013]
2026-06-08 17:48:52 .claude/commands + .claude/agents + .github all-agents Token-economy pass: rewrote 35 rule/skill files (.claude/commands x26, .claude/agents x4, .github/agents x4, copilot-instructions) into terse-structured style; form compressed, all load-bearing meaning preserved, deletions only flagged not applied [branch: DEBUG-v013]
2026-06-08 19:57:27 PLAN/S0381_neuroslop-hygiene-hardening.md spec-arc Archive S0381 (neuroslop-hygiene-hardening) -> temp/done/ [branch: DEBUG-v013]
2026-06-08 19:59:10 .claude + .github (dedup/fixes) all-agents Apply approved removals A+C+D: in-file dedup in spec-dev/spec-tech/spec-sweep; drop duplicate ## Comments section + Safety/KDoc bullet; condense generic agent-memory boilerplate in android-rd-specialist (~half); fix stale Kotlin/Glide pins to CLAUDE.md source-of-truth in kotlin-dev agents + build.md; doc-update E1 legacy spec_ pattern -> Sxxxx_ slug [branch: DEBUG-v013]
2026-06-08 20:03:38 PLAN/S0385_apk-aab-dead-weight-reduction.md spec-dev S0385 closed -> Implemented: fast-wins + cleanups landed; Phase 05 -> S0386; 04.2/04.3/04.5 dropped; §2/§11 annotated [branch: DEBUG-v013]
2026-06-08 20:03:38 PLAN/S0385_apk-aab-dead-weight-reduction/INDEX.md spec-dev S0385 closure: Phase 04 Done (rest dropped), Phase 07 Done; 6/7 (05 superseded); status Implemented [branch: DEBUG-v013]
2026-06-08 20:03:38 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_04__keep-narrow-resource-shrink.md spec-dev S0385 Phase 04 closed: 04.2/04.3/04.5 dropped [branch: DEBUG-v013]
2026-06-08 20:03:38 PLAN/S0385_apk-aab-dead-weight-reduction/PHASE_07__docs-catalog-cleanup.md spec-dev S0385 Phase 07 done: size delta recorded, closure [branch: DEBUG-v013]
2026-06-08 20:03:39 temp/S0385_size_delta.md spec-dev S0385 final size-delta report [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md spec-tech Create tactical plan for S0386 (8 phases) [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_01__recognize-translate-facade-split.md spec-tech Phase 01: recognize/translate facade split [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_02__capability-contract-state.md spec-tech Phase 02: capability contract + state [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_03__default-off-migration.md spec-tech Phase 03: default OFF + migration [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_04__delivery-channel-core.md spec-tech Phase 04: delivery channel core [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_05__set-definitions-build-debundle.md spec-tech Phase 05: set definitions + build de-bundle [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_06__enable-intercept-ux.md spec-tech Phase 06: enable-intercept UX [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_07__attach-autorun.md spec-tech Phase 07: attach + auto-run [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_08__docs-catalog-cleanup.md spec-tech Phase 08: docs + catalog cleanup [branch: DEBUG-v013]
2026-06-08 21:23:00 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-tech Status Approved -> Tactical; tactical plan linked [branch: DEBUG-v013]
2026-06-08 22:09:03 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-tech B4 spike resolution (self-load ML Kit); add extensions-manager pillar/goal [branch: DEBUG-v013]
2026-06-08 22:09:03 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md spec-tech Resolve B4, add B4-PoC gate; add Phase 08 extensions, renumber docs to 09 [branch: DEBUG-v013]
2026-06-08 22:09:03 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_01__recognize-translate-facade-split.md spec-tech Handoff: ML Kit text-rec removed in Phase 05 [branch: DEBUG-v013]
2026-06-08 22:09:03 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_02__capability-contract-state.md spec-tech Add uninstall op to repository contract [branch: DEBUG-v013]
2026-06-08 22:09:03 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_05__set-definitions-build-debundle.md spec-tech Add B4-PoC gate; drop ML Kit text-rec; self-load translate [branch: DEBUG-v013]
2026-06-08 22:09:03 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_07__attach-autorun.md spec-tech Self-load pre-load technique for ML Kit Translate [branch: DEBUG-v013]
2026-06-08 22:09:03 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_08__extensions-manager-screen.md spec-tech New Phase 08: downloadable extensions manager screen [branch: DEBUG-v013]
2026-06-08 22:09:03 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_09__docs-catalog-cleanup.md spec-tech Docs/catalog cleanup renumbered to Phase 09 [branch: DEBUG-v013]
2026-06-09 01:08:13 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md spec-dev Pause: status -> BlockExternal; log resume conditions (B3, B4-PoC) + Phase 01 instance-split finding [branch: DEBUG-v013]
2026-06-09 01:08:13 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-dev Status In Progress -> BlockExternal (paused pending B3 host + B4-PoC device) [branch: DEBUG-v013]
2026-06-09 01:16:49 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-dev Close B1/B2: source mapping + SHA-256 app-pinned auth/versioning in 6.1 [branch: DEBUG-v013]
2026-06-09 01:16:49 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md spec-dev Tick B1/B2 blockers; log resolution [branch: DEBUG-v013]
2026-06-09 01:16:49 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_04__delivery-channel-core.md spec-dev Bake B1/B2 decisions into steps; phase now execution-ready [branch: DEBUG-v013]
2026-06-09 01:22:23 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_01__recognize-translate-facade-split.md spec-dev Revise Phase 01 to instance/factory split (no Hilt singleton binding) [branch: DEBUG-v013]
2026-06-09 01:25:04 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-dev B3 de-risk: all deliverable .so already 16KB-aligned, no rebuild [branch: DEBUG-v013]
2026-06-09 01:25:04 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md spec-dev Narrow B3 to extract+host; log Phase 01 revision + B3 staging [branch: DEBUG-v013]
2026-06-09 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt Cast init Defer Cast SDK init to player open (remove eager CastContext.getSharedInstance in Application.onCreate): faster cold start, no dynamite load on non-player sessions, avoids GMS SIG 9 process restart [branch: DEBUG-v013]
2026-06-09 01:35:13 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-dev B3 OSS .so hosted (delivery-so-v1), verified; ML Kit pending licensing [branch: DEBUG-v013]
2026-06-09 01:35:13 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md spec-dev B3 partial: OSS sets hosted+verified; ML Kit licensing pending [branch: DEBUG-v013]
2026-06-09 01:40:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt app_v2 Fix: tapping the resource card icon for non-library resources now opens the resource in Browse (same as the card body) instead of being swallowed; setOnClickListener(null) had left the icon clickable with no handler [branch: DEBUG-v013]
2026-06-09 01:43:35 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-dev Set A finalized: Play dynamic-feature (store) + bundled (sideload/VR); drop self-load; status -> Tactical [branch: DEBUG-v013]
2026-06-09 01:43:35 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md spec-dev Close B4-PoC (obsolete); lift to Tactical; blockers cleared [branch: DEBUG-v013]
2026-06-09 01:43:35 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_05__set-definitions-build-debundle.md spec-dev ML Kit Translate via dynamic-feature (store) / bundled (sideload); update strip verify [branch: DEBUG-v013]
2026-06-09 01:43:35 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_07__attach-autorun.md spec-dev Translation attach via SplitInstall (store) / bundled (sideload); drop self-load [branch: DEBUG-v013]
2026-06-09 01:43:35 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_01__recognize-translate-facade-split.md spec-dev Handoff note: dynamic-feature/bundled split for translate [branch: DEBUG-v013]
2026-06-09 02:06:18 app_v2/src/main/res/layout/fragment_settings_playback.xml Playback settings - Camera/Mic/Video capture blocks Removed ‘Camera photos’ / ‘Video recording’ section headers and the camera permission note; placed each destination value + ‘Select resource’ button on one row with the button sized to its text (portrait + landscape); destination picker now lists only recipient resources (real folder), excluding predefined/virtual resources like ‘all files’. [branch: DEBUG-v013]
2026-06-09 02:16:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextTranslationFacade.kt spec-dev S0386 P01.2: translation facade interface [branch: DEBUG-v013]
2026-06-09 02:16:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextRecognizationFacade.kt spec-dev S0386 P01.2: recognition facade interface [branch: DEBUG-v013]
2026-06-09 02:16:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationBackend.kt spec-dev S0386 P01.3: ML Kit translate/language-id backend [branch: DEBUG-v013]
2026-06-09 02:16:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt spec-dev S0386 P01.3: ML Kit/offline OCR backend [branch: DEBUG-v013]
2026-06-09 02:16:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt spec-dev S0386 P01.4: reduce to coordinator exposing recognition/translation facades [branch: DEBUG-v013]
2026-06-09 02:16:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageOcrManager.kt spec-dev S0386 P01.5: OCR via recognition facade [branch: DEBUG-v013]
2026-06-09 02:34:49 index.html Feature Explorer Implemented S0387 dashboard variants on landing page [branch: DEBUG-v013]
2026-06-09 02:34:51 index-ru.html Feature Explorer Implemented Russian localization of S0387 dashboard variants [branch: DEBUG-v013]
2026-06-09 02:34:51 index-uk.html Feature Explorer Implemented Ukrainian localization of S0387 dashboard variants [branch: DEBUG-v013]
2026-06-09 02:34:51 styles.css Feature Explorer Styles Added dashboard layout variants styling [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/DeliverableSet.kt spec-dev S0386 P02.1: deliverable set enum [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/DeliverableCapability.kt spec-dev S0386 P02.1: capability state enum [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/DeliverableCapabilityRepository.kt spec-dev S0386 P02.2: capability repository contract [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/BundledDeliverableSets.kt spec-dev S0386 P02.2: bundled-sets seam (flavor-refined in P05) [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/InstalledSetMarkerStore.kt spec-dev S0386 P02.3: persistent install marker + payload dir (filesDir) [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableCapabilityRepositoryImpl.kt spec-dev S0386 P02.4: capability repository impl [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DefaultBundledDeliverableSets.kt spec-dev S0386 P02.4: default bundled-sets (all bundled pre-strip) [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/di/DeliveryModule.kt spec-dev S0386 P02.4: Hilt bindings for delivery contract [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt spec-dev S0386 P02.5: gate OCR on OCR_ENGINES capability [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationBackend.kt spec-dev S0386 P02.5: gate translate on TRANSLATION capability [branch: DEBUG-v013]
2026-06-09 02:38:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationManager.kt spec-dev S0386 P02.5: EntryPoint + pass capability repo to backends [branch: DEBUG-v013]
2026-06-09 02:44:48 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt S0355 Remove S0355 debug verification tag on transition out of BlockNeedUserTest (status -> Verified; device-test passed via log 2026-06-08) [branch: DEBUG-v013]
2026-06-09 02:46:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0386 P03.1: enableTranslation/enableOcr default OFF [branch: DEBUG-v013]
2026-06-09 02:46:51 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/TextRecognitionSettingsStore.kt spec-dev S0386 P03.1: read fallback default OFF (preserve persisted) [branch: DEBUG-v013]
2026-06-09 02:46:51 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0386 P03.2: all profile presets OCR/translation OFF [branch: DEBUG-v013]
2026-06-09 03:19:25 docs/FEATURES.md Features List Pruned canonical features list to ~35 key features [branch: DEBUG-v013]
2026-06-09 03:19:26 docs/HOW_TO.md Scenario Guides Added 4 new usage scenarios: smart widgets, OpenXR VR cinema, scientific calculator, cloud Markdown notes [branch: DEBUG-v013]
2026-06-09 03:19:26 docs/howto/index.md Guides Index Added quick links and table entries for the 4 new scenarios [branch: DEBUG-v013]
2026-06-09 03:19:26 index.html Landing Pages Added scenario cards and updated JavaScript filters/links mappings for 4 new scenarios [branch: DEBUG-v013]
2026-06-09 10:09:53 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/DeliverableSourceDescriptor.kt spec-dev S0386 Phase 04.1: deliverable source descriptor (per-set payload, ordered sources, app-pinned SHA-256/minSize) [branch: DEBUG-v013]
2026-06-09 10:13:04 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveryManifestDataSource.kt spec-dev S0386 Phase 04.2: version-keyed delivery manifest data source (URL overrides over bundled descriptor, integrity anchors stay bundled) [branch: DEBUG-v013]
2026-06-09 10:13:40 PLAN/S0388_cloud-apk-classify-disk-footprint.md spec-all S0388 strategic spec approved: resolved §6 (transient/stop-for-session/silent), Draft->Approved [branch: DEBUG-v013]
2026-06-09 10:14:44 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/PayloadIntegrityVerifier.kt spec-dev S0386 Phase 04.3: payload integrity verifier (app-pinned SHA-256 + min-size, typed result, ADR-3) [branch: DEBUG-v013]
2026-06-09 10:17:49 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/DeliverableSetDownloader.kt spec-dev S0386 Phase 04.4: deliverable-set downloader contract + DownloadProgress states [branch: DEBUG-v013]
2026-06-09 10:17:58 PLAN/S0388_cloud-apk-classify-disk-footprint/INDEX.md spec-all S0388 tactical plan: 4 phases (shared move, transient resolver, cache stop, build/docs/probe) [branch: DEBUG-v013]
2026-06-09 10:18:41 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/RealDeliverableSetDownloader.kt spec-dev S0386 Phase 04.4: real downloader with ordered-source failover, staging, verify, atomic promote [branch: DEBUG-v013]
2026-06-09 10:20:41 app_v2/src/main/java/com/sza/fastmediasorter/di/DeliveryModule.kt spec-dev S0386 Phase 04.5: bind RealDeliverableSetDownloader + bundled-descriptor map provider [branch: DEBUG-v013]
2026-06-09 10:23:47 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/CloudFileOperationHandler.kt spec-dev S0388 Ph01: cloud->local transfer uses move (renameTo) not copy + cross-volume fallback + truncated-dest cleanup [branch: DEBUG-v013]
2026-06-09 10:23:47 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkArchiveResolver.kt spec-dev S0388 Ph02: transient cloud APK copy (no persistent disk cache), size validation, out-of-space detection, one-time stale purge; VrArchiveResolution type [branch: DEBUG-v013]
2026-06-09 10:23:47 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkClassificationCache.kt spec-dev S0388 Ph03: delete transient copy after classify; session-stop flag ends ENOSPC retry cascade [branch: DEBUG-v013]
2026-06-09 10:23:47 app_v2/src/testNoLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkClassificationCacheTest.kt spec-dev S0388 Ph03: update mock to VrArchiveResolution.Available; add OutOfSpace session-stop test [branch: DEBUG-v013]
2026-06-09 10:30:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/DeliveryPromptViewModel.kt spec-dev S0386 Phase 06.1: delivery prompt ViewModel (offer/download/verify/success/error/refused state machine) [branch: DEBUG-v013]
2026-06-09 10:34:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/DeliveryPromptDialogFragment.kt spec-dev S0386 Phase 06.2: delivery prompt dialog fragment [branch: DEBUG-v013]
2026-06-09 10:35:00 app_v2/src/main/res/layout/dialog_delivery_prompt.xml spec-dev S0386 Phase 06.2: delivery prompt portrait layout [branch: DEBUG-v013]
2026-06-09 10:35:08 app_v2/src/main/res/layout-land/dialog_delivery_prompt.xml spec-dev S0386 Phase 06.2: delivery prompt landscape layout [branch: DEBUG-v013]
2026-06-09 10:38:06 app_v2/src/main/res/values/strings.xml spec-dev S0386 Phase 06.3: delivery_* prompt strings (EN) [branch: DEBUG-v013]
2026-06-09 10:38:13 app_v2/src/main/res/values-ru/strings.xml spec-dev S0386 Phase 06.3: delivery_* prompt strings (RU) [branch: DEBUG-v013]
2026-06-09 10:38:20 app_v2/src/main/res/values-uk/strings.xml spec-dev S0386 Phase 06.3: delivery_* prompt strings (UK) [branch: DEBUG-v013]
2026-06-09 10:38:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/DeliveryPromptDialogFragment.kt spec-dev S0386 Phase 06.3: de-interpolate error headline per COMMUNICATION_POLICY 2.2 [branch: DEBUG-v013]
2026-06-09 10:40:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/DeliveryEnableInterceptor.kt spec-dev S0386 Phase 06.4: delivery enable interceptor (gate enable points, show prompt when not installed) [branch: DEBUG-v013]
2026-06-09 10:50:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/DeliveryEnableInterceptor.kt spec-dev S0386 Phase 06.5: FragmentActivity overload + co-located EntryPoint [branch: DEBUG-v013]
2026-06-09 10:50:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt spec-dev S0386 Phase 06.5: gate OCR/translation toggles through interceptor [branch: DEBUG-v013]
2026-06-09 10:51:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationButtonManager.kt spec-dev S0386 Phase 06.5: gate translate-settings OK through interceptor [branch: DEBUG-v013]
2026-06-09 10:52:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt spec-dev S0386 Phase 06.5: gate camera-OCR capture through interceptor [branch: DEBUG-v013]
2026-06-09 10:58:06 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/DeliverableSetContributor.kt spec-dev S0386 Phase 05.1: deliverable-set contributor extension point [branch: DEBUG-v013]
2026-06-09 10:58:52 app_v2/src/main/java/com/sza/fastmediasorter/di/DeliverableSetContributorModule.kt spec-dev S0386 Phase 05.1: @Multibinds contributor set module [branch: DEBUG-v013]
2026-06-09 10:59:38 app_v2/src/main/java/com/sza/fastmediasorter/di/DeliveryModule.kt spec-dev S0386 Phase 05.1: merge contributors into bundled-descriptor map [branch: DEBUG-v013]
2026-06-09 11:39:48 PLAN/S0386_ondemand-ocr-translation-delivery.md spec-dev S0386: phases 04/06/05.1 implemented (build-green, inert); debundle core 05.2-07 paused -> BlockExternal pending /spec-tech refine + release/device/hosting [branch: DEBUG-v013]
2026-06-09 11:49:01 index.html,index-ru.html,index-uk.html feature-explorer keyFeatures/hiddenFeatureTitles S0387: reconcile stale curation arrays with current FEATURES titles across EN/RU/UK so Variant 1 major cards and Variant 3 Highlights render (keyFeatures 14/14 matched, dead hiddenFeatureTitles emptied) [branch: DEBUG-v013]
2026-06-09 11:54:00 index-uk.html feature-explorer categoryMapping S0387: fix 4 UK categoryMapping keys (cat 4/7/9/14) that diverged from FEATURES_UK.md headings and silently dropped audio/slideshow/video/destination features into the default Setup group in Variant 1 [branch: DEBUG-v013]
2026-06-09 12:21:58 translate_feature/build.gradle.kts standard build validation Removed duplicate dynamic-feature flavor wiring that was breaking Gradle variant resolution. [branch: DEBUG-v013]
2026-06-09 12:21:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt standard unit test build Removed stale override from recognizeAndTranslateBlocks after OCR facade split. [branch: DEBUG-v013]
2026-06-09 12:21:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt standard unit test build Guarded optional Extensions Manager binding with a nullable-safe click listener. [branch: DEBUG-v013]
2026-06-09 12:21:59 app_v2/src/standard/java/com/sza/fastmediasorter/delivery/DynamicTextTranslationFacadeFactory.kt standard unit test build Imported the no-op translation facade used when the dynamic feature is unavailable. [branch: DEBUG-v013]
2026-06-09 12:21:59 app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/SettingsActivityStateTest.kt settings restore regression test Moved the test to Robolectric so Intent extras work in JVM tests. [branch: DEBUG-v013]
2026-06-09 12:25:15 translate_feature/src/main/AndroidManifest.xml translate_feature debug assemble Reused the base translation module title resource in the dynamic-feature manifest to fix missing resource linking. [branch: DEBUG-v013]
2026-06-09 12:45:36 index.html,index-ru.html,index-uk.html feature-explorer scenarioFeatureMap S0387: replace broken Variant 4 scenario filter (url-substring match left most scenarios empty) with explicit scenario-to-feature-title map; each of 16 scenarios now yields 3-4 features across EN/RU/UK [branch: DEBUG-v013]
2026-06-09 12:45:37 index-uk.html scenario-cards section S0387: repair pre-existing UK structural corruption - restore truncated OCR/NAS scenario cards, drop duplicate Chromecast card, fix scrambled card order, replace U+FFFD char, add missing body/html close [branch: DEBUG-v013]
2026-06-09 12:45:52 app_v2/build.gradle.kts S0386 Restore bundled native payloads until S0386 delivery descriptors and ABI-complete hosting are ready [branch: DEBUG-v013]
2026-06-09 12:45:53 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredNativeLibraryLoader.kt S0386 Skip filesDir native loading when a deliverable set is still bundled in the base build [branch: DEBUG-v013]
2026-06-09 12:45:53 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredAudioVisualizationSource.kt S0386 Materialize bundled audio background videos into filesDir when on-demand payload is absent [branch: DEBUG-v013]
2026-06-09 12:45:53 app_v2/src/main/res/raw/anim_audio_bg_1.mp4 S0386 Restore bundled audio visualization video for inert S0386 fallback path [branch: DEBUG-v013]
2026-06-09 12:45:54 app_v2/src/main/res/raw/anim_audio_bg_2.mp4 S0386 Restore bundled audio visualization video for inert S0386 fallback path [branch: DEBUG-v013]
2026-06-09 12:45:54 app_v2/src/main/res/raw/anim_audio_bg_3.mp4 S0386 Restore bundled audio visualization video for inert S0386 fallback path [branch: DEBUG-v013]
2026-06-09 12:45:54 app_v2/src/main/res/raw/anim_audio_bg_4.mp4 S0386 Restore bundled audio visualization video for inert S0386 fallback path [branch: DEBUG-v013]
2026-06-09 12:45:54 app_v2/src/main/res/raw/anim_audio_bg_5.mp4 S0386 Restore bundled audio visualization video for inert S0386 fallback path [branch: DEBUG-v013]
2026-06-09 12:46:58 scripts/spec_catalog/_lib.ps1 spec-catalog Sync-SpecHeaderStatus: add StatusNote param - upsert/clear Status note: header line [branch: DEBUG-v013]
2026-06-09 12:46:58 scripts/spec_catalog/update.ps1 spec-catalog Add -StatusNote param; store statusNote in JSONL; auto-clear on Block* -> non-Block* transition [branch: DEBUG-v013]
2026-06-09 12:46:59 scripts/spec_catalog/close-and-log.ps1 spec-catalog Add -StatusNote param, pass through to update.ps1 [branch: DEBUG-v013]
2026-06-09 12:46:59 CLAUDE.md spec-catalog Rule §4: Block* transitions must supply -StatusNote [branch: DEBUG-v013]
2026-06-09 12:46:59 .claude/commands/spec-dev.md spec-catalog Mandate -StatusNote on Block* status transitions [branch: DEBUG-v013]
2026-06-09 12:46:59 .claude/commands/spec-tech.md spec-catalog Mandate -StatusNote on Block* status transitions [branch: DEBUG-v013]
2026-06-09 13:08:04 app_v2/build.gradle.kts S0386 Move store translation runtime to a shared dynamic-feature source set and remove standard ML Kit Translate from the base APK [branch: DEBUG-v013]
2026-06-09 13:08:04 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/BundledDeliverableSetContributor.kt S0386 Add flavor-scoped contributor contract for bundled deliverable sets [branch: DEBUG-v013]
2026-06-09 13:08:05 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/ContributedBundledDeliverableSets.kt S0386 Merge flavor bundled-set contributors into the runtime bundled-state contract [branch: DEBUG-v013]
2026-06-09 13:08:05 app_v2/src/main/java/com/sza/fastmediasorter/di/BundledDeliverableSetContributorModule.kt S0386 Declare multibinding for flavor bundled deliverable set contributors [branch: DEBUG-v013]
2026-06-09 13:08:05 app_v2/src/main/java/com/sza/fastmediasorter/di/DeliveryModule.kt S0386 Bind contributor-driven bundled deliverable state instead of the legacy all-bundled default [branch: DEBUG-v013]
2026-06-09 13:08:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationTextUtils.kt S0386 Remove ML Kit translation constants from src/main helper code [branch: DEBUG-v013]
2026-06-09 13:08:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerControlsSetupManager.kt S0386 Replace direct ML Kit translation fallback constant with string-code mapper in src/main [branch: DEBUG-v013]
2026-06-09 13:08:06 app_v2/src/translationDynamicFeature/java/com/sza/fastmediasorter/delivery/DynamicTextTranslationFacadeFactory.kt S0386 Share store dynamic translation facade factory between standard and legacy flavors [branch: DEBUG-v013]
2026-06-09 13:08:07 app_v2/src/translationDynamicFeature/java/com/sza/fastmediasorter/delivery/DynamicTranslationModelPrewarmer.kt S0386 Share store dynamic translation prewarmer between standard and legacy flavors [branch: DEBUG-v013]
2026-06-09 13:08:07 app_v2/src/standard/java/com/sza/fastmediasorter/di/StandardBundledDeliverableSetsModule.kt S0386 Declare the bundled deliverable sets that remain in the standard base build [branch: DEBUG-v013]
2026-06-09 13:08:07 app_v2/src/legacy/java/com/sza/fastmediasorter/di/LegacyBundledDeliverableSetsModule.kt S0386 Declare the bundled deliverable sets that remain in the legacy base build [branch: DEBUG-v013]
2026-06-09 13:08:08 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalBundledDeliverableSetsModule.kt S0386 Declare the bundled deliverable sets that remain in the noLegal base build [branch: DEBUG-v013]
2026-06-09 13:08:08 app_v2/src/vrOnly/java/com/sza/fastmediasorter/di/VrBundledDeliverableSetsModule.kt S0386 Declare the bundled deliverable sets that remain in the VR base build [branch: DEBUG-v013]
2026-06-09 13:08:08 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DefaultBundledDeliverableSets.kt S0386 Delete the obsolete all-bundled default deliverable state implementation [branch: DEBUG-v013]
2026-06-09 13:08:08 app_v2/src/standard/java/com/sza/fastmediasorter/delivery/DynamicTextTranslationFacadeFactory.kt S0386 Delete the standard-only copy after moving store dynamic translation runtime into a shared source set [branch: DEBUG-v013]
2026-06-09 13:08:09 app_v2/src/standard/java/com/sza/fastmediasorter/delivery/DynamicTranslationModelPrewarmer.kt S0386 Delete the standard-only copy after moving store dynamic translation runtime into a shared source set [branch: DEBUG-v013]
2026-06-09 13:09:52 PLAN/S0386_ondemand-ocr-translation-delivery.md S0386 Record that S0386 step 05.2 is complete and that store translation now ships via dynamic feature [branch: DEBUG-v013]
2026-06-09 13:09:52 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md S0386 Update tactical progress to reflect completed S0386 step 05.2 and remaining external block scope [branch: DEBUG-v013]
2026-06-09 13:09:53 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_05__set-definitions-build-debundle.md S0386 Mark S0386 phase 05 step 05.2 done and update execution notes to the current blocker boundary [branch: DEBUG-v013]
2026-06-09 14:14:00 index-ru.html page tail / footer / Resources-and-Legal S0387: reconstruct truncated RU page tail - restore roadmap card end, Resources and Legal section (GitHub/Privacy/Terms cards), footer with Privacy/Terms links, and header canvas animation script; RU now at structural parity with EN/UK (article 31/31) [branch: DEBUG-v013]
2026-06-09 14:20:40 PLAN/S0386_ondemand-ocr-translation-delivery.md S0386 Document S0386 handoff: narrow 05.3 to Tesseract Set B and update blocker wording [branch: DEBUG-v013]
2026-06-09 14:20:40 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md S0386 Document S0386 tactical handoff for 05.3 and remove stale blocker notes [branch: DEBUG-v013]
2026-06-09 14:20:40 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_05__set-definitions-build-debundle.md S0386 Document S0386 Phase 05.3 audit, local Tesseract constraint, and next-agent handoff [branch: DEBUG-v013]
2026-06-09 14:21:27 PLAN/S0386_ondemand-ocr-translation-delivery/INDEX.md S0386 Refine S0386 blocker log after 05.3 handoff cleanup [branch: DEBUG-v013]
2026-06-09 14:21:27 PLAN/S0386_ondemand-ocr-translation-delivery/PHASE_05__set-definitions-build-debundle.md S0386 Refine S0386 Phase 05 handoff wording for remaining 05.3 Tesseract scope [branch: DEBUG-v013]
2026-06-09 15:17:19 translate_feature/build.gradle.kts translate_feature S0386: add kotlinx-coroutines-play-services 1.7.3 so the dynamic-feature module compiles the shared translationMlKit source set (Task.await); fixes a broken tree. [branch: DEBUG-v013]
2026-06-09 15:17:19 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryImpl.kt DeliverableInventoryImpl S0386 Phase 08: row status reacts to repo state + live download via combine; module sizes sourced from descriptor with pinned estimate fallback; unified item keys. [branch: DEBUG-v013]
2026-06-09 15:17:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/ExtensionsManagerFragment.kt ExtensionsManagerFragment S0386 Phase 08: status-tag colors from @color resources + ColorUtils (no inline hex); add MaterialAlertDialog delete confirmation. [branch: DEBUG-v013]
2026-06-09 15:17:19 app_v2/src/main/res/layout-land/fragment_extensions_manager.xml fragment_extensions_manager-land S0386 Phase 08: new landscape layout for the Extensions Manager screen (Rule 11). [branch: DEBUG-v013]
2026-06-09 15:17:19 app_v2/src/main/res/layout-land/fragment_settings_other.xml fragment_settings_other-land S0386 Phase 08: add Extensions Manager settings entry to the landscape settings layout (Rule 11 counterpart). [branch: DEBUG-v013]
2026-06-09 15:17:19 app_v2/src/main/res/values/colors.xml colors S0386 Phase 08: add ext_status_available + ext_status_downloading status colors for the extensions screen. [branch: DEBUG-v013]
2026-06-09 15:17:19 app_v2/src/main/res/values/strings.xml strings-EN-RU-UK S0386 Phase 08: add ext_delete_confirm_title and ext_delete_confirm_message in EN/RU/UK. [branch: DEBUG-v013]
2026-06-09 15:27:11 PLAN/S0389_standalone-player-parity.md spec Add strategic spec S0389 for standalone player parity and Open-in-FMS routing [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity/INDEX.md spec-tech Create tactical plan for S0389 [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity/PHASE_01__capability-contract.md spec-tech Phase 01: capability-contract [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity/PHASE_02__local-path-resolution.md spec-tech Phase 02: local-path-resolution [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity/PHASE_03__standalone-folder-paging.md spec-tech Phase 03: standalone-folder-paging [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity/PHASE_04__command-panel-parity.md spec-tech Phase 04: command-panel-parity [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity/PHASE_05__open-in-fms-resolver.md spec-tech Phase 05: open-in-fms-resolver [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity/PHASE_06__open-in-fms-routing.md spec-tech Phase 06: open-in-fms-routing [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-09 16:47:14 PLAN/S0389_standalone-player-parity.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-09 16:50:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone S0380 Remove S0380 BlockNeedUserTest debug tags on close (6 tags across standalone hosts + PdfViewerManager + dispatcher) [branch: DEBUG-v013]
2026-06-09 16:51:32 PLAN/S0380_split-standalone-player.md spec-arc Archive S0380 (split-standalone-player) -> temp/done/ after Verified [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0082_chromeos-support.md spec-arc Archive S0082 (chromeos-support) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0236_cloud-path-legacy-format-fix.md spec-arc Archive S0236 (cloud-path-legacy-format-fix) -> temp/done/; removed S0236 debug tag from CloudMediaScanner.kt [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0243_cloud-auth-result-channel.md spec-arc Archive S0243 (cloud-auth-result-channel) -> temp/done/; removed S0243 debug tags from UnifiedCloudAuthManager/OneDriveAuthPlugin/GoogleDriveAuthPlugin/DropboxAuthPlugin.kt [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0281_link-auth-skip-google-domains.md spec-arc Archive S0281 (link-auth-skip-google-domains) -> temp/done/; removed S0281 debug tags from ReceiveShareActivity.kt [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0293_bugfix-multi-window-discoverability.md spec-arc Archive S0293 (bugfix-multi-window-discoverability) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0299_office-document-viewing-legal-routing.md spec-arc Archive S0299 (office-document-viewing-legal-routing) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0301_nolegal-office-document-embedded-renderer.md spec-arc Archive S0301 (nolegal-office-document-embedded-renderer) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0303_telegram-integration.md spec-arc Archive S0303 (telegram-integration) -> temp/done/; removed S0303 debug tags from TelegramExtractionStrategy/PlayerShareManager/BrowseShareOperationsHelper.kt [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0304_office-document-settings-parity.md spec-arc Archive S0304 (office-document-settings-parity) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0305_mid-audio-playback-support.md spec-arc Archive S0305 (mid-audio-playback-support) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:55:55 PLAN/S0306_thematic-string-resource-files.md spec-arc Archive S0306 (thematic-string-resource-files) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:56:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlayerHostCapabilities.kt spec-dev S0389 Phase 01: add supportsFolderPaging + supportsTypeSpecificActions capability flags [branch: DEBUG-v013]
2026-06-09 16:57:24 PLAN/S0309_rethink-docs-and-landing.md spec-arc Archive S0309 (rethink-docs-and-landing) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:57:24 PLAN/S0318_playback-other-functionality-group.md spec-arc Archive S0318 (playback-other-functionality-group) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:57:24 PLAN/S0319_main-window-dropdown-menu-button.md spec-arc Archive S0319 (main-window-dropdown-menu-button) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:57:24 PLAN/S0320_camera-ocr-translate.md spec-arc Archive S0320 (camera-ocr-translate) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 16:57:24 PLAN/S0321_text-editor-calculator-integration.md spec-arc Archive S0321 (text-editor-calculator-integration) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 17:07:38 PLAN/S0297_nolegal-vr-capability-research.md spec-arc Archive S0297 (nolegal-vr-capability-research) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 17:07:38 PLAN/S0325_browse-filter-doc-types-reset.md spec-arc Archive S0325 (browse-filter-doc-types-reset) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 17:07:38 PLAN/S0332_max-translation-ocr-languages.md spec-arc Archive S0332 (max-translation-ocr-languages) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 17:07:38 PLAN/S0334_translation-model-prewarm.md spec-arc Archive S0334 (translation-model-prewarm) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 17:07:38 PLAN/S0337_system-info-extended-fields.md spec-arc Archive S0337 (system-info-extended-fields) -> temp/done/; removed S0337 debug tag from GeneralSettingsLogHelper.kt [branch: DEBUG-v013]
2026-06-09 17:07:38 PLAN/S0338_camera-ocr-crop-region.md spec-arc Archive S0338 (camera-ocr-crop-region) -> temp/done/; removed S0338 debug tags from CameraOcrFlowManager/CameraOcrTranslateActivity.kt [branch: DEBUG-v013]
2026-06-09 17:11:04 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveLocalPathFromUriUseCase.kt spec-dev S0389 Phase 02: add ResolveLocalPathFromUriUseCase (URI -> local path/parent or NotLocal) [branch: DEBUG-v013]
2026-06-09 17:12:07 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ResolveLocalPathFromUriUseCaseTest.kt spec-dev S0389 Phase 02: unit tests for ResolveLocalPathFromUriUseCase [branch: DEBUG-v013]
2026-06-09 17:14:02 app_v2/src/noLegal/java/com/sza/fastmediasorter/diagnostics/NoLegalDiagnosticsCollectors.kt noLegal System Info diagnostics S0336: add 22 fast-win diagnostic fields (verified boot/build tags/uptime, POST_NOTIFICATIONS+battery-opt+accessibility, app version/target SDK/install times, ABIs+WebView, external storage+removable volumes, transport/private DNS/metered, CPU/RAM/thermal); relabel /cache to App cache [branch: DEBUG-v013]
2026-06-09 17:24:43 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDescriptorCatalog.kt DeliverableDescriptorCatalog S0386 Set C: app-pinned download descriptors (URLs + SHA-256 + minSize) for OSS deliverable sets; audioVisualizations() points at the GitHub mirror. [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredAudioVisualizationSource.kt DeliveredAudioVisualizationSource S0386 Set C: delivered-only - removed R.raw bundled fallback + materializeBundledVideos; reads videos from filesDir/delivery only. [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/standard/java/com/sza/fastmediasorter/di/StandardBundledDeliverableSetsModule.kt StandardBundledDeliverableSetsModule S0386 Set C: drop AUDIO_VISUALIZATIONS from bundledSets + contribute its download descriptor (standard). [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/legacy/java/com/sza/fastmediasorter/di/LegacyBundledDeliverableSetsModule.kt LegacyBundledDeliverableSetsModule S0386 Set C: drop AUDIO_VISUALIZATIONS from bundledSets + contribute its download descriptor (legacy). [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalBundledDeliverableSetsModule.kt NoLegalBundledDeliverableSetsModule S0386 Set C: drop AUDIO_VISUALIZATIONS from bundledSets + contribute its download descriptor (noLegal). [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/vrOnly/java/com/sza/fastmediasorter/di/VrBundledDeliverableSetsModule.kt VrBundledDeliverableSetsModule S0386 Set C: drop AUDIO_VISUALIZATIONS from bundledSets + contribute its download descriptor (vr). [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/main/res/raw/anim_audio_bg_1.mp4 res-raw-anim_audio_bg S0386 Set C: remove the 5 audio-visualization mp4 (~6.3 MB) from the base; now delivered on demand from the GitHub mirror. [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/standard/AndroidManifest.xml standard-AndroidManifest S0386 fix: standard base was DOA - remove dangling ML Kit MlKitInitProvider + MlKitComponentDiscoveryService (classes live in the on-demand translate_feature module). [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/legacy/AndroidManifest.xml legacy-AndroidManifest S0386 fix: same dynamic-feature ML Kit provider/service removal as standard so the legacy base does not crash on launch. [branch: DEBUG-v013]
2026-06-09 17:24:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt OtherMediaSettingsFragment S0386 fix: Extensions Manager nav used the ViewPager child FM (no android.R.id.content) and crashed; use the activity FragmentManager. [branch: DEBUG-v013]
2026-06-09 17:33:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/StandaloneFolderPagingManager.kt spec-dev S0389 Phase 03: new folder-neighbour paging manager [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/StandalonePagingControlsBinder.kt spec-dev S0389 Phase 03: new shared paging controls binder [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt spec-dev S0389 Phase 03: wire folder paging + slideshow state [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0389 Phase 03: surface paging controls + capability override + keyboard nav [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PhotoVideoStandaloneKeyboardManager.kt spec-dev S0389 Phase 03: activate next/prev/slideshow keyboard callbacks [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-dev S0389 Phase 03: surface paging controls + capability override [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0389 Phase 03: surface paging controls via VM state [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-dev S0389 Phase 03: surface paging controls via VM state [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModelTest.kt spec-dev S0389 Phase 03: update constructor for new VM deps [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/res/layout/activity_standalone_photo_video.xml spec-dev S0389 Phase 03: add paging button group [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/res/layout/activity_standalone_audio.xml spec-dev S0389 Phase 03: add paging button group [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/res/layout/activity_standalone_document.xml spec-dev S0389 Phase 03: add paging button group [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/res/layout/activity_standalone_text.xml spec-dev S0389 Phase 03: add paging button group [branch: DEBUG-v013]
2026-06-09 17:33:35 app_v2/src/main/res/values/strings.xml spec-dev S0389 Phase 03: add slideshow_stop key (EN/RU/UK) [branch: DEBUG-v013]
2026-06-09 22:25:45 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/ResourceDao.kt spec-dev S0389 Phase 05-06: add getLocalResourceByPathSync read-query [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/ResourceRepository.kt spec-dev S0389 Phase 05-06: add getLocalResourceByPath [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt spec-dev S0389 Phase 05-06: implement getLocalResourceByPath [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeResourceRepository.kt spec-dev S0389 Phase 05-06: override getLocalResourceByPath [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/SendResourcesToWatchUseCaseTest.kt spec-dev S0389 Phase 05-06: override getLocalResourceByPath in local fake [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveOpenInFmsTargetUseCase.kt spec-dev S0389 Phase 05-06: new Open-in-FMS resource resolver chain [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ResolveOpenInFmsTargetUseCaseTest.kt spec-dev S0389 Phase 05-06: unit tests for resolver chain [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-dev S0389 Phase 05-06: route openInFms to in-app player via resolver [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt spec-dev S0389 Phase 05-06: remove orphaned findResourceForPath + resourceRepository [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModelTest.kt spec-dev S0389 Phase 05-06: drop removed resourceRepository arg [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0389 Phase 05-06: inject + pass ResolveOpenInFmsTargetUseCase [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0389 Phase 05-06: inject + pass ResolveOpenInFmsTargetUseCase [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-dev S0389 Phase 05-06: inject + pass ResolveOpenInFmsTargetUseCase [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-dev S0389 Phase 05-06: inject + pass ResolveOpenInFmsTargetUseCase [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0389 Phase 05-06: inject + pass ResolveOpenInFmsTargetUseCase [branch: DEBUG-v013]
2026-06-09 22:25:46 app_v2/src/main/res/values/strings.xml spec-dev S0389 Phase 05-06: add open_in_fms_external_file_notice (EN/RU/UK) [branch: DEBUG-v013]
2026-06-09 22:30:51 PLAN/S0390_standalone-command-panel-parity.md spec Add follow-up spec S0390 (standalone command-panel parity) split from S0389 Phase 04 [branch: DEBUG-v013]
2026-06-09 22:33:26 docs/FEATURES.md spec-dev S0389 Phase 07: add External file viewing feature (EN) [branch: DEBUG-v013]
2026-06-09 22:33:26 docs/FEATURES_RU.md spec-dev S0389 Phase 07: add External file viewing feature (RU) [branch: DEBUG-v013]
2026-06-09 22:33:26 docs/FEATURES_UK.md spec-dev S0389 Phase 07: add External file viewing feature (UK) [branch: DEBUG-v013]
2026-06-09 23:17:23 PLAN/S0370_browse-filter-large-icon-actions.md spec-arc Archive S0370 (browse-filter-large-icon-actions) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:17:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt spec-arc Remove S0370 BlockNeedUserTest probe tag on archive [branch: DEBUG-v013]
2026-06-09 23:19:27 PLAN/S0369_widget-camera-capture-target-resource.md spec-arc Archive S0369 (widget-camera-capture-target-resource) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:19:27 PLAN/S0367_playback-camera-microphone-settings-grouping.md spec-arc Archive S0367 (playback-camera-microphone-settings-grouping) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:19:27 PLAN/S0364_settings-interface-group-split.md spec-arc Archive S0364 (settings-interface-group-split) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:19:27 PLAN/S0361_result-screen-ocr-language-reocr.md spec-arc Archive S0361 (result-screen-ocr-language-reocr) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:19:27 PLAN/S0360_drawing-editor-delete-file.md spec-arc Archive S0360 (drawing-editor-delete-file) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:19:27 PLAN/S0375_video-recording-destination-resource.md spec-arc Archive S0375 (video-recording-destination-resource) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:19:27 PLAN/S0376_file-manager-predefined-resource.md spec-arc Archive S0376 (file-manager-predefined-resource) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:19:27 PLAN/S0377_resource-menu-open-launch-reorder.md spec-arc Archive S0377 (resource-menu-open-launch-reorder) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:19:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt spec-arc Remove S0361 BlockNeedUserTest probe tag on archive [branch: DEBUG-v013]
2026-06-09 23:19:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDeleteUndoCoordinator.kt spec-arc Remove S0360 BlockNeedUserTest probe tag on archive [branch: DEBUG-v013]
2026-06-09 23:19:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDrawingSaveHelper.kt spec-arc Remove S0360 BlockNeedUserTest probe tag on archive [branch: DEBUG-v013]
2026-06-09 23:19:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-arc Remove S0377 BlockNeedUserTest probe tags on archive [branch: DEBUG-v013]
2026-06-09 23:20:34 PLAN/S0383_neuroslop-code-and-resource-hygiene.md spec-arc Archive S0383 (neuroslop-code-and-resource-hygiene) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:20:34 PLAN/S0384_unify-scrollable-text-dialogs.md spec-arc Archive S0384 (unify-scrollable-text-dialogs) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:20:34 PLAN/S0387_feature-explorer-variants.md spec-arc Archive S0387 (feature-explorer-variants) -> temp/done/ [branch: DEBUG-v013]
2026-06-09 23:20:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScrollableTextDialog.kt spec-arc Remove S0384 BlockNeedUserTest probe tag on archive [branch: DEBUG-v013]
2026-06-09 23:47:40 PLAN/S0391_remote-source-runtime-toggles.md spec Add strategic spec S0391 for optional remote-source runtime toggles [branch: DEBUG-v013]
2026-06-09 23:49:25 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt SftpConnectionInfo S0046 phase-03.1: add expectedFingerprint to SftpConnectionInfo + test wrappers [branch: DEBUG-v013]
2026-06-09 23:54:45 app_v2/build.gradle.kts S0386 Phase 05 de-bundle: jniLibs packaging excludes strip Set B (Tesseract: libtesseract/leptonica/pngx/jpeg), Paddle (libpaddle_*), and Set D (libffmpegJNI) .so from every base APK; wrappers stay on compile path [branch: DEBUG-v013]
2026-06-09 23:54:45 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredNativeLibraryLoader.kt S0386 Phase 07: verify-then-attach delivered native sets by splicing filesDir/delivery/ into the classloader native search path (SoLoader/ReLinker reflection) so Tesseract/Paddle/media3 System.loadLibrary resolves; warm-load in dependency order [branch: DEBUG-v013]
2026-06-09 23:54:45 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDescriptorCatalog.kt S0386 Phase 05: ABI-aware Set B (store=Tesseract, noLegal=+Paddle) and Set D (FFmpeg) download descriptors with app-pinned per-ABI SHA-256/size and - mirror URLs [branch: DEBUG-v013]
2026-06-09 23:54:45 app_v2/src/standard/java/com/sza/fastmediasorter/di/StandardBundledDeliverableSetsModule.kt S0386 Phase 05: drop OCR_ENGINES+FFMPEG_DTS from bundled set; contribute store OCR + FFmpeg + audio-viz descriptors [branch: DEBUG-v013]
2026-06-09 23:54:46 app_v2/src/legacy/java/com/sza/fastmediasorter/di/LegacyBundledDeliverableSetsModule.kt S0386 Phase 05: drop OCR_ENGINES+FFMPEG_DTS from bundled set; contribute store OCR + FFmpeg + audio-viz descriptors [branch: DEBUG-v013]
2026-06-09 23:54:46 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalBundledDeliverableSetsModule.kt S0386 Phase 05: keep TRANSLATION bundled; drop OCR_ENGINES+FFMPEG_DTS; contribute noLegal OCR (Tesseract+Paddle) + FFmpeg + audio-viz descriptors [branch: DEBUG-v013]
2026-06-09 23:54:46 app_v2/src/vrOnly/java/com/sza/fastmediasorter/di/VrBundledDeliverableSetsModule.kt S0386 Phase 05: keep TRANSLATION bundled; drop OCR_ENGINES+FFMPEG_DTS; contribute store OCR (Tesseract) + FFmpeg + audio-viz descriptors [branch: DEBUG-v013]
2026-06-09 23:54:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackRenderersFactory.kt S0386 Phase 07: attach delivered FFmpeg DTS (Set D) via Hilt EntryPoint before the renderers factory builds, gated on capability; graceful when absent [branch: DEBUG-v013]
2026-06-09 23:54:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt S0386 Phase 07: device-test Timber tag at OCR delivered-engine attach entry [branch: DEBUG-v013]
2026-06-09 23:54:47 docs/FEATURES.md S0386 Phase 09: on-demand delivery behavior note + Downloadable Extensions manager entry (EN) [branch: DEBUG-v013]
2026-06-09 23:54:47 docs/FEATURES_RU.md S0386 Phase 09: on-demand delivery note + extensions manager entry (RU) [branch: DEBUG-v013]
2026-06-09 23:54:48 docs/FEATURES_UK.md S0386 Phase 09: on-demand delivery note + extensions manager entry (UK) [branch: DEBUG-v013]
2026-06-09 23:54:48 docs/FEATURES_noLegal.md S0386 Phase 09: self-download delivery of heavy native sets section (EN, gitignored) [branch: DEBUG-v013]
2026-06-09 23:55:41 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt SftpConnectionPool S0046 phase-03.2: pin host-key via expectedFingerprint in ConnectionKey + applyAuth (StrictHostKeyChecking yes when pinned) [branch: DEBUG-v013]
2026-06-09 23:57:44 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionTester.kt SftpConnectionTester S0046 phase-03.3: pin host-key in test methods; map JSch host-key rejection to HostKeyMismatchException [branch: DEBUG-v013]
2026-06-10 00:00:16 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt SmbOperationsUseCase S0046 phase-03.4: thread expectedFingerprint/hostKeyFingerprint through SFTP test + runtime use-paths [branch: DEBUG-v013]
2026-06-10 00:06:38 app_v2/src/main/res/xml/sza_resources.xml sza_resources S0046 phase-04.1: document SFTP key-auth + fingerprint XML attributes [branch: DEBUG-v013]
2026-06-10 00:06:38 app_v2/src/main/assets/sftp_keys/.gitkeep sftp_keys-assets S0046 phase-04.1: bundled SFTP key asset folder [branch: DEBUG-v013]
2026-06-10 00:09:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/SzaResourcesImporter.kt SzaResourcesImporter S0046 phase-04.2: extract sza_resources XML importer; bundled SFTP key + fingerprint support [branch: DEBUG-v013]
2026-06-10 00:12:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt SettingsViewModel S0046 phase-04.3: delegate importSzaResources to SzaResourcesImporter (XML loop extracted) [branch: DEBUG-v013]
2026-06-10 00:25:50 app_v2/src/main/res/values/strings.xml strings-en S0046 phase-05.1: SFTP host-key fingerprint UI strings (EN) [branch: DEBUG-v013]
2026-06-10 00:25:50 app_v2/src/main/res/values-ru/strings.xml strings-ru S0046 phase-05.1: SFTP host-key fingerprint UI strings (RU) [branch: DEBUG-v013]
2026-06-10 00:25:50 app_v2/src/main/res/values-uk/strings.xml strings-uk S0046 phase-05.1: SFTP host-key fingerprint UI strings (UK) [branch: DEBUG-v013]
2026-06-10 00:26:31 app_v2/src/main/res/layout/activity_add_resource.xml activity_add_resource S0046 phase-05.2: add SFTP host-key fingerprint field [branch: DEBUG-v013]
2026-06-10 00:29:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceSftpFtpCoordinator.kt AddResourceSftpFtpCoordinator S0046 phase-05.3: normalize+persist fingerprint, mismatch->typed test result [branch: DEBUG-v013]
2026-06-10 00:29:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceSftpKeyCoordinator.kt AddResourceSftpKeyCoordinator S0046 phase-05.3: same fingerprint wiring for key auth [branch: DEBUG-v013]
2026-06-10 00:29:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceViewModel.kt AddResourceViewModel S0046 phase-05.3: thread fingerprint params to coordinators [branch: DEBUG-v013]
2026-06-10 00:31:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt AddResourceConnectionManager S0046 phase-05.4: read fingerprint field for SFTP test [branch: DEBUG-v013]
2026-06-10 00:31:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt AddResourceFormManager S0046 phase-05.4: read fingerprint field for SFTP add + tap-focus bridge [branch: DEBUG-v013]
2026-06-10 00:31:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceHelper.kt AddResourceHelper S0046 phase-05.4: prefill fingerprint on edit [branch: DEBUG-v013]
2026-06-10 00:37:32 docs/FEATURES.md FEATURES S0046 phase-06.2: SFTP key auth + host-key pinning feature bullet (EN) [branch: DEBUG-v013]
2026-06-10 00:37:32 docs/FEATURES_RU.md FEATURES_RU S0046 phase-06.2: SFTP key auth + host-key pinning feature bullet (RU) [branch: DEBUG-v013]
2026-06-10 00:37:32 docs/FEATURES_UK.md FEATURES_UK S0046 phase-06.2: SFTP key auth + host-key pinning feature bullet (UK) [branch: DEBUG-v013]
2026-06-10 01:01:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt spec-dev S0390 S0390 Phase 01: editableImageFile gate state + screen-rotation sensor toggle [branch: DEBUG-v013]
2026-06-10 01:01:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/StandaloneImageEditController.kt spec-dev S0390 S0390 Phase 02: new standalone crop/cropToFile/compress controller reusing ImageCropManager [branch: DEBUG-v013]
2026-06-10 01:01:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-dev S0390 S0390 Phase 04: reloadImage cache-busting re-decode after in-place crop [branch: DEBUG-v013]
2026-06-10 01:01:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0390 S0390 Phase 04: wire Group A buttons + overflow + rotate apply + gate [branch: DEBUG-v013]
2026-06-10 01:01:00 app_v2/src/main/res/layout/activity_standalone_photo_video.xml spec-dev S0390 S0390 Phase 03: crop/rotate bar buttons + focus chain [branch: DEBUG-v013]
2026-06-10 01:01:00 app_v2/src/main/res/layout-land/activity_standalone_photo_video.xml spec-dev S0390 S0390 Phase 03: crop/rotate bar buttons + focus chain (landscape) [branch: DEBUG-v013]
2026-06-10 01:01:00 app_v2/src/main/res/menu/overflow_menu_standalone_player.xml spec-dev S0390 S0390 Phase 03: crop-to-file + compress overflow items [branch: DEBUG-v013]
2026-06-10 01:01:00 docs/FEATURES.md spec-dev S0390 S0390 Phase 05: External image editing feature entry (EN/RU/UK) [branch: DEBUG-v013]
2026-06-10 01:21:45 app_v2/src/main/res/layout/activity_standalone_photo_video.xml spec-dev S0389 S0389 device-test fix: wrap action row in HorizontalScrollView + pin overflow outside scroll so paging/overflow stay reachable when the panel overflows on phones [branch: DEBUG-v013]
2026-06-10 01:21:45 app_v2/src/main/res/layout-land/activity_standalone_photo_video.xml spec-dev S0389 S0389 device-test fix: scrollable action row + pinned overflow (landscape) [branch: DEBUG-v013]
2026-06-10 01:26:20 app_v2/build.gradle.kts; app_v2/src/ocrEnabled; app_v2/src/ocrDisabled Build Fix photos/lite flavor build break: extract Tesseract OCR (TesseractManager + OcrModule) from src/main into new ocrEnabled source bucket (standard/noLegal/legacy/vr); add ocrDisabled bucket with NoOpOfflineOcrEngine default binding for photos/lite which lack the tesseract4android dep. Completes S0386 flavor isolation; catalog scan/render buckets updated. [branch: DEBUG-v013]
2026-06-10 01:29:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-dev S0389 S0389 Verified: remove BlockNeedUserTest debug tag (openInFms) [branch: DEBUG-v013]
2026-06-10 01:29:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt spec-dev S0389 S0389 Verified: remove BlockNeedUserTest debug tag (folder paging init) [branch: DEBUG-v013]
2026-06-10 01:39:03 PLAN/S0392_player-family-parity-research.md spec Create strategic spec S0392: research player-family functional divergences vs in-app + standalone catch-up roadmap; developer maintenance instruction [branch: DEBUG-v013]
2026-06-10 01:48:49 PLAN/S0392_player-family-parity-research/MATRIX.md spec-dev S0392 S0392 Phase A+B: produce player-family divergence MATRIX + catch-up ROADMAP (R0 host-seam fundamental .. R8 doc/text wave) [branch: DEBUG-v013]
2026-06-10 02:03:48 PLAN/S0393_player-host-seam-foundation.md spec Create strategic spec S0393 (S0392 ROADMAP R0): player host-seam foundation + harvest legacy StandalonePlayerActivity then deprecate [branch: DEBUG-v013]
2026-06-10 02:13:22 .claude/commands/spec-tech.md skills Harden phase planning: coverage inventory, Produces/Consumes topology, real-work filter, mandatory plan self-review, research/ subfolder as planning input [branch: DEBUG-v013]
2026-06-10 02:13:22 .claude/commands/spec.md skills Research artifact rule: resolved §6 items persist findings to PLAN/Sxxxx_/research/ with Artefakt link [branch: DEBUG-v013]
2026-06-10 02:13:22 .claude/commands/research.md skills Add ticket-bound mode: /research Sxxxx persists curated findings to PLAN/Sxxxx_/research/ [branch: DEBUG-v013]
2026-06-10 02:13:22 .claude/commands/spec-all.md skills F2 consumes research artifacts; inline §6 resolution persists findings to research/ [branch: DEBUG-v013]
2026-06-10 02:13:22 .claude/commands/spec-update.md skills Completeness checks for research artifacts and INDEX Research inputs line [branch: DEBUG-v013]
2026-06-10 02:14:06 PLAN/S0393_player-host-seam-foundation/INDEX.md spec-tech S0393 tactical plan: 8 phases (seam interface -> migrate crop/draw -> doc/text capabilities -> legacy harvest diff -> port PiP/playback-dialog -> port input/WebView -> deprecate legacy -> docs/device-test) [branch: DEBUG-v013]
2026-06-10 02:39:28 app_v2/src/main/java/com/sza/fastmediasorter/domain/delivery/DeliverableInventory.kt S0386 Phase 11: add ExtensionSection enum (OCR/TRANSLATION/MEDIA_PLAYBACK) + section field on ExtensionItem [branch: DEBUG-v013]
2026-06-10 02:39:29 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryImpl.kt S0386 Phase 11/12.1: tag each extension with its section, order OCR (engines+rus/ukr langs) -> Translation -> Media Playback [branch: DEBUG-v013]
2026-06-10 02:39:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/ExtensionsManagerFragment.kt S0386 Phase 11: multi-view-type adapter renders OCR/Translation/Media-Playback section headers + entries [branch: DEBUG-v013]
2026-06-10 02:39:29 app_v2/src/main/res/layout/item_extension_section_header.xml S0386 Phase 11: section-header row layout for the grouped Extensions list (attr colors) [branch: DEBUG-v013]
2026-06-10 02:39:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt S0386 Phase 10: wire General-tab Downloadable Extensions entry -> ExtensionsManagerFragment via activity FM [branch: DEBUG-v013]
2026-06-10 02:39:30 app_v2/src/main/res/layout/fragment_settings_general.xml S0386 Phase 10: General-tab Downloadable Extensions entry (non-full-width) after groups before permission/about buttons [branch: DEBUG-v013]
2026-06-10 02:39:30 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0386 Phase 10: landscape counterpart of the General-tab Downloadable Extensions entry (Rule 11) [branch: DEBUG-v013]
2026-06-10 02:39:30 app_v2/src/main/res/layout/fragment_settings_other.xml S0386 Phase 10.2: relabel the Translation/OCR-group entry as the contextual OCR/translation downloads shortcut [branch: DEBUG-v013]
2026-06-10 02:39:30 app_v2/src/main/res/layout-land/fragment_settings_other.xml S0386 Phase 10.2: landscape counterpart of the contextual shortcut relabel (Rule 11) [branch: DEBUG-v013]
2026-06-10 02:39:31 app_v2/src/main/res/values/strings.xml S0386 Phase 10/11: ext_section_* + ext_shortcut_packs_* strings (EN) [branch: DEBUG-v013]
2026-06-10 02:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt S0386 Phase 12.3: remove inline OCR-best-models download UI (fields/handlers/4 methods/unused imports); OCR language models managed solely in the Extensions screen [branch: DEBUG-v013]
2026-06-10 02:55:26 app_v2/src/main/res/layout/fragment_settings_other.xml S0386 Phase 12.3: drop the layoutOcrBestModels block (rus/ukr download rows) - now in the Extensions OCR section [branch: DEBUG-v013]
2026-06-10 02:55:26 app_v2/src/main/res/layout-land/fragment_settings_other.xml S0386 Phase 12.3: landscape counterpart - drop layoutOcrBestModels block (Rule 11) [branch: DEBUG-v013]
2026-06-10 02:55:27 app_v2/src/main/res/values/strings.xml S0386 Phase 12.3: remove 7 orphaned ocr_best_* strings (kept download/delete - still used by Extensions screen) [branch: DEBUG-v013]
2026-06-10 03:44:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlayerActionHost.kt spec-dev S0393 S0393 Phase 01: new binding-agnostic PlayerActionHost seam [branch: DEBUG-v013]
2026-06-10 03:44:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0393 S0393 Phase 01: PlayerActivity implements PlayerActionHost (adapter, no behaviour change) [branch: DEBUG-v013]
2026-06-10 03:44:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt spec-dev S0393 S0393 Phase 02: PlayerCropDelegate consumes seam (host-agnostic), shared in-app+standalone [branch: DEBUG-v013]
2026-06-10 03:44:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0393 S0393 Phase 02: implement PlayerActionHost; use shared PlayerCropDelegate; drop StandaloneImageEditController [branch: DEBUG-v013]
2026-06-10 10:06:56 app_v2/src/main/java/com/sza/fastmediasorter/data/migration/S0386UpgradeReconciliation.kt S0386 Phase 13.1: run-once de-bundle upgrade reconciliation - force OCR/translation toggle OFF when ON but set not installed (no downloads); idempotent SharedPreferences sentinel [branch: DEBUG-v013]
2026-06-10 10:06:56 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt S0386 Phase 13.1: wire S0386UpgradeReconciliation.runIfNeeded() in onCreate (mirrors S0200AuthStateWipe run-once pattern) [branch: DEBUG-v013]
2026-06-10 10:06:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/DeliveryPromptDialogFragment.kt S0386 Phase 13.2: download prompt title names the capability (OCR/Translation/Audio viz/DTS) via existing ext_*_title strings [branch: DEBUG-v013]
2026-06-10 10:17:10 PLAN/S0393_player-host-seam-foundation/HARVEST.md spec-dev S0393 S0393 Phase 04: legacy harvest map (U1-U8; routing confirmed; U6 dropped per Q1) [branch: DEBUG-v013]
2026-06-10 10:17:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0393 S0393 U2: wire per-file playback-control dialog (ported from legacy host) [branch: DEBUG-v013]
2026-06-10 10:29:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneKeyboardManager.kt spec-dev S0393 S0393 U4/U5: shared standalone keyboard/D-pad manager (all routes, no-op defaults) [branch: DEBUG-v013]
2026-06-10 10:29:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-dev S0393 S0393 U4/U5: wire keyboard (audio transport + paging) [branch: DEBUG-v013]
2026-06-10 10:29:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0393 S0393 U4/U5: wire keyboard (pdf/epub page-keys + paging) [branch: DEBUG-v013]
2026-06-10 10:29:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-dev S0393 S0393 U4/U5: wire keyboard (text-scroll PAGE keys + paging) [branch: DEBUG-v013]
2026-06-10 10:34:26 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/RealDeliverableSetDownloader.kt S0386 fix: Play dynamic-feature install failure (SplitInstall -15 APP_NOT_OWNED on sideload/debug) no longer fatal - emit Failed + close() without propagating; dfmFailureReason maps the code [branch: DEBUG-v013]
2026-06-10 10:34:27 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveryManifestDataSource.kt S0386 B2 refinement: stationary manifest URL (fixed delivery-so-v1 tag) instead of delivery-v/ - hashes are app-pinned so per-version URL isolation is unnecessary; one editable file to move endpoints [branch: DEBUG-v013]
2026-06-10 10:54:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PictureInPictureManager.kt spec-dev S0393 S0393 U1: make PiP manager binding-agnostic (playerView + chromeToHide) for reuse by standalone [branch: DEBUG-v013]
2026-06-10 10:54:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0393 S0393 U1: wire PiP (auto-enter/onUserLeaveHint/mode-changed/onPause-guard) ported from legacy [branch: DEBUG-v013]
2026-06-10 10:54:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0393 S0393 U3+U7/U8: WebView selection ActionMode augment + EPUB translator orientation guard (fixes dead button) [branch: DEBUG-v013]
2026-06-10 10:58:12 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDescriptorCatalog.kt S0386 filename versioning: hosted asset names carry per-element rev (--v1.so, -v1.mp4) so new revs coexist with old; on-device name stays unversioned [branch: DEBUG-v013]
2026-06-10 10:58:12 delivery/INVENTORY.md S0386 add visible inventory of on-demand release-asset payloads (permanent address, filename-versioning convention, current v1 set) [branch: DEBUG-v013]
2026-06-10 11:01:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0393 S0393 Phase 07: @Deprecated + TODO-remove (all unique capabilities harvested; nothing routes to it) [branch: DEBUG-v013]
2026-06-10 11:01:08 PLAN/S0392_player-family-parity-research/MATRIX.md spec-dev S0393 S0393: mark PiP/playback-dialog/keyboard/ActionMode/EPUB-translate rows present after harvest [branch: DEBUG-v013]
2026-06-10 11:12:06 PLAN/S0394_github-release-assets-downloads.md spec Add strategic spec S0394 for full-spectrum GitHub Release assets + website downloads [branch: DEBUG-v013]
2026-06-10 11:20:00 PLAN/S0394_github-release-assets-downloads/INDEX.md spec-tech Create tactical plan for S0394 [branch: DEBUG-v013]
2026-06-10 11:20:00 PLAN/S0394_github-release-assets-downloads/PHASE_01__wear-release-signing.md spec-tech Phase 01: wear-release-signing [branch: DEBUG-v013]
2026-06-10 11:20:00 PLAN/S0394_github-release-assets-downloads/PHASE_02__release-spectrum-build.md spec-tech Phase 02: release-spectrum-build [branch: DEBUG-v013]
2026-06-10 11:20:00 PLAN/S0394_github-release-assets-downloads/PHASE_03__extended-publisher.md spec-tech Phase 03: extended-publisher [branch: DEBUG-v013]
2026-06-10 11:20:00 PLAN/S0394_github-release-assets-downloads/PHASE_04__website-download-showcase.md spec-tech Phase 04: website-download-showcase [branch: DEBUG-v013]
2026-06-10 11:20:00 PLAN/S0394_github-release-assets-downloads/PHASE_05__downloads-docs-and-matrix.md spec-tech Phase 05: downloads-docs-and-matrix [branch: DEBUG-v013]
2026-06-10 11:20:00 PLAN/S0394_github-release-assets-downloads/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-10 11:20:00 PLAN/S0394_github-release-assets-downloads.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-10 11:22:00 app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt spec-dev S0393 S0393 audit F1: route download-complete notification to dispatcher, not @Deprecated legacy host [branch: DEBUG-v013]
2026-06-10 11:22:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt spec-dev S0393 S0393 audit F1: route auto-download launch to dispatcher, not legacy host [branch: DEBUG-v013]
2026-06-10 11:22:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlayerActionHost.kt spec-dev S0393 S0393 audit F2: add prepareImageSurfacesForCrop hook (in-app normalizes photoView+imageView - regression fix) [branch: DEBUG-v013]
2026-06-10 11:22:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneKeyboardManager.kt spec-dev S0393 S0393 audit F3/F4: add onShowHelp; PhotoVideo unified onto shared manager (duplicate deleted) [branch: DEBUG-v013]
2026-06-10 11:25:56 wear/build.gradle.kts spec-dev S0394 Phase 01: add release signing to wear module (shared release key) [branch: DEBUG-v013]
2026-06-10 11:28:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/dispatch/StandalonePlayerDispatcherActivity.kt spec-dev S0393 S0393 audit2 F3: defensive ACTION_SEND_MULTIPLE handling (first stream URI) [branch: DEBUG-v013]
2026-06-10 11:28:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0393 S0393 audit2 F5/F6: onConfigurationChanged reapply-insets + rotation-sensor keyboard route [branch: DEBUG-v013]
2026-06-10 11:28:46 app_v2/src/main/res/layout/activity_standalone_document.xml spec-dev S0393 S0393 audit2 F4: pin overflow button outside the HorizontalScrollView (portrait+land) [branch: DEBUG-v013]
2026-06-10 11:29:24 scripts/release/build-release-spectrum.ps1 spec-dev S0394 Phase 02: release-spectrum build orchestrator (one version, two-pass) [branch: DEBUG-v013]
2026-06-10 11:33:11 scripts/release/publish-github-release.ps1 spec-dev S0394 Phase 03: publisher uploads full release spectrum (7 assets, versioned names) [branch: DEBUG-v013]
2026-06-10 11:42:13 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableCapabilityRepositoryImpl.kt S0386 audit fix: log (not swallow) translate_feature deferredUninstall failure (Rule 19) [branch: DEBUG-v013]
2026-06-10 11:42:14 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryImpl.kt S0386 audit fix: persist markInstalled on DownloadProgress.Installed so the capability flow re-emits (translation Play-DFM row stayed NotInstalled after install) [branch: DEBUG-v013]
2026-06-10 11:42:14 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/RealDeliverableSetDownloader.kt S0386 audit fix: try/finally deletes the .tmp staging dir on cancellation/early-return so a cancelled download leaves no orphaned bytes in filesDir [branch: DEBUG-v013]
2026-06-10 11:42:43 app_v2/src/main/res/layout/activity_standalone_audio.xml spec-dev S0393 S0393 audit2 F4: HorizontalScrollView + pinned overflow (audio, portrait+land) [branch: DEBUG-v013]
2026-06-10 11:42:43 app_v2/src/main/res/layout/activity_standalone_text.xml spec-dev S0393 S0393 audit2 F4: HorizontalScrollView + pinned overflow (text, portrait+land) [branch: DEBUG-v013]
2026-06-10 11:43:09 index.html spec-dev S0394 Phase 04: website APK download buttons from latest GitHub Release [branch: DEBUG-v013]
2026-06-10 11:43:09 index-ru.html spec-dev S0394 Phase 04: website APK download buttons from latest GitHub Release [branch: DEBUG-v013]
2026-06-10 11:43:10 index-uk.html spec-dev S0394 Phase 04: website APK download buttons from latest GitHub Release [branch: DEBUG-v013]
2026-06-10 11:43:11 nolegal.html spec-dev S0394 Phase 04: website APK download buttons from latest GitHub Release [branch: DEBUG-v013]
2026-06-10 11:43:11 nolegal-ru.html spec-dev S0394 Phase 04: website APK download buttons from latest GitHub Release [branch: DEBUG-v013]
2026-06-10 11:43:12 nolegal-uk.html spec-dev S0394 Phase 04: website APK download buttons from latest GitHub Release [branch: DEBUG-v013]
2026-06-10 11:43:12 styles.css spec-dev S0394 Phase 04: website APK download buttons from latest GitHub Release [branch: DEBUG-v013]
2026-06-10 11:46:27 docs/DOWNLOADS_EN.md spec-dev S0394 Phase 05: Downloads docs + release distribution matrix point at GitHub Release [branch: DEBUG-v013]
2026-06-10 11:46:27 docs/DOWNLOADS_RU.md spec-dev S0394 Phase 05: Downloads docs + release distribution matrix point at GitHub Release [branch: DEBUG-v013]
2026-06-10 11:46:28 docs/DOWNLOADS_UK.md spec-dev S0394 Phase 05: Downloads docs + release distribution matrix point at GitHub Release [branch: DEBUG-v013]
2026-06-10 11:46:28 .claude/commands/skill-release.md spec-dev S0394 Phase 05: Downloads docs + release distribution matrix point at GitHub Release [branch: DEBUG-v013]
2026-06-10 11:48:47 PLAN/S0394_github-release-assets-downloads.md spec-dev S0394 all 6 phases done; status -> Implemented (full-spectrum GitHub Release assets + website downloads) [branch: DEBUG-v013]
2026-06-10 11:50:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0393 S0393 wave-C: wire PDF OCR (scrollable text dialog) + PDF Google Lens share in Document host [branch: DEBUG-v013]
2026-06-10 11:50:45 PLAN/S0394_github-release-assets-downloads.md spec-check Audit S0394 -> Verified; PASS/WARN/FAIL 23/0/0 [branch: DEBUG-v013]
2026-06-10 12:24:31 scripts/release/build-release-spectrum.ps1 spec-dev S0394: add -ReuseVersion to align GitHub spectrum with a.ps1 r version (no Play-AAB skew) [branch: DEBUG-v013]
2026-06-10 12:24:32 .claude/commands/skill-release.md spec-dev S0394: wire build-release-spectrum -ReuseVersion into release flow; drop redundant a.ps1 vr step [branch: DEBUG-v013]
2026-06-10 12:25:28 PLAN/S0394_github-release-assets-downloads.md spec-dev S0394: wire build-release-spectrum -ReuseVersion into /skill-release flow; re-verified -> Verified [branch: DEBUG-v013]
2026-06-10 12:27:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0393 S0393 wave-C: image edit dialog (rotate/flip/filters/adjust) + black-screen overlay via overflow menu [branch: DEBUG-v013]
2026-06-10 12:27:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-dev S0393 S0393 wave-C: text copy/translate buttons visible + real translation-model download prompt; hide shared image menu items [branch: DEBUG-v013]
2026-06-10 12:27:39 app_v2/src/main/res/menu/overflow_menu_standalone_player.xml spec-dev S0393 S0393 wave-C: add menu_edit_image + menu_black_screen (image/video-gated; hidden in non-image hosts) [branch: DEBUG-v013]
2026-06-10 12:33:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/GoogleLensShare.kt spec-dev S0393 S0393 wave-C: shared host-agnostic Google Lens image share (extracted from PlayerShareManager) [branch: DEBUG-v013]
2026-06-10 12:33:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-dev S0393 S0393 wave-C: YouTube Music search (overflow) + hide image menu items [branch: DEBUG-v013]
2026-06-10 12:43:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0393 S0393 wave-C (L): OCR image - extract text via TranslationManager.recognition into ScrollableTextDialog (ENABLE_TRANSLATION-gated) [branch: DEBUG-v013]
2026-06-10 12:51:46 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/RealDeliverableSetDownloader.kt S0386 audit followup #1: atomic promote() - move old payload to .bak, restore on rename failure so a failed re-download keeps the prior working payload [branch: DEBUG-v013]
2026-06-10 12:51:47 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/PayloadIntegrityVerifier.kt S0386 audit followup #4: upper size bound (64MB) for hash-less pure-resource files so an oversized substitution cannot flood filesDir [branch: DEBUG-v013]
2026-06-10 12:51:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TesseractModelManager.kt S0386 audit followup #3: @Singleton @Inject constructor (@ApplicationContext) so it is Hilt-injectable [branch: DEBUG-v013]
2026-06-10 12:51:47 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryImpl.kt S0386 audit followup #3: inject TesseractModelManager via Hilt instead of manual construction; drop now-unused context param [branch: DEBUG-v013]
2026-06-10 12:51:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/DeliveryPromptDialogFragment.kt S0386 audit followup #2: per-set fragment-result key so concurrent enable points for different sets cannot cross-wire outcomes [branch: DEBUG-v013]
2026-06-10 12:51:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/DeliveryEnableInterceptor.kt S0386 audit followup #2: listen on the per-set fragment-result key [branch: DEBUG-v013]
2026-06-10 12:55:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0393 S0393 wave-C: image-translate (recognizeAndTranslate->dialog), print (PrintHelper), save-frame (TextureView->MediaStore), sleep-timer - all via direct engine calls [branch: DEBUG-v013]
2026-06-10 12:55:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-dev S0393 S0393 wave-C: lyrics (SearchLyricsUseCase->dialog) + sleep-timer via direct calls [branch: DEBUG-v013]
2026-06-10 15:14:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0393 S0393: close blocker - EPUB OCR (wire btnOcrEpubCmd -> extractTextFromCurrentChapter, show when EPUB+translation) [branch: DEBUG-v013]
2026-06-10 15:14:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-dev S0393 S0393: close blockers - Text search (input dialog + searchText) + Text edit (TextEditorSaveFlow + writable-local gating) [branch: DEBUG-v013]
2026-06-10 16:39:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/dispatch/StandalonePlayerDispatcherActivity.kt audit-fix S0393 Audit3 #1: normalize forwarded intent to ACTION_VIEW + resolved URI (fixes SEND_MULTIPLE fall-through in specialized hosts) [branch: DEBUG-v013]
2026-06-10 16:39:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt audit-fix S0393 Audit3 #2: audio playback-speed picker (ExoPlayer.setPlaybackSpeed) - restores legacy speed control [branch: DEBUG-v013]
2026-06-10 16:39:26 app_v2/src/main/res/layout/activity_standalone_text.xml audit-fix S0393 Audit3 #3: strip dead btnPdfTextSettingsCmd/btnTextSettingsCmd from standalone doc/text layouts (Rule 20) [branch: DEBUG-v013]
2026-06-10 20:02:04 PLAN/S0395_welcome-screens-redesign-research.md spec Add strategic research spec S0395 for welcome screens redesign (S0386/S0391 onboarding integration) [branch: DEBUG-v013]
2026-06-10 20:11:21 PLAN/S0395_welcome-screens-redesign-research/INDEX.md spec-tech Create tactical plan for S0395 (6 research phases) [branch: DEBUG-v013]
2026-06-10 20:11:21 PLAN/S0395_welcome-screens-redesign-research/PHASE_01__current-flow-inventory.md spec-tech Phase 01: current-flow-inventory [branch: DEBUG-v013]
2026-06-10 20:11:21 PLAN/S0395_welcome-screens-redesign-research/PHASE_02__page-content-research.md spec-tech Phase 02: page-content-research [branch: DEBUG-v013]
2026-06-10 20:11:21 PLAN/S0395_welcome-screens-redesign-research/PHASE_03__permissions-downloads-research.md spec-tech Phase 03: permissions-downloads-research [branch: DEBUG-v013]
2026-06-10 20:11:21 PLAN/S0395_welcome-screens-redesign-research/PHASE_04__cross-cutting-research.md spec-tech Phase 04: cross-cutting-research [branch: DEBUG-v013]
2026-06-10 20:11:21 PLAN/S0395_welcome-screens-redesign-research/PHASE_05__synthesis-and-split.md spec-tech Phase 05: synthesis-and-split [branch: DEBUG-v013]
2026-06-10 20:11:21 PLAN/S0395_welcome-screens-redesign-research/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-10 20:11:21 PLAN/S0395_welcome-screens-redesign-research.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-10 20:24:48 PLAN/S0395_welcome-screens-redesign-research/research/01__current-flow-inventory.md research S0395 artifact 01: current welcome flow inventory and content-loss assessment [branch: DEBUG-v013]
2026-06-10 20:27:20 PLAN/S0395_welcome-screens-redesign-research/research/04__page2-network-toggles.md research S0395 artifact 04: page-2 network toggles over S0391, grouped-toggle recommendation [branch: DEBUG-v013]
2026-06-10 20:28:58 PLAN/S0395_welcome-screens-redesign-research/research/02__page0-language-theme.md research S0395 artifact 02: page-0 language+theme feasibility, recreate survival, dual-persistence rules [branch: DEBUG-v013]
2026-06-10 20:30:20 PLAN/S0395_welcome-screens-redesign-research/research/03__page1-device-profiles.md research S0395 artifact 03: inline device-profile page feasibility, fit budget, skip semantics, dialog retention [branch: DEBUG-v013]
2026-06-10 20:36:22 PLAN/S0395_welcome-screens-redesign-research/research/06__page4-functionality-toggles.md research S0395 artifact 06: page-4 toggle semantics, deliverable catalog, gaps (availability contract, app-scoped downloads) [branch: DEBUG-v013]
2026-06-10 20:40:16 PLAN/S0395_welcome-screens-redesign-research/research/05__permissions-ordering.md research S0395 artifact 05: permission map per API tier, page-order analysis, swap recommendation [branch: DEBUG-v013]
2026-06-10 20:40:16 PLAN/S0395_welcome-screens-redesign-research/research/07__onboarding-downloads.md research S0395 artifact 07: onboarding download lifecycle, offline handling, Play executable-code policy finding [branch: DEBUG-v013]
2026-06-10 20:45:10 PLAN/S0395_welcome-screens-redesign-research/research/08__reentry-upgrade.md research S0395 artifact 08: re-entry/upgrade rules, pre-population, preset reapply fixes [branch: DEBUG-v013]
2026-06-10 20:45:10 PLAN/S0395_welcome-screens-redesign-research/research/09__flavor-matrix.md research S0395 artifact 09: page-by-flavor matrix, collapse rule, VR usability [branch: DEBUG-v013]
2026-06-10 20:45:11 PLAN/S0395_welcome-screens-redesign-research/research/10__length-defaults.md research S0395 artifact 10: onboarding length defensibility, per-page safe defaults, skip contract [branch: DEBUG-v013]
2026-06-10 20:45:11 PLAN/S0395_welcome-screens-redesign-research/research/11__accessibility-input.md research S0395 artifact 11: accessibility acceptance checklist, D-pad grid handling, landscape obligations [branch: DEBUG-v013]
2026-06-10 20:49:19 PLAN/S0395_welcome-screens-redesign-research/SYNTHESIS.md research S0395 synthesis: pros/cons, recommended structure, flavor matrix, 7 deviations, owner decisions [branch: DEBUG-v013]
2026-06-10 20:49:20 PLAN/S0395_welcome-screens-redesign-research/research/12__dev-ticket-split.md research S0395 artifact 12: dev-ticket split (8+1 tickets, dependencies, order) [branch: DEBUG-v013]
2026-06-10 20:53:04 PLAN/S0395_welcome-screens-redesign-research.md spec Resolve S0395 section-6 items with research artifact links and answers [branch: DEBUG-v013]
2026-06-10 21:22:33 PLAN/S0395_welcome-screens-redesign-research/SYNTHESIS.md research Apply owner sign-off amendments: no Skip button, decorative networks page now, full profile tiles, no upgrade pointer [branch: DEBUG-v013]
2026-06-10 21:22:34 PLAN/S0395_welcome-screens-redesign-research/research/12__dev-ticket-split.md research Amend split per owner: H folded into S0391, I dropped, C/D scopes updated [branch: DEBUG-v013]
2026-06-10 21:22:34 PLAN/S0395_welcome-screens-redesign-research.md spec Record owner sign-off with amendments in section-6 answers, 3.3 and section-10 (S0396-S0402 created) [branch: DEBUG-v013]
2026-06-10 21:22:35 PLAN/S0391_remote-source-runtime-toggles.md spec Add welcome networks-page tiles-to-toggles replacement scope per owner amendment (S0395 sign-off) [branch: DEBUG-v013]
2026-06-10 21:22:35 PLAN/S0396_welcome-availability-contract.md spec Add dev ticket S0396 from S0395 split [branch: DEBUG-v013]
2026-06-10 21:22:35 PLAN/S0397_onboarding-download-runner.md spec Add dev ticket S0397 from S0395 split [branch: DEBUG-v013]
2026-06-10 21:22:35 PLAN/S0398_welcome-skeleton-form-pages.md spec Add dev ticket S0398 (keystone) from S0395 split [branch: DEBUG-v013]
2026-06-10 21:22:35 PLAN/S0399_welcome-profile-page.md spec Add dev ticket S0399 from S0395 split [branch: DEBUG-v013]
2026-06-10 21:22:35 PLAN/S0400_welcome-functionality-page.md spec Add dev ticket S0400 from S0395 split [branch: DEBUG-v013]
2026-06-10 21:22:35 PLAN/S0401_s0386-play-compliant-so-delivery.md spec Add dev ticket S0401 (S0386 follow-up) from S0395 split [branch: DEBUG-v013]
2026-06-10 21:22:35 PLAN/S0402_welcome-permissions-page.md spec Add dev ticket S0402 from S0395 split [branch: DEBUG-v013]
2026-06-10 22:52:45 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDownloadRunnerImpl.kt DeliverableDownloadRunnerImpl implemented app-scoped element download runner [branch: DEBUG-v013]
2026-06-10 22:54:39 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDownloadRunnerImpl.kt DeliverableDownloadRunnerImpl implemented app-scoped element download runner [branch: DEBUG-v013]
2026-06-10 22:55:23 PLAN/S0396_welcome-availability-contract/INDEX.md spec-tech Create tactical plan for S0396 (4 phases, capability multibinding contract) [branch: DEBUG-v013]
2026-06-10 22:55:23 PLAN/S0396_welcome-availability-contract/PHASE_01__capability-contract.md spec-tech Phase 01: capability-contract [branch: DEBUG-v013]
2026-06-10 22:55:23 PLAN/S0396_welcome-availability-contract/PHASE_02__flavor-contributions.md spec-tech Phase 02: flavor-contributions [branch: DEBUG-v013]
2026-06-10 22:55:23 PLAN/S0396_welcome-availability-contract/PHASE_03__settings-migration.md spec-tech Phase 03: settings-migration [branch: DEBUG-v013]
2026-06-10 22:55:23 PLAN/S0396_welcome-availability-contract/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-10 22:55:23 PLAN/S0396_welcome-availability-contract.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-10 22:56:32 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDownloadRunnerImpl.kt DeliverableDownloadRunnerImpl implemented app-scoped element download runner [branch: DEBUG-v013]
2026-06-10 22:57:15 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/CapabilityAvailability.kt S0396 phase-01.1 Add CapabilityAvailability contract over multibound compiled-capability set [branch: DEBUG-v013]
2026-06-10 23:01:27 app_v2/src/main/java/com/sza/fastmediasorter/di/CapabilityAvailabilityModule.kt S0396 phase-01.2 Add @Multibinds empty-set default for compiled-capability set [branch: DEBUG-v013]
2026-06-10 23:03:45 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDownloadRunnerImpl.kt DeliverableDownloadRunnerImpl implement S0397 app-scoped element download runner [branch: DEBUG-v013]
2026-06-10 23:06:00 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDownloadRunnerImpl.kt DeliverableDownloadRunnerImpl implement S0397 app-scoped element download runner [branch: DEBUG-v013]
2026-06-10 23:24:31 PLAN/S0398_welcome-skeleton-form-pages/INDEX.md spec-tech Create tactical plan for S0398 (6 phases, welcome skeleton) [branch: DEBUG-v013]
2026-06-10 23:24:31 PLAN/S0398_welcome-skeleton-form-pages/PHASE_01__welcome-shell-framework.md spec-tech Phase 01: welcome-shell-framework [branch: DEBUG-v013]
2026-06-10 23:24:31 PLAN/S0398_welcome-skeleton-form-pages/PHASE_02__decorative-removal.md spec-tech Phase 02: decorative-removal [branch: DEBUG-v013]
2026-06-10 23:24:31 PLAN/S0398_welcome-skeleton-form-pages/PHASE_03__page0-theme-row.md spec-tech Phase 03: page0-theme-row [branch: DEBUG-v013]
2026-06-10 23:24:31 PLAN/S0398_welcome-skeleton-form-pages/PHASE_04__networks-decorative-page.md spec-tech Phase 04: networks-decorative-page [branch: DEBUG-v013]
2026-06-10 23:24:31 PLAN/S0398_welcome-skeleton-form-pages/PHASE_05__reentry-fixes.md spec-tech Phase 05: reentry-fixes [branch: DEBUG-v013]
2026-06-10 23:24:31 PLAN/S0398_welcome-skeleton-form-pages/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-10 23:24:31 PLAN/S0398_welcome-skeleton-form-pages.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-10 23:36:15 app_v2/src/ocrEnabled/java/com/sza/fastmediasorter/di/OcrCapabilityModule.kt spec-dev S0396 phase-02.1: OCR @IntoSet contribution to compiled-capability set [branch: DEBUG-v013]
2026-06-10 23:36:15 app_v2/src/translationEnabled/java/com/sza/fastmediasorter/di/TranslationCapabilityModule.kt spec-dev S0396 phase-02.2: translation @IntoSet contribution [branch: DEBUG-v013]
2026-06-10 23:36:15 app_v2/src/vrOnly/java/com/sza/fastmediasorter/di/VrCapabilityModule.kt spec-dev S0396 phase-02.3: VR @IntoSet contribution [branch: DEBUG-v013]
2026-06-10 23:39:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt spec-dev S0396 phase-03.1: migrate translation/OCR row visibility to CapabilityAvailability [branch: DEBUG-v013]
2026-06-10 23:39:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0396 phase-03.2: @AndroidEntryPoint + migrate camera-OCR row visibility to CapabilityAvailability [branch: DEBUG-v013]
2026-06-10 23:52:01 PLAN/S0396_welcome-availability-contract.md spec-dev All 4 phases done; CapabilityAvailability contract + flavor contributions + settings migration; standard+lite build-green; status -> Implemented [branch: DEBUG-v013]
2026-06-11 00:44:13 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/MediaCapabilities.kt spec-dev S0398 phase-01.1: add supportsDefaultPlayer to MediaCapabilities surface [branch: DEBUG-v013]
2026-06-11 00:44:13 app_v2/src/standard/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0398 phase-01.1: add supportsDefaultPlayer to MediaCapabilities surface [branch: DEBUG-v013]
2026-06-11 00:44:13 app_v2/src/legacy/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0398 phase-01.1: add supportsDefaultPlayer to MediaCapabilities surface [branch: DEBUG-v013]
2026-06-11 00:44:13 app_v2/src/vr/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0398 phase-01.1: add supportsDefaultPlayer to MediaCapabilities surface [branch: DEBUG-v013]
2026-06-11 00:44:13 app_v2/src/photos/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0398 phase-01.1: add supportsDefaultPlayer to MediaCapabilities surface [branch: DEBUG-v013]
2026-06-11 00:44:13 app_v2/src/lite/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0398 phase-01.1: add supportsDefaultPlayer to MediaCapabilities surface [branch: DEBUG-v013]
2026-06-11 00:50:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-dev S0398 phase-01.2-01.4: inject MediaCapabilities, supportsDefaultPlayer gate, remove Skip (Next-only nav) [branch: DEBUG-v013]
2026-06-11 00:50:01 app_v2/src/main/res/layout/activity_welcome.xml spec-dev S0398 phase-01.4: remove btnSkip from welcome bottom nav, redirect constraints/focus [branch: DEBUG-v013]
2026-06-11 00:50:02 app_v2/src/main/res/layout-sw480dp/activity_welcome.xml spec-dev S0398 phase-01.4: remove btnSkip from welcome bottom nav, redirect constraints/focus [branch: DEBUG-v013]
2026-06-11 00:50:02 app_v2/src/main/res/layout-sw720dp/activity_welcome.xml spec-dev S0398 phase-01.4: remove btnSkip from welcome bottom nav, redirect constraints/focus [branch: DEBUG-v013]
2026-06-11 01:07:48 app_v2/src/main/res/values/strings_setup.xml spec-dev S0398 phase-02.4: remove 19 orphan welcome strings (permissions/vr/battery/decorative pages); up-to-30 lie gone [branch: DEBUG-v013]
2026-06-11 01:07:48 app_v2/src/main/res/values-ru/strings_setup.xml spec-dev S0398 phase-02.4: remove 19 orphan welcome strings (permissions/vr/battery/decorative pages); up-to-30 lie gone [branch: DEBUG-v013]
2026-06-11 01:07:48 app_v2/src/main/res/values-uk/strings_setup.xml spec-dev S0398 phase-02.4: remove 19 orphan welcome strings (permissions/vr/battery/decorative pages); up-to-30 lie gone [branch: DEBUG-v013]
2026-06-11 01:30:03 app_v2/src/main/res/values/strings_setup.xml string/welcome_theme_* S0398 P03.1: add welcome theme-picker strings (auto/light/dark + hint + applies-after-setup caption) across EN/RU/UK [branch: DEBUG-v013]
2026-06-11 01:32:17 app_v2/src/main/res/layout/page_welcome_enhanced.xml page_welcome_enhanced S0398 P03.2: add theme MaterialButtonToggleGroup (auto/light/dark) + applies-after-setup caption below language picker (portrait) [branch: DEBUG-v013]
2026-06-11 01:32:25 app_v2/src/main/res/layout-land/page_welcome_enhanced.xml page_welcome_enhanced(land) S0398 P03.2: theme picker + caption (landscape lockstep) [branch: DEBUG-v013]
2026-06-11 01:35:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt WelcomePagerAdapter S0398 P03.3: WelcomePage showThemePicker/onThemeSelected fields + EnhancedViewHolder theme-picker binding (pre-check via ColorThemePrefs.getMode) [branch: DEBUG-v013]
2026-06-11 01:37:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity S0398 P03.3: page0 showThemePicker=true + onWelcomeThemeSelected callback (dual-write mirror via ColorThemePrefs.setMode; no recreate) [branch: DEBUG-v013]
2026-06-11 01:37:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel S0398 P03.3: add saveColorTheme(value) persisting colorTheme to DataStore settings [branch: DEBUG-v013]
2026-06-11 01:37:25 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt ColorThemePrefs S0398 P03.3: add getMode(context) reading the synchronous theme mirror for control pre-selection [branch: DEBUG-v013]
2026-06-11 01:38:23 app_v2/src/main/res/values-ru/strings_setup.xml string/welcome_theme_*(ru) S0398 P03.1: RU theme strings (lockstep) [branch: DEBUG-v013]
2026-06-11 01:38:24 app_v2/src/main/res/values-uk/strings_setup.xml string/welcome_theme_*(uk) S0398 P03.1: UK theme strings (lockstep) [branch: DEBUG-v013]
2026-06-11 01:42:58 app_v2/src/main/res/values/strings_setup.xml string/welcome_network* S0398 P04.1: add networks decorative page strings (title, description, SMB/FTP/Cloud tiles) across EN/RU/UK [branch: DEBUG-v013]
2026-06-11 01:43:06 app_v2/src/main/res/values-ru/strings_setup.xml string/welcome_network*(ru) S0398 P04.1: RU networks strings (lockstep) [branch: DEBUG-v013]
2026-06-11 01:43:07 app_v2/src/main/res/values-uk/strings_setup.xml string/welcome_network*(uk) S0398 P04.1: UK networks strings (lockstep) [branch: DEBUG-v013]
2026-06-11 01:46:42 app_v2/src/main/res/layout/page_welcome_networks.xml page_welcome_networks S0398 P04.2: new decorative networks page (header + SMB/FTP/Cloud tiles; tileNetworkCloud gated) - portrait [branch: DEBUG-v013]
2026-06-11 01:46:50 app_v2/src/main/res/layout-land/page_welcome_networks.xml page_welcome_networks(land) S0398 P04.2: networks page (landscape lockstep) [branch: DEBUG-v013]
2026-06-11 01:48:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt WelcomePagerAdapter S0398 P04.3: VIEW_TYPE_NETWORKS + NetworksViewHolder (gates tileNetworkCloud via showCloudNetworkTile) + WelcomePage isNetworksPage/showCloudNetworkTile fields [branch: DEBUG-v013]
2026-06-11 01:50:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity S0398 P04.3: insert decorative networks page at index 1 with showCloudNetworkTile=mediaCapabilities.supportsCloud [branch: DEBUG-v013]
2026-06-11 02:00:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel S0398 P05.1: saveDeviceProfile skips preset when profile unchanged on re-entry; first-run always applies; changed-on-reentry emits ConfirmProfilePresetReapply event + confirmProfilePresetReapply [branch: DEBUG-v013]
2026-06-11 02:01:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity S0398 P05.1: observe WelcomeEvent.ConfirmProfilePresetReapply + settings_profile_warning dialog (reapply on confirm) [branch: DEBUG-v013]
2026-06-11 02:03:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity S0398 P05.2: goToMainActivity re-entry branch returns to caller via finish() instead of NEW_TASK|CLEAR_TASK; first-run Main->Settings redirect unchanged [branch: DEBUG-v013]
2026-06-11 02:07:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt Playback settings Wire the link auto-download destination-resource row to the existing destination picker (was a dead clickable stub); resolve and show the selected resource label; add chevron affordance to the portrait layout row [branch: DEBUG-v013]
2026-06-11 02:07:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel S0398 P05.3: detectDeviceProfile pre-selects the stored profile on re-entry (availability-guarded), so re-finishing without changes skips the preset; first-run keeps the detected recommendation [branch: DEBUG-v013]
2026-06-11 02:30:52 PLAN/S0398_welcome-skeleton-form-pages.md spec-dev S0398: all 6 phases done (theme row, networks page, re-entry fixes, catalog/flavors); status In Progress -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-11 02:30:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity S0398 P06: insert debug tags (theme select + re-entry finish flows) [branch: DEBUG-v013]
2026-06-11 02:30:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt WelcomePagerAdapter S0398 P06: insert debug tag (networks page bind flow) [branch: DEBUG-v013]
2026-06-11 02:30:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel S0398 P06: insert debug tag (saveDeviceProfile re-entry decision flow) [branch: DEBUG-v013]
2026-06-11 02:40:51 PLAN/S0403_fdroid-foss-flavor.md spec Add strategic spec S0403 for F-Droid FOSS flavor [branch: DEBUG-v013]
2026-06-11 02:43:59 PLAN/S0404_android-launcher-mode-profiles.md spec Add strategic spec S0404 for android-launcher-mode-profiles [branch: DEBUG-v013]
2026-06-11 02:47:26 PLAN/S0405_always-on-top-overlay-screenshot.md spec Add strategic research spec S0405 for always-on-top overlay handle + system screen capture (screenshot maker/receiver) [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles/INDEX.md spec-tech Create tactical plan for S0404 [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles/PHASE_05__profile-content.md spec-tech Phase 05: profile-content [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles/PHASE_02__config-persistence.md spec-tech Phase 02: config-persistence [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles/PHASE_04__home-surface.md spec-tech Phase 04: home-surface [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles/PHASE_06__role-entry.md spec-tech Phase 06: role-entry [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles/PHASE_03__apps-registry.md spec-tech Phase 03: apps-registry [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles/PHASE_01__capability-foundation.md spec-tech Phase 01: capability-foundation [branch: DEBUG-v013]
2026-06-11 02:50:18 PLAN/S0404_android-launcher-mode-profiles.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-11 03:21:05 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/PermissionRegistryRepository.kt PermissionRegistryRepository S0402: add getWelcomeEntries(allFiles, audioEnabled) for adaptive onboarding permission set [branch: DEBUG-v013]
2026-06-11 03:21:05 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt PermissionRegistryRepositoryImpl S0402: implement adaptive filter - all-files/manage-media gated on allFiles, RECORD_AUDIO on audio, POST_NOTIFICATIONS relaxed past flavor gate in welcome mode [branch: DEBUG-v013]
2026-06-11 03:21:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomePermissionsManager.kt WelcomePermissionsManager S0402: flesh adaptive permission page - rows via PermissionRowAdapter, Activity-registered grant-all launchers, state preservation [branch: DEBUG-v013]
2026-06-11 03:21:05 app_v2/src/main/res/layout/page_welcome_permissions.xml page_welcome_permissions S0402: real permission-list page (header + grant-all + RecyclerView) [branch: DEBUG-v013]
2026-06-11 03:21:05 app_v2/src/main/res/layout-land/page_welcome_permissions.xml page_welcome_permissions(land) S0402: landscape permissions page, ids in lockstep [branch: DEBUG-v013]
2026-06-11 03:21:05 app_v2/src/main/res/layout-land/fragment_permissions_management.xml fragment_permissions_management(land) S0402/Rule 11: new landscape counterpart of portrait permissions-management screen [branch: DEBUG-v013]
2026-06-11 03:21:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeFunctionalityController.kt S0400 Flesh welcome functionality controller: capability toggles (file-manager/audio/video/documents-master/OCR/translation) with per-S0396 visibility, post-preset defaults, OCR/translation inline deliverable download with post-install-only enable (S0386 invariant), elements-manager launch [branch: DEBUG-v013]
2026-06-11 03:22:02 app_v2/src/main/res/layout/page_welcome_functionality.xml S0400 Welcome functionality page (portrait): header + ScrollView of capability toggle rows (SettingsToggleRow) with inline OCR/translation download progress groups (live-region status) + downloadable-elements button [branch: DEBUG-v013]
2026-06-11 03:22:06 app_v2/src/main/res/layout-land/page_welcome_functionality.xml S0400 Welcome functionality page (landscape): ids in lockstep with portrait variant (Rule 11) [branch: DEBUG-v013]
2026-06-11 03:26:42 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/RealDeliverableSetDownloader.kt S0401 Add install-source gate: native code sets (OCR_ENGINES, FFMPEG_DTS) on Play installs take a Play-compliant graceful branch (no GitHub fetch); non-Play path unchanged [branch: DEBUG-v013]
2026-06-11 03:26:48 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryImpl.kt S0401 Flavor-scope the extensions inventory: emit a row only when its set is offered (OCR/translation via compiled capability, media-playback via contributed descriptor or bundled set); lite/photos show no non-installable rows [branch: DEBUG-v013]
2026-06-11 03:26:50 app_v2/src/test/java/com/sza/fastmediasorter/data/delivery/RealDeliverableSetDownloaderGateTest.kt S0401 Unit tests for the install-source gate: Play-branch vs source-failover branch by install source for OCR_ENGINES/FFMPEG_DTS; AUDIO_VISUALIZATIONS never gated [branch: DEBUG-v013]
2026-06-11 03:26:51 app_v2/src/test/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryFilterTest.kt S0401 Unit tests for the inventory flavor filter: getExtensions omits rows without an offered set; keeps language rows only with OCR [branch: DEBUG-v013]
2026-06-11 03:51:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity S0399/S0400/S0402: pager hosts profiles(1)/functionality(3)/permissions(4) pages; retired terminal permission overlay so Finish completes directly; removed device-profile dialog wrapper [branch: DEBUG-v013]
2026-06-11 03:52:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt WelcomePagerAdapter S0399/S0400/S0402: added PROFILES/FUNCTIONALITY/PERMISSIONS view types + onBind page callbacks; removed page-0 profile selector card and its helpers [branch: DEBUG-v013]
2026-06-11 03:52:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt WelcomeViewModel S0399: exposed selectableProfiles() for the dedicated device-profile page [branch: DEBUG-v013]
2026-06-11 03:52:00 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/CapabilityAvailability.kt CapabilityAvailability S0400: added CAP_TRANSLATION_DFM + isTranslationViaDynamicFeature() to gate the welcome translation toggle on non-Play installs [branch: DEBUG-v013]
2026-06-11 03:52:01 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/InstallSourceProvider.kt InstallSourceProvider S0400/S0401: new install-source detector (isPlayInstall via getInstallSourceInfo, legacy fallback) shared by the .so delivery gate and translation toggle [branch: DEBUG-v013]
2026-06-11 03:52:01 app_v2/src/translationDynamicFeature/java/com/sza/fastmediasorter/di/TranslationDynamicFeatureCapabilityModule.kt TranslationDynamicFeatureCapabilityModule S0400: contributes CAP_TRANSLATION_DFM in the dynamic-feature translation source set (standard/vr) [branch: DEBUG-v013]
2026-06-11 03:52:01 app_v2/src/main/res/values/strings_setup.xml strings_setup S0399/S0400/S0402: added welcome profiles/functionality/permissions page strings (EN/RU/UK lockstep) [branch: DEBUG-v013]
2026-06-11 03:52:01 dev/CATALOG/scripts/scan.ps1 scan.ps1 Catalog: scan translationDynamicFeature/translationMlKit/vrOnly source sets (+11 records) [branch: DEBUG-v013]
2026-06-11 09:56:43 PLAN/S0405_always-on-top-overlay-screenshot/research/ spec S0405: resolve research items 3/5/7 (receiver coverage, flavor scope, FGS mediaProjection); 6.4 policy + 6.2 mechanism remain owner decisions [branch: DEBUG-v013]
2026-06-11 10:06:26 PLAN/S0403_fdroid-foss-flavor.md spec Research S0403 section 6: resolve all 7 F-Droid items, add research artifacts, update risks [branch: DEBUG-v013]
2026-06-11 10:08:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/holders/ProfilesPageViewHolder.kt ProfilesPageViewHolder S0399 fix: rebuild grid when recommendation resolves (async) so the recommended badge + auto-scroll are not lost to the bind/detection race [branch: DEBUG-v013]
2026-06-11 10:08:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt WelcomePagerAdapter S0399 fix: cache latest detector recommendation/selection and replay it on profiles-holder bind (covers detection-resolves-before-bind race) [branch: DEBUG-v013]
2026-06-11 10:08:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeFunctionalityController.kt WelcomeFunctionalityController S0400 fix: hide OCR toggle on Play installs (S0401 gates OCR .so off Play; offering it would dead-end) [branch: DEBUG-v013]
2026-06-11 10:08:26 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt PermissionRegistryRepositoryImpl S0402 fix: getGroups() derives headers from SDK-applicable entries (ignoring flavor gates) so the welcome POST_NOTIFICATIONS relaxation renders its NOTIFICATION group [branch: DEBUG-v013]
2026-06-11 11:27:32 PLAN/S0405_always-on-top-overlay-screenshot.md spec S0405: refine to edge gesture-strip model (Overlay gestures toggle, swipe-down screenshot, destination default Screenshots->Downloads); add research 6.8-6.11; flag left-edge Back-gesture conflict as key feasibility risk [branch: DEBUG-v013]
2026-06-11 11:33:28 PLAN/S0404_android-launcher-mode-profiles.md spec S0404 research expanded: noLegal-first capability ladder, custom status bar, all-apps + Android-settings; tactical plan superseded [branch: DEBUG-v013]
2026-06-11 11:33:28 PLAN/S0404_android-launcher-mode-profiles/research/04__custom-status-bar-and-kiosk.md research S0404 R04: custom status bar + kiosk privilege tiers [branch: DEBUG-v013]
2026-06-11 11:33:28 PLAN/S0404_android-launcher-mode-profiles/research/05__android-settings-and-quick-targets.md research S0404 R05: all-apps + Android settings intents [branch: DEBUG-v013]
2026-06-11 11:33:28 PLAN/S0404_android-launcher-mode-profiles/research/06__nolegal-first-rationale.md research S0404 R06: noLegal-first rationale + capability ladder [branch: DEBUG-v013]
2026-06-11 11:33:28 PLAN/S0404_android-launcher-mode-profiles/INDEX.md spec-tech Mark tactical plan superseded pending re-tactical [branch: DEBUG-v013]
2026-06-11 11:34:43 PLAN/S0403_fdroid-foss-flavor/research/ spec Add S0403 technical-readiness research artifacts 08-14 + INDEX; update spec risks/criteria for spec-tech [branch: DEBUG-v013]
2026-06-11 11:37:19 PLAN/S0405_always-on-top-overlay-screenshot.md spec S0405: adopt One Hand Operation+ as UX model (research/12); resolve 6.9 Back-gesture conflict as product decision (edge occupied, other-edge later); confirm no-a11y path = screenshot via MediaProjection only; add ADR-4 [branch: DEBUG-v013]
2026-06-11 11:42:48 PLAN/S0405_always-on-top-overlay-screenshot.md spec S0405: phased rollout decision (ADR-5) - noLegal sideload first (no Play gate), then standard/photos on Play; correct earlier noLegal exclusion (noLegal carries full standard surface on phones, VR runtime-gated); 6.4 no longer blocks start [branch: DEBUG-v013]
2026-06-11 11:57:08 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md spec-tech Create tactical plan for S0405 (6 phases, noLegal-first) [branch: DEBUG-v013]
2026-06-11 11:57:08 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_01__capability-settings-model.md spec-tech Phase 01: capability contract + settings model [branch: DEBUG-v013]
2026-06-11 11:57:08 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_02__screenshot-save-path.md spec-tech Phase 02: screenshot save path [branch: DEBUG-v013]
2026-06-11 11:57:08 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_03__nolegal-capture-service.md spec-tech Phase 03: noLegal MediaProjection capture service [branch: DEBUG-v013]
2026-06-11 11:57:08 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_04__nolegal-gesture-overlay.md spec-tech Phase 04: noLegal gesture overlay + controller [branch: DEBUG-v013]
2026-06-11 11:57:08 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_05__settings-ui.md spec-tech Phase 05: settings UI [branch: DEBUG-v013]
2026-06-11 11:57:08 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs/catalog cleanup [branch: DEBUG-v013]
2026-06-11 11:57:08 PLAN/S0405_always-on-top-overlay-screenshot.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-11 12:03:38 PLAN/S0404_android-launcher-mode-profiles.md spec S0404 owner decisions: iteration-1 basic level, lite excluded, overlay status bar on standard, kiosk/provisioning deferred to iteration-2 [branch: DEBUG-v013]
2026-06-11 12:07:28 PLAN/S0403_fdroid-foss-flavor/INDEX.md spec-tech Create tactical plan for S0403 (7 phases) [branch: DEBUG-v013]
2026-06-11 12:07:28 PLAN/S0403_fdroid-foss-flavor/PHASE_01__cast-controller-seam.md spec-tech Phase 01: cast-controller-seam [branch: DEBUG-v013]
2026-06-11 12:07:28 PLAN/S0403_fdroid-foss-flavor/PHASE_02__wear-datalayer-seam.md spec-tech Phase 02: wear-datalayer-seam [branch: DEBUG-v013]
2026-06-11 12:07:28 PLAN/S0403_fdroid-foss-flavor/PHASE_03__foss-flavor-skeleton.md spec-tech Phase 03: foss-flavor-skeleton [branch: DEBUG-v013]
2026-06-11 12:07:28 PLAN/S0403_fdroid-foss-flavor/PHASE_04__foss-source-sets.md spec-tech Phase 04: foss-source-sets [branch: DEBUG-v013]
2026-06-11 12:07:29 PLAN/S0403_fdroid-foss-flavor/PHASE_05__translate-feature-decouple.md spec-tech Phase 05: translate-feature-decouple [branch: DEBUG-v013]
2026-06-11 12:07:29 PLAN/S0403_fdroid-foss-flavor/PHASE_06__fdroid-compliance-delivery.md spec-tech Phase 06: fdroid-compliance-delivery [branch: DEBUG-v013]
2026-06-11 12:07:29 PLAN/S0403_fdroid-foss-flavor/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-11 12:07:29 PLAN/S0403_fdroid-foss-flavor.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-11 12:17:59 PLAN/S0405_always-on-top-overlay-screenshot.md spec-tech S0405: resolve UX forks (settings placement, toast indicator, portrait-only, any-resource dest); close 6.6 [branch: DEBUG-v013]
2026-06-11 12:17:59 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_03__nolegal-capture-service.md spec-tech Phase 03: move capture strings here (producer-before-consumer); toast with resource+filename [branch: DEBUG-v013]
2026-06-11 12:17:59 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_05__settings-ui.md spec-tech Phase 05: collapsible System-apps group / Screen-gestures subgroup; strings split [branch: DEBUG-v013]
2026-06-11 12:24:31 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenGestureOverlayController.kt ScreenGestureOverlayController added flavor-agnostic overlay controller contract [branch: DEBUG-v013]
2026-06-11 12:24:31 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_01__capability-settings-model.md S0405 phase 01 marked step 01.1 as in progress for spec-dev execution [branch: DEBUG-v013]
2026-06-11 12:24:32 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index marked phase 01 as in progress for spec-dev execution [branch: DEBUG-v013]
2026-06-11 12:26:22 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced phase 01 step counter after step 01.1 completion [branch: DEBUG-v013]
2026-06-11 12:26:22 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_01__capability-settings-model.md S0405 phase 01 completed step 01.1 and recorded verification log [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles/INDEX.md spec-tech Re-author tactical plan for S0404 (iteration-1 scope) [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles/PHASE_06__role-settings-entry.md spec-tech Phase 06: role + settings entry on Playback page [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles/PHASE_05__profile-content.md spec-tech Phase 05: profile-content [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles/PHASE_02__config-persistence.md spec-tech Phase 02: config-persistence (DataStore) [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles/PHASE_01__capability-foundation.md spec-tech Phase 01: capability-foundation [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles/PHASE_03__apps-registry.md spec-tech Phase 03: apps-registry flavor-split + system targets [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles/PHASE_04__home-surface.md spec-tech Phase 04: home-surface + in-activity status bar [branch: DEBUG-v013]
2026-06-11 12:28:47 PLAN/S0404_android-launcher-mode-profiles.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-11 12:38:13 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_01__capability-settings-model.md S0405 phase 01 marked step 01.2 as in progress for spec-dev execution [branch: DEBUG-v013]
2026-06-11 12:38:14 app_v2/src/main/java/com/sza/fastmediasorter/di/ScreenGestureOverlayModule.kt ScreenGestureOverlayModule declared multibinding set for screen gesture overlay controllers [branch: DEBUG-v013]
2026-06-11 12:41:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt PlayerCropDelegate removed stale S0393 temporary debug probe [branch: DEBUG-v013]
2026-06-11 12:42:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneKeyboardManager.kt StandaloneKeyboardManager removed stale S0393 temporary debug probe [branch: DEBUG-v013]
2026-06-11 12:44:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt DocumentStandaloneActivity removed stale S0393 temporary debug probe [branch: DEBUG-v013]
2026-06-11 12:46:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt PhotoVideoStandaloneActivity removed stale S0393 temporary debug probes [branch: DEBUG-v013]
2026-06-11 12:46:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player S0393 Phase 08: inserted S0393 device-test verification tags at 5 changed-flow entry points (seam crop, standalone PiP, playback-control dialog, shared keyboard layer, WebView ActionMode); refreshed S0392 MATRIX audio-keyboard row; standard+noLegal debug green [branch: DEBUG-v013]
2026-06-11 12:47:56 app_v2/src/main/java/com/sza/fastmediasorter/di/ScreenGestureOverlayModule.kt ScreenGestureOverlayModule declared multibinding set for screen gesture overlay controllers [branch: DEBUG-v013]
2026-06-11 12:50:26 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt AppSettings added gesture overlay and screenshot destination settings fields [branch: DEBUG-v013]
2026-06-11 12:52:03 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced phase 01 step counter after step 01.2 completion and step 01.3 start [branch: DEBUG-v013]
2026-06-11 12:52:04 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_01__capability-settings-model.md S0405 phase 01 completed step 01.2 and started step 01.3 [branch: DEBUG-v013]
2026-06-11 12:53:56 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/ScreenshotSettingsStore.kt ScreenshotSettingsStore added store for gesture overlay screenshot settings keys [branch: DEBUG-v013]
2026-06-11 12:55:48 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt SettingsRepositoryImpl wired screenshot settings store into app settings read and write paths [branch: DEBUG-v013]
2026-06-11 12:57:32 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced phase 01 step counter after steps 01.3 through 01.5 [branch: DEBUG-v013]
2026-06-11 12:57:35 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_01__capability-settings-model.md S0405 phase 01 completed steps 01.3 through 01.5 with verification logs [branch: DEBUG-v013]
2026-06-11 13:22:41 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index marked phase 01 complete after validation [branch: DEBUG-v013]
2026-06-11 13:22:42 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_01__capability-settings-model.md S0405 phase 01 marked phase 01 done after compile and verification gates [branch: DEBUG-v013]
2026-06-11 13:26:39 app_v2/src/main/java/com/sza/fastmediasorter/util/ScreenshotDestinationPolicy.kt ScreenshotDestinationPolicy added pure screenshot destination resolver with screenshots and downloads fallback [branch: DEBUG-v013]
2026-06-11 13:27:46 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_02__screenshot-save-path.md S0405 phase 02 marked step 02.1 as in progress for spec-dev execution [branch: DEBUG-v013]
2026-06-11 13:32:35 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_02__screenshot-save-path.md S0405 Phase 02 Step 02.1 marked ScreenshotDestinationPolicy step done [branch: DEBUG-v013]
2026-06-11 13:32:41 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced Phase 02 to in progress [branch: DEBUG-v013]
2026-06-11 13:34:18 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveScreenshotUseCase.kt SaveScreenshotUseCase added screenshot saver use case [branch: DEBUG-v013]
2026-06-11 13:35:30 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_02__screenshot-save-path.md S0405 Phase 02 Step 02.2 marked SaveScreenshotUseCase step done [branch: DEBUG-v013]
2026-06-11 13:39:48 app_v2/src/test/java/com/sza/fastmediasorter/util/ScreenshotDestinationPolicyTest.kt ScreenshotDestinationPolicyTest added screenshot destination policy tests [branch: DEBUG-v013]
2026-06-11 13:41:01 app_v2/src/test/java/com/sza/fastmediasorter/domain/translation/TranslationLanguageCodeMapperTest.kt TranslationLanguageCodeMapperTest aligned translation mapper test with string-based return type [branch: DEBUG-v013]
2026-06-11 13:42:13 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_02__screenshot-save-path.md S0405 Phase 02 Step 02.3 marked ScreenshotDestinationPolicy test step done [branch: DEBUG-v013]
2026-06-11 13:45:42 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_02__screenshot-save-path.md S0405 Phase 02 closed screenshot save path phase [branch: DEBUG-v013]
2026-06-11 13:45:48 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index marked Phase 02 done and advanced phase counter [branch: DEBUG-v013]
2026-06-11 13:48:10 app_v2/src/noLegal/AndroidManifest.xml noLegal screen capture service manifest added media projection service and permissions [branch: DEBUG-v013]
2026-06-11 13:48:19 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_03__nolegal-capture-service.md S0405 Phase 03 Step 03.1 marked noLegal manifest step done [branch: DEBUG-v013]
2026-06-11 13:48:25 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced Phase 03 to in progress [branch: DEBUG-v013]
2026-06-11 13:49:47 app_v2/src/main/res/values/strings.xml screen_capture_* strings EN added screen capture flow strings [branch: DEBUG-v013]
2026-06-11 13:50:00 app_v2/src/main/res/values-ru/strings.xml screen_capture_* strings RU added screen capture flow strings [branch: DEBUG-v013]
2026-06-11 13:50:13 app_v2/src/main/res/values-uk/strings.xml screen_capture_* strings UK added screen capture flow strings [branch: DEBUG-v013]
2026-06-11 13:50:28 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_03__nolegal-capture-service.md S0405 Phase 03 Step 03.2 marked screen capture string step done [branch: DEBUG-v013]
2026-06-11 13:50:35 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced Phase 03 step counter to 2 of 4 [branch: DEBUG-v013]
2026-06-11 13:55:08 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenCaptureService.kt ScreenCaptureService added noLegal screen capture foreground service [branch: DEBUG-v013]
2026-06-11 13:56:56 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_03__nolegal-capture-service.md S0405 Phase 03 Step 03.3 marked screen capture service step done [branch: DEBUG-v013]
2026-06-11 13:57:04 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced Phase 03 step counter to 3 of 4 [branch: DEBUG-v013]
2026-06-11 14:03:45 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt ScreenGestureOverlayManager added noLegal gesture strip overlay manager [branch: DEBUG-v013]
2026-06-11 14:05:12 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_04__nolegal-gesture-overlay.md S0405 Phase 04 Step 04.1 marked overlay manager step done [branch: DEBUG-v013]
2026-06-11 14:05:12 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced Phase 04 step counter to 1 of 4 [branch: DEBUG-v013]
2026-06-11 14:06:40 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenCaptureConsentActivity.kt ScreenCaptureConsentActivity added MediaProjection consent trampoline activity [branch: DEBUG-v013]
2026-06-11 14:06:40 app_v2/src/noLegal/AndroidManifest.xml noLegal screen capture consent activity declared transparent consent activity [branch: DEBUG-v013]
2026-06-11 14:08:06 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_04__nolegal-gesture-overlay.md S0405 Phase 04 Step 04.2 marked consent trampoline step done [branch: DEBUG-v013]
2026-06-11 14:08:06 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 tactical index advanced Phase 04 step counter to 2 of 4 [branch: DEBUG-v013]
2026-06-11 14:13:52 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/OverlayHostService.kt OverlayHostService added special-use foreground host for screenshot gesture overlay strip [branch: DEBUG-v013]
2026-06-11 14:15:02 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayControllerImpl.kt ScreenGestureOverlayControllerImpl bound noLegal overlay lifecycle control to persisted screenshot overlay capability [branch: DEBUG-v013]
2026-06-11 14:16:19 app_v2/src/noLegal/AndroidManifest.xml noLegal manifest declared overlay host special-use foreground service and permission [branch: DEBUG-v013]
2026-06-11 14:16:19 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_04__nolegal-gesture-overlay.md Phase 04 recorded step 04.3 completion and verification evidence [branch: DEBUG-v013]
2026-06-11 14:16:20 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 index advanced phase 04 step counter to 3 of 4 [branch: DEBUG-v013]
2026-06-11 14:17:30 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/ScreenCaptureModule.kt ScreenCaptureModule bound noLegal screenshot overlay controller into the multibinding set [branch: DEBUG-v013]
2026-06-11 14:18:44 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_04__nolegal-gesture-overlay.md Phase 04 recorded step 04.4 completion and verification evidence [branch: DEBUG-v013]
2026-06-11 14:18:45 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 index advanced phase 04 step counter to 4 of 4 [branch: DEBUG-v013]
2026-06-11 14:24:57 PLAN/S0405_always-on-top-overlay-screenshot/PHASE_04__nolegal-gesture-overlay.md Phase 04 marked phase 04 done after build and manifest gate checks [branch: DEBUG-v013]
2026-06-11 14:24:58 PLAN/S0405_always-on-top-overlay-screenshot/INDEX.md S0405 index marked phase 04 done and advanced completed phase count to 3 of 6 [branch: DEBUG-v013]
2026-06-11 14:33:09 app_v2/src/main/res/values/strings.xml spec-dev S0405 phase-05.2 Add screen-gesture overlay + screenshot settings strings (EN) [branch: DEBUG-v013]
2026-06-11 14:33:18 app_v2/src/main/res/values-ru/strings.xml spec-dev S0405 phase-05.2 Add screen-gesture overlay + screenshot settings strings (RU) [branch: DEBUG-v013]
2026-06-11 14:33:26 app_v2/src/main/res/values-uk/strings.xml spec-dev S0405 phase-05.2 Add screen-gesture overlay + screenshot settings strings (UK) [branch: DEBUG-v013]
2026-06-11 14:35:14 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0405 phase-05.1 Add System apps settings group (screen-gesture overlay rows + screenshot destination) [branch: DEBUG-v013]
2026-06-11 14:35:22 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0405 phase-05.1 Add System apps settings group (landscape mirror) [branch: DEBUG-v013]
2026-06-11 14:38:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0405 phase-05.3 Wire screen-gesture overlay settings: toggles, destination picker, draw-over-apps permission flow [branch: DEBUG-v013]
2026-06-11 14:39:55 app_v2/src/main/java/com/sza/fastmediasorter/core/di/AppModule.kt AppModule Bypass Timber.e error logging in OkHttp interceptor for delivery-manifest.json 404 responses since its absence is a handled, non-error condition. [branch: DEBUG-v013]
2026-06-11 14:41:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchRegistry.kt spec-dev S0405 phase-05.4 settings-search registry does not enumerate playback rows - skipped (auto XML-scan indexer; availability gating is media-section-only, no per-row capability gate - new rows behave like existing conditionally-hidden playback rows OCR/mic/PiP) [branch: DEBUG-v013]
2026-06-11 14:43:21 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenCaptureService.kt spec-dev S0405 phase-03.4 Add S0405 BlockNeedUserTest debug probe at capture-success entry point [branch: DEBUG-v013]
2026-06-11 14:43:32 PLAN/S0403_fdroid-foss-flavor/research/15__ui-entrypoint-invisibility.md spec-tech Research 15: UI entry-point invisibility audit (cloud/OCR/translation/Cast/Wear) [branch: DEBUG-v013]
2026-06-11 14:43:32 PLAN/S0403_fdroid-foss-flavor/PHASE_07__foss-ui-invisibility.md spec-tech Phase 07 (new): foss-ui-invisibility - removed features absent from UI [branch: DEBUG-v013]
2026-06-11 14:43:32 PLAN/S0403_fdroid-foss-flavor/PHASE_08__docs-catalog-cleanup.md spec-tech Renumber docs phase 07 -> 08 [branch: DEBUG-v013]
2026-06-11 14:43:32 PLAN/S0403_fdroid-foss-flavor/INDEX.md spec-tech Add Phase 07 ui-invisibility; 8 phases; UI-invisibility requirement [branch: DEBUG-v013]
2026-06-11 14:43:33 PLAN/S0403_fdroid-foss-flavor.md spec-tech Strategic: explicit no-UI-visibility + SFTP/SMB retention + OCR cut [branch: DEBUG-v013]
2026-06-11 14:54:22 docs/FEATURES_noLegal.md spec-dev S0405 phase-06.1 Document screen-gesture screenshot overlay (noLegal-only capability) [branch: DEBUG-v013]
2026-06-11 14:54:22 docs/FEATURES_noLegal_RU.md spec-dev S0405 phase-06.1 Document screen-gesture screenshot overlay (noLegal-only capability) [branch: DEBUG-v013]
2026-06-11 14:54:23 docs/FEATURES_noLegal_UK.md spec-dev S0405 phase-06.1 Document screen-gesture screenshot overlay (noLegal-only capability) [branch: DEBUG-v013]
2026-06-11 14:56:09 dev/CATALOG/app_v2.jsonl spec-dev S0405 phase-06.2 Mark 6 noLegal-only screencapture classes with -NoFlavors standard,lite,photos,legacy,vr + role/status=new; catalog re-rendered [branch: DEBUG-v013]
2026-06-11 15:17:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/delivery/ExtensionsManagerFragment.kt Extensions Manager Merge OCR+Translation groups; add Install all/Delete all footer buttons; apply system-bar/cutout insets to header+footer (edge-to-edge fix) [branch: DEBUG-v013]
2026-06-11 15:23:38 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt WelcomeActivity crash fix Guard deferred setupViews()/onLayoutConfigurationChanged() posts against destroyed-before-post race: bail out when _binding is null or Activity isDestroyed. Fixes ISE ‘Binding is only valid..’ when WelcomeActivity forces a night-mode recreate in onCreate. [branch: DEBUG-v013]
2026-06-11 16:03:40 PLAN/S0406_unified-settings-backup.md spec Add strategic spec S0406 for unified settings backup (single payload, two storages) [branch: DEBUG-v013]
2026-06-11 16:11:25 PLAN/S0406_unified-settings-backup/INDEX.md spec-tech Create tactical plan for S0406 (7 phases) [branch: DEBUG-v013]
2026-06-11 16:30:37 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt BackupData S0406: Backup payload schema (v5) incl secrets [branch: DEBUG-v013]
2026-06-11 16:30:38 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt BackupMapper S0406: Map secrets+creds sections [branch: DEBUG-v013]
2026-06-11 16:30:38 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BuildBackupPayloadUseCase.kt BuildBackupPayloadUseCase S0406: New unified payload builder [branch: DEBUG-v013]
2026-06-11 16:30:38 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyBackupPayloadUseCase.kt ApplyBackupPayloadUseCase S0406: New unified payload applier [branch: DEBUG-v013]
2026-06-11 16:30:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt ExportSettingsUseCase S0406: Rewire local export to unified JSON [branch: DEBUG-v013]
2026-06-11 16:30:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt ImportSettingsUseCase S0406: JSON/XML detect import [branch: DEBUG-v013]
2026-06-11 16:30:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupToGoogleDriveUseCase.kt BackupToGoogleDriveUseCase S0406: Use unified builder [branch: DEBUG-v013]
2026-06-11 16:30:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RestoreFromGoogleDriveUseCase.kt RestoreFromGoogleDriveUseCase S0406: Use unified applier [branch: DEBUG-v013]
2026-06-11 16:30:40 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/AuthSessionRepository.kt AuthSessionRepository S0406: exportSessions/importSessions [branch: DEBUG-v013]
2026-06-11 16:30:40 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AuthSessionRepositoryImpl.kt AuthSessionRepositoryImpl S0406: Session export/import impl [branch: DEBUG-v013]
2026-06-11 16:30:40 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/BackupMapperRoundTripTest.kt BackupMapperRoundTripTest S0406: S0406 round-trip tests [branch: DEBUG-v013]
2026-06-11 16:30:58 docs/FEATURES.md FEATURES S0406: Unified settings backup feature line (EN) [branch: DEBUG-v013]
2026-06-11 16:30:58 docs/FEATURES_RU.md FEATURES_RU S0406: Unified settings backup feature line (RU) [branch: DEBUG-v013]
2026-06-11 16:30:58 docs/FEATURES_UK.md FEATURES_UK S0406: Unified settings backup feature line (UK) [branch: DEBUG-v013]
2026-06-11 16:30:59 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/BackupToGoogleDriveUseCaseTest.kt BackupToGoogleDriveUseCaseTest S0406: adapt to unified builder ctor [branch: DEBUG-v013]
2026-06-11 16:30:59 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/RestoreFromGoogleDriveUseCaseTest.kt RestoreFromGoogleDriveUseCaseTest S0406: adapt to unified applier ctor [branch: DEBUG-v013]
2026-06-11 16:52:40 scripts/quality/ neuroslop gate Add Tier-1 neuroslop detectors: assert-globalscope (GlobalScope usage, baseline 0), assert-nontimber-log (android.util.Log.*/System.out, baseline 4), assert-stub-todo (TODO()/NotImplementedError, baseline 3). Wired into assert-neuroslop.ps1 orchestrator (now 7 dimensions). Extended CLAUDE.md Rule 19. Bare println/print intentionally excluded (PrintWriter + document-print domain FPs). [branch: DEBUG-v013]
2026-06-11 17:30:45 app_v2/src/translationMlKit/.../PrewarmTranslationModelUseCase.kt + TranslationBackend.kt MlKit crash fix Fix IllegalStateException ‘MlKitContext has not been initialized’ crashing Settings on open (standard flavor). Made RemoteModelManager.getInstance() lazy in both eager field initializers - on store flavors MlKitInitProvider lives in on-demand :translate_feature (removed from base manifest, S0386), so eager getInstance() at @Singleton construction crashed. Deferred to first use; both call sites already guarded by try/catch + capability gate. assembleStandardDebug green. [branch: DEBUG-v013]
2026-06-11 17:52:48 PLAN/S0386_ondemand-ocr-translation-delivery.md + translationMlKit/*.kt S0386 Fold ML Kit lazy-init crash fix into S0386: added 5.5 regression note + re-test steps, refreshed status note (stays BlockNeedUserTest), inserted 2 Timber.d(S0386:) device-test probes (prewarm entry + lazy modelManager access). assembleStandardDebug green with probes. [branch: DEBUG-v013]
2026-06-11 18:31:49 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-tech Create tactical plan for S0391 [branch: DEBUG-v013]
2026-06-11 18:31:49 PLAN/S0391_remote-source-runtime-toggles/PHASE_01__settings-state.md spec-tech Phase 01: settings-state [branch: DEBUG-v013]
2026-06-11 18:31:49 PLAN/S0391_remote-source-runtime-toggles/PHASE_02__availability-gate.md spec-tech Phase 02: availability-gate [branch: DEBUG-v013]
2026-06-11 18:31:50 PLAN/S0391_remote-source-runtime-toggles/PHASE_03__new-entry-gating.md spec-tech Phase 03: new-entry-gating [branch: DEBUG-v013]
2026-06-11 18:31:50 PLAN/S0391_remote-source-runtime-toggles/PHASE_04__existing-resource-gating.md spec-tech Phase 04: existing-resource-gating [branch: DEBUG-v013]
2026-06-11 18:31:50 PLAN/S0391_remote-source-runtime-toggles/PHASE_05__settings-welcome-ux.md spec-tech Phase 05: settings-welcome-ux [branch: DEBUG-v013]
2026-06-11 18:31:51 PLAN/S0391_remote-source-runtime-toggles/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-11 18:31:51 PLAN/S0391_remote-source-runtime-toggles.md spec-tech Status → Tactical [branch: DEBUG-v013]
2026-06-11 22:36:25 app_v2/src/main/res/layout-land/page_welcome_functionality.xml S0400 functionality page Landscape functionality page: two-column toggle layout with per-toggle descriptions [branch: DEBUG-v013]
2026-06-11 23:03:39 app_v2/src/main/res/layout/page_welcome_permissions.xml S0402 permissions page Permissions page: compact header (no icon), grant-all + open-settings on one row, list in bounded scrollable card; tighter shared permission rows [branch: DEBUG-v013]
2026-06-11 23:15:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomePermissionsManager.kt S0402 grant-all flow Grant-all: request DENIED+PERMANENTLY_DENIED regular perms (first-run perms misclassify as permanently denied); show grant-all CTA while anything is ungranted [branch: DEBUG-v013]
2026-06-12 01:59:29 README.md Author contacts Add author’s page sza.od.ua to README and FAQ (EN/RU/UK) contact sections [branch: DEBUG-v013]
2026-06-12 03:11:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/DefaultPlayerProbe.kt app_v2 Short-circuit default-player probe URI in all standalone player hosts (audio/photo-video/document/text) + dispatcher so the 1-byte stub never reaches ExoPlayer/viewers; extract probe check to shared DefaultPlayerProbe helper [branch: DEBUG-v013]
2026-06-12 12:12:59 scripts/builders/build-debug.PS1 debug build flow Switched standard debug builds to stable-version fast path, added fast validation wrappers/aliases, and documented when to use compile/resources checks vs full APK builds. [branch: DEBUG-v013]
2026-06-12 12:13:13 app_v2/build.gradle.kts debug version override fast path Added Gradle property-based version overrides so fast debug builds stop mutating tracked build files and can reuse configuration cache. [branch: DEBUG-v013]
2026-06-12 12:35:15 app_v2/build.gradle.kts XR native task gating Enabled the CMake/prefab pipeline only for vr and noLegal task graphs so standard debug builds stop running empty native ABI work while XR flavors keep the bridge. [branch: DEBUG-v013]
2026-06-12 14:41:25 app_v2/src/test Standard unit test suite Repair all broken standard unit tests: align 7 stale-expectation tests (CanonicalPathNormalizer host-FS guard, NetworkErrorMessageMapper, AddResourceUseCase, ProvisionDefaultResources, SearchAudioCover, CollapsibleSectionHeader, StereoVideoProcessor S0264 null contract); add Robolectric sdk-34 pins to 4 framework-touching tests; delete obsolete GoogleDriveTokenRefreshTest. Fix root-cause suite OOM in PrefetchProgressTrackerTest (collected replay-0 escalation SharedFlow after emit while the markReady poll loop spun the test scheduler into an unbounded DefaultExecutor OOM); now subscribes before emit via backgroundScope plus runCurrent. Inject probeDispatcher into DiscoverNetworkResourcesUseCase so the 254-host fan-out runs on the test scheduler and stops racing probedPorts. [branch: DEBUG-v013]
2026-06-12 16:24:19 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt S0406 Auto-search import: add direct Downloads File fallback for backups not owned by current install (scoped-storage owner filter made reinstalled/other-variant backups invisible) [branch: DEBUG-v013]
2026-06-12 16:27:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomePermissionsManager.kt S0402 Fix: welcome permissions set was built from a one-shot settings snapshot at attach() time, so file-manager (allFiles) chosen on a later welcome page was missed and All Files Access / Manage Media never appeared in grant-all. Now resolved reactively by collecting the settings flow. [branch: DEBUG-v013]
2026-06-12 16:33:27 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt S0402 Welcome permissions page now lists every permission the build can request (full SDK/flavor registry set) instead of narrowing by allFiles/audio functionality toggles; user opts out by leaving a permission ungranted. getWelcomeEntries() drops its allFiles/audioEnabled params; WelcomePermissionsManager resolves the static set once and no longer depends on SettingsRepository. [branch: DEBUG-v013]
2026-06-12 16:36:20 PLAN/S0407_audio-player-extra-visualizations.md spec Add strategic spec skeleton S0407 for extra audio-player visualizations (Draft) [branch: DEBUG-v013]
2026-06-12 16:53:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt CommandPanelLayoutPlanner Rank EDIT_TEXT ahead of RENAME on text player command bar [branch: DEBUG-v013]
2026-06-12 16:57:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextFilePager.kt bugfix S0408: guard RandomAccessFile.close against EIO during player teardown [branch: DEBUG-v013]
2026-06-12 17:14:06 PLAN/S0407_audio-player-extra-visualizations/research/05__generation-prompts.md spec S0407: research - AI generation source (Veo) + 5 generation prompts; status -> BlockExternal (asset production) [branch: DEBUG-v013]
2026-06-12 17:22:45 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDownloadRunnerImpl.kt spec-tech S0397: add BlockNeedUserTest verification tags (enqueue/progressOf) [branch: DEBUG-v013]
2026-06-12 17:22:45 app_v2/src/main/java/com/sza/fastmediasorter/worker/DeliverableDownloadWorker.kt spec-tech S0397: add BlockNeedUserTest verification tag (worker doWork) [branch: DEBUG-v013]
2026-06-12 17:25:38 PLAN/S0239_credential-manager-gms-version-guard.md spec-arc Archive S0239 (credential-manager-gms-version-guard) -> temp/done/ [branch: DEBUG-v013]
2026-06-12 17:25:38 app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt spec-arc S0239: remove BlockNeedUserTest verification tags on archive [branch: DEBUG-v013]
2026-06-12 18:35:18 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch emulator sweep on emulator-5554 (API27, standard 2.60.6121.144): closed 3 (S0397/S0399/S0363 Verified), reopened 1 (S0358 Broken - Play random shows LOOP_LIST not Shuffle on audio), 7 partial-kept (S0408/S0356/S0398/S0400/S0401/S0402/S0390/S0374), VR/noLegal/external out of scope [branch: DEBUG-v013]
2026-06-12 19:17:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt S0358 Fix Play random not flipping audio playback-order button to Shuffle: syncPlaybackOrderForCurrentResource was orphaned in dead PlayerActivity.updateUI(); wired into live PlayerObserverManager.updateUI() path. Emulator-verified, status Verified [branch: DEBUG-v013]
2026-06-12 20:33:19 PLAN/S0385_apk-aab-dead-weight-reduction.md spec-check Audit S0385 -> Verified; PASS/WARN/FAIL 23/0/0 (4 manual release-build re-proofs) [branch: DEBUG-v013]
2026-06-12 20:33:20 PLAN/S0392_player-family-parity-research.md spec-check Audit S0392 -> Verified; PASS/WARN/FAIL 9/0/0; research deliverable complete, spawned S0393 [branch: DEBUG-v013]
2026-06-12 20:33:20 PLAN/S0395_welcome-screens-redesign-research.md spec-check Audit S0395 -> Verified; PASS/WARN/FAIL 9/0/0; decomposed into S0396-S0402 [branch: DEBUG-v013]
2026-06-12 20:33:20 PLAN/S0396_welcome-availability-contract.md spec-check Audit S0396 -> Verified; PASS/WARN/FAIL 24/0/0; capability-availability contract confirmed [branch: DEBUG-v013]
2026-06-12 20:33:20 PLAN/S0308_password-protected-files.md spec-check Audit S0308 -> Broken; PASS/WARN/FAIL 33/1/3; missing trilingual FEATURES bullet for protected archives [branch: DEBUG-v013]
2026-06-12 20:36:29 docs/FEATURES.md S0308 spec-fix: add trilingual Protected archive extraction FEATURES bullet (EN/RU/UK) + correct Phase02.3 predicate file; S0308 -> Verified [branch: DEBUG-v013]
2026-06-12 20:47:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-arc Archive S0398/S0400/S0402 (welcome pages, were BlockNeedUserTest): removed their Timber.d device-test tags across WelcomeActivity/WelcomePagerAdapter/WelcomeViewModel/WelcomeFunctionalityController/WelcomePermissionsManager; specs -> temp/done/ [branch: DEBUG-v013]
2026-06-12 21:51:09 wear/src/main/java/com/sza/fastmediasorter/wear/ui/permission/PermissionsScreen.kt wear permissions screen Fix Grant Access action: replace circular Wear Button with full-width Chip (text no longer clipped into a circle) [branch: DEBUG-v013]
2026-06-12 22:04:31 app_v2/src/main/res/values-night/colors.xml Welcome onboarding Fix night-mode functionality page background: replace bright Orange 900 (#E65100) with deep burnt orange (#4E2600) for legible white text and consistency with sibling pages [branch: DEBUG-v013]
2026-06-12 22:13:23 wear/src/main/AndroidManifest.xml wear launcher icon Replace Wear launcher icon set with a new watch-specific asset and bind it in the manifest [branch: DEBUG-v013]
2026-06-12 22:17:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt Welcome onboarding Fix first-run device-profile preset being cancelled on Finish: persist profile save+apply on applicationScope (survives Activity finish), capture reentry flag synchronously before navigation; rethrow CancellationException in ApplyProfilePresetUseCase so cancellation is not logged as error [branch: DEBUG-v013]
2026-06-12 22:29:09 docs/QUICK_START.md QUICK_START Document onboarding functionality-setup step (capability toggles + inline optional-element download) in the first-launch flow [branch: DEBUG-v013]
2026-06-12 22:29:09 docs/QUICK_START_RU.md QUICK_START_RU Document onboarding functionality-setup step (capability toggles + inline optional-element download) in the first-launch flow [branch: DEBUG-v013]
2026-06-12 22:29:09 docs/QUICK_START_UK.md QUICK_START_UK Document onboarding functionality-setup step (capability toggles + inline optional-element download) in the first-launch flow [branch: DEBUG-v013]
2026-06-12 23:34:02 PLAN/S0409_welcome-enable-all.md spec Add strategic spec S0409 for welcome enable-all button [branch: DEBUG-v013]
2026-06-12 23:46:45 PLAN/S0409_welcome-enable-all/INDEX.md spec-tech Create tactical plan for S0409 (welcome enable-all) [branch: DEBUG-v013]
2026-06-12 23:46:46 PLAN/S0409_welcome-enable-all/PHASE_01__enable-all-settings-usecase.md spec-tech S0409 phase: PHASE_01__enable-all-settings-usecase [branch: DEBUG-v013]
2026-06-12 23:46:46 PLAN/S0409_welcome-enable-all/PHASE_02__sequencing-seams.md spec-tech S0409 phase: PHASE_02__sequencing-seams [branch: DEBUG-v013]
2026-06-12 23:46:46 PLAN/S0409_welcome-enable-all/PHASE_03__enable-all-orchestrator.md spec-tech S0409 phase: PHASE_03__enable-all-orchestrator [branch: DEBUG-v013]
2026-06-12 23:46:47 PLAN/S0409_welcome-enable-all/PHASE_04__welcome-trigger-ui.md spec-tech S0409 phase: PHASE_04__welcome-trigger-ui [branch: DEBUG-v013]
2026-06-12 23:46:47 PLAN/S0409_welcome-enable-all/PHASE_05__docs-catalog-cleanup.md spec-tech S0409 phase: PHASE_05__docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-12 23:46:47 PLAN/S0409_welcome-enable-all.md spec-tech S0409 status -> Tactical [branch: DEBUG-v013]
2026-06-12 23:48:11 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyEnableAllSettingsUseCase.kt spec-dev S0409 01.1: add ApplyEnableAllSettingsUseCase (enable-all settings whitelist, capability-gated) [branch: DEBUG-v013]
2026-06-12 23:51:03 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ApplyEnableAllSettingsUseCaseTest.kt spec-dev S0409 01.2: unit-test enable-all settings capability gating [branch: DEBUG-v013]
2026-06-12 23:53:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomePermissionsManager.kt spec-dev S0409 02.1: add grant-all completion callback (runGrantAll) [branch: DEBUG-v013]
2026-06-12 23:55:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt spec-dev S0409 02.2: add launch-for-result default-player variant [branch: DEBUG-v013]
2026-06-13 00:01:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeEnableAllManager.kt spec-dev S0409 03: add WelcomeEnableAllManager orchestrator (profile/settings/permissions/default-player sequence) [branch: DEBUG-v013]
2026-06-13 00:03:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeEnableAllManager.kt spec-dev S0409 03: add WelcomeEnableAllManager orchestrator [branch: DEBUG-v013]
2026-06-13 00:06:03 app_v2/src/main/res/values/strings.xml spec-dev S0409 04.1: add welcome_enable_all strings (EN/RU/UK) [branch: DEBUG-v013]
2026-06-13 00:07:40 app_v2/src/main/res/layout/activity_welcome.xml spec-dev S0409 04.2: add Enable-all button to welcome bottom nav [branch: DEBUG-v013]
2026-06-13 00:10:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-dev S0409 04.3: wire Enable-all button + manager into WelcomeActivity [branch: DEBUG-v013]
2026-06-13 00:17:10 app_v2/src/main/res/layout-sw480dp/activity_welcome.xml spec-dev S0409 04.2: add Enable-all button (layout-sw480dp variant) [branch: DEBUG-v013]
2026-06-13 00:17:23 app_v2/src/main/res/layout-sw720dp/activity_welcome.xml spec-dev S0409 04.2: add Enable-all button (layout-sw720dp variant) [branch: DEBUG-v013]
2026-06-13 00:23:14 PLAN/S0409_welcome-enable-all.md spec-dev All 5 phases done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-13 00:23:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeEnableAllManager.kt spec-dev Insert S0409 BlockNeedUserTest debug probe at start() [branch: DEBUG-v013]
2026-06-13 00:23:14 docs/FEATURES.md spec-dev Add One-tap Enable all onboarding entry (EN) [branch: DEBUG-v013]
2026-06-13 00:23:14 docs/FEATURES_RU.md spec-dev Add One-tap Enable all onboarding entry (RU) [branch: DEBUG-v013]
2026-06-13 00:23:14 docs/FEATURES_UK.md spec-dev Add One-tap Enable all onboarding entry (UK) [branch: DEBUG-v013]
2026-06-13 01:05:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsKeyboardNavigationManager.kt SettingsKeyboardNavigationManager Return the actual activation result for OpenCurrent so Settings only consume Enter/Space when a focused control really activates. [branch: DEBUG-v013]
2026-06-13 01:05:10 app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/SettingsKeyboardNavigationManagerTest.kt SettingsKeyboardNavigationManagerTest Add unit coverage for consumed vs unconsumed Enter activation on the Settings keyboard delegate. [branch: DEBUG-v013]
2026-06-13 01:05:10 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt BaseActivity Add a shared keyboard activation helper that walks up from the focused child to the nearest clickable ancestor. [branch: DEBUG-v013]
2026-06-13 01:05:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt SettingsActivity Use the shared ancestor-activation helper so keyboard Enter/Space can expand or toggle focused Settings rows reliably. [branch: DEBUG-v013]
2026-06-13 01:05:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt AddResourceActivity Route keyboard OpenCurrent through the shared ancestor-activation helper for focused form rows and type cards. [branch: DEBUG-v013]
2026-06-13 01:05:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt GoogleDriveFolderPickerActivity Route keyboard OpenCurrent through the shared ancestor-activation helper so focused cloud rows open reliably. [branch: DEBUG-v013]
2026-06-13 01:05:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt DropboxFolderPickerActivity Route keyboard OpenCurrent through the shared ancestor-activation helper so focused cloud rows open reliably. [branch: DEBUG-v013]
2026-06-13 01:05:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt OneDriveFolderPickerActivity Route keyboard OpenCurrent through the shared ancestor-activation helper so focused cloud rows open reliably. [branch: DEBUG-v013]
2026-06-13 01:05:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt WelcomeActivity Use the shared ancestor-activation helper for D-pad Enter/Center so focused onboarding controls activate even when focus lands on a nested child. [branch: DEBUG-v013]
2026-06-13 01:05:11 dev/CATALOG/app_v2.jsonl app_v2 catalog Regenerate the app_v2 code catalog after the keyboard-support activity updates. [branch: DEBUG-v013]
2026-06-13 01:05:11 dev/CATALOG/app_v2.md app_v2 catalog Render the refreshed app_v2 catalog after the keyboard-support activity updates. [branch: DEBUG-v013]
2026-06-13 01:09:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeEnableAllManager.kt spec-dev S0409 fix: enable-all also materializes the All Files predefined resource (OTHER profile does not imply it) [branch: DEBUG-v013]
2026-06-13 01:18:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt Standalone document viewer Fix IllegalStateException crash: displayPdf reset textViewerContainer/btnTranslateImage as required views absent in trimmed document-standalone layout; use setVisibleIfPresent (S0380 seam) [branch: DEBUG-v013]
2026-06-13 01:18:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/EpubViewerManager.kt Standalone document viewer Fix same latent crash on EPUB path: displayEpub reset of textViewerContainer/btnTranslateImage via setVisibleIfPresent instead of required accessors [branch: DEBUG-v013]
2026-06-13 01:44:11 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchLyricsUseCase.kt Lyrics search Fix false-positive lyrics: require Genius song (-lyrics) URL + query-token relevance; reject generic library folder names as fallback artist; demote MediaMetadataRetriever EINVAL failure from ERROR to INFO [branch: DEBUG-v013]
2026-06-13 02:21:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0393 Regate standalone bitmap-only image actions (OCR/translate/print/rotation) off editableImageFile so they show on non-local content-URI images [branch: DEBUG-v013]
2026-06-13 02:21:33 PLAN/S0393_player-host-seam-foundation/INDEX.md S0393 Document Fourth fix: bitmap-action over-gating on non-local images [branch: DEBUG-v013]
2026-06-13 02:43:17 PLAN/S0410_standalone-image-action-parity.md spec Add strategic spec S0410 for standalone image-action parity (ad-hoc) [branch: DEBUG-v013]
2026-06-13 02:50:05 app_v2/src/main/AndroidManifest.xml S0411 S0411: isolate PiP standalone-player task via dedicated taskAffinity (${applicationId}.player) on PhotoVideoStandaloneActivity/StandalonePlayerActivity + video/image VIEW aliases, so Open-in-FMS/Browse launches in the main task instead of the leftover PiP window [branch: DEBUG-v013]
2026-06-13 02:51:01 PLAN/S0410_standalone-image-action-parity/INDEX.md spec-tech Create tactical plan for S0410 [branch: DEBUG-v013]
2026-06-13 02:51:01 PLAN/S0410_standalone-image-action-parity/PHASE_01__uri-materialization.md spec-tech Phase 01: uri-materialization [branch: DEBUG-v013]
2026-06-13 02:51:01 PLAN/S0410_standalone-image-action-parity/PHASE_02__settings-dialog-extract.md spec-tech Phase 02: settings-dialog-extract [branch: DEBUG-v013]
2026-06-13 02:51:01 PLAN/S0410_standalone-image-action-parity/PHASE_03__standalone-settings-crop.md spec-tech Phase 03: standalone-settings-crop [branch: DEBUG-v013]
2026-06-13 02:51:01 PLAN/S0410_standalone-image-action-parity/PHASE_04__standalone-draw-overlay.md spec-tech Phase 04: standalone-draw-overlay [branch: DEBUG-v013]
2026-06-13 02:51:01 PLAN/S0410_standalone-image-action-parity/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-13 02:51:01 PLAN/S0410_standalone-image-action-parity.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-13 03:02:47 PLAN/S0410_standalone-image-action-parity/research/01__dialog-extraction.md research S0410 research: dialog extraction (binding-free, optional apply hook) [branch: DEBUG-v013]
2026-06-13 03:02:47 PLAN/S0410_standalone-image-action-parity/research/02__save-target-temp-lifecycle.md research S0410 research: crop/compress save to Downloads for resource=null (no Pictures-publish needed) [branch: DEBUG-v013]
2026-06-13 03:02:47 PLAN/S0410_standalone-image-action-parity/research/03__draw-save-nonlocal.md research S0410 research: draw save-as via merge to Downloads [branch: DEBUG-v013]
2026-06-13 03:02:47 PLAN/S0410_standalone-image-action-parity.md research S0410 §6 items 1-3 Resolved; ADR-1 save target -> Downloads [branch: DEBUG-v013]
2026-06-13 03:03:43 app_v2/src/translationMlKit/java/com/sza/fastmediasorter/ui/player/helpers/TranslationBackend.kt translation Fix ‘MlKitContext has not been initialized’ crash on translate: explicitly call MlKitContext.initializeIfNeeded() after the on-demand translate engine loads, since MlKitInitProvider is removed from the base manifest and never runs in-process after on-demand install [branch: DEBUG-v013]
2026-06-13 03:04:49 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MaterializeUriToFileUseCase.kt S0410 Phase 01: add MaterializeUriToFileUseCase (content URI -> cache temp + cleanup) [branch: DEBUG-v013]
2026-06-13 03:18:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/TranslationSettingsDialog.kt S0410 Phase 02: extract binding-free TranslationSettingsDialog [branch: DEBUG-v013]
2026-06-13 03:19:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TranslationButtonManager.kt S0410 Phase 02: delegate showTranslationSettingsDialog to extracted dialog; drop moved helpers + interceptor field [branch: DEBUG-v013]
2026-06-13 03:24:56 app_v2/src/main/res/menu/overflow_menu_standalone_player.xml S0410 Phase 03: add menu_image_text_settings to standalone overflow [branch: DEBUG-v013]
2026-06-13 03:25:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0410 Phase 03: wire settings dialog; regate crop-to-file/compress to static image with materialize-on-tap [branch: DEBUG-v013]
2026-06-13 03:26:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt S0410 Phase 03: inject MaterializeUriToFileUseCase + ensureEditableImage() [branch: DEBUG-v013]
2026-06-13 09:18:08 app_v2/src/main/res/layout/activity_standalone_photo_video.xml S0410 Phase 04: add draw overlay toolbar include (portrait) [branch: DEBUG-v013]
2026-06-13 09:18:19 app_v2/src/main/res/layout-land/activity_standalone_photo_video.xml S0410 Phase 04: add draw overlay toolbar include (landscape) [branch: DEBUG-v013]
2026-06-13 09:18:29 app_v2/src/main/res/menu/overflow_menu_standalone_player.xml S0410 Phase 04: add menu_draw_overlay item [branch: DEBUG-v013]
2026-06-13 09:18:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/StandaloneDrawSaveHelper.kt S0410 Phase 04: add StandaloneDrawSaveHelper (draw overlay -> merge -> save to Downloads) [branch: DEBUG-v013]
2026-06-13 09:19:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0410 Phase 04: wire displayedBitmap + draw overlay (menu + helper + back-press) [branch: DEBUG-v013]
2026-06-13 09:25:45 PLAN/S0410_standalone-image-action-parity.md spec-dev All 5 phases done; status -> BlockNeedUserTest. FEATURES: Без изменений (extension of documented image actions to the external viewer) [branch: DEBUG-v013]
2026-06-13 11:59:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/StandaloneDrawSaveHelper.kt S0410 Fix: wrap draw save in try/catch + clamp crop rect + save to MediaStore Pictures (was crash on createBitmap OOB / scoped-storage write) [branch: DEBUG-v013]
2026-06-13 12:03:34 PLAN/S0410_standalone-image-action-parity.md spec-check Audit S0410: static PASS 13/0/0; on-device (non-local) pending; status held at BlockNeedUserTest (tags kept) [branch: DEBUG-v013]
2026-06-13 13:54:57 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryImpl.kt DeliverableInventoryImpl Gate OCR extension rows on device OCR capability (isOcrAvailable = compiled-in AND DeviceCapabilities runtime), not just compile-time isOcrCompiledIn; a device that cannot run OCR no longer sees OCR engine + rus/ukr model download rows [branch: DEBUG-v013]
2026-06-13 13:55:56 app_v2/src/test/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryFilterTest.kt DeliverableInventoryFilterTest Switch OCR-row stub to device-aware isOcrAvailable(); add test asserting OCR engine + rus/ukr rows drop on a device that cannot run OCR while translation stays [branch: DEBUG-v013]
2026-06-13 14:08:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt standardDebug Collapse backup/restore settings section by default on first install [branch: DEBUG-v013]
2026-06-13 14:09:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt standardDebug Collapse backup/restore settings section by default on first install [branch: DEBUG-v013]
2026-06-13 14:16:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt S0409 Fix default-player set-default for audio/documents: replace bare ACTION_VIEW + self-resolving probe chooser with hybrid resolution (real sample + no foreign default -> native Open-with sheet; else system default-apps screen + toast). Drop dead probe producer. [branch: DEBUG-v013]
2026-06-13 14:35:26 app_v2/src/main/res/drawable/ic_rotation_locked.xml S0410 Redraw rotation-toggle LOCKED icon: clean closed padlock (was busy screen_lock_rotation blob) [branch: DEBUG-v013]
2026-06-13 14:35:37 app_v2/src/main/res/drawable/ic_rotation_unlocked.xml S0410 Redraw rotation-toggle UNLOCKED icon: clean auto-rotate circular arrows [branch: DEBUG-v013]
2026-06-13 14:40:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/StandaloneDrawSaveHelper.kt standardDebug Fix: exit draw mode + warn log when base bitmap is null at save time [branch: DEBUG-v013]
2026-06-13 14:54:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt standardDebug Fix ExoPlayer controls hidden behind navigation bar in all standalone players - apply mediaContentArea bottom inset offset [branch: DEBUG-v013]
2026-06-13 14:57:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt StandaloneViewManager Fix Media3 1.2.1 crash: defer seekTo before prepare() to prevent DefaultVideoFrameProcessor.flush() on uninitialised InputSwitcher; fix misleading error_codec_unsupported label for ERROR_CODE_FAILED_RUNTIME_CHECK [branch: DEBUG-v013]
2026-06-13 15:03:01 PLAN/S0412_standalone-viewer-fullscreen.md spec Add strategic spec S0412 for standalone-viewer-fullscreen [branch: DEBUG-v013]
2026-06-13 15:11:02 PLAN/S0412_standalone-viewer-fullscreen/INDEX.md spec-tech Create tactical plan for S0412 [branch: DEBUG-v013]
2026-06-13 15:11:02 PLAN/S0412_standalone-viewer-fullscreen/PHASE_01__fullscreen-panel-integration.md spec-tech Phase 01: fullscreen-panel-integration [branch: DEBUG-v013]
2026-06-13 15:11:02 PLAN/S0412_standalone-viewer-fullscreen/PHASE_02__docs-catalog-cleanup.md spec-tech Phase 02: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-13 15:11:02 PLAN/S0412_standalone-viewer-fullscreen.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-13 15:12:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFullscreenManager.kt S0412 Add panel-aware enterFullscreenWithPanel, exitFullscreenWithPanel, toggleFullscreenWithPanel [branch: DEBUG-v013]
2026-06-13 15:13:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0412 Move StandaloneFullscreenManager init to setupViews for all content types; video reuses shared manager [branch: DEBUG-v013]
2026-06-13 15:15:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0412 Wire btnFullscreenCmd: setupFullscreenButton, toggleStandaloneFullscreen, updateFullscreenButtonState, applyFullscreenButtonVisibility [branch: DEBUG-v013]
2026-06-13 15:18:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0412 Add setFullscreenCallbacks; wire PDF/EPUB/Office onEnterFullscreenMode/onExitFullscreenMode [branch: DEBUG-v013]
2026-06-13 15:18:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0412 Wire setFullscreenCallbacks in setupViews for document viewer fullscreen sync [branch: DEBUG-v013]
2026-06-13 15:24:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFullscreenManager.kt S0412 Add panel-aware fullscreen methods (enterFullscreenWithPanel exitFullscreenWithPanel toggleFullscreenWithPanel) [branch: DEBUG-v013]
2026-06-13 15:24:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0412 Wire btnFullscreenCmd for image/video/pdf/epub/office; move fullscreen manager init to setupViews [branch: DEBUG-v013]
2026-06-13 15:24:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0412 Expose setFullscreenCallbacks; connect PDF/EPUB/Office viewer onEnterFullscreenMode/onExitFullscreenMode [branch: DEBUG-v013]
2026-06-13 15:24:31 docs/FEATURES.md S0412 Document fullscreen button in standalone viewer (EN/RU/UK) [branch: DEBUG-v013]
2026-06-13 15:25:03 PLAN/S0412_standalone-viewer-fullscreen.md spec-dev Phase 02 done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-13 15:25:03 docs/FEATURES_RU.md spec-dev Document fullscreen button in standalone viewer (RU) [branch: DEBUG-v013]
2026-06-13 15:25:03 docs/FEATURES_UK.md spec-dev Document fullscreen button in standalone viewer (UK) [branch: DEBUG-v013]
2026-06-13 15:43:52 PLAN/S0412_standalone-viewer-fullscreen.md spec-test-device Device run on emulator-5554 (API 27) -> PASS 4/FAIL 1/SKIPPED 2; critical: no touch exit from fullscreen [branch: DEBUG-v013]
2026-06-13 15:51:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFullscreenManager.kt S0412 Add setupTransientBarsExitCallback for touch-accessible fullscreen exit [branch: DEBUG-v013]
2026-06-13 15:53:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0412 Wire setupTransientBarsExitCallback in setupFullscreenButton for immersive-exit [branch: DEBUG-v013]
2026-06-13 15:54:22 PLAN/S0412_standalone-viewer-fullscreen.md spec-fix Annotate Last Audit S0412 - [FIXED] §11.2 touch-exit via setupTransientBarsExitCallback [branch: DEBUG-v013]
2026-06-13 15:54:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFullscreenManager.kt spec-fix Add setupTransientBarsExitCallback for immersive-exit via transient system bars [branch: DEBUG-v013]
2026-06-13 15:54:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-fix Wire setupTransientBarsExitCallback in setupFullscreenButton [branch: DEBUG-v013]
2026-06-13 16:02:29 PLAN/S0412_standalone-viewer-fullscreen.md spec-check Audit S0412 -> Verified; PASS 19 / WARN 0 / FAIL 0 / MANUAL 2 [branch: DEBUG-v013]
2026-06-13 16:02:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-check Remove S0412 debug tags (standalone fullscreen toggle triggered, transient bars exit) [branch: DEBUG-v013]
2026-06-13 16:02:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-check Remove S0412 debug tag (document viewer fullscreen callbacks registered) [branch: DEBUG-v013]
2026-06-13 16:02:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFullscreenManager.kt spec-check S0412 Verified - setupTransientBarsExitCallback present [branch: DEBUG-v013]
2026-06-13 16:06:16 PLAN/S0413_bugfix-audio-graceful-skip.md spec Add strategic spec S0413 for audio graceful-skip on errorCode 3003 [branch: DEBUG-v013]
2026-06-13 16:11:32 PLAN/S0413_bugfix-audio-graceful-skip/INDEX.md spec-tech Create tactical plan for S0413 [branch: DEBUG-v013]
2026-06-13 16:11:32 PLAN/S0413_bugfix-audio-graceful-skip/PHASE_01__skip-message-strings.md spec-tech Phase 01: skip-message-strings [branch: DEBUG-v013]
2026-06-13 16:11:33 PLAN/S0413_bugfix-audio-graceful-skip/PHASE_02__graceful-skip-error-handling.md spec-tech Phase 02: graceful-skip-error-handling [branch: DEBUG-v013]
2026-06-13 16:11:33 PLAN/S0413_bugfix-audio-graceful-skip/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-13 16:11:33 PLAN/S0413_bugfix-audio-graceful-skip.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-13 16:13:10 app_v2/src/main/res/values/strings.xml S0413 Phase 01 Add audio skip-message strings (track_skipped, queue_unplayable) EN/RU/UK [branch: DEBUG-v013]
2026-06-13 16:13:38 app_v2/src/main/res/values/strings.xml spec-dev S0413 P01: add audio skip strings (EN) [branch: DEBUG-v013]
2026-06-13 16:13:38 app_v2/src/main/res/values-ru/strings.xml spec-dev S0413 P01: add audio skip strings (RU) [branch: DEBUG-v013]
2026-06-13 16:13:38 app_v2/src/main/res/values-uk/strings.xml spec-dev S0413 P01: add audio skip strings (UK) [branch: DEBUG-v013]
2026-06-13 16:18:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt S0413 Phase 02 Graceful skip of undecodable audio: classify error, skip+advance in playlist, debounced toast, fatal/exhaustion stop [branch: DEBUG-v013]
2026-06-13 16:19:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt spec-dev S0413 P02: graceful skip of undecodable audio (classify+skip+debounced toast) [branch: DEBUG-v013]
2026-06-13 16:20:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt spec-dev S0413 P03: insert BlockNeedUserTest debug tag; catalog regen [branch: DEBUG-v013]
2026-06-13 16:21:57 PLAN/S0413_bugfix-audio-graceful-skip.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-13 16:27:09 PLAN/S0413_bugfix-audio-graceful-skip.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 3/0/1 (launch smoke clean; skip-repro needs fixture) [branch: DEBUG-v013]
2026-06-13 17:47:26 app_v2/src/main/res/layout/player_draw_overlay_toolbar_content.xml Draw overlay toolbar Fix draw toolbar overflow on narrow screens: wrap tool+colour group in HorizontalScrollView (portrait) / ScrollView (landscape) so the pinned Save/Cancel action group is never clipped off-edge [branch: DEBUG-v013]
2026-06-13 18:26:38 app_v2/src/main/res/values/colors.xml Draw overlay toolbar background Switch draw toolbar background from near-black #CC000000 to grey @color/player_overlay_grey (#CC616161) so the black colour swatch is visible; white icons/swatch keep contrast [branch: DEBUG-v013]
2026-06-13 19:06:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt DocumentStandaloneActivity overflow menu Hide image-host-only overflow items (menu_image_text_settings Text Settings, menu_draw_overlay DRAW) in the document standalone host; they leaked into the PDF/EPUB/Office overflow menu with no click handler (dead taps) [branch: DEBUG-v013]
2026-06-13 19:43:25 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveLocalPathFromUriUseCase.kt S0414 Resolve Downloads-provider raw: document URIs to embedded absolute path so Open-in-FMS opens the in-app player instead of Browse [branch: DEBUG-v013]
2026-06-13 22:48:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt DefaultPlayerHelper Removed temporary S0409 archive debug tags [branch: DEBUG-v013]
2026-06-13 22:48:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeEnableAllManager.kt WelcomeEnableAllManager Removed temporary S0409 archive debug tag [branch: DEBUG-v013]
2026-06-13 22:49:54 PLAN/S0409_welcome-enable-all.md spec-arc Archive S0409 (welcome-enable-all) -> temp/done/ [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-tech Refresh tactical plan to 7 phases for S0391 [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/PHASE_01__settings-state.md spec-tech Phase 01: settings-state [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/PHASE_02__availability-gate.md spec-tech Phase 02: availability-gate [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/PHASE_03__new-entry-gating.md spec-tech Phase 03: new-entry-gating [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/PHASE_04__list-background-gating.md spec-tech Phase 04: list-background-gating [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/PHASE_05__playback-fileops-gating.md spec-tech Phase 05: playback-fileops-gating [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/PHASE_06__settings-welcome-ux.md spec-tech Phase 06: settings-welcome-ux [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-13 22:56:28 PLAN/S0391_remote-source-runtime-toggles/research/RESEARCH_FINDINGS.md spec-tech Consolidated research findings for S0391 [branch: DEBUG-v013]
2026-06-13 23:00:55 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev Phase 01.1: add 6 per-source enabled flags (default true) [branch: DEBUG-v013]
2026-06-13 23:00:55 app_v2/src/main/assets/device_profile_presets.csv spec-dev Phase 01.1: scaffold preset rows for new AppSettings fields [branch: DEBUG-v013]
2026-06-13 23:02:25 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/RemoteSourceSettingsStore.kt spec-dev Phase 01.2: new store for 6 per-source toggles [branch: DEBUG-v013]
2026-06-13 23:02:25 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev Phase 01.2: wire RemoteSourceSettingsStore read/write [branch: DEBUG-v013]
2026-06-13 23:04:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-dev Phase 01.3: reset 6 source flags to defaults [branch: DEBUG-v013]
2026-06-13 23:04:53 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt spec-dev Phase 01.3: add 6 source flags to backup schema [branch: DEBUG-v013]
2026-06-13 23:04:53 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt spec-dev Phase 01.3: map 6 source flags both directions [branch: DEBUG-v013]
2026-06-13 23:20:28 PLAN/S0407_audio-player-extra-visualizations/INDEX.md spec-tech Create tactical plan for S0407 [branch: DEBUG-v013]
2026-06-13 23:20:28 PLAN/S0407_audio-player-extra-visualizations/PHASE_01__audio-empty-state-resilience.md spec-tech Phase 01: audio-empty-state-resilience (fallback no-bg + memory) [branch: DEBUG-v013]
2026-06-13 23:20:28 PLAN/S0407_audio-player-extra-visualizations/PHASE_02__settings-download-gate.md spec-tech Phase 02: settings video-bg download gate + auto-revert [branch: DEBUG-v013]
2026-06-13 23:20:28 PLAN/S0407_audio-player-extra-visualizations/PHASE_03__register-visualization-assets.md spec-tech Phase 03: register new visualization assets (external-blocked) [branch: DEBUG-v013]
2026-06-13 23:20:28 PLAN/S0407_audio-player-extra-visualizations/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-13 23:20:28 PLAN/S0407_audio-player-extra-visualizations.md spec-tech Status -> Tactical; tactical plan link [branch: DEBUG-v013]
2026-06-13 23:25:46 PLAN/S0391_remote-source-runtime-toggles.md spec-update Owner UI refinement: 3 group toggles (SMB/(S)FTP/Cloud), placement, help [branch: DEBUG-v013]
2026-06-13 23:25:46 PLAN/S0391_remote-source-runtime-toggles/PHASE_06__settings-welcome-ux.md spec-update Rewrite Phase 06 for 3 group toggles + placement + help, portrait+land [branch: DEBUG-v013]
2026-06-13 23:25:46 PLAN/S0391_remote-source-runtime-toggles/research/RESEARCH_FINDINGS.md spec-update Record 3-group settings decision + resolved placement [branch: DEBUG-v013]
2026-06-13 23:25:46 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-update Change log: 3-group UI refinement [branch: DEBUG-v013]
2026-06-13 23:26:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt spec-dev S0407 Phase 01: fallback to no-background (MODE_NONE) + release Surface/listener on per-track re-pick [branch: DEBUG-v013]
2026-06-13 23:28:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt spec-dev S0407 Phase 02: gate VISUALIZATION mode selection through delivery download prompt + auto-revert on refusal [branch: DEBUG-v013]
2026-06-13 23:43:34 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/RemoteSourceId.kt spec-dev S0391 Phase 02.1: add RemoteSourceId identity + cloud/resource-type mapping [branch: DEBUG-v013]
2026-06-13 23:47:58 .gitignore,app_v2/build.gradle.kts,wear/build.gradle.kts,scripts/release/publish-play-release.py,scripts/release-worktree-sync.txt,docs/DEV_OPS.md,docs/WEAR_OS_SETUP.md,dev/TECH_REQUIREMENTS.md,store_assets/RELEASE_QUICK_GUIDE.md,scripts/release/README.md,PlaybackSettingsFragment.kt root hygiene Move local release secrets to .secrets with backward-compatible Gradle/script lookup, document local.properties root requirement, and remove stray root PlaybackSettingsFragment copy [branch: DEBUG-v013]
2026-06-13 23:48:04 .gitignore root hygiene Move local release secrets to .secrets with backward-compatible lookup and remove stray root source copy [branch: DEBUG-v013]
2026-06-13 23:48:05 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/RemoteSourceAvailabilityGate.kt spec-dev S0391 Phase 02.2: add RemoteSourceAvailabilityGate (compile AND user-toggle fold) [branch: DEBUG-v013]
2026-06-13 23:49:20 app_v2/src/main/java/com/sza/fastmediasorter/di/RemoteSourceAvailabilityModule.kt spec-dev S0391 Phase 02.3: Hilt module providing RemoteSourceAvailabilityGate singleton [branch: DEBUG-v013]
2026-06-13 23:53:18 PLAN/S0391_remote-source-runtime-toggles/PHASE_02__availability-gate.md spec-dev Phase 02 done (3/3); removed premature debug-tag step [branch: DEBUG-v013]
2026-06-13 23:53:18 PLAN/S0391_remote-source-runtime-toggles/PHASE_03__new-entry-gating.md spec-dev Remove per-phase S0391 debug-tag instructions (defer to BlockNeedUserTest) [branch: DEBUG-v013]
2026-06-13 23:53:18 PLAN/S0391_remote-source-runtime-toggles/PHASE_04__list-background-gating.md spec-dev Remove per-phase S0391 debug-tag instructions (defer to BlockNeedUserTest) [branch: DEBUG-v013]
2026-06-13 23:53:18 PLAN/S0391_remote-source-runtime-toggles/PHASE_05__playback-fileops-gating.md spec-dev Remove per-phase S0391 debug-tag instructions (defer to BlockNeedUserTest) [branch: DEBUG-v013]
2026-06-13 23:53:18 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-dev Phase 02 -> Done; Phases 2/7 [branch: DEBUG-v013]
2026-06-14 00:01:26 .playwright-mcp,temp/build_all_log.txt,PlaybackSettingsFragment.kt git hygiene Untrack historical root and scratch artifacts from git index while keeping ignored local files on disk (.playwright-mcp snapshots, temp/done archived specs, stray root source/log files) [branch: DEBUG-v013]
2026-06-14 00:12:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev S0391 Phase 03.5: observe gate.enabledRemoteSources -> rebuild tab strip; inject gate [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt spec-dev S0391 Phase 03.2: inject RemoteSourceAvailabilityGate, pass to AddResourceFormManager [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt spec-dev S0391 Phase 03.2: gate SMB/(S)FTP/Cloud type cards in applyFlavorRestrictions; drop SUPPORT_CLOUD [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/FilterResourceDialog.kt spec-dev S0391 Phase 03.3: gate resource-type chips via availability node; @AndroidEntryPoint [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainResourceTabsManager.kt spec-dev S0391 Phase 03.4: dynamic gate-aware tabs + vanish rule + dynamic index mapping [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/RemoteSourceAvailabilityGate.kt spec-dev S0391 Phase 03.5: StateFlow snapshot + enabledRemoteSources() reactive surface [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ResourceTypeSelectorDialog.kt spec-dev S0391 Phase 03.1: delete dead type-picker dialog (zero callers, dangling string ref) [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/res/layout/dialog_resource_type_selector.xml spec-dev S0391 Phase 03.1: delete dead type-picker layout (portrait) [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/res/layout-land/dialog_resource_type_selector.xml spec-dev S0391 Phase 03.1: delete dead type-picker layout (landscape) [branch: DEBUG-v013]
2026-06-14 00:13:32 app_v2/src/main/res/values/strings.xml spec-dev S0391 Phase 03.1: remove orphaned add_smb_network_shares (EN/RU/UK) [branch: DEBUG-v013]
2026-06-14 00:14:26 PLAN/S0391_remote-source-runtime-toggles/PHASE_03__new-entry-gating.md spec-dev Phase 03 done (5/5); 03.1 retargeted to deletion, 03.2 consolidated card gating [branch: DEBUG-v013]
2026-06-14 00:14:27 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-dev Phase 03 -> Done; Phases 3/7 [branch: DEBUG-v013]
2026-06-14 00:29:05 app_v2/src/main/java/com/sza/fastmediasorter/core/coordinator/RemoteSourceDisableCoordinator.kt spec-dev S0391 Phase 04.5: RemoteSourceDisableCoordinator - cancel in-flight work on source disable [branch: DEBUG-v013]
2026-06-14 00:30:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-dev S0391 Phase 04.1: gate-filter displayed resource list + combine on enabledRemoteSources [branch: DEBUG-v013]
2026-06-14 00:30:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceScanCoordinator.kt spec-dev S0391 Phase 04.1: skip disabled-source resources in scan loop [branch: DEBUG-v013]
2026-06-14 00:30:28 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SyncNetworkResourcesUseCase.kt spec-dev S0391 Phase 04.2: gate manual network sync (syncAll filter + syncSingle guard) [branch: DEBUG-v013]
2026-06-14 00:30:28 app_v2/src/main/java/com/sza/fastmediasorter/worker/NetworkFilesSyncWorker.kt spec-dev S0391 Phase 04.2: gate background sync resourcesToSync (flows to preload enqueue) [branch: DEBUG-v013]
2026-06-14 00:30:28 app_v2/src/main/java/com/sza/fastmediasorter/worker/ThumbnailPreloadWorker.kt spec-dev S0391 Phase 04.3: defense-in-depth skip disabled-source thumbnail preload [branch: DEBUG-v013]
2026-06-14 00:30:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseResourceLoadManager.kt spec-dev S0391 Phase 04.4: gate Browse load entry boundary (turn back if disabled) [branch: DEBUG-v013]
2026-06-14 00:30:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt spec-dev S0391 Phase 04.4: inject gate, pass to BrowseResourceLoadManager [branch: DEBUG-v013]
2026-06-14 00:30:28 app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt spec-dev S0391 Phase 04.5: start RemoteSourceDisableCoordinator on app init [branch: DEBUG-v013]
2026-06-14 00:30:28 PLAN/S0391_remote-source-runtime-toggles/PHASE_04__list-background-gating.md spec-dev Phase 04 done (5/5); added MainViewModel list-gating, fixed plan gap [branch: DEBUG-v013]
2026-06-14 00:30:28 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-dev Phase 04 -> Done; Phases 4/7 [branch: DEBUG-v013]
2026-06-14 00:47:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0391 Phase 05.1: gate playback dispatch (turn back on disabled source) [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0391 Phase 05.1: inject RemoteSourceAvailabilityGate (threaded into VideoPlayerManager) [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewerFactory.kt spec-dev S0391 Phase 05.1: pass gate into VideoPlayerManager construction [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-dev S0391 Phase 05.2: gate Favorites mixed-source playback (isPathSourceEnabled) [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt spec-dev S0391 Phase 05.2: pass gate into PlayerMediaLoaderManager construction [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/UnifiedFileOperationHandler.kt spec-dev S0391 Phase 05.3: gate remote file ops (requireSourceEnabled in dispatch resolvers) [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/core/di/NetworkLifecycleModule.kt spec-dev S0391 Phase 05.4: migrate SUPPORT_CLOUD to MediaCapabilities for cloud gate registration [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/CloudConnectionGate.kt spec-dev S0391 Phase 05.4: doc migration SUPPORT_CLOUD to MediaCapabilities [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/data/verifier/QuickVerifierDispatcher.kt spec-dev S0391 Phase 05.5: skip probing disabled-source resources [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneLaunchDebugLogger.kt spec-dev S0391 Phase 05.6: take supportsCloud param instead of BuildConfig read [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0391 Phase 05.6: inject MediaCapabilities, pass supportsCloud to logger [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/GoogleDriveFolderPickerActivity.kt spec-dev S0391 Phase 05: migrate SUPPORT_CLOUD guard to injected MediaCapabilities [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/DropboxFolderPickerActivity.kt spec-dev S0391 Phase 05: migrate SUPPORT_CLOUD guard to injected MediaCapabilities [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/cloudfolders/OneDriveFolderPickerActivity.kt spec-dev S0391 Phase 05: migrate SUPPORT_CLOUD guard to injected MediaCapabilities [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/UnifiedFileOperationHandlerTest.kt spec-dev S0391 Phase 05.3: add all-enabled gate mock for new ctor param [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/test/java/com/sza/fastmediasorter/data/transfer/UnifiedFileOperationHandlerDirectoryTest.kt spec-dev S0391 Phase 05.3: add all-enabled gate mock for new ctor param [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/test/java/com/sza/fastmediasorter/data/verifier/QuickVerifierDispatcherTest.kt spec-dev S0391 Phase 05.5: add all-enabled gate mock for new ctor param [branch: DEBUG-v013]
2026-06-14 00:50:05 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/VideoPlayerManagerStateEndedTest.kt spec-dev S0391 Phase 05.1: add gate mock for new VideoPlayerManager ctor param [branch: DEBUG-v013]
2026-06-14 00:50:05 PLAN/S0391_remote-source-runtime-toggles/PHASE_05__playback-fileops-gating.md spec-dev Phase 05 done (6/6); full Rule-14 SUPPORT_CLOUD remediation [branch: DEBUG-v013]
2026-06-14 00:50:05 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-dev Phase 05 -> Done; Phases 5/7 [branch: DEBUG-v013]
2026-06-14 01:06:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeRemoteSourcesController.kt spec-dev S0391 Phase 06.4: WelcomeRemoteSourcesController - welcome 3-group toggles [branch: DEBUG-v013]
2026-06-14 01:08:38 app_v2/src/main/res/values/strings.xml spec-dev S0391 Phase 06.1: add 15 remote-source toggle strings (EN) [branch: DEBUG-v013]
2026-06-14 01:08:38 app_v2/src/main/res/values-ru/strings.xml spec-dev S0391 Phase 06.1: add 15 remote-source toggle strings (RU) [branch: DEBUG-v013]
2026-06-14 01:08:38 app_v2/src/main/res/values-uk/strings.xml spec-dev S0391 Phase 06.1: add 15 remote-source toggle strings (UK) [branch: DEBUG-v013]
2026-06-14 01:08:38 app_v2/src/main/res/values/strings_setup.xml spec-dev S0391 Phase 06.5: remove orphaned welcome_network_tile strings (EN) [branch: DEBUG-v013]
2026-06-14 01:08:38 app_v2/src/main/res/values-ru/strings_setup.xml spec-dev S0391 Phase 06.5: remove orphaned welcome_network_tile strings (RU) [branch: DEBUG-v013]
2026-06-14 01:08:38 app_v2/src/main/res/values-uk/strings_setup.xml spec-dev S0391 Phase 06.5: remove orphaned welcome_network_tile strings (UK) [branch: DEBUG-v013]
2026-06-14 01:08:38 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev S0391 Phase 06.2: Remote sources section + 3 toggle rows (portrait) [branch: DEBUG-v013]
2026-06-14 01:08:38 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev S0391 Phase 06.2: Remote sources section + 3 toggle rows (landscape) [branch: DEBUG-v013]
2026-06-14 01:08:39 app_v2/src/main/res/layout/page_welcome_networks.xml spec-dev S0391 Phase 06.5: welcome tiles -> 3 toggle rows (portrait) [branch: DEBUG-v013]
2026-06-14 01:08:39 app_v2/src/main/res/layout-land/page_welcome_networks.xml spec-dev S0391 Phase 06.5: welcome tiles -> 3 toggle rows (landscape) [branch: DEBUG-v013]
2026-06-14 01:08:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsSectionsHelper.kt spec-dev S0391 Phase 06.2: register Remote sources expandable section [branch: DEBUG-v013]
2026-06-14 01:08:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-dev S0391 Phase 06.3: group-toggle listeners + disable confirmation dialog [branch: DEBUG-v013]
2026-06-14 01:08:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt spec-dev S0391 Phase 06.3: mirror group toggle state (ON if any member ON) [branch: DEBUG-v013]
2026-06-14 01:08:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt spec-dev S0391 Phase 06.3: inject RemoteSourceAvailabilityGate into view-setup helper [branch: DEBUG-v013]
2026-06-14 01:08:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomePagerAdapter.kt spec-dev S0391 Phase 06.4: onBindNetworks seam; drop dead showCloudNetworkTile [branch: DEBUG-v013]
2026-06-14 01:08:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-dev S0391 Phase 06.4: wire WelcomeRemoteSourcesController into networks page [branch: DEBUG-v013]
2026-06-14 01:08:39 PLAN/S0391_remote-source-runtime-toggles/PHASE_06__settings-welcome-ux.md spec-dev Phase 06 done (5/5); 3 group toggles settings+welcome portrait/land [branch: DEBUG-v013]
2026-06-14 01:08:39 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-dev Phase 06 -> Done; Phases 6/7 [branch: DEBUG-v013]
2026-06-14 01:15:15 PLAN/S0391_remote-source-runtime-toggles.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-14 01:15:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainResourceTabsManager.kt spec-dev S0391 final phase: debug verification tag (tab strip rebuild) [branch: DEBUG-v013]
2026-06-14 01:15:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-dev S0391 final phase: debug verification tag (list source-gate) [branch: DEBUG-v013]
2026-06-14 01:15:15 app_v2/src/main/java/com/sza/fastmediasorter/core/coordinator/RemoteSourceDisableCoordinator.kt spec-dev S0391 final phase: debug verification tag (disable cancellation) [branch: DEBUG-v013]
2026-06-14 01:15:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-dev S0391 final phase: debug verification tag (settings toggle) [branch: DEBUG-v013]
2026-06-14 01:15:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeRemoteSourcesController.kt spec-dev S0391 final phase: debug verification tag (welcome toggle) [branch: DEBUG-v013]
2026-06-14 01:15:15 docs/FEATURES.md spec-dev S0391 Phase 07.1: add remote-source toggle feature (EN) [branch: DEBUG-v013]
2026-06-14 01:15:16 docs/FEATURES_RU.md spec-dev S0391 Phase 07.1: add remote-source toggle feature (RU) [branch: DEBUG-v013]
2026-06-14 01:15:16 docs/FEATURES_UK.md spec-dev S0391 Phase 07.1: add remote-source toggle feature (UK) [branch: DEBUG-v013]
2026-06-14 01:18:04 PLAN/S0391_remote-source-runtime-toggles/PHASE_07__docs-catalog-cleanup.md spec-dev Phase 07 done (3/3); FEATURES + catalog roles + functionality log [branch: DEBUG-v013]
2026-06-14 01:18:04 PLAN/S0391_remote-source-runtime-toggles/INDEX.md spec-dev All 7 phases done; status BlockNeedUserTest [branch: DEBUG-v013]
2026-06-14 01:26:02 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableDescriptorCatalog.kt spec-dev S0407 Phase 03: register 11 audio-viz clips (Baseline 576p), new SHA-256/size [branch: DEBUG-v013]
2026-06-14 01:26:02 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredAudioVisualizationSource.kt spec-dev S0407 Phase 03: extend bg filename list to 11 [branch: DEBUG-v013]
2026-06-14 01:26:02 delivery/INVENTORY.md spec-dev S0407 Phase 03: Set C now 1..11, Baseline/576p profile note [branch: DEBUG-v013]
2026-06-14 01:26:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt spec-dev S0407: debug tag + stale KDoc fix [branch: DEBUG-v013]
2026-06-14 01:26:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt spec-dev S0407: debug tag on viz gate [branch: DEBUG-v013]
2026-06-14 01:26:03 docs/FEATURES.md spec-dev S0407 Phase 04: cover-art visualizations (EN) [branch: DEBUG-v013]
2026-06-14 01:26:03 docs/FEATURES_RU.md spec-dev S0407 Phase 04: cover-art visualizations (RU) [branch: DEBUG-v013]
2026-06-14 01:26:03 docs/FEATURES_UK.md spec-dev S0407 Phase 04: cover-art visualizations (UK) [branch: DEBUG-v013]
2026-06-14 01:26:03 PLAN/S0407_audio-player-extra-visualizations.md spec-dev S0407 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-14 03:46:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt spec-dev S0391: skip the single-option Add Resource type picker (open Local directly when no remote source is available) [branch: DEBUG-v013]
2026-06-14 04:06:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt S0391 Skip single-option Add Folder type picker on ALL/FAVORITES tab entry; gate-direct check [branch: DEBUG-v013]
2026-06-14 04:26:10 scripts/builders/build-aab-release.ps1 skill-release Allow explicit version override for release builder to prevent release-version skew [branch: DEBUG-v013]
2026-06-14 04:26:10 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.6140.424 - plateau merge from DEBUG-v013 [branch: DEBUG-v013]
2026-06-14 04:27:08 scripts/release/gen_fastlane_changelog.ps1 skill-release Strip markdown separators from generated fastlane changelogs [branch: DEBUG-v013]
2026-06-14 04:27:32 scripts/release/gen_fastlane_changelog.ps1 skill-release Trim leading blank lines from generated fastlane changelogs [branch: DEBUG-v013]
2026-06-14 08:39:59 app_v2/src/main/res/values*/strings.xml Settings/Remote sources Rewrote SMB/(S)FTP/Cloud subtitles and help dialogs to describe what each source is with examples (home network, NAS, server, cloud), instead of justifying what disappears when toggled off (EN/RU/UK) [branch: DEBUG-v013]
2026-06-14 08:45:16 app_v2/src/noLegal/screencapture + res/drawable/ic_notification_screen_capture.xml S0405 Fix CannotPostForegroundServiceNotificationException on Android 16: FGS small icon used a ?attr-tinted vector unresolvable in system notification context; added dedicated ic_notification_screen_capture (white, no ?attr) for screen-capture/overlay services [branch: DEBUG-v013]
2026-06-14 08:48:51 app_v2/src/main/res Player audio overlay/controls Fix night-theme contrast: song title, seekbar, position/duration and bottom-bar control icons were white on the light night overlays - repointed to theme-aware player_overlay_on_primary (white in day, black in night); fixed audio info line and removed hardcoded hex from landscape overlay [branch: DEBUG-v013]
2026-06-14 08:51:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt S0407 Fix audio MP4 visualization never showing: onIsPlayingChanged/onResume called MediaPlayer.start() before onPrepared (error -38), onError then hid the video view; guard external start() with isPrepared, onPrepared is sole initial-start point [branch: DEBUG-v013]
2026-06-14 09:20:16 app_v2/src/noLegal/.../ScreenGestureOverlayManager.kt + fragment_settings_playback.xml(+land) + strings(EN/RU/UK) S0405 Widen gesture overlay strip to 10-75% height (10% top corner free); add settings helper button (str_showHelp) on gesture overlay row with how-to-use text EN/RU/UK [branch: DEBUG-v013]
2026-06-14 09:20:17 app_v2/src/main/java/com/sza/fastmediasorter/data/network/helpers/SmbDirectoryScanner.kt S0415 Add diagnostic logging to recursive SMB scan (listing/listed/descend per dir) to isolate apeflac folder scan hang on device [branch: DEBUG-v013]
2026-06-14 09:42:40 app_v2/src/main/.../worker/{LinkDownloadWorker,DeliverableDownloadWorker}.kt + res/drawable/ic_notification_cloud_download.xml S0416 Fix download FGS crash on Android 16: ic_cloud_download small icon had a ?attr tint unresolvable in the system notification context; added dedicated ic_notification_cloud_download (white, no ?attr) for link/deliverable download workers [branch: DEBUG-v013]
2026-06-14 13:03:59 app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt S0416 Fix link-download FGS crash on Android 16 (cause 2): doWork single-URL path called setForeground without getForegroundInfo, so link_download_channel was never created; ensure channel in buildForegroundInfo (idempotent) [branch: DEBUG-v013]
2026-06-14 13:06:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt Browse rename dialogs Fix cloud rename prefill: show display name instead of provider internal item id (was last segment of cloud:// path); applied to single, multiple and directory rename [branch: DEBUG-v013]
2026-06-14 13:12:38 PLAN/S0417_bugfix-batch-rename-cloud-network.md spec Add strategic spec S0417 for batch rename via FileOperationUseCase (cloud/network support) [branch: DEBUG-v013]
2026-06-14 13:22:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt GeneralSettingsLogHelper Added destination-based text export for session and application log dialogs [branch: DEBUG-v013]
2026-06-14 13:26:01 app_v2/src/debug/java/com/sza/fastmediasorter/ui/debug/CrashActivity.kt Debug crash screen Apply systemBars+displayCutout insets to crash report screen so it respects OS status/navigation bars (edge-to-edge, Android 16) [branch: DEBUG-v013]
2026-06-14 13:27:08 PLAN/S0417_bugfix-batch-rename-cloud-network/INDEX.md spec-tech Create tactical plan for S0417 [branch: DEBUG-v013]
2026-06-14 13:27:08 PLAN/S0417_bugfix-batch-rename-cloud-network/PHASE_01__unified-rename-executor.md spec-tech Phase 01: unified-rename-executor [branch: DEBUG-v013]
2026-06-14 13:27:08 PLAN/S0417_bugfix-batch-rename-cloud-network/PHASE_02__docs-catalog-cleanup.md spec-tech Phase 02: docs-catalog-cleanup [branch: DEBUG-v013]
2026-06-14 13:27:08 PLAN/S0417_bugfix-batch-rename-cloud-network.md spec-tech Status -> Tactical [branch: DEBUG-v013]
2026-06-14 13:28:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/undo/BrowseUndoManager.kt spec-dev S0417 step 01.1: undo rename via FileOperationUseCase [branch: DEBUG-v013]
2026-06-14 13:29:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt spec-dev S0417 step 01.1: UndoOperation.oldNames RENAME semantics comment [branch: DEBUG-v013]
2026-06-14 13:30:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BdTsPlaybackHelper.kt S0054 Remove dead wrapForBdTs(path String) overload, superseded by buildBdTsMediaSourceFactory [branch: DEBUG-v013]
2026-06-14 13:30:34 docs/FEATURES.md S0054 Add BD-TS m2ts auto-detect plus audio diagnostics bullet [branch: DEBUG-v013]
2026-06-14 13:30:34 docs/FEATURES_RU.md S0054 Add BD-TS m2ts bullet RU [branch: DEBUG-v013]
2026-06-14 13:30:34 docs/FEATURES_UK.md S0054 Add BD-TS m2ts bullet UK [branch: DEBUG-v013]
2026-06-14 13:30:34 PLAN/S0054_m2ts-playback-support.md spec-check Audit S0054 conformant, status retained BlockNeedUserTest, FEATURES and dead-code fixed [branch: DEBUG-v013]
2026-06-14 13:33:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseViewModel.kt spec-dev S0417 step 01.2: renameViaFileOperation undo callback via use case [branch: DEBUG-v013]
2026-06-14 13:38:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt spec-dev S0417 step 01.3: batch rename via FileOperationUseCase, pointwise update, undo pairs [branch: DEBUG-v013]
2026-06-14 13:38:54 PLAN/S0054_m2ts-playback-support.md spec-arc Archive S0054 (m2ts-playback-support) -> temp/done/ [branch: DEBUG-v013]
2026-06-14 13:39:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogCallbacksImpl.kt spec-dev S0417 step 01.3: remove orphaned reloadFiles callback (Rule 21) [branch: DEBUG-v013]
2026-06-14 13:44:25 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/TsPacketFormatDetector.kt spec-dev Remove stale S0054 debug probe + orphaned Timber import (post-archive hygiene) [branch: DEBUG-v013]
2026-06-14 13:44:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt spec-dev Remove stale S0054 debug probe (post-archive hygiene) [branch: DEBUG-v013]
2026-06-14 13:44:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LocalPlaybackHelper.kt spec-dev Remove stale S0054 debug probe (post-archive hygiene) [branch: DEBUG-v013]
2026-06-14 13:44:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerTracksObserver.kt spec-dev Remove stale S0054 debug probe (post-archive hygiene) [branch: DEBUG-v013]
2026-06-14 13:49:39 PLAN/S0417_bugfix-batch-rename-cloud-network.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v013]
2026-06-14 13:49:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/undo/BrowseUndoManager.kt spec-dev S0417: insert BlockNeedUserTest debug probe in undoRenameOperation [branch: DEBUG-v013]
2026-06-14 13:49:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt spec-dev S0417: insert BlockNeedUserTest debug probe in showRenameMultipleDialog [branch: DEBUG-v013]
2026-06-14 14:03:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt refactor-fixup Remove orphaned ‘override fun reloadFiles()’ (DialogCallbacks interface + BrowseDialogCallbacksImpl no longer declare it) - completed in-progress refactor, unblocks noLegal compile [branch: DEBUG-v013]
2026-06-14 14:03:38 scripts/quality/assert-fgs-notifications.ps1 + scripts/post-change.ps1 S0416 Add FGS-notification quality gate: blocks ?attr-tinted notification small icons and foreground-service paths without channel creation; wired into post-change (Kotlin/Xml/Mixed) [branch: DEBUG-v013]
2026-06-14 14:40:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt S0407 Audio empty-state: make show() idempotent for VISUALIZATION mode. loadAudioCoverArt fires show() twice per track (eager + post-cover-check re-show), each rebuilding a MediaPlayer with a new random clip - background swapped mid-track and a codec was allocated needlessly. Guard via videoActive flag skips re-init when the same video mode is already live; hide()/release()/error clear it. [branch: DEBUG-v013]
2026-06-14 14:40:53 .claude/commands/spec-draft.md skill Add /spec-draft skill: scaffold strategic spec skeleton in Draft, no research/approval/spec-tech chaining [branch: DEBUG-v013]
2026-06-14 14:43:13 PLAN/S0418_standard-edge-gesture-screenshot.md spec Scaffold strategic spec skeleton S0418 [branch: DEBUG-v013]
2026-06-14 14:46:27 .claude/commands/spec-draft.md skill Refine /spec-draft into side-task idea inbox: capture verbatim text + persist attachments in new spec section 0, non-disruptive [branch: DEBUG-v013]
2026-06-14 14:50:54 CLAUDE.md rules Add rule 3.1: auto-capture out-of-scope non-trivial findings as /spec-draft at any stage (dedup, batch, non-disruptive) [branch: DEBUG-v013]
2026-06-14 14:50:54 .claude/commands skills Propagate auto /spec-draft capture to spec-draft/log-reader/research/spec-dev/spec-check + rd/kotlin/researcher agents [branch: DEBUG-v013]
2026-06-14 14:54:09 PLAN/S0156_nolegal-capability-surface-audit.md spec-update Close S0156 umbrella audit: resolve owner stop-decision, capture first-pass outcomes/backlog, mark archive-ready [branch: DEBUG-v013]
2026-06-14 14:54:28 PLAN/S0156_nolegal-capability-surface-audit.md spec-arc Archive S0156 (nolegal-capability-surface-audit) -> temp/done/ [branch: DEBUG-v013]
2026-06-14 15:06:25 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenshotAccessibilityService.kt S0405 Dialog-free screenshot capture via AccessibilityService.takeScreenshot (API30+); MediaProjection kept as <30 fallback; controller branches by SDK_INT [branch: DEBUG-v013]
2026-06-14 15:16:46 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayControllerImpl.kt S0405 Deep-link gesture-overlay toggle straight to the FastMediaSorter accessibility service row (fragment_args extras), not the generic Accessibility list [branch: DEBUG-v013]
2026-06-14 15:28:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt FastMediaSorter app_v2 Browse overflow menu: add ‘Open’ (play) as first item for playable media files [branch: DEBUG-v013]
2026-06-14 15:38:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt S0419 browse no-thumbnail grid + card controls No-thumbnail mode: hide favorite star on card (kept in overflow). Selection checkbox moved to thumbnail/tile bottom-left in all modes. New horizontal ‘plank’ layout + VIEW_TYPE_GRID_NO_THUMB for no-thumbnail grid (square tile + name), columns halved for double width. Added 4dp row-gap ItemDecoration in grid mode. Mirrored layouts for noLegal flavor. [branch: DEBUG-v013]
2026-06-14 15:44:41 sitemap.xml, nolegal*.html, index*.html SEO / GitHub Pages Drop noLegal triplet from sitemap and mark those pages noindex,follow (resolves ‘Crawled - currently not indexed’); add SoftwareApplication JSON-LD to EN/RU/UK landing pages [branch: DEBUG-v013]
2026-06-14 16:28:23 app_v2/src/main/res/xml/sza_resources.xml SFTP S0046 key add predefined SFTP key-auth test resource for S0046 [branch: DEBUG-v013]
2026-06-14 16:28:23 app_v2/src/main/assets/sftp_keys/s0046_test_ed25519 s0046_test_ed25519 Add bundled SFTP private key asset for S0046 local test resource [branch: DEBUG-v013]
2026-06-14 16:43:55 .claude/commands/spec-test-device.md spec-test-device skill Token discipline: drive targeting+verification from mobile_list_elements_on_screen; evidence via mobile_save_screenshot (off-context); reserve mobile_take_screenshot for fallback only. Mirrored to .github/prompts. [branch: DEBUG-v013]
2026-06-14 16:56:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt S0405 Replace permission snackbar with step-by-step onboarding dialog (covers Android restricted-settings unblock for sideload); buttons open accessibility deep-link + App info [branch: DEBUG-v013]
2026-06-14 17:04:21 dev/S0046_ui_clarify_sftp_key_ux.md S0046 UI clarify add ready UX decisions for SFTP key-auth setup [branch: DEBUG-v013]
2026-06-14 17:11:38 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayControllerImpl.kt S0405 Add fallback capture route: runtime priority accessibility>MediaProjection; onboarding dialog offers Old method (draw-over-apps + per-shot consent) when accessibility cannot be enabled; full restricted-settings instructions in dialog text [branch: DEBUG-v013]
2026-06-14 17:20:36 PLAN/S0421_windows-sftp-folder-share-companion.md spec Scaffold strategic spec skeleton S0421 [branch: DEBUG-v013]
2026-06-14 17:23:20 PLAN/S0421_windows-sftp-folder-share-companion.md spec Extend Draft capture for S0421 with Windows subproject note [branch: DEBUG-v013]
2026-06-14 17:27:41 PLAN/S0422_resource-import-file-format.md spec Scaffold strategic spec skeleton S0422 [branch: DEBUG-v013]
2026-06-14 17:31:05 app_v2/src/main/res/layout/activity_add_resource.xml S0046 S0046 Phase 07: SFTP form UX - move host-key field into collapsible SFTP-only Server verification block, add sign-in-method label, a11y contentDescription on header and key upload [branch: DEBUG-v013]
2026-06-14 17:31:05 app_v2/src/main/res/values/strings.xml S0046 S0046 Phase 07: add server-verification title/subtitle, sign-in-method label, fingerprint helper; friendlier host-key mismatch copy (EN/RU/UK) [branch: DEBUG-v013]
2026-06-14 17:31:05 app_v2/src/main/res/values/strings_sources.xml S0046 S0046 Phase 07: relabel SSH private-key field and helper, passphrase helper to plain wording (EN/RU/UK) [branch: DEBUG-v013]
2026-06-14 17:31:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt S0046 S0046 Phase 07: hide Server verification block for FTP, show for SFTP, explicit initial visibility [branch: DEBUG-v013]
2026-06-14 17:31:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceFormManager.kt S0046 S0046 Phase 07: bind Server verification collapsible header [branch: DEBUG-v013]
2026-06-14 17:31:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceHelper.kt S0046 S0046 Phase 07: reveal Server verification block on edit when a fingerprint is already pinned [branch: DEBUG-v013]
2026-06-14 17:31:05 PLAN/S0046_sftp-key-auth-hardening/PHASE_07__form-ux-simplification.md S0046 S0046: author tactical Phase 07 (form UX simplification) and update INDEX [branch: DEBUG-v013]
2026-06-14 17:34:58 app_v2/src/main/res/layout/item_media_file.xml S0419 list checkbox fix Fix: selection checkbox disappeared in list-with-thumbnails (overlay on small thumbnail was lost on the image). Reverted to a leading bottom-left column (always visible, no name overlap) in both main and noLegal list layouts; removed the now-unneeded audio-only name-margin workaround. [branch: DEBUG-v013]
2026-06-14 17:55:49 app_v2/src/main/res/layout/item_media_file.xml S0419 list checkbox overlay Per owner: checkbox overlays the thumbnail bottom-left in list (overlap intended). Re-applied overlay (main + noLegal), declared last for top z-order, added theme-aware surface chip (bg_checkbox_overlay) so the box stays visible on any thumbnail. Audio-only name start-margin restored. [branch: DEBUG-v013]
2026-06-14 18:19:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt calculator Fix empty Function chooser dialog (ScrollView dropped GridLayout width so weighted 0dp buttons collapsed); replace with themed list dialog. Add trailing triangle to Function menu item to signal it opens a chooser. [branch: DEBUG-v013]
2026-06-14 18:36:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt showFunctionChooser Reworked calculator function chooser into a titleless two-column dialog and added concise localized function labels to avoid scrolling. [branch: DEBUG-v013]
2026-06-14 18:48:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt ui-fix Compact calculator function chooser dialog and add scroll-safe bounds [branch: DEBUG-v013]
2026-06-14 18:48:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorInputManager.kt standardDebug Compact calculator function chooser dialog and constrain its size [branch: DEBUG-v013]
2026-06-14 18:54:27 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenGestureOverlayStartupCoordinator.kt ScreenGestureOverlayStartupCoordinator Restore the screenshot gesture overlay on the first foreground startup when the persisted toggle is enabled [branch: DEBUG-v013]
2026-06-14 19:16:05 scripts/builders/build-aab-release.ps1 build-aab-release Fix inverted version-guard (-xor on wrong polarity) that threw on auto-versioning (empty args from a.ps1 r) [branch: DEBUG-v013]
2026-06-14 19:30:19 translate_feature/src/main/AndroidManifest.xml translate_feature Declare hasCode=false on code-less DFM so release bundletool accepts the R8-stripped (0-dex) module; translation ships bundled in app_v2 base [branch: DEBUG-v013]
2026-06-14 19:40:41 scripts/release/build-release-spectrum.ps1 release-version-read Case-insensitive (?i) version regex in spectrum/publish-github/build-vr readers; b4ea71cf moved version into defaultAppVersionName (capital V) which case-sensitive .NET regex missed [branch: DEBUG-v013]
2026-06-14 20:59:13 app_v2/build.gradle.kts edge-to-edge compatibility Updated API 35 BottomSheet edge-to-edge theme and aligned AndroidX Activity/AppCompat versions for Android 15 compatibility [branch: DEBUG-v014]
2026-06-14 23:51:46 PLAN/S0424_screenshot-up-gesture-draw.md spec Scaffold strategic spec skeleton S0424 [branch: DEBUG-v014]
2026-06-14 23:55:53 PLAN/S0425_screenshot-gesture-player-ocr.md spec Scaffold strategic spec skeleton S0425 [branch: DEBUG-v014]
2026-06-15 00:09:03 PLAN/S0405_always-on-top-overlay-screenshot.md spec-arc Archive S0405 (always-on-top-overlay-screenshot) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 00:09:03 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenshotAccessibilityService.kt spec-arc Remove S0405 BlockNeedUserTest debug tags on archive [branch: DEBUG-v014]
2026-06-15 00:26:51 PLAN/S0429_home-screen-google-content.md S0404 epic Add S0429 (Draft research spec): operate with Google content (YouTube/Music/Gmail/Keep) on launcher home surface; research artifact 10 + wired into S0404 §6 item 10 and §10 [branch: DEBUG-v014]
2026-06-15 00:33:12 PLAN/S0333_bugfix-mouse-primary-click-dispatch.md spec-arc Archive S0333 (bugfix-mouse-primary-click-dispatch) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 00:33:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/MouseEventHandler.kt spec-arc Remove S0333 debug tag on archive (left BlockNeedUserTest) [branch: DEBUG-v014]
2026-06-15 00:39:41 PLAN/S0336_nolegal-extended-system-info.md spec-arc Archive S0336 (nolegal-extended-system-info) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 00:39:41 app_v2/src/noLegal/java/com/sza/fastmediasorter/diagnostics/NoLegalExtendedDiagnosticsContributor.kt spec-arc Remove S0336 BlockNeedUserTest debug tag + unused Timber import [branch: DEBUG-v014]
2026-06-15 00:39:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsLogHelper.kt spec-arc Remove S0336 BlockNeedUserTest debug tag [branch: DEBUG-v014]
2026-06-15 00:41:09 PLAN/S0344_smb-streaming-playback-robustness.md spec-arc Archive S0344 (smb-streaming-playback-robustness) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 00:41:09 PLAN/S0345_log-hygiene-expected-permission-denials.md spec-arc Archive S0345 (log-hygiene-expected-permission-denials) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 00:41:09 PLAN/S0347_audio-cover-artist-priority-confidence.md spec-arc Archive S0347 (audio-cover-artist-priority-confidence) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 00:41:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerErrorHandler.kt spec-arc Remove S0344 BlockNeedUserTest debug tag [branch: DEBUG-v014]
2026-06-15 00:41:09 app_v2/src/main/java/com/sza/fastmediasorter/data/network/datasource/SmbDataSource.kt spec-arc Remove S0344 BlockNeedUserTest debug tag [branch: DEBUG-v014]
2026-06-15 00:41:09 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GatherSystemInfoUseCase.kt spec-arc Remove S0345 BlockNeedUserTest debug tag [branch: DEBUG-v014]
2026-06-15 00:41:09 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SearchAudioCoverUseCase.kt spec-arc Remove S0347 BlockNeedUserTest debug tag [branch: DEBUG-v014]
2026-06-15 00:44:31 PLAN/S0356_bugfix-player-media-load-npe.md spec-arc Archive S0356 (bugfix-player-media-load-npe) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 00:44:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt spec-arc Remove S0356 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 00:52:00 app_v2/src/main/res/drawable/selector_checkbox_select.xml S0419 custom selection checkbox Replaced the surface chip with a self-contrasting custom checkbox button (checkbox_select_off/on + selector): unchecked = small white square with black outline, checked = black square with white check. Applied to all file checkboxes (list + grid + no-thumb plank, main + noLegal) via AppCompatCheckBox + android:button + buttonTint null; background null so the thumbnail shows around the box. Removed unused bg_checkbox_overlay. [branch: DEBUG-v014]
2026-06-15 00:55:11 temp/done/S0374_browse-top-command-buttons-20pct.md spec-arc Archive S0374 (browse-top-command-buttons-20pct) -> temp/done [branch: DEBUG-v014]
2026-06-15 00:55:11 temp/done/S0386_ondemand-ocr-translation-delivery.md spec-arc Archive S0386 (ondemand-ocr-translation-delivery) -> temp/done [branch: DEBUG-v014]
2026-06-15 00:55:11 temp/done/S0388_cloud-apk-classify-disk-footprint.md spec-arc Archive S0388 (cloud-apk-classify-disk-footprint) -> temp/done [branch: DEBUG-v014]
2026-06-15 00:55:11 temp/done/S0390_standalone-command-panel-parity.md spec-arc Archive S0390 (standalone-command-panel-parity) -> temp/done [branch: DEBUG-v014]
2026-06-15 00:55:11 temp/done/S0401_s0386-play-compliant-so-delivery.md spec-arc Archive S0401 (s0386-play-compliant-so-delivery) -> temp/done [branch: DEBUG-v014]
2026-06-15 00:55:11 temp/done/S0408_bugfix-player-textpager-close-eio-crash.md spec-arc Archive S0408 (bugfix-player-textpager-close-eio-crash) -> temp/done [branch: DEBUG-v014]
2026-06-15 00:55:11 temp/done/S0410_standalone-image-action-parity.md spec-arc Archive S0410 (standalone-image-action-parity) -> temp/done [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt spec-arc Remove S0374 debug tag + unused Timber import [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCommandOverflowManager.kt spec-arc Remove S0374 debug tag + unused Timber import [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/translationMlKit/java/com/sza/fastmediasorter/ui/player/helpers/TranslationBackend.kt spec-arc Remove S0386 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/translationMlKit/java/com/sza/fastmediasorter/domain/usecase/PrewarmTranslationModelUseCase.kt spec-arc Remove S0386 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt spec-arc Remove S0386 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackRenderersFactory.kt spec-arc Remove S0386 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredNativeLibraryLoader.kt spec-arc Remove S0386 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/VrApkArchiveResolver.kt spec-arc Remove S0388 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-arc Remove S0390 + S0410 debug tags [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/RealDeliverableSetDownloader.kt spec-arc Remove S0401 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextFilePager.kt spec-arc Remove S0408 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerViewModel.kt spec-arc Remove S0410 debug tag [branch: DEBUG-v014]
2026-06-15 00:55:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/StandaloneDrawSaveHelper.kt spec-arc Remove S0410 debug tag [branch: DEBUG-v014]
2026-06-15 00:57:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt draw-eraser Fix DRAW eraser painting opaque black on screen: move DrawCanvasView to a software layer so PorterDuff.Mode.CLEAR truly erases drawn strokes back to transparent (HW-accelerated canvas turned CLEAR into black) [branch: DEBUG-v014]
2026-06-15 01:00:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt S0431 send-to-Keep (read-only text) S0431: add ‘Send to Google Keep’ overflow action to read-only text viewer (unified player + standalone text host), shown only when Keep installed [branch: DEBUG-v014]
2026-06-15 01:16:26 PLAN/S0415_smb-folder-scan-hang.md spec-arc Archive S0415 (smb-folder-scan-hang) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 01:16:26 app_v2/src/main/java/com/sza/fastmediasorter/data/network/helpers/SmbDirectoryScanner.kt spec-arc Remove S0415 BlockNeedUserTest debug tags on archive [branch: DEBUG-v014]
2026-06-15 01:17:12 PLAN/S0416_fgs-notification-icon-attr-tint-crash.md spec-arc Archive S0416 (fgs-notification-icon-attr-tint-crash) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 01:17:12 app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt spec-arc Remove S0416 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 01:17:12 app_v2/src/main/java/com/sza/fastmediasorter/worker/DeliverableDownloadWorker.kt spec-arc Remove S0416 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 01:17:15 PLAN/S0432_bugfix-delivered-payload-integrity-recovery.md spec Scaffold strategic spec skeleton S0432 [branch: DEBUG-v014]
2026-06-15 01:24:14 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt vr/noLegal Fix noLegal compile: onRequestPermissionsResult override signature must use invariant Array (ComponentActivity callback), not Array [branch: DEBUG-v014]
2026-06-15 01:37:53 PLAN/S0418_standard-edge-gesture-screenshot.md spec-all Strategic spec S0418: Play-safe edge-gesture screenshot port to standard+photos (MediaProjection capture; a11y stays noLegal-only) [branch: DEBUG-v014]
2026-06-15 01:43:07 PLAN/S0418_standard-edge-gesture-screenshot/INDEX.md spec-all Tactical plan S0418 (F2) [branch: DEBUG-v014]
2026-06-15 01:43:07 PLAN/S0418_standard-edge-gesture-screenshot/research/01__play-capture-port-analysis.md spec-all Tactical plan S0418 (F2) [branch: DEBUG-v014]
2026-06-15 01:43:07 PLAN/S0418_standard-edge-gesture-screenshot/PHASE_01__extract-shared-capture-machinery.md spec-all Tactical plan S0418 (F2) [branch: DEBUG-v014]
2026-06-15 01:43:07 PLAN/S0418_standard-edge-gesture-screenshot/PHASE_02__play-flavor-capture-impl.md spec-all Tactical plan S0418 (F2) [branch: DEBUG-v014]
2026-06-15 01:43:07 PLAN/S0418_standard-edge-gesture-screenshot/PHASE_03__play-flavor-manifests.md spec-all Tactical plan S0418 (F2) [branch: DEBUG-v014]
2026-06-15 01:43:07 PLAN/S0418_standard-edge-gesture-screenshot/PHASE_04__docs-catalog-features.md spec-all Tactical plan S0418 (F2) [branch: DEBUG-v014]
2026-06-15 01:57:27 app_v2/build.gradle.kts spec-all S0418: mount src/screenCapture into standard/photos/noLegal; src/screenCapturePlay into standard/photos [branch: DEBUG-v014]
2026-06-15 01:57:27 app_v2/src/screenCapturePlay/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayControllerImpl.kt spec-all S0418: Play MediaProjection-only capture controller (no accessibility path) [branch: DEBUG-v014]
2026-06-15 01:57:27 app_v2/src/screenCapturePlay/java/com/sza/fastmediasorter/di/ScreenCaptureModule.kt spec-all S0418: Play @IntoSet controller binding [branch: DEBUG-v014]
2026-06-15 01:57:27 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/OverlayHostService.kt spec-all S0418: moved shared capture machinery (overlay host/strip/consent/capture) out of src/noLegal into shared source set [branch: DEBUG-v014]
2026-06-15 01:57:27 app_v2/src/standard/AndroidManifest.xml spec-all S0418: declare overlay strip + MediaProjection capture services/perms (no accessibility service) [branch: DEBUG-v014]
2026-06-15 01:57:28 app_v2/src/photos/AndroidManifest.xml spec-all S0418: declare overlay strip + MediaProjection capture services/perms (no accessibility service) [branch: DEBUG-v014]
2026-06-15 01:57:28 dev/CATALOG/scripts/scan.ps1 spec-all S0418: add screenCapture/screenCapturePlay source roots to catalog scan [branch: DEBUG-v014]
2026-06-15 01:57:28 dev/CATALOG/scripts/render.ps1 spec-all S0418: sync Resolve-SourceLink roots with scan.ps1 [branch: DEBUG-v014]
2026-06-15 01:57:28 docs/FEATURES.md spec-all S0418: edge-gesture screen capture now in Play builds (EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 02:00:00 PLAN/S0433_screenshot-gesture-down-toggle-dead.md spec-draft Park dead screenshot-gesture-down toggle (auto-captured during S0418) [branch: DEBUG-v014]
2026-06-15 02:05:15 PLAN/S0418_standard-edge-gesture-screenshot.md spec-all S0418: on-device test journal (enable/overlay/FGS path verified on standard; capture flow pending owner) [branch: DEBUG-v014]
2026-06-15 02:05:15 PLAN/S0418_standard-edge-gesture-screenshot/INDEX.md spec-all S0418: phases 4/4 done, status BlockNeedUserTest [branch: DEBUG-v014]
2026-06-15 02:12:11 scripts/devtest/maestro-run.ps1 S0420 Maestro device-test engine pilot: thin runner (stable exit codes, off-context temp log), scripts/devtest/maestro/ home with README + _template.yaml + S0398.yaml example flow [branch: DEBUG-v014]
2026-06-15 02:22:35 PLAN/S0422_resource-import-file-format.md spec-all Strategic spec written + approved: S0422 resource import/export file format [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format/INDEX.md spec-tech Create tactical plan for S0422 [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format/research/01__file-association.md spec-tech Research 01: file association resolved [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format/PHASE_01__format-and-export.md spec-tech Phase: PHASE_01__format-and-export [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format/PHASE_02__import-from-file.md spec-tech Phase: PHASE_02__import-from-file [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format/PHASE_03__settings-ui.md spec-tech Phase: PHASE_03__settings-ui [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format/PHASE_04__per-resource-export.md spec-tech Phase: PHASE_04__per-resource-export [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format/PHASE_05__file-association.md spec-tech Phase: PHASE_05__file-association [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format/PHASE_06__docs-catalog-cleanup.md spec-tech Phase: PHASE_06__docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-15 02:32:31 PLAN/S0422_resource-import-file-format.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-15 02:38:59 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ResourceShareFormat.kt spec-dev S0422 Phase 01-02: resource share format, serializer, export use case, importer external-source + preview + flavor filter [branch: DEBUG-v014]
2026-06-15 02:38:59 app_v2/src/main/java/com/sza/fastmediasorter/data/resourceshare/ResourceShareSerializer.kt spec-dev S0422 Phase 01-02: resource share format, serializer, export use case, importer external-source + preview + flavor filter [branch: DEBUG-v014]
2026-06-15 02:38:59 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportResourcesToFileUseCase.kt spec-dev S0422 Phase 01-02: resource share format, serializer, export use case, importer external-source + preview + flavor filter [branch: DEBUG-v014]
2026-06-15 02:38:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/SzaResourcesImporter.kt spec-dev S0422 Phase 01-02: resource share format, serializer, export use case, importer external-source + preview + flavor filter [branch: DEBUG-v014]
2026-06-15 02:50:17 app_v2/src/main/res/values/strings.xml spec-dev S0422 Phase 03: settings import/export resources UI + strings + VM states [branch: DEBUG-v014]
2026-06-15 02:50:17 app_v2/src/main/res/values-ru/strings.xml spec-dev S0422 Phase 03: settings import/export resources UI + strings + VM states [branch: DEBUG-v014]
2026-06-15 02:50:17 app_v2/src/main/res/values-uk/strings.xml spec-dev S0422 Phase 03: settings import/export resources UI + strings + VM states [branch: DEBUG-v014]
2026-06-15 02:50:17 app_v2/src/main/res/layout/fragment_settings_backup_restore.xml spec-dev S0422 Phase 03: settings import/export resources UI + strings + VM states [branch: DEBUG-v014]
2026-06-15 02:50:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt spec-dev S0422 Phase 03: settings import/export resources UI + strings + VM states [branch: DEBUG-v014]
2026-06-15 02:50:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt spec-dev S0422 Phase 03: settings import/export resources UI + strings + VM states [branch: DEBUG-v014]
2026-06-15 02:59:12 app_v2/src/main/res/menu/resource_item_actions.xml spec-dev S0422 Phase 04: per-resource export menu action + share via ACTION_SEND [branch: DEBUG-v014]
2026-06-15 02:59:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt spec-dev S0422 Phase 04: per-resource export menu action + share via ACTION_SEND [branch: DEBUG-v014]
2026-06-15 02:59:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-dev S0422 Phase 04: per-resource export menu action + share via ACTION_SEND [branch: DEBUG-v014]
2026-06-15 02:59:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainEventHandler.kt spec-dev S0422 Phase 04: per-resource export menu action + share via ACTION_SEND [branch: DEBUG-v014]
2026-06-15 02:59:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev S0422 Phase 04: per-resource export menu action + share via ACTION_SEND [branch: DEBUG-v014]
2026-06-15 02:59:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceimport/ResourceImportActivity.kt spec-dev S0422 Phase 05: file-association receiver activity + VIEW/SEND intent filters [branch: DEBUG-v014]
2026-06-15 02:59:12 app_v2/src/main/AndroidManifest.xml spec-dev S0422 Phase 05: file-association receiver activity + VIEW/SEND intent filters [branch: DEBUG-v014]
2026-06-15 03:00:04 app_v2/build.gradle.kts app_v2 S0423: remove empty translate_feature DFM; bundle ML Kit Translate in standard/legacy base (re-add native .so), drop Play Core SplitInstall + DFM capability gating; fixes broken store translation and hasCode/0x7e release-bundle blockers [branch: DEBUG-v014]
2026-06-15 03:04:14 docs/FEATURES.md spec-dev S0422: share resources between devices feature entry (EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 03:04:14 PLAN/S0422_resource-import-file-format.md spec-dev S0422: all phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-15 03:19:52 scripts/builders/build-nolegal-debug.ps1 build-tooling nd: enable auto-versioning by default so sideload noLegal debug APKs (installed via ivn) carry the real build timestamp; -AutoVersion:$false opts into frozen default for config-cache reuse [branch: DEBUG-v014]
2026-06-15 03:37:52 app_v2/build.gradle.kts app_v2 S0423 release scope: keep S0418 screencapture noLegal-only - unmount src/screenCapture* from standard/photos source sets and strip SPECIAL_USE/SYSTEM_ALERT_WINDOW/MediaProjection declarations + components from standard/photos manifests (Play review risk). Code kept. [branch: DEBUG-v014]
2026-06-15 12:47:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt S0419 Browse list no-thumbnail mode: move selection checkbox flush to the left of the small extension icon instead of overlaying it (icon was hidden behind the checkbox) [branch: DEBUG-v014]
2026-06-15 13:19:05 PLAN/S0435_settings-os-interaction-default-player.md spec Add strategic spec S0435: default-player registration in settings + OS-interaction group; parked S0436/S0437 [branch: DEBUG-v014]
2026-06-15 13:27:06 PLAN/S0435_settings-os-interaction-default-player/INDEX.md spec-tech Create tactical plan for S0435 (4 phases) [branch: DEBUG-v014]
2026-06-15 13:27:06 PLAN/S0435_settings-os-interaction-default-player/PHASE_01__strings.md spec-tech Phase 01: strings [branch: DEBUG-v014]
2026-06-15 13:27:06 PLAN/S0435_settings-os-interaction-default-player/PHASE_02__layout-restructure.md spec-tech Phase 02: layout-restructure [branch: DEBUG-v014]
2026-06-15 13:27:07 PLAN/S0435_settings-os-interaction-default-player/PHASE_03__manager-fragment-wiring.md spec-tech Phase 03: manager-fragment-wiring [branch: DEBUG-v014]
2026-06-15 13:27:07 PLAN/S0435_settings-os-interaction-default-player/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-15 13:27:07 PLAN/S0435_settings-os-interaction-default-player.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-15 13:29:09 app_v2/src/main/res/values/strings.xml spec-dev S0435 phase-01.1: rename OS-interaction/gestures/incoming-links titles [branch: DEBUG-v014]
2026-06-15 13:29:22 app_v2/src/main/res/values-ru/strings.xml spec-dev S0435 phase-01.1: rename OS-interaction/gestures/incoming-links titles [branch: DEBUG-v014]
2026-06-15 13:29:35 app_v2/src/main/res/values-uk/strings.xml spec-dev S0435 phase-01.1: rename OS-interaction/gestures/incoming-links titles [branch: DEBUG-v014]
2026-06-15 13:29:49 app_v2/src/main/res/values/strings_settings.xml spec-dev S0435 phase-01.1: rename OS-interaction/gestures/incoming-links titles [branch: DEBUG-v014]
2026-06-15 13:30:02 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0435 phase-01.1: rename OS-interaction/gestures/incoming-links titles [branch: DEBUG-v014]
2026-06-15 13:30:16 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0435 phase-01.1: rename OS-interaction/gestures/incoming-links titles [branch: DEBUG-v014]
2026-06-15 13:31:31 app_v2/src/main/res/values/strings_settings.xml spec-dev S0435 phase-01.2: add default-player subgroup title + 4 button labels [branch: DEBUG-v014]
2026-06-15 13:31:44 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0435 phase-01.2: add default-player subgroup title + 4 button labels [branch: DEBUG-v014]
2026-06-15 13:31:57 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0435 phase-01.2: add default-player subgroup title + 4 button labels [branch: DEBUG-v014]
2026-06-15 13:39:37 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0435 phase-02: OS-interaction group restructure (rotate+default-player+links+gestures), portrait + 2-col landscape [branch: DEBUG-v014]
2026-06-15 13:39:51 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0435 phase-02: OS-interaction group restructure (rotate+default-player+links+gestures), portrait + 2-col landscape [branch: DEBUG-v014]
2026-06-15 13:44:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerSettingsManager.kt spec-dev S0435 phase-03: default-player settings subgroup manager + fragment wiring; gesture-subgroup gating [branch: DEBUG-v014]
2026-06-15 13:47:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0435 phase-03: inject MediaCapabilities, bind default-player subgroup, gate gesture subgroup [branch: DEBUG-v014]
2026-06-15 13:52:01 docs/FEATURES.md spec-dev S0435 phase-04: document default-player registration from settings [branch: DEBUG-v014]
2026-06-15 13:52:02 docs/FEATURES_RU.md spec-dev S0435 phase-04: document default-player registration from settings [branch: DEBUG-v014]
2026-06-15 13:52:03 docs/FEATURES_UK.md spec-dev S0435 phase-04: document default-player registration from settings [branch: DEBUG-v014]
2026-06-15 13:54:50 PLAN/S0435_settings-os-interaction-default-player.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-15 13:54:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerSettingsManager.kt spec-dev S0435: default-player settings subgroup manager + BlockNeedUserTest probe [branch: DEBUG-v014]
2026-06-15 14:24:09 app_v2/src/main/res/values*/strings_settings.xml settings Rename setting_prevent_sleep_desc: ‘while viewing media’ -> ‘while using the app’ (EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 14:29:21 app_v2/src/main/res/values/strings_settings.xml spec-dev S0435 device-test refinements: Tonal buttons + muted hint, doc-type dialog (PDF/text/EPUB/Office), OS-interaction toggle moves [branch: DEBUG-v014]
2026-06-15 14:29:34 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0435 device-test refinements: Tonal buttons + muted hint, doc-type dialog (PDF/text/EPUB/Office), OS-interaction toggle moves [branch: DEBUG-v014]
2026-06-15 14:29:48 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0435 device-test refinements: Tonal buttons + muted hint, doc-type dialog (PDF/text/EPUB/Office), OS-interaction toggle moves [branch: DEBUG-v014]
2026-06-15 14:30:01 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0435 device-test refinements: Tonal buttons + muted hint, doc-type dialog (PDF/text/EPUB/Office), OS-interaction toggle moves [branch: DEBUG-v014]
2026-06-15 14:30:14 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0435 device-test refinements: Tonal buttons + muted hint, doc-type dialog (PDF/text/EPUB/Office), OS-interaction toggle moves [branch: DEBUG-v014]
2026-06-15 14:30:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt spec-dev S0435 device-test refinements: Tonal buttons + muted hint, doc-type dialog (PDF/text/EPUB/Office), OS-interaction toggle moves [branch: DEBUG-v014]
2026-06-15 14:31:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerSettingsManager.kt spec-dev S0435 device-test refinements: Tonal buttons + muted hint, doc-type dialog (PDF/text/EPUB/Office), OS-interaction toggle moves [branch: DEBUG-v014]
2026-06-15 14:33:36 PLAN/S0435_settings-os-interaction-default-player.md spec-dev Device-test refinements applied; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-15 14:33:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerSettingsManager.kt spec-dev S0435: Tonal buttons, supportsEpub dispatch, moved toggles wiring intact, BlockNeedUserTest probe [branch: DEBUG-v014]
2026-06-15 14:33:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt spec-dev S0435: document default dialog offers PDF/text(TXT,LOG)/EPUB/Office [branch: DEBUG-v014]
2026-06-15 14:39:12 PLAN/S0438_keep-screen-on-player.md spec Scaffold strategic spec skeleton S0438 [branch: DEBUG-v014]
2026-06-15 14:44:49 PLAN/S0439_screen-rotation-follow-os.md spec Scaffold strategic spec skeleton S0439 [branch: DEBUG-v014]
2026-06-15 14:50:23 app_v2/src/main/java/com/sza/fastmediasorter/util/ExtensionThumbnailGenerator.kt no-thumbnail tile Enlarge extension label 1.5x (0.30 -> 0.45 of tile size) - primary info of the colored tile in no-thumbnail mode [branch: DEBUG-v014]
2026-06-15 14:58:03 app_v2/src/main/res/values/strings_settings.xml spec-dev S0435 fix: document type chooser shows item list (drop setMessage); remove orphaned message string [branch: DEBUG-v014]
2026-06-15 14:58:16 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0435 fix: document type chooser shows item list (drop setMessage); remove orphaned message string [branch: DEBUG-v014]
2026-06-15 14:58:30 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0435 fix: document type chooser shows item list (drop setMessage); remove orphaned message string [branch: DEBUG-v014]
2026-06-15 14:58:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt spec-dev S0435 fix: document type chooser shows item list (drop setMessage); remove orphaned message string [branch: DEBUG-v014]
2026-06-15 14:59:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerSettingsManager.kt spec-dev S0435 fix: document type chooser shows item list (drop setMessage); remove orphaned message string [branch: DEBUG-v014]
2026-06-15 15:01:55 PLAN/S0435_settings-os-interaction-default-player.md spec-dev Fix doc-type chooser list; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-15 15:01:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt spec-dev S0435: drop setMessage so document-type item list renders [branch: DEBUG-v014]
2026-06-15 15:05:21 app_v2/src/main/res/layout/fragment_settings_playback.xml, app_v2/src/main/res/layout-land/fragment_settings_playback.xml Playback settings UI Move ‘Show detailed errors’ toggle from the Player UI group to the Behaviour group (portrait + landscape) [branch: DEBUG-v014]
2026-06-15 15:07:45 PLAN/S0440_settings-declaration-docs.md spec Scaffold strategic spec skeleton S0440 [branch: DEBUG-v014]
2026-06-15 15:10:59 app_v2/src/main/res/values/strings.xml quick Rename setting small_controls -> ‘Compact bottom buttons’ (EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 15:10:59 app_v2/src/main/res/values/strings_settings.xml quick Update setting_small_controls_desc to match ‘Compact bottom buttons’ (EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 15:16:15 app_v2/src/main/res/values/strings_settings.xml quick Rename All-files settings checkbox -> ‘Allow All Files mode’ + aligned desc (EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 15:16:15 app_v2/src/main/res/values/strings_setup.xml quick Rename welcome All-files checkbox -> ‘Allow All Files mode’ + aligned desc (EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 15:16:16 app_v2/src/main/res/layout/fragment_settings_general.xml quick Point All-files checkbox title to setting_all_files_allow_title (portrait+land) [branch: DEBUG-v014]
2026-06-15 15:21:28 app_v2/src/main/res/values/strings_resource_operations.xml quick Append kebab glyph to resource_ops_in_overflow_menu (EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 15:21:28 app_v2/src/main/res/layout/fragment_settings_general.xml quick Move resource-ops overflow toggle from File browser to Interface group (portrait+land) [branch: DEBUG-v014]
2026-06-15 15:26:21 app_v2/src/main/res/values/strings.xml quick Rename remote-sources group + SMB/(S)FTP/Cloud checkbox titles to descriptive labels (settings + welcome, EN/RU/UK) [branch: DEBUG-v014]
2026-06-15 15:29:59 app_v2/src/main/res/layout/fragment_settings_general.xml Settings General UI Move SMB-reset button into the thumbnail-preload row (pinned right of the toggle); repoint cache-size TextView after Clear Cache button. Portrait only - landscape has no thumbnail-preload row. [branch: DEBUG-v014]
2026-06-15 15:39:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt S0435 Extract screen-gestures into its own collapsible group (groupScreenGestures) after the OS-interaction card; register expandable section + pref key; gate whole card on gesture capability [branch: DEBUG-v014]
2026-06-15 15:40:11 app_v2/src/main/res/layout/fragment_settings_playback.xml S0435 Move screen-gestures rows out of containerSystemApps into a new standalone collapsible card after the OS-interaction group (portrait) [branch: DEBUG-v014]
2026-06-15 15:40:25 app_v2/src/main/res/layout-land/fragment_settings_playback.xml S0435 Move screen-gestures rows out of containerSystemApps into a new standalone collapsible card after the OS-interaction group (landscape) [branch: DEBUG-v014]
2026-06-15 15:53:46 PLAN/S0442_settings-pages-rename-regroup.md spec Add strategic spec S0442 for settings-pages-rename-regroup [branch: DEBUG-v014]
2026-06-15 15:54:57 app_v2/src/noLegal/java/com/sza/fastmediasorter/ui/browse/managers/NoLegalBrowseApkTileBadgeBinder.kt noLegal Skip VR APK badge classification for non-local paths to avoid blocking downloads on network mounts [branch: DEBUG-v014]
2026-06-15 16:06:01 app_v2/src/main/res/layout/fragment_settings_documents.xml fragment_settings_documents Reorder document settings: text+line-numbers and pdf+thumbnails now inline pairs (side-by-side) instead of nested rows [branch: DEBUG-v014]
2026-06-15 16:06:19 PLAN/S0442_settings-pages-rename-regroup/INDEX.md spec-tech Create tactical plan for S0442 [branch: DEBUG-v014]
2026-06-15 16:06:19 PLAN/S0442_settings-pages-rename-regroup/PHASE_01__strings-and-resources.md spec-tech Phase 01: strings-and-resources [branch: DEBUG-v014]
2026-06-15 16:06:19 PLAN/S0442_settings-pages-rename-regroup/PHASE_02__viewmodel-reset-methods.md spec-tech Phase 02: viewmodel-reset-methods [branch: DEBUG-v014]
2026-06-15 16:06:19 PLAN/S0442_settings-pages-rename-regroup/PHASE_03__operations-layout-and-code.md spec-tech Phase 03: operations-layout-and-code [branch: DEBUG-v014]
2026-06-15 16:06:19 PLAN/S0442_settings-pages-rename-regroup/PHASE_04__playback-layout-and-code.md spec-tech Phase 04: playback-layout-and-code [branch: DEBUG-v014]
2026-06-15 16:06:19 PLAN/S0442_settings-pages-rename-regroup/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-15 16:06:19 PLAN/S0442_settings-pages-rename-regroup.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-15 16:08:01 app_v2/src/main/res/values/strings_settings.xml app_v2 S0442 Phase01 Step1.1: rename settings_tab_playback/operations in EN [branch: DEBUG-v014]
2026-06-15 16:08:20 app_v2/src/main/res/values-ru/strings_settings.xml app_v2 S0442 Phase01 Step1.1: rename settings_tab_playback/operations in RU [branch: DEBUG-v014]
2026-06-15 16:08:33 app_v2/src/main/res/values-uk/strings_settings.xml app_v2 S0442 Phase01 Step1.1: rename settings_tab_playback/operations in UK [branch: DEBUG-v014]
2026-06-15 16:13:13 app_v2/src/main/res/values/strings.xml S0442 Update reset_playback_section* strings to reference Player tab [branch: DEBUG-v014]
2026-06-15 16:13:27 app_v2/src/main/res/values-ru/strings.xml S0442 Update reset_playback_section* strings to reference Player tab (RU) [branch: DEBUG-v014]
2026-06-15 16:13:40 app_v2/src/main/res/values-uk/strings.xml S0442 Update reset_playback_section* strings to reference Player tab (UK) [branch: DEBUG-v014]
2026-06-15 16:14:48 app_v2/src/main/res/values/strings.xml S0442 Add reset_operations_section* strings (EN) [branch: DEBUG-v014]
2026-06-15 16:14:59 PLAN/S0443_keep-send-option.md spec Scaffold strategic spec skeleton S0443 [branch: DEBUG-v014]
2026-06-15 16:15:03 app_v2/src/main/res/values-ru/strings.xml S0442 Add reset_operations_section* strings (RU) [branch: DEBUG-v014]
2026-06-15 16:15:16 app_v2/src/main/res/values-uk/strings.xml S0442 Add reset_operations_section* strings (UK) [branch: DEBUG-v014]
2026-06-15 16:16:47 PLAN/S0444_player-send-email.md spec Scaffold strategic spec skeleton S0444 [branch: DEBUG-v014]
2026-06-15 16:18:09 PLAN/S0445_profile-share-to-setting.md spec Scaffold strategic spec skeleton S0445 [branch: DEBUG-v014]
2026-06-15 16:21:52 PLAN/S0446_messenger-share-settings.md spec Scaffold strategic spec skeleton S0446 [branch: DEBUG-v014]
2026-06-15 16:23:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt S0442 Narrow resetPlaybackSection to player-only fields; rename resetDestinationsSection to resetOperationsSection covering all Management-tab fields [branch: DEBUG-v014]
2026-06-15 16:26:01 app_v2/src/main/res/values*/strings_settings.xml strings Rename settings_default_player_btn_docs RU/UK: add “документов”/”документів” to clarify document viewer [branch: DEBUG-v014]
2026-06-15 16:28:30 app_v2/src/main/res/layout/fragment_settings_destinations.xml S0442 Add 4 moved group cards, keybindings row and reset button to Management settings layout (portrait) [branch: DEBUG-v014]
2026-06-15 16:28:44 app_v2/src/main/res/layout-land/fragment_settings_destinations.xml S0442 Add 4 moved group cards, keybindings row and reset button to Management settings layout (landscape) [branch: DEBUG-v014]
2026-06-15 16:45:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt S0442 Phase03 Steps 3.5-3.8 Add @Inject fields, permission launchers, KEY_ constants, moved-group wiring, and reset-button handler [branch: DEBUG-v014]
2026-06-15 16:46:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerSettingsManager.kt S0442 Phase03 Step 3.7 Add FragmentSettingsDestinationsBinding overload via extracted bindViews() to support Management tab [branch: DEBUG-v014]
2026-06-15 16:52:47 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0442 step 4.2 Remove 4 moved group cards and keybindings row from portrait Playback layout [branch: DEBUG-v014]
2026-06-15 16:53:01 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0442 step 4.3 Remove 4 moved group cards and keybindings row from landscape Playback layout [branch: DEBUG-v014]
2026-06-15 16:56:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0442 step 4.4 Remove 4 moved-group KEY_ constants, ExpandableSection entries, map entries, scrollToHighlighted method [branch: DEBUG-v014]
2026-06-15 17:08:31 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0442 step 4.2 Remove Behaviour/OtherFeatures/SystemApps cards and keybindings from portrait Playback layout; retain Touch Zones [branch: DEBUG-v014]
2026-06-15 17:08:45 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0442 step 4.3 Remove Behaviour/OtherFeatures/SystemApps cards and keybindings from landscape Playback layout; retain Touch Zones [branch: DEBUG-v014]
2026-06-15 17:19:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0442 step 4.5 Remove moved-group init methods, permission launchers, and Inject fields from PlaybackSettingsFragment [branch: DEBUG-v014]
2026-06-15 17:23:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerSettingsManager.kt spec-dev S0442 step 4.6 Remove dead PlaybackBinding overload; manager now targets FragmentSettingsDestinationsBinding only [branch: DEBUG-v014]
2026-06-15 17:28:39 PLAN/S0442_settings-pages-rename-regroup.md spec-dev All phases done; status -> Implemented [branch: DEBUG-v014]
2026-06-15 17:32:22 PLAN/S0442_settings-pages-rename-regroup.md spec-check Audit S0442 -> Verified; PASS 20/WARN 0/FAIL 0/MANUAL 4/EXEMPT 1 [branch: DEBUG-v014]
2026-06-15 17:57:52 PLAN/S0296_vr-immerse-video-playback.md spec-check Audit S0296 -> Partial; PASS/WARN/FAIL 30/4/0; surfaced typed-failure-contract gap (criterion #7) + FEATURES bullet gap; /spec-fix deferred (dirty tree) [branch: DEBUG-v014]
2026-06-15 18:20:53 PLAN/S0435_settings-os-interaction-default-player.md spec-arc Archive S0435 (settings-os-interaction-default-player) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 18:20:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerSettingsManager.kt spec-arc Remove S0435 debug tag and unused Timber import on archive [branch: DEBUG-v014]
2026-06-15 18:21:12 PLAN/S0296_vr-immerse-video-playback.md spec-all F5 fix-pass S0296: cleared stale Depends-on header (S0295 Archived) + docs/FEATURES reconciliation to consolidated VR bullet; status stays Partial (device + owner #3 gated) [branch: DEBUG-v014]
2026-06-15 18:28:12 PLAN/S0430_vr-diagnosticxr-onrequestpermissionsresult-signature-break.md spec-all S0430 Verified: noLegal/vr onRequestPermissionsResult override-variance compile break already fixed in source (Array); confirmed by clean compileNoLegalDebugKotlin --rerun-tasks BUILD SUCCESSFUL [branch: DEBUG-v014]
2026-06-15 18:34:24 PLAN/S0432_bugfix-delivered-payload-integrity-recovery.md spec-all F1 strategic spec authored + auto-approved: S0432 [branch: DEBUG-v014]
2026-06-15 18:38:11 app_v2/src/test/java/com/sza/fastmediasorter spec-all S0434 Verified: restored standardDebugUnitTest compilation (3 tests - AppStartupInitializer/SyncNetworkResources/StandalonePlayerViewModel - missing new ctor args); compile + touched-class runtime PASS [branch: DEBUG-v014]
2026-06-15 18:40:12 PLAN/S0432_bugfix-delivered-payload-integrity-recovery/INDEX.md spec-tech Create tactical plan for S0432 [branch: DEBUG-v014]
2026-06-15 18:40:12 PLAN/S0432_bugfix-delivered-payload-integrity-recovery/PHASE_01__recovery-seam.md spec-tech Phase 01: recovery-seam [branch: DEBUG-v014]
2026-06-15 18:40:13 PLAN/S0432_bugfix-delivered-payload-integrity-recovery/PHASE_02__consumer-message.md spec-tech Phase 02: consumer-message [branch: DEBUG-v014]
2026-06-15 18:40:13 PLAN/S0432_bugfix-delivered-payload-integrity-recovery/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-15 18:40:13 PLAN/S0432_bugfix-delivered-payload-integrity-recovery.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-15 18:44:13 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-all S0441 Verified: added thumbnail-preload + Wi-Fi-only toggles to landscape Settings/General (portrait parity, Rule 11); binding fields now non-null, removed stale safe-calls in 2 helpers [branch: DEBUG-v014]
2026-06-15 18:46:27 PLAN/spec-catalog.jsonl spec-next Session: 4 processed (S0296 Partial-gated, S0430/S0434/S0441 Verified); remaining backlog owner/device/settings-flux gated + S0403 (large autonomous flavor) deferred [branch: DEBUG-v014]
2026-06-15 18:47:13 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredPayloadCorruptException.kt spec-dev S0432 P01: typed payload-corruption exception [branch: DEBUG-v014]
2026-06-15 18:47:13 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredNativeLibraryLoader.kt spec-dev S0432 P01: self-invalidate corrupt set on integrity failure, throw typed exception [branch: DEBUG-v014]
2026-06-15 18:47:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt spec-dev S0432 P02: map corruption exception to actionable reinstall message [branch: DEBUG-v014]
2026-06-15 18:47:14 app_v2/src/main/res/values/strings.xml spec-dev S0432 P02: add ocr_engines_damaged (EN) [branch: DEBUG-v014]
2026-06-15 18:47:14 app_v2/src/main/res/values-ru/strings.xml spec-dev S0432 P02: add ocr_engines_damaged (RU) [branch: DEBUG-v014]
2026-06-15 18:47:14 app_v2/src/main/res/values-uk/strings.xml spec-dev S0432 P02: add ocr_engines_damaged (UK) [branch: DEBUG-v014]
2026-06-15 18:48:37 PLAN/S0432_bugfix-delivered-payload-integrity-recovery.md spec-all F3 implemented; build green; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-15 19:46:25 .claude/commands/arc.md arc-skill Add /arc skill: batch multi-ticket archive (looped /spec-arc over a space/comma-separated id list, single summary); register in CLAUDE.md routing [branch: DEBUG-v014]
2026-06-15 19:47:52 .claude/commands/spec-arc.md spec-arc Update /spec-arc to batch-archive N ids (parity with /arc); /arc becomes a thin alias [branch: DEBUG-v014]
2026-06-15 19:47:57 PLAN/S0419_browse-no-thumb-grid-and-card-controls.md arc Archive S0419 (Browse no-thumbnail grid layout and file-card controls) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 19:47:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt arc Remove S0419 Timber.d debug tag [branch: DEBUG-v014]
2026-06-15 19:47:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRecyclerViewManager.kt arc Remove S0419 Timber.d debug tag [branch: DEBUG-v014]
2026-06-15 19:52:29 scripts/devtest/maestro/README.md S0420 Add cross-reference clarifying the per-ticket scripts/devtest/maestro engine vs the root maestro/ feature-smoke suites (separate purpose, separate runner) [branch: DEBUG-v014]
2026-06-15 20:07:17 scripts/devtest/maestro/README.md S0420 Device-proof correction: bump pinned Maestro 1.39.0 -> 2.6.1 (1.39.0 dadb cannot detect modern API-37/16KB emulators + its maestro.bat overflows cmd 8191-char classpath limit); document JDK 17+/ANDROID_HOME requirement and session-lock troubleshooting [branch: DEBUG-v014]
2026-06-15 20:07:17 scripts/devtest/maestro-run.ps1 S0420 Classify device-absence and session-lock Maestro failures as infra exit 4 (not flow-failure exit 3): add ‘not enough devices’, ‘Missing N device’, ‘it is not connected’, ‘locked a portion of the file’ to infraPattern [branch: DEBUG-v014]
2026-06-15 20:28:10 PLAN/S0420_maestro-device-test-flows.md spec-arc Archive S0420 (maestro-device-test-flows, Verified) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 21:00:54 PLAN/S0447_bugfix-exoplayer-release-main-anr.md spec Scaffold strategic spec skeleton S0447 [branch: DEBUG-v014]
2026-06-15 21:15:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt player S0447: drain video effects + detach surface before ExoPlayer.release() to stop main-thread block (Media3 1.2.1 effects-pipeline teardown ANR) [branch: DEBUG-v014]
2026-06-15 21:26:57 scripts/devtest/adb.ps1 devtest-tooling New ad-hoc adb swiss-army CLI (devices/props/current/launch/stop/clear/install/uninstall/shot/log/tap/text/key/prefs/shell); mirrors device-ready.ps1 adb auto-discovery, -Json contract and stable exit codes [branch: DEBUG-v014]
2026-06-15 21:27:05 a.ps1 launcher Add adb aliases (adb passthrough + adb-devices/-shot/-log/-current/-launch/-clear); switch to simple-mode param so trailing -flags forward into target script via $args [branch: DEBUG-v014]
2026-06-15 21:27:06 .claude/settings.local.json mcp-config Re-enable mobile-mcp (cleared disabledMcpjsonServers) for exploratory LLM-driven UI runs [branch: DEBUG-v014]
2026-06-15 21:32:33 CLAUDE.md, docs/DEV_OPS.md rules-docs Document adb swiss-army (scripts/devtest/adb.ps1 + .\a.ps1 adb): CLAUDE.md SS9 Device line; DEV_OPS DEVICE OPS section + a.ps1 alias table rows [branch: DEBUG-v014]
2026-06-15 21:32:33 .claude/commands/spec-test-device.md, verify.md, log-reader.md device-skills Wire adb.ps1 into device skills: props sanity-check, launch (LeakCanary dodge), out-of-loop chores pointer; log-reader quick live-tail [branch: DEBUG-v014]
2026-06-15 21:37:29 app_v2/src/main/java/com/sza/fastmediasorter/core/util/PermissionHelper.kt S0035 Add onLocalNetworkPermissionResult: route to settings on permanent deny [branch: DEBUG-v014]
2026-06-15 21:37:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt S0035 Handle ACCESS_LOCAL_NETWORK request result (permanent-deny settings route) [branch: DEBUG-v014]
2026-06-15 21:37:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0035 Handle ACCESS_LOCAL_NETWORK request result (permanent-deny settings route) [branch: DEBUG-v014]
2026-06-15 21:54:19 PLAN/S0035_android17-local-network-permission.md spec-arc Archive S0035 (android17-local-network-permission) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 21:54:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-arc Remove Timber.d(S0035:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:54:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt spec-arc Remove Timber.d(S0035:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:56:07 PLAN/S0348_home-widget-icon-refresh.md spec-arc Archive S0348 (home-widget-icon-refresh) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 21:56:07 app_v2/src/main/java/com/sza/fastmediasorter/widget/GameLaunchWidgetProvider.kt spec-arc Remove Timber.d(S0348:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:56:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsWidgetHelper.kt spec-arc Remove Timber.d(S0348:) debug tags (spec archived) [branch: DEBUG-v014]
2026-06-15 21:57:36 PLAN/S0349_widget-quick-audio-recorder.md spec-arc Archive S0349 (widget-quick-audio-recorder) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 21:57:36 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt spec-arc Remove Timber.d(S0349:) debug tags (spec archived) [branch: DEBUG-v014]
2026-06-15 21:57:36 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderLaunchManager.kt spec-arc Remove Timber.d(S0349:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:57:36 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderActivity.kt spec-arc Remove Timber.d(S0349:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:57:37 PLAN/S0354_camera-ocr-crop-language-buttons.md spec-arc Archive S0354 (camera-ocr-crop-language-buttons) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 21:57:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt spec-arc Remove Timber.d(S0354:) debug tags (spec archived) [branch: DEBUG-v014]
2026-06-15 21:57:37 PLAN/S0359_camera-permission-inapp-capture.md spec-arc Archive S0359 (camera-permission-inapp-capture) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 21:57:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/helpers/CameraOcrFlowManager.kt spec-arc Remove Timber.d(S0359:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:57:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt spec-arc Remove Timber.d(S0359:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:57:38 PLAN/S0362_keep-share-editor-regression.md spec-arc Archive S0362 (keep-share-editor-regression) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 21:57:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt spec-arc Remove Timber.d(S0362:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:57:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/actions/EditorActionPanelBinder.kt spec-arc Remove Timber.d(S0362:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:58:52 PLAN/S0391_remote-source-runtime-toggles.md spec-arc Archive S0391 (remote-source-runtime-toggles) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 21:58:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeRemoteSourcesController.kt spec-arc Remove Timber.d(S0391:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:58:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-arc Remove Timber.d(S0391:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:58:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt spec-arc Remove Timber.d(S0391:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:58:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-arc Remove Timber.d(S0391:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:58:52 app_v2/src/main/java/com/sza/fastmediasorter/core/coordinator/RemoteSourceDisableCoordinator.kt spec-arc Remove Timber.d(S0391:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 21:58:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainResourceTabsManager.kt spec-arc Remove Timber.d(S0391:) debug tag (spec archived) [branch: DEBUG-v014]
2026-06-15 22:01:47 PLAN/S0406_unified-settings-backup.md spec-arc Archive S0406 (unified-settings-backup) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:01:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BuildBackupPayloadUseCase.kt spec-arc Remove S0406 debug tag (archived) [branch: DEBUG-v014]
2026-06-15 22:01:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt spec-arc Remove S0406 debug tags (archived) [branch: DEBUG-v014]
2026-06-15 22:01:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExportSettingsUseCase.kt spec-arc Remove S0406 debug tag (archived) [branch: DEBUG-v014]
2026-06-15 22:01:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupToGoogleDriveUseCase.kt spec-arc Remove S0406 debug tag (archived) [branch: DEBUG-v014]
2026-06-15 22:01:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyBackupPayloadUseCase.kt spec-arc Remove S0406 debug tag (archived) [branch: DEBUG-v014]
2026-06-15 22:01:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/RestoreFromGoogleDriveUseCase.kt spec-arc Remove S0406 debug tag (archived) [branch: DEBUG-v014]
2026-06-15 22:11:36 PLAN/S0393_player-host-seam-foundation.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 5/0/1; tag coverage 6/7; no crash/regression [branch: DEBUG-v014]
2026-06-15 22:16:04 PLAN/S0393_player-host-seam-foundation.md spec-arc Archive S0393 (player-host-seam-foundation) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:16:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-arc Remove S0393 debug tags (archived) [branch: DEBUG-v014]
2026-06-15 22:16:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-arc Remove S0393 debug tag (archived) [branch: DEBUG-v014]
2026-06-15 22:16:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt spec-arc Remove S0393 debug tag + unused Timber import (archived) [branch: DEBUG-v014]
2026-06-15 22:16:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneKeyboardManager.kt spec-arc Remove S0393 debug tag + init block + unused Timber import (archived) [branch: DEBUG-v014]
2026-06-15 22:25:01 PLAN/S0411_pip-player-task-isolation.md spec-test-device Device run on emulator-5554 -> task-affinity routing PASS; S0411 fallback probe not exercised (non-local URI required) [branch: DEBUG-v014]
2026-06-15 22:27:19 PLAN/S0411_pip-player-task-isolation.md spec-check Audit S0411 -> Verified; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v014]
2026-06-15 22:27:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-check Remove S0411 device-test Timber tag on Verified flip [branch: DEBUG-v014]
2026-06-15 22:29:13 PLAN/S0411_pip-player-task-isolation.md spec-all Pipeline Verified: S0411 (device-tested task-affinity routing) [branch: DEBUG-v014]
2026-06-15 22:38:37 PLAN/S0411_pip-player-task-isolation.md spec-arc Archive S0411 (PiP standalone-player task isolation, Verified) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:39:52 PLAN/S0412_standalone-viewer-fullscreen.md spec-arc Archive S0412 (standalone-viewer-fullscreen) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:40:36 PLAN/S0413_bugfix-audio-graceful-skip.md spec-arc Archive S0413 (bugfix-audio-graceful-skip) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:40:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt spec-arc Remove S0413 debug verification tag on archive [branch: DEBUG-v014]
2026-06-15 22:45:34 PLAN/S0407_audio-player-extra-visualizations.md spec-arc Archive S0407 (audio-player-extra-visualizations) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:45:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt spec-arc Remove S0407 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 22:45:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt spec-arc Remove S0407 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 22:45:35 PLAN/S0417_bugfix-batch-rename-cloud-network.md spec-arc Archive S0417 (bugfix-batch-rename-cloud-network) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:45:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/undo/BrowseUndoManager.kt spec-arc Remove S0417 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 22:45:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt spec-arc Remove S0417 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 22:45:35 PLAN/S0418_standard-edge-gesture-screenshot.md spec-arc Archive S0418 (standard-edge-gesture-screenshot) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:45:36 app_v2/src/screenCapturePlay/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayControllerImpl.kt spec-arc Remove S0418 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 22:51:20 PLAN/S0422_resource-import-file-format.md spec-check Audit S0422 -> implementation complete (Phases 01-05); held at BlockNeedUserTest, no status flip; PASS/WARN/FAIL 24/2/0; outstanding: funclog ADD + INDEX Phase 06 row [branch: DEBUG-v014]
2026-06-15 22:53:20 PLAN/S0422_resource-import-file-format.md spec-arc Archive S0422 (resource-import-file-format) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 22:53:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/BackupRestoreViewModel.kt spec-arc Remove 2 S0422 BlockNeedUserTest debug tags on archive [branch: DEBUG-v014]
2026-06-15 22:53:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceimport/ResourceImportActivity.kt spec-arc Remove S0422 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 22:53:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-arc Remove S0422 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-15 23:01:06 PLAN/S0414_bugfix-open-in-fms-raw-download-uri.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 4/0/0 [branch: DEBUG-v014]
2026-06-15 23:02:28 PLAN/S0414_bugfix-open-in-fms-raw-download-uri.md spec-check Audit S0414 -> Verified; PASS/WARN/FAIL 5/0/0 [branch: DEBUG-v014]
2026-06-15 23:02:28 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ResolveLocalPathFromUriUseCase.kt spec-check Remove S0414 debug verification tag + orphaned Timber import on Verified [branch: DEBUG-v014]
2026-06-15 23:43:47 PLAN/S0414_bugfix-open-in-fms-raw-download-uri.md spec-arc Archive S0414 (bugfix-open-in-fms-raw-download-uri) -> temp/done/ [branch: DEBUG-v014]
2026-06-15 23:50:52 PLAN/S0449_nolegal-screen-gesture-accessibility-shortcut.md spec Add strategic spec S0449 for noLegal screen-gesture accessibility shortcut [branch: DEBUG-v014]
2026-06-15 23:55:12 PLAN/S0449_nolegal-screen-gesture-accessibility-shortcut/INDEX.md spec-tech Create tactical plan for S0449 [branch: DEBUG-v014]
2026-06-15 23:55:12 PLAN/S0449_nolegal-screen-gesture-accessibility-shortcut/PHASE_01__strings.md spec-tech Phase 01: strings [branch: DEBUG-v014]
2026-06-15 23:55:12 PLAN/S0449_nolegal-screen-gesture-accessibility-shortcut/PHASE_02__settings-group-ui.md spec-tech Phase 02: settings-group-ui [branch: DEBUG-v014]
2026-06-15 23:55:12 PLAN/S0449_nolegal-screen-gesture-accessibility-shortcut/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-15 23:55:12 PLAN/S0449_nolegal-screen-gesture-accessibility-shortcut.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-15 23:56:33 app_v2/src/main/res/values/strings.xml spec-dev S0449 P01.1: add accessibility-shortcut hint+button strings (EN) [branch: DEBUG-v014]
2026-06-15 23:56:59 app_v2/src/main/res/values-ru/strings.xml spec-dev S0449 P01.1: add accessibility-shortcut hint+button strings (RU) [branch: DEBUG-v014]
2026-06-15 23:56:59 app_v2/src/main/res/values-uk/strings.xml spec-dev S0449 P01.1: add accessibility-shortcut hint+button strings (UK) [branch: DEBUG-v014]
2026-06-16 00:00:08 app_v2/src/translationMlKit/java/com/sza/fastmediasorter/ui/player/helpers/TranslationBackend.kt S0423 Verified on device (standard + noLegal debug, emulator API 37): in-player image translation renders RU block overlays end to end, Extensions shows Translation Module Installed (no download row), loader logs bundled-in-base path. Removed S0423 BlockNeedUserTest debug tag. [branch: DEBUG-v014]
2026-06-16 00:00:10 PLAN/S0425_screenshot-gesture-actions.md spec-all Strategic finalized + approved: S0425 screenshot gesture actions [branch: DEBUG-v014]
2026-06-16 00:01:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0449 P02.3: wire accessibility-shortcut button to permissionSettingsIntent with dialog fallback [branch: DEBUG-v014]
2026-06-16 00:02:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0449 P02.3: wire accessibility-shortcut button to permissionSettingsIntent with dialog fallback [branch: DEBUG-v014]
2026-06-16 00:03:44 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-dev S0449 P02.1: add accessibility-shortcut hint+button to screen-gestures group (portrait) [branch: DEBUG-v014]
2026-06-16 00:03:59 app_v2/src/main/res/layout-land/fragment_settings_destinations.xml spec-dev S0449 P02.2: add accessibility-shortcut hint+button to screen-gestures group (landscape) [branch: DEBUG-v014]
2026-06-16 00:06:53 docs/FEATURES_noLegal.md spec-dev S0449 P03.1: §10 accessibility-settings shortcut entry (EN) [branch: DEBUG-v014]
2026-06-16 00:06:53 docs/FEATURES_noLegal_RU.md spec-dev S0449 P03.1: §10 accessibility-settings shortcut entry (RU) [branch: DEBUG-v014]
2026-06-16 00:06:53 docs/FEATURES_noLegal_UK.md spec-dev S0449 P03.1: §10 accessibility-settings shortcut entry (UK) [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/INDEX.md spec-tech Create tactical plan for S0425 [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/PHASE_01__foundations-enums-settings.md spec-tech Phase: PHASE_01__foundations-enums-settings [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/PHASE_02__locatable-save-result.md spec-tech Phase: PHASE_02__locatable-save-result [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/PHASE_03__direction-detection.md spec-tech Phase: PHASE_03__direction-detection [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/PHASE_04__action-dispatcher.md spec-tech Phase: PHASE_04__action-dispatcher [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/PHASE_05__wire-capture-pipelines.md spec-tech Phase: PHASE_05__wire-capture-pipelines [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/PHASE_06__settings-ui.md spec-tech Phase: PHASE_06__settings-ui [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/PHASE_07__docs-catalog-cleanup.md spec-tech Phase: PHASE_07__docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 00:08:42 PLAN/S0425_screenshot-gesture-actions/research/01__capture-dispatch-and-routes.md spec-tech Research artifact 01 [branch: DEBUG-v014]
2026-06-16 00:09:33 PLAN/S0449_nolegal-screen-gesture-accessibility-shortcut.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-16 00:09:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0449 final: inserted BlockNeedUserTest debug probe at accessibility-shortcut click [branch: DEBUG-v014]
2026-06-16 00:10:00 PLAN/S0423_ondemand-translation-store-vs-empty-dfm.md spec-arc Archive S0423 (ondemand-translation-store-vs-empty-dfm), Verified -> temp/done/ [branch: DEBUG-v014]
2026-06-16 00:18:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/views/TranslationOverlayView.kt S0451 Auto-size translated block text to ~90% of the original OCR box height (metric-correct, removed 14sp ceiling) so it matches the source font; block now covers at least the original box, expands only when longer. Manual swipe/multiplier overrides preserved. [branch: DEBUG-v014]
2026-06-16 00:20:55 PLAN/S0451_translation-overlay-size-to-original.md spec-arc Archive S0451 (translation-overlay-size-to-original), BlockNeedUserTest -> temp/done/ [branch: DEBUG-v014]
2026-06-16 00:20:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/views/TranslationOverlayView.kt spec-arc Remove S0451 BlockNeedUserTest debug tag on archive (sizing fix code retained) [branch: DEBUG-v014]
2026-06-16 00:30:42 PLAN/S0425_screenshot-gesture-actions.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScreenshotGestureDirection.kt spec-dev New: screenshot gesture direction enum [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScreenshotGestureAction.kt spec-dev New: screenshot gesture action enum [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev Replace dead down-enabled flag with three per-direction action fields [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/ScreenshotSettingsStore.kt spec-dev Persist three gesture-action keys, drop dead bool key [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev Map three gesture-action fields [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-dev Reset three gesture-action fields [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/main/assets/device_profile_presets.csv spec-dev Preset rows for three gesture-action fields [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveScreenshotUseCase.kt spec-dev Return savedUri for post-capture actions [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt spec-dev Detect three gesture directions; carry direction in callback [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenshotAccessibilityService.kt spec-dev Gate + dispatch post-capture action (a11y path) [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/OverlayHostService.kt spec-dev Hilt entry point; gate + thread direction to consent [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenCaptureConsentActivity.kt spec-dev Forward gesture direction extra [branch: DEBUG-v014]
2026-06-16 00:30:42 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenCaptureService.kt spec-dev Dispatch post-capture action (MediaProjection path) [branch: DEBUG-v014]
2026-06-16 00:30:43 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-dev New: resolve direction->action and launch route [branch: DEBUG-v014]
2026-06-16 00:30:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev Honour EXTRA_AUTO_ACTION for draw/translate on launch [branch: DEBUG-v014]
2026-06-16 00:30:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/ScreenshotGestureActionPickerManager.kt spec-dev New: action picker dialog + labels (OCR gated) [branch: DEBUG-v014]
2026-06-16 00:30:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev Wire three gesture-action picker rows [branch: DEBUG-v014]
2026-06-16 00:30:43 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-dev Three gesture-action picker rows (portrait) [branch: DEBUG-v014]
2026-06-16 00:30:43 app_v2/src/main/res/layout-land/fragment_settings_destinations.xml spec-dev Three gesture-action picker rows (landscape) [branch: DEBUG-v014]
2026-06-16 00:30:43 app_v2/src/main/res/values/strings.xml spec-dev Gesture-action row + label strings [branch: DEBUG-v014]
2026-06-16 00:30:43 docs/FEATURES.md spec-dev Assignable gesture actions feature sentence [branch: DEBUG-v014]
2026-06-16 00:38:54 PLAN/S0432_bugfix-delivered-payload-integrity-recovery.md spec-arc Archive S0432 (delivered-payload-integrity-recovery) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 00:38:54 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredNativeLibraryLoader.kt spec-arc Remove S0432 debug tag on archive [branch: DEBUG-v014]
2026-06-16 00:38:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt spec-arc Remove S0432 debug tags on archive [branch: DEBUG-v014]
2026-06-16 00:39:35 PLAN/S0434_standard-unit-test-compilation-broken.md spec-arc Archive S0434 (standard-unit-test-compilation-broken) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 00:40:33 PLAN/S0433_screenshot-gesture-down-toggle-dead.md spec-arc Archive S0433 (screenshot-gesture-down-toggle-dead) -> temp/done/; superseded by S0425 ADR-4 (dead toggle already removed from code) [branch: DEBUG-v014]
2026-06-16 00:48:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt app_v2 S0437: move default-player sample-file MediaStore query off the main thread (lifecycleScope + Dispatchers.IO) in all three open-chooser entry points [branch: DEBUG-v014]
2026-06-16 00:50:06 PLAN/S0441_landscape_thumbnail_preload_missing.md spec-arc Archive S0441 (landscape thumbnail-preload toggles missing) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 00:50:10 PLAN/S0442_settings-pages-rename-regroup.md spec-arc Archive S0442 (settings-pages rename/regroup) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 00:52:47 PLAN/S0447_bugfix-exoplayer-release-main-anr.md spec-arc Archive S0447 (bugfix-exoplayer-release-main-anr) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 00:52:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-arc Remove S0447 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-16 00:53:53 PLAN/S0439_screen-rotation-follow-os.md spec-update Refinement (claude-opus-4-8, focus: all): distributed inbox capture into sections 1-11 [branch: DEBUG-v014]
2026-06-16 00:56:46 app_v2/src/screenCapturePlay/ S0450 Delete orphaned screenCapturePlay source set (uncompilable, mounted nowhere; Play path backed out by S0423, S0418 archived) - dead-weight hygiene Rule 20 [branch: DEBUG-v014]
2026-06-16 00:56:46 dev/CATALOG/scripts/scan.ps1 S0450 Remove screenCapturePlay source root from catalog scan after deletion [branch: DEBUG-v014]
2026-06-16 00:58:57 PLAN/S0437_default-player-mediastore-main-thread.md spec-arc Archive S0437 (default-player-mediastore-main-thread) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 00:58:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt spec-arc Remove 3 S0437 BlockNeedUserTest debug tags on archive [branch: DEBUG-v014]
2026-06-16 01:01:01 PLAN/S0452_share-commands-infrastructure.md spec-update Create foundation spec S0452 (share-commands infrastructure) extracted from common parts of S0443/S0444/S0445/S0446 [branch: DEBUG-v014]
2026-06-16 01:01:01 PLAN/S0443_*.md spec-update Link S0443 -> S0452 foundation dependency (S10 + Related tickets) [branch: DEBUG-v014]
2026-06-16 01:01:01 PLAN/S0444_*.md spec-update Link S0444 -> S0452 foundation dependency (S10 + Related tickets) [branch: DEBUG-v014]
2026-06-16 01:01:01 PLAN/S0445_*.md spec-update Link S0445 -> S0452 foundation dependency (S10 + Related tickets) [branch: DEBUG-v014]
2026-06-16 01:01:01 PLAN/S0446_*.md spec-update Link S0446 -> S0452 foundation dependency (S10 + Related tickets) [branch: DEBUG-v014]
2026-06-16 01:01:11 PLAN/S0450_screencaptureplay-source-set-orphaned.md spec-arc Archive S0450 (screencaptureplay-source-set-orphaned) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 01:02:21 PLAN/S0438_keep-screen-on-player.md spec Develop strategic spec S0438 (dependent keep-screen-on for player); add research artifact 01 [branch: DEBUG-v014]
2026-06-16 01:04:14 PLAN/S0439_screen-rotation-follow-os.md spec Approve strategic spec S0439; resolved rotation migration/defaults via research artifact 01 [branch: DEBUG-v014]
2026-06-16 01:08:12 PLAN/S0438_keep-screen-on-player/INDEX.md spec-tech Create tactical plan for S0438 (4 phases) [branch: DEBUG-v014]
2026-06-16 01:08:12 PLAN/S0438_keep-screen-on-player/PHASE_01__settings-model-persistence.md spec-tech Phase 01: settings-model-persistence [branch: DEBUG-v014]
2026-06-16 01:08:12 PLAN/S0438_keep-screen-on-player/PHASE_02__effective-keep-awake.md spec-tech Phase 02: effective-keep-awake [branch: DEBUG-v014]
2026-06-16 01:08:12 PLAN/S0438_keep-screen-on-player/PHASE_03__settings-ui-dependent-row.md spec-tech Phase 03: settings-ui-dependent-row [branch: DEBUG-v014]
2026-06-16 01:08:13 PLAN/S0438_keep-screen-on-player/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 01:08:13 PLAN/S0438_keep-screen-on-player.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-16 01:09:16 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0438 Phase 01.1: add keepScreenOnPlayer setting field [branch: DEBUG-v014]
2026-06-16 01:11:30 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0438 Phase 01.2: persist keepScreenOnPlayer in DataStore [branch: DEBUG-v014]
2026-06-16 01:13:32 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt spec-dev S0438 Phase 01.3: apply keepScreenOnPlayer preset case [branch: DEBUG-v014]
2026-06-16 01:14:32 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0438 Phase 01.3: add keepScreenOnPlayer preset row [branch: DEBUG-v014]
2026-06-16 01:15:52 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt spec-dev S0438 Phase 01.4: carry keepScreenOnPlayer through backup/restore/import [branch: DEBUG-v014]
2026-06-16 01:16:50 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt spec-dev S0438 Phase 01.4: carry keepScreenOnPlayer through backup/restore/import [branch: DEBUG-v014]
2026-06-16 01:16:58 PLAN/S0439_screen-rotation-follow-os/INDEX.md spec-tech Create tactical plan for S0439 [branch: DEBUG-v014]
2026-06-16 01:16:58 PLAN/S0439_screen-rotation-follow-os/PHASE_01__settings-model-migration.md spec-tech Phase 01: settings-model-migration [branch: DEBUG-v014]
2026-06-16 01:16:58 PLAN/S0439_screen-rotation-follow-os/PHASE_02__program-orientation-applier.md spec-tech Phase 02: program-orientation-applier [branch: DEBUG-v014]
2026-06-16 01:16:58 PLAN/S0439_screen-rotation-follow-os/PHASE_03__player-precedence.md spec-tech Phase 03: player-precedence [branch: DEBUG-v014]
2026-06-16 01:16:58 PLAN/S0439_screen-rotation-follow-os/PHASE_04__settings-ui-toggles.md spec-tech Phase 04: settings-ui-toggles [branch: DEBUG-v014]
2026-06-16 01:16:58 PLAN/S0439_screen-rotation-follow-os/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 01:16:58 PLAN/S0439_screen-rotation-follow-os.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-16 01:17:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCredentialHelper.kt spec-dev S0438 Phase 01.4: carry keepScreenOnPlayer through backup/restore/import [branch: DEBUG-v014]
2026-06-16 01:20:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0439 P01.1 Rename followSystemRotation to programFollowSystemRotation, add playerFollowSystemRotation [branch: DEBUG-v014]
2026-06-16 01:23:57 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/MediaCapabilities.kt S0436 Migrate all src/main BuildConfig.SUPPORT_* reads to injected MediaCapabilities; expand surface (cast/mic/vrPlayer/wearCompanion); add MediaCapabilitiesEntryPoint for non-DI contexts [branch: DEBUG-v014]
2026-06-16 01:25:05 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-dev S0438 Phase 02.1: settings-driven keep-screen-on in BaseActivity [branch: DEBUG-v014]
2026-06-16 01:26:51 PLAN/S0453_per-spec-branch-workflow.md spec Scaffold strategic spec skeleton S0453 [branch: DEBUG-v014]
2026-06-16 01:27:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0438 Phase 02.2: player host applies effective keep-screen-on rule [branch: DEBUG-v014]
2026-06-16 01:28:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0438 Phase 02.2: player host applies effective keep-screen-on rule [branch: DEBUG-v014]
2026-06-16 01:29:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-dev S0438 Phase 02.2: player host applies effective keep-screen-on rule [branch: DEBUG-v014]
2026-06-16 01:30:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0438 Phase 02.2: player host applies effective keep-screen-on rule [branch: DEBUG-v014]
2026-06-16 01:31:53 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt spec-dev S0438 Phase 02.3: migrate keep-screen-on hook to keepScreenAwakeFor [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivityLifecycleBridge.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ScreenRotationManager.kt spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:32 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0439 P01 Rename followSystemRotation->programFollowSystemRotation, add playerFollowSystemRotation (default off); key reused for upgrade-safe migration [branch: DEBUG-v014]
2026-06-16 01:32:52 PLAN/S0448_photos-flavor-exposes-network-sources.md spec Promote S0448 to full strategic spec (flavor network gating, lite OFF); owner-gate PASS [branch: DEBUG-v014]
2026-06-16 01:32:58 app_v2/src/main/java/com/sza/fastmediasorter/widget/CameraQuickCaptureConfigActivity.kt spec-dev S0438 Phase 02.3: migrate keep-screen-on hook to keepScreenAwakeFor [branch: DEBUG-v014]
2026-06-16 01:33:59 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameConfigActivity.kt spec-dev S0438 Phase 02.3: migrate keep-screen-on hook to keepScreenAwakeFor [branch: DEBUG-v014]
2026-06-16 01:35:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/CalculatorActivity.kt spec-dev S0438 Phase 02.3: migrate keep-screen-on hook to keepScreenAwakeFor [branch: DEBUG-v014]
2026-06-16 01:36:15 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-dev S0438 Phase 02.3: migrate keep-screen-on hook to keepScreenAwakeFor [branch: DEBUG-v014]
2026-06-16 01:36:53 PLAN/S0452_share-commands-infrastructure.md spec-all F1: strategic spec approved (S0452) [branch: DEBUG-v014]
2026-06-16 01:37:31 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-dev S0438 Phase 02 build-fix: rename injected field to keepScreenSettingsRepository [branch: DEBUG-v014]
2026-06-16 01:39:22 PLAN/S0454_spec-catalog-journal-compaction.md spec Scaffold strategic spec skeleton S0454 [branch: DEBUG-v014]
2026-06-16 01:40:44 app_v2/src/main/res/values/strings.xml spec-dev S0438 Phase 03.1: add dependent keep-screen-on player strings [branch: DEBUG-v014]
2026-06-16 01:40:59 app_v2/src/main/res/values-ru/strings.xml spec-dev S0438 Phase 03.1: add dependent keep-screen-on player strings [branch: DEBUG-v014]
2026-06-16 01:41:14 app_v2/src/main/res/values-uk/strings.xml spec-dev S0438 Phase 03.1: add dependent keep-screen-on player strings [branch: DEBUG-v014]
2026-06-16 01:42:05 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-dev S0438 Phase 03.2: add dependent keep-screen-on row [branch: DEBUG-v014]
2026-06-16 01:42:19 app_v2/src/main/res/layout-land/fragment_settings_destinations.xml spec-dev S0438 Phase 03.2: add dependent keep-screen-on row [branch: DEBUG-v014]
2026-06-16 01:43:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0438 Phase 03.3: bind dependent keep-screen-on row + visibility gate [branch: DEBUG-v014]
2026-06-16 01:51:03 docs/FEATURES.md spec-dev S0438 Phase 04.1: FEATURES entry for player-only keep screen on [branch: DEBUG-v014]
2026-06-16 01:51:04 docs/FEATURES_RU.md spec-dev S0438 Phase 04.1: FEATURES entry for player-only keep screen on [branch: DEBUG-v014]
2026-06-16 01:51:04 docs/FEATURES_UK.md spec-dev S0438 Phase 04.1: FEATURES entry for player-only keep screen on [branch: DEBUG-v014]
2026-06-16 01:52:28 PLAN/S0438_keep-screen-on-player.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-16 01:52:28 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-dev S0438: settings-driven keep-screen-on + debug tag [branch: DEBUG-v014]
2026-06-16 01:52:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0438: dependent row binding + debug tag [branch: DEBUG-v014]
2026-06-16 01:58:27 PLAN/S0438_keep-screen-on-player.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 6/0/0, log errors 0 [branch: DEBUG-v014]
2026-06-16 02:00:42 PLAN/S0438_keep-screen-on-player.md spec-check Audit S0438 -> Verified; PASS/WARN/FAIL 9/0/0 [branch: DEBUG-v014]
2026-06-16 02:00:42 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-check S0438: remove debug verification tag on Verified [branch: DEBUG-v014]
2026-06-16 02:00:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-check S0438: remove debug verification tag on Verified [branch: DEBUG-v014]
2026-06-16 02:03:22 PLAN/S0438_keep-screen-on-player.md spec-arc Archive S0438 (keep-screen-on-player) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 02:06:55 PLAN/S0452_share-commands-infrastructure/INDEX.md spec-tech Create tactical plan for S0452 (5 phases) [branch: DEBUG-v014]
2026-06-16 02:06:55 PLAN/S0452_share-commands-infrastructure/PHASE_01__share-target-registry.md spec-tech Phase 01: share-target-registry [branch: DEBUG-v014]
2026-06-16 02:06:55 PLAN/S0452_share-commands-infrastructure/PHASE_02__settings-flag-storage.md spec-tech Phase 02: settings-flag-storage [branch: DEBUG-v014]
2026-06-16 02:06:55 PLAN/S0452_share-commands-infrastructure/PHASE_03__settings-group-ui.md spec-tech Phase 03: settings-group-ui [branch: DEBUG-v014]
2026-06-16 02:06:55 PLAN/S0452_share-commands-infrastructure/PHASE_04__gating-existing-surfaces.md spec-tech Phase 04: gating-existing-surfaces [branch: DEBUG-v014]
2026-06-16 02:06:55 PLAN/S0452_share-commands-infrastructure/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 02:06:55 PLAN/S0452_share-commands-infrastructure.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-16 02:12:52 PLAN/S0448_photos-flavor-exposes-network-sources/INDEX.md spec-tech Create tactical plan for S0448 (3 phases) [branch: DEBUG-v014]
2026-06-16 02:12:52 PLAN/S0448_photos-flavor-exposes-network-sources/research/01__lite-existing-network-records.md spec-tech Research 01: lite existing network records (non-destructive hide) [branch: DEBUG-v014]
2026-06-16 02:12:52 PLAN/S0448_photos-flavor-exposes-network-sources/research/02__local-network-permission-gating.md spec-tech Research 02: local-network permission gating (manifest + registry) [branch: DEBUG-v014]
2026-06-16 02:12:52 PLAN/S0448_photos-flavor-exposes-network-sources/PHASE_01__network-availability-foundation.md spec-tech Phase 01: network availability foundation [branch: DEBUG-v014]
2026-06-16 02:12:52 PLAN/S0448_photos-flavor-exposes-network-sources/PHASE_02__welcome-permission-gating.md spec-tech Phase 02: welcome + permission gating [branch: DEBUG-v014]
2026-06-16 02:12:52 PLAN/S0448_photos-flavor-exposes-network-sources/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog cleanup [branch: DEBUG-v014]
2026-06-16 02:12:52 PLAN/S0448_photos-flavor-exposes-network-sources.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-16 02:16:44 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTarget.kt spec-dev S0452 Phase 01: share-target registry/resolver/module/test [branch: DEBUG-v014]
2026-06-16 02:16:44 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTargetAvailabilityResolver.kt spec-dev S0452 Phase 01: share-target registry/resolver/module/test [branch: DEBUG-v014]
2026-06-16 02:16:44 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTargetRegistry.kt spec-dev S0452 Phase 01: share-target registry/resolver/module/test [branch: DEBUG-v014]
2026-06-16 02:16:45 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt spec-dev S0452 Phase 01: share-target registry/resolver/module/test [branch: DEBUG-v014]
2026-06-16 02:16:45 app_v2/src/test/java/com/sza/fastmediasorter/core/share/ShareTargetRegistryTest.kt spec-dev S0452 Phase 01: share-target registry/resolver/module/test [branch: DEBUG-v014]
2026-06-16 02:27:59 app_v2/build.gradle.kts spec-dev S0448 P01.1: add SUPPORT_LOCAL_NETWORK flag per flavor (false in lite) [branch: DEBUG-v014]
2026-06-16 02:29:13 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/MediaCapabilities.kt spec-dev S0448 P01.2: add supportsLocalNetworkSources capability field [branch: DEBUG-v014]
2026-06-16 02:35:36 app_v2/src/standard/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0448 P01: wire SUPPORT_LOCAL_NETWORK / gate NETWORK ids [branch: DEBUG-v014]
2026-06-16 02:51:53 app_v2/src/lite/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0448 P01: wire SUPPORT_LOCAL_NETWORK / gate NETWORK ids [branch: DEBUG-v014]
2026-06-16 02:54:27 app_v2/src/photos/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0448 P01: wire SUPPORT_LOCAL_NETWORK / gate NETWORK ids [branch: DEBUG-v014]
2026-06-16 02:58:06 app_v2/src/legacy/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0448 P01: wire SUPPORT_LOCAL_NETWORK / gate NETWORK ids [branch: DEBUG-v014]
2026-06-16 03:05:57 app_v2/src/vr/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0448 P01: wire SUPPORT_LOCAL_NETWORK / gate NETWORK ids [branch: DEBUG-v014]
2026-06-16 03:09:23 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/RemoteSourceAvailabilityGate.kt spec-dev S0448 P01: wire SUPPORT_LOCAL_NETWORK / gate NETWORK ids [branch: DEBUG-v014]
2026-06-16 09:33:02 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/SelfManagedScreenOrientation.kt spec-dev S0439 P02 Add SelfManagedScreenOrientation marker interface [branch: DEBUG-v014]
2026-06-16 09:33:02 app_v2/src/main/java/com/sza/fastmediasorter/core/orientation/AppOrientationManager.kt spec-dev S0439 P02 Add AppOrientationManager: program-wide orientation policy via ActivityLifecycleCallbacks [branch: DEBUG-v014]
2026-06-16 09:33:03 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt spec-dev S0439 P02 Register AppOrientationManager in onCreate [branch: DEBUG-v014]
2026-06-16 09:33:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0439 P02 Mark PlayerActivity SelfManagedScreenOrientation [branch: DEBUG-v014]
2026-06-16 09:33:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0439 P02 Mark PhotoVideoStandaloneActivity SelfManagedScreenOrientation [branch: DEBUG-v014]
2026-06-16 09:33:03 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0439 P02 Append empty preset rows (AppSettings<->CSV invariant) [branch: DEBUG-v014]
2026-06-16 09:38:42 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/RemoteSourceAvailabilityGate.kt spec-dev S0448 P02.1: add isNetworkGroupSupported() [branch: DEBUG-v014]
2026-06-16 09:39:38 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt spec-dev S0448 P02.3: flavor-gate access_local_network on SUPPORT_LOCAL_NETWORK [branch: DEBUG-v014]
2026-06-16 09:39:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt spec-dev S0439 P03 Player follows OS on program||player (effectiveFollowSystemRotation); apply() call sites + in-player sensor toggle visibility keyed on effective [branch: DEBUG-v014]
2026-06-16 09:39:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt spec-dev S0439 P03 Player follows OS on program||player (effectiveFollowSystemRotation); apply() call sites + in-player sensor toggle visibility keyed on effective [branch: DEBUG-v014]
2026-06-16 09:39:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivityLifecycleBridge.kt spec-dev S0439 P03 Player follows OS on program||player (effectiveFollowSystemRotation); apply() call sites + in-player sensor toggle visibility keyed on effective [branch: DEBUG-v014]
2026-06-16 09:40:27 app_v2/src/lite/AndroidManifest.xml spec-dev S0448 P02.4: remove ACCESS_LOCAL_NETWORK from lite merged manifest [branch: DEBUG-v014]
2026-06-16 09:41:41 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/RemoteSourceAvailabilityGate.kt spec-dev S0448 P02.1: add isNetworkGroupSupported() [branch: DEBUG-v014]
2026-06-16 09:42:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeRemoteSourcesController.kt spec-dev S0448 P02.2: hide SMB/FTP welcome rows in lite [branch: DEBUG-v014]
2026-06-16 09:43:51 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt spec-dev S0448 P02.3: flavor-gate access_local_network [branch: DEBUG-v014]
2026-06-16 09:47:33 app_v2/src/main/res/values/strings_settings.xml spec-dev S0439 P04 Reword program rotation title/summary; add player rotation title/summary (EN) [branch: DEBUG-v014]
2026-06-16 09:47:33 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0439 P04 Reword program + add player rotation strings (RU) [branch: DEBUG-v014]
2026-06-16 09:47:33 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0439 P04 Reword program + add player rotation strings (UK) [branch: DEBUG-v014]
2026-06-16 09:47:33 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0439 P04 Repurpose playback toggle to player rotation (portrait) [branch: DEBUG-v014]
2026-06-16 09:47:33 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0439 P04 Repurpose playback toggle to player rotation (landscape) [branch: DEBUG-v014]
2026-06-16 09:47:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0439 P04 Bind player rotation toggle + visibility coupling (visible when program off) [branch: DEBUG-v014]
2026-06-16 09:51:57 docs/FEATURES.md spec-dev S0439 P05 Document program/player follow-OS rotation setting [branch: DEBUG-v014]
2026-06-16 09:51:57 docs/FEATURES_RU.md spec-dev S0439 P05 Document program/player follow-OS rotation setting [branch: DEBUG-v014]
2026-06-16 09:51:57 docs/FEATURES_UK.md spec-dev S0439 P05 Document program/player follow-OS rotation setting [branch: DEBUG-v014]
2026-06-16 09:54:09 docs/FEATURES.md spec-dev S0448 P03.2: note Lite flavor is local-files-only (no SMB/SFTP/FTP) [branch: DEBUG-v014]
2026-06-16 09:54:10 docs/FEATURES_RU.md spec-dev S0448 P03.2: note Lite flavor is local-files-only (no SMB/SFTP/FTP) [branch: DEBUG-v014]
2026-06-16 09:54:10 docs/FEATURES_UK.md spec-dev S0448 P03.2: note Lite flavor is local-files-only (no SMB/SFTP/FTP) [branch: DEBUG-v014]
2026-06-16 09:55:20 PLAN/S0439_screen-rotation-follow-os.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-16 09:55:20 app_v2/src/main/java/com/sza/fastmediasorter/core/orientation/AppOrientationManager.kt spec-dev S0439 S0439 debug tag (device test probe) [branch: DEBUG-v014]
2026-06-16 09:55:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0439 S0439 debug tag (device test probe) [branch: DEBUG-v014]
2026-06-16 09:55:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerObserverManager.kt spec-dev S0439 S0439 debug tag (device test probe) [branch: DEBUG-v014]
2026-06-16 09:55:54 PLAN/S0448_photos-flavor-exposes-network-sources.md spec-dev All 3 phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-16 09:55:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeRemoteSourcesController.kt spec-dev Insert S0448 BlockNeedUserTest debug tag at welcome network-rows bind [branch: DEBUG-v014]
2026-06-16 11:01:24 PLAN/S0456_permission-flavorgates-reflection-zero-safety.md spec Scaffold strategic spec skeleton S0456 [branch: DEBUG-v014]
2026-06-16 11:05:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt fix S0438 follow-up: drop redundant View.keepScreenOn wake-lock; rely on BaseActivity effective-rule window flag so dependent=OFF lets screen sleep in standalone players [branch: DEBUG-v014]
2026-06-16 11:05:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt fix S0438 follow-up: slideshow keep-awake restore honours preventSleep || keepScreenOnPlayer [branch: DEBUG-v014]
2026-06-16 11:09:33 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0452 Phase 02: enabled/disabled share-target sets + IsShareTargetEnabledUseCase [branch: DEBUG-v014]
2026-06-16 11:09:34 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0452 Phase 02: enabled/disabled share-target sets + IsShareTargetEnabledUseCase [branch: DEBUG-v014]
2026-06-16 11:09:34 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/IsShareTargetEnabledUseCase.kt spec-dev S0452 Phase 02: enabled/disabled share-target sets + IsShareTargetEnabledUseCase [branch: DEBUG-v014]
2026-06-16 11:16:13 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0452 Phase 03: Send-file-to settings group (dynamic toggles from ShareTargetRegistry) [branch: DEBUG-v014]
2026-06-16 11:16:13 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0452 Phase 03: Send-file-to settings group (dynamic toggles from ShareTargetRegistry) [branch: DEBUG-v014]
2026-06-16 11:16:13 app_v2/src/main/res/values/strings.xml spec-dev S0452 Phase 03: Send-file-to settings group (dynamic toggles from ShareTargetRegistry) [branch: DEBUG-v014]
2026-06-16 11:16:13 app_v2/src/main/res/values-ru/strings.xml spec-dev S0452 Phase 03: Send-file-to settings group (dynamic toggles from ShareTargetRegistry) [branch: DEBUG-v014]
2026-06-16 11:16:13 app_v2/src/main/res/values-uk/strings.xml spec-dev S0452 Phase 03: Send-file-to settings group (dynamic toggles from ShareTargetRegistry) [branch: DEBUG-v014]
2026-06-16 11:16:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0452 Phase 03: Send-file-to settings group (dynamic toggles from ShareTargetRegistry) [branch: DEBUG-v014]
2026-06-16 11:22:54 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-dev S0452 Phase 03: hide Send-file-to group card while registry is empty (cardSendCommands) [branch: DEBUG-v014]
2026-06-16 11:22:54 app_v2/src/main/res/layout-land/fragment_settings_playback.xml spec-dev S0452 Phase 03: hide Send-file-to group card while registry is empty (cardSendCommands) [branch: DEBUG-v014]
2026-06-16 11:22:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0452 Phase 03: hide Send-file-to group card while registry is empty (cardSendCommands) [branch: DEBUG-v014]
2026-06-16 11:26:18 PLAN/S0452_share-commands-infrastructure.md spec-dev S0452 Implemented (infra-only): phases 01-03+05 done, Phase 04 gating delegated to target tickets [branch: DEBUG-v014]
2026-06-16 11:27:03 PLAN/S0456_permission-flavorgates-reflection-zero-safety.md spec Fill strategic spec S0456 (flavorGates reflection hardening); owner-gate PASS [branch: DEBUG-v014]
2026-06-16 11:27:21 PLAN/S0452_share-commands-infrastructure.md spec-check Audit S0452 -> Verified; PASS/WARN/FAIL 11/0/0 (infra-only, Phase 04 delegated) [branch: DEBUG-v014]
2026-06-16 11:31:08 PLAN/S0456_permission-flavorgates-reflection-zero-safety/INDEX.md spec-tech Create tactical plan for S0456 (2 phases) [branch: DEBUG-v014]
2026-06-16 11:31:08 PLAN/S0456_permission-flavorgates-reflection-zero-safety/research/01__gate-field-coverage-across-flavors.md spec-tech Research 01: single-variant test suffices (uniform gate fields) [branch: DEBUG-v014]
2026-06-16 11:31:08 PLAN/S0456_permission-flavorgates-reflection-zero-safety/PHASE_01__harden-flavorgate-resolution.md spec-tech Phase 01: harden flavor-gate resolution [branch: DEBUG-v014]
2026-06-16 11:31:08 PLAN/S0456_permission-flavorgates-reflection-zero-safety/PHASE_02__docs-catalog-cleanup.md spec-tech Phase 02: docs-catalog cleanup [branch: DEBUG-v014]
2026-06-16 11:31:08 PLAN/S0456_permission-flavorgates-reflection-zero-safety.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-16 11:34:14 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt spec-dev S0456 P01.1: expose declaredFlavorGateFields + narrow flavor-gate reflection catch [branch: DEBUG-v014]
2026-06-16 11:35:26 app_v2/src/test/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImplTest.kt spec-dev S0456 P01.2: test asserts every flavor-gate resolves to a boolean BuildConfig field [branch: DEBUG-v014]
2026-06-16 11:41:00 PLAN/S0457_bugfix-unit-test-source-set-broken-compile.md spec-draft Park: app_v2 unit-test source set broken compile (blocks S0456) [branch: DEBUG-v014]
2026-06-16 11:50:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0458 S0458: gate standalone image-player Google Lens overflow item on enableGoogleLens setting [branch: DEBUG-v014]
2026-06-16 11:51:35 PLAN/S0459_unified-send-to-menu.md spec Scaffold strategic spec skeleton S0459 [branch: DEBUG-v014]
2026-06-16 11:53:12 PLAN/S0457_bugfix-unit-test-source-set-broken-compile.md spec Fill strategic spec S0457 (restore app_v2 unit-test compile); owner-gate PASS [branch: DEBUG-v014]
2026-06-16 11:56:23 PLAN/S0457_bugfix-unit-test-source-set-broken-compile/INDEX.md spec-tech Create tactical plan for S0457 (2 phases) [branch: DEBUG-v014]
2026-06-16 11:56:23 PLAN/S0457_bugfix-unit-test-source-set-broken-compile/PHASE_01__restore-test-compile.md spec-tech Phase 01: restore test-source-set compile [branch: DEBUG-v014]
2026-06-16 11:56:23 PLAN/S0457_bugfix-unit-test-source-set-broken-compile/PHASE_02__docs-catalog-cleanup.md spec-tech Phase 02: docs-catalog cleanup [branch: DEBUG-v014]
2026-06-16 11:56:23 PLAN/S0457_bugfix-unit-test-source-set-broken-compile.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-16 11:58:27 PLAN/S0443_keep-send-option.md spec-tech S0443 strategic body filled + Status -> Tactical [branch: DEBUG-v014]
2026-06-16 11:58:27 PLAN/S0443_keep-send-option/INDEX.md spec-tech S0443 tactical plan: INDEX [branch: DEBUG-v014]
2026-06-16 11:58:27 PLAN/S0443_keep-send-option/PHASE_01__register-keep-target.md spec-tech S0443 tactical plan: PHASE_01__register-keep-target [branch: DEBUG-v014]
2026-06-16 11:58:27 PLAN/S0443_keep-send-option/PHASE_02__gate-player-command-panel.md spec-tech S0443 tactical plan: PHASE_02__gate-player-command-panel [branch: DEBUG-v014]
2026-06-16 11:58:27 PLAN/S0443_keep-send-option/PHASE_03__gate-editor-draw-standalone-surfaces.md spec-tech S0443 tactical plan: PHASE_03__gate-editor-draw-standalone-surfaces [branch: DEBUG-v014]
2026-06-16 11:58:27 PLAN/S0443_keep-send-option/PHASE_04__docs-catalog-cleanup.md spec-tech S0443 tactical plan: PHASE_04__docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 11:58:27 PLAN/S0444_player-send-email.md spec-tech S0444 strategic body filled + Status -> Tactical [branch: DEBUG-v014]
2026-06-16 11:58:27 PLAN/S0444_player-send-email/INDEX.md spec-tech S0444 tactical plan: INDEX [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0444_player-send-email/PHASE_01__trilingual-strings.md spec-tech S0444 tactical plan: PHASE_01__trilingual-strings [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0444_player-send-email/PHASE_02__email-send-action-and-registration.md spec-tech S0444 tactical plan: PHASE_02__email-send-action-and-registration [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0444_player-send-email/PHASE_03__player-menu-command-and-gating.md spec-tech S0444 tactical plan: PHASE_03__player-menu-command-and-gating [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0444_player-send-email/PHASE_04__docs-catalog-cleanup.md spec-tech S0444 tactical plan: PHASE_04__docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0445_profile-share-to-setting.md spec-tech S0445 strategic body filled + Status -> Tactical [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0445_profile-share-to-setting/INDEX.md spec-tech S0445 tactical plan: INDEX [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0445_profile-share-to-setting/PHASE_01__register-system-share-target.md spec-tech S0445 tactical plan: PHASE_01__register-system-share-target [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0445_profile-share-to-setting/PHASE_02__gate-player-command-panel.md spec-tech S0445 tactical plan: PHASE_02__gate-player-command-panel [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0445_profile-share-to-setting/PHASE_03__gate-browse-surfaces.md spec-tech S0445 tactical plan: PHASE_03__gate-browse-surfaces [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0445_profile-share-to-setting/PHASE_04__gate-standalone-players.md spec-tech S0445 tactical plan: PHASE_04__gate-standalone-players [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0445_profile-share-to-setting/PHASE_05__docs-catalog-cleanup.md spec-tech S0445 tactical plan: PHASE_05__docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0446_messenger-share-settings.md spec-tech S0446 strategic body filled + Status -> Tactical [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0446_messenger-share-settings/INDEX.md spec-tech S0446 tactical plan: INDEX [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0446_messenger-share-settings/PHASE_01__trilingual-strings.md spec-tech S0446 tactical plan: PHASE_01__trilingual-strings [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0446_messenger-share-settings/PHASE_02__register-targets-and-queries.md spec-tech S0446 tactical plan: PHASE_02__register-targets-and-queries [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0446_messenger-share-settings/PHASE_03__messenger-send-implementation.md spec-tech S0446 tactical plan: PHASE_03__messenger-send-implementation [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0446_messenger-share-settings/PHASE_04__player-command-gating.md spec-tech S0446 tactical plan: PHASE_04__player-command-gating [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0446_messenger-share-settings/PHASE_05__browse-overflow-gating.md spec-tech S0446 tactical plan: PHASE_05__browse-overflow-gating [branch: DEBUG-v014]
2026-06-16 11:58:28 PLAN/S0446_messenger-share-settings/PHASE_06__docs-catalog-cleanup.md spec-tech S0446 tactical plan: PHASE_06__docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 12:01:43 app_v2/src/test/java/com/sza/fastmediasorter/testutil/TestMediaCapabilities.kt spec-dev S0457 P01: route test MediaCapabilities through testMediaCapabilities factory [branch: DEBUG-v014]
2026-06-16 12:02:50 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ApplyEnableAllSettingsUseCaseTest.kt spec-dev S0457 P01: route test MediaCapabilities through testMediaCapabilities factory [branch: DEBUG-v014]
2026-06-16 12:03:58 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ProvisionDefaultResourcesUseCaseTest.kt spec-dev S0457 P01: route test MediaCapabilities through testMediaCapabilities factory [branch: DEBUG-v014]
2026-06-16 12:05:04 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ResolveOpenInFmsTargetUseCaseTest.kt spec-dev S0457 P01: route test MediaCapabilities through testMediaCapabilities factory [branch: DEBUG-v014]
2026-06-16 12:06:10 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ScanLocalFoldersUseCaseTest.kt spec-dev S0457 P01: route test MediaCapabilities through testMediaCapabilities factory [branch: DEBUG-v014]
2026-06-16 12:07:18 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlannerTest.kt spec-dev S0457 P01: route test MediaCapabilities through testMediaCapabilities factory [branch: DEBUG-v014]
2026-06-16 12:12:52 PLAN/S0457_bugfix-unit-test-source-set-broken-compile.md spec-dev All phases done; status -> Implemented (test source set compiles, targeted classes green) [branch: DEBUG-v014]
2026-06-16 12:14:35 PLAN/S0457_bugfix-unit-test-source-set-broken-compile.md spec-check Audit S0457 -> Verified; PASS/WARN/FAIL 9/0/0 [branch: DEBUG-v014]
2026-06-16 12:16:58 PLAN/S0459_unified-send-to-menu.md spec-update S0459 reframed as epic (menu+settings+impl); absorbs S0443/44/45/46/S0458; icons + generalize existing Share-to [branch: DEBUG-v014]
2026-06-16 12:16:58 PLAN/S0443_*.md spec-arc Archive S0443 - superseded by S0459 (absorbed into unified send-to epic) [branch: DEBUG-v014]
2026-06-16 12:16:58 PLAN/S0444_*.md spec-arc Archive S0444 - superseded by S0459 (absorbed into unified send-to epic) [branch: DEBUG-v014]
2026-06-16 12:16:58 PLAN/S0445_*.md spec-arc Archive S0445 - superseded by S0459 (absorbed into unified send-to epic) [branch: DEBUG-v014]
2026-06-16 12:16:58 PLAN/S0446_*.md spec-arc Archive S0446 - superseded by S0459 (absorbed into unified send-to epic) [branch: DEBUG-v014]
2026-06-16 12:16:59 PLAN/S0458_*.md spec-arc Archive S0458 - superseded by S0459 (absorbed into unified send-to epic) [branch: DEBUG-v014]
2026-06-16 12:17:55 PLAN/S0455_*.md spec-arc Archive S0455 - duplicate of active S0457 (same broken unit-test source set / mediaCapabilities) [branch: DEBUG-v014]
2026-06-16 12:19:51 PLAN/S0456_permission-flavorgates-reflection-zero-safety.md spec-dev All phases done; status -> Implemented (unblocked by S0457; acceptance test green) [branch: DEBUG-v014]
2026-06-16 12:21:22 PLAN/S0456_permission-flavorgates-reflection-zero-safety.md spec-check Audit S0456 -> Verified; PASS/WARN/FAIL 8/0/0 [branch: DEBUG-v014]
2026-06-16 12:21:58 PLAN/S0456_permission-flavorgates-reflection-zero-safety.md spec-arc Archive S0456 (Verified) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 12:21:58 PLAN/S0457_bugfix-unit-test-source-set-broken-compile.md spec-arc Archive S0457 (Verified) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 12:43:09 PLAN/S0459_unified-send-to-menu.md spec-update Refinement: folded audit findings + 4 owner decisions; +ADR-3..6, +type/multifile/icon/scope constraints; tier 3->2 [branch: DEBUG-v014]
2026-06-16 12:47:32 PLAN/S0459_unified-send-to-menu.md spec-update Fold 3 owner decisions (defaults/single-receiver/order) into ADR-7..9 + 3.3; trim resolved 6 items [branch: DEBUG-v014]
2026-06-16 12:58:33 PLAN/S0459_unified-send-to-menu.md spec-update Add re-home cross-link to S0362/S0431 in 10; capture lost Keep-text send semantics; confirm S0452/S0431 not deprecated [branch: DEBUG-v014]
2026-06-16 13:11:03 PLAN/S0459_unified-send-to-menu.md spec-update Resolve all 5 6 research items (artifacts under research/); promote Draft -> Approved [branch: DEBUG-v014]
2026-06-16 13:11:03 PLAN/S0459_unified-send-to-menu/research/01__surface-audit.md research S0459 exhaustive outbound-share surface audit [branch: DEBUG-v014]
2026-06-16 13:11:03 PLAN/S0459_unified-send-to-menu/research/02__type-applicability-model.md research S0459 ShareTarget type-applicability model [branch: DEBUG-v014]
2026-06-16 13:11:03 PLAN/S0459_unified-send-to-menu/research/03__bottomsheet-tv-focus.md research S0459 bottom-sheet TV/D-pad focus [branch: DEBUG-v014]
2026-06-16 13:11:03 PLAN/S0459_unified-send-to-menu/research/04__messenger-recipient-feasibility.md research S0459 messenger recipient feasibility [branch: DEBUG-v014]
2026-06-16 13:11:03 PLAN/S0459_unified-send-to-menu/research/05__email-send-action.md research S0459 email send action [branch: DEBUG-v014]
2026-06-16 13:18:14 PLAN/S0459_unified-send-to-menu/research/01__surface-audit.md research-verify Correct surface audit: add standalone share cluster + FileInfoLaunchManager open-with + audio shareable; extend OUT firewall (resource/backup/diagnostic exports) [branch: DEBUG-v014]
2026-06-16 13:18:14 PLAN/S0459_unified-send-to-menu/research/03__bottomsheet-tv-focus.md research-verify Point bottom-sheet focus pattern at existing project sheets [branch: DEBUG-v014]
2026-06-16 13:18:14 PLAN/S0459_unified-send-to-menu/research/04__messenger-recipient-feasibility.md research-verify Record known package ids + WhatsApp Business [branch: DEBUG-v014]
2026-06-16 13:18:14 PLAN/S0459_unified-send-to-menu.md spec-update Correct 6 surface-audit resolution after independent verification [branch: DEBUG-v014]
2026-06-16 13:55:04 PLAN/S0459_unified-send-to-menu/INDEX.md spec-tech Create tactical plan for S0459 (8 phases) [branch: DEBUG-v014]
2026-06-16 13:55:04 PLAN/S0459_unified-send-to-menu/PHASE_01__foundation-model.md spec-tech Phase 01: foundation-model [branch: DEBUG-v014]
2026-06-16 13:55:04 PLAN/S0459_unified-send-to-menu/PHASE_02__new-receiver-handlers.md spec-tech Phase 02: new-receiver-handlers [branch: DEBUG-v014]
2026-06-16 13:55:04 PLAN/S0459_unified-send-to-menu/PHASE_03__registry-population.md spec-tech Phase 03: registry-population [branch: DEBUG-v014]
2026-06-16 13:55:04 PLAN/S0459_unified-send-to-menu/PHASE_04__unified-menu-ui.md spec-tech Phase 04: unified-menu-ui [branch: DEBUG-v014]
2026-06-16 13:55:04 PLAN/S0459_unified-send-to-menu/PHASE_05__consolidate-player.md spec-tech Phase 05: consolidate-player [branch: DEBUG-v014]
2026-06-16 13:55:04 PLAN/S0459_unified-send-to-menu/PHASE_06__consolidate-standalone.md spec-tech Phase 06: consolidate-standalone [branch: DEBUG-v014]
2026-06-16 13:55:05 PLAN/S0459_unified-send-to-menu/PHASE_07__consolidate-browse.md spec-tech Phase 07: consolidate-browse [branch: DEBUG-v014]
2026-06-16 13:55:05 PLAN/S0459_unified-send-to-menu/PHASE_08__docs-catalog-cleanup.md spec-tech Phase 08: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-16 13:55:05 PLAN/S0459_unified-send-to-menu.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-16 14:16:54 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTarget.kt spec-dev S0459 Phase 01.1: add applicableTypes + appliesTo to ShareTarget [branch: DEBUG-v014]
2026-06-16 14:19:04 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareableContent.kt spec-dev S0459 Phase 01.2: add ShareableContent payload [branch: DEBUG-v014]
2026-06-16 14:20:57 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTargetHandler.kt spec-dev S0459 Phase 01.3: add ShareTargetHandler contract [branch: DEBUG-v014]
2026-06-16 14:23:21 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTargetIconResolver.kt spec-dev S0459 Phase 01.4: add ShareTargetIconResolver (hybrid icon policy) [branch: DEBUG-v014]
2026-06-16 14:24:37 app_v2/src/test/java/com/sza/fastmediasorter/core/share/ShareTargetApplicabilityTest.kt spec-dev S0459 Phase 01.4: applicability unit test (appliesTo) [branch: DEBUG-v014]
2026-06-16 14:35:37 PLAN/S0460_ocr-show-error-toast-on-background-thread-crash.md spec-tech S0460 primitive fix: 3.3 added, status Draft to BlockNeedUserTest [branch: DEBUG-v014]
2026-06-16 14:35:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-tech S0460: wrap showError Toast in runOnUiThread to fix FATAL crash on background OCR thread [branch: DEBUG-v014]
2026-06-16 14:43:11 PLAN/S0460_ocr-show-error-toast-on-background-thread-crash.md spec-check Audit S0460 -> Verified; PASS 4 / WARN 0 / FAIL 0 [branch: DEBUG-v014]
2026-06-16 14:43:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-check S0460: removed BlockNeedUserTest debug tag (Verified transition) [branch: DEBUG-v014]
2026-06-16 15:07:45 PLAN/S0462_bugfix-tesseractmanager-no-network-timeout.md spec-draft Scaffold strategic spec skeleton S0462 [branch: DEBUG-v014]
2026-06-16 15:10:23 PLAN/S0461_ocr-paddle-payload-missing-no-graceful-fallback.md spec-tech S0461 primitive: §3.3 added, Draft→Approved→BlockNeedUserTest [branch: DEBUG-v014]
2026-06-16 15:10:23 app_v2/src/main/java/com/sza/fastmediasorter/domain/ocr/OfflineOcrEngineProvider.kt spec-tech S0461: expose defaultEngine as public val for Tesseract fallback path [branch: DEBUG-v014]
2026-06-16 15:10:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt spec-tech S0461: Tesseract fallback on partial OCR payload missing in all three recognize flows [branch: DEBUG-v014]
2026-06-16 15:30:22 PLAN/S0462_bugfix-tesseractmanager-no-network-timeout.md spec-dev S0462 all phases done; status -> Implemented [branch: DEBUG-v014]
2026-06-16 15:30:22 app_v2/src/ocrEnabled/java/com/sza/fastmediasorter/ui/player/helpers/TesseractManager.kt spec-dev Replace URL.openStream() with HttpURLConnection + 15s connect/read timeout in checkAndDownloadData() [branch: DEBUG-v014]
2026-06-16 15:32:39 PLAN/S0462_bugfix-tesseractmanager-no-network-timeout.md spec-check Audit S0462 -> Verified; PASS 10 / WARN 0 / FAIL 0 [branch: DEBUG-v014]
2026-06-16 15:49:49 app_v2/src/main/java/com/sza/fastmediasorter/core/share/SystemShareInvoker.kt spec-dev S0459 Phase 02.1: invokeFiles email-extras overload (EXTRA_EMAIL/EXTRA_SUBJECT) [branch: DEBUG-v014]
2026-06-16 15:53:44 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/WhatsAppShareTargetHandler.kt spec-dev S0459 Phase 02.3: WhatsApp send handler [branch: DEBUG-v014]
2026-06-16 15:54:50 PLAN/S0461_ocr-paddle-payload-missing-no-graceful-fallback.md spec-test-device Device smoke test on emulator-5554 (x86_64, Android 17) -> PASS 3/SKIP 1; S0461 Tesseract path requires arm64+noLegal [branch: DEBUG-v014]
2026-06-16 15:54:54 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/EmailShareTargetHandler.kt spec-dev S0459 Phase 02.2: Email send handler (ACTION_SEND rfc822) [branch: DEBUG-v014]
2026-06-16 15:54:54 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/InstagramShareTargetHandler.kt spec-dev S0459 Phase 02.3: Instagram send handler (image/video) [branch: DEBUG-v014]
2026-06-16 15:56:55 app_v2/src/main/AndroidManifest.xml spec-dev S0459 Phase 02.4: queries visibility for Telegram/WhatsApp/Instagram receivers + mailto [branch: DEBUG-v014]
2026-06-16 16:09:56 app_v2/src/main/res/values/strings.xml spec-dev S0459 Phase 03.1: add receiver title strings (system_share/open_in/email/whatsapp/instagram) [branch: DEBUG-v014]
2026-06-16 16:10:10 app_v2/src/main/res/values-ru/strings.xml spec-dev S0459 Phase 03.1: RU receiver title strings [branch: DEBUG-v014]
2026-06-16 16:10:10 app_v2/src/main/res/values-uk/strings.xml spec-dev S0459 Phase 03.1: UK receiver title strings [branch: DEBUG-v014]
2026-06-16 16:30:24 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/PrintShareTargetHandler.kt spec-dev S0459 Phase 03.2: 6 wrapper handlers + SharePrintHost + ShareableContent.mediaFile [branch: DEBUG-v014]
2026-06-16 16:31:33 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareableContent.kt spec-dev S0459 Phase 03.2: add mediaFile field (ADR-11) [branch: DEBUG-v014]
2026-06-16 16:31:33 app_v2/src/main/java/com/sza/fastmediasorter/core/share/SharePrintHost.kt spec-dev S0459 Phase 03.2: new host-print capability interface (ADR-10) [branch: DEBUG-v014]
2026-06-16 16:31:33 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/SystemShareTargetHandler.kt spec-dev S0459 Phase 03.2: System Share wrapper handler [branch: DEBUG-v014]
2026-06-16 16:31:33 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/OpenInShareTargetHandler.kt spec-dev S0459 Phase 03.2: Open-in wrapper handler [branch: DEBUG-v014]
2026-06-16 16:31:33 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/TelegramShareTargetHandler.kt spec-dev S0459 Phase 03.2: Telegram wrapper handler [branch: DEBUG-v014]
2026-06-16 16:31:33 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/KeepTextShareTargetHandler.kt spec-dev S0459 Phase 03.2: Keep-text wrapper handler [branch: DEBUG-v014]
2026-06-16 16:31:33 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/KeepDrawingShareTargetHandler.kt spec-dev S0459 Phase 03.2: Keep-drawing wrapper handler [branch: DEBUG-v014]
2026-06-16 16:31:33 PLAN/S0459_unified-send-to-menu.md spec-dev S0459 Phase 03.2: ADR-10 (SharePrintHost) + ADR-11 (mediaFile/menu-side prep) [branch: DEBUG-v014]
2026-06-16 16:35:16 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/LensShareTargetHandler.kt spec-dev S0459 Phase 03.2: Lens wrapper handler [branch: DEBUG-v014]
2026-06-16 16:36:25 app_v2/src/main/java/com/sza/fastmediasorter/core/share/GoogleLensShare.kt spec-dev S0459 Phase 03.2: relocate GoogleLensShare ui->core + shareImageUri [branch: DEBUG-v014]
2026-06-16 16:36:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0459 Phase 03.2: update GoogleLensShare FQN to core.share [branch: DEBUG-v014]
2026-06-16 16:36:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0459 Phase 03.2: update GoogleLensShare FQN to core.share [branch: DEBUG-v014]
2026-06-16 16:36:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/GoogleLensShare.kt spec-dev S0459 Phase 03.2: removed (relocated to core/share/GoogleLensShare.kt) [branch: DEBUG-v014]
2026-06-16 16:40:46 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt spec-dev S0459 Phase 03.3: register 10 ShareTargets (@IntoSet, defaults ADR-7, applicableTypes) [branch: DEBUG-v014]
2026-06-16 16:41:55 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetHandlerModule.kt spec-dev S0459 Phase 03.4: bind 10 handlers @IntoMap by id [branch: DEBUG-v014]
2026-06-16 16:50:52 app_v2/src/main/res/values/strings.xml spec-dev S0459 Phase 03: compliance - drop messenger brand strings, add neutral share_target_title_app fallback (dynamic app-label in Phase 04) [branch: DEBUG-v014]
2026-06-16 16:51:06 app_v2/src/main/res/values-ru/strings.xml spec-dev S0459 Phase 03: RU neutral app-label fallback [branch: DEBUG-v014]
2026-06-16 16:51:06 app_v2/src/main/res/values-uk/strings.xml spec-dev S0459 Phase 03: UK neutral app-label fallback [branch: DEBUG-v014]
2026-06-16 16:51:06 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt spec-dev S0459 Phase 03: messenger titleRes -> neutral fallback (verifyNoPlatformNames compliance) [branch: DEBUG-v014]
2026-06-16 17:15:23 app_v2/src/main/res/values/strings_settings.xml standardDebug Rename settings group: Translation OCR and Google Lens -> Translation digitization (OCR) [branch: DEBUG-v014]
2026-06-16 17:25:35 PLAN/S0459_unified-send-to-menu.md spec-dev Phase 04 done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BuildSendToReceiverListUseCase.kt spec-dev New use-case: 3-gate filter (enabled+available+appliesTo) with system_share-last ordering (ADR-9) [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToBottomSheet.kt spec-dev New bottom-sheet fragment: gated receiver list, PackageManager label resolution (ADR-5), D-pad focus [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt spec-dev New manager: bar direct-invoke or sheet, overflow addSubMenu builder; ADR-4/8 routing [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/res/layout/sheet_send_to.xml spec-dev New sheet container layout (title + RecyclerView) [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/res/layout/item_send_to_receiver.xml spec-dev New receiver row layout (icon + label + unavailable subtitle) [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt spec-dev Added SEND_TO PlayerCommand (priority 25, barCapable) [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/res/menu/overflow_menu_player.xml spec-dev Added menu_send_to overflow anchor for Send-to submenu [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/res/values/strings.xml spec-dev Added share_to_menu_title, share_to_first_file_hint, share_target_subtitle_not_installed (EN/RU/UK) [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt spec-dev Added onSendToClicked to CommandPanelCallback; routed menu_send_to overflow event [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt spec-dev Implemented onSendToClicked: builds ShareableContent from current file, invokes SendToMenuManager.show [branch: DEBUG-v014]
2026-06-16 17:25:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev Injected SendToMenuManager for access by callback impl [branch: DEBUG-v014]
2026-06-16 17:33:30 PLAN/S0463_send-to-commands-toggle-labels.md spec Scaffold strategic spec skeleton S0463 [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt consolidate-lens-toggle Removed enableGoogleLens field; Lens gating now driven by ShareTarget enabledShareTargets/disabledShareTargets [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt consolidate-lens-toggle Removed enableGoogleLens from BackupSettings data class [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt consolidate-lens-toggle Removed enableGoogleLens from both backup and restore mapping [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt consolidate-lens-toggle Removed enableGoogleLens import mapping [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/TextRecognitionSettingsStore.kt consolidate-lens-toggle Removed KEY_ENABLE_GOOGLE_LENS constant, field, read/write; consolidated to ShareTarget prefs [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt consolidate-lens-toggle Removed enableGoogleLens population from TextRecognitionSettingsStore [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt consolidate-lens-toggle Removed enableGoogleLens preset applier branch [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt consolidate-lens-toggle Removed enableGoogleLens from startup settings dump log [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt consolidate-lens-toggle Removed enableGoogleLens from settings reset defaults [branch: DEBUG-v014]
2026-06-16 17:48:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt consolidate-lens-toggle Removed Google Lens toggle (bindSwitch, setSwitchChecked, flavor-hide line); toggle relocated to Send-to settings (ShareTarget lens) [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerViewModel.kt consolidate-lens-toggle Injected IsShareTargetEnabledUseCase; passed to PlayerMediaFilesLoader to gate lensEnabled from ShareTarget [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt consolidate-lens-toggle Added IsShareTargetEnabledUseCase param; replaced enableGoogleLens = settings.enableGoogleLens with isShareTargetEnabled(lens) [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt consolidate-lens-toggle Added IsShareTargetEnabledUseCase; replaced enableGoogleLens gate with isShareTargetEnabled(lens) [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ImageLoadingManager.kt consolidate-lens-toggle Replaced enableGoogleLens gate with enabledShareTargets inline check (ALWAYS_OFF default) [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt consolidate-lens-toggle Replaced 3x enableGoogleLens gate with enabledShareTargets inline check (ALWAYS_OFF default) [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt consolidate-lens-toggle Injected IsShareTargetEnabledUseCase; replaced googleLensSettingEnabled = settings.enableGoogleLens [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/res/layout/fragment_settings_other.xml consolidate-lens-toggle Removed rowEnableGoogleLens SettingsToggleRow [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/res/layout-land/fragment_settings_other.xml consolidate-lens-toggle Removed rowEnableGoogleLens SettingsToggleRow (landscape) [branch: DEBUG-v014]
2026-06-16 17:48:08 app_v2/src/main/res/values/strings.xml consolidate-lens-toggle Removed setting_enable_google_lens_desc key (zero remaining refs); enable_google_lens retained (still used as createChooser title) [branch: DEBUG-v014]
2026-06-16 18:09:10 PLAN/S0463_send-to-commands-toggle-labels.md spec-dev All phases done; status -> Implemented [branch: DEBUG-v014]
2026-06-16 18:09:10 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTarget.kt spec-dev Added subtitleRes and helpMessageRes nullable fields (S0463) [branch: DEBUG-v014]
2026-06-16 18:09:10 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt spec-dev Fixed keep_text/keep_drawing titleRes; added subtitleRes+helpMessageRes to all 10 targets (S0463) [branch: DEBUG-v014]
2026-06-16 18:09:10 app_v2/src/main/res/values/strings.xml spec-dev Added 18 share_target_title/desc/help string keys EN (S0463) [branch: DEBUG-v014]
2026-06-16 18:09:10 app_v2/src/main/res/values-ru/strings.xml spec-dev Added 18 share_target_title/desc/help string keys RU (S0463) [branch: DEBUG-v014]
2026-06-16 18:09:10 app_v2/src/main/res/values-uk/strings.xml spec-dev Added 18 share_target_title/desc/help string keys UK (S0463) [branch: DEBUG-v014]
2026-06-16 18:09:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev setupSendCommandsGroup: PM label resolution, description subtitle, help button per toggle (S0463) [branch: DEBUG-v014]
2026-06-16 18:12:01 PLAN/S0463_send-to-commands-toggle-labels.md spec-check Audit S0463 -> Verified; PASS 10/WARN 0/FAIL 0 [branch: DEBUG-v014]
2026-06-16 21:28:05 PLAN/S0454_spec-catalog-journal-compaction.md spec-all Strategic spec approved: S0454 catalog journal compaction [branch: DEBUG-v014]
2026-06-16 21:29:37 PLAN/S0454_spec-catalog-journal-compaction/INDEX.md spec-all Tactical plan: S0454 (5 phases) [branch: DEBUG-v014]
2026-06-16 21:42:08 scripts/spec_catalog/_lib.ps1 spec-all S0454: active/archive journal split in _lib.ps1 (Read-Catalog -IncludeArchived, Find-Record fallback, archive writers); routing in archive/delete/update/close/bulk-update; -IncludeArchived flags on select/search/stats/sca-specs; validate ArchiveSplit invariant [branch: DEBUG-v014]
2026-06-16 21:42:08 scripts/spec_catalog/migrate-archive-split.ps1 spec-all S0454: one-time idempotent migration moved 431 Archived records to PLAN/spec-catalog-archive.jsonl (active journal 463->32) [branch: DEBUG-v014]
2026-06-16 21:42:09 scripts/spec_catalog/SCHEMA.md spec-all S0454: document archive split (two journals, -IncludeArchived, fallback resolution, invariant #10) [branch: DEBUG-v014]
2026-06-16 21:43:35 PLAN/S0454_spec-catalog-journal-compaction.md spec-all Pipeline Verified: S0454 catalog journal compaction [branch: DEBUG-v014]
2026-06-16 21:54:30 PLAN/S0436_migrate-buildconfig-support-to-capability.md spec-all S0436 F5 audit: src/main sweep 0 functional reads; noLegal assemble GREEN closes lite/vr/noLegal gap -> Verified [branch: DEBUG-v014]
2026-06-16 21:59:29 PLAN/S0464_mic-recording-save-eacces-car-oem.md spec-all Compact spec approved: S0464 mic-recording EACCES MediaStore fix [branch: DEBUG-v014]
2026-06-16 22:04:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt spec-all S0464: route on-device mic save through LocalDestinationWriter (MediaStore on API 29+) - fixes EACCES on Downloads fallback under scoped storage [branch: DEBUG-v014]
2026-06-16 22:04:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-all S0464: pass destinationClassifier/destinationWriter into BrowseMicRecordingManager [branch: DEBUG-v014]
2026-06-16 22:06:03 PLAN/S0465_camera-video-capture-eacces-public-collection.md spec-draft Parked follow-up: camera/video capture share S0464 EACCES bug [branch: DEBUG-v014]
2026-06-16 22:06:20 PLAN/S0464_mic-recording-save-eacces-car-oem.md spec-all Pipeline BlockNeedUserTest: S0464 mic-recording EACCES fix (build GREEN, awaiting real-device verification) [branch: DEBUG-v014]
2026-06-16 22:06:38 PLAN/spec-catalog.jsonl spec-next Session: 4 processed (S0454+S0436 Verified, S0464 BlockNeedUserTest, S0296 Partial), 11 skip-cached, 1 parked (S0465) [branch: DEBUG-v014]
2026-06-16 22:22:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseInlineAudioManager.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlaybackPreflightHelper.kt standardDebug InlinePlayer: return null for non-SMB network URIs; remove stale S0168 log ref [branch: DEBUG-v014]
2026-06-16 22:38:24 PLAN/S0462_bugfix-tesseractmanager-no-network-timeout.md spec-arc Archive S0462 (bugfix-tesseractmanager-no-network-timeout) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 22:39:41 PLAN/S0463_send-to-commands-toggle-labels.md spec-arc Archive S0463 (send-to-commands-toggle-labels) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 22:40:50 PLAN/S0464_mic-recording-save-eacces-car-oem.md spec-arc Archive S0464 (mic recording save EACCES on car OEM) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 22:40:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt spec-arc Remove S0464 BlockNeedUserTest debug tag on archive [branch: DEBUG-v014]
2026-06-16 22:46:23 app_v2/src/main/java/com/sza/fastmediasorter/data/capture/CameraCaptureSaver.kt S0465 Route camera photo + video capture on-device writes through MediaStore-aware LocalDestinationWriter to fix EACCES on API 29+ scoped storage (mirror of S0464 mic fix) [branch: DEBUG-v014]
2026-06-16 22:59:08 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpClient.kt Bugfix S0466: SFTP audio download skips exponential backoff on dead-transport failure (stale pooled session after slow scan) - immediate reconnect-retry fits the 5s pre-cache budget; shared isDeadTransport helper in SftpConnectionPool [branch: DEBUG-v014]
2026-06-16 23:02:40 PLAN/S0453_per-spec-branch-workflow.md spec-arc Archive S0453 (per-spec-branch-workflow) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 23:03:03 PLAN/S0452_share-commands-infrastructure.md spec-arc Archive S0452 (share-commands-infrastructure) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 23:03:43 PLAN/S0449_nolegal-screen-gesture-accessibility-shortcut.md spec-arc Archive S0449 (nolegal-screen-gesture-accessibility-shortcut) -> temp/done/; removed BlockNeedUserTest debug tag from OperationsSettingsFragment.kt [branch: DEBUG-v014]
2026-06-16 23:05:45 PLAN/S0436_migrate-buildconfig-support-to-capability.md spec-arc Archive S0436 (migrate-buildconfig-support-to-capability) -> temp/done/ [branch: DEBUG-v014]
2026-06-16 23:05:50 PLAN/S0431_keep-share-text-viewer.md spec-arc Archive S0431 (keep-share-text-viewer) -> temp/done/; removed BlockNeedUserTest debug tags from TextStandaloneActivity.kt and PlayerCommandPanelCallbackImpl.kt [branch: DEBUG-v014]
2026-06-16 23:24:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt S0459 Phase 05 Remove player buildActiveCommands branches for SHARE/Telegram/image-Lens/Keep-text and drop SEND_TEXT_TO_KEEP enum + telegramInstalled/keepInstalled params; unified SEND_TO is sole outbound on the panel [branch: DEBUG-v014]
2026-06-16 23:24:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelAvailabilityUpdater.kt S0459 Phase 05 Drop telegramInstalled/keepInstalled args + dead isTelegramInstalled/isKeepInstalled helpers; hide ad-hoc Share + image-Lens landscape buttons [branch: DEBUG-v014]
2026-06-16 23:24:35 app_v2/src/main/res/menu/overflow_menu_player.xml S0459 Phase 05 Remove menu_share, menu_send_to_telegram, menu_send_text_to_keep items (unified Send to.. covers them) [branch: DEBUG-v014]
2026-06-16 23:24:35 app_v2/src/main/res/values/ids.xml S0459 Phase 05 Declare menu_share/menu_send_to_telegram ids so PlayerCommand enum constants reused by Browse stay valid after menu XML items removed [branch: DEBUG-v014]
2026-06-16 23:24:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt S0459 Phase 05 Remove onShareClicked/onSendToTelegramClicked/onSendTextToKeepClicked callback methods, the btnShareCmd listener, and the menu_share/menu_send_to_telegram/menu_send_text_to_keep dispatch branches [branch: DEBUG-v014]
2026-06-16 23:24:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt S0459 Phase 05 Drop onShare/onSendToTelegram/onSendTextToKeep overrides; keep onGoogleLensClicked PDF branch only (image/GIF branch removed, GOOGLE_LENS_PDF preserved) [branch: DEBUG-v014]
2026-06-16 23:24:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/actions/EditorActionPanel.kt S0459 Phase 05 Replace EditorActionCallbacks onSaveAndSend+onSendToKeep with single onSendTo (unified menu) [branch: DEBUG-v014]
2026-06-16 23:24:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/editor/actions/EditorActionPanelBinder.kt S0459 Phase 05 Collapse Save&send + Send-to-Keep overflow entries into one Send to.. item; drop keepAvailable ctor param and unused Timber import [branch: DEBUG-v014]
2026-06-16 23:24:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextEditorActionPanelCallbacks.kt S0459 Phase 05 Replace onSaveAndSend/onSendToKeep with onSendTo (save then sendTo lambda); drop direct SystemShareInvoker/Keep wiring and context/keepChecker params [branch: DEBUG-v014]
2026-06-16 23:24:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt S0459 Phase 05 Add openSendToMenuForText routing editor text through unified menu via Hilt EntryPoint; drop keepAvailable binder arg; S0459 debug tag [branch: DEBUG-v014]
2026-06-16 23:24:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDrawingSaveHelper.kt S0459 Phase 05 Route merged drawing through SendToMenuManager instead of SystemShareInvoker; keep overlay->cache merge; S0459 debug tag [branch: DEBUG-v014]
2026-06-16 23:37:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt S0459 Phase 06 Route standalone share button through unified Send-to menu (SendToMenuManager) instead of direct ACTION_SEND chooser [branch: DEBUG-v014]
2026-06-16 23:37:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0459 Phase 06 Fold standalone Office share fallback into unified Send-to menu; keep prepareFileForRead off main thread [branch: DEBUG-v014]
2026-06-16 23:37:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoLaunchManager.kt S0459 Phase 06 Route file-info open-with through shared OpenInShareTargetHandler; remove duplicate ACTION_VIEW chooser [branch: DEBUG-v014]
2026-06-16 23:37:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0459 Phase 06 Inject SendToMenuManager and wire send-to args into StandaloneFileOperationsHandler [branch: DEBUG-v014]
2026-06-16 23:37:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt S0459 Phase 06 Inject SendToMenuManager and wire send-to args into StandaloneFileOperationsHandler [branch: DEBUG-v014]
2026-06-16 23:37:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0459 Phase 06 Inject SendToMenuManager and wire send-to args into StandaloneFileOperationsHandler [branch: DEBUG-v014]
2026-06-16 23:37:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt S0459 Phase 06 Inject SendToMenuManager and wire send-to args into StandaloneFileOperationsHandler [branch: DEBUG-v014]
2026-06-16 23:37:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt S0459 Phase 06 Inject SendToMenuManager and wire send-to args into StandaloneFileOperationsHandler [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareableContent.kt S0459 Phase 07 Add mimeForMediaType companion helper so browse surfaces derive share MIME identically to the player [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseShareOperationsHelper.kt S0459 Phase 07 Replace direct ACTION_SEND/Telegram chooser with sendFilesToMenu that stages Uris and routes through SendToMenuManager [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt S0459 Phase 07 Inject SendToMenuManager; collapse shareSelectedFiles/sendSelectedFilesToTelegram into single sendFilesToMenu [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt S0459 Phase 07 Route toolbar share and per-file overflow send through unified menu; pass SendToMenuManager and OpenInShareTargetHandler to handlers [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseBinaryFileHandler.kt S0459 Phase 07 Route binary-file share through SendToMenuManager and open-with through shared OpenInShareTargetHandler [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt S0459 Phase 07 Collapse per-file Share + Telegram items into one SEND_TO entry routed to onSendTo [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0459 Phase 07 Inject SendToMenuManager and OpenInShareTargetHandler; pass to BrowseManagerInitializer [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt S0459 Phase 07 Remove dead SEND_TO_TELEGRAM enum constant after browse consolidation; keep SHARE/GOOGLE_LENS_IMAGE used by CommandPanelController [branch: DEBUG-v014]
2026-06-16 23:49:43 app_v2/src/main/res/values/ids.xml S0459 Phase 07 Remove orphaned menu_send_to_telegram id; keep menu_share for CommandPanelController view mapping [branch: DEBUG-v014]
2026-06-16 23:57:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt S0459 Phase 08 audit Remove separate browse per-file Google Lens overflow item (GOOGLE_LENS_IMAGE branch, onGoogleLens param, buildExtendedCommands emission); Lens now via unified Send-to menu [branch: DEBUG-v014]
2026-06-16 23:57:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseManagerInitializer.kt S0459 Phase 08 audit Remove launchGoogleLensForFile + onGoogleLens wiring and now-unused ClipData/FileProvider imports [branch: DEBUG-v014]
2026-06-16 23:57:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt S0459 Phase 08 audit Update stale GOOGLE_LENS_IMAGE enum comment: browse Lens folded into unified menu; enum kept only for in-app player btnGoogleLensImageCmd [branch: DEBUG-v014]
2026-06-17 00:06:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0459 Phase 08 audit Remove redundant menu_google_lens overflow item, unused googleLensSettingEnabled field/collector and IsShareTargetEnabledUseCase injection; Lens receiver now reached via unified Send-to menu [branch: DEBUG-v014]
2026-06-17 00:06:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt S0459 Phase 08 audit Remove redundant menu_send_to_keep overflow item handler and visibility wiring; Keep-text receiver now reached via unified Send-to menu [branch: DEBUG-v014]
2026-06-17 00:06:28 app_v2/src/main/res/menu/overflow_menu_standalone_player.xml S0459 Phase 08 audit Remove orphaned menu_send_to_keep item (no longer referenced after Text host fold) [branch: DEBUG-v014]
2026-06-17 00:18:06 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTarget.kt S0459 Phase 04 fix Add batchCapable field as single source of truth for multi-file capability (ADR-4) [branch: DEBUG-v014]
2026-06-17 00:18:07 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTargetIconResolver.kt S0459 Phase 04 fix Add resolveLabel() so sheet and overflow share the app-resolved label (ADR-5) [branch: DEBUG-v014]
2026-06-17 00:18:08 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt S0459 Phase 04 fix Mark system_share email telegram whatsapp instagram batchCapable [branch: DEBUG-v014]
2026-06-17 00:18:09 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BuildSendToReceiverListUseCase.kt S0459 Phase 04 fix Explicit frequency-rank order ADR-9 instead of alphabetical registry order [branch: DEBUG-v014]
2026-06-17 00:18:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt S0459 Phase 04 fix Use target.batchCapable and resolved label in overflow submenu [branch: DEBUG-v014]
2026-06-17 00:18:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToBottomSheet.kt S0459 Phase 04 fix Multi-file hint plus single scoping plus resolved label; drop duplicate icon resolve [branch: DEBUG-v014]
2026-06-17 00:18:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/FileOperationsHandler.kt S0459 Phase 08 audit Remove orphaned in-app performShare share cluster dead after unified menu [branch: DEBUG-v014]
2026-06-17 00:18:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt S0459 Phase 08 audit Remove orphaned shareCurrentFile delegate [branch: DEBUG-v014]
2026-06-17 00:18:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt S0459 Phase 08 audit Remove dead sendCurrentFileToTelegram cluster [branch: DEBUG-v014]
2026-06-17 00:18:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TextViewerManager.kt S0459 Phase 08 audit Remove dead sendCurrentTextToKeep isKeepTargetAvailable keepChecker [branch: DEBUG-v014]
2026-06-17 00:18:15 docs/FEATURES.md S0459 Phase 08 Replace Send-to-Telegram entry with unified Send-to menu [branch: DEBUG-v014]
2026-06-17 00:18:16 docs/FEATURES_RU.md S0459 Phase 08 Replace Send-to-Telegram entry with unified Send-to menu RU [branch: DEBUG-v014]
2026-06-17 00:18:17 docs/FEATURES_UK.md S0459 Phase 08 Replace Send-to-Telegram entry with unified Send-to menu UK [branch: DEBUG-v014]
2026-06-17 00:57:28 app_v2/src/main/res/values-ru/strings.xml, app_v2/src/main/res/values-uk/strings.xml i18n Add missing RU/UK translations for background_audio_exit_always_stop and background_audio_exit_always_continue dialog buttons [branch: DEBUG-v014]
2026-06-17 01:38:21 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTargetHandler.kt ShareTargetHandler.isSupportedBy S0459: add host-capability gate (ADR-10) so Print is hidden on hosts without SharePrintHost [branch: DEBUG-v014]
2026-06-17 01:38:21 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/PrintShareTargetHandler.kt PrintShareTargetHandler S0459: override isSupportedBy = activity is SharePrintHost (menu-build gate, no silent no-op) [branch: DEBUG-v014]
2026-06-17 01:38:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt PlayerActivity S0459: implement SharePrintHost.printMediaFile so Print receiver works in the in-app player (ADR-10) [branch: DEBUG-v014]
2026-06-17 01:38:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt SendToMenuManager S0459: host-capability filter (receiversFor), send-error dispatch with try/catch+toast, overflow submenu order/icon [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToBottomSheet.kt SendToBottomSheet S0459: route via SendToMenuManager.receiversFor/dispatch, doOnPreDraw focus, accurate Not-installed KDoc [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelController.kt CommandPanelController.showOverflowMenu S0459 ADR-2: render Send-to as native addSubMenu in overflow PopupMenu (was flat item to sheet) [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt PlayerCommandPanelCallbackImpl S0459: add onSendToOverflowSubMenuRequested + extract buildShareableContent [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerShareManager.kt PlayerShareManager.shareOfficeDocument S0459: fold in-app Office share into unified Send-to menu; drop unused Telegram/SystemShareInvoker imports [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt ImageDrawOverlayManager.launchSendTo S0459: fold draw-editor Keep into unified Send-to menu; remove keepChecker gating [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DrawKeepExportHelper.kt DrawKeepExportHelper.prepareMergedImageUri S0459: return merged image Uri for the unified menu; remove own ACTION_SEND to Keep [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt ShareTargetModule.instagramTarget S0459 ADR-4: Instagram batchCapable=false (single-file receiver) [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/java/com/sza/fastmediasorter/core/share/handlers/KeepDrawingShareTargetHandler.kt KeepDrawingShareTargetHandler S0459: send with content.mime (no hardcoded image/jpeg) [branch: DEBUG-v014]
2026-06-17 01:38:22 app_v2/src/main/AndroidManifest.xml queries S0459: add Google Lens packages (com.google.ar.lens, googlequicksearchbox) for API 30+ visibility [branch: DEBUG-v014]
2026-06-17 01:38:23 app_v2/src/main/java/com/sza/fastmediasorter/core/share/GoogleLensShare.kt GoogleLensShare S0459: narrow broad catches to IllegalArgumentException / ActivityNotFoundException (Rule 19) [branch: DEBUG-v014]
2026-06-17 01:38:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt StandalonePlayerActivity S0459: hide all shared overflow items except Open-in-FMS (no orphan Google Lens dead tap) [branch: DEBUG-v014]
2026-06-17 01:38:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseFileOverflowMenuManager.kt BrowseFileOverflowMenuManager S0459: remove dead injected IsShareTargetEnabledUseCase (Rule 20) [branch: DEBUG-v014]
2026-06-17 01:38:23 app_v2/src/main/res/values/strings.xml share_to_send_failed S0459: add send-failure string (EN/RU/UK); remove orphaned draw_overflow_keep/draw_keep_not_installed [branch: DEBUG-v014]
2026-06-17 01:38:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/helpers/FileInfoLaunchManager.kt FileInfoLaunchManager S0459: strip ticket id from permanent Timber.w (CLAUDE.md section 2) [branch: DEBUG-v014]
2026-06-17 01:59:59 PLAN/S0468_screenshot-clipboard.md spec Add strategic spec S0468 for screenshot-to-clipboard option [branch: DEBUG-v014]
2026-06-17 02:02:14 app_v2/src/main/java/com/sza/fastmediasorter/util/PackageManagerCompat.kt S0467 migrate deprecated PackageManager int-flag APIs to compat seam Add PackageManagerCompat seam + migrate 30 raw-int getPackageInfo/getApplicationInfo/queryIntentActivities/resolveActivity sites; add prevent-at-source gate [branch: DEBUG-v014]
2026-06-17 02:04:14 app_v2 + wear + scripts S0467 Migrate deprecated raw-int PackageManager flag APIs to a PackageManagerCompat seam (30 app_v2 sites + 1 wear); add assert-deprecated-pm-flags ratchet gate wired into post-change; CLAUDE.md Rule 21 [branch: DEBUG-v014]
2026-06-17 02:10:57 PLAN/S0468_screenshot-clipboard/INDEX.md spec-tech Create tactical plan for S0468 [branch: DEBUG-v014]
2026-06-17 02:10:57 PLAN/S0468_screenshot-clipboard/PHASE_01__settings-flag.md spec-tech Phase 01: settings-flag [branch: DEBUG-v014]
2026-06-17 02:10:57 PLAN/S0468_screenshot-clipboard/PHASE_02__clipboard-writer.md spec-tech Phase 02: clipboard-writer [branch: DEBUG-v014]
2026-06-17 02:10:57 PLAN/S0468_screenshot-clipboard/PHASE_03__capture-wiring.md spec-tech Phase 03: capture-wiring [branch: DEBUG-v014]
2026-06-17 02:10:57 PLAN/S0468_screenshot-clipboard/PHASE_04__settings-ui.md spec-tech Phase 04: settings-ui [branch: DEBUG-v014]
2026-06-17 02:10:57 PLAN/S0468_screenshot-clipboard/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 02:10:57 PLAN/S0468_screenshot-clipboard.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 02:14:48 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0468 Add copyScreenshotToClipboard settings flag [branch: DEBUG-v014]
2026-06-17 02:16:33 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/ScreenshotSettingsStore.kt spec-dev S0468 Persist copyScreenshotToClipboard in screenshot settings store [branch: DEBUG-v014]
2026-06-17 02:18:19 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0468 Map copyScreenshotToClipboard from store to AppSettings [branch: DEBUG-v014]
2026-06-17 02:19:56 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0468 Add device-profile preset row for copyScreenshotToClipboard [branch: DEBUG-v014]
2026-06-17 02:20:38 app_v2/src/main/java/com/sza/fastmediasorter/core/clipboard/ImageClipboardWriter.kt spec-dev S0468 Add ImageClipboardWriter: copy bitmap to system clipboard via FileProvider URI [branch: DEBUG-v014]
2026-06-17 02:22:24 PLAN/S0469_save-photos-to-clipboard.md spec Scaffold strategic spec skeleton S0469 [branch: DEBUG-v014]
2026-06-17 02:22:48 PLAN/S0470_video-frame-clipboard.md spec Scaffold strategic spec skeleton S0470 [branch: DEBUG-v014]
2026-06-17 02:58:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0468 Bind copy-to-clipboard toggle in gesture settings group [branch: DEBUG-v014]
2026-06-17 03:05:46 PLAN/S0468_screenshot-clipboard.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-17 03:05:46 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenCaptureService.kt spec-dev Phase 03: copy screenshot to clipboard before save when flag on [branch: DEBUG-v014]
2026-06-17 03:05:46 app_v2/src/main/res/values/strings.xml spec-dev Phase 03/04: clipboard confirmation + toggle title/summary strings (EN) [branch: DEBUG-v014]
2026-06-17 03:05:46 app_v2/src/main/res/values-ru/strings.xml spec-dev Phase 03/04: clipboard strings (RU) [branch: DEBUG-v014]
2026-06-17 03:05:46 app_v2/src/main/res/values-uk/strings.xml spec-dev Phase 03/04: clipboard strings (UK) [branch: DEBUG-v014]
2026-06-17 03:05:46 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-dev Phase 04: clipboard toggle row (portrait) [branch: DEBUG-v014]
2026-06-17 03:05:46 app_v2/src/main/res/layout-land/fragment_settings_destinations.xml spec-dev Phase 04: clipboard toggle row (landscape) [branch: DEBUG-v014]
2026-06-17 03:05:47 docs/FEATURES.md spec-dev Phase 05: document screenshot-to-clipboard option (EN) [branch: DEBUG-v014]
2026-06-17 03:05:47 docs/FEATURES_RU.md spec-dev Phase 05: document screenshot-to-clipboard option (RU) [branch: DEBUG-v014]
2026-06-17 03:05:47 docs/FEATURES_UK.md spec-dev Phase 05: document screenshot-to-clipboard option (UK) [branch: DEBUG-v014]
2026-06-17 03:11:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome S0471 Welcome: apply device-profile settings preset early (on leaving the profile page) instead of at Finish, so capability/permission toggles reflect the profile and later user deviations (All Files) survive; split ApplyProfilePresetUseCase into applySettingsOnly + markPresetApplied; All Files toggle in welcome now also creates the predefined All Files resource [branch: DEBUG-v014]
2026-06-17 04:01:38 PLAN/S0472_screenshot-gesture-send-to-recipients.md spec Add strategic spec S0472 for screenshot-gesture send-to-recipients option [branch: DEBUG-v014]
2026-06-17 04:04:06 PLAN/S0467_deprecated-packagemanager-api-flags.md spec-check Audit S0467 -> Verified; PASS/WARN/FAIL 9/0/0; deprecated PackageManager raw-int flag migration confirmed (src/main gate 0, all source-sets clean, wear inline guard) [branch: DEBUG-v014]
2026-06-17 04:04:25 PLAN/spec-catalog.jsonl spec-next Session: 2 processed (S0467 Verified, S0296 stays Partial), 3 auto-skipped (S0470 research-heavy, S0469 defer-until-S0468, S0296 owner+device) [branch: DEBUG-v014]
2026-06-17 04:23:09 PLAN/S0472_screenshot-gesture-send-to-recipients/INDEX.md spec-tech Create tactical plan for S0472 [branch: DEBUG-v014]
2026-06-17 04:23:09 PLAN/S0472_screenshot-gesture-send-to-recipients/PHASE_01__curated-send-action.md spec-tech Phase 01: curated-send-action [branch: DEBUG-v014]
2026-06-17 04:23:09 PLAN/S0472_screenshot-gesture-send-to-recipients/PHASE_02__docs-catalog-cleanup.md spec-tech Phase 02: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 04:23:09 PLAN/S0472_screenshot-gesture-send-to-recipients/research/01__capture-to-curated-send-seam.md spec-tech Research 01: capture-to-curated-send seam [branch: DEBUG-v014]
2026-06-17 04:23:09 PLAN/S0472_screenshot-gesture-send-to-recipients.md spec-tech Status -> Tactical; resolve research items 6.1/6.2 [branch: DEBUG-v014]
2026-06-17 04:26:09 app_v2/src/main/res/values/strings.xml string/screenshot_gesture_action_send_to Add curated send-to gesture action label (S0472) [branch: DEBUG-v014]
2026-06-17 04:26:24 app_v2/src/main/res/values-ru/strings.xml string/screenshot_gesture_action_send_to Add RU label (S0472) [branch: DEBUG-v014]
2026-06-17 04:26:24 app_v2/src/main/res/values-uk/strings.xml string/screenshot_gesture_action_send_to Add UK label (S0472) [branch: DEBUG-v014]
2026-06-17 04:27:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt PhotoVideoStandaloneActivity Add AUTO_ACTION_SEND_TO host branch reusing curated send-to (S0472) [branch: DEBUG-v014]
2026-06-17 04:30:19 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScreenshotGestureAction.kt ScreenshotGestureAction Add SEND_TO_RECIPIENTS action value (S0472) [branch: DEBUG-v014]
2026-06-17 04:31:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/ScreenshotGestureActionPickerManager.kt ScreenshotGestureActionPickerManager Map SEND_TO_RECIPIENTS to label (S0472) [branch: DEBUG-v014]
2026-06-17 04:31:29 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt ScreenshotGestureActionDispatcher Route SEND_TO_RECIPIENTS to standalone viewer auto-action (S0472) [branch: DEBUG-v014]
2026-06-17 04:37:23 docs/FEATURES_noLegal.md FEATURES_noLegal Document Send-to-recipients screenshot-gesture action (S0472) [branch: DEBUG-v014]
2026-06-17 04:37:24 docs/FEATURES_noLegal_RU.md FEATURES_noLegal_RU Document Send-to-recipients screenshot-gesture action RU (S0472) [branch: DEBUG-v014]
2026-06-17 04:37:24 docs/FEATURES_noLegal_UK.md FEATURES_noLegal_UK Document Send-to-recipients screenshot-gesture action UK (S0472) [branch: DEBUG-v014]
2026-06-17 04:40:24 PLAN/S0472_screenshot-gesture-send-to-recipients.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-17 04:40:24 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-dev Phase 02.2 S0472 device-test probe [branch: DEBUG-v014]
2026-06-17 04:40:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev Phase 02.2 S0472 device-test probe [branch: DEBUG-v014]
2026-06-17 08:57:03 PLAN/spec-catalog.jsonl spec-next Session: 0 advanced, 1 newly skip-cached (S0296 owner-gate+Quest3), 10 already skip-cached; 18 BlockNeedUserTest backlog awaiting device sweep [branch: DEBUG-v014]
2026-06-17 09:45:58 PLAN/S0471_welcome_preset_clobbers_user_allfiles.md spec-check Audit S0471 -> Verified; PASS/WARN/FAIL 8/0/0; static contract corroborates on-device PASS [branch: DEBUG-v014]
2026-06-17 09:45:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt spec-check Remove S0471 BlockNeedUserTest debug tag after device verification [branch: DEBUG-v014]
2026-06-17 10:35:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt skill-fix Drop redundant ‘Send to..’ header in overflow submenu (clearHeader) - it rendered as a menu-item-looking row identical to receivers [branch: DEBUG-v014]
2026-06-17 11:07:48 PLAN/S0473_statistics-collection-option-default-off.md spec Scaffold strategic spec skeleton S0473 [branch: DEBUG-v014]
2026-06-17 11:09:49 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTargetRegistry.kt send-to ordering Single fixed grouped order (DISPLAY_ORDER in registry) shared by Send-to menu + settings toggles; dropped usage-frequency rank from BuildSendToReceiverListUseCase. Groups: messengers/social, email, Google, utilities, system_share last [branch: DEBUG-v014]
2026-06-17 11:28:46 PLAN/S0473_statistics-collection-option-default-off.md spec Fill S0473 strategic spec: metrics catalog + Statistics window design [branch: DEBUG-v014]
2026-06-17 11:34:46 PLAN/S0473_statistics-collection-option-default-off.md spec S0473: add performance write strategy, first-launch/launch-count/per-type metrics, Send-to-author email button [branch: DEBUG-v014]
2026-06-17 11:43:44 PLAN/S0473_statistics-collection-option-default-off.md spec S0473: owner decisions - always-on baseline (first launch/launches/install version), drop Reset, gate window visibility on toggle, send-to-author as email attachment [branch: DEBUG-v014]
2026-06-17 11:44:03 PLAN/S0474_settings-activity-perf-research.md spec Add strategic research spec S0474 (settings screen load-cost & structure); parked S0475 search-mapping bug, S0476 flavor-isolation [branch: DEBUG-v014]
2026-06-17 11:49:28 PLAN/S0448_photos-flavor-exposes-network-sources.md spec-check Audit S0448 -> Verified; PASS/WARN/FAIL 17/0/0; static contract + device evidence both flavors + standard [branch: DEBUG-v014]
2026-06-17 11:49:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeRemoteSourcesController.kt S0448 Remove BlockNeedUserTest debug tag + now-unused Timber import after device verification [branch: DEBUG-v014]
2026-06-17 11:53:33 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on emulator-5554 (API 37): verified 5 (S0471/S0459/S0439/S0353/S0448), reopened 1 Partial (S0468 clipboard absent on API 30+ path), blocked 1 BlockExternal (S0465 OEM-storage), 5 stay BNUT not-testable-here (S0425/S0472/S0466/S0046/S0289), excluded 6 VR/OCR; parked S0477. Commits deferred (WIP tree). [branch: DEBUG-v014]
2026-06-17 12:03:42 PLAN/S0478_send-to-menu-icons.md spec Add strategic spec S0478 for recognizable «Send to..» menu icons (reverses S0459 ADR-5) [branch: DEBUG-v014]
2026-06-17 12:06:53 PLAN/S0478_send-to-menu-icons/INDEX.md spec-tech Create tactical plan for S0478 [branch: DEBUG-v014]
2026-06-17 12:06:53 PLAN/S0478_send-to-menu-icons/PHASE_01__receiver-icon-assets.md spec-tech Phase 01: receiver-icon-assets [branch: DEBUG-v014]
2026-06-17 12:06:53 PLAN/S0478_send-to-menu-icons/PHASE_02__wire-menu-icons.md spec-tech Phase 02: wire-menu-icons [branch: DEBUG-v014]
2026-06-17 12:06:53 PLAN/S0478_send-to-menu-icons/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 12:06:53 PLAN/S0478_send-to-menu-icons.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 12:07:21 temp/done/S0471_welcome_preset_clobbers_user_allfiles.md spec-arc Archive S0471 (Verified in sweep) -> temp/done/ [branch: DEBUG-v014]
2026-06-17 12:07:21 temp/done/S0459_unified-send-to-menu.md spec-arc Archive S0459 (Verified in sweep) -> temp/done/ [branch: DEBUG-v014]
2026-06-17 12:07:21 temp/done/S0439_screen-rotation-follow-os.md spec-arc Archive S0439 (Verified in sweep) -> temp/done/ [branch: DEBUG-v014]
2026-06-17 12:07:21 temp/done/S0353_widget-scheduled-tasks.md spec-arc Archive S0353 (Verified in sweep) -> temp/done/ [branch: DEBUG-v014]
2026-06-17 12:07:21 temp/done/S0448_photos-flavor-exposes-network-sources.md spec-arc Archive S0448 (Verified in sweep) -> temp/done/ [branch: DEBUG-v014]
2026-06-17 12:07:37 PLAN/S0473_statistics-collection-option-default-off.md spec S0473: owner decisions - wipe detailed on disable, TXT attachment, all-time only (drop period selector), email tech-context (version/flavor/device/Android) [branch: DEBUG-v014]
2026-06-17 12:10:50 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenshotAccessibilityService.kt S0468 Port clipboard copy step into API 30+ accessibility capture path (saveBitmap), mirroring MediaProjection path [branch: DEBUG-v014]
2026-06-17 12:10:50 PLAN/S0468_screenshot-clipboard.md spec-fix Annotate Last Audit recommendation as FIXED (S0468) [branch: DEBUG-v014]
2026-06-17 12:13:59 PLAN/S0479_settings-operations-section-decomposition.md spec Park S0479 group-B (operations decomposition / list extraction) split from S0474 per owner; narrow S0474 to group-A lazy-load, destinations stay embedded [branch: DEBUG-v014]
2026-06-17 12:14:12 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenshotAccessibilityService.kt S0468 Add S0468 device-test debug probe at API 30+ clipboard gate [branch: DEBUG-v014]
2026-06-17 12:14:12 PLAN/S0468_screenshot-clipboard.md spec-check Audit S0468 -> implementation complete (both capture paths), status -> BlockNeedUserTest; PASS/WARN/FAIL 8/0/0 [branch: DEBUG-v014]
2026-06-17 12:14:45 PLAN/S0473_statistics-collection-option-default-off.md spec S0473 Draft -> Approved: fill owner-inputs 3.3, resolve open questions, sanitize 3.1 wishes [branch: DEBUG-v014]
2026-06-17 12:19:38 PLAN/S0478_send-to-menu-icons.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/res/drawable/ic_send_email.xml spec-dev Phase 01: envelope glyph for email receiver [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/res/drawable/ic_send_note.xml spec-dev Phase 01: note glyph for Keep-text receiver [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/res/drawable/ic_send_note_brush.xml spec-dev Phase 01: brush glyph for Keep-drawing receiver [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/res/drawable/ic_send_plane.xml spec-dev Phase 01: paper-plane analog for messenger receiver [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/res/drawable/ic_send_chat.xml spec-dev Phase 01: chat-bubble analog for messenger receiver [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/res/drawable/ic_send_camera.xml spec-dev Phase 01: camera analog for social receiver [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt spec-dev Phase 02: iconRes assigned to all 10 share receivers [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt spec-dev Phase 02: overflow submenu items show per-receiver icon (app icon else glyph) [branch: DEBUG-v014]
2026-06-17 12:19:38 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTargetIconResolver.kt spec-dev Phase 02: KDoc documents S0478 reversal of ADR-5 icon policy [branch: DEBUG-v014]
2026-06-17 12:22:08 PLAN/S0474_settings-activity-perf-research/INDEX.md spec-tech Create tactical plan for S0474 (group-A settings load-cost, 5 phases) [branch: DEBUG-v014]
2026-06-17 12:22:08 PLAN/S0474_settings-activity-perf-research/PHASE_01__host-offscreen-search-index.md spec-tech Phase 01: host offscreen + search index defer/warm [branch: DEBUG-v014]
2026-06-17 12:22:08 PLAN/S0474_settings-activity-perf-research/PHASE_02__operations-disk-read.md spec-tech Phase 02: operations section-state disk read off main thread [branch: DEBUG-v014]
2026-06-17 12:22:08 PLAN/S0474_settings-activity-perf-research/PHASE_03__playback-pm-async.md spec-tech Phase 03: playback ShareTarget labels async [branch: DEBUG-v014]
2026-06-17 12:22:08 PLAN/S0474_settings-activity-perf-research/PHASE_04__media-lazy-sections.md spec-tech Phase 04: media child fragments lazy attach [branch: DEBUG-v014]
2026-06-17 12:22:08 PLAN/S0474_settings-activity-perf-research/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs/catalog cleanup [branch: DEBUG-v014]
2026-06-17 12:22:08 PLAN/S0474_settings-activity-perf-research.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 12:26:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt S0474 Phase 01: remove offscreen preload; defer+warm settings-search index off main thread [branch: DEBUG-v014]
2026-06-17 12:30:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt S0474 Phase 02: wrap section-state prefs read/write in StrictMode helpers [branch: DEBUG-v014]
2026-06-17 12:32:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt S0474 Phase 03: resolve ShareTarget labels off main thread, apply async to existing rows [branch: DEBUG-v014]
2026-06-17 12:40:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt S0474 Phase 04: lazy-attach media child fragments on section expand [branch: DEBUG-v014]
2026-06-17 12:40:43 PLAN/S0474_settings-activity-perf-research.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-17 12:41:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt S0474 Phase 04: lazy-attach media child fragments; final gate + catalog regen [branch: DEBUG-v014]
2026-06-17 13:05:35 PLAN/S0473_statistics-collection-option-default-off/INDEX.md spec-tech Create tactical plan for S0473 [branch: DEBUG-v014]
2026-06-17 13:05:35 PLAN/S0473_statistics-collection-option-default-off/PHASE_01__foundation-stores.md spec-tech Phase 01: foundation stores/models/repository [branch: DEBUG-v014]
2026-06-17 13:05:35 PLAN/S0473_statistics-collection-option-default-off/PHASE_02__opt-in-gate.md spec-tech Phase 02: opt-in gate + baseline init [branch: DEBUG-v014]
2026-06-17 13:05:35 PLAN/S0473_statistics-collection-option-default-off/PHASE_03__stats-sink-wiring.md spec-tech Phase 03: stats sink + completion-point wiring [branch: DEBUG-v014]
2026-06-17 13:05:35 PLAN/S0473_statistics-collection-option-default-off/PHASE_04__dashboard.md spec-tech Phase 04: statistics dashboard + nav entry [branch: DEBUG-v014]
2026-06-17 13:05:35 PLAN/S0473_statistics-collection-option-default-off/PHASE_05__author-report.md spec-tech Phase 05: author report sender + export [branch: DEBUG-v014]
2026-06-17 13:05:35 PLAN/S0473_statistics-collection-option-default-off/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs/FEATURES/catalog cleanup [branch: DEBUG-v014]
2026-06-17 13:05:35 PLAN/S0473_statistics-collection-option-default-off.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 13:11:41 app_v2/src/main/java/com/sza/fastmediasorter/domain/stats/StatsModels.kt spec-dev S0473 Phase 01: stats foundation stores/models/repository [branch: DEBUG-v014]
2026-06-17 13:11:41 app_v2/src/main/java/com/sza/fastmediasorter/data/local/preferences/StatsBaselineDataStore.kt spec-dev S0473 Phase 01: stats foundation stores/models/repository [branch: DEBUG-v014]
2026-06-17 13:11:41 app_v2/src/main/java/com/sza/fastmediasorter/data/local/preferences/StatsAggregateDataStore.kt spec-dev S0473 Phase 01: stats foundation stores/models/repository [branch: DEBUG-v014]
2026-06-17 13:11:41 app_v2/src/main/java/com/sza/fastmediasorter/domain/stats/StatsCategoryAvailability.kt spec-dev S0473 Phase 01: stats foundation stores/models/repository [branch: DEBUG-v014]
2026-06-17 13:11:41 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/StatisticsRepository.kt spec-dev S0473 Phase 01: stats foundation stores/models/repository [branch: DEBUG-v014]
2026-06-17 13:11:41 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/StatisticsRepositoryImpl.kt spec-dev S0473 Phase 01: stats foundation stores/models/repository [branch: DEBUG-v014]
2026-06-17 13:11:41 app_v2/src/main/java/com/sza/fastmediasorter/core/di/RepositoryModule.kt spec-dev S0473 Phase 01: stats foundation stores/models/repository [branch: DEBUG-v014]
2026-06-17 13:14:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchTabMapping.kt S0475 Fix settings-search routing: exclude orphan fragment_settings_backup_restore layout from scan catalog and tab mapping; real backup/restore rows route to General tab via fragment_settings_general (removes wrong-tab routing, duplicate and phantom entries) [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SetStatisticsCollectionEnabledUseCase.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/data/local/preferences/SettingsManager.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/repository/SettingsRepository.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsObserversHelper.kt spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:01 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:02 app_v2/src/main/res/values/strings_settings.xml spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:02 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:02 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0473 Phase 02: opt-in toggle + always-on launch baseline + wipe-on-disable [branch: DEBUG-v014]
2026-06-17 13:27:02 PLAN/S0481_device-profile-presets-stale-row.md spec-draft Park: stale enableGoogleLens row in device_profile_presets.csv (found during S0473) [branch: DEBUG-v014]
2026-06-17 13:28:45 styles.css, index.html, index-ru.html, index-uk.html GitHub Pages site Unify site onto SZA Web Kit Pine+Gold theme: replace tokens with green primary + gold secondary, add light/dark toggle with pre-paint, swap Inter for Plus Jakarta Sans, add sticky header (brand/RU-EN-UA switcher/theme/Download), Get-it block above the fold (Google Play + GitHub APK + quickstart), tools-grid footer, re-hue canvas hero to green/gold; Explorer + dynamic APK + SEO preserved [branch: DEBUG-v014]
2026-06-17 13:59:15 PLAN/S0440_settings-declaration-docs/INDEX.md spec-tech Create tactical plan for S0440 [branch: DEBUG-v014]
2026-06-17 13:59:15 PLAN/S0440_settings-declaration-docs/PHASE_01__manifest-export.md spec-tech Phase 01: manifest-export [branch: DEBUG-v014]
2026-06-17 13:59:16 PLAN/S0440_settings-declaration-docs/PHASE_02__annotations-coverage.md spec-tech Phase 02: annotations-coverage [branch: DEBUG-v014]
2026-06-17 13:59:16 PLAN/S0440_settings-declaration-docs/PHASE_03__reference-generation.md spec-tech Phase 03: reference-generation [branch: DEBUG-v014]
2026-06-17 13:59:16 PLAN/S0440_settings-declaration-docs/PHASE_04__drift-gate.md spec-tech Phase 04: drift-gate [branch: DEBUG-v014]
2026-06-17 13:59:16 PLAN/S0440_settings-declaration-docs/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 13:59:17 PLAN/S0440_settings-declaration-docs.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 14:09:16 app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/search/SettingsManifestSerializer.kt spec-dev S0440 Phase 01.1: settings manifest serializer + entry model [branch: DEBUG-v014]
2026-06-17 14:10:50 app_v2/src/main/java/com/sza/fastmediasorter/domain/stats/StatsSink.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:50 app_v2/src/main/java/com/sza/fastmediasorter/data/stats/StatsSinkImpl.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:50 app_v2/src/main/java/com/sza/fastmediasorter/core/di/StatsModule.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:50 app_v2/src/main/java/com/sza/fastmediasorter/data/stats/StatsSessionTracker.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:50 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:50 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DetectDuplicatesUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:50 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ArchiveFilesUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExtractArchiveUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CreateDirectoryUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExtractGifFramesUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveDrawingUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveTextNoteUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/CreateTextNoteUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveScreenshotUseCase.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/data/capture/CameraCaptureSaver.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerImageLoadingCallbackImpl.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDrawingSaveHelper.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceConnectionManager.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/test/java/com/sza/fastmediasorter/data/stats/StatsSinkImplTest.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/test/java/com/sza/fastmediasorter/testing/fakes/FakeSettingsRepository.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/test/java/com/sza/fastmediasorter/core/init/AppStartupInitializerTest.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 app_v2/src/test/java/com/sza/fastmediasorter/data/capture/CameraCaptureSaverTest.kt spec-dev S0473 Phase 03: stats sink + completion-point wiring + session tracker + test [branch: DEBUG-v014]
2026-06-17 14:10:51 PLAN/S0482_image-edit-stat-instrumentation.md spec-draft Park: image-edit stat instrumentation deferred from S0473 (no clean completion point) [branch: DEBUG-v014]
2026-06-17 14:12:27 app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/search/SettingsManifestExportTest.kt spec-dev S0440 Phase 01.2: Robolectric manifest scan + trilingual title resolution [branch: DEBUG-v014]
2026-06-17 14:14:34 app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/search/SettingsManifestExportTest.kt spec-dev S0440 Phase 01.3: generate/verify mode for committed manifest [branch: DEBUG-v014]
2026-06-17 14:20:44 app_v2/build.gradle.kts spec-dev S0440 Phase 01.4: forward settings.manifest.generate system property to test JVM [branch: DEBUG-v014]
2026-06-17 14:20:49 docs/settings/settings-manifest.json spec-dev S0440 Phase 01.4: generated settings manifest (165 entries, EN/RU/UK) [branch: DEBUG-v014]
2026-06-17 14:21:08 app_v2/src/test/java/com/sza/fastmediasorter/ui/settings/search/SettingsManifestExportTest.kt spec-dev S0440 Phase 01.4: silence nullability warnings (getProperty/parentFile) [branch: DEBUG-v014]
2026-06-17 14:35:48 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetStatisticsUseCase.kt spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsUiState.kt spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsViewModel.kt spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsRowFormatter.kt spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsAdapter.kt spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsActivity.kt spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/activity_statistics.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout-land/activity_statistics.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/item_stats_card.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/item_stats_section_header.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/item_stats_metric_row.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/item_stats_distribution.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/item_stats_distribution_legend.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/item_stats_privacy_note.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/view_stats_empty.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/drawable/bg_stats_distribution_segment.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/values/integers.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/values-land/integers.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/values/colors.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/AndroidManifest.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:35:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-dev S0473 Phase 04: statistics dashboard (Activity/VM/adapter/layouts) + settings nav row [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/BuildStatisticsReportUseCase.kt spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsReportShareManager.kt spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsViewModel.kt spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsUiState.kt spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsActivity.kt spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/res/layout/activity_statistics.xml spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/res/layout-land/activity_statistics.xml spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/res/values/strings.xml spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/res/values-ru/strings.xml spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:57:49 app_v2/src/main/res/values-uk/strings.xml spec-dev S0473 Phase 05: author TXT report + email/export + bottom action bar (report builder in ui) [branch: DEBUG-v014]
2026-06-17 14:58:48 scripts/check_strings_localized.ps1 spec-dev S0473: honor translatable=false in locale audit (Rule 13 script fix) [branch: DEBUG-v014]
2026-06-17 15:06:52 PLAN/S0473_statistics-collection-option-default-off.md spec-dev All phases done; status -> BlockNeedUserTest; S0473 debug tags inserted [branch: DEBUG-v014]
2026-06-17 15:06:52 docs/FEATURES.md spec-dev S0473: add Usage Statistics feature entry [branch: DEBUG-v014]
2026-06-17 15:06:52 docs/FEATURES_RU.md spec-dev S0473: add Usage Statistics feature entry (RU) [branch: DEBUG-v014]
2026-06-17 15:06:52 docs/FEATURES_UK.md spec-dev S0473: add Usage Statistics feature entry (UK) [branch: DEBUG-v014]
2026-06-17 15:06:52 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SetStatisticsCollectionEnabledUseCase.kt spec-dev S0473 Phase 06: debug tag (toggle flow) [branch: DEBUG-v014]
2026-06-17 15:06:52 app_v2/src/main/java/com/sza/fastmediasorter/data/stats/StatsSinkImpl.kt spec-dev S0473 Phase 06: debug tag (flush flow) [branch: DEBUG-v014]
2026-06-17 15:06:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsActivity.kt spec-dev S0473 Phase 06: debug tag (window open) [branch: DEBUG-v014]
2026-06-17 15:06:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsViewModel.kt spec-dev S0473 Phase 06: debug tag (report build) [branch: DEBUG-v014]
2026-06-17 15:06:52 app_v2/src/main/java/com/sza/fastmediasorter/core/init/AppStartupInitializer.kt spec-dev S0473 Phase 06: debug tag (baseline) [branch: DEBUG-v014]
2026-06-17 16:29:32 PLAN/S0483_crash-report-email-button.md spec Add strategic spec S0483 for crash-report email button in error dialog [branch: DEBUG-v014]
2026-06-17 16:32:35 PLAN/S0484_prerelease-emulator-sweep.md spec Add strategic spec S0484 for /spec-prerelease emulator sweep [branch: DEBUG-v014]
2026-06-17 16:39:18 PLAN/S0483_crash-report-email-button/INDEX.md spec-tech Create tactical plan for S0483 [branch: DEBUG-v014]
2026-06-17 16:39:18 PLAN/S0483_crash-report-email-button/PHASE_01__strings.md spec-tech Phase 01: strings [branch: DEBUG-v014]
2026-06-17 16:39:18 PLAN/S0483_crash-report-email-button/PHASE_02__email-attachment-capability.md spec-tech Phase 02: email-attachment-capability [branch: DEBUG-v014]
2026-06-17 16:39:18 PLAN/S0483_crash-report-email-button/PHASE_03__dialog-report-button.md spec-tech Phase 03: dialog-report-button [branch: DEBUG-v014]
2026-06-17 16:39:18 PLAN/S0483_crash-report-email-button/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 16:39:18 PLAN/S0483_crash-report-email-button.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 16:40:14 PLAN/S0484_prerelease-emulator-sweep/INDEX.md spec-tech Create tactical plan for S0484 [branch: DEBUG-v014]
2026-06-17 16:40:14 PLAN/S0484_prerelease-emulator-sweep/PHASE_01__environment-prepare.md spec-tech Phase 01: environment-prepare [branch: DEBUG-v014]
2026-06-17 16:40:14 PLAN/S0484_prerelease-emulator-sweep/PHASE_02__resources-settings.md spec-tech Phase 02: resources-settings [branch: DEBUG-v014]
2026-06-17 16:40:14 PLAN/S0484_prerelease-emulator-sweep/PHASE_03__perf-measure.md spec-tech Phase 03: perf-measure [branch: DEBUG-v014]
2026-06-17 16:40:15 PLAN/S0484_prerelease-emulator-sweep/PHASE_04__verdict-aggregator.md spec-tech Phase 04: verdict-aggregator [branch: DEBUG-v014]
2026-06-17 16:40:15 PLAN/S0484_prerelease-emulator-sweep/PHASE_05__skill-orchestrator.md spec-tech Phase 05: skill-orchestrator [branch: DEBUG-v014]
2026-06-17 16:40:15 PLAN/S0484_prerelease-emulator-sweep/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 16:40:16 PLAN/S0484_prerelease-emulator-sweep.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 16:42:42 app_v2/src/main/res/values/strings.xml string/crash_report_email S0483 P01: add crash-report dialog strings (EN) [branch: DEBUG-v014]
2026-06-17 16:42:56 app_v2/src/main/res/values-ru/strings.xml string/crash_report_email S0483 P01: add crash-report dialog strings (RU) [branch: DEBUG-v014]
2026-06-17 16:42:56 app_v2/src/main/res/values-uk/strings.xml string/crash_report_email S0483 P01: add crash-report dialog strings (UK) [branch: DEBUG-v014]
2026-06-17 16:44:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/support/SupportIntentFactory.kt SupportIntentFactory S0483 P02: add buildCrashReportEmail (ACTION_SEND + attachment) and crash-report recipient [branch: DEBUG-v014]
2026-06-17 16:46:24 app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LogExportHelper.kt LogExportHelper S0483 P02: add buildLogsZipUri; refactor exportLogs onto shared zip builder [branch: DEBUG-v014]
2026-06-17 16:51:28 app_v2/src/test/java/com/sza/fastmediasorter/ui/common/support/SupportIntentFactoryTest.kt SupportIntentFactoryTest S0483 P02: unit tests for buildCrashReportEmail (attachment + no-attachment) [branch: DEBUG-v014]
2026-06-17 16:53:47 app_v2/src/main/res/layout/dialog_error_detail.xml dialog_error_detail S0483 P03: add btnReport crash-report button (portrait) [branch: DEBUG-v014]
2026-06-17 16:54:01 app_v2/src/main/res/layout-land/dialog_error_detail.xml dialog_error_detail-land S0483 P03: add btnReport crash-report button (landscape) [branch: DEBUG-v014]
2026-06-17 16:55:56 PLAN/S0484_prerelease-emulator-sweep/research/01__perf-metrics-thresholds.md research S0484 research artifact: perf-metrics-thresholds [branch: DEBUG-v014]
2026-06-17 16:55:56 PLAN/S0484_prerelease-emulator-sweep/research/02__resource-import-reachability.md research S0484 research artifact: resource-import-reachability [branch: DEBUG-v014]
2026-06-17 16:55:57 PLAN/S0484_prerelease-emulator-sweep/research/03__settings-apply.md research S0484 research artifact: settings-apply [branch: DEBUG-v014]
2026-06-17 16:55:57 PLAN/S0484_prerelease-emulator-sweep/research/04__standalone-player-intent.md research S0484 research artifact: standalone-player-intent [branch: DEBUG-v014]
2026-06-17 16:55:57 PLAN/S0484_prerelease-emulator-sweep/research/05__log-verdict-markers.md research S0484 research artifact: log-verdict-markers [branch: DEBUG-v014]
2026-06-17 16:55:57 PLAN/S0484_prerelease-emulator-sweep/research/06__catalog-mutation-rules.md research S0484 research artifact: catalog-mutation-rules [branch: DEBUG-v014]
2026-06-17 16:57:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScrollableTextDialog.kt ScrollableTextDialog S0483 P03: gate + wire crash-report button (email error text + log ZIP) [branch: DEBUG-v014]
2026-06-17 16:57:36 PLAN/S0485_bugfix-native-lib-loader-error-loglevel.md spec-draft Park S0485: native lib loader logs expected condition at Timber.e (from S0484 research) [branch: DEBUG-v014]
2026-06-17 16:57:36 PLAN/S0486_bugfix-debugactivity-reset-incomplete.md spec-draft Park S0486: DebugActivity reset leaves stale theme/language (from S0484 research) [branch: DEBUG-v014]
2026-06-17 16:57:36 PLAN/S0487_search-log-exceptions-machine-output.md spec-draft Park S0487: search-log.ps1 -Exceptions lacks machine output (from S0484 research) [branch: DEBUG-v014]
2026-06-17 16:58:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseErrorDisplayManager.kt BrowseErrorDisplayManager S0483 P03: forward exception to dialog as reportableThrowable (crash-report gate) [branch: DEBUG-v014]
2026-06-17 17:02:59 docs/FEATURES.md features S0483 P04: document crash-report email button (EN) [branch: DEBUG-v014]
2026-06-17 17:02:59 docs/FEATURES_RU.md features S0483 P04: document crash-report email button (RU) [branch: DEBUG-v014]
2026-06-17 17:02:59 docs/FEATURES_UK.md features S0483 P04: document crash-report email button (UK) [branch: DEBUG-v014]
2026-06-17 17:03:46 PLAN/S0483_crash-report-email-button.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-17 17:04:03 PLAN/S0488_pin-all-files-resource-first.md spec Add strategic spec S0488 for always-first All-files resource ordering [branch: DEBUG-v014]
2026-06-17 17:11:49 PLAN/S0488_pin-all-files-resource-first/INDEX.md spec-tech Create tactical plan for S0488 [branch: DEBUG-v014]
2026-06-17 17:11:49 PLAN/S0488_pin-all-files-resource-first/PHASE_01__ordering-pin.md spec-tech Phase 01: ordering-pin [branch: DEBUG-v014]
2026-06-17 17:11:49 PLAN/S0488_pin-all-files-resource-first/PHASE_02__drag-robustness.md spec-tech Phase 02: drag-robustness [branch: DEBUG-v014]
2026-06-17 17:11:49 PLAN/S0488_pin-all-files-resource-first/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 17:11:49 PLAN/S0488_pin-all-files-resource-first.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 17:14:33 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt MediaResource.isAllFilesPredefined Add isAllFilesPredefined identity for predefined All-files resource (S0488 Phase 01.1) [branch: DEBUG-v014]
2026-06-17 17:16:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceFilterManager.kt ResourceFilterManager.hoistAllFilesFirst Pin All-files resource first after sort, after tab/filters (S0488 Phase 01.2) [branch: DEBUG-v014]
2026-06-17 17:19:22 app_v2/src/test/java/com/sza/fastmediasorter/ui/main/helpers/ResourceFilterManagerTest.kt ResourceFilterManagerTest Unit-test All-files pin + filter exceptions (S0488 Phase 01.3) [branch: DEBUG-v014]
2026-06-17 17:20:30 PLAN/S0490_post-crash-report-prompt.md spec Add strategic spec S0490 (post-crash report prompt, continues S0483) [branch: DEBUG-v014]
2026-06-17 17:21:41 scripts/devtest/prerelease-prepare.ps1 spec-dev S0484 Phase 01.1: prerelease-prepare scaffold + device gate [branch: DEBUG-v014]
2026-06-17 17:22:58 scripts/devtest/prerelease-prepare.ps1 spec-dev S0484 Phase 01.2: clean uninstall + install standard debug [branch: DEBUG-v014]
2026-06-17 17:23:50 scripts/devtest/prerelease-prepare.ps1 spec-dev S0484 Phase 01.3: seed test media when absent [branch: DEBUG-v014]
2026-06-17 17:24:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt ResourceAdapter drag gates Make pinned All-files row non-draggable in list + grid (S0488 Phase 02.2) [branch: DEBUG-v014]
2026-06-17 17:24:43 PLAN/S0490_post-crash-report-prompt/INDEX.md spec-tech Create tactical plan for S0490 [branch: DEBUG-v014]
2026-06-17 17:24:43 PLAN/S0490_post-crash-report-prompt/PHASE_01__strings.md spec-tech Phase 01: strings [branch: DEBUG-v014]
2026-06-17 17:24:43 PLAN/S0490_post-crash-report-prompt/PHASE_02__crash-file-accessor.md spec-tech Phase 02: crash-file-accessor [branch: DEBUG-v014]
2026-06-17 17:24:43 PLAN/S0490_post-crash-report-prompt/PHASE_03__prompt-manager.md spec-tech Phase 03: prompt-manager [branch: DEBUG-v014]
2026-06-17 17:24:43 PLAN/S0490_post-crash-report-prompt/PHASE_04__mainactivity-wiring.md spec-tech Phase 04: mainactivity-wiring [branch: DEBUG-v014]
2026-06-17 17:24:43 PLAN/S0490_post-crash-report-prompt/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 17:24:43 PLAN/S0490_post-crash-report-prompt.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 17:25:32 app_v2/src/main/res/values/strings.xml string/crash_prompt S0490 P01: post-crash prompt strings (EN) [branch: DEBUG-v014]
2026-06-17 17:25:45 app_v2/src/main/res/values-ru/strings.xml string/crash_prompt S0490 P01: post-crash prompt strings (RU) [branch: DEBUG-v014]
2026-06-17 17:25:45 app_v2/src/main/res/values-uk/strings.xml string/crash_prompt S0490 P01: post-crash prompt strings (UK) [branch: DEBUG-v014]
2026-06-17 17:26:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceItemTouchCallback.kt ResourceItemTouchCallback drop-clamp Block dragging pinned All-files row + drops above index 0 (S0488 Phase 02.3) [branch: DEBUG-v014]
2026-06-17 17:27:46 PLAN/S0489_features-allfeatures-split.md spec Add strategic spec S0489 - split FEATURES (showcase) and ALL_FEATURES (JSONL inventory, replaces FUNCTIONALITY.log); blocker for S0440 [branch: DEBUG-v014]
2026-06-17 17:27:49 app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LoggingHelper.kt LoggingHelper S0490 P02: add getLatestCrashFile() [branch: DEBUG-v014]
2026-06-17 17:30:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/CrashReportPromptManager.kt CrashReportPromptManager S0490 P03: post-crash report prompt manager (reuses S0483 send path) [branch: DEBUG-v014]
2026-06-17 17:32:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt MainActivity S0490 P04: offer post-crash report on fresh launch [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split/INDEX.md spec-tech Create tactical plan for S0489 [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split/PHASE_01__allfeatures-schema-tooling.md spec-tech Phase 01: allfeatures-schema-tooling [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split/PHASE_02__migrate-functionality-log.md spec-tech Phase 02: migrate-functionality-log [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split/PHASE_03__inventory-population.md spec-tech Phase 03: inventory-population [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split/PHASE_04__features-revision.md spec-tech Phase 04: features-revision [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split/PHASE_05__rules-skills-split.md spec-tech Phase 05: rules-skills-split [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split/PHASE_06__drift-gate.md spec-tech Phase 06: drift-gate [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split/PHASE_07__docs-catalog-cleanup.md spec-tech Phase 07: docs-catalog-cleanup [branch: DEBUG-v014]
2026-06-17 17:34:07 PLAN/S0489_features-allfeatures-split.md spec-tech Status -> Tactical [branch: DEBUG-v014]
2026-06-17 17:35:25 scripts/devtest/prerelease.config.psd1 spec-dev S0484 Phase 01.5: run-config skeleton (Resources/Settings/Thresholds) [branch: DEBUG-v014]
2026-06-17 17:35:37 docs/FEATURES.md features S0490 P05: document post-crash report prompt (EN) [branch: DEBUG-v014]
2026-06-17 17:35:37 docs/FEATURES_RU.md features S0490 P05: document post-crash report prompt (RU) [branch: DEBUG-v014]
2026-06-17 17:35:37 docs/FEATURES_UK.md features S0490 P05: document post-crash report prompt (UK) [branch: DEBUG-v014]
2026-06-17 17:36:01 PLAN/S0490_post-crash-report-prompt.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-17 17:37:58 docs/ALL_FEATURES.schema.json all-features Add ALL_FEATURES JSONL record schema (draft-07) [branch: DEBUG-v014]
2026-06-17 17:38:52 .gitignore all-features Gitignore ALL_FEATURES_noLegal.jsonl; seed empty ALL_FEATURES data files [branch: DEBUG-v014]
2026-06-17 17:41:56 scripts/all_features/add.ps1 all-features Add ALL_FEATURES upsert writer (schema-validated) [branch: DEBUG-v014]
2026-06-17 17:42:52 scripts/all_features/validate.ps1 all-features Add ALL_FEATURES validator (schema + uniqueness + EN-only, -Gate) [branch: DEBUG-v014]
2026-06-17 17:43:06 PLAN/S0488_pin-all-files-resource-first.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v014]
2026-06-17 17:43:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceFilterManager.kt spec-dev Insert S0488 BlockNeedUserTest debug tag in hoistAllFilesFirst [branch: DEBUG-v014]
2026-06-17 17:43:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceItemTouchCallback.kt spec-dev Insert S0488 BlockNeedUserTest debug tag in canDropOver [branch: DEBUG-v014]
2026-06-17 17:47:08 scripts/all_features/migrate_from_log.ps1 all-features Add one-shot FUNCTIONALITY.log -> ALL_FEATURES migration converter [branch: DEBUG-v014]
2026-06-17 17:47:08 docs/ALL_FEATURES.jsonl all-features Populate ALL_FEATURES baseline (172 records) from FUNCTIONALITY.log [branch: DEBUG-v014]
2026-06-17 17:47:59 dev/FUNCTIONALITY.log all-features Retire FUNCTIONALITY.log header; point to ALL_FEATURES.jsonl [branch: DEBUG-v014]
2026-06-17 17:49:03 scripts/add_to_functionality_log.ps1 all-features Retire add_to_functionality_log.ps1; redirect to ALL_FEATURES add.ps1 [branch: DEBUG-v014]
2026-06-17 17:54:22 scripts/devtest/prerelease-prepare.ps1 spec-dev S0484 Phase 01.4: launch verify from logs (full prepare validated on emulator-5554) [branch: DEBUG-v014]
2026-06-17 17:54:50 PLAN/S0488_pin-all-files-resource-first.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/INCONCLUSIVE 1/1/2; app stable, All-files provisioned, pin blocked by onboarding loop [branch: DEBUG-v014]
2026-06-17 18:06:29 PLAN/S0484_prerelease-emulator-sweep/research/02__resource-import-reachability.md spec-update S0484 §6.2: confirm intent-push import via ResourceImportActivity [branch: DEBUG-v014]
2026-06-17 18:06:29 PLAN/S0484_prerelease-emulator-sweep/PHASE_02__resources-settings.md spec-update S0484 Phase 02 re-scope: adb-scriptable (reachability/import-trigger/theme-lang); UI parts to Phase 05 [branch: DEBUG-v014]
2026-06-17 18:06:29 PLAN/S0484_prerelease-emulator-sweep/PHASE_05__skill-orchestrator.md spec-update S0484 Phase 05.2: configure = configure.ps1 + mobile-mcp confirm/DataStore/listing [branch: DEBUG-v014]
2026-06-17 18:07:37 scripts/devtest/prerelease.config.psd1 spec-dev S0484 Phase 02.1: populate Resources/Settings (reachability class + apply channel) [branch: DEBUG-v014]
2026-06-17 18:09:16 scripts/devtest/prerelease-configure.ps1 spec-dev S0484 Phase 02.2: configure.ps1 scaffold + endpoint reachability pre-check [branch: DEBUG-v014]
2026-06-17 18:11:01 scripts/devtest/prerelease-configure.ps1 spec-dev S0484 Phase 02.3: intent-push import trigger via ResourceImportActivity [branch: DEBUG-v014]
2026-06-17 18:14:43 scripts/devtest/prerelease-configure.ps1 spec-dev S0484 Phase 02.4: adb settings (cmd locale) + FQCN fix for import component [branch: DEBUG-v014]
2026-06-17 18:19:37 docs/ALL_FEATURES.jsonl all-features Populate ALL_FEATURES inventory via parallel source scan (326 public records, 20 areas) [branch: DEBUG-v014]
2026-06-17 18:23:44 scripts/devtest/prerelease.config.psd1 spec-dev S0484 Phase 03.1: Thresholds block (per-checkpoint PASS limits) [branch: DEBUG-v014]
2026-06-17 18:24:57 scripts/devtest/prerelease-measure.ps1 spec-dev S0484 Phase 03.2: per-checkpoint perf capture [branch: DEBUG-v014]
2026-06-17 18:25:47 scripts/devtest/prerelease-measure.ps1 spec-dev S0484 Phase 03.3: threshold compare + verdict emit [branch: DEBUG-v014]
2026-06-17 18:27:34 scripts/devtest/prerelease-verdict.ps1 spec-dev S0484 Phase 04.1: log signal via search-log.ps1 [branch: DEBUG-v014]
2026-06-17 18:28:17 scripts/devtest/prerelease-verdict.ps1 spec-dev S0484 Phase 04.2: fold perf + screenshot signals [branch: DEBUG-v014]
2026-06-17 18:29:31 docs/FEATURES.md all-features Revise FEATURES to curated showcase; demote 3 minor entries; point to ALL_FEATURES inventory [branch: DEBUG-v014]
2026-06-17 18:29:32 docs/FEATURES_RU.md all-features Revise FEATURES_RU to showcase + inventory pointer (lockstep) [branch: DEBUG-v014]
2026-06-17 18:29:33 docs/FEATURES_UK.md all-features Revise FEATURES_UK to showcase + inventory pointer (lockstep) [branch: DEBUG-v014]
2026-06-17 18:30:10 scripts/devtest/prerelease-verdict.ps1 spec-dev S0484 Phase 04.3: emit verdict JSON + stable exit code; fix Get-Count parsing [branch: DEBUG-v014]
2026-06-17 18:31:35 .claude/commands/spec-prerelease.md spec-dev S0484 Phase 05.1: skill header/usage/device-gate [branch: DEBUG-v014]
2026-06-17 18:32:18 .claude/commands/spec-prerelease.md spec-dev S0484 Phase 05.2: configure section (script + mobile-mcp) [branch: DEBUG-v014]
2026-06-17 18:33:12 .claude/commands/spec-prerelease.md spec-dev S0484 Phase 05.3: scenario section (playback/standalone/re-entry/network + measure) [branch: DEBUG-v014]
2026-06-17 18:33:49 .claude/commands/spec-prerelease.md spec-dev S0484 Phase 05.4: verdict + PASS branch (propose release, no auto-run) [branch: DEBUG-v014]
2026-06-17 18:34:33 .claude/commands/spec-prerelease.md spec-dev S0484 Phase 05.5: FAIL branch (spec-draft dedup + spec-check routing) [branch: DEBUG-v014]
2026-06-17 18:36:21 .github/prompts/spec-prerelease.prompt.md spec-dev S0484 Phase 06.1: prompt mirror [branch: DEBUG-v014]
2026-06-17 18:37:01 CLAUDE.md spec-dev S0484 Phase 06.2: register /spec-prerelease in skill routing [branch: DEBUG-v014]
2026-06-17 18:37:28 scripts/all_features/diff.ps1 all-features Add ALL_FEATURES release-diff tool [branch: DEBUG-v014]
2026-06-17 18:37:29 scripts/spec_catalog/close-and-log.ps1 all-features Route close-and-log func step to ALL_FEATURES add.ps1 [branch: DEBUG-v014]
2026-06-17 18:37:29 .claude/commands/spec-dev.md all-features Rewire spec-dev to ALL_FEATURES inventory model [branch: DEBUG-v014]
2026-06-17 18:37:30 .claude/commands/spec-check.md all-features Rewire spec-check to ALL_FEATURES inventory model [branch: DEBUG-v014]
2026-06-17 18:37:31 .claude/commands/quick.md all-features Rewire quick to ALL_FEATURES inventory model [branch: DEBUG-v014]
2026-06-17 18:37:32 .claude/commands/doc-update.md all-features Rewire doc-update to ALL_FEATURES inventory model [branch: DEBUG-v014]
2026-06-17 18:37:32 .claude/commands/skill-release.md all-features Rewire skill-release to ALL_FEATURES inventory model [branch: DEBUG-v014]
2026-06-17 18:37:33 CLAUDE.md all-features S0489: ALL_FEATURES inventory + FEATURES showcase policy in section 11 [branch: DEBUG-v014]
2026-06-17 18:39:43 docs/ALL_FEATURES.jsonl all-features gate wiring smoke [branch: DEBUG-v014]
2026-06-17 18:39:45 CLAUDE.md smoke smoke [branch: DEBUG-v014]
2026-06-17 18:39:58 PLAN/S0484_prerelease-emulator-sweep.md spec-dev All 6 phases done (06.3 skipped: target doc absent); status -> Implemented [branch: DEBUG-v014]
2026-06-17 18:40:24 scripts/quality/assert-allfeatures-sync.ps1 all-features Add ALL_FEATURES drift gate (validate + ratchet) [branch: DEBUG-v014]
2026-06-17 18:40:25 scripts/post-change.ps1 all-features Wire all-features-gate into post-change [branch: DEBUG-v014]
2026-06-17 18:40:44 scripts/quality/allfeatures-sync-baseline.txt all-features Seed ALL_FEATURES drift baseline (326 records) [branch: DEBUG-v014]
2026-06-17 18:42:00 dev/PROJECT_OPERATIONS_INDEX.md all-features Route to ALL_FEATURES inventory; note FUNCTIONALITY.log retired [branch: DEBUG-v014]
2026-06-17 18:42:00 PLAN/S0484_prerelease-emulator-sweep.md spec-check Audit S0484 -> Partial; PASS/WARN/FAIL 20/2/0; E2E run pending [branch: DEBUG-v014]
2026-06-17 18:43:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceFilterManager.kt ResourceFilterManager.pinAllFilesFirst Make All-files pin reusable/public for the DB-sort path (S0488 fix) [branch: DEBUG-v014]
2026-06-17 18:43:41 PLAN/S0489_features-allfeatures-split.md spec-dev All 7 phases done; status -> Implemented (FEATURES/ALL_FEATURES split) [branch: DEBUG-v014]
2026-06-17 18:44:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt MainViewModel.loadResources Pin All-files in loadResources DB-sort path so sort change keeps it first (S0488 fix) [branch: DEBUG-v014]
2026-06-17 18:44:53 PLAN/S0489_features-allfeatures-split.md spec-check Audit S0489 -> Verified; PASS/WARN/FAIL 14/0/0; no debug tags [branch: DEBUG-v014]
2026-06-17 18:45:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt setupAllFilesResourceButton Fix All-files create-resource button rendering: outlined defStyleAttr (was filled blue blob) [branch: DEBUG-v014]
2026-06-17 18:49:35 PLAN/S0488_pin-all-files-resource-first.md spec-dev Fix S0488 gap: pin All-files in loadResources DB-sort path (sort change no longer drops it) [branch: DEBUG-v014]
2026-06-17 19:53:44 .claude/skills/run-fastmediasorter/SKILL.md run-skill Add run-fastmediasorter skill (build/launch/screenshot/drive on device) [branch: DEBUG-v014]
2026-06-17 19:53:44 .claude/skills/run-fastmediasorter/smoke.ps1 run-skill Add smoke driver (launch + screenshot + crash-scan via adb.ps1) [branch: DEBUG-v014]
2026-06-17 20:02:10 app_v2/src/debug/java/com/sza/fastmediasorter/ui/debug/DebugActivity.kt S0486 Debug reset preferences now also clears theme and language to a true clean state [branch: DEBUG-v014]
2026-06-17 20:02:10 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt S0486 Add reset() to clear theme mirror and restore follow-system night mode [branch: DEBUG-v014]
2026-06-17 20:02:10 app_v2/src/main/java/com/sza/fastmediasorter/core/util/LocaleHelper.kt S0486 Add resetLanguage() to clear saved language, cache, and LocaleManager override [branch: DEBUG-v014]
2026-06-17 20:05:52 scripts/devtest/prerelease-prepare.ps1 spec-dev S0484: add onboarding bypass (welcome_completed pref) so sweep reaches MainActivity [branch: DEBUG-v014]
2026-06-17 20:14:23 app_v2/src/main/assets/device_profile_presets.csv S0481 Remove stale enableGoogleLens preset row (flag lives on PlayerUiState, derived from share-target settings, not AppSettings); device-profile preset matrix gate now passes [branch: DEBUG-v014]
2026-06-17 20:14:44 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredNativeLibraryLoader.kt S0485 Treat post-integrity UnsatisfiedLinkError as expected device-capability fallback: log at Timber.w (was Timber.e), throw catchable DeliveredNativeLibraryIncompatibleException so OCR/translation/DTS consumers degrade gracefully instead of letting the Error escape uncaught [branch: DEBUG-v014]
2026-06-17 20:14:49 PLAN/S0481_device-profile-presets-stale-row.md spec-arc Archive S0481 (device-profile-presets-stale-row) -> temp/done/ after removing stale enableGoogleLens CSV row [branch: DEBUG-v014]
2026-06-17 20:21:30 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase Image edit usage statistics S0482: record EditKind.IMAGE_EDIT on save in Rotate/Flip/ApplyFilter/Adjust image use cases; NetworkImageEditUseCase suppresses the leaf metric and counts once after successful upload to avoid double-counting; added IMAGE_EDITS row to statistics dashboard + report and statistics_metric_image_edits string (EN/RU/UK) [branch: DEBUG-v014]
2026-06-17 20:22:22 scripts/utils/search-log.ps1 search-log.ps1 -Exceptions S0487: add -Json and -Count machine-readable output to -Exceptions mode (count + per-block line refs); guard single-line/empty logs with @(Get-Content) [branch: DEBUG-v014]
2026-06-17 20:22:29 PLAN/S0482_image-edit-stat-instrumentation.md spec-arc Archive S0482 (image-edit-stat-instrumentation) -> temp/done/ after implementing IMAGE_EDIT stat instrumentation [branch: DEBUG-v014]
2026-06-17 20:23:05 PLAN/S0491_dead-backup-viewmodel-export-import.md spec Scaffold strategic spec skeleton S0491 [branch: DEBUG-v014]
2026-06-17 20:26:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/BackupRestoreFragment.kt cleanup S0480: remove orphan BackupRestoreFragment + fragment_settings_backup_restore.xml + dialog_import_favorites_preview.xml + 17 orphan strings (favorites/resource export-import); clean 3 stale comments. ViewModel dead path parked as S0491 [branch: DEBUG-v014]
2026-06-17 20:27:34 PLAN/S0480_dead-backup-restore-fragment.md spec-arc Archive S0480 (dead-backup-restore-fragment) -> temp/done/ after dead-code removal [branch: DEBUG-v014]
2026-06-17 20:30:19 PLAN/S0469_save-photos-to-clipboard.md spec-all Strategic spec approved: S0469 save photos to clipboard [branch: DEBUG-v014]
2026-06-17 20:32:47 PLAN/S0469_save-photos-to-clipboard/INDEX.md spec-all Tactical plan (5 phases): S0469 save photos to clipboard [branch: DEBUG-v014]
2026-06-17 20:46:44 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-all S0469: settings flag cameraCaptureCopyToClipboard (default off) [branch: DEBUG-v014]
2026-06-17 20:46:45 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/CaptureSettingsStore.kt spec-all S0469: persist camera_copy_to_clipboard pref [branch: DEBUG-v014]
2026-06-17 20:46:45 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-all S0469: read cameraCaptureCopyToClipboard [branch: DEBUG-v014]
2026-06-17 20:46:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-all S0469: defaults for cameraCaptureCopyToClipboard [branch: DEBUG-v014]
2026-06-17 20:46:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt spec-all S0469: backup field cameraCaptureCopyToClipboard [branch: DEBUG-v014]
2026-06-17 20:46:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt spec-all S0469: map cameraCaptureCopyToClipboard both ways [branch: DEBUG-v014]
2026-06-17 20:46:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt spec-all S0469: import cameraCaptureCopyToClipboard [branch: DEBUG-v014]
2026-06-17 20:46:47 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt spec-all S0469: preset key cameraCaptureCopyToClipboard [branch: DEBUG-v014]
2026-06-17 20:46:59 app_v2/src/main/java/com/sza/fastmediasorter/core/clipboard/ImageClipboardWriter.kt spec-all S0469: add copyImageFile(File) - verbatim file copy to clipboard [branch: DEBUG-v014]
2026-06-17 20:46:59 app_v2/src/main/java/com/sza/fastmediasorter/data/capture/CameraCaptureSaver.kt spec-all S0469: copy captured photo to clipboard at shared save backend (image-only, flag-gated) [branch: DEBUG-v014]
2026-06-17 20:46:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt spec-all S0469: clipboard-copied confirmation toast [branch: DEBUG-v014]
2026-06-17 20:47:00 app_v2/src/main/java/com/sza/fastmediasorter/widget/CameraQuickCaptureLaunchManager.kt spec-all S0469: clipboard-copied confirmation toast [branch: DEBUG-v014]
2026-06-17 20:47:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-all S0469: bind+listener for camera copy-to-clipboard toggle [branch: DEBUG-v014]
2026-06-17 20:47:00 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-all S0469: rowCameraCopyToClipboard toggle (portrait) [branch: DEBUG-v014]
2026-06-17 20:47:00 app_v2/src/main/res/layout-land/fragment_settings_destinations.xml spec-all S0469: rowCameraCopyToClipboard toggle (landscape) [branch: DEBUG-v014]
2026-06-17 20:47:01 app_v2/src/main/res/values/strings.xml spec-all S0469: EN strings: camera copy-to-clipboard title/summary + confirmation [branch: DEBUG-v014]
2026-06-17 20:47:01 docs/ALL_FEATURES.jsonl spec-all S0469: record captured-photo-to-clipboard capability [branch: DEBUG-v014]
2026-06-17 20:57:08 PLAN/S0469_save-photos-to-clipboard.md spec-test-device Device run emulator-5554 -> PASS/INCONCLUSIVE/OUT-OF-SCOPE 4/2/1; settings UI verified, runtime capture path blocked by emulator dialog input [branch: DEBUG-v014]
2026-06-17 20:58:55 PLAN/S0469_save-photos-to-clipboard.md spec-check Audit S0469 -> BlockNeedUserTest (impl complete); PASS/WARN/FAIL 13/0/0; awaiting real-device confirmation [branch: DEBUG-v014]
2026-06-17 21:04:13 PLAN/S0470_video-frame-clipboard/INDEX.md spec-all Tactical plan: S0470 (4 phases) [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-all S0470: settings flag videoFrameCopyToClipboard (default off) [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-all S0470: DataStore key + read/write for videoFrameCopyToClipboard [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-all S0470: defaults for videoFrameCopyToClipboard [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt spec-all S0470: backup field videoFrameCopyToClipboard [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt spec-all S0470: map videoFrameCopyToClipboard both ways [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt spec-all S0470: import videoFrameCopyToClipboard [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt spec-all S0470: preset key videoFrameCopyToClipboard [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/assets/device_profile_presets.csv spec-all S0470: preset row videoFrameCopyToClipboard [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-all S0470: inject ImageClipboardWriter [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt spec-all S0470: pass ImageClipboardWriter to SaveVideoFrameManager [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt spec-all S0470: copy saved frame to clipboard + confirmation toast [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt spec-all S0470: bind/reflect video-frame clipboard toggle [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/res/layout/fragment_settings_video.xml spec-all S0470: clipboard toggle row (portrait) [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/res/layout-land/fragment_settings_video.xml spec-all S0470: clipboard toggle row (landscape) [branch: DEBUG-v014]
2026-06-17 21:12:46 app_v2/src/main/res/values/strings.xml spec-all S0470: strings for video-frame clipboard option (EN/RU/UK) [branch: DEBUG-v014]
2026-06-17 21:12:46 docs/ALL_FEATURES.jsonl spec-all S0470: record video-player.video-frame-to-clipboard [branch: DEBUG-v014]
2026-06-17 21:17:25 PLAN/S0470_video-frame-clipboard.md spec-test-device Device run on emulator-5554 -> PASS/INCONCLUSIVE/OUT-OF-SCOPE 4/1/1 [branch: DEBUG-v014]
2026-06-17 21:20:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-all S0470: mirror clipboard copy in standalone player frame-save host [branch: DEBUG-v014]
2026-06-17 21:25:00 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/CapabilityAvailability.kt S0476 Add CAP_OCR_ENGINE_SELECTION + CAP_NEWPIPE capability ids and isOcrEngineSelectionAvailable()/isNewPipeAvailable() to replace BuildConfig.IS_NO_LEGAL_FLAVOR gates in settings [branch: DEBUG-v014]
2026-06-17 21:25:01 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/NoLegalCapabilityModule.kt S0476 New noLegal Hilt module contributing the two noLegal-only capability ids into @CompiledCapabilities [branch: DEBUG-v014]
2026-06-17 21:25:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt S0476 Replace 3 BuildConfig.IS_NO_LEGAL_FLAVOR OCR-engine gates with capabilityAvailability.isOcrEngineSelectionAvailable() [branch: DEBUG-v014]
2026-06-17 21:25:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OpenSourceLicensesFragment.kt S0476 Hilt-enable fragment; gate NewPipe license card via capabilityAvailability.isNewPipeAvailable() instead of BuildConfig [branch: DEBUG-v014]
2026-06-17 21:25:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SearchableLanguagePickerDialog.kt S0476 Hilt-enable dialog; thread noLegal-OCR label flag from CapabilityAvailability into adapter instead of BuildConfig [branch: DEBUG-v014]
2026-06-17 21:30:58 app_v2/src/main/java/com/sza/fastmediasorter/core/init/DefaultPlayerStateBootstrapper.kt S0477 Gate default-player component bootstrap on supportsDefaultPlayer; prevents IllegalArgumentException/ERROR toast on lite (manifest strips Standalone aliases + MediaButtonRestartReceiver) [branch: DEBUG-v014]
2026-06-17 21:43:00 PLAN/S0469_save-photos-to-clipboard.md spec-test-device Device run 2 emulator-5554 -> capture flow not automatable (bottom-sheet item wall); S0469 probe 0 hits, no crash; stays BlockNeedUserTest [branch: DEBUG-v014]
2026-06-17 21:49:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsBackupHelper.kt S0491 Resurrect favorites + resource-share file export/import in the General Settings backup card (S0480 removed the only UI consumer) [branch: DEBUG-v014]
2026-06-17 22:04:15 app_v2/build.gradle.kts noLegal Bump yt-dlp Chaquopy pin 2026.3.17 -> 2026.6.9 (latest stable on PyPI) for continued YouTube extractor maintenance [branch: DEBUG-v014]
2026-06-17 22:26:02 scripts/devtest/prerelease-prepare.ps1 S0484 /spec-prerelease Fix pre-flight deadlock: replace interactive build-standard-device.ps1 (Google Drive upload, 7-zip, never-terminating background adb logcat that deadlocks the parent under output redirection) with a lean assembleStandardDebug + adb.ps1 install path for the unattended sweep. [branch: DEBUG-v014]
2026-06-17 22:38:42 PLAN/S0492_bugfix-prerelease-configure-import-uri.md spec Scaffold strategic spec skeleton S0492 (parked during S0484 sweep: configure file:// import bug) [branch: DEBUG-v014]
2026-06-17 23:07:31 scripts/devtest/prerelease-configure.ps1 S0492 Remove dead file:// intent-push import stage (never openable on minSdk 26); record import as delegated-ui; drop unused CodePackage [branch: DEBUG-v014]
2026-06-17 23:07:31 .claude/commands/spec-prerelease.md S0492 Import is OWNER_TRIGGER UI path only; sza.owner.trigger now mandatory; drop intent-push as default [branch: DEBUG-v014]
2026-06-17 23:07:31 .github/prompts/spec-prerelease.prompt.md S0492 Mirror: import is OWNER_TRIGGER UI path only; sza.owner.trigger mandatory; drop intent-push as default [branch: DEBUG-v014]
2026-06-17 23:21:08 PLAN/S0430_vr-diagnosticxr-onrequestpermissionsresult-signature-break.md spec-arc Archive S0430 -> temp/done/ [branch: DEBUG-v014]
2026-06-17 23:21:09 PLAN/S0454_spec-catalog-journal-compaction.md spec-arc Archive S0454 -> temp/done/ [branch: DEBUG-v014]
2026-06-17 23:21:11 PLAN/S0460_ocr-show-error-toast-on-background-thread-crash.md spec-arc Archive S0460 -> temp/done/ [branch: DEBUG-v014]
2026-06-17 23:21:12 PLAN/S0467_deprecated-packagemanager-api-flags.md spec-arc Archive S0467 -> temp/done/ [branch: DEBUG-v014]
2026-06-17 23:21:14 PLAN/S0489_features-allfeatures-split.md spec-arc Archive S0489 -> temp/done/ [branch: DEBUG-v014]
2026-06-17 23:32:46 PLAN/S0493_send-to-remote-files.md spec Add strategic spec S0493 for send-to on remote/network files [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareableContent.kt S0493 Add sourcePath + requiresMaterialization + materializedTo for remote send-to [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareTarget.kt S0493 Add requiresLocalFile capability flag [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt S0493 keep_text requiresLocalFile=false [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MaterializeShareContentUseCase.kt S0493 New: download remote (smb/sftp/ftp) share source to local cache copy + FileProvider uri [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ShareMaterializationManager.kt S0493 New: progress dialog (spinner non-SMB) + cancel + lifecycle-safe dismiss for remote materialization [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt S0493 dispatch() materializes remote source before file-consuming receivers [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt S0493 buildShareableContent emits remote content (uris empty + sourcePath) instead of null [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DownloadNetworkFileUseCase.kt S0493 Rethrow CancellationException so back-press cancel is not reported as download error [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/test/java/com/sza/fastmediasorter/core/share/ShareableContentMaterializationTest.kt S0493 Unit tests: requiresMaterialization boundaries [branch: DEBUG-v014]
2026-06-18 00:21:05 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/MaterializeShareContentHelpersTest.kt S0493 Unit tests: scheme whitelist + filename sanitize [branch: DEBUG-v014]
2026-06-18 00:42:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt S0493 Remove S0493 debug verification tag (leaving BlockNeedUserTest -> Verified) [branch: DEBUG-v014]
2026-06-18 00:42:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt S0493 Remove S0493 debug verification tag (leaving BlockNeedUserTest -> Verified) [branch: DEBUG-v014]
2026-06-18 00:42:14 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MaterializeShareContentUseCase.kt S0494 Route cloud:// through CloudFileOperationHandler (Lazy) for send-to materialization [branch: DEBUG-v014]
2026-06-18 00:42:14 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/MaterializeShareContentHelpersTest.kt S0494 cloud scheme now downloadable assertions [branch: DEBUG-v014]
2026-06-18 00:52:54 app_v2/src/test/java/com/sza/fastmediasorter/data/capture/CameraCaptureSaverTest.kt CameraCaptureSaverTest S0495: fix unit-test compile - pass settingsRepository + imageClipboardWriter (S0469 ctor params) into CameraCaptureSaver [branch: DEBUG-v014]
2026-06-18 00:55:03 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MaterializeShareContentUseCase.kt MaterializeShareContentUseCase Remove stale S0494 debug probe (ticket no longer BlockNeedUserTest) - Rule 2 cleanup [branch: DEBUG-v014]
2026-06-18 00:55:31 PLAN/S0496_ftp-download-shared-connection-and-progress.md spec-all Compact spec approved: S0496 (FTP isolated connection + byte progress) [branch: DEBUG-v014]
2026-06-18 01:05:14 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/DownloadNetworkFileUseCase.kt spec-all S0496 P01: FTP download uses isolated downloadFileWithNewConnection (no shared-connection race) + forwards progress callback [branch: DEBUG-v014]
2026-06-18 01:05:14 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpStandaloneOperations.kt spec-all S0496 P02: byte-level FTP download progress via FtpProgressOutputStream + size resolution (mlistFile/listFiles/hint) [branch: DEBUG-v014]
2026-06-18 01:05:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ShareMaterializationManager.kt spec-all S0496 P03: Send-to shows determinate progress for FTP (SFTP stays spinner) [branch: DEBUG-v014]
2026-06-18 01:05:14 PLAN/S0496_ftp-download-shared-connection-and-progress.md spec-all Pipeline BlockNeedUserTest: S0496 (compile + on-device smoke pass; FTP behavior needs real server) [branch: DEBUG-v014]
2026-06-18 01:18:28 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MaterializeShareContentUseCase.kt S0494 Review fixes: downloadTo returns actual written file (cloud metadata-resolved name), clear subdir before re-download [branch: DEBUG-v014]
2026-06-18 01:18:28 app_v2/src/main/java/com/sza/fastmediasorter/core/share/ShareableContent.kt S0494 requiresMaterialization also matches cloud:/ single-slash [branch: DEBUG-v014]
2026-06-18 01:18:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt S0494 isRemote/buildShareUri also recognize cloud:/ scheme [branch: DEBUG-v014]
2026-06-18 01:24:19 dev/PRE_RELEASE_MANUAL_TESTS.md S0484 Phase 06.3 Reconstruct pre-release manual-test plan (block matrix from setup_test_media.ps1) and cross-reference /spec-prerelease as the automated emulator sweep; resolves dangling references in the skill, setup_test_media.ps1 and the strategic spec [branch: DEBUG-v014]
2026-06-18 01:26:57 PLAN/S0484_prerelease-emulator-sweep.md spec-check Audit S0484 -> Partial; scriptable spine validated live on emulator-5554 (prepare/configure/cold-start 1169ms/verdict all PASS); both prior WARNs resolved; one WARN remains (integrated UI scenario unrun). PASS/WARN/FAIL 23/1/0 [branch: DEBUG-v014]
2026-06-18 01:26:57 PLAN/S0484_prerelease-emulator-sweep/PHASE_06__docs-catalog-cleanup.md spec-check Phase 06.3 closed: manual-test doc created + cross-ref added; phase 4/4 [branch: DEBUG-v014]
2026-06-18 01:26:58 PLAN/S0484_prerelease-emulator-sweep/INDEX.md spec-check Phase 06 row 3/4 -> 4/4 after 06.3 close [branch: DEBUG-v014]
2026-06-18 01:27:27 PLAN/S0493_send-to-remote-files.md spec-arc Archive S0493 (send-to-remote-files) -> temp/done/ [branch: DEBUG-v014]
2026-06-18 01:27:35 PLAN/S0495_fix-camera-capture-saver-test-compile.md spec-arc Archive S0495 (fix-camera-capture-saver-test-compile) -> temp/done/ [branch: DEBUG-v014]
2026-06-18 01:35:05 a.ps1 skill-release Release delegation forwards trailing $Rest args to worktree builder (honors documented forward contract; enables pinned -VersionName/-VersionCode, eliminates tag/artifact version skew) [branch: DEBUG-v014]
2026-06-18 01:37:08 docs/WHATS_NEW.md skill-release Release notes and README for v2.60.6180.134 - plateau merge from DEBUG-v014 [branch: DEBUG-v014]
2026-06-18 02:11:17 .claude/commands/skill-release.md skill-release Default release scope to standard only; build/publish extra GitHub flavors only when requested via flavor args (or all) [branch: DEBUG-v015]
2026-06-18 02:11:18 scripts/release/build-release-spectrum.ps1 build-release-spectrum Add -Flavors param to build a subset of the spectrum (default full for direct calls); conditional pass1/pass2 + wear stamping [branch: DEBUG-v015]
2026-06-18 02:11:18 scripts/release/publish-github-release.ps1 publish-github-release Add -Flavors param to publish a subset of the spectrum (default full); filter staging/upload to the selected flavors [branch: DEBUG-v015]
2026-06-18 02:54:21 PLAN/S0498_material-statusbar-deprecation.md spec Add strategic spec S0498 - bump Material Components 1.13.0 to 1.14.0 to clear Play Console deprecated setStatusBarColor edge-to-edge warning [branch: DEBUG-v015]
2026-06-18 02:56:46 PLAN/S0497_play-store-listing-aso-rewrite/INDEX.md spec-tech Create tactical plan for S0497 [branch: DEBUG-v015]
2026-06-18 02:56:46 PLAN/S0497_play-store-listing-aso-rewrite/PHASE_01__play-listing-source.md spec-tech Phase 01: play-listing-source [branch: DEBUG-v015]
2026-06-18 02:56:46 PLAN/S0497_play-store-listing-aso-rewrite/PHASE_02__listing-uploader.md spec-tech Phase 02: listing-uploader [branch: DEBUG-v015]
2026-06-18 02:56:46 PLAN/S0497_play-store-listing-aso-rewrite/PHASE_03__screenshots-captioned.md spec-tech Phase 03: screenshots-captioned [branch: DEBUG-v015]
2026-06-18 02:56:46 PLAN/S0497_play-store-listing-aso-rewrite/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v015]
2026-06-18 02:56:46 PLAN/S0497_play-store-listing-aso-rewrite.md spec-tech Status -> Tactical [branch: DEBUG-v015]
2026-06-18 02:56:46 play/listing/en-US/full_description.txt spec-tech Play ASO texts EN/RU/UK (S0497) [branch: DEBUG-v015]
2026-06-18 02:58:15 play/listing/README.md spec-dev S0497 Phase 01: Play listing README (decoupling note) [branch: DEBUG-v015]
2026-06-18 02:58:15 scripts/release/publish-play-listing.py spec-dev S0497 Phase 02: Play listing uploader (validate/commit) [branch: DEBUG-v015]
2026-06-18 02:58:15 scripts/release/publish-play-listing.ps1 spec-dev S0497 Phase 02: Play listing uploader wrapper [branch: DEBUG-v015]
2026-06-18 02:59:33 PLAN/S0498_material-statusbar-deprecation/INDEX.md spec-tech Create tactical plan for S0498 [branch: DEBUG-v015]
2026-06-18 02:59:33 PLAN/S0498_material-statusbar-deprecation/PHASE_01__material-bump-theme-cleanup.md spec-tech Phase 01: material-bump-theme-cleanup [branch: DEBUG-v015]
2026-06-18 02:59:33 PLAN/S0498_material-statusbar-deprecation/PHASE_02__docs-catalog-cleanup.md spec-tech Phase 02: docs-catalog-cleanup [branch: DEBUG-v015]
2026-06-18 02:59:34 PLAN/S0498_material-statusbar-deprecation.md spec-tech Status -> Tactical [branch: DEBUG-v015]
2026-06-18 03:03:28 app_v2/build.gradle.kts material-dependency Bump Material Components 1.13.0 to 1.14.0 (S0498: guards setStatusBarColor on API 35) [branch: DEBUG-v015]
2026-06-18 03:05:03 app_v2/src/main/res/values-v35/themes.xml Theme.App.BottomSheetDialog.EdgeToEdgeCompat Remove obsolete enableEdgeToEdge/navigationBarColor override, retain padding insets, fix comment (S0498) [branch: DEBUG-v015]
2026-06-18 03:06:13 app_v2/src/main/res/values-night-v35/themes.xml Theme.App.BottomSheetDialog.EdgeToEdgeCompat Mirror v35 cleanup in night overlay: remove enableEdgeToEdge/navigationBarColor, retain padding insets, fix comment (S0498) [branch: DEBUG-v015]
2026-06-18 03:13:43 PLAN/S0498_material-statusbar-deprecation.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-18 03:13:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToBottomSheet.kt spec-dev Add S0498 debug verification tag in onViewCreated (BlockNeedUserTest probe; removed on Verified) [branch: DEBUG-v015]
2026-06-18 03:25:36 PLAN/S0499_relocate-statistics-settings.md spec Scaffold strategic spec skeleton S0499 [branch: DEBUG-v015]
2026-06-18 03:27:23 PLAN/S0500_unify-buttons.md spec Scaffold strategic spec skeleton S0500 [branch: DEBUG-v015]
2026-06-18 10:25:50 PLAN/S0492_bugfix-prerelease-configure-import-uri.md spec-check Audit S0492 -> Verified; PASS/WARN/FAIL 8/0/0; tooling file:// import stage removed, delegated-ui contract + both skill mirrors confirmed [branch: DEBUG-v015]
2026-06-18 10:36:44 PLAN/S0500_unify-buttons.md spec-all F1: strategic spec authored from research; status Draft->BlockQuestions (7 design forks await owner decision) [branch: DEBUG-v015]
2026-06-18 10:36:44 PLAN/S0500_unify-buttons/research/01__button-inventory.md spec-all Button inventory research: widget/style audit, zoo evidence, proposed M3 taxonomy, 7 forks [branch: DEBUG-v015]
2026-06-18 10:38:31 PLAN/S0501_camera-ocr-layout-dark-only-theming.md spec-draft Park: camera OCR layout dark-only hardcoded-hex theming (found during S0500 research) [branch: DEBUG-v015]
2026-06-18 10:38:31 PLAN/S0502_duplicates-fab-hardcoded-string.md spec-draft Park: duplicates FAB hardcoded ‘Delete Selected’ string, localization break (found during S0500 research) [branch: DEBUG-v015]
2026-06-18 10:42:22 PLAN/S0499_relocate-statistics-settings.md spec-all F1: strategic spec authored; status Draft->BlockQuestions (4th-card design + placement + S0479 ordering await owner) [branch: DEBUG-v015]
2026-06-18 10:45:17 PLAN/S0476_settings-buildconfig-flavor-isolation.md spec-check Audit S0476 -> Verified; PASS/WARN/FAIL 6/0/0; BuildConfig.IS_NO_LEGAL_FLAVOR fully removed from src/main, replaced by CapabilityAvailability multibinding (CAP_OCR_ENGINE_SELECTION/CAP_NEWPIPE via NoLegalCapabilityModule) [branch: DEBUG-v015]
2026-06-18 10:48:32 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliveredNativeLibraryIncompatibleException.kt S0485 New typed IOException subclass marking a byte-correct-but-unloadable delivered native set (ABI/linkage incompatibility), distinct from corruption - consumers degrade to unavailable, no reinstall offered [branch: DEBUG-v015]
2026-06-18 10:48:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt S0485 Add typed DeliveredNativeLibraryIncompatibleException catch ahead of generic catch at 3 OCR load sites: log at Timber.i and degrade to null [branch: DEBUG-v015]
2026-06-18 10:48:32 app_v2/src/translationMlKit/java/com/sza/fastmediasorter/ui/player/helpers/TranslationBackend.kt S0485 ensureNativeLibrariesLoaded: typed catch for incompatible native set logs at Timber.i and returns false (graceful degrade) [branch: DEBUG-v015]
2026-06-18 10:48:57 PLAN/S0485_bugfix-native-lib-loader-error-loglevel.md spec-check Audit S0485 -> Verified; PASS/WARN/FAIL 6/0/0; typed DeliveredNativeLibraryIncompatibleException, loader Timber.w + consumers Timber.i graceful degrade confirmed; 3 missing dev-log entries backfilled [branch: DEBUG-v015]
2026-06-18 10:50:25 PLAN/S0487_search-log-exceptions-machine-output.md spec-check Audit S0487 -> Verified; PASS/WARN/FAIL 6/0/0; -Exceptions -Json/-Count machine output + empty-log @() guard functionally confirmed [branch: DEBUG-v015]
2026-06-18 10:55:17 app_v2/src/main/res/layout/fragment_duplicates.xml S0502 Remove dead hardcoded android:text Delete Selected from fabDeleteSelected (text always set in code; FAB gone until selection) [branch: DEBUG-v015]
2026-06-18 10:55:17 app_v2/src/main/res/values-uk/strings.xml S0502 Add missing UK translation for duplicate_fab_delete (EN/RU existed, UK absent) [branch: DEBUG-v015]
2026-06-18 10:55:17 PLAN/S0502_duplicates-fab-hardcoded-string.md spec-all Simple-path fix authored + audited -> Verified; PASS/WARN/FAIL 4/0/0 [branch: DEBUG-v015]
2026-06-18 10:55:53 PLAN/spec-catalog.jsonl spec-next Session: 8 processed, 5 verified (S0492/S0476/S0485/S0487/S0502), 2 owner-gated (S0500/S0499), 1 device-gated (S0484); parked S0501/S0502; skip-cached S0497/S0479/S0501 [branch: DEBUG-v015]
2026-06-18 12:15:20 PLAN/S0475_bugfix-settings-search-backup-mapping.md spec-check Audit S0475 -> Verified; device PASS 4/4; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v015]
2026-06-18 12:15:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-check Remove S0475 BlockNeedUserTest debug tag on Verified flip [branch: DEBUG-v015]
2026-06-18 12:32:07 PLAN/S0490_post-crash-report-prompt.md spec-check Audit S0490 -> Verified; device PASS (fixture); PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v015]
2026-06-18 12:32:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/CrashReportPromptManager.kt spec-check Remove S0490 BlockNeedUserTest debug tag on Verified flip [branch: DEBUG-v015]
2026-06-18 12:53:18 PLAN/S0488_pin-all-files-resource-first.md spec-check Audit S0488 -> Verified; device PASS 4/4 (drag MANUAL); PASS/WARN/FAIL 5/0/0 [branch: DEBUG-v015]
2026-06-18 12:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceFilterManager.kt spec-check Remove S0488 debug tag + unused Timber import on Verified flip [branch: DEBUG-v015]
2026-06-18 12:53:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/ResourceItemTouchCallback.kt spec-check Remove S0488 debug tag + unused Timber import on Verified flip [branch: DEBUG-v015]
2026-06-18 13:09:04 PLAN/S0478_send-to-menu-icons.md spec-check Audit S0478 -> Verified; device PASS both presentations; PASS/WARN/FAIL 5/0/0 [branch: DEBUG-v015]
2026-06-18 13:09:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt spec-check Remove 2 S0478 debug tags on Verified flip [branch: DEBUG-v015]
2026-06-18 13:46:37 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-sweep Device test: D-pad PASS on Main/Browse/Player/Settings, FAIL on Welcome carousel -> Broken; PASS/WARN/FAIL 5/0/1 [branch: DEBUG-v015]
2026-06-18 13:46:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/ spec-sweep Remove all 16 S0289 BlockNeedUserTest debug tags across in-scope activities on BlockNeedUserTest->Broken transition (compile verified) [branch: DEBUG-v015]
2026-06-18 13:58:51 PLAN/S0473_statistics-collection-option-default-off.md spec-sweep Device test: default-OFF/opt-in core PASS, broader Statistics flows not driven -> Partial; PASS/WARN/FAIL 5/1/0 [branch: DEBUG-v015]
2026-06-18 13:58:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/ spec-sweep Remove 5 S0473 BlockNeedUserTest debug tags on BlockNeedUserTest->Partial transition [branch: DEBUG-v015]
2026-06-18 14:08:02 PLAN/S0498_material-statusbar-deprecation.md spec-check Audit S0498 -> Verified; device PASS (API35 warning deferred MANUAL); PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v015]
2026-06-18 14:08:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToBottomSheet.kt spec-check Remove S0498 debug tag on Verified flip [branch: DEBUG-v015]
2026-06-18 14:20:14 PLAN/S0486_bugfix-debugactivity-reset-incomplete.md spec-check Audit S0486 -> Verified; device PASS reset clears theme+lang+DataStore; PASS/WARN/FAIL 4/0/0 [branch: DEBUG-v015]
2026-06-18 14:20:14 app_v2/src/debug/java/com/sza/fastmediasorter/ui/debug/DebugActivity.kt spec-check Remove S0486 debug tag + orphaned Timber import on Verified flip [branch: DEBUG-v015]
2026-06-18 14:33:11 PLAN/S0491_dead-backup-viewmodel-export-import.md spec-check Audit S0491 -> Verified; device PASS resurrection wired + export works; PASS/WARN/FAIL 5/0/0 [branch: DEBUG-v015]
2026-06-18 14:33:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsBackupHelper.kt spec-check Remove S0491 debug tag on Verified flip [branch: DEBUG-v015]
2026-06-18 14:36:58 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on emulator-5554: 12 processed, closed 7 (S0475/S0490/S0488/S0478/S0498/S0486/S0491), Broken 1 (S0289), Partial 1 (S0473), 3 INCONCLUSIVE kept BlockNeedUserTest (S0483/S0470/S0469); parked S0503; 11 bucket tickets need flavor/external env [branch: DEBUG-v015]
2026-06-18 14:46:15 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-fix Annotate Last Audit (S0289): D-pad FAIL -> FOLLOW-UP (real impl via /spec-dev); corrected root cause [branch: DEBUG-v015]
2026-06-18 14:46:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-fix Remove flooding S0289DIAG dispatchKeyEvent probe + orphaned Timber import [branch: DEBUG-v015]
2026-06-18 15:14:04 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-all F5: fixed WelcomeActivity D-pad focus, device re-test PASS portrait+landscape -> Verified; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v015]
2026-06-18 15:14:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-all S0289 fix: enter current page on a real control when D-pad focus parks on the ViewPager2 container (firstPageFocusable/enterPageFromContainer/isOnPagerContainer) [branch: DEBUG-v015]
2026-06-18 15:41:33 PLAN/S0504_dpad-focus-container-guard.md spec-all S0504 Verified: app-wide focus-container guard; unit+build PASS, device waived; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v015]
2026-06-18 15:41:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/FocusTargetResolver.kt spec-all New FocusTargetResolver: redirect initial focus off scroll/paged containers to first real control (skip EditText + scroll containers) [branch: DEBUG-v015]
2026-06-18 15:41:33 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-all S0504: wrap getInitialFocusView() through FocusTargetResolver at the initial-focus call site [branch: DEBUG-v015]
2026-06-18 15:41:33 app_v2/src/test/java/com/sza/fastmediasorter/ui/common/input/FocusTargetResolverTest.kt spec-all Robolectric tests for FocusTargetResolver (6 cases) [branch: DEBUG-v015]
2026-06-18 16:46:23 PLAN/ spec-draft Create 8 Draft specs for multi-device input improvements (S0506-S0513): runtime focus guard, focus-highlight gate, gamepad nav parity, gamepad remap, global cheat-sheet key, dialog kbd consistency, mouse enhancements, input-layer unit-test hardening [branch: DEBUG-v015]
2026-06-18 16:55:32 PLAN/S0506_dpad-focus-container-guard-runtime.md spec-all Compact spec: S0506 dpad focus-container guard (runtime) [branch: DEBUG-v015]
2026-06-18 16:59:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/FocusTargetResolver.kt spec-all S0506: add isFocusTrapContainer predicate [branch: DEBUG-v015]
2026-06-18 16:59:35 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-all S0506: dispatch-time D-pad focus-container guard + shouldGuardContainerFocus opt-out [branch: DEBUG-v015]
2026-06-18 16:59:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-all S0506: opt out of container-focus guard (transport owns directional keys) [branch: DEBUG-v015]
2026-06-18 16:59:35 app_v2/src/test/java/com/sza/fastmediasorter/ui/common/input/FocusTargetResolverTest.kt spec-all S0506: isFocusTrapContainer unit cases [branch: DEBUG-v015]
2026-06-18 17:01:30 PLAN/S0506_dpad-focus-container-guard-runtime.md spec-check Audit S0506 -> Verified; PASS/WARN/FAIL 10/0/0 [branch: DEBUG-v015]
2026-06-18 17:06:39 PLAN/S0508_gamepad-navigation-parity.md spec Add strategic spec S0508 for gamepad navigation parity [branch: DEBUG-v015]
2026-06-18 17:12:32 PLAN/S0508_gamepad-navigation-parity/INDEX.md spec-tech Create tactical plan for S0508 [branch: DEBUG-v015]
2026-06-18 17:12:32 PLAN/S0508_gamepad-navigation-parity/PHASE_01__translator-foundations.md spec-tech Phase 01: translator-foundations [branch: DEBUG-v015]
2026-06-18 17:12:32 PLAN/S0508_gamepad-navigation-parity/PHASE_02__base-motion-hook.md spec-tech Phase 02: base-motion-hook [branch: DEBUG-v015]
2026-06-18 17:12:32 PLAN/S0508_gamepad-navigation-parity/PHASE_03__shoulder-page-jump.md spec-tech Phase 03: shoulder-page-jump [branch: DEBUG-v015]
2026-06-18 17:12:32 PLAN/S0508_gamepad-navigation-parity/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v015]
2026-06-18 17:12:32 PLAN/S0508_gamepad-navigation-parity.md spec-tech Status -> Tactical [branch: DEBUG-v015]
2026-06-18 17:17:53 app_v2/src/main/java/com/sza/fastmediasorter/core/input/GamepadNavIntent.kt spec-dev S0508 Phase 01.1: GamepadNavIntent sealed type [branch: DEBUG-v015]
2026-06-18 17:17:53 app_v2/src/main/java/com/sza/fastmediasorter/core/input/GamepadNavigationTranslator.kt spec-dev S0508 Phase 01.2: analog stick -> nav intent translator [branch: DEBUG-v015]
2026-06-18 17:17:53 app_v2/src/test/java/com/sza/fastmediasorter/core/input/GamepadNavigationTranslatorTest.kt spec-dev S0508 Phase 01.3: translator unit tests [branch: DEBUG-v015]
2026-06-18 17:26:03 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-dev S0508 Phase 02-03: gamepad nav hook (stick focus/scroll) + L1/R1 page-jump fallback [branch: DEBUG-v015]
2026-06-18 17:26:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0508 Phase 02.3: opt out of gamepad nav layer [branch: DEBUG-v015]
2026-06-18 17:26:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0508 Phase 02.3: opt out of gamepad nav layer [branch: DEBUG-v015]
2026-06-18 17:26:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0508 Phase 02.3: opt out of gamepad nav layer [branch: DEBUG-v015]
2026-06-18 17:26:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-dev S0508 Phase 02.3: opt out of gamepad nav layer [branch: DEBUG-v015]
2026-06-18 17:26:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0508 Phase 02.3: opt out of gamepad nav layer [branch: DEBUG-v015]
2026-06-18 17:26:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-dev S0508 Phase 02.3: opt out of gamepad nav layer [branch: DEBUG-v015]
2026-06-18 17:28:50 docs/ALL_FEATURES.jsonl spec-dev S0508 Phase 04.1: record gamepad navigation capability [branch: DEBUG-v015]
2026-06-18 17:29:30 PLAN/S0508_gamepad-navigation-parity.md spec-dev All phases done; status -> Implemented [branch: DEBUG-v015]
2026-06-18 17:30:50 PLAN/S0508_gamepad-navigation-parity.md spec-check Audit S0508 -> Verified; PASS/WARN/FAIL 14/0/0 [branch: DEBUG-v015]
2026-06-18 17:32:04 PLAN/spec-catalog.jsonl spec-next Session: 2 processed, 2 verified (S0506, S0508), 0 blocked [branch: DEBUG-v015]
2026-06-18 17:50:39 scripts/spec_catalog/spec-next-preflight.ps1 spec-next New: one-shot /spec-next selection preflight (rank + skip-cache + per-candidate preview + drift) in one read-only call [branch: DEBUG-v015]
2026-06-18 17:50:39 scripts/all_features/add.ps1 all_features Add -ListAreas parameter set to list inventory areas without an exploratory ConvertFrom-Json pass [branch: DEBUG-v015]
2026-06-18 17:50:39 CLAUDE.md rules Workflow consolidation: dev-log per-change + catalog-sync per-ticket norm; route mechanical closure through post-change.ps1 facade [branch: DEBUG-v015]
2026-06-18 17:50:39 .claude/agents/android-rd-specialist.md agent-def FEATURES.md->ALL_FEATURES.jsonl capability inventory; dev-log/catalog-sync granularity + facade note (mirrored in android-kotlin-developer.md) [branch: DEBUG-v015]
2026-06-18 17:50:39 .claude/commands/spec-next.md skill Collapse Stage 1-3 into spec-next-preflight call + preflight handoff to /spec-all (spec-all.md: handoff skip, facade constraint, FUNC_LOG->ALL_FEATURES check) [branch: DEBUG-v015]
2026-06-18 17:50:39 PLAN/S0514_retired-functionality-log-skill-references.md spec-draft Parked: retired FUNCTIONALITY.log skill references (S0489 follow-up) [branch: DEBUG-v015]
2026-06-18 18:04:43 .claude/agent-memory/ agent-memory Purge retired FUNCTIONALITY.log knowledge from kotlin-developer/solution-researcher/doc-writer memories (-> ALL_FEATURES.jsonl); fix rd-specialist skill-release cross-check + backticks example [branch: DEBUG-v015]
2026-06-18 18:06:49 PLAN/S0500_unify-buttons/INDEX.md spec-tech Create tactical plan for S0500 (5 phases: button-style-family, settings-consolidation, dialog/sheet, misc-surface, cleanup); Status -> Tactical [branch: DEBUG-v015]
2026-06-18 18:33:42 PLAN/S0500_unify-buttons.md spec-dev All phases done; unified Material3 button family applied app-wide; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-18 18:33:42 app_v2/src/main/res/values/themes.xml spec-dev Add Widget.FastMediaSorter.Button.{Filled,Tonal,Outlined,Text,Icon}; consolidate SettingsButton.* to one M3 generation [branch: DEBUG-v015]
2026-06-18 18:33:42 app_v2/src/main/res/layout spec-dev Migrate plain Button -> MaterialButton and remap MaterialComponents button styles to unified family across dialogs/settings/welcome/misc (portrait+land) [branch: DEBUG-v015]
2026-06-18 18:33:42 app_v2/src/main/java/com/sza/fastmediasorter/ui spec-dev S0500 debug verification tags in WelcomeActivity/GeneralSettingsFragment/PermissionsManagementFragment [branch: DEBUG-v015]
2026-06-18 18:43:53 PLAN/S0500_unify-buttons.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 5/0/0, 0 app crashes; welcome+settings breadcrumbs confirmed [branch: DEBUG-v015]
2026-06-18 18:47:05 PLAN/S0500_unify-buttons.md spec-check Audit S0500 -> Verified; PASS/WARN/FAIL 12/0/0; debug tags removed [branch: DEBUG-v015]
2026-06-18 18:47:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-check Remove S0500 debug verification tag (Verified) [branch: DEBUG-v015]
2026-06-18 18:47:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt spec-check Remove S0500 debug verification tag (Verified) [branch: DEBUG-v015]
2026-06-18 18:47:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PermissionsManagementFragment.kt spec-check Remove S0500 debug verification tag (Verified) [branch: DEBUG-v015]
2026-06-18 18:52:43 PLAN/S0473_statistics-collection-option-default-off.md spec-all F5 assessment: impl complete (0 FAIL); remaining WARN is fixture-heavy device-coverage gap (dashboard/disable-wipe/send/export/orientation/a11y) - not /spec-fix-able; stays Partial, needs /spec-sweep or manual device pass [branch: DEBUG-v015]
2026-06-18 18:53:11 PLAN/spec-catalog.jsonl spec-next Session: 2 processed (S0500 Verified, S0473 Partial), 1 verified; parked S0515+S0516; loop paused at clean boundary [branch: DEBUG-v015]
2026-06-18 19:55:36 PLAN/S0473_statistics-collection-option-default-off.md spec-check Audit S0473 -> Verified; device gap closed (PASS 10/WARN 0/FAIL 0/MANUAL 2/EXEMPT 1) [branch: DEBUG-v015]
2026-06-18 19:55:36 temp/S0473_mobile_test_scenario_20260618_1937.md spec-test-device Device run emulator-5554: dashboard/disable-wipe/send/export/landscape/RU-UK/D-pad verified, 14/0/0 [branch: DEBUG-v015]
2026-06-18 20:00:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0503: guard capture onSaved/onError against released binding (isFinishing/isDestroyed) [branch: DEBUG-v015]
2026-06-18 20:02:11 PLAN/S0503_camera-capture-onerror-binding-crash.md spec-all Simple pipeline: guard CameraCaptureActivity capture callbacks vs released binding; status -> Verified (PASS 2/MANUAL 1) [branch: DEBUG-v015]
2026-06-18 20:03:16 PLAN/S0289_tv-keyboard-dpad-navigation.md spec-arc Archive S0289 (tv-keyboard-dpad-navigation) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:17 PLAN/S0473_statistics-collection-option-default-off.md spec-arc Archive S0473 (statistics-collection-option-default-off) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:18 PLAN/S0475_bugfix-settings-search-backup-mapping.md spec-arc Archive S0475 (bugfix-settings-search-backup-mapping) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:19 PLAN/S0476_settings-buildconfig-flavor-isolation.md spec-arc Archive S0476 (settings-buildconfig-flavor-isolation) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:19 PLAN/S0478_send-to-menu-icons.md spec-arc Archive S0478 (send-to-menu-icons) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:20 PLAN/S0485_bugfix-native-lib-loader-error-loglevel.md spec-arc Archive S0485 (bugfix-native-lib-loader-error-loglevel) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:21 PLAN/S0486_bugfix-debugactivity-reset-incomplete.md spec-arc Archive S0486 (bugfix-debugactivity-reset-incomplete) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:22 PLAN/S0487_search-log-exceptions-machine-output.md spec-arc Archive S0487 (search-log-exceptions-machine-output) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:23 PLAN/S0488_pin-all-files-resource-first.md spec-arc Archive S0488 (pin-all-files-resource-first) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:24 PLAN/S0490_post-crash-report-prompt.md spec-arc Archive S0490 (post-crash-report-prompt) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:25 PLAN/S0491_dead-backup-viewmodel-export-import.md spec-arc Archive S0491 (dead-backup-viewmodel-export-import) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:25 PLAN/S0492_bugfix-prerelease-configure-import-uri.md spec-arc Archive S0492 (bugfix-prerelease-configure-import-uri) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:26 PLAN/S0498_material-statusbar-deprecation.md spec-arc Archive S0498 (material-statusbar-deprecation) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:27 PLAN/S0500_unify-buttons.md spec-arc Archive S0500 (unify-buttons) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:28 PLAN/S0502_duplicates-fab-hardcoded-string.md spec-arc Archive S0502 (duplicates-fab-hardcoded-string) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:29 PLAN/S0503_camera-capture-onerror-binding-crash.md spec-arc Archive S0503 (CameraCaptureActivity onError touches released ViewBinding (crash)) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:30 PLAN/S0504_dpad-focus-container-guard.md spec-arc Archive S0504 (dpad-focus-container-guard) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:31 PLAN/S0506_dpad-focus-container-guard-runtime.md spec-arc Archive S0506 (dpad-focus-container-guard-runtime) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:03:31 PLAN/S0508_gamepad-navigation-parity.md spec-arc Archive S0508 (gamepad-navigation-parity) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 20:08:04 app_v2/src/main/res/layout/fragment_duplicates.xml spec-dev S0516: extract hardcoded duplicates-scan subtitle to @string + fill 3 UK-missing duplicate_ keys (delete_title/delete_message/groups_summary) [branch: DEBUG-v015]
2026-06-18 20:09:51 PLAN/S0516_duplicates-delete-selected-hardcoded-string.md spec-all Simple pipeline: localize duplicates screen (extract subtitle to @string + fill 3 UK-missing duplicate_ keys); status -> Verified (PASS 4) [branch: DEBUG-v015]
2026-06-18 20:11:24 PLAN/spec-catalog.jsonl spec-next Session: 4 processed (S0473+S0503+S0516 Verified, S0484 skip-cached owner-scoped), 3 verified; loop paused at clean boundary before S0514 (semantic OP-MAP/OP-DELETE forks + 5 skill-file edits) [branch: DEBUG-v015]
2026-06-18 20:12:01 PLAN/S0517_calculator-april-fools-dangerous-system-dialog.md spec-draft Park: calculator April Fools system-like data-wipe prank dialog [branch: DEBUG-v015]
2026-06-18 20:21:05 PLAN/S0514_retired-functionality-log-skill-references.md spec-all Simple pipeline: purge retired add_to_functionality_log/FUNCTIONALITY.log refs from 5 skill files; align to ALL_FEATURES.jsonl; status -> Verified [branch: DEBUG-v015]
2026-06-18 20:21:05 .claude/commands/skill-fix-release.md spec-dev S0514: Step 13a fix-release inventory write via all_features/add.ps1 (was retired add_to_functionality_log) [branch: DEBUG-v015]
2026-06-18 20:21:05 .claude/commands/spec-arc.md spec-dev S0514: –removes-functionality DELETE -> all_features/add.ps1 -Status removed (flag desc + fallback) [branch: DEBUG-v015]
2026-06-18 20:21:05 .claude/commands/spec-fix.md spec-dev S0514: drop retired FIX fallback; inventory upsert only on capability change [branch: DEBUG-v015]
2026-06-18 20:21:05 .claude/commands/skill-fix.md spec-dev S0514: stale FUNCTIONALITY.log/add_to_functionality_log refs -> ALL_FEATURES.jsonl/all_features/add.ps1 [branch: DEBUG-v015]
2026-06-18 20:21:05 .claude/commands/ns.md spec-dev S0514: stale dev/FUNCTIONALITY.log ref -> docs/ALL_FEATURES.jsonl [branch: DEBUG-v015]
2026-06-18 20:21:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorAprilFoolsPrankManager.kt Calculator prank Add April Fools prank dialog with divide-by-zero trigger and April 1 once-per-day auto show [branch: DEBUG-v015]
2026-06-18 20:22:55 PLAN/spec-catalog.jsonl spec-next Session 2: 2 processed (S0514 Verified, S0517 skip-cached owner-product-decision), 1 verified; loop paused before S0507 (Full-complexity focus-highlight gate build - false-positive-prone heuristic warrants focused /spec-tech, not tail-end rush) [branch: DEBUG-v015]
2026-06-18 20:32:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/NetworkDiscoveryDialog.kt spec-dev S0515: add btnStopScan to landscape dialog_network_discovery (portrait parity); binding now non-null, drop stale safe-calls [branch: DEBUG-v015]
2026-06-18 20:35:10 PLAN/S0515_network-discovery-landscape-stopscan-missing.md spec-all Simple pipeline: restore btnStopScan in landscape network-discovery dialog (portrait parity); status -> Verified [branch: DEBUG-v015]
2026-06-18 20:35:10 app_v2/src/main/res/layout-land/dialog_network_discovery.xml spec-dev S0515: add btnStopScan to landscape (Rule 11 parity) [branch: DEBUG-v015]
2026-06-18 20:35:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/NetworkDiscoveryDialog.kt spec-dev S0515: binding.btnStopScan now non-null - drop stale safe-calls + comments [branch: DEBUG-v015]
2026-06-18 20:38:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt Calculator prank Move April 1 prank auto trigger from CalculatorActivity to app startup in MainActivity [branch: DEBUG-v015]
2026-06-18 20:41:44 scripts/quality/assert-focus-highlight.ps1 spec-dev S0507: focus-highlight ratchet gate (Rule 16) - interactive views without focus indication; baseline 63, wired into post-change [branch: DEBUG-v015]
2026-06-18 20:44:44 PLAN/S0507_focus-highlight-coverage-gate.md spec-all Simple pipeline: focus-highlight ratchet gate (Rule 16) built + baseline 63 + wired into post-change; gap remediation -> S0518; status -> Verified [branch: DEBUG-v015]
2026-06-18 20:44:44 scripts/post-change.ps1 spec-dev S0507: wire focus-highlight-gate (Xml/Mixed) [branch: DEBUG-v015]
2026-06-18 20:44:44 scripts/quality/focus-highlight-baseline.txt spec-dev S0507: seed focus-highlight baseline = 63 [branch: DEBUG-v015]
2026-06-18 21:04:08 PLAN/S0513_input-layer-unit-test-hardening.md spec-all Review-mode: input-layer test targets already covered by existing green tests (Gamepad/KeyBinding/TvKeyRouter/NavTranslator); status -> Verified [branch: DEBUG-v015]
2026-06-18 21:05:20 PLAN/spec-catalog.jsonl spec-next Session 3 (owner: весь бэклог): processed S0513 Verified (review-mode); this turn also closed S0515+S0507 + created S0518; loop paused - remaining (S0518 63-view focus remediation + input feature Drafts S0509/S0510/S0512/S0505/S0511) is multi-turn work [branch: DEBUG-v015]
2026-06-18 21:31:30 PLAN/S0518_focus-highlight-gap-remediation.md spec-all S0518 focus-highlight gap remediation Verified: gate recognises android-ripple + custom widgets + non-target whitelist; foreground on genuine targets; baseline 63->0 [branch: DEBUG-v015]
2026-06-18 21:31:31 scripts/quality/assert-focus-highlight.ps1 spec-all Recognise ?android:attr ripple + SettingsToggleRow/TranslationOverlayView classes + non-target id whitelist [branch: DEBUG-v015]
2026-06-18 21:31:31 scripts/quality/focus-highlight-baseline.txt spec-all Ratchet focus-highlight baseline 63 -> 0 [branch: DEBUG-v015]
2026-06-18 21:31:31 app_v2/src/main/res/layout/item_dropbox_folder.xml spec-all Add focus_button_background foreground to interactive item/card/row/swatch/mini-player views across 16 layouts (portrait + landscape parity) [branch: DEBUG-v015]
2026-06-18 22:01:17 PLAN/S0509_gamepad-button-remap.md spec-all S0509 device-targeted gamepad remap; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-18 22:01:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingListAdapter.kt spec-all Remap button opens a device picker (PopupMenu) so gamepad/mouse bindings are editable, not only the first device [branch: DEBUG-v015]
2026-06-18 22:01:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/helpers/KeybindingDeviceOptions.kt spec-all New remappableDevices() pure helper (+ unit test); always offers keyboard+gamepad [branch: DEBUG-v015]
2026-06-18 22:01:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/helpers/KeybindingRowLabelFormatter.kt spec-all deviceLabel() localized input-device labels [branch: DEBUG-v015]
2026-06-18 22:01:17 app_v2/src/main/res/values/strings_input.xml spec-all keybinding_device_* labels EN/RU/UK [branch: DEBUG-v015]
2026-06-18 22:13:14 PLAN/S0507_focus-highlight-coverage-gate.md spec-arc Archive S0507 (focus-highlight-coverage-gate) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 22:13:15 PLAN/S0513_input-layer-unit-test-hardening.md spec-arc Archive S0513 (input-layer-unit-test-hardening) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 22:13:16 PLAN/S0514_retired-functionality-log-skill-references.md spec-arc Archive S0514 (retired-functionality-log-skill-references) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 22:13:17 PLAN/S0515_network-discovery-landscape-stopscan-missing.md spec-arc Archive S0515 (network-discovery-landscape-stopscan-missing) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 22:13:17 PLAN/S0516_duplicates-delete-selected-hardcoded-string.md spec-arc Archive S0516 (duplicates-delete-selected-hardcoded-string) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 22:13:18 PLAN/S0518_focus-highlight-gap-remediation.md spec-arc Archive S0518 (focus-highlight-gap-remediation) -> temp/done/ [branch: DEBUG-v015]
2026-06-18 22:33:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt app_v2 Suppress DEPRECATION+OVERRIDE_DEPRECATION on single-arg onPictureInPictureModeChanged across PlayerActivity, StandalonePlayerActivity, PhotoVideoStandaloneActivity; single-arg kept for legacy minSdk 23 (API 24-25 PiP routing) [branch: DEBUG-v015]
2026-06-18 22:46:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsViewModel.kt app_v2 settings + statistics dashboard S0499: relocate statistics collection toggle + Statistics button into the Background sync/network/cache settings section (portrait + landscape, button wrap_content); add 4th ‘Viewed’ summary card (images+videos+audio+docs opened) to the statistics dashboard [branch: DEBUG-v015]
2026-06-18 22:56:57 app_v2/src/main/java/com/sza/fastmediasorter/data/glide/PdfPageDecoder.kt app_v2 S0521: render Browse PDF thumbnails into ARGB_8888 (PdfRenderer requirement); down-copy to memory-pressure config; fixes vanished PDF thumbnails [branch: DEBUG-v015]
2026-06-18 22:59:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorAprilFoolsPrankManager.kt Calculator prank Switch prank to platform AlertDialog, add aggressive system-like icon, and rename CTA to More details [branch: DEBUG-v015]
2026-06-18 23:11:39 PLAN/S0512_mouse-interaction-enhancements.md spec-all Pipeline Blocked (BlockQuestions): S0512 re-scoped - research found 3 of 4 features already shipped in S0289 (XButton1=Back global, XButton2/middle-click hooks); only drag-select + hover-highlight remain, both gated on owner UI/UX decision [branch: DEBUG-v015]
2026-06-18 23:15:47 PLAN/S0505_receiveshare-not-baseactivity.md spec-all Pipeline Blocked (BlockQuestions): S0505 - research invalidated BaseActivity-migration premise (ReceiveShareActivity is transparent/chromeless, BaseActivity needs a content view; locale already applied; receiver-list D-pad is a dialog concern). WontFix recommended [branch: DEBUG-v015]
2026-06-18 23:20:25 PLAN/S0511_dialog-keyboard-consistency.md spec-all Compact spec S0511 Approved: apply existing DialogKeyboardDelegate to ~13 gap dialogs + initial focus (helper already exists, premise corrected from create-helper to apply-helper) [branch: DEBUG-v015]
2026-06-18 23:24:23 PLAN/S0521_bugfix-pdf-thumbnails-browse.md spec-arc Archive S0521 (bugfix-pdf-thumbnails-browse) -> temp/done/; removed Timber.d debug tags from PdfPageDecoder.kt and NetworkPdfThumbnailLoader.kt [branch: DEBUG-v015]
2026-06-18 23:24:24 PLAN/S0499_relocate-statistics-settings.md spec-arc Archive S0499 (relocate-statistics-settings) -> temp/done/; removed Timber.d debug tag from StatisticsViewModel.kt [branch: DEBUG-v015]
2026-06-18 23:30:42 PLAN/S0522_fallback-save-unavailable-resource.md spec Add strategic spec S0522 for save-fallback when destination resource is unavailable [branch: DEBUG-v015]
2026-06-18 23:31:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player Statistics: player time Fix ‘Player time’ statistic always showing 0:0. Player time was only recorded on STATE_ENDED (full media duration of fully-completed playthroughs), which almost never happens in a sorting workflow. Now accrue actual time the player is on screen (including pause/buffering) via a monotonic watch/listen clock, banked as a new StatsEvent.PlaybackTime (decoupled from the watched/played count). Video: VideoPlayerManager + VideoPlayerLifecycleHelper start/flush on STATE_READY/onResume/onPause/release/destroy. Audio: AudioPlaybackService accrues over service lifetime with a 30s periodic bank to survive process kill. [branch: DEBUG-v015]
2026-06-18 23:33:20 app_v2/src/main/java/com/sza/fastmediasorter/ui spec-all S0511 Implemented: applied existing DialogKeyboardDelegate to 11 gap dialogs (Esc/Enter/focus + initial focus); skipped DeliveryPrompt (forced-choice isCancelable=false) and BeamAnimation (Compose); fc PASS [branch: DEBUG-v015]
2026-06-18 23:35:20 PLAN/S0511_dialog-keyboard-consistency.md spec-check Audit S0511 -> Verified; PASS/WARN/FAIL 8/0/0; delegate applied to 11 dialogs, exclusions respected, no debug tags, fc PASS [branch: DEBUG-v015]
2026-06-18 23:39:32 PLAN/S0520_dedup-dual-inputsurface-enums.md spec-all Pipeline Blocked (BlockQuestions): S0520 - 3 surface enums confirmed; core dedup is an architecture fork entangled with owner-gated S0519 (surface enum = its binding-storage key); recommend rename+mapping (not merge), decide with S0519 [branch: DEBUG-v015]
2026-06-18 23:40:36 PLAN/spec-catalog.jsonl spec-next Session: 5 processed -> 1 Verified (S0511 dialog-keyboard-consistency), 3 BlockQuestions (S0505/S0512/S0520 - research re-scoped), 1 drift-deferred (S0510), 1 auto-skip (S0522 research-heavy) [branch: DEBUG-v015]
2026-06-18 23:43:53 PLAN/S0522_fallback-save-unavailable-resource/INDEX.md spec-tech Create tactical plan for S0522 (6 phases) [branch: DEBUG-v015]
2026-06-18 23:43:53 PLAN/S0522_fallback-save-unavailable-resource.md spec-tech S0522 status -> Tactical [branch: DEBUG-v015]
2026-06-18 23:45:29 app_v2/src/main/java/com/sza/fastmediasorter/core/network/NetworkStateMonitor.kt spec-dev S0522 P01.1: add synchronous reachability queries (canReach/isLocalNetworkAvailable/isInternetAvailable) [branch: DEBUG-v015]
2026-06-18 23:49:28 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/SaveFallbackReason.kt spec-dev S0522 P01.2: shared SaveFallbackReason enum [branch: DEBUG-v015]
2026-06-18 23:50:25 app_v2/src/main/java/com/sza/fastmediasorter/util/SaveFallbackPolicy.kt spec-dev S0522 P01.3: pure SaveFallbackPolicy decision + media-type fallback mapping [branch: DEBUG-v015]
2026-06-18 23:54:31 app_v2/src/main/java/com/sza/fastmediasorter/core/save/SaveFallbackNotifier.kt spec-dev S0522 P02.2: SaveFallbackNotifier (toast + background notification) [branch: DEBUG-v015]
2026-06-18 23:55:34 app_v2/src/main/res/values/strings.xml spec-dev S0522 P02.1: fallback-notice strings EN/RU/UK [branch: DEBUG-v015]
2026-06-19 00:02:09 app_v2/src/main/java/com/sza/fastmediasorter/util/ScreenshotDestinationPolicy.kt spec-dev S0522 P03.1: reachability-aware screenshot target + fallbackReason [branch: DEBUG-v015]
2026-06-19 00:02:13 .claude/commands/spec-quiz.md tooling/skills Add /spec-quiz skill: multiple-choice Q&A to unstick a single spec (Draft->Approved, BlockQuestions->restore) advancing exactly one lifecycle level; registered route in CLAUDE.md §3 [branch: DEBUG-v015]
2026-06-19 00:03:04 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveScreenshotUseCase.kt spec-dev S0522 P03.2: surface fallbackReason from screenshot save [branch: DEBUG-v015]
2026-06-19 00:04:03 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenshotAccessibilityService.kt spec-dev S0522 P03.3: a11y screenshot fallback notify [branch: DEBUG-v015]
2026-06-19 00:04:56 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenCaptureService.kt spec-dev S0522 P03.3: MediaProjection screenshot fallback notify [branch: DEBUG-v015]
2026-06-19 00:06:09 PLAN/S0465_camera-video-capture-eacces-public-collection.md spec-arc Archive S0465 (camera-video-capture-eacces-public-collection) -> temp/done/ [branch: DEBUG-v015]
2026-06-19 00:07:45 PLAN/S0468_screenshot-clipboard.md spec-arc Archive S0468 (screenshot-clipboard) -> temp/done/ [branch: DEBUG-v015]
2026-06-19 00:07:45 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenshotAccessibilityService.kt spec-arc Remove S0468 BlockNeedUserTest debug tag on archive [branch: DEBUG-v015]
2026-06-19 00:08:24 PLAN/S0469_save-photos-to-clipboard.md spec-arc Archive S0469 (save-photos-to-clipboard) -> temp/done/ [branch: DEBUG-v015]
2026-06-19 00:08:24 app_v2/src/main/java/com/sza/fastmediasorter/data/capture/CameraCaptureSaver.kt spec-arc Remove S0469 BlockNeedUserTest debug tag on archive [branch: DEBUG-v015]
2026-06-19 00:11:00 app_v2/src/main/java/com/sza/fastmediasorter/data/capture/CameraCaptureSaver.kt spec-dev S0522 P04.1: camera/video write-time local fallback [branch: DEBUG-v015]
2026-06-19 00:11:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt spec-dev S0522 P04.2: camera/video reachability pre-check + fallback notify [branch: DEBUG-v015]
2026-06-19 00:12:52 PLAN/S0425_screenshot-gesture-actions.md spec-arc Archive S0425 (screenshot-gesture-actions) -> temp/done/; removed S0425 debug tags from ScreenshotAccessibilityService, ScreenGestureOverlayManager, ScreenCaptureService, ScreenshotGestureActionDispatcher [branch: DEBUG-v015]
2026-06-19 00:12:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt spec-dev S0522 P04.3: mic recording local fallback + notify [branch: DEBUG-v015]
2026-06-19 00:13:40 PLAN/S0474_settings-activity-perf-research.md spec-arc Archive S0474 (settings-activity-perf-research) -> temp/done/; removed S0474 debug tags from SettingsActivity, PlaybackSettingsFragment, OperationsSettingsFragment, MediaSettingsFragment [branch: DEBUG-v015]
2026-06-19 00:13:45 PLAN/S0477_lite-default-player-bootstrap-missing-components.md spec-arc Archive S0477 (lite-default-player-bootstrap-missing-components) -> temp/done/; removed S0477 debug tag from DefaultPlayerStateBootstrapper [branch: DEBUG-v015]
2026-06-19 00:13:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-dev S0522 P04: inject NetworkStateMonitor + SaveFallbackNotifier into capture managers [branch: DEBUG-v015]
2026-06-19 00:14:10 PLAN/S0484_prerelease-emulator-sweep.md spec-arc Archive S0484 (prerelease-emulator-sweep) -> temp/done/ [branch: DEBUG-v015]
2026-06-19 00:22:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt spec-dev S0522 P05.1: video-frame reachability pre-check + fallback notify [branch: DEBUG-v015]
2026-06-19 00:23:45 app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkDownloadWriter.kt spec-dev S0522 P05.2: shared SaveFallbackReason + reachability pre-check [branch: DEBUG-v015]
2026-06-19 00:23:49 PLAN/S0501_camera-ocr-layout-dark-only-theming.md spec-quiz S0501: Draft -> Approved via quiz (2 questions) [branch: DEBUG-v015]
2026-06-19 00:23:53 PLAN/S0523_menu-quick-capture-device-folders.md spec Add strategic spec S0523 for main-menu quick capture to device folders [branch: DEBUG-v015]
2026-06-19 00:24:40 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt spec-dev S0522 P05.2: map shared SaveFallbackReason in coordinator [branch: DEBUG-v015]
2026-06-19 00:25:33 app_v2/src/main/java/com/sza/fastmediasorter/worker/LinkDownloadWorker.kt spec-dev S0522 P05.3: reason-aware download fallback notification text [branch: DEBUG-v015]
2026-06-19 00:26:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0522 P05.1: inject SaveFallbackNotifier into PlayerActivity [branch: DEBUG-v015]
2026-06-19 00:27:19 app_v2/src/main/res/values/strings.xml spec-dev S0522 P05.3: download fallback notification string EN/RU/UK [branch: DEBUG-v015]
2026-06-19 00:28:07 PLAN/S0512_mouse-interaction-enhancements/INDEX.md spec-all Tactical plan S0512: hover-highlight + minimal drag-select (Browse/Duplicates), 6 phases [branch: DEBUG-v015]
2026-06-19 00:33:23 PLAN/S0522_fallback-save-unavailable-resource.md spec-dev S0522 all 6 phases done; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 00:34:21 PLAN/S0479_settings-operations-section-decomposition.md spec-quiz S0479: Draft -> Approved via quiz (1 question); authored strategic structure, scheduled stays embedded [branch: DEBUG-v015]
2026-06-19 00:37:34 PLAN/S0512_mouse-interaction-enhancements/INDEX.md spec-all S0512 impl: hover-highlight overlay + minimal drag-select (mouse band + touch drag) on Browse and Duplicates lists [branch: DEBUG-v015]
2026-06-19 00:38:57 PLAN/S0523_menu-quick-capture-device-folders/INDEX.md spec-tech Create tactical plan for S0523 (7 phases: settings, recordings dest, voice/camera engines, menu, settings UI, cleanup); status -> Tactical [branch: DEBUG-v015]
2026-06-19 00:39:13 PLAN/S0526_widget-dictaphone-resource-destination.md spec Scaffold strategic spec skeleton S0526 [branch: DEBUG-v015]
2026-06-19 00:39:13 PLAN/S0527_gif-first-frame-mediastore.md spec Scaffold strategic spec skeleton S0527 [branch: DEBUG-v015]
2026-06-19 00:39:13 PLAN/S0528_consolidate-savetodownloads.md spec Scaffold strategic spec skeleton S0528 [branch: DEBUG-v015]
2026-06-19 00:42:54 app_v2/src/main/res/layout/activity_camera_ocr_translate.xml spec-all S0501: camera OCR translate dark-only color tokens (hex -> @color/camera_ocr_*), Rule 19 [branch: DEBUG-v015]
2026-06-19 00:46:07 temp/S0501_mobile_test_scenario_20260619_0045.md spec-test-device Device run S0501 scenario-only (automation out-of-scope) -> PASS/FAIL/SKIPPED 0/0/6 [branch: DEBUG-v015]
2026-06-19 00:46:48 PLAN/S0512_mouse-interaction-enhancements.md spec-test-device Device run on R5CY9070WNB (SM-S731B, Android 16) -> Browse touch drag-select PASS; mouse band-select + hover + duplicates SKIPPED (no mouse / no duplicate set) [branch: DEBUG-v015]
2026-06-19 00:51:59 PLAN/S0479_settings-operations-section-decomposition/INDEX.md spec-tech Create tactical plan for S0479 (operations section decomposition) [branch: DEBUG-v015]
2026-06-19 00:51:59 PLAN/S0479_settings-operations-section-decomposition/PHASE_01__sections-manager.md spec-tech Phase 01: sections-manager [branch: DEBUG-v015]
2026-06-19 00:51:59 PLAN/S0479_settings-operations-section-decomposition/PHASE_02__destinations-manager.md spec-tech Phase 02: destinations-manager [branch: DEBUG-v015]
2026-06-19 00:51:59 PLAN/S0479_settings-operations-section-decomposition/PHASE_03__scheduled-manager.md spec-tech Phase 03: scheduled-manager [branch: DEBUG-v015]
2026-06-19 00:51:59 PLAN/S0479_settings-operations-section-decomposition/PHASE_04__capture-manager.md spec-tech Phase 04: capture-manager [branch: DEBUG-v015]
2026-06-19 00:51:59 PLAN/S0479_settings-operations-section-decomposition/PHASE_05__gestures-manager.md spec-tech Phase 05: gestures-manager [branch: DEBUG-v015]
2026-06-19 00:51:59 PLAN/S0479_settings-operations-section-decomposition/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v015]
2026-06-19 00:51:59 PLAN/S0479_settings-operations-section-decomposition.md spec-tech S0479 status -> Tactical [branch: DEBUG-v015]
2026-06-19 01:13:58 PLAN/S0510_global-input-cheatsheet-key.md spec-all S0510 global F1 input-help key + first-run hint; status -> Implemented (unit-test gate deferred to clean tree) [branch: DEBUG-v015]
2026-06-19 01:13:58 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-all Global F1 fallback: getInputHelpSurface() + onKeyDown opens per-surface InputHelpDialogFragment [branch: DEBUG-v015]
2026-06-19 01:13:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/InputHelpFirstRunHint.kt spec-all New one-shot first-run F1 hint for non-touch devices (+ unit test) [branch: DEBUG-v015]
2026-06-19 01:13:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsActivity.kt spec-all Declare input-help surface on F1-gap screens (Statistics/KeybindingRemap/AuthSessions) [branch: DEBUG-v015]
2026-06-19 01:13:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-all Show first-run F1 hint on landing [branch: DEBUG-v015]
2026-06-19 01:13:58 app_v2/src/main/res/values/strings_input.xml spec-all keybinding_f1_hint EN/RU/UK [branch: DEBUG-v015]
2026-06-19 01:27:28 PLAN/S0501_camera-ocr-layout-dark-only-theming.md spec-check Audit S0501 -> Verified; PASS 8 / WARN 0 / FAIL 0 / MANUAL 1 / EXEMPT 1 [branch: DEBUG-v015]
2026-06-19 01:27:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameraocr/CameraOcrTranslateActivity.kt spec-check Remove S0501 debug tag (Verified) [branch: DEBUG-v015]
2026-06-19 01:27:32 PLAN/S0523_menu-quick-capture-device-folders/INDEX.md spec-dev Implement S0523 phases 01-06: quick voice/video/photo capture from the main overflow menu into the phone public folders, with per-entry settings toggles and capability gating. Final packaging build/finalization deferred - concurrent IDE holds app_v2/build lock. [branch: DEBUG-v015]
2026-06-19 01:30:55 temp/done/S0505_receiveshare-not-baseactivity.md spec-quiz S0505: BlockQuestions -> Archived (WontFix BaseActivity migration; transparent dialog-host activity is by design outside BaseActivity contract) [branch: DEBUG-v015]
2026-06-19 01:35:40 PLAN/S0526_widget-dictaphone-resource-destination.md spec Fill strategic spec S0526 (widget dictaphone resource destination); Draft -> Approved [branch: DEBUG-v015]
2026-06-19 01:37:25 PLAN/S0526_widget-dictaphone-resource-destination.md spec S0526 owner decisions: shared mic destination, network+local fallback, system notification [branch: DEBUG-v015]
2026-06-19 01:38:07 PLAN/S0523_menu-quick-capture-device-folders.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 01:38:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainQuickCaptureMenuManager.kt spec-dev Main-menu quick capture: 3 overflow entries + voice/camera capture engines + MainActivity wiring, capability-gated [branch: DEBUG-v015]
2026-06-19 01:38:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev 3 quick-capture settings toggles wired (AppSettings/DataStore/layout portrait+land/presets), capability-gated [branch: DEBUG-v015]
2026-06-19 01:38:07 app_v2/src/main/java/com/sza/fastmediasorter/util/CaptureDestinationPolicy.kt spec-dev Public recordings destination resolver + Recordings classifier mapping for MediaStore indexing [branch: DEBUG-v015]
2026-06-19 01:38:07 app_v2/src/main/res/values/strings.xml spec-dev Quick-capture menu labels + toggle titles/summaries + voice dialog strings, EN/RU/UK [branch: DEBUG-v015]
2026-06-19 01:40:42 PLAN/S0479_settings-operations-section-decomposition.md spec-dev All 6 phases done; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 01:40:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev Decompose OperationsSettingsFragment (1245->604 LOC): delegate sections/destinations/scheduled/capture/gestures to 5 helper managers [branch: DEBUG-v015]
2026-06-19 01:40:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsSectionsManager.kt spec-dev New: expandable-section + prefs helper (S0479 P3) [branch: DEBUG-v015]
2026-06-19 01:40:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsDestinationsManager.kt spec-dev New: destinations list helper (S0479 P1) [branch: DEBUG-v015]
2026-06-19 01:40:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsScheduledManager.kt spec-dev New: scheduled-operations helper (S0479 P2) [branch: DEBUG-v015]
2026-06-19 01:40:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsCaptureManager.kt spec-dev New: capture (camera/video/mic) helper (S0479 P5) [branch: DEBUG-v015]
2026-06-19 01:40:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt spec-dev New: screenshot-gesture overlay helper, noLegal (S0479 P6) [branch: DEBUG-v015]
2026-06-19 01:41:21 PLAN/S0526_widget-dictaphone-resource-destination/INDEX.md spec-tech Create tactical plan for S0526 (3 phases) [branch: DEBUG-v015]
2026-06-19 01:41:21 PLAN/S0526_widget-dictaphone-resource-destination.md spec-tech S0526 status -> Tactical [branch: DEBUG-v015]
2026-06-19 01:56:00 PLAN/S0479_settings-operations-section-decomposition.md spec-test-device Device run on R5CY9070WNB (standard-debug) -> PASS/PARTIAL/SKIPPED 6/1/1, crashes 0, 4/4 S0479 tags fired [branch: DEBUG-v015]
2026-06-19 02:07:56 app_v2/src/main/res/layout/fragment_settings_playback.xml Settings: Black Screen button toggle Move ‘Show Black Screen button’ settings toggle from Operations>Other features to Playback>Player interface and commands group (portrait + landscape); relocate its ViewBinding wiring from OperationsSettingsFragment to PlaybackSettingsFragment [branch: DEBUG-v015]
2026-06-19 02:15:44 PLAN/S0523_menu-quick-capture-device-folders.md spec-dev S0523 simplification per owner feedback: removed 3 redundant settings toggles (quick voice/video/photo); main-menu quick-capture entries now gated by the existing capture toggles (micRecordingEnabled / !disableVideoCapture / !disableCameraCapture). Device-verified voice end-to-end on R5CY9070WNB. [branch: DEBUG-v015]
2026-06-19 02:21:41 app_v2/src/main/java/com/sza/fastmediasorter/data/capture/MicRecordingSaver.kt spec-dev S0526 P01.1: shared MicRecordingSaver [branch: DEBUG-v015]
2026-06-19 02:22:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt spec-dev S0526 P01.2: delegate mic save to shared saver [branch: DEBUG-v015]
2026-06-19 02:23:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt spec-dev S0526 P01.2: inject MicRecordingSaver [branch: DEBUG-v015]
2026-06-19 02:45:23 PLAN/S0517_calculator-april-fools-dangerous-system-dialog.md spec-quiz S0517: Draft -> Approved via quiz (4 questions); keep prank as-is, link forced to English Wikipedia [branch: DEBUG-v015]
2026-06-19 02:46:27 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt spec-all S0526 P02: widget recorder delegates finished clip to shared MicRecordingSaver (selected destination + network upload + local fallback + background notification) [branch: DEBUG-v015]
2026-06-19 02:46:27 app_v2/src/main/res/values/strings.xml spec-all S0526 P02: add quick_recorder_saved_to result string (EN/RU/UK lockstep) [branch: DEBUG-v015]
2026-06-19 02:46:27 docs/ALL_FEATURES.jsonl spec-all S0526 P03: record Quick Audio Recorder widget selected-destination capability [branch: DEBUG-v015]
2026-06-19 02:46:28 PLAN/S0526_widget-dictaphone-resource-destination/INDEX.md spec-all S0526 P02-P03 done; insert BlockNeedUserTest debug tags; In Progress -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 02:47:48 PLAN/S0520_dedup-dual-inputsurface-enums.md spec-quiz S0520: BlockQuestions -> Draft via quiz (2 questions: canonical domain InputSurface + rename UI-enum; no-equiv UI surfaces -> null) [branch: DEBUG-v015]
2026-06-19 02:48:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/calculator/helpers/CalculatorAprilFoolsPrankManager.kt spec-all S0517: calculator April Fools prank link always opens English Wikipedia (drop RU/UK locale URLs) [branch: DEBUG-v015]
2026-06-19 02:49:27 PLAN/S0517_calculator-april-fools-dangerous-system-dialog.md spec-all Pipeline Verified: S0517 (NO BUILD; build deferred) [branch: DEBUG-v015]
2026-06-19 02:49:34 PLAN/S0524_dead-browse-selection-manager-stub.md spec-all Compact spec: S0524 (dead BrowseSelectionManager stub) [branch: DEBUG-v015]
2026-06-19 02:51:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseSelectionManager.kt spec-all S0524: delete dead BrowseSelectionManager stub (37 LOC, no consumers; live impl in selection/) [branch: DEBUG-v015]
2026-06-19 02:52:30 PLAN/S0527_gif-first-frame-mediastore.md spec-all Fill strategic spec S0527 (GIF first-frame via MediaStore); Draft -> Approved [branch: DEBUG-v015]
2026-06-19 02:54:20 PLAN/S0527_gif-first-frame-mediastore/INDEX.md spec-tech Create tactical plan for S0527 (2 phases); Approved -> Tactical [branch: DEBUG-v015]
2026-06-19 02:58:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicateGroupAdapter.kt DuplicateGroupAdapter S0525: targeted payload selection updates, drop full-list notifyDataSetChanged on selection change [branch: DEBUG-v015]
2026-06-19 02:59:05 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveGifFirstFrameUseCase.kt spec-all S0527: route GIF first-frame save through shared MediaStore-aware LocalDestinationWriter (no EACCES on scoped storage); pre-Q media scan only [branch: DEBUG-v015]
2026-06-19 02:59:05 PLAN/S0527_gif-first-frame-mediastore/INDEX.md spec-all S0527 P01-P02 done; insert BlockNeedUserTest debug tag; Tactical -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 03:01:31 PLAN/S0525_duplicate-group-adapter-full-rebind.md spec-all Pipeline Implemented (NO BUILD): S0525 targeted selection updates [branch: DEBUG-v015]
2026-06-19 03:05:03 scripts/spec_catalog/spec-next-preflight.ps1 spec-next Fix -Exclude CSV not splitting when invoked via pwsh -File (single-element array); split comma-joined ids so round-memory exclusion works [branch: DEBUG-v015]
2026-06-19 03:06:04 PLAN/S0519_surface-aware-gamepad-resolution.md spec-all S0519 surface-aware gamepad resolution - strategic + tactical spec (Variant C: namespace browser actions via browser.* commandId, no Room migration) [branch: DEBUG-v015]
2026-06-19 03:07:04 app_v2/src/main/java/com/sza/fastmediasorter/core/input/KeyBindingManager.kt spec-all S0519: surface-aware multi-candidate resolve; GamepadInputManager routes browser gamepad through resolver; browser.* CommandIds + BROWSER_ACTIONS group + trilingual labels + default bindings; test inversion [branch: DEBUG-v015]
2026-06-19 03:08:12 PLAN/spec-catalog.jsonl spec-next Session: 2 advanced to BlockNeedUserTest (S0526 widget-dictaphone, S0527 gif-first-frame-mediastore), 3 deferred (S0528 dep-unverified, S0525 concurrent, S0520 skip-cache S0519-coupled) [branch: DEBUG-v015]
2026-06-19 10:04:19 temp/done/S0501_camera-ocr-layout-dark-only-theming.md spec-arc Archive S0501 (camera-ocr-layout-dark-only-theming); Verified -> Archived, moved to temp/done/ [branch: DEBUG-v015]
2026-06-19 10:04:20 temp/done/S0511_dialog-keyboard-consistency.md spec-arc Archive S0511 (dialog-keyboard-consistency); Verified -> Archived, moved to temp/done/ [branch: DEBUG-v015]
2026-06-19 10:04:21 temp/done/S0517_calculator-april-fools-dangerous-system-dialog.md spec-arc Archive S0517 (calculator-april-fools-dangerous-system-dialog); Verified -> Archived, moved to temp/done/ [branch: DEBUG-v015]
2026-06-19 10:04:22 temp/done/S0524_dead-browse-selection-manager-stub.md spec-arc Archive S0524 (dead-browse-selection-manager-stub); Verified -> Archived, moved to temp/done/ [branch: DEBUG-v015]
2026-06-19 10:14:18 PLAN/S0525_duplicate-group-adapter-full-rebind.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/INCONCLUSIVE 3/0/3; flicker criterion not automatable, kept BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 10:15:40 PLAN/spec-catalog.jsonl spec-next Session: 1 processed, 0 verified, 1 blocked (S0525 Implemented -> BlockNeedUserTest) [branch: DEBUG-v015]
2026-06-19 10:27:34 PLAN/S0528_consolidate-savetodownloads.md spec-quiz S0528: Draft -> Approved via quiz (2 questions: collision=overwrite, sequencing=now) [branch: DEBUG-v015]
2026-06-19 10:46:26 PLAN/S0528_consolidate-savetodownloads/INDEX.md spec-tech Create tactical plan for S0528 (3 phases) [branch: DEBUG-v015]
2026-06-19 10:46:26 PLAN/S0528_consolidate-savetodownloads/PHASE_01__route-frame-capture.md spec-tech Phase 01: route-frame-capture [branch: DEBUG-v015]
2026-06-19 10:46:26 PLAN/S0528_consolidate-savetodownloads/PHASE_02__route-link-download.md spec-tech Phase 02: route-link-download [branch: DEBUG-v015]
2026-06-19 10:46:26 PLAN/S0528_consolidate-savetodownloads/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v015]
2026-06-19 10:46:26 PLAN/S0528_consolidate-savetodownloads.md spec-tech Status -> Tactical [branch: DEBUG-v015]
2026-06-19 10:58:32 PLAN/S0529_network-audio-always-continue.md spec Add strategic spec S0529 for honoring ALWAYS_CONTINUE on network/cloud audio (timeout bump + service-side streaming) [branch: DEBUG-v015]
2026-06-19 10:58:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0528 P01: inject shared LocalDestinationWriter + classifier fields [branch: DEBUG-v015]
2026-06-19 10:58:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt spec-dev S0528 P01: pass shared writer/classifier to SaveVideoFrameManager [branch: DEBUG-v015]
2026-06-19 10:58:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt spec-dev S0528 P01: route frame save to Downloads through shared writer (overwrite) [branch: DEBUG-v015]
2026-06-19 10:58:59 app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkDownloadWriter.kt spec-dev S0528 P02: route link save to Downloads through shared writer (overwrite); drop dup MediaStore block [branch: DEBUG-v015]
2026-06-19 10:58:59 PLAN/S0528_consolidate-savetodownloads.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 10:59:25 PLAN/S0529_network-audio-always-continue.md spec-update Refinement (Codex, focus: completeness) [branch: DEBUG-v015]
2026-06-19 11:03:57 PLAN/S0529_network-audio-always-continue/research/01__service-network-streaming.md spec S0529 research-1 resolved: service can stream SFTP/SMB/FTP/cloud directly via existing protocol DataSource factories; add research 03 (next-track gap) [branch: DEBUG-v015]
2026-06-19 11:04:42 PLAN/S0528_consolidate-savetodownloads.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/INCONCLUSIVE 2/0/4; behavioural criteria not automatable, kept BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 11:21:15 PLAN/S0529_network-audio-always-continue.md spec S0529 owner decisions locked: connect/transfer timeout split + adaptive transfer, throttle-bounded next-track streaming prefetch, exit short-window-then-handoff; research 2/3/4 resolved [branch: DEBUG-v015]
2026-06-19 11:29:31 PLAN/S0529_network-audio-always-continue/INDEX.md spec-all Create tactical plan for S0529 (5 phases: timeout-split, service-streaming, continuability+exit, next-track-prefetch, cleanup) [branch: DEBUG-v015]
2026-06-19 12:10:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/NetworkAwareMediaSourceFactory.kt spec-all S0529 F3: service-side network/cloud audio streaming (NetworkAwareMediaSourceFactory) + connect/transfer timeout split + exit honours ALWAYS_CONTINUE for streamed audio + handoff-failed message (EN/RU/UK) [branch: DEBUG-v015]
2026-06-19 12:12:10 PLAN/S0529_network-audio-always-continue.md spec-all Pipeline BlockNeedUserTest: S0529 implemented (Phase 01-03, 04 folded), full debug build PASS, smoke launch OK on emulator; awaiting real slow-SFTP device test by owner [branch: DEBUG-v015]
2026-06-19 12:15:26 PLAN/S0531_player-keyboard-operation-shortcuts.md spec Add strategic spec S0531 for player keyboard number-key shortcuts on copy/move operation buttons [branch: DEBUG-v015]
2026-06-19 12:20:23 PLAN/S0421_windows-sftp-folder-share-companion.md spec-quiz S0421: Draft -> Approved via quiz (4 questions): MVP=level-A-first, level-B reuses SFTP over P2P tunnel with own UI card, persistent unattended pairing, standard flavor only [branch: DEBUG-v015]
2026-06-19 12:27:22 PLAN/S0531_player-keyboard-operation-shortcuts/INDEX.md spec-tech Create tactical plan for S0531 (4 phases + 4 research artifacts) [branch: DEBUG-v015]
2026-06-19 12:27:22 PLAN/S0531_player-keyboard-operation-shortcuts.md spec-tech S0531 Status -> Tactical [branch: DEBUG-v015]
2026-06-19 12:29:09 app_v2/src/main/java/com/sza/fastmediasorter/domain/input/CommandId.kt S0531 Phase 01.1 Add OPERATION_SLOT_1..10 command id constants [branch: DEBUG-v015]
2026-06-19 12:31:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/keybinding/KeybindingRemapViewModel.kt S0531 Phase 01.2 Route sorting.op_slot_* to OPERATION_SLOTS group; add CommandGroup value [branch: DEBUG-v015]
2026-06-19 12:33:11 app_v2/src/main/assets/input/default_bindings.json S0531 Phase 01.3 Add default digit/numpad bindings for op_slot_1..10 [branch: DEBUG-v015]
2026-06-19 12:36:42 app_v2/src/main/res/values/strings_input.xml S0531 Phase 01.4 Add op_slot 1..10 labels + operation_slots group label (EN/RU/UK) [branch: DEBUG-v015]
2026-06-19 12:38:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ S0532 Fix keyboard MOVE shortcut toggling the hidden move-panel header on non-writable resources: extracted shared resolvePlayerFilePermissions() (CommandPanelPermissions.kt) as single source of truth for canWrite/canRead, added CommandPanelController.isMoveAvailable() mirroring move-panel visibility (enableMoving + populated destinations + write permission), and gated PlayerKeyboardCallbackImpl.canMoveCurrent() on it. Parked S0533 for the analogous COPY desync. [branch: DEBUG-v015]
2026-06-19 12:46:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/UiSurface.kt S0520 Dedup surface enums: rename UI InputSurface -> UiSurface + toResolveSurface() mapping; delete GamepadInputManager.Surface (use domain InputSurface); update KeyboardShortcutHandler/Player/Browse/Main callers + tests. NO-BUILD. [branch: DEBUG-v015]
2026-06-19 12:56:31 app_v2/src/main/java/com/sza/fastmediasorter/domain/input/usecase/ResetGroupUseCase.kt S0531 Phase 01.2 Add OPERATION_SLOTS branch to exhaustive when over CommandGroup [branch: DEBUG-v015]
2026-06-19 13:00:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt S0531 Phase 02.1 Add onOperationSlot callback + digit-slot dispatch in handleCommand [branch: DEBUG-v015]
2026-06-19 13:01:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ S0533 Fix keyboard COPY shortcut toggling the hidden copy-panel header when copying is disabled or no destinations are set: added CommandPanelController.isCopyAvailable() mirroring copy-panel visibility (enableCopying + populated destinations, no write-permission check), and gated PlayerKeyboardCallbackImpl.canCopyCurrent() on it. Parallel to S0532 MOVE fix. [branch: DEBUG-v015]
2026-06-19 13:03:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt S0531 Phase 02.2 Add triggerSlotInAddressableGroup with Copy-priority addressable-group resolution [branch: DEBUG-v015]
2026-06-19 13:05:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDialogAndUiStateManager.kt S0531 Phase 02.3 Add triggerOperationSlot seam delegating to DestinationButtonsManager [branch: DEBUG-v015]
2026-06-19 13:05:25 PLAN/S0479_settings-operations-section-decomposition.md spec-test-device Device run on emulator-5554 (API 35) -> PASS 9/0/1 skipped; all 4 managers wired; 8 S0479 debug tags; 0 crashes [branch: DEBUG-v015]
2026-06-19 13:07:19 PLAN/S0479_settings-operations-section-decomposition.md spec-check Audit S0479 -> Verified; PASS 10/WARN 0/FAIL 0; 5 debug tags removed; 519 LOC fragment, 5 managers wired, on-device PASS [branch: DEBUG-v015]
2026-06-19 13:07:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsSectionsManager.kt spec-check S0479: removed debug tag [branch: DEBUG-v015]
2026-06-19 13:07:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsDestinationsManager.kt spec-check S0479: removed debug tag [branch: DEBUG-v015]
2026-06-19 13:07:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsScheduledManager.kt spec-check S0479: removed debug tag [branch: DEBUG-v015]
2026-06-19 13:07:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsCaptureManager.kt spec-check S0479: removed debug tag [branch: DEBUG-v015]
2026-06-19 13:07:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt spec-check S0479: removed debug tag [branch: DEBUG-v015]
2026-06-19 13:07:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt S0531 Phase 02.4 Override onOperationSlot routing to triggerOperationSlot seam [branch: DEBUG-v015]
2026-06-19 13:11:33 app_v2/src/main/java/com/sza/fastmediasorter/core/input/HardwareKeyboardDetector.kt S0531 Phase 03.1 Add HardwareKeyboardDetector + KeyBindingManager.triggersFor [branch: DEBUG-v015]
2026-06-19 13:15:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt S0531 Phase 03.2 Render slot number badges on addressable group when hardware keyboard attached [branch: DEBUG-v015]
2026-06-19 13:18:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerFileOpsInitializer.kt S0531 Phase 03.3 Wire HardwareKeyboardDetector + bound-key glyph provider into DestinationButtonsManager [branch: DEBUG-v015]
2026-06-19 13:20:05 scripts/quality/assert-em-dash.ps1 neuroslop gate Add em-dash/en-dash ratchet detector (long dashes in src/main *.kt -> hyphen); register in assert-neuroslop umbrella; seed baseline 39; add dash rule to CLAUDE.md Sec1 + Rule 19 [branch: DEBUG-v015]
2026-06-19 13:20:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt S0531 Phase 03.4 Refresh slot badges on keyboard attach/detach via onConfigurationChanged [branch: DEBUG-v015]
2026-06-19 13:23:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt S0531 Phase 03 tags Insert S0531 BlockNeedUserTest debug probes (slot dispatch + badge refresh) [branch: DEBUG-v015]
2026-06-19 13:27:13 PLAN/S0531_player-keyboard-operation-shortcuts.md spec-dev S0531 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 13:27:13 app_v2/src/main/java/com/sza/fastmediasorter/domain/input/CommandId.kt spec-dev S0531 Phase 01: op_slot_1..10 commands + OPERATION_SLOTS group + digit/numpad default bindings + EN/RU/UK labels [branch: DEBUG-v015]
2026-06-19 13:27:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt spec-dev S0531 Phase 02: digit-slot dispatch + Copy-priority addressable-group resolution via performClick reuse [branch: DEBUG-v015]
2026-06-19 13:27:13 app_v2/src/main/java/com/sza/fastmediasorter/core/input/HardwareKeyboardDetector.kt spec-dev S0531 Phase 03: hardware keyboard detection + slot-number badges on addressable group [branch: DEBUG-v015]
2026-06-19 13:33:30 docs/ARCHITECTURE.md docs/ARCHITECTURE.md, app_v2/.../values/themes.xml Document MANDATORY button taxonomy (role -> Widget.FastMediaSorter.Button.* style) in ARCHITECTURE.md + point-of-use pointer comment above the family in themes.xml [branch: DEBUG-v015]
2026-06-19 13:33:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceScanManager.kt S0534 Make Special Folders and Quick Select groups collapsible in the folder selection dialog [branch: DEBUG-v015]
2026-06-19 13:45:53 PLAN/S0535_unify-collapsible-groups.md spec Add strategic spec S0535 for collapsible-group unification across activities [branch: DEBUG-v015]
2026-06-19 13:47:06 PLAN/S0536_unify-ui-togglers.md spec Add strategic spec S0536 for UI toggler unification (recommended toggler form) [branch: DEBUG-v015]
2026-06-19 14:00:05 PLAN/S0535_unify-collapsible-groups/INDEX.md spec-tech Create tactical plan for S0535 (6 phases: unified header, orchestrator+store+migration, settings/editors/player/lists migration, docs) [branch: DEBUG-v015]
2026-06-19 14:00:05 PLAN/S0535_unify-collapsible-groups.md spec-tech S0535 Status -> Tactical [branch: DEBUG-v015]
2026-06-19 14:07:33 PLAN/S0536_unify-ui-togglers.md spec-quiz S0536: resolve 5 design forks via quiz (dialog scope=all, class=Material3 MaterialSwitch, scope=on/off only) [branch: DEBUG-v015]
2026-06-19 14:07:33 PLAN/S0537_unify-selection-checkboxes.md spec-draft Park S0537: unify selection checkboxes (Pattern B), split from S0536 per owner [branch: DEBUG-v015]
2026-06-19 14:27:14 PLAN/S0538_unify-dialog-action-buttons.md spec Add strategic spec S0538 for dialog OK/Cancel button unification [branch: DEBUG-v015]
2026-06-19 14:35:59 PLAN/S0536_unify-ui-togglers/INDEX.md spec-tech Create tactical plan for S0536 (5 phases: component class swap, theme switch style, dialog switch migration, checkbox-to-switch rows, docs cleanup) + research/01 inventory; Approved -> Tactical [branch: DEBUG-v015]
2026-06-19 14:37:08 PLAN/S0541_camera-ocr-dialog-hardcoded-colors.md spec-draft Park S0541: hardcoded hex colors in dialog_camera_ocr_settings (Rule 19), auto-captured during S0536 inventory [branch: DEBUG-v015]
2026-06-19 14:40:31 PLAN/S0538_unify-dialog-action-buttons/INDEX.md spec-tech Create tactical plan for S0538 (6 phases: styles, theme seam, builder migration, custom layouts, bottom sheets, docs) [branch: DEBUG-v015]
2026-06-19 14:40:31 PLAN/S0538_unify-dialog-action-buttons.md spec-tech S0538 Status -> Tactical; owner sign-off palette+scope 2026-06-19 [branch: DEBUG-v015]
2026-06-19 14:43:55 app_v2/src/main/res/values/themes.xml ui S0538 Phase 01: add dialog action-button styles (DialogConfirm green, DialogCancel outlined, DialogDestructive red) [branch: DEBUG-v015]
2026-06-19 14:44:10 app_v2/src/main/res/values/dimens.xml ui S0538 Phase 01: add dialog_action_button_min_height 56dp + dialog_action_button_gap 16dp [branch: DEBUG-v015]
2026-06-19 14:47:05 docs/ARCHITECTURE.md docs/ARCHITECTURE.md Button Taxonomy doc: note unified buttons must scale with global Compact elements mode (per-surface), and exempt the S0538 dialog action pair (DialogConfirm/Cancel/Destructive) from compact shrinking + from the general role taxonomy [branch: DEBUG-v015]
2026-06-19 14:53:41 app_v2/src/main/res/values/themes.xml ui S0538 Phase 01: dialog action-button styles (?attr-sized) + compact overlay + base-theme attr bindings [branch: DEBUG-v015]
2026-06-19 14:53:57 app_v2/src/main/res/values/attrs.xml ui S0538 Phase 01: declare dialogActionButtonMinHeight + dialogActionButtonGap theme attrs [branch: DEBUG-v015]
2026-06-19 14:53:57 app_v2/src/main/res/values/dimens.xml ui S0538 Phase 01: compact dialog action-button dimens (28dp/8dp) beside large (56dp/16dp) [branch: DEBUG-v015]
2026-06-19 15:13:54 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt ui S0538 Phase 02: apply compact dialog-button overlay app-wide in onCreate [branch: DEBUG-v015]
2026-06-19 15:15:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLayoutModePrefs.kt ui S0538 Phase 02: add applyCompactDialogButtonsOverlay (sync compact mirror) [branch: DEBUG-v015]
2026-06-19 15:15:11 app_v2/src/main/res/values/themes.xml ui S0538 Phase 02: MaterialAlertDialog button-bar seam + attach materialAlertDialogTheme [branch: DEBUG-v015]
2026-06-19 15:16:15 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SaveGifFirstFrameUseCase.kt S0527 Remove BlockNeedUserTest probe tag; S0527 Verified [branch: DEBUG-v015]
2026-06-19 15:17:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateUiUpdater.kt Settings / Player UI Make ‘Compact bottom buttons’ setting player-centric: rename to ‘Compact player buttons’ + reword desc (EN/RU/UK); detach small-controls effect from Browse screen (near-dead remnant after S0374) - browse compaction now driven solely by Compact elements; removed showSmallControls from BrowseState [branch: DEBUG-v015]
2026-06-19 15:20:05 PLAN/S0479_settings-operations-section-decomposition.md spec-arc Archive S0479 (settings-operations-section-decomposition) -> temp/done/ [branch: DEBUG-v015]
2026-06-19 15:20:06 PLAN/S0527_gif-first-frame-mediastore.md spec-arc Archive S0527 (gif-first-frame-mediastore) -> temp/done/ [branch: DEBUG-v015]
2026-06-19 15:45:25 PLAN/S0520_dedup-dual-inputsurface-enums.md;PLAN/S0510_global-input-cheatsheet-key.md spec-lifecycle Step 1 release-path verification: assembleStandardDebug green + targeted unit tests green (Gamepad/KeyboardShortcut/InputHelpFirstRunHint); S0520 + S0510 Implemented -> Verified [branch: DEBUG-v015]
2026-06-19 15:59:31 PLAN/S0534_collapsible-folder-picker-groups.md spec-check Audit S0534 -> Verified; device PASS folder-picker collapse/expand both orientations + persistence, static PASS [branch: DEBUG-v015]
2026-06-19 15:59:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceScanManager.kt spec-check Remove S0534 BlockNeedUserTest debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 16:06:25 PLAN/S0542_download-link-from-clipboard.md spec Scaffold strategic spec skeleton S0542 [branch: DEBUG-v015]
2026-06-19 16:17:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt S0531 continuous numbering + TV remote Continuous slot numbering across both expanded groups; show badges for any non-touch input (TV remote/D-pad/keyboard); drop redundant HardwareKeyboardDetector [branch: DEBUG-v015]
2026-06-19 16:18:24 PLAN/S0532_keyboard-move-guard.md spec-check Audit S0532 -> Verified; device PASS both branches (read-only available=false panel hidden; writable available=true panel toggled) [branch: DEBUG-v015]
2026-06-19 16:18:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt spec-check Remove S0532 BlockNeedUserTest debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 16:19:51 PLAN/S0543_features-inventory-docs-audit.md spec Scaffold strategic spec skeleton S0543 [branch: DEBUG-v015]
2026-06-19 16:21:17 PLAN/S0542_download-link-from-clipboard/INDEX.md spec-tech Create tactical plan for S0542 (4 phases): download-by-link main-menu entry reusing external-link receiver [branch: DEBUG-v015]
2026-06-19 16:21:17 PLAN/S0542_download-link-from-clipboard.md spec-tech S0542 strategic spec filled (from inbox + research) and advanced Draft -> Approved -> Tactical [branch: DEBUG-v015]
2026-06-19 16:22:35 PLAN/S0531_player-keyboard-operation-shortcuts.md spec-dev S0531 refinement: continuous slot numbering across both expanded groups (Copy 1..N, Move N+1..); badges + dispatch for any non-touch input (TV remote / D-pad / keyboard); removed redundant HardwareKeyboardDetector (reuse BaseActivity.isNonTouchInputActive) [branch: DEBUG-v015]
2026-06-19 16:26:27 PLAN/S0533_keyboard-copy-guard.md spec-check Audit S0533 -> Verified; device PASS both branches (copy disabled available=false panel hidden; copy enabled+dest available=true panel toggled) [branch: DEBUG-v015]
2026-06-19 16:26:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerKeyboardCallbackImpl.kt spec-check Remove S0533 debug tag + now-unused Timber import on Verified flip [branch: DEBUG-v015]
2026-06-19 16:32:57 PLAN/S0543_features-inventory-docs-audit.md spec-all Strategic spec S0543 (auto-approved): features inventory + docs/site audit [branch: DEBUG-v015]
2026-06-19 16:37:24 PLAN/S0543_features-inventory-docs-audit/INDEX.md spec-all Tactical plan S0543: 7 phases (extraction -> inventory -> showcase -> dev/release mandates -> docs/site -> gate) [branch: DEBUG-v015]
2026-06-19 16:41:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt Settings / Player UI Move ‘Compact player buttons’ toggle from General settings to Player interface group (Playback fragment), portrait + landscape; relocate binding (listener+observer) from General helpers to PlaybackSettingsFragment; collapse leftover compact-elements row to full width in General [branch: DEBUG-v015]
2026-06-19 16:41:47 .claude/commands/spec-dev.md spec-all S0543 P04/P05: add FuncOp DELETE (dev-time removed lifecycle) to spec-dev; skill-release Step 12b enforces flavor-label-from-inventory + Last updated bump + EN/RU/UK parity [branch: DEBUG-v015]
2026-06-19 16:50:38 PLAN/S0483_crash-report-email-button.md spec-check Audit S0483 -> Verified; device PASS report button shows-on-error/hidden-on-info + ACTION_SEND to Gmail with log zip; recipient/body INCONCLUSIVE (no Gmail account on AVD); landscape action-row clipping parked as S0544 [branch: DEBUG-v015]
2026-06-19 16:50:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ScrollableTextDialog.kt spec-check Remove S0483 BlockNeedUserTest debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 16:51:03 scripts/all_features/scan_surface.ps1 spec-all S0543 P01: read-only surface-scan tool (inventory x catalog -> per-area worksheets + coverage seed) [branch: DEBUG-v015]
2026-06-19 16:55:08 app_v2/src/main/res/layout/dialog_camera_ocr_settings.xml S0541 Replace hardcoded hex colors in camera OCR settings and capture keybinding dialogs with theme attr tokens (colorOnSurface/colorOnSurfaceVariant/colorError) [branch: DEBUG-v015]
2026-06-19 16:55:20 app_v2/src/main/res/layout/dialog_network_delete_confirmation.xml S0540 dialog_network_delete_confirmation: migrate hardcoded dimens/text sizes to @dimen tokens and platform color attrs to Material3 (?attr/colorOnSurface[Variant]); portrait + land [branch: DEBUG-v015]
2026-06-19 17:00:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/main S0542 Add manual Download-by-link main-menu entry: clipboard-prefilled dialog routes the link through the existing external-link receiver; gated by the existing link auto-download setting; new MainLinkDownloadMenuManager + MainLinkDownloadManager, MainActivity wiring, EN/RU/UK strings. [branch: DEBUG-v015]
2026-06-19 17:00:30 app_v2/src/main/res/layout-land/dialog_error_detail.xml S0544 Landscape error/detail dialog: pin icon action row at top so it is never clipped off-screen (mirrors dialog_resource_picker); fixes bottom action row clipped in landscape [branch: DEBUG-v015]
2026-06-19 17:10:12 PLAN/S0545_camera-capabilities-expansion.md S0545 Add strategic camera capabilities expansion spec based on CameraX and permission research [branch: DEBUG-v015]
2026-06-19 17:11:05 docs/ALL_FEATURES.jsonl spec-all S0543 P02 Wave1: 17 verified flavor-fixes to inventory + new patch.ps1 field-patcher tool [branch: DEBUG-v015]
2026-06-19 17:15:17 PLAN/S0525_targeted-duplicates-selection-refresh.md spec-check Audit S0525 -> Verified; device PASS targeted refresh probe fires per selection change, checkbox flips, no flicker, negative-control 0 probes [branch: DEBUG-v015]
2026-06-19 17:15:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/duplicates/DuplicateGroupAdapter.kt spec-check Remove S0525 BlockNeedUserTest debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 17:24:46 PLAN/S0545_camera-capabilities-expansion.md spec-update Research-grounded strengthening of S0545 strategic spec: current-state findings (4.1), evidence-based phase boundary, manifest perms already present, Samsung control-layout owner steer, ADR-6/ADR-7, +4 risks [branch: DEBUG-v015]
2026-06-19 17:36:07 docs/ALL_FEATURES.jsonl spec-all S0543 P02 Wave2: new Game area + 14 ADDs, 22 flavor-fixes, 6 id-renames, 2 removed; +patch.ps1 -NewId rename [branch: DEBUG-v015]
2026-06-19 17:38:09 PLAN/S0546_stale-vr-quality-debug-log.md spec-draft Park S0546 (stale VR_QUALITY_DEBUG log, S0041 archived) + S0547 (extensions manager empty on lite/photos) - auto-captured during S0543 audit [branch: DEBUG-v015]
2026-06-19 17:45:42 PLAN/S0470_video-frame-clipboard.md spec-check Audit S0470 -> Verified; device PASS clipboard gate flag=true both players + save/copied toasts + destination files saved; cross-app paste INCONCLUSIVE (no AVD paste target, environmental) [branch: DEBUG-v015]
2026-06-19 17:45:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-check Remove S0470 debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 17:45:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt spec-check Remove S0470 debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 17:45:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/VideoPlayerTracksObserver.kt S0546 Remove stale VR_QUALITY_DEBUG log + KDoc orphaned after S0041 archived [branch: DEBUG-v015]
2026-06-19 17:46:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt settings S0547: hide Downloadable Extensions row on flavors with no downloadable sets (lite/photos) [branch: DEBUG-v015]
2026-06-19 17:47:54 docs/FEATURES.md spec-all S0543 P03: showcase reconciled (FEATURES.md+RU+UK) - removed 3 noLegal bullets, fixed 2 flavor labels, folder cap 10->30, removed-widget mention, date bump [branch: DEBUG-v015]
2026-06-19 17:49:50 PLAN/S0545_camera-capabilities-expansion.md spec-quiz S0545: Draft -> Approved via quiz (4 questions: audio policy, phasing, UI placement, autonomy) [branch: DEBUG-v015]
2026-06-19 17:52:04 docs/HOW_TO.md docs Fix feature availability table: Network Lite=N/Legacy=Y, Cloud Legacy=Y, DocViewer/EPUB/OCR Lite=N/Photos=N, ImageEditing XR=N; fix NAS and handoff scenario Available-in lines [branch: DEBUG-v015]
2026-06-19 17:52:08 docs/HOW_TO_RU.md docs Fix feature availability table (mirror of EN corrections) and prose Available-in lines for NAS and handoff scenarios [branch: DEBUG-v015]
2026-06-19 17:52:12 docs/HOW_TO_UK.md docs Fix feature availability table: added missing XR/noLegal column, applied same corrections as EN/RU; fix prose Available-in lines for NAS and handoff scenarios; update footer note to mention XR/noLegal [branch: DEBUG-v015]
2026-06-19 17:52:20 docs/README.md docs Fix: Kotlin badge 1.9.0->2.2.10, Glide 4.15.1->4.16.0, Room version->2.7.0, Legacy flavor description (add SMB/FTP/SFTP+cloud, not local-only), widget count claim (two->13+) [branch: DEBUG-v015]
2026-06-19 17:52:20 docs/README_RU.md docs Fix: Kotlin badge 1.9.0->2.2.10, Glide 4.15.1->4.16.0, Room version->2.7.0, Legacy flavor description, widget count claim (RU) [branch: DEBUG-v015]
2026-06-19 17:52:21 docs/README_UK.md docs Fix: Kotlin badge 1.9.0->2.2.10, Glide 4.15.1->4.16.0, Room version->2.7.0, Legacy flavor description, widget count claim (UK) [branch: DEBUG-v015]
2026-06-19 17:52:51 docs/QUICK_START.md, docs/QUICK_START_RU.md, docs/QUICK_START_UK.md, docs/FAQ.md, docs/FAQ_RU.md, docs/FAQ_UK.md docs Fix 3 factual errors: Legacy flavor now correctly described as having SMB/FTP/SFTP+cloud (not local-only); widget count corrected from ‘2 types’ to ‘variety’; Photos flavor added to slideshow background music flavor list in FAQ [branch: DEBUG-v015]
2026-06-19 17:57:31 docs/HOW_TO.md spec-all S0543 P06: fixed flavor matrix + README/QUICK_START/FAQ + index.html badge across EN/RU/UK to match shipped flavors (Legacy=cloud+network per owner) [branch: DEBUG-v015]
2026-06-19 17:57:32 scripts/all_features/validate.ps1 spec-all S0543 P07: strengthen validate gate - forbid spec-id as area prefix on active records [branch: DEBUG-v015]
2026-06-19 18:04:30 docs/FAQ.md, docs/FAQ_RU.md, docs/FAQ_UK.md, docs/QUICK_START.md, docs/QUICK_START_RU.md, docs/QUICK_START_UK.md docs Fix touch-zone 3x3 grid diagrams in FAQ (EN/RU/UK) to match canonical code mapping (TouchZoneConfig.kt get9ZoneTapAction); add missing slideshow background music section to FAQ_UK.md [branch: DEBUG-v015]
2026-06-19 18:04:59 docs/FEATURES.md, docs/FEATURES_RU.md, docs/FEATURES_UK.md showcase Add 5 missing showcase bullets (sleep timer, soft delete, download by link, Chromecast casting, video frame to clipboard) across EN/RU/UK [branch: DEBUG-v015]
2026-06-19 18:07:22 PLAN/S0548_hotfix-grid-filename-visibility.md spec Add strategic spec S0548 for grid no-thumbnail filename visibility (release blocker) [branch: DEBUG-v015]
2026-06-19 18:08:34 docs/FEATURES_RU.md spec-all S0543 P03/P06 follow-up: removed 3 noLegal screen-capture bullets from public RU/UK showcase, date+folder parity, 5 staleness-adds x3, touch-zone canon (FAQ x3), FAQ_UK slideshow section, index*.html Chromecast badge x3 - EN/RU/UK 53/53/53 parity [branch: DEBUG-v015]
2026-06-19 18:12:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRecyclerViewManager.kt S0548 Grid no-thumbnail planks span >=4 cube-widths so file name stays readable with/without overflow menu (supersedes S0419 halving) [branch: DEBUG-v015]
2026-06-19 18:31:03 PLAN/S0526_widget-dictaphone-resource-destination.md spec-check Audit S0526 -> Verified; device PASS all 4 scenarios (widget placed on launcher): selected-resource, no-dest->public Download, unreachable-SMB->local fallback+notification, in-app mic regression [branch: DEBUG-v015]
2026-06-19 18:31:03 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt spec-check Remove S0526 debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 18:31:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt spec-check Remove S0526 debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 18:32:56 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on emulator-5556 (API33): closed 7 (S0534/S0532/S0533/S0483/S0525/S0470/S0526), inconclusive 4 stay BlockNeedUserTest (S0461/S0523/S0512/S0531 - need arm64+noLegal / real camera / real pointer / detachable HW kbd), parked 1 (S0544); final fk compile PASS [branch: DEBUG-v015]
2026-06-19 18:54:02 docs/FEATURES.md, docs/FEATURES_RU.md, docs/FEATURES_UK.md showcase Add section 18 Bonus Mini-Game (Kryvavitsa and the Monster) to EN/RU/UK feature showcase docs [branch: DEBUG-v015]
2026-06-19 18:54:44 docs/FEATURES.md spec-all S0543: add Bonus Mini-Game (Kryvavitsa) section to public showcase EN/RU/UK; DOCS_MAP WHATS_NEW version/date + LIMITATIONS date normalized [branch: DEBUG-v015]
2026-06-19 18:56:30 docs/settings/settings-manifest.json spec-dev S0440 Phase 01 done: regenerated settings manifest against current scan (165->171 entries) + verify-mode test PASS [branch: DEBUG-v015]
2026-06-19 19:03:15 docs/settings/settings-annotations.json S0440 Create settings annotations JSON: one-sentence EN/RU/UK descriptions for all 171 settings entries [branch: DEBUG-v015]
2026-06-19 19:06:19 docs/settings/settings-annotations.json spec-dev S0440 Phase 02: trilingual (EN/RU/UK) what-it-does descriptions for all 169 settings keys [branch: DEBUG-v015]
2026-06-19 19:06:19 scripts/docs/check-settings-annotations.ps1 spec-dev S0440 Phase 02: settings annotations coverage/parity checker (dedups manifest keys; fails on missing/orphan/empty) [branch: DEBUG-v015]
2026-06-19 19:14:02 scripts/docs/render-settings-reference.ps1 spec-dev S0440 Phase 03: settings reference renderer (manifest+annotations+per-flavor availability -> EN/RU/UK + gitignored noLegal); deterministic/idempotent [branch: DEBUG-v015]
2026-06-19 19:14:02 docs/SETTINGS_REFERENCE.md spec-dev S0440 Phase 03: generated settings reference EN/RU/UK (SETTINGS_REFERENCE*.md) from app manifest [branch: DEBUG-v015]
2026-06-19 19:14:02 index.html spec-dev S0440 Phase 03: link Settings Reference card from public site (EN/RU/UK index) [branch: DEBUG-v015]
2026-06-19 19:14:02 .gitignore spec-dev S0440 Phase 03: gitignore docs/SETTINGS_REFERENCE_noLegal.md (noLegal-only) [branch: DEBUG-v015]
2026-06-19 19:19:05 scripts/quality/assert-settings-catalog-complete.ps1 spec-dev S0440 Phase 04: gate - settings-search layout catalog completeness (fails on a settings-row layout missing from SettingsSearchLayoutCatalog) [branch: DEBUG-v015]
2026-06-19 19:19:05 scripts/quality/assert-settings-doc-sync.ps1 spec-dev S0440 Phase 04: composite settings-doc drift gate (catalog + manifest-fresh + annotations + reference-render-diff) [branch: DEBUG-v015]
2026-06-19 19:19:05 scripts/post-change.ps1 spec-dev S0440 Phase 04: wire settings-doc-sync gate with a settings-path trigger [branch: DEBUG-v015]
2026-06-19 19:19:05 CLAUDE.md spec-dev S0440 Phase 04: Strict Rule 22 - settings change must regenerate manifest/reference/annotation (gate-enforced) [branch: DEBUG-v015]
2026-06-19 19:24:20 docs/DOCS_MAP.md spec-dev S0440 Phase 05: link Settings Reference under User Guides & Manuals (EN/RU/UK) [branch: DEBUG-v015]
2026-06-19 19:24:20 docs/ALL_FEATURES.jsonl spec-dev S0440 Phase 05: record Settings reference page capability (settings-navigation.settings-reference-page) [branch: DEBUG-v015]
2026-06-19 19:25:51 PLAN/S0440_settings-declaration-docs.md spec-check Audit S0440 -> Verified; PASS/WARN/FAIL 16/0/0 - manifest+annotations+reference+gate all in place, gate exits 0, deliberate-drift caught [branch: DEBUG-v015]
2026-06-19 20:18:18 PLAN/S0528_save-to-downloads-fallback.md spec-check Audit S0528 -> Verified; device PASS all 5 (frame->Downloads, link->Downloads, overwrite-not-dup, tags, S0522 notice on unreachable network) [branch: DEBUG-v015]
2026-06-19 20:18:18 app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkDownloadWriter.kt spec-check Remove S0528 debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 20:18:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SaveVideoFrameManager.kt spec-check Remove S0528 debug tag on Verified flip [branch: DEBUG-v015]
2026-06-19 21:17:57 PLAN/S0540_dialog-network-delete-hardcoded-dimens.md spec-check Audit S0540 -> Verified; dialog_network_delete_confirmation dimens/platform-attrs tokenized both orientations, 0 residual hardcodes [branch: DEBUG-v015]
2026-06-19 21:17:57 PLAN/S0541_camera-ocr-dialog-hardcoded-colors.md spec-check Audit S0541 -> Verified; camera-ocr + capture-keybinding dialog hex colors -> theme attrs, 0 residual hex [branch: DEBUG-v015]
2026-06-19 21:19:05 PLAN/spec-catalog.jsonl spec-next Session: 2 processed (S0540, S0541 Implemented->Verified, dialog token/color cleanup), 0 blocked; 7 skip-cached pre-release (S0542 drift; S0538/S0536/S0535/S0537/S0539/S0530 UI churn on active WIP) [branch: DEBUG-v015]
2026-06-19 21:40:48 PLAN/S0549_playback-random-order-fixes.md spec-dev Playback random-order fixes implemented; status -> BlockNeedUserTest [branch: DEBUG-v015]
2026-06-19 21:40:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt spec-dev S0549 Bug1: single-item timeline SHUFFLE/LOOP_LIST -> REPEAT_MODE_OFF so track ends and app nextFile() auto-advances [branch: DEBUG-v015]
2026-06-19 21:40:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt spec-dev S0549 Bug1: auto-advance probe at onAudioServicePlaybackEnded nextFile path [branch: DEBUG-v015]
2026-06-19 21:40:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt spec-dev S0549 Bug2: re-roll RANDOM order at fresh play-by-list session start (unseeded shuffle, browse cache untouched, file-tap excluded) [branch: DEBUG-v015]
2026-06-19 21:40:48 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/ResourceRepositoryImpl.kt spec-dev S0549 Bug2: replace contract-violating RANDOM comparator with .shuffled() (TimSort crash fix) [branch: DEBUG-v015]
2026-06-19 21:55:51 PLAN/ spec-arc Archive 15 Verified specs -> temp/done/ (S0440, S0470, S0483, S0510, S0520, S0525, S0526, S0528, S0532, S0533, S0534, S0540, S0541, S0543, S0546) [branch: DEBUG-v015]
2026-06-19 22:19:40 PLAN/S0497_play-store-listing-aso-rewrite/PHASE_02__listing-uploader.md spec-dev S0497 Step 02.3 validate pass run (owner-authorized): auth + Edit-store-listing rights confirmed; uk-UA not enabled in Play Console -> HTTP 400; status In Progress -> BlockExternal [branch: DEBUG-v015]
2026-06-19 22:23:56 app_v2/src/main/res/layout/activity_camera_ocr_translate.xml Camera OCR crop screen Fix OK/Retry buttons in crop action bar wrapping to two lines (circular OK) on narrow screens: add maxLines=1, fixed 48dp height, compact insets/padding to match the language buttons [branch: DEBUG-v015]
2026-06-19 22:26:13 scripts/release/publish-play-listing.py spec-dev S0497 02.3: fix Play language mapping (uk-UA folder -> uk language code); validate pass exits 0 for all 3 locales [branch: DEBUG-v015]
2026-06-19 22:27:11 PLAN/S0548_hotfix-grid-filename-visibility.md spec-arc Archive S0548 (hotfix-grid-filename-visibility) -> temp/done/; removed S0548 debug tag from BrowseRecyclerViewManager.kt [branch: DEBUG-v015]
2026-06-19 22:27:14 PLAN/S0542_download-link-from-clipboard.md spec-arc Archive S0542 (download-link-from-clipboard) -> temp/done/ [branch: DEBUG-v015]
2026-06-19 22:30:03 play/listing/captions.json spec-dev S0497 03.1: store-screenshot caption set (7 slots, EN/RU/UK) [branch: DEBUG-v015]
2026-06-19 22:33:47 app_v2/src/main/res/layout/item_resource_to_add.xml S0537 unify-selection-checkboxes Unify Pattern B selection checkboxes: convert 17 plain to MaterialCheckBox across item_resource_to_add, dialog_scheduled_operation (+land), dialog_network_delete_confirmation (+land) [branch: DEBUG-v015]
2026-06-19 22:34:45 app_v2/src/main/res/layout/item_media_file_grid.xml app_v2 File browser grid thumbnails: square corners (cardCornerRadius 0) for both thumb and no-thumb cells [branch: DEBUG-v015]
2026-06-19 22:38:45 scripts/release/capture-play-screenshots.ps1 spec-dev S0497 03.2: store-screenshot capture helper (adb.ps1 shot -> temp/play-shots/.png) [branch: DEBUG-v015]
2026-06-19 22:40:47 scripts/release/compose-play-screenshots.py spec-dev S0497 03.3: Pillow caption-overlay composer -> play/listing//images/phoneScreenshots (Play 2:1 bounds) [branch: DEBUG-v015]
2026-06-19 22:42:10 play/listing/{en-US,ru-RU,uk-UA}/{title,short_description,full_description}.txt spec-dev S0497 Phase 01: 9 Play-optimized listing texts (title/short/full x EN/RU/UK), decoupled from fastlane IzzyOnDroid source [branch: DEBUG-v015]
2026-06-19 22:43:19 PLAN/S0497_play-store-listing-aso-rewrite.md spec-dev S0497 all 4 phases done; status In Progress -> Implemented (live Play commit remains owner-gated) [branch: DEBUG-v015]
2026-06-19 22:45:07 PLAN/S0497_play-store-listing-aso-rewrite.md spec-check Audit S0497 -> Verified; PASS/WARN/FAIL 14/0/0; live Play commit owner-gated (manual) [branch: DEBUG-v015]
2026-06-19 22:45:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerNavigationManager.kt app_v2 S0550: guard PlayerActivity.dialogAndUiStateManager access in slideshow callbacks against init-ordering race (UninitializedPropertyAccessException on image open) [branch: DEBUG-v015]
2026-06-19 23:04:09 app_v2/src/main/res/values/themes.xml ui S0538 Phase 03: migrate ~55 bare AlertDialog.Builder confirm/cancel pair dialogs (~40 files) to MaterialAlertDialogBuilder so they inherit the unified dialog action seam; add red destructive theme overlay and apply it to 25 delete/remove/clear/reset builder dialogs (18 files); drop 2 redundant post-show getButton recolor hacks [branch: DEBUG-v015]
2026-06-19 23:16:50 app_v2/src/main/res/layout/dialog_delete.xml ui S0538 Phase 04: apply unified dialog action-button styles (DialogConfirm green / DialogCancel outlined / DialogDestructive red, 56dp, gap dimen) to 13 custom dialog layouts incl portrait+land twins; re-lay dialog_translation_settings cancel from title row to bottom action row; icon-only filter dialogs left per icon-button non-goal [branch: DEBUG-v015]
2026-06-19 23:21:16 app_v2/src/main/res/layout/dialog_stream_offload_offer.xml ui S0538 Phase 05: apply unified confirm/cancel styles to action-pair bottom sheets (PermissionRationale grant/skip, StreamOffloadOffer download/cancel); selection-only and Compose/media sheets exempt [branch: DEBUG-v015]
2026-06-19 23:29:14 docs/ARCHITECTURE.md docs S0538 Phase 06: document dialog action-button rule (DialogConfirm/Cancel/Destructive, gap, materialAlertDialogTheme seam) in Button Taxonomy [branch: DEBUG-v015]
2026-06-19 23:29:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt spec-dev S0538: insert BlockNeedUserTest debug probe at the destructive delete confirmation flow [branch: DEBUG-v015]
2026-06-19 23:52:47 PLAN/S0551_maestro-regression-flow-library.md spec Add strategic spec S0551 for Maestro regression flow library [branch: DEBUG-v015]
2026-06-20 00:11:11 PLAN/S0552_resume-wear-development.md spec Scaffold strategic spec skeleton S0552 [branch: DEBUG-v015]
2026-06-20 00:20:35 PLAN/S0553_standard-production-release-readiness.md S0553 Added strategic spec for standard production release readiness covering intentional exclusions, release-only regression risks, coverage gaps, Play/operator gates, and evidence model [branch: DEBUG-v015]
2026-06-20 00:20:52 PLAN/S0466_sftp-audio-inputstream-closed-after-slow-scan.md spec-arc Archive S0466 (SFTP audio inputstream closed after slow scan) -> temp/done/ [branch: DEBUG-v015]
2026-06-20 00:22:38 PLAN/S0551_maestro-regression-flow-library/INDEX.md spec-tech Create tactical plan for S0551 (revive root maestro suite, 7 phases) [branch: DEBUG-v015]
2026-06-20 00:29:36 maestro/run-tests.ps1 maestro-suite S0551 Phase 01: off-context suite runner (no hardcode, JSON verdict, stable exit codes, device pin) [branch: DEBUG-v015]
2026-06-20 00:29:44 maestro/WRITING_TESTS.md maestro-docs S0551 Phase 01: add authoritative Oracle convention section [branch: DEBUG-v015]
2026-06-20 00:38:34 maestro/run-tests.ps1 maestro-suite S0551 Phase 01: restore -DebugMode for backward compat with run-maestro-smoke.ps1/run-stress.ps1 (echoes failing-flow trace tail) [branch: DEBUG-v015]
2026-06-20 00:40:10 dev/CATALOG/scripts/query.ps1 query.ps1 Add -Search parameter to query Kotlin classes [branch: DEBUG-v015]
2026-06-20 00:40:12 dev/CATALOG/README.md README.md Document -Search parameter of query.ps1 [branch: DEBUG-v015]
2026-06-20 00:40:23 dev/CATALOG/README.md README.md Document -Search parameter of query.ps1 without comment duplication [branch: DEBUG-v015]
2026-06-20 00:45:58 PLAN/S0545_camera-capabilities-expansion/INDEX.md spec-tech Create tactical plan for S0545 [branch: DEBUG-v015]
2026-06-20 00:45:58 PLAN/S0545_camera-capabilities-expansion/PHASE_01__capture-host-foundation.md spec-tech Phase 01: capture-host-foundation [branch: DEBUG-v015]
2026-06-20 00:45:58 PLAN/S0545_camera-capabilities-expansion/PHASE_02__capability-matrix.md spec-tech Phase 02: capability-matrix [branch: DEBUG-v015]
2026-06-20 00:45:58 PLAN/S0545_camera-capabilities-expansion/PHASE_03__photo-controls-ui.md spec-tech Phase 03: photo-controls-ui [branch: DEBUG-v015]
2026-06-20 00:45:59 PLAN/S0545_camera-capabilities-expansion/PHASE_04__in-app-video.md spec-tech Phase 04: in-app-video [branch: DEBUG-v015]
2026-06-20 00:45:59 PLAN/S0545_camera-capabilities-expansion/PHASE_05__host-integration.md spec-tech Phase 05: host-integration [branch: DEBUG-v015]
2026-06-20 00:45:59 PLAN/S0545_camera-capabilities-expansion/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v015]
2026-06-20 00:46:00 PLAN/S0545_camera-capabilities-expansion.md spec-tech Status to Tactical and tactical plan link for S0545 [branch: DEBUG-v015]
2026-06-20 00:52:06 maestro/run-tests.ps1 maestro-suite S0551 Phase 01: auto-discover ANDROID_HOME so Maestro detects devices (fixes 0-devices) [branch: DEBUG-v015]
2026-06-20 00:52:07 maestro/features/browse/browse_all_images.yaml maestro-flow S0551 Phase 02: real-oracle browse flow for virtual://all_images (validated green on emulator-5556) [branch: DEBUG-v015]
2026-06-20 00:56:59 PLAN/S0536_unify-ui-togglers.md spec-dev S0536 unify UI togglers: all 5 tactical phases implemented; status Tactical -> Implemented [branch: DEBUG-v015]
2026-06-20 00:56:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsToggleRow.kt S0536 Phase 01 Canonical toggle row embeds Material3 MaterialSwitch (was SwitchMaterial) [branch: DEBUG-v015]
2026-06-20 00:56:59 app_v2/src/main/res/values/themes.xml S0536 Phase 02 Add Widget.FastMediaSorter.Switch style + materialSwitchStyle so bare on/off switches match the component [branch: DEBUG-v015]
2026-06-20 00:56:59 app_v2/src/main/res/layout/dialog_scheduled_operation.xml S0536 Phase 03 Migrate raw dialog switches (scheduled-op, playback-control VR override, list-item enable) to SettingsToggleRow or themed bare MaterialSwitch [branch: DEBUG-v015]
2026-06-20 00:56:59 app_v2/src/main/res/layout/dialog_player_settings.xml S0536 Phase 04 Convert on/off checkboxes (player repeat/subtitles, slideshow play-to-end, translation lens, camera-OCR only) to SettingsToggleRow switch rows [branch: DEBUG-v015]
2026-06-20 00:56:59 docs/ARCHITECTURE.md S0536 Phase 05 Pattern A: canonical class MaterialSwitch, inline help-icon rule (not right-pinned), materialSwitchStyle for bare switches [branch: DEBUG-v015]
2026-06-20 01:01:54 PLAN/S0536_unify-ui-togglers.md spec-check Audit S0536 -> Verified; PASS/WARN/FAIL 21/0/0; all 5 phases done, build OK, visual no-regression on emulator [branch: DEBUG-v015]
2026-06-20 01:01:54 app_v2/src/main/res/values/dimens.xml spec-check Remove 2 dimens orphaned by Phase 04.2 tvPlayToEndHint removal (Rule 21 dead-weight) [branch: DEBUG-v015]
2026-06-20 01:01:57 PLAN/S0551_maestro-regression-flow-library.md spec-quiz S0551: record resource-strategy decision (OWNER_TRIGGER full-matrix import) + 2 resolved-without-asking; status unchanged (In Progress) [branch: DEBUG-v015]
2026-06-20 01:13:08 maestro/features/player/player_image.yaml maestro-flow S0551 Phase 04: image player flow - S0550 regression (photo_001.jpg), validated green [branch: DEBUG-v015]
2026-06-20 01:13:08 maestro/features/slideshow/slideshow_basic.yaml maestro-flow S0551 Phase 05: slideshow start flow (exercises S0550 callback path), validated green [branch: DEBUG-v015]
2026-06-20 01:20:25 maestro/features/browse/browse_filter.yaml maestro-flow S0551 Phase 02: name-filter flow (IMG include/exclude), validated green [branch: DEBUG-v015]
2026-06-20 01:21:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDialogHelper.kt ui S0539: decompose BrowseDialogHelper into focused dialog managers [branch: DEBUG-v015]
2026-06-20 01:21:39 maestro/smoke/app_launch.yaml maestro-flow S0551 Phase 02: rewrite fictitious app_launch into real launch oracle, validated green [branch: DEBUG-v015]
2026-06-20 01:23:12 app_v2/src/main/res/layout/view_collapsible_section_header.xml spec-dev S0535 Phase 01.1: add chevron indicator + summary slot to unified section header [branch: DEBUG-v015]
2026-06-20 01:28:11 PLAN/ spec-arc Archive 2 Verified specs -> temp/done/ (S0497 play-store-listing-aso-rewrite, S0536 unify-ui-togglers) [branch: DEBUG-v015]
2026-06-20 01:30:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/CollapsibleSectionHeader.kt spec-dev S0535 Phase 01: unified header chevron+rotation, summary API, a11y state description [branch: DEBUG-v015]
2026-06-20 01:32:01 app_v2/src/main/res/values/strings.xml spec-dev S0535 Phase 01: add collapsible section a11y state strings (EN/RU/UK) [branch: DEBUG-v015]
2026-06-20 01:37:01 app_v2/src/test/java/com/sza/fastmediasorter/ui/common/widget/CollapsibleSectionHeaderTest.kt spec-dev S0535 Phase 01: widget tests for chevron rotation, summary slot, a11y state description [branch: DEBUG-v015]
2026-06-20 01:39:26 maestro/features/browse/browse_sort_empty.yaml spec-dev S0551 Phase 02.4 Add browse_sort_empty Maestro flow (sort by date-desc + empty-state via no-match filter on Downloads resource) [branch: DEBUG-v015]
2026-06-20 01:45:44 app_v2/src/main/res/drawable/checkbox_select_*.xml UI Enlarge file-selection checkbox to 26dp (130% of prior 20dp) for easier finger tapping in file browser list and grid (portrait/landscape) [branch: DEBUG-v015]
2026-06-20 01:45:49 PLAN/S0553_standard-production-release-readiness.md spec-all S0553: strategic spec finalized - owner inputs (tiered blockers, single-device matrix, best-effort Cast/Wear waiver, clean Pre-launch+waiver, waiver storage), 6 research items resolved, Draft->Approved [branch: DEBUG-v015]
2026-06-20 01:48:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/CollapsibleSectionsManager.kt spec-dev S0535 Phase 02: collapsible sections orchestrator + consolidated store + one-time legacy migration (+unit tests) [branch: DEBUG-v015]
2026-06-20 01:52:48 PLAN/S0553_standard-production-release-readiness/INDEX.md spec-tech S0553: tactical plan - 5 phases (surface baseline+snapshot tool, release-risk audit+release smoke, coverage matrix+manifest, evidence pack+verdict aggregator, cleanup); Status->Tactical [branch: DEBUG-v015]
2026-06-20 02:07:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/MediaSettingsFragment.kt spec-dev S0535 Phase 03: migrate General/Operations/Playback/Media settings to unified CollapsibleSectionsManager; delete 2 bespoke helpers [branch: DEBUG-v015]
2026-06-20 02:12:40 docs/RELEASE_READINESS_STANDARD.md spec-dev S0553: standard production release readiness gate implemented - contract doc + surface-snapshot/release-smoke/verdict-gate scripts + coverage manifest + waiver pack + release-doc cross-links [branch: DEBUG-v015]
2026-06-20 02:14:00 app_v2/src/main/java/com/sza/fastmediasorter/utils/SyntaxHighlighter.kt Text viewer syntax highlighting Make code syntax highlighting palette theme-aware: dark hues washed out on the LIGHT/SEPIA reader themes (light blue attrs / tan strings on white). SyntaxHighlighter now takes a SyntaxPalette chosen by reader-theme background luminance; TextViewerManager passes the palette for the active theme. [branch: DEBUG-v015]
2026-06-20 02:14:41 scripts/release/standard-surface-snapshot.ps1 spec-dev S0553: standard surface snapshot tool (ALL_FEATURES standard slice + BuildConfig flags, -CheckRegressions) [branch: DEBUG-v015]
2026-06-20 02:14:41 scripts/release/standard-release-smoke.ps1 spec-dev S0553: standardRelease R8/shrink smoke + -CheckSeams release-identity assertions [branch: DEBUG-v015]
2026-06-20 02:14:41 scripts/release/standard-release-gate.ps1 spec-dev S0553: single PASS/FAIL/WAIVED release verdict aggregator [branch: DEBUG-v015]
2026-06-20 02:14:41 docs/release/standard-coverage-matrix.json spec-dev S0553: machine-readable coverage matrix + single-device gap [branch: DEBUG-v015]
2026-06-20 02:14:42 store_assets/release_waivers/README.md spec-dev S0553: per-release waiver pack (template + storage convention) [branch: DEBUG-v015]
2026-06-20 02:16:24 PLAN/S0553_standard-production-release-readiness.md spec-check Audit S0553 -> Verified; PASS/WARN/FAIL 26/0/0; gate doc + snapshot/smoke/verdict scripts + coverage manifest + waiver pack verified [branch: DEBUG-v015]
2026-06-20 02:21:59 app_v2/src/main/res/layout-land/player_bottom_panels_container_content.xml spec-dev S0535 Phase 04: migrate AddResource/ResourceEditor + player Copy/Move panels to unified header; remove player hex colors + defunct prefix attrs; chevron tint token [branch: DEBUG-v015]
2026-06-20 02:32:28 scripts/devtest/prerelease-measure.ps1 S0554 Pre-release sweep: list-scroll gfxinfo janky% is now advisory (non-gating) on emulators where software rendering structurally inflates jank; still gates on physical devices. Emulator detection in prerelease-measure.ps1, advisory skip in prerelease-verdict.ps1, removed dead MaxFrameMs config, synced both spec-prerelease skill mirrors. [branch: DEBUG-v015]
2026-06-20 02:35:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsAdapter.kt spec-dev S0535 Phase 05: absorb statistics 2nd mechanism; Duplicates summary slot; Keybinding persist; folder + scheduled dialogs onto unified manager [branch: DEBUG-v015]
2026-06-20 02:43:42 docs/ARCHITECTURE.md spec-dev S0535 Phase 06: document unified collapsible-group pattern; record capability in ALL_FEATURES; catalog roles for new classes [branch: DEBUG-v015]
2026-06-20 02:48:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/ spec-dev S0535 BlockNeedUserTest: insert debug verification tags at unified collapsible flow entries (orchestrator toggle, state migration, statistics absorb, keybinding persist) [branch: DEBUG-v015]
2026-06-20 03:04:47 .claude/commands/skill-release.md skill-release Step 1b: dirty working tree no longer aborts - auto-commit + push pending WIP via .\a.ps1 c, then continue; abort only if commit/push fails [branch: DEBUG-v015]
2026-06-20 03:20:14 docs/WHATS_NEW.md WHATS_NEW Release notes + README for v2.60.6200.317 - plateau merge from DEBUG-v015 (14 new, 7 fixed) [branch: DEBUG-v015]
2026-06-20 03:23:48 PLAN/S0553_standard-production-release-readiness.md spec-arc Archive S0553 (standard-production-release-readiness) -> temp/done/ [branch: DEBUG-v016]
2026-06-20 03:23:49 PLAN/S0554_list_scroll_jank_prerelease.md spec-arc Archive S0554 (list-scroll jank prerelease) -> temp/done/ [branch: DEBUG-v016]
2026-06-20 03:27:30 PLAN/S0555_publish-vr-app-meta-store.md spec Scaffold strategic spec skeleton S0555 [branch: DEBUG-v016]
2026-06-20 03:28:12 PLAN/S0556_publish-vr-android-xr-store.md spec Scaffold strategic spec skeleton S0556 [branch: DEBUG-v016]
2026-06-20 03:31:00 PLAN/S0556_publish-vr-android-xr-store.md spec S0556: strategic spec finalized - differences from Meta Horizon Store, manifest settings, compatibility, and version code strategy, Draft->Approved [branch: DEBUG-v016]
2026-06-20 03:39:03 PLAN/S0555_publish-vr-app-meta-store.md spec-update Refinement (gemini-3.5-flash, focus: completeness, language, structure) [branch: DEBUG-v016]
2026-06-20 03:43:19 PLAN/S0555_publish-vr-app-meta-store.md spec-update Refinement (gpt-5-codex, focus: completeness, consistency, structure, verifiability) [branch: DEBUG-v016]
2026-06-20 03:44:29 PLAN/S0556_publish-vr-android-xr-store.md spec-update Refinement (gpt-5, focus: language, structure, verifiability, consistency, completeness, style) [branch: DEBUG-v016]
2026-06-20 04:00:22 docs/REPLACES.md REPLACES New marketing doc: list of standalone apps FastMediaSorter replaces (player/camera/file manager/OCR/translator/etc), EN + RU with flavor + ‘basic’ honesty notes [branch: DEBUG-v016]
2026-06-20 04:03:12 docs/REPLACES.md REPLACES Supplemented replacements list with TV media center, download manager, widget pack, and settings backup roles [branch: DEBUG-v016]
2026-06-20 04:03:13 docs/REPLACES_RU.md REPLACES_RU Supplemented Russian replacements list with TV media center, download manager, widget pack, and settings backup roles [branch: DEBUG-v016]
2026-06-20 04:04:18 PLAN/S0555_publish-vr-app-meta-store.md spec-update Refinement (claude-opus-4.8, focus: structure/verifiability/consistency/completeness/style; em-dash fix) [branch: DEBUG-v016]
2026-06-20 04:07:46 PLAN/S0556_publish-vr-android-xr-store.md spec-update Refinement (claude-opus-4.8; em-dash + list-marker hygiene; web-verified Android XR publish/manifest claims) [branch: DEBUG-v016]
2026-06-20 04:12:51 PLAN/S0535_unify-collapsible-groups.md spec-arc Archive S0535 (unify-collapsible-groups) -> temp/done/; removed 4 S0535 debug tags (StatisticsAdapter, CollapsibleSectionStateMigration, CollapsibleSectionsManager, KeybindingRemapViewModel) + unused Timber imports [branch: DEBUG-v016]
2026-06-20 04:12:52 PLAN/S0537_unify-selection-checkboxes.md spec-arc Archive S0537 (unify-selection-checkboxes) -> temp/done/ [branch: DEBUG-v016]
2026-06-20 04:12:52 PLAN/S0538_unify-dialog-action-buttons.md spec-arc Archive S0538 (unify-dialog-action-buttons) -> temp/done/; removed S0538 debug tag (BrowseDeleteDialogManager) + unused Timber import [branch: DEBUG-v016]
2026-06-20 04:12:52 PLAN/S0539_decompose-browse-dialog-helper.md spec-arc Archive S0539 (decompose-browse-dialog-helper) -> temp/done/ [branch: DEBUG-v016]
2026-06-20 04:12:53 PLAN/S0544_error-dialog-landscape-action-row-clipped.md spec-arc Archive S0544 (error-dialog-landscape-action-row-clipped) -> temp/done/; removed S0544 debug tag (ScrollableTextDialog) [branch: DEBUG-v016]
2026-06-20 04:17:49 index.html, index-ru.html, index-uk.html, styles.css, README.md, docs/README_RU.md, docs/README_UK.md Website + README Add ‘What FastMediaSorter Replaces’ section (4 categories: viewing/playback, capture/create, file management, text/utilities) near the top of the public site (EN/RU/UK) and README (EN/RU/UK), sourced from docs/REPLACES.md; noLegal-exclusive screenshot tool omitted per published-build showcase policy [branch: DEBUG-v016]
2026-06-20 04:33:14 docs/REPLACES_RU.md docs REPLACES showcase (RU+EN): drop ‘Settings backup tool’ entry - not a device-replacement app; remove its honesty-note clause [branch: DEBUG-v016]
2026-06-20 04:36:56 docs/REPLACES_RU.md docs REPLACES showcase (RU+EN): recast Calculator as scientific (drop ‘basic’); expand noLegal exclusives with site media downloader, APK sideload, Office document viewer [branch: DEBUG-v016]
2026-06-20 04:37:14 docs/HOW_TO.md, docs/HOW_TO_RU.md, docs/HOW_TO_UK.md Documentation Fix How-To settings paths/labels to match current UI: slideshow music (Media>Images, ‘Play music during slideshow’), text/PDF/EPUB (Media>Documents, exact toggle labels), translation (Media>Other), and remote-key remap (Operations>Controls & Keybindings, was wrongly Playback); EN/RU/UK in lockstep [branch: DEBUG-v016]
2026-06-20 04:38:40 PLAN/S0558_howto-settings-path-drift-gate.md spec Scaffold strategic spec skeleton S0558 [branch: DEBUG-v016]
2026-06-20 04:39:56 PLAN/S0559_split-screencapture-menu-standard.md spec Scaffold strategic spec skeleton S0559 [branch: DEBUG-v016]
2026-06-20 04:55:02 docs/*.md, index*.html User docs (EN/RU/UK) + landing pages S0557: fix doc drift from S0366 audit - corrected Legacy/Photos/Lite flavor capability claims (cloud/SMB/OCR/background-music) in FEATURES+HOW_TO, refreshed stale settings nav paths (Quick Sort->Operations, Documents/General->Media) in FAQ/QUICK_START/TROUBLESHOOTING, added missing UK HOW_TO sections + FAQ_UK lens Q&A (EN/RU/UK heading parity), removed stale OU-3D ‘planned’ line and added OU stereo mode, fixed Wear OS + SMB/SFTP dead anchors, added Jekyll permalinks to navigational docs and aligned landing-page link extensions to each target’s canonical served path, added VR doc group + refreshed dates in DOCS_MAP, added License/IzzyOnDroid badges to EN README [branch: DEBUG-v016]
2026-06-20 05:30:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/share S0560 Fix MaterialButton InflateException in share-flow dialogs: transparent ReceiveShareActivity theme is flattened to a non-Material base at runtime (DayNight delegate), dropping dialogActionButtonMinHeight; inflate dialogs against a Material3 ContextThemeWrapper (ReceiveShareActivity dialogContext propagation + LinkAutoDownloadProgressDialog + WebViewAuthDialogFragment) [branch: DEBUG-v016]
2026-06-20 13:27:52 PLAN/S0560_share-dialogs-material-theme-crash.md spec-check Audit S0560 -> Verified; PASS/WARN/FAIL 10/0/0; all 5 share-dialog sites use ContextThemeWrapper(Theme_FastMediaSorter) [branch: DEBUG-v016]
2026-06-20 13:31:58 app_v2/src/main/res/drawable/checkbox_select_*.xml UI Enlarge file-selection checkbox to 30dp for easier finger tapping in file browser list and grid [branch: DEBUG-v016]
2026-06-20 13:36:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/PagingMediaFileAdapter.kt File browser thumbnails Remove rounded corners from file-browser thumbnails (grid+list, portrait+landscape): strip Glide RoundedCorners(8) transforms and unused import [branch: DEBUG-v016]
2026-06-20 13:41:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player Player command panel S0459 follow-up: retire the standalone Print panel command - Print now lives only in the «Send to..» receiver registry (settings-gated). Removed PRINT from CommandPanelLayoutPlanner.buildActiveCommands (portrait bar/overflow) and hid btnPrintCmd in CommandPanelAvailabilityUpdater (landscape bar), eliminating the duplicate «Печать» alongside «Send to.. -> Печать». [branch: DEBUG-v016]
2026-06-20 13:41:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player Player command panel S0459 follow-up: retire the standalone Print panel command - Print now lives only in the Send-to receiver registry (settings-gated). Removed PRINT from CommandPanelLayoutPlanner.buildActiveCommands (portrait bar/overflow) and hid btnPrintCmd in CommandPanelAvailabilityUpdater (landscape bar), eliminating the duplicate Print item alongside Send-to Print. [branch: DEBUG-v016]
2026-06-20 13:49:02 PLAN/S0561_settings-reference-landing-permalink.md spec Scaffold strategic spec skeleton S0561 [branch: DEBUG-v016]
2026-06-20 13:51:13 PLAN/spec-catalog.jsonl spec-next Session: 2 processed (S0560 Verified, S0557 deferred-concurrent-WIP); 7 deferred (S0559/S0558/S0556/S0555/S0552 skip-cached owner/external/research-gated; S0551/S0561 round-deferred, stay eligible) [branch: DEBUG-v016]
2026-06-20 13:51:13 index-ru.html spec-next S0557 5.2.3: drop residual Ukrainian search-categorizer token from the RU landing JS (RU page keeps perevod/translation matchers) [branch: DEBUG-v016]
2026-06-20 13:51:39 docs/FAQ_RU.md, docs/FAQ_UK.md, docs/HOW_TO.md, docs/HOW_TO_RU.md, docs/FEATURES*.md, index*.html User docs (EN/RU/UK) + landing pages S0557 finish: completed Phase 2/4/5 gaps - added front matter+permalink to FEATURES.md/_RU/_UK and switched landing FEATURES links from .md to .html (Jekyll render parity); restored EN/RU/UK mirror parity (translated stale English section names in FAQ_RU, mirrored SMB/SFTP dead-anchor cleanup into HOW_TO+HOW_TO_RU, added missing Wear OS Q&A section to FAQ_UK); fixed FEATURES_UK section 9 heading RU/UK typo so landing audio anchor resolves; parked SETTINGS_REFERENCE landing permalink drift as S0561 (generated file, out of scope) [branch: DEBUG-v016]
2026-06-20 14:17:28 docs/HOW_TO_RU.md scripts/quality + docs HOW_TO guides S0558 - add HOW_TO settings-path drift gate (assert-howto-settings-paths.ps1 + howto-path-vocab.json), wire into settings-doc composite as stage 5 and into post-change on HOW_TO edits, fix stale RU/UK touch-zones setting label [branch: DEBUG-v016]
2026-06-20 14:27:09 PLAN/S0555_publish-vr-app-meta-store.md spec-update Refinement (claude-opus-4.8, focus: language structure verifiability consistency completeness style) - clean pass, 0 applied [branch: DEBUG-v016]
2026-06-20 14:30:59 scripts/docs/render-settings-reference.ps1 SETTINGS_REFERENCE landing permalink scheme S0561: render-settings-reference.ps1 now emits Jekyll front matter (layout/title/permalink to .html) as the first bytes of each locale; regenerated EN/RU/UK SETTINGS_REFERENCE docs and switched the three landing links from .md to .html so GitHub Pages serves the settings reference as rendered HTML [branch: DEBUG-v016]
2026-06-20 14:44:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/support/SupportIntentFactory.kt Crash-report email Crash-report email now targets email apps via mailto: selector (was generic ACTION_SEND share sheet that only flickered); launch intent directly without createChooser; drop redundant crash text from body when log ZIP is attached [branch: DEBUG-v016]
2026-06-20 14:47:09 PLAN/S0562_bugfix-link-autodownload-dialog-crash.md spec Scaffold strategic spec skeleton S0562 [branch: DEBUG-v016]
2026-06-20 15:02:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadProgressDialog.kt S0562 link auto-download dialog crash Inflate link-autodownload progress dialog against Theme.FastMediaSorter.App (declares dialogActionButtonMinHeight directly) instead of the parent-only Theme.FastMediaSorter alias, so the cancel MaterialButton resolves the attr under the translucent ReceiveShareActivity host theme even when DynamicColors rebuilds the theme [branch: DEBUG-v016]
2026-06-20 15:33:52 PLAN/S0545_camera-capabilities-expansion.md spec-all S0545 in-app camera: resolved UI gate (entry-point-fixed mode, no in-screen switch), spun off S0563 for unified Camera entry [branch: DEBUG-v016]
2026-06-20 15:33:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-all S0545: unified in-app camera host - capability-driven photo controls (flash/zoom/lens/tap-focus) + in-app video with explicit mic policy; migrated browse/main/widget/OCR callers off external ACTION_VIDEO_CAPTURE [branch: DEBUG-v016]
2026-06-20 15:35:02 app_v2/src/main/res/layout/fragment_settings_destinations.xml Settings UI Swap order of screenshot gesture Up/Down action rows (portrait + landscape) [branch: DEBUG-v016]
2026-06-20 15:47:56 PLAN/S0563_camera-unified-entry-mode-switch.md spec-all Strategic spec S0563: unified Camera overflow entry with in-screen PHOTO|VIDEO switch (Approved) [branch: DEBUG-v016]
2026-06-20 15:49:38 PLAN/S0559_split-screencapture-menu-standard.md spec-quiz S0559: Draft -> Approved via quiz (4 questions: flavor reach, destination UX, menu surface, confirm UX) [branch: DEBUG-v016]
2026-06-20 15:50:52 PLAN/S0563_camera-unified-entry-mode-switch/INDEX.md spec-all Tactical plan S0563: 4 phases (host contract, host UI switch, main-menu Camera merge, docs) [branch: DEBUG-v016]
2026-06-20 16:06:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureContract.kt spec-all S0563: unified Camera overflow entry with in-screen photo/video switch - host switchable contract + flow/session rebind + segmented UI + main-menu merge, generic result by media kind [branch: DEBUG-v016]
2026-06-20 16:12:21 PLAN/S0564_main-quick-capture-process-death-persistence.md spec-draft Parked from S0563: main quick-capture loses result on process death [branch: DEBUG-v016]
2026-06-20 16:12:48 PLAN/S0563_camera-unified-entry-mode-switch.md spec-all Pipeline BlockNeedUserTest: S0563 (emulator smoke PASS, real-device video test pending) [branch: DEBUG-v016]
2026-06-20 17:33:19 PLAN/S0565_internet-stream-playback.md spec Add strategic spec S0565 for internet stream playback [branch: DEBUG-v016]
2026-06-20 17:38:10 PLAN/S0566_samsung-camera-ui-alignment.md S0566 Created strategic specification for Samsung camera UI alignment and features [branch: DEBUG-v016]
2026-06-20 17:38:48 PLAN/S0562_bugfix-link-autodownload-dialog-crash.md spec-all Pipeline Verified: S0562 link-autodownload progress dialog inflate crash [branch: DEBUG-v016]
2026-06-20 17:38:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadProgressDialog.kt spec-all Wrap dialog inflate and AlertDialog.Builder in Theme.FastMediaSorter.App ContextThemeWrapper so dialogActionButtonMinHeight resolves under the transparent share-receiver host theme [branch: DEBUG-v016]
2026-06-20 17:46:18 PLAN/spec-catalog.jsonl spec-next Session: 6 processed, 1 verified (S0562), 5 deferred (S0565 owner-gate, S0551 drift-review, S0566/S0567 owner-WIP overlap, S0564 awaits S0563) [branch: DEBUG-v016]
2026-06-20 17:57:01 PLAN/S0557_docs-drift-fix.md spec-arc Archive S0557 (docs-drift-fix) -> temp/done/ [branch: DEBUG-v016]
2026-06-20 17:57:02 PLAN/S0560_share-dialogs-material-theme-crash.md spec-arc Archive S0560 (share-dialogs-material-theme-crash) -> temp/done/ [branch: DEBUG-v016]
2026-06-20 17:57:02 PLAN/S0561_settings-reference-landing-permalink.md spec-arc Archive S0561 (settings-reference-landing-permalink) -> temp/done/ [branch: DEBUG-v016]
2026-06-20 17:57:02 PLAN/S0562_bugfix-link-autodownload-dialog-crash.md spec-arc Archive S0562 (bugfix-link-autodownload-dialog-crash) -> temp/done/ [branch: DEBUG-v016]
2026-06-20 18:07:48 PLAN/S0563_camera-unified-entry-mode-switch.md spec-test-device S0563 AVD partial verification (emulator-5556): unified Camera entry + PHOTO|VIDEO switch + rebind + portrait/landscape confirmed; file-save paths remain real-device gate (emulator camera breaks CameraX Exif). Status stays BlockNeedUserTest, note narrowed. [branch: DEBUG-v016]
2026-06-20 18:19:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainCameraCaptureManager.kt spec-dev S0564: persist/restore pending quick-capture target across process death (saveState/restoreState mirrored from BrowseCameraCaptureManager S0371) + MainActivity onSaveInstanceState/onCreate wiring [branch: DEBUG-v016]
2026-06-20 18:22:32 PLAN/S0565_internet-stream-playback.md spec-all S0565 codebase-research: resolved 2 open items - Media3 HLS/DASH deps already present (standard/noLegal/legacy/vr); cleartext base-policy HTTPS-only blocks public http streams (needs owner security decision). Status stays Draft (owner-gate: 4 MISSING fields in S0). [branch: DEBUG-v016]
2026-06-20 18:43:09 PLAN/S0565_internet-stream-playback/research/01__streaming-playback-research.md research S0565 streaming research artifact: sources+test URLs, player integration seam (ResourceType.HTTP_STREAM + determineResourceType + HttpStreamPlaybackHelper), Media3 impl snippets, difficulty matrix, 1st-iteration scope, owner decisions (cleartext, lite/photos, UI entry) [branch: DEBUG-v016]
2026-06-20 19:02:49 PLAN/S0565_internet-stream-playback.md spec-update Refinement: folded streaming research into strategic body (S3.2 flavor coverage, S4 architectural gap, S5 approach + 1st-iteration scope, S7 risk matrix, S11 observable criteria). Status unchanged (Draft, S0 owner-gate). [branch: DEBUG-v016]
2026-06-20 19:22:07 PLAN/S0568_camera-launch-widget.md spec-all Strategic spec S0568: camera launch widget (photo+video) [branch: DEBUG-v016]
2026-06-20 19:29:55 PLAN/S0568_camera-launch-widget/INDEX.md spec-tech Create tactical plan for S0568 (5 phases) [branch: DEBUG-v016]
2026-06-20 19:29:55 PLAN/S0568_camera-launch-widget/PHASE_01__shared-save-routing.md spec-tech Phase 01: shared-save-routing [branch: DEBUG-v016]
2026-06-20 19:29:55 PLAN/S0568_camera-launch-widget/PHASE_02__launch-trampoline.md spec-tech Phase 02: launch-trampoline [branch: DEBUG-v016]
2026-06-20 19:29:55 PLAN/S0568_camera-launch-widget/PHASE_03__widget-provider-resources.md spec-tech Phase 03: widget-provider-resources [branch: DEBUG-v016]
2026-06-20 19:29:55 PLAN/S0568_camera-launch-widget/PHASE_04__manifest-registration.md spec-tech Phase 04: manifest-registration [branch: DEBUG-v016]
2026-06-20 19:29:55 PLAN/S0568_camera-launch-widget/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v016]
2026-06-20 19:29:55 PLAN/S0568_camera-launch-widget.md spec-tech Status -> Tactical [branch: DEBUG-v016]
2026-06-20 19:35:53 PLAN/S0567_ui-settings-forms-dialogs-unification.md S0567 Expanded spec with codebase research, priorities, and reusable UI taxonomy [branch: DEBUG-v016]
2026-06-20 19:48:40 PLAN/S0565_internet-stream-playback.md S0565 Expanded strategic spec with Translations feature scope, RTSP decisions, entry points, and playback UX [branch: DEBUG-v016]
2026-06-20 20:14:38 PLAN/S0565_internet-stream-playback.md spec-quiz S0565: Draft -> Approved via quiz (3 questions); RTSP now, public HTTP allowed, autonomy=decide freely [branch: DEBUG-v016]
2026-06-20 20:35:18 PLAN/S0566_samsung-camera-ui-alignment.md spec-all S0566: reconciled phase checkboxes to code reality + Last Audit (all 4 phases code-present, build UNVERIFIED); recorded silent kapt blocker, 2 gaps (in-app player tap, Rule 19 hex), 1 follow-up (multi-capture scratch cleanup) [branch: DEBUG-v016]
2026-06-20 20:46:20 PLAN/S0565_internet-stream-playback/INDEX.md spec-tech S0565: tactical plan authored (8 phases: foundations, capability contract, data, playback, usecases, screen, entry-points, cleanup); status Approved -> Tactical [branch: DEBUG-v016]
2026-06-20 21:11:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt Bugfix Fix kapt NullPointerException (Cannot read field tree) build failure: CameraCaptureActivity declared two companion objects (a public createIntent one and a private const one); kapt’s error-tolerant stub gen emitted duplicate Companion fields, javac then failed stub analysis and cascaded to duplicate-class errors masked by correctErrorTypes. Merged the constants into the single companion object. [branch: DEBUG-v016]
2026-06-20 22:01:09 app_v2/build.gradle.kts spec-dev S0565 Phase 01: RTSP module for streaming flavors, SUPPORT_STREAMS BuildConfig flag, cleartext base-policy relax, StreamUri scheme classifier (ResourceType left unchanged to avoid when-exhaustiveness fan-out) [branch: DEBUG-v016]
2026-06-20 22:06:16 app_v2/src/main/java/com/sza/fastmediasorter/domain/player/StreamProtocolSupport.kt spec-dev S0565 Phase 02: StreamProtocolSupport contract + Full (streamingEnabled, RTSP-over-TCP) / ProgressiveOnly (streamingDisabled) impls + Hilt modules; RtspMediaSource isolated to streamingEnabled [branch: DEBUG-v016]
2026-06-20 22:26:17 PLAN/S0565_internet-stream-playback/INDEX.md spec-dev S0565: halted at Phase 03 boundary - concurrent actor implementing same ticket; owner chose to let the other finish. Phases 01-03 (RTSP dep, SUPPORT_STREAMS, cleartext, StreamProtocolSupport flavor isolation, Room stream_sources catalog) left uncommitted in tree for handoff [branch: DEBUG-v016]
2026-06-21 00:49:13 PLAN/S0566_samsung-camera-ui-alignment.md spec-all S0566: resolve open audit items (in-app player thumbnail via StandalonePlayerDispatcherActivity, shutter color Rule 19, explicit multi-capture skip-the-move guard, failed-save scratch cleanup); NO BUILD - static review only [branch: DEBUG-v016]
2026-06-21 00:59:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt spec-all S0565 internet stream playback: progressive http(s)/HLS/DASH + RTSP (RTP-over-RTSP/TCP) behind a flavor-gated StreamProtocolSupport; streaming DataSource (UA, cross-protocol redirects, Icy-MetaData), DefaultLoadControl, ICY metadata, single transient-error retry, position-save suppression for dynamic streams [branch: DEBUG-v016]
2026-06-21 00:59:21 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/StreamSourceRepository.kt spec-all S0565 stream catalog: Room stream_sources store (entity/DAO/migration 32-33, @Database v33) + domain use cases (observe/add/import .m3u/pin-to-top/remove) + URL scheme-kind classifier + .m3u parser (HLS-manifest guarded) [branch: DEBUG-v016]
2026-06-21 00:59:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-all S0565 Streams screen: RecyclerView catalog + add/import dialog + sticky inline-radio mini-control (ICY) + fullscreen video launch via player single-item short-circuit; main-window dropdown entry (MainStreamsMenuManager) and Playback settings entry, both gated on BuildConfig.SUPPORT_STREAMS (hidden in photos) [branch: DEBUG-v016]
2026-06-21 01:04:02 PLAN/S0569_custom-color-themes.md spec Add strategic spec S0569 for custom color themes [branch: DEBUG-v016]
2026-06-21 01:04:47 PLAN/S0569_custom-color-themes.md spec-update Refinement (Gemini 3.5 Flash (High), focus: language, structure, consistency) [branch: DEBUG-v016]
2026-06-21 01:08:15 PLAN/S0568_camera-launch-widget.md spec-all S0568 drift reconcile: tactical plan synced to 5/5 done, Last Audit added, status Tactical -> BlockNeedUserTest (implementation already committed in ab3f5d02), catalog roles set for 4 new classes [branch: DEBUG-v016]
2026-06-21 01:31:58 PLAN/S0569_custom-color-themes/INDEX.md spec-tech Author tactical plan for S0569 (5 phases): custom color themes via Theme Overlays [branch: DEBUG-v016]
2026-06-21 01:47:09 PLAN/S0569_custom-color-themes.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-21 01:47:09 app_v2/src/main/res/values/strings.xml spec-dev S0569: 6 custom theme labels in color_theme_options (EN/RU/UK) [branch: DEBUG-v016]
2026-06-21 01:47:09 app_v2/src/main/res/values/colors.xml spec-dev S0569: fixed palettes for 6 custom accent themes [branch: DEBUG-v016]
2026-06-21 01:47:09 app_v2/src/main/res/values/themes.xml spec-dev S0569: 6 ThemeOverlay.FastMediaSorter.* accent overlays [branch: DEBUG-v016]
2026-06-21 01:47:09 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt spec-dev S0569: theme registry + applyThemeOverlay + debug tag [branch: DEBUG-v016]
2026-06-21 01:47:09 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-dev S0569: apply theme overlay on activity create [branch: DEBUG-v016]
2026-06-21 01:47:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsColorThemeHelper.kt spec-dev S0569: spinner position mapping for 6 themes + debug tag [branch: DEBUG-v016]
2026-06-21 01:58:13 PLAN/S0569_custom-color-themes.md spec-test-device Device run on emulator-5556 -> PASS/FAIL/DEFERRED 7/0/1, 0 log errors [branch: DEBUG-v016]
2026-06-21 02:02:04 PLAN/S0569_custom-color-themes.md spec-check Audit S0569 -> Verified; PASS/WARN/FAIL 19/0/0; removed 2 debug tags [branch: DEBUG-v016]
2026-06-21 02:02:04 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt spec-check Remove S0569 BlockNeedUserTest debug tag on Verified transition [branch: DEBUG-v016]
2026-06-21 02:02:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsColorThemeHelper.kt spec-check Remove S0569 BlockNeedUserTest debug tag on Verified transition [branch: DEBUG-v016]
2026-06-21 02:17:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt S0565 StreamsActivity extends BaseActivity so in-app locale wrapping applies - was the only full-screen host on bare AppCompatActivity, leaving its strings (and custom theme/TV-nav/edge-to-edge) unlocalized; fixes missing RU/UK translations [branch: DEBUG-v016]
2026-06-21 02:28:04 delivery/stream-catalog/ S0570 / S0565 follow-up Add curated free-stream catalog (streams.csv, 360 clearly-free audio/video/RTSP sources by rubric, RFC4180 UTF-8) + README (format/hosting/legal scope/attribution) for GitHub raw hosting; draft S0570 spec for in-app ‘Import list’ curated-catalog download/update [branch: DEBUG-v016]
2026-06-21 03:08:37 PLAN/S0573_link-autodownload-dialog-inflate-crash.md spec-dev S0573: document that the logged LinkAutoDownloadProgressDialog inflate crash is already fixed in HEAD by commit 72b3fd2c; static no-build validation only [branch: DEBUG-v016]
2026-06-21 03:10:03 delivery/stream-catalog/, scripts/stream_catalog/check-liveness.ps1 S0570 / S0565 follow-up Expand curated stream catalog: +31 official free live TV channels (en/de/es/fr/ar/it/pt/ko/ru, strict legality audit dropped CGTN + Amagi FAST mirror); add topic + normalized language columns (17-col CSV, 25 topics); add reusable liveness checker (HttpClient ResponseHeadersRead, no body read) - probed 384, dropped 2 confirmed-dead; README retargeted to GitHub Release-asset zip hosting [branch: DEBUG-v016]
2026-06-21 03:10:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/support/SupportIntentFactory.kt S0572 Crash-report send: email-first with share-sheet fallback when no email client installed [branch: DEBUG-v016]
2026-06-21 03:18:59 app_v2/src/main/res/layout/dialog_link_autodownload_progress.xml S0573 Bypass DialogCancel theme attr indirection for link auto-download progress dialog: use outlined MaterialButton visuals with direct @dimen minHeight so inflate no longer depends on ?attr/dialogActionButtonMinHeight under ReceiveShareActivity [branch: DEBUG-v016]
2026-06-21 03:19:18 PLAN/S0573_link-autodownload-dialog-inflate-crash.md spec-fix S0573 correction: 03:15:34 crash logs from build 2.60.6210.313 proved the previous Theme.FastMediaSorter.App wrapper did not fix the inflate path; spec updated to reflect the actual root cause and the new layout-level workaround [branch: DEBUG-v016]
2026-06-21 03:29:03 app_v2/src/main/res/values/themes.xml S0573 DialogConfirm/DialogCancel/DialogDestructive no longer resolve android:minHeight via ?attr/dialogActionButtonMinHeight; direct @dimen binding hardens all builder and custom-layout dialog buttons against transparent-host inflate crashes [branch: DEBUG-v016]
2026-06-21 03:29:03 PLAN/S0573_link-autodownload-dialog-inflate-crash.md spec-fix S0573 audit sweep: checked transparent-host dialog paths (ReceiveShareActivity, ResourceImportActivity, CameraQuickCaptureActivity, WebViewAuthDialogFragment) and recorded which ones were globally covered by the dialog-style hardening [branch: DEBUG-v016]
2026-06-21 03:29:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/ReceiveShareActivity.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadProgressDialog.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt S0573 Refresh transparent-host theming comments after the global dialog-style hardening: keep the explicit Material-themed context rationale, remove stale wording that blamed the current runtime path on dialogActionButtonMinHeight attr resolution [branch: DEBUG-v016]
2026-06-21 03:44:29 PLAN/S0570_curated-stream-catalog-import.md spec-quiz S0570: Draft -> Approved via quiz (4 questions: import-button UX, list view, stored fields, update semantics) [branch: DEBUG-v016]
2026-06-21 03:52:37 PLAN/S0570_curated-stream-catalog-import/INDEX.md spec-tech S0570 tactical plan: 6 phases (CSV parser, schema v33->v34 Migration33To34, catalog import use case, import chooser UX, list filter/sort/search, cleanup) [branch: DEBUG-v016]
2026-06-21 04:18:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/, app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/streams/, app_v2/src/main/java/com/sza/fastmediasorter/data/ spec-dev S0570 Implement S0570 curated stream catalog import: StreamCatalogCsvParser (RFC4180), Room v33->v34 Migration33To34 (category/topic/language), ImportStreamCatalogUseCase (zip download/unzip/parse/merge, origin=CATALOG prune-vanished), Import-list chooser (catalog vs URL), flat-list filter/sort/search with topic/language chips; standard+lite compile PASS; BlockNeedUserTest [branch: DEBUG-v016]
2026-06-21 04:36:21 PLAN/S0571_receive_share_dialog_theme_hardening.md spec-arc Archive S0571 (superseded by S0573; premise was a Theme.FastMediaSorter alias misread, root cause already fixed at style level) -> temp/done/ [branch: DEBUG-v016]
2026-06-21 04:42:08 PLAN/S0574_ftp-audio-error-toasts.md spec Scaffold strategic spec skeleton S0574 - FTP audio playback red error toasts (found by prerelease sweep) [branch: DEBUG-v016]
2026-06-21 04:42:50 scripts/devtest/prerelease-log-audit.ps1 spec-prerelease Add detailed log-audit step: cluster app E/ errors, classify benign vs actionable, flag error toasts; fix sweep logcat capture to -v threadtime so verdict no longer reads 0 errors on -v time captures [branch: DEBUG-v016]
2026-06-21 04:47:58 PLAN/S0575_streams-toggle-welcome-entrypoints.md spec-draft Scaffold strategic spec skeleton S0575 [branch: DEBUG-v016]
2026-06-21 04:58:46 PLAN/S0574_ftp-audio-error-toasts.md spec-all S0574 FTP audio: guard active-mode null-socket NPE + downgrade recoverable network-failure logs to WARN [branch: DEBUG-v016]
2026-06-21 04:58:46 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/ftp/FtpConnectedOperations.kt spec-all Guard FTP active-mode fallback (readFileBytes/readFileBytesRange/downloadFile) against null data socket; recoverable read/download failures log WARN not ERROR [branch: DEBUG-v016]
2026-06-21 04:58:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-all Downgrade recoverable network-audio precache/download fallback logs to WARN [branch: DEBUG-v016]
2026-06-21 05:03:06 PLAN/S0576_bugfix-preset-applier-missing-fields.md spec Scaffold strategic spec skeleton S0576 [branch: DEBUG-v016]
2026-06-21 05:03:24 PLAN/S0575_streams-toggle-welcome-entrypoints.md spec Research and fill strategic spec S0575 (streams master toggle, welcome entry, extensions, menu gating); distribute inbox to sections 1-11 [branch: DEBUG-v016]
2026-06-21 05:12:04 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt S0576 Add missing device-profile preset applier branches (source toggles, screenshot gestures, share-target sets, snapshot format, player rotation) so non-empty CSV cells are no longer silently dropped [branch: DEBUG-v016]
2026-06-21 05:16:38 PLAN/S0575_streams-toggle-welcome-entrypoints.md spec-quiz S0575: Draft -> Approved via quiz (4 questions) [branch: DEBUG-v016]
2026-06-21 05:21:33 scripts/devtest/prerelease-configure.ps1 S0484 pre-release sweep Gate adb locale step on API 33+: skip per-app locale on pre-Android-13 devices (cmd locale service absent) instead of FAIL-aborting the sweep [branch: DEBUG-v016]
2026-06-21 05:37:49 PLAN/S0575_streams-toggle-welcome-entrypoints/INDEX.md spec-tech Create tactical plan for S0575 (7 phases: foundations, profile-default, extensions, settings section, welcome, menu gating, docs cleanup) [branch: DEBUG-v016]
2026-06-21 05:37:50 PLAN/S0575_streams-toggle-welcome-entrypoints.md spec-tech S0575 Approved -> Tactical [branch: DEBUG-v016]
2026-06-21 05:45:14 scripts/devtest/prerelease-log-audit.ps1 S0484 pre-release sweep Add system/emulator media-framework noise (ACodec DynamicANWBuffer, StagefrightMetadataRetriever, MediaScannerJNI) to benign allowlist - non-app errors on invalid/stub files + emulator SW codec [branch: DEBUG-v016]
2026-06-21 06:27:10 PLAN/S0575_streams-toggle-welcome-entrypoints.md spec-dev S0575 all 7 phases implemented; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-21 06:27:10 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/StreamsSettingsStore.kt spec-dev S0575 P01: enableStreams master flag (AppSettings + StreamsSettingsStore + SettingsRepositoryImpl), CapabilityAvailability.isStreamsAvailable, lite SUPPORT_STREAMS=false [branch: DEBUG-v016]
2026-06-21 06:27:10 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0575 P02: per-profile enableStreams default (ON except photo_frame/ebook_reader) + applier branch + test [branch: DEBUG-v016]
2026-06-21 06:27:10 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/DeliverableInventoryImpl.kt spec-dev S0575 P03: Streams source-catalog item (ExtensionItem.Catalog + ExtensionSection.STREAMS) in Downloadable Extensions via ImportStreamCatalogUseCase [branch: DEBUG-v016]
2026-06-21 06:27:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/StreamsSettingsFragment.kt spec-dev S0575 P04: collapsible Streams settings section on Media tab with the master toggle [branch: DEBUG-v016]
2026-06-21 06:27:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeFunctionalityController.kt spec-dev S0575 P05: Welcome onboarding Streams entry (commit-on-enable + optional catalog import, portrait+landscape) [branch: DEBUG-v016]
2026-06-21 06:27:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-dev S0575 P06: main-menu Streams item gated on SUPPORT_STREAMS AND the runtime enableStreams toggle [branch: DEBUG-v016]
2026-06-21 06:27:10 docs/SETTINGS_REFERENCE.md spec-dev S0575 P07: register fragment_settings_streams in search catalog, regenerate settings manifest/annotations/reference (Rule 22) [branch: DEBUG-v016]
2026-06-21 06:32:56 PLAN/S0576_bugfix-preset-applier-missing-fields.md spec-check Audit S0576 -> Verified; PASS/WARN/FAIL 18/0/0 (all applier branches + state-skips + tests present) [branch: DEBUG-v016]
2026-06-21 06:35:21 PLAN/S0573_link-autodownload-dialog-inflate-crash.md spec-check Audit S0573 -> Verified; PASS/WARN/FAIL 4/0/0 (dialog button styles bind @dimen not ?attr; runtime confirmation manual) [branch: DEBUG-v016]
2026-06-21 06:35:56 PLAN/spec-catalog.jsonl spec-next Session: 2 processed, 2 verified, 0 blocked (S0576, S0573) [branch: DEBUG-v016]
2026-06-21 11:10:30 PLAN/S0559_split-screencapture-menu-standard/INDEX.md spec-tech S0559 tactical plan: 4 phases (shared engine seam, menu launcher contract, settings action, cleanup) [branch: DEBUG-v016]
2026-06-21 11:10:30 PLAN/S0559_split-screencapture-menu-standard/PHASE_01__shared-engine-seam.md spec-tech Phase 01: split screenCapture source set, mount engine into standard [branch: DEBUG-v016]
2026-06-21 11:10:30 PLAN/S0559_split-screencapture-menu-standard/PHASE_02__menu-launcher-contract.md spec-tech Phase 02: MenuScreenshotLauncher seam (empty-set default + screenCapture impl) [branch: DEBUG-v016]
2026-06-21 11:10:30 PLAN/S0559_split-screencapture-menu-standard/PHASE_03__settings-menu-action.md spec-tech Phase 03: Operations-tab take-screenshot action, trilingual [branch: DEBUG-v016]
2026-06-21 11:10:30 PLAN/S0559_split-screencapture-menu-standard/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: catalog regen + ALL_FEATURES record [branch: DEBUG-v016]
2026-06-21 11:10:30 PLAN/S0559_split-screencapture-menu-standard.md spec-tech Status -> Tactical [branch: DEBUG-v016]
2026-06-21 12:01:18 PLAN/S0559_split-screencapture-menu-standard.md spec-all Implemented phases 01-04; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-21 12:01:18 app_v2/build.gradle.kts spec-all Phase 01: mount screenCapture engine into standard + inject shared capture manifest [branch: DEBUG-v016]
2026-06-21 12:01:18 app_v2/src/screenCapture/AndroidManifest.xml spec-all Phase 01: shared MediaProjection capture manifest (consent activity + service) [branch: DEBUG-v016]
2026-06-21 12:01:18 app_v2/src/noLegal/AndroidManifest.xml spec-all Phase 01: trim noLegal manifest to overlay/a11y only [branch: DEBUG-v016]
2026-06-21 12:01:18 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/OverlayHostService.kt spec-all Phase 01: move overlay-strip launcher to noLegal; fix stale store-flavor comment [branch: DEBUG-v016]
2026-06-21 12:01:19 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/MenuScreenshotLauncher.kt spec-all Phase 02: store-safe menu screenshot launcher contract + flavor bindings [branch: DEBUG-v016]
2026-06-21 12:01:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsCaptureManager.kt spec-all Phase 03: Operations-tab take-screenshot action (launcher-gated card) [branch: DEBUG-v016]
2026-06-21 12:01:19 app_v2/src/main/res/values/strings.xml spec-all Phase 03: settings_take_screenshot_now EN/RU/UK [branch: DEBUG-v016]
2026-06-21 12:10:03 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/MenuScreenshotLauncherImpl.kt spec-all Remove S0559 debug tag on Verified (device-verified: menu screenshot -> consent -> saved PNG) [branch: DEBUG-v016]
2026-06-21 12:10:03 PLAN/S0559_split-screencapture-menu-standard.md spec-all Pipeline Verified: standard menu screenshot device-verified end to end [branch: DEBUG-v016]
2026-06-21 12:13:03 PLAN/spec-catalog.jsonl spec-next Session: 3 processed (S0559 Verified; S0296 + S0566 re-skipped device/owner/collision-gated); remainder needs owner/hardware/external [branch: DEBUG-v016]
2026-06-21 12:51:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt PlayerMediaLoaderManager.playVideoWithResourceType Fix video stream playback: HTTP_STREAM/RTSP_STREAM were forced to ResourceType.LOCAL in the else-branch, routing internet streams (HLS .m3u8, RTSP) into the local-file path where File.exists() failed and aborted playback. Route stream types straight to VideoPlayerManager.playStreamVideo with no credentials. [branch: DEBUG-v016]
2026-06-21 12:54:53 PLAN/S0577_background-audio-playback-group.md spec Scaffold strategic spec skeleton S0577 [branch: DEBUG-v016]
2026-06-21 13:06:27 PLAN/S0577_background-audio-playback-group.md spec-update Refinement (claude-opus-4.8, focus: completeness, structure) [branch: DEBUG-v016]
2026-06-21 13:08:21 PLAN/S0579_rotate-playing-stream-icon.md spec Scaffold strategic spec skeleton S0579 [branch: DEBUG-v016]
2026-06-21 13:11:17 PLAN/S0580_streams-filter-category-language.md spec Add strategic spec S0580 for streams filter by category and/or language [branch: DEBUG-v016]
2026-06-21 13:12:11 app_v2/src/main/res/layout/fragment_settings_streams.xml Settings Media Streams shortcut S0578: move Streams shortcut from Player settings into the Media > Streams collapsible section (portrait+landscape); wire fragment_settings_streams into SettingsSearchTabMapping so the section is searchable; regenerate settings manifest/annotations/reference (also surfaces the rowEnableStreams toggle left undocumented by S0575) [branch: DEBUG-v016]
2026-06-21 13:16:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt Streams inline-audio failure UX + 301 redirect fix S0581: friendly ‘stream unavailable’ dialog (Retry/Remove/Cancel) for inline radio failures on the Трансляции screen - StreamInlineAudioManager now forwards onPlayerError to StreamsActivity, which offers RemoveStreamSourceUseCase removal; strings EN/RU/UK. Also fix NetworkAwareMediaSourceFactory: HTTP/HTTPS streams in the background audio service now use the cross-protocol-redirect + Icy-MetaData factory, so an Icecast/Shoutcast 301 across http<->https no longer kills playback. [branch: DEBUG-v016]
2026-06-21 13:22:25 app_v2/src/main/res/layout/activity_camera_capture.xml focus-highlight + settings-doc unblock Incidental gate-unblock repairs surfaced while completing S0578 (pre-existing, not from the streams move): add a borderless-ripple focus indication to the camera gallery-thumbnail button in portrait+landscape (Rule 16); add the btnTakeScreenshotNow settings annotation so the regenerated settings-manifest passes annotation coverage (S0559 screenshot button shipped without it) [branch: DEBUG-v016]
2026-06-21 13:22:50 PLAN/S0580_streams-filter-category-language/INDEX.md spec-tech Create tactical plan for S0580 (5 phases) [branch: DEBUG-v016]
2026-06-21 13:22:51 PLAN/S0580_streams-filter-category-language/research/01__catalog-language-format.md spec-tech Research 01: catalog language format resolved [branch: DEBUG-v016]
2026-06-21 13:22:51 PLAN/S0580_streams-filter-category-language.md spec-tech Status -> Tactical [branch: DEBUG-v016]
2026-06-21 13:23:15 PLAN/S0577_background-audio-playback-group.md spec-quiz S0577: Draft -> Approved via quiz (2 questions) [branch: DEBUG-v016]
2026-06-21 13:39:40 PLAN/S0582_streams-csv-parser-tests/INDEX.md spec-tech Create tactical plan for S0582 [branch: DEBUG-v016]
2026-06-21 13:39:40 PLAN/S0582_streams-csv-parser-tests/PHASE_01__parser-tests.md spec-tech Phase 01: parser-tests [branch: DEBUG-v016]
2026-06-21 13:39:40 PLAN/S0582_streams-csv-parser-tests/PHASE_02__docs-catalog-cleanup.md spec-tech Phase 02: docs-catalog-cleanup [branch: DEBUG-v016]
2026-06-21 13:39:40 PLAN/S0582_streams-csv-parser-tests.md spec-tech Status -> Tactical [branch: DEBUG-v016]
2026-06-21 13:49:50 PLAN/S0577_background-audio-playback-group/INDEX.md spec-tech Create 6-phase tactical plan for S0577 (background-audio group move + stream propagation); Approved -> Tactical [branch: DEBUG-v016]
2026-06-21 14:34:18 PLAN/S0577_background-audio-playback-group.md spec-dev All 6 phases done; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-21 14:34:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioExitBehaviorResolver.kt spec-dev S0577 P01: extract reusable audio-exit decision + dialog; PlayerLifecycleManager delegates [branch: DEBUG-v016]
2026-06-21 14:34:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-dev S0577 P02-04: streams honor background-playback gate (in-app player when off) + exit-behavior dialog [branch: DEBUG-v016]
2026-06-21 14:34:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-dev S0577 P05: move background-audio block to a collapsible group on the Player tab; rename exit label EN/RU/UK [branch: DEBUG-v016]
2026-06-21 14:34:19 docs/settings/settings-manifest.json spec-dev S0577 P06: regenerate settings manifest + reference + annotations; ALL_FEATURES record [branch: DEBUG-v016]
2026-06-21 15:03:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt S0580 Streams filter model: category/language facets with ALL/ANY combine mode, comma-split language facets, language-less rows always visible [branch: DEBUG-v016]
2026-06-21 15:08:37 app_v2/src/main/res/values/strings.xml S0580 Streams filter/picker strings (category, language, match mode, clear, search hint, empty) in EN/RU/UK [branch: DEBUG-v016]
2026-06-21 15:14:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SearchableOptionPickerDialog.kt S0580 Reusable searchable single-choice picker dialog (type-to-filter, optional flag) + StreamLanguageOptionMapper + picker layouts [branch: DEBUG-v016]
2026-06-21 15:29:16 app_v2/src/test/java/com/sza/fastmediasorter/data/repository/StreamCatalogCsvParserTest.kt spec-all S0582 Add JVM unit tests for StreamCatalogCsvParser RFC-4180 tokenizer + header-by-name mapping (quoted commas, escaped quotes, embedded newlines, CRLF/LF, trailing newline, reordered/missing columns, blank-row skip, boolean flags) [branch: DEBUG-v016]
2026-06-21 15:31:58 PLAN/S0582_streams-csv-parser-tests.md spec-all Pipeline Verified: S0582 streams-csv-parser-tests (11/11 unit tests green, status Tactical -> Verified) [branch: DEBUG-v016]
2026-06-21 15:34:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt S0580 Streams filter UI: category/language dialog with searchable pickers, AND/OR toggle, Clear, active-filter button marker [branch: DEBUG-v016]
2026-06-21 15:36:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt S0580 Streams filter UI: category/language dialog with searchable pickers, AND/OR toggle, Clear, active-filter button marker [branch: DEBUG-v016]
2026-06-21 15:43:27 docs/ALL_FEATURES.jsonl spec-all S0584: rename two malformed ALL_FEATURES id prefixes (s0575->streams, s0559->screen-capture) to area slugs; validate.ps1 green [branch: DEBUG-v016]
2026-06-21 15:43:27 PLAN/S0584_all-features-malformed-id-prefixes.md spec-all Pipeline Verified: S0584 [branch: DEBUG-v016]
2026-06-21 15:44:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt S0580 Insert S0580 BlockNeedUserTest debug probe at onFilter entry [branch: DEBUG-v016]
2026-06-21 15:45:02 PLAN/S0583_streams-catalog-import-timeout.md spec-all Compact spec + audit Verified: hard callTimeout on stream-catalog import [branch: DEBUG-v016]
2026-06-21 15:45:02 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/streams/ImportStreamCatalogUseCase.kt spec-all Add 30s callTimeout to catalog download so a dead/slow host fails fast via existing Failure path [branch: DEBUG-v016]
2026-06-21 15:47:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/StreamsSettingsFragment.kt S0578 Streams shortcut in Media>Streams now follows the Enable Streams master toggle (GONE when off) [branch: DEBUG-v016]
2026-06-21 15:57:20 PLAN/S0580_streams-filter-category-language.md spec-test-device Device run on emulator-5556 -> PASS/FAIL/SKIPPED 11/0/0; category+language+AND/OR+flags+null-handling verified [branch: DEBUG-v016]
2026-06-21 15:59:25 docs/ALL_FEATURES.jsonl spec-all S0585: rename active inventory record s0583.stream-catalog-import-timeout -> streams.stream-catalog-import-timeout (area-slug prefix); validate.ps1 exit 0 [branch: DEBUG-v016]
2026-06-21 15:59:30 PLAN/S0580_streams-filter-category-language.md spec-check Audit S0580 -> Verified; PASS/WARN/FAIL 19/0/0; debug tag removed [branch: DEBUG-v016]
2026-06-21 15:59:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-check Remove S0580 BlockNeedUserTest debug probe on Verified flip [branch: DEBUG-v016]
2026-06-21 16:25:55 delivery/stream-catalog/streams.csv stream catalog Added 17 verified live audio/video sources and refreshed the curated catalog inventory snapshot in README. [branch: DEBUG-v016]
2026-06-21 16:27:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt S0586 Streams toolbar: tint menu icons so add/refresh actions are visible (white-fill icons were invisible on light toolbar) [branch: DEBUG-v016]
2026-06-21 16:36:33 delivery/stream-catalog/streams.csv streams.csv Added 25 new news and music streams across EN, RU, and UA languages [branch: DEBUG-v016]
2026-06-21 16:44:14 docs/ Internet Streams documentation Document the Internet Streams feature (Streams screen, internet radio with ICY, HLS/DASH/RTSP, .m3u + curated catalog import, category/language filter, background-audio, car-headunit/audio-player/replacement use-cases) across README/QUICK_START/HOW_TO/FAQ/TROUBLESHOOTING/LIMITATIONS/REPLACES/MODULE_SELECTION/V2*/ARCHITECTURE/TECH_STACK/VR* (EN/RU/UK), add a new internet-radio howto scenario (EN/RU/UK) + howto index rows, and landing pages index/-ru/-uk [branch: DEBUG-v016]
2026-06-21 16:44:15 scripts/docs/render-settings-reference.ps1 render-settings-reference.ps1 Render the Streams settings section (add ‘streams’ to sectionOrder + localized label); regenerate SETTINGS_REFERENCE EN/RU/UK/noLegal so the Enable Streams toggle and Streams shortcut appear [branch: DEBUG-v016]
2026-06-21 16:57:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerEventHandler.kt S0581 phase 2: stream-unavailable dialog in fullscreen player S0581 phase 2: video/RTSP stream playback failures in the fullscreen player now show the same Retry/Remove/Cancel dialog. PlayerPlaybackCallbackImpl routes stream-scheme errors to PlayerViewModel.onStreamPlaybackFailed, which resolves the row via new GetStreamSourceByUrlUseCase (StreamSourceDao.getByUrl) and emits ShowStreamUnavailable; PlayerEventHandler renders it. Retry replays, Remove deletes the row and closes the player, Cancel closes. [branch: DEBUG-v016]
2026-06-21 17:09:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt S0587 streams scroll-nav buttons S0587: add file-browser-style scroll-navigation buttons (top/page-up/page-down/bottom) to the Streams list. New StreamScrollButtonManager (visibility + click actions mirroring BrowseScrollButtonManager/BrowseButtonSetupHelper), FAB stack overlaid in the rvStreams FrameLayout in both portrait and landscape, wired in StreamsActivity with visibility refresh on list submit. [branch: DEBUG-v016]
2026-06-21 17:17:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamSourceAdapter.kt S0588 distinct pinned-row pin icon S0588: pinned stream rows now render a filled accent pin (colorPrimary) while unpinned rows use a new outlined ic_pin_outline tinted colorControlNormal. StreamSourceAdapter.bindPinState swaps icon+tint from source.pinned; item default src set to the outline. [branch: DEBUG-v016]
2026-06-21 17:21:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamSourceAdapter.kt S0579 rotate playing stream icon S0579: the now-playing audio stream row spins its kind icon, reusing the file-browser InlinePlaybackAnimator (rotation 0-360, infinite). StreamSourceAdapter starts/stops per bind from isPlaying and cancels in onViewRecycled so a recycled row never keeps spinning. [branch: DEBUG-v016]
2026-06-21 17:24:33 PLAN/spec-catalog.jsonl spec-next Session: 3 processed (S0587/S0588/S0579 -> BlockNeedUserTest), 0 verified, 3 external/infra skip-cached (S0555/S0556/S0530) [branch: DEBUG-v016]
2026-06-21 17:58:28 PLAN/S0567_ui-settings-forms-dialogs-unification.md spec-all Approved strategic spec S0567 (UI settings/forms/dialogs unification): added 3.3 owner-inputs gate, fixed duplicate Ticket header [branch: DEBUG-v016]
2026-06-21 18:04:42 PLAN/S0567_ui-settings-forms-dialogs-unification/INDEX.md spec-tech Create 7-phase tactical plan for S0567 (UI settings/forms/dialogs unification) [branch: DEBUG-v016]
2026-06-21 18:04:42 PLAN/S0567_ui-settings-forms-dialogs-unification.md spec-tech Status -> Tactical; linked tactical INDEX [branch: DEBUG-v016]
2026-06-21 18:07:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt Streams screen Streams UI fixes: drop cleartext note text, apply colorPrimary app-header scheme, split scroll-nav buttons into top/bottom groups mirroring the file browser (S0587) [branch: DEBUG-v016]
2026-06-21 18:08:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsSelectionRow.kt spec-dev S0567 Phase 01: add SettingsSelectionRow compound view (ssr_* attrs, view_settings_selection_row.xml, Kotlin class owning TooltipDialog) [branch: DEBUG-v016]
2026-06-21 18:25:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/, app_v2/src/main/res/layout/dialog_streams_filter.xml, app_v2/src/main/res/values*/strings.xml Streams filter dialog Redesign the Streams filter dialog: drop the AND/OR match-mode toggle (facets are now ANDed, All disables a facet), add an All/Audio/Video media-kind filter (RTSP grouped under video), pin each filter value next to its label so it no longer drifts in landscape, move Clear filters into the dialog button bar next to OK (resets without dismissing), pin English/Russian/Ukrainian to the top of the language picker, and theme the rows via ?attr/selectableItemBackground instead of a hardcoded white background. [branch: DEBUG-v016]
2026-06-21 19:12:11 PLAN/S0589_streams-link-liveness-audit.md spec Scaffold strategic spec skeleton S0589 (stream-link liveness audit + prune) [branch: DEBUG-v016]
2026-06-21 19:12:12 PLAN/S0590_player-title-stream-channel-name.md spec Scaffold strategic spec skeleton S0590 (channel name in player title for video streams) [branch: DEBUG-v016]
2026-06-21 19:18:06 PLAN/S0589_streams-link-liveness-audit.md spec-all Compact spec S0589: conservative dead-link auto-prune (Approved) [branch: DEBUG-v016]
2026-06-21 19:19:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt spec-dev S0567 Phase 01 Step 01.4: migrate 5 settings selection rows (Device Profile, Saved Authorizations, Statistics, Link autodownload, Screenshot gestures) to SettingsSelectionRow across general+destinations (both orientations) + controller rewiring [branch: DEBUG-v016]
2026-06-21 19:25:01 scripts/stream_catalog/check-liveness.ps1 spec-all S0589: add conservative opt-in -Prune (dead-only, dry-run default, backup) to stream catalog liveness checker + docs [branch: DEBUG-v016]
2026-06-21 19:25:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsDropdownRow.kt spec-dev S0567 Phase 02: add SettingsDropdownRow compound view (sdr_* attrs, Material exposed dropdown, owns TooltipDialog) [branch: DEBUG-v016]
2026-06-21 19:27:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player spec-all S0590: show stream channel name as player title/overlay (resolve via GetStreamSourceByUrlUseCase by URL, fall back to URL-derived filename) [branch: DEBUG-v016]
2026-06-21 19:27:07 PLAN/S0593_streams-verified-online-state.md spec Scaffold strategic spec skeleton S0593 (verified-online state: CSV last_online + app green-on-play, yellow-resolution) [branch: DEBUG-v016]
2026-06-21 19:27:38 docs/FEATURES.md docs Add Section 19: Internet Streams detailing stream player features, inline ICY metadata, category/language filters, background playback behavior, and local favorites pinning [branch: DEBUG-v016]
2026-06-21 19:27:41 docs/FEATURES_RU.md docs Add Section 19: Internet Streams detailing stream player features, inline ICY metadata, category/language filters, background playback behavior, and local favorites pinning (RU) [branch: DEBUG-v016]
2026-06-21 19:27:44 docs/FEATURES_UK.md docs Add Section 19: Internet Streams detailing stream player features, inline ICY metadata, category/language filters, background playback behavior, and local favorites pinning (UK) [branch: DEBUG-v016]
2026-06-21 19:35:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt S0592 S0592: map stream mediaKind to MediaType (audio streams no longer forced to VIDEO in fullscreen player) [branch: DEBUG-v016]
2026-06-21 19:36:55 app_v2/src/main/res/layout/fragment_settings_general.xml S0567 Phase 02 Step 02.4 Replace 7 raw Spinner widgets with SettingsDropdownRow (language, color theme, sort, subtitle/audio language, font size/family) across 4 layouts + landscape counterparts; rewrite 6 controllers to setEntries/getSelectedIndex/setOnItemSelectedListener; fold paired labels into sdr_title, drop tvSubtitleLanguageLabel and route enable-dimming through row.isEnabled; remove now-unused Spinner/AdapterView/ArrayAdapter imports. [branch: DEBUG-v016]
2026-06-21 19:38:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/FilterResourceDialog.kt spec-dev S0567 Phase 02 Step 02.4: migrate 7 raw Spinners to SettingsDropdownRow (Language/ColorTheme/Sort/Subtitle/Audio/FontSize/FontFamily) across 4 layouts (both orientations) + 6 controllers [branch: DEBUG-v016]
2026-06-21 19:45:32 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/Models.kt S0591 synthetic stream resource-id collision Add SyntheticResourceIds sentinel object (FAVORITES=-100L, STREAM=-200L) and route the player stream launch through STREAM so a stream is no longer materialized as the Favorites virtual resource and no longer fires resource.id==FAVORITES branches; StreamsActivity launch site and PlayerMediaFilesLoader synthetic-resource resolution updated. [branch: DEBUG-v016]
2026-06-21 19:48:16 PLAN/S0593_streams-verified-online-state.md spec-all S0593 compact spec: stream-row play-status bullet (local outcome), Approved+Tactical [branch: DEBUG-v016]
2026-06-21 20:01:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams S0593 Streams list per-row play-status bullet (green OK / red FAIL / amber unknown) from local playback outcome: Room 34-35 migration adds lastPlayOutcome/lastPlayOutcomeAt to stream_sources, recorded from inline-audio and fullscreen video/RTSP success+error hooks via RecordStreamPlayOutcomeUseCase, rendered in StreamSourceAdapter with distinct icon shapes + EN/RU/UK contentDescription [branch: DEBUG-v016]
2026-06-21 20:06:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-dev S0567 Phase 03: SettingsInputRow widget + full restructure of slideshow/prefetch/cache help-input grids (SettingsInputRow + SettingsDropdownRow), help icons folded into rows, cache buttons re-anchored [branch: DEBUG-v016]
2026-06-21 20:28:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ListSelectionDialog.kt spec-dev S0567 Phase 04: generic ListSelectionDialog + ListSelectionAdapter + item/dialog layouts; ResourcePickerDialog/DestinationPickerDialog reduced to thin subclasses (ADR-3, hardcoded-color buttons removed); deleted orphaned dialog_resource_picker layouts [branch: DEBUG-v016]
2026-06-21 20:28:45 PLAN/S0530_rendezvous-signaling-server.md spec-update Refinement (GPT-5 Codex, focus: language|structure|verifiability|consistency|completeness|style) [branch: DEBUG-v016]
2026-06-21 20:32:06 PLAN/S0567_ui-settings-forms-dialogs-unification.md spec-arc Archive S0567 partial (phases 01-03 P0 row widgets delivered) -> temp/done/; remaining phases 04-07 split into S0595 [branch: DEBUG-v016]
2026-06-21 20:36:54 PLAN/ spec-arc Archive 11 Verified specs -> temp/done/: S0559, S0569, S0573, S0574, S0576, S0580, S0582, S0583, S0584, S0585, S0589 [branch: DEBUG-v016]
2026-06-21 20:40:05 PLAN/S0594_sort-mode-spinner-position-mapping.md spec-all Compact spec + approve: S0594 explicit sort-mode mapping [branch: DEBUG-v016]
2026-06-21 20:40:23 PLAN/S0595_forms-dialogs-unification-remainder/INDEX.md spec-all S0595 tactical plan (3 phases: form primitives, ActionHelpRow+audit, cleanup) - carries S0567 remainder [branch: DEBUG-v016]
2026-06-21 20:44:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-all S0594: explicit PLAYBACK_SORT_MODES mapping for Playback sort selector (removes position<->enum-ordinal coupling) [branch: DEBUG-v016]
2026-06-21 21:09:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/ S0595 Forms/dialogs unification remainder: add FormFieldPairLayout + FormCheckboxRow + ActionHelpRow; migrate resource editor + add resource field pairs and GIF editor button+help strips; defer add_resource checkbox rows to S0596 [branch: DEBUG-v016]
2026-06-21 21:09:41 PLAN/S0595_forms-dialogs-unification-remainder/INDEX.md S0595 Implemented phases 01-03; status -> BlockNeedUserTest (device verify resource editor/add resource forms + GIF editor portrait+landscape) [branch: DEBUG-v016]
2026-06-21 21:18:44 PLAN/S0595_forms-dialogs-unification-remainder.md S0595 Verified: device-confirmed Add Resource field pairs + Resource Editor clean inflation; removed S0595 debug tags; GIF editor ActionHelpRow residual device check noted [branch: DEBUG-v016]
2026-06-21 21:19:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScheduledOperation.kt Scheduled operations: next-run computation + date display Unify next-run computation (computeNextRunAt) shared by editor preview and initial scheduling so preview matches the enqueued time; interval-aware (was day-only); show next-run date (yy-MM-dd HH:mm) in the upcoming widget, not just time [branch: DEBUG-v016]
2026-06-21 21:27:43 app_v2/src/main/res/layout/fragment_settings_playback.xml rowFollowSystemRotationPlayer Decouple player screen rotation from the program follow-OS flag: player toggle is now independent and always visible when an accelerometer is present; rename program toggle to ‘Rotate screen with OS auto-rotate (except player)’; sync strings/annotations/manifest/reference [branch: DEBUG-v016]
2026-06-21 21:52:55 app_v2/src/main/res/layout/activity_add_resource.xml Add Resource form S0596: migrate Add Resource checkbox+subtitle(+help) rows to FormCheckboxRow; convert controller listeners to 1-arg; remove RememberFileList help buttons + dead dialog + orphaned help_remember_file_list string [branch: DEBUG-v016]
2026-06-21 21:59:03 app_v2/.../search/LayoutSettingsSearchSource.kt S0597 Fix settings-search regression: scanner now recognizes the S0567 SettingsInputRow widget (new EntryKind.INPUT_ROW reading app:sir_title/app:sir_hint); restores cache-size limit, network parallelism and slideshow interval to the search index. Regenerated manifest, re-added 3 annotations, re-rendered SETTINGS_REFERENCE*.md. Parked S0598 for dropdown/selection-row searchability. [branch: DEBUG-v016]
2026-06-21 22:18:05 PLAN/S0566_samsung-camera-ui-alignment.md spec-dev S0566 phases fk-verified (kapt blocker resolved); status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-21 22:18:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0566: inserted 7 device-test debug tags at camera capture-flow entry points [branch: DEBUG-v016]
2026-06-21 22:25:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/LayoutSettingsSearchSource.kt S0598 Settings search now indexes SettingsDropdownRow and SettingsSelectionRow rows (new EntryKind DROPDOWN_ROW/SELECTION_ROW); regenerated settings manifest, added 12 EN/RU/UK annotations, re-rendered SETTINGS_REFERENCE [branch: DEBUG-v016]
2026-06-21 22:54:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt OperationsSettingsFragment.applyFlavorRestrictions Hide default-player toggles and reset their preferences to false on unsupported configurations [branch: DEBUG-v016]
2026-06-21 22:54:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchRegistry.kt SettingsSearchRegistry Inject MediaCapabilities and filter default-player toggles/buttons out of search when unsupported [branch: DEBUG-v016]
2026-06-21 22:57:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchAvailability.kt SettingsSearchAvailability Added runtime device-feature gating for settings search rows hidden by SDK or accelerometer checks [branch: DEBUG-v016]
2026-06-21 23:08:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt S0602 default-player toggles gated on unsupported flavors Removed redundant standalone layoutDefaultPlayerToggles visibility assignment so applyFlavorRestrictions() is the single source of truth for hiding+resetting the default-player rows on lite; verified UI gating (container, registration-button subgroup) and search exclusion (SettingsSearchRegistry capability gate for rows + 4 default-player buttons) already cover the unsupported-flavor case [branch: DEBUG-v016]
2026-06-21 23:13:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchRegistry.kt S0599 Settings search: gate index by container membership via SettingsSearchCapabilityGate so screen-capture rows (gesture/menu-screenshot) hidden by empty DI sets stop returning dead search results in flavors lacking the capability [branch: DEBUG-v016]
2026-06-21 23:28:03 dev/2026-06-21_competitive_feature_research.md competitive_feature_research Added competitive feature research document with internet analogs, gap analysis, and prioritized feature backlog [branch: DEBUG-v016]
2026-06-21 23:34:54 dev/2026-06-21_feature_expansion_options_ru.md feature_expansion_options_ru Added Russian summary document with feature expansion options, estimated complexity, and preliminary priority [branch: DEBUG-v016]
2026-06-21 23:43:41 PLAN/S0600_extend-settings-search-capability-gate-remaining-rows.md spec-all S0600 verified: settings-search capability gate extended to mic, background-audio, cloud, OCR/translation and extensions rows [branch: DEBUG-v016]
2026-06-21 23:43:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchCapabilityGate.kt spec-all Per-key capability gating for runtime-hidden settings-search rows; CapabilityAvailability.isPersistentAudioPlaybackAvailable wrapper [branch: DEBUG-v016]
2026-06-21 23:48:55 dev/ Housekeeping Archived 10 stale planning docs from dev/ to temp/done/ (edge-to-edge trio - work done; S0387/S0401/S0582 task+design - specs Archived; TASK_PRUNE_FEATURES - superseded by skill-release-only FEATURES policy). Kept active-ticket docs (S0046/S0292/S0588/S0602) and fresh 2026-06-21 research. [branch: DEBUG-v016]
2026-06-21 23:58:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/SettingsSearchDeviceFeatureGate.kt Settings search S0601: settings search hides device-feature-gated rows (PiP API-31, accelerometer rotation, camera-OCR isOcrSupported) via new SettingsSearchDeviceFeatureGate wired into SettingsSearchRegistry; unit-tested decision table [branch: DEBUG-v016]
2026-06-22 00:12:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/LayoutSettingsSearchSource.kt settings-search S0603: index AppCompatSpinner OCR pickers + TextView language pickers in settings search (contentDescription title fallback); gate the 6 keys on translation/OCR-device axes [branch: DEBUG-v016]
2026-06-22 00:30:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/search/LayoutSettingsSearchSource.kt settings-search S0604: de-index transient permission-prompt buttons (btnNotificationPermission, btnScheduledNotificationPermission) from settings search; remove orphaned annotations; regenerate manifest + reference [branch: DEBUG-v016]
2026-06-22 00:37:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/NestedScrollableHost.kt S0606 3D/VR settings landscape scroll Add NestedScrollableHost to keep ViewPager2 from capturing the settings page vertical scroll on VR pointers; wrap Media settings scroll view [branch: DEBUG-v016]
2026-06-22 00:43:31 app_v2/src/vr/cpp/xr_session.cpp VR immersive re-entry S0607: self-heal recreate of OpenXR session when it stalls below READY on immersive re-entry (volumetric-window race); preserves instance/EGL/GL assets [branch: DEBUG-v016]
2026-06-22 00:45:45 app_v2/src/{main,noLegal,debug}/res/layout* S0605 landscape button width unification Unify button widths so none stretch full screen in landscape: match_parent/constraint-stretch single buttons to wrap_content + gravity, button-bar pairs to wrap_content + parent gravity=end across ~30 layout families; keypad grid, folder-shortcut grid, settings export/import label-wrap pairs, playback nav rail and full-row item buttons left as fixed-by-form-logic [branch: DEBUG-v016]
2026-06-22 01:02:29 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt VR immersive re-entry S0607: keep single DiagnosticXrActivity alive across immersive entries so reused XrInstance stays bound to a live Activity (fixes re-entry IDLE hang); revert native session-recreate [branch: DEBUG-v016]
2026-06-22 01:08:34 app_v2/src/main/res/layout{,-land}/{fragment_settings_general,dialog_folder_selection}.xml S0605 button width pass 2 (Flow chip groups) Convert weighted half-width button pairs/grids to ConstraintLayout+Flow chip groups (text-sized, packed left, wrap to new lines) in fragment_settings_general (4 export/import-backup groups) and dialog_folder_selection (special + quick folder shortcuts), both orientations; only calculator keypad keeps weighted layout [branch: DEBUG-v016]
2026-06-22 01:18:09 app_v2/src/vr/cpp/xr_session.cpp VR immersive re-entry S0607: recreate XrInstance per entry bound to current Activity; init OpenXR loader once with Application context (fixes re-entry IDLE hang + S0291 abort root cause) [branch: DEBUG-v016]
2026-06-22 01:27:10 PLAN/S0606_vr-settings-landscape-scroll.md S0606 investigation Investigated 3D-VR detail groups empty-to-bottom on Quest (master ON, landscape). Proved 2-column landscape layout renders fully on phone emulator; Quest-specific render failure of lower sub-groups. Rejected and reverted the ViewPager2 scroll-capture hypothesis (NestedScrollableHost). S0606 back to Draft with findings plus next step (on-device height logging). Parked SettingsActivity tab-sync binding crash as S0608. [branch: DEBUG-v016]
2026-06-22 01:28:11 app_v2/src/main/res/layout-land/activity_main.xml Main screen landscape control bar Add localized ‘Programs’ caption + matching content description to the landscape three-dots (overflow) menu button [branch: DEBUG-v016]
2026-06-22 01:31:19 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt S0606 VR detail-groups height probe Instrument VrSettingsBlockFragment to log measured geometry of detail groups + sub-groups + ancestors when 3D-VR detail groups become visible (Quest-only empty-render diagnosis) [branch: DEBUG-v016]
2026-06-22 01:34:25 app_v2/src/vr/cpp/xr_session.cpp VR immersive re-entry S0607 Verified: recreate XrInstance per entry bound to current Activity; OpenXR loader inited once with process-stable Application context (global ref) - fixes 2nd/3rd immersive entry hanging in IDLE on Quest 3 [branch: DEBUG-v016]
2026-06-22 01:35:33 PLAN/S0609_landscape_button_wide_layout.md spec Scaffold strategic spec skeleton S0609 (landscape wide-screen button layout, follow-up to S0605) [branch: DEBUG-v016]
2026-06-22 01:39:16 .claude/commands/spec-prerelease.md spec-prerelease skill Add landscape-rotation crash sweep step (main Activity, Settings, PlayerActivity) to the prerelease scenario; mirrored in .github prompt [branch: DEBUG-v016]
2026-06-22 01:53:51 PLAN/S0610_standalone-image-player-commands.md spec Add strategic spec S0610 for standalone image player print + copy/move commands [branch: DEBUG-v016]
2026-06-22 02:01:02 PLAN/S0610_standalone-image-player-commands/INDEX.md spec-tech Create tactical plan for S0610 (standalone image player print + copy/move) [branch: DEBUG-v016]
2026-06-22 02:01:02 PLAN/S0610_standalone-image-player-commands/PHASE_01__print-send-to-receiver.md spec-tech Phase 01: print-send-to-receiver [branch: DEBUG-v016]
2026-06-22 02:01:02 PLAN/S0610_standalone-image-player-commands/PHASE_02__destination-buttons-root-view.md spec-tech Phase 02: destination-buttons-root-view [branch: DEBUG-v016]
2026-06-22 02:01:02 PLAN/S0610_standalone-image-player-commands/PHASE_03__standalone-bottom-panels-layout.md spec-tech Phase 03: standalone-bottom-panels-layout [branch: DEBUG-v016]
2026-06-22 02:01:03 PLAN/S0610_standalone-image-player-commands/PHASE_04__standalone-copy-move-wiring.md spec-tech Phase 04: standalone-copy-move-wiring [branch: DEBUG-v016]
2026-06-22 02:01:03 PLAN/S0610_standalone-image-player-commands/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v016]
2026-06-22 02:01:03 PLAN/S0610_standalone-image-player-commands.md spec-tech Status -> Tactical [branch: DEBUG-v016]
2026-06-22 02:03:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0610 Phase 01: print via Send-to (SharePrintHost), drop isolated overflow print item [branch: DEBUG-v016]
2026-06-22 02:08:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt spec-dev S0610 Phase 02: DestinationButtonsManager binds to root View instead of unified binding [branch: DEBUG-v016]
2026-06-22 02:09:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerFileOpsInitializer.kt spec-dev S0610 Phase 02: pass binding.root to DestinationButtonsManager [branch: DEBUG-v016]
2026-06-22 02:12:13 app_v2/src/main/res/layout/activity_standalone_photo_video.xml spec-dev S0610 Phase 03: include copy/move bottom panels in standalone image layout (portrait + landscape) [branch: DEBUG-v016]
2026-06-22 02:27:59 app_v2/src/main/res/layout/dialog_streams_filter.xml Streams filter dialog Patch: streams filter category/language values use colorOnSurface instead of colorPrimary for readable contrast on custom theme dialog surfaces [branch: DEBUG-v016]
2026-06-22 02:29:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-dev S0610 Phase 04: standalone copy/move to destination via FileOperationUseCase (move finishes viewer) [branch: DEBUG-v016]
2026-06-22 02:30:35 PLAN/S0611_bugfix-custom-theme-contrast.md spec Scaffold strategic spec skeleton S0611 (custom theme WCAG contrast) [branch: DEBUG-v016]
2026-06-22 02:31:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-dev S0610 Phase 04: standalone copy/move to destination via FileOperationUseCase (move finishes viewer) [branch: DEBUG-v016]
2026-06-22 02:32:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0610 Phase 04: wire copy/move destination panels + custom-path picker in standalone image host [branch: DEBUG-v016]
2026-06-22 02:35:38 docs/ALL_FEATURES.jsonl spec-dev S0610: record standalone image print + copy/move capability [branch: DEBUG-v016]
2026-06-22 02:35:38 PLAN/S0610_standalone-image-player-commands.md spec-dev S0610 all phases implemented; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-22 02:41:19 PLAN/S0612_standalone-nonimage-copy-move-groups.md spec-draft Draft S0612: copy/move groups in audio/document/text standalone hosts (found during S0610) [branch: DEBUG-v016]
2026-06-22 02:41:20 PLAN/S0613_standalone-document-text-print-send-to.md spec-draft Draft S0613: print via Send-to in document/text standalone viewers (found during S0610) [branch: DEBUG-v016]
2026-06-22 10:42:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt app_v2 Fix SFTP/FTP background-audio streaming: build stream URI via encodedAuthority so host:port colon survives; Uri.Builder.authority() percent-encoded it to %3A, making getHost() return ‘host:port’ and getPort() -1, so JSch got the whole authority as hostname (UnknownHostException). Harden NetworkAwareMediaSourceFactory to split a fused host:port defensively. [branch: DEBUG-v016]
2026-06-22 10:43:39 PLAN/S0612_standalone-nonimage-copy-move-groups/INDEX.md spec-all Tactical plan S0612: copy/move groups for audio/document/text standalone hosts (4 phases) [branch: DEBUG-v016]
2026-06-22 10:53:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/AudioStandaloneActivity.kt spec-all S0612: Copy/Move destination groups in standalone audio host (DI + manager + custom-path launcher + inset migration + portrait/landscape layout includes) [branch: DEBUG-v016]
2026-06-22 10:53:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-all S0612: Copy/Move destination groups in standalone document host (DI + manager + custom-path launcher + inset migration + portrait/landscape layout includes) [branch: DEBUG-v016]
2026-06-22 10:53:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-all S0612: Copy/Move destination groups in standalone text host (DI + manager + custom-path launcher + inset migration + portrait/landscape layout includes) [branch: DEBUG-v016]
2026-06-22 10:53:53 PLAN/S0612_standalone-nonimage-copy-move-groups.md spec-all S0612 strategic + tactical: copy/move groups for non-image standalone players (audio/document/text) [branch: DEBUG-v016]
2026-06-22 11:01:14 PLAN/S0612_standalone-nonimage-copy-move-groups.md spec-all Pipeline BlockNeedUserTest: S0612 implemented + built (standard debug PASS); device-test inconclusive on emulator (standalone external-open path not drivable - hosts exported=false, FMS-default aliases not enableable via shell) [branch: DEBUG-v016]
2026-06-22 11:03:19 app_v2/src/main/res/values/themes.xml S0611 spec-all WCAG AA contrast across all 9 themes: full M3 tonal role set per custom overlay (themed dialog/menu/card surfaces), DialogConfirm decoupled from success_color with day/night confirm_button tokens, DARK_* primary lightened to tone-80 + player toolbar on-primary fix (portrait+land). Resource-only; verified numerically on shipped values. [branch: DEBUG-v016]
2026-06-22 11:11:41 scripts/devtest/prerelease-prepare.ps1 S0614 Prerelease prepare now grants ACCESS_LOCAL_NETWORK on API >= 37 (new local-network-grant stage) so the onboarding bypass no longer breaks SMB/SFTP/FTP coverage on a clean install [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0249_vr-test-immersive-image-stage1a.md spec-arc Archive S0249 (vr-test-immersive-image-stage1a) -> temp/done/; removed BlockNeedUserTest debug tag from XrEntryGatewayImpl.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0290_vr_test_quality_overhaul.md spec-arc Archive S0290 (vr-test-quality-overhaul) -> temp/done/; removed 5 BlockNeedUserTest debug tags from DiagnosticXrActivity.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0291_vr_diagnostic_stereo_and_lifecycle_round2.md spec-arc Archive S0291 (vr-diagnostic-stereo-and-lifecycle-round2) -> temp/done/; removed debug tag from DiagnosticXrActivity.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0292_vr-content-launch-ui.md spec-arc Archive S0292 (vr-content-launch-ui) -> temp/done/; removed debug tag from PlayerVrLaunchManager.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0296_vr-immerse-video-playback.md spec-arc Archive S0296 (vr-immerse-video-playback) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0472_screenshot-gesture-send-to-recipients.md spec-arc Archive S0472 (screenshot-gesture-send-to-recipients) -> temp/done/; removed debug tags from ScreenshotGestureActionDispatcher.kt + PhotoVideoStandaloneActivity.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0512_mouse-interaction-enhancements.md spec-arc Archive S0512 (mouse-interaction-enhancements) -> temp/done/; removed debug tags from DuplicateGroupAdapter.kt + BrowseDragSelectManager.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0529_network-audio-always-continue.md spec-arc Archive S0529 (network-audio-always-continue) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0545_camera-capabilities-expansion.md spec-arc Archive S0545 (camera-capabilities-expansion) -> temp/done/; removed 2 debug tags from CameraCaptureActivity.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0547_extensions-manager-empty-on-lite-photos.md spec-arc Archive S0547 (extensions-manager-empty-on-lite-photos) -> temp/done/; removed debug tag from GeneralSettingsFragment.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0549_playback-random-order-fixes.md spec-arc Archive S0549 (playback-random-order-fixes) -> temp/done/; removed debug tags from PlayerManagerInitializer.kt + PlayerMediaFilesLoader.kt [branch: DEBUG-v016]
2026-06-22 11:14:11 PLAN/S0550_player-slideshow-init-uninitialized-dialogmanager-crash.md spec-arc Archive S0550 (player-slideshow-init crash fix) -> temp/done/; removed debug tag from PlayerNavigationManager.kt [branch: DEBUG-v016]
2026-06-22 11:15:15 PLAN/S0558_howto-settings-path-drift-gate.md spec-arc Archive S0558 (howto-settings-path-drift-gate, Implemented, gate verified green) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:17:29 PLAN/S0613_standalone-document-text-print-send-to.md spec-all Strategic spec S0613: document/text print via Send-to in standalone players (Draft->Approved) [branch: DEBUG-v016]
2026-06-22 11:17:58 PLAN/S0519_surface-aware-gamepad-resolution.md spec-arc Archive S0519 (surface-aware-gamepad-resolution, BlockExternal) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:20:14 PLAN/S0563_camera-unified-entry-mode-switch.md spec-arc Archive S0563 (camera-unified-entry-mode-switch) -> temp/done/; removed debug tag from MainCameraCaptureManager.kt (kept valid S0523 tag) [branch: DEBUG-v016]
2026-06-22 11:21:12 PLAN/S0564_main-quick-capture-process-death-persistence.md spec-arc Archive S0564 (main-quick-capture-process-death-persistence) -> temp/done/; removed debug tag from MainCameraCaptureManager.kt [branch: DEBUG-v016]
2026-06-22 11:21:12 PLAN/S0565_internet-stream-playback.md spec-arc Archive S0565 (internet-stream-playback) -> temp/done/; removed 4 debug tags from StreamsActivity.kt + StreamInlineAudioManager.kt + StreamPlaybackHelper.kt [branch: DEBUG-v016]
2026-06-22 11:22:47 PLAN/S0566_samsung-camera-ui-alignment.md spec-arc Archive S0566 (samsung-camera-ui-alignment) -> temp/done/; removed 7 debug tags from CameraCaptureActivity.kt [branch: DEBUG-v016]
2026-06-22 11:22:47 PLAN/S0570_curated-stream-catalog-import.md spec-arc Archive S0570 (curated-stream-catalog-import) -> temp/done/; removed debug tags from StreamsViewModel.kt + StreamsActivity.kt [branch: DEBUG-v016]
2026-06-22 11:22:47 PLAN/S0572_crash_report_share_fallback.md spec-arc Archive S0572 (crash-report share fallback) -> temp/done/; removed debug tags from ScrollableTextDialog.kt + CrashReportPromptManager.kt [branch: DEBUG-v016]
2026-06-22 11:22:47 PLAN/S0577_background-audio-playback-group.md spec-arc Archive S0577 (background-audio-playback-group) -> temp/done/; removed debug tags from StreamsActivity.kt + StreamInlineAudioManager.kt + PlaybackSettingsFragment.kt + PlayerLifecycleManager.kt [branch: DEBUG-v016]
2026-06-22 11:22:47 PLAN/S0578_streams-shortcut-into-media-section.md spec-arc Archive S0578 (streams-shortcut-into-media-section) -> temp/done/; removed debug tag from StreamsSettingsFragment.kt [branch: DEBUG-v016]
2026-06-22 11:22:47 PLAN/S0579_rotate-playing-stream-icon.md spec-arc Archive S0579 (rotate-playing-stream-icon) -> temp/done/; removed debug tag from StreamSourceAdapter.kt [branch: DEBUG-v016]
2026-06-22 11:23:21 PLAN/S0581_stream-unavailable-dialog.md spec-arc Archive S0581 (stream-unavailable-dialog) -> temp/done/; removed debug tags from StreamsActivity.kt + PlayerEventHandler.kt [branch: DEBUG-v016]
2026-06-22 11:23:21 PLAN/S0587_streams-list-scroll-nav-buttons.md spec-arc Archive S0587 (streams-list-scroll-nav-buttons) -> temp/done/; removed debug tag from StreamScrollButtonManager.kt [branch: DEBUG-v016]
2026-06-22 11:23:21 PLAN/S0588_streams-pinned-row-distinct-icon.md spec-arc Archive S0588 (streams-pinned-row-distinct-icon) -> temp/done/; removed debug tag from StreamSourceAdapter.kt [branch: DEBUG-v016]
2026-06-22 11:23:21 PLAN/S0590_player-title-stream-channel-name.md spec-arc Archive S0590 (player-title-stream-channel-name, Implemented) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:23:43 PLAN/S0593_streams-verified-online-state.md spec-arc Archive S0593 (streams-verified-online-state) -> temp/done/; removed 5 debug tags from StreamSourceAdapter.kt + StreamsActivity.kt + StreamInlineAudioManager.kt + PlayerViewModel.kt [branch: DEBUG-v016]
2026-06-22 11:24:34 PLAN/S0594_sort-mode-spinner-position-mapping.md spec-arc Archive S0594 (sort-mode-spinner-position-mapping, Verified) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:24:57 PLAN/S0595_forms-dialogs-unification-remainder.md spec-arc Archive S0595 (forms-dialogs-unification-remainder, Verified) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:24:57 PLAN/S0598_settings-search-dropdown-selection-rows.md spec-arc Archive S0598 (settings-search-dropdown-selection-rows, Verified) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:24:57 PLAN/S0600_extend-settings-search-capability-gate-remaining-rows.md spec-arc Archive S0600 (extend-settings-search-capability-gate-remaining-rows, Verified) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:24:57 PLAN/S0605_landscape_button_width_unification.md spec-arc Archive S0605 (landscape-button-width-unification, Verified) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:24:57 PLAN/S0607_vr_immersive_reentry_session_stuck_idle.md spec-arc Archive S0607 (vr-immersive-reentry-session-stuck-idle, Verified) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:25:18 PLAN/S0596_add-resource-checkbox-rows-formcheckboxrow.md spec-arc Archive S0596 (add-resource-checkbox-rows-formcheckboxrow) -> temp/done/; removed debug tag from AddResourceFormManager.kt [branch: DEBUG-v016]
2026-06-22 11:25:28 PLAN/S0597_settings-search-manifest-drift.md spec-arc Archive S0597 (settings-search-manifest-drift, Implemented) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:25:44 PLAN/S0599_settings-search-capability-gated-dead-results.md spec-arc Archive S0599 (settings-search-capability-gated-dead-results, Implemented) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:26:02 PLAN/S0601_settings-search-device-feature-gated-dead-results.md spec-arc Archive S0601 (settings-search-device-feature-gated-dead-results, Implemented) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:26:50 PLAN/S0602_default-player-toggles-nonfunctional-unsupported-flavors.md spec-arc Archive S0602 (default-player-toggles-nonfunctional-unsupported-flavors, Implemented) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:26:50 PLAN/S0603_settings-search-skips-appcompatspinner-rows.md spec-arc Archive S0603 (settings-search-skips-appcompatspinner-rows) -> temp/done/; removed debug tag from LayoutSettingsSearchSource.kt [branch: DEBUG-v016]
2026-06-22 11:26:50 PLAN/S0604_settings-search-runtime-state-gated-notification-buttons.md spec-arc Archive S0604 (settings-search-runtime-state-gated-notification-buttons, Implemented) -> temp/done/ [branch: DEBUG-v016]
2026-06-22 11:27:24 maestro S0551 Revived root Maestro capability suite with real-oracle flows, prerelease verdict integration, and documentation cleanup [branch: DEBUG-v016]
2026-06-22 11:27:36 PLAN/S0613_standalone-document-text-print-send-to/INDEX.md spec-tech Tactical plan S0613 (4 phases: print-host-seam, document-host-print, text-host-print, docs-catalog-cleanup); status->Tactical [branch: DEBUG-v016]
2026-06-22 11:28:39 maestro S0551 Revive root Maestro capability suite and prerelease integration [branch: DEBUG-v016]
2026-06-22 11:29:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec S0608 Guard SettingsActivity tab-sync posted runnable against torn-down binding (capture tabLayout + isDestroyed short-circuit) - fixes IllegalStateException on launch/recreate race [branch: DEBUG-v016]
2026-06-22 11:32:54 PLAN/S0609_landscape_button_wide_layout.md spec Refocus S0609 to settings-fragment landscape multi-column layout; Draft -> Approved [branch: DEBUG-v016]
2026-06-22 11:33:42 app_v2/src/main/res/values{,-ru,-uk}/strings.xml Strings S0615: fix command-panel 3-zone first-run hint showing doubled percent (20%% -> 20%) in EN/RU/UK; string is shown via setText, never String.format [branch: DEBUG-v016]
2026-06-22 11:43:17 PLAN/S0613_standalone-document-text-print-send-to.md spec-dev S0613: all phases done; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-22 11:43:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintHost.kt spec-dev S0613 Phase 01: new DocumentPrintHost seam (host contract decoupling DocumentPrintManager from PlayerActivity) [branch: DEBUG-v016]
2026-06-22 11:43:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrintShareFallbackManager.kt spec-dev S0613 Phase 01: rename PlayerPrintFallbackManager to PrintShareFallbackManager; takes Activity not PlayerActivity [branch: DEBUG-v016]
2026-06-22 11:43:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DocumentPrintManager.kt spec-dev S0613 Phase 01: depend on DocumentPrintHost seam; route messages and office print through host [branch: DEBUG-v016]
2026-06-22 11:43:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0613 Phase 01: implement DocumentPrintHost seam (player keeps Snackbar surface) [branch: DEBUG-v016]
2026-06-22 11:43:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt spec-dev S0613 Phase 01: construct DocumentPrintManager via host seam [branch: DEBUG-v016]
2026-06-22 11:43:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-dev S0613 Phase 02: implement SharePrintHost + DocumentPrintHost - PDF/Office print via Send-to [branch: DEBUG-v016]
2026-06-22 11:43:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt spec-dev S0613 Phase 03: implement SharePrintHost + DocumentPrintHost - text print via Send-to [branch: DEBUG-v016]
2026-06-22 11:49:54 PLAN/S0609_landscape_button_wide_layout/INDEX.md spec-tech Create tactical plan + research artifacts for S0609 (settings landscape multi-column); status -> Tactical [branch: DEBUG-v016]
2026-06-22 11:54:03 PLAN/S0613_standalone-document-text-print-send-to.md spec-test-device Device run on emulator-5554: regression smoke PASS (launch/no-crash); print flow INCONCLUSIVE on AVD (1/0/1); stays BlockNeedUserTest [branch: DEBUG-v016]
2026-06-22 11:56:26 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0609 Phase 02 Landscape general settings: paired thumbnail-preload toggles into weighted 2-column row with D-pad focus, converted doc-link button row to ConstraintLayout+Flow (left-packed wrap) [branch: DEBUG-v016]
2026-06-22 12:00:44 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0609 Landscape multi-column settings: pair compact toggles + Flow doc-links (general/playback/destinations/images/video) and new documents/streams landscape variants [branch: DEBUG-v016]
2026-06-22 12:00:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt S0609 Add landscape BlockNeedUserTest debug tag for settings multi-column verification [branch: DEBUG-v016]
2026-06-22 12:35:14 PLAN/S0551_maestro-regression-flow-library.md spec-check S0551 Recorded S0551 Broken audit after Maestro suite device proof: expected pass=true,total=16,failed=0; actual pass=false,total=16,failed=10 [branch: DEBUG-v016]
2026-06-22 12:35:19 PLAN/S0551_maestro-regression-flow-library/INDEX.md spec-check S0551 Recorded latest Maestro suite blocker details for S0551 tactical completion gate [branch: DEBUG-v016]
2026-06-22 12:52:28 app_v2/src/main/java/com/sza/fastmediasorter/core/theme/ColorThemePrefs.kt S0611 Add BlockNeedUserTest debug tag at custom theme overlay application seam [branch: DEBUG-v016]
2026-06-22 12:52:28 PLAN/S0611_bugfix-custom-theme-contrast.md S0611 F5 re-audit: compile+launch-smoke verified; Implemented -> BlockNeedUserTest for owner visual sign-off [branch: DEBUG-v016]
2026-06-22 12:54:31 app_v2/src/main/res/layout-land/fragment_settings_video.xml video settings landscape S0617: ellipsize snapshot resource name in landscape/portrait video settings [branch: DEBUG-v016]
2026-06-22 12:55:49 PLAN/S0616_general_settings_portrait_landscape_id_divergence.md spec-all S0616 F1-research: NPE hypothesis disproven (null-safe); re-scoped to orientation-parity; Draft -> BlockQuestions for owner decision [branch: DEBUG-v016]
2026-06-22 12:56:27 PLAN/spec-catalog.jsonl spec-next Session: 2 processed (S0611->BlockNeedUserTest, S0616->BlockQuestions), 0 verified, 2 blocked; large eligible queue remains [branch: DEBUG-v016]
2026-06-22 13:17:18 PLAN/S0618_landscape_settings_density_alignment.md spec Add strategic spec S0618 for landscape settings density & alignment redesign [branch: DEBUG-v016]
2026-06-22 13:18:07 PLAN/S0619_video-control-wide-sliders.md spec Add strategic spec S0619 for wide video-control sliders [branch: DEBUG-v016]
2026-06-22 13:23:00 PLAN/S0619_video-control-wide-sliders/INDEX.md spec-tech Create tactical plan for S0619 (3 phases) [branch: DEBUG-v016]
2026-06-22 13:23:00 PLAN/S0619_video-control-wide-sliders.md spec-tech Status -> Tactical [branch: DEBUG-v016]
2026-06-22 13:23:59 app_v2/src/main/res/values/dimens.xml spec-dev S0619 Phase 01.1: add playback slider dimens (track height, thumb size, min touch) [branch: DEBUG-v016]
2026-06-22 13:24:52 app_v2/src/main/res/drawable/seekbar_playback_thumb.xml spec-dev S0619 Phase 01.2: large oval thumb drawable for playback sliders [branch: DEBUG-v016]
2026-06-22 13:25:37 app_v2/src/main/res/drawable/seekbar_playback_track.xml spec-dev S0619 Phase 01.3: thick rounded track drawable for playback sliders [branch: DEBUG-v016]
2026-06-22 13:26:40 app_v2/src/main/res/values/themes.xml spec-dev S0619 Phase 01.4: Widget.FMS.PlaybackSlider style (thick track + large thumb, opt-in) [branch: DEBUG-v016]
2026-06-22 13:27:30 PLAN/S0618_landscape_settings_density_alignment/INDEX.md spec-tech Create tactical plan for S0618 (6 phases) [branch: DEBUG-v016]
2026-06-22 13:27:30 PLAN/S0618_landscape_settings_density_alignment.md spec-tech S0618 Status -> Tactical [branch: DEBUG-v016]
2026-06-22 13:28:20 app_v2/src/main/res/layout/dialog_playback_control.xml spec-dev S0619 Phase 02.1: apply wide slider style to 4 portrait playback sliders [branch: DEBUG-v016]
2026-06-22 13:29:21 app_v2/src/main/res/layout-land/dialog_playback_control.xml spec-dev S0619 Phase 02.2: apply wide slider style to 4 landscape playback sliders [branch: DEBUG-v016]
2026-06-22 13:33:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt spec-dev S0619: add BlockNeedUserTest verification tag at playback control dialog entry [branch: DEBUG-v016]
2026-06-22 13:34:45 PLAN/S0619_video-control-wide-sliders.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-22 13:45:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsDropdownRow.kt spec-dev S0618 Phase 01: add sdr_inline mode (label left of field) for dense landscape settings [branch: DEBUG-v016]
2026-06-22 13:47:19 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-dev S0618 Phase 02: General landscape pilot - inline Language/Color row, 3-up interface toggles [branch: DEBUG-v016]
2026-06-22 13:47:53 app_v2/src/main/res/layout/view_settings_selection_row.xml spec-dev S0618 Phase 01 (R3): value renders inline next to title in SettingsSelectionRow, chevron stays pinned right [branch: DEBUG-v016]
2026-06-22 13:47:53 app_v2/src/main/res/values/attrs.xml spec-dev S0618 Phase 01 (R6): add sdr_inline boolean attr + sdr_titleLineSpacer id for SettingsDropdownRow inline mode [branch: DEBUG-v016]
2026-06-22 14:20:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsDropdownRow.kt Settings > General (Language/Color theme/Device profile rows) Landscape+portrait: fixed compact width for Language & Color theme dropdowns; landscape Device profile row made inline (chevron right after value, no tall band) [branch: DEBUG-v016]
2026-06-22 14:37:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsInputRow.kt Settings > General > System (Parallelism/Prefetch/Streaming fields) Width-cap the 4 System selectors (network parallelism, prefetch cache, streaming cleanup/TTL) so they stay compact instead of full-width; portrait now pairs parallelism+prefetch on one row [branch: DEBUG-v016]
2026-06-22 14:40:03 app_v2/src/main/res/layout/fragment_settings_playback.xml Settings/Playback/TouchZones Portrait: stack ‘show player hint’ and ‘always show touch zones overlay’ toggles one per row (was a single horizontal weighted row); landscape unchanged [branch: DEBUG-v016]
2026-06-22 14:43:11 PLAN/S0620_optional-nine-zone-grid.md spec Scaffold strategic spec skeleton S0620 [branch: DEBUG-v016]
2026-06-22 14:48:18 app_v2/src/main/res/layout*+values (settings & dialog dropdowns) Settings/dialog dropdown widths Constrain full-width dropdown selectors to fixed compact width per S0567/S0618 convention (sdr_fieldWidth=settings_dropdown_compact_width 240dp; +sdr_inline in landscape). Fixed: Playback default sort mode; Translation dialog font size/family; Player dialog subtitle/audio language; Filter dialog sort-by; Scheduled-op type (bare TIL width); General landscape sync-interval (maxWidth cap). Added settings_dropdown_wide_width 280dp for audio empty-state mode (portrait was match_parent stretch, now matches landscape). Portrait+landscape kept in sync. [branch: DEBUG-v016]
2026-06-22 14:51:13 app_v2/src/main/java/com/sza/fastmediasorter/core/orientation/AppOrientationManager.kt Settings: app-wide auto-rotation toggle Change off-state behavior of the ‘Rotate screen with OS auto-rotate (except player)’ setting: non-player windows now follow the device sensor (SCREEN_ORIENTATION_SENSOR) instead of locking orientation. Updated summary strings (EN/RU/UK), settings annotation and re-rendered SETTINGS_REFERENCE docs. [branch: DEBUG-v016]
2026-06-22 14:57:38 PLAN/S0621_hotfix-standard-gesture-settings.md spec Scaffold strategic spec skeleton S0621 (standard gesture settings group hidden) [branch: DEBUG-v016]
2026-06-22 15:08:22 app_v2/src/main/res/layout/fragment_settings_destinations.xml btnTakeScreenshotNow Move screenshot-test button into Left-edge screen gestures group after gesture actions, rename to ‘Screenshot test’; now follows gesture-card visibility, drop standalone groupMenuScreenshot card; update search gate + test + settings manifest/reference [branch: DEBUG-v016]
2026-06-22 15:10:08 maestro/ spec-all S0551 Maestro capability suite revived and Verified: full -Suite all green 14/14 on seeded emulator. Fixed player locator (btnPlaybackControl), PDF page-mode oracle (photoView), seeded-media names, resume Toast-invisible oracle; added _shared/go_home + downloads_sort_reset determinism fragments; runner disables stylus handwriting; 3D flows moved to device_only/. [branch: DEBUG-v016]
2026-06-22 15:52:43 PLAN/S0621_hotfix-standard-gesture-settings/INDEX.md spec-tech Create tactical plan for S0621 (standard edge-gesture screenshot, 5 phases) [branch: DEBUG-v016]
2026-06-22 15:52:43 PLAN/S0621_hotfix-standard-gesture-settings/PHASE_01__extract-shared-overlay-machinery.md spec-tech Phase 01: extract shared overlay machinery [branch: DEBUG-v016]
2026-06-22 15:52:43 PLAN/S0621_hotfix-standard-gesture-settings/PHASE_02__standard-capture-controller.md spec-tech Phase 02: standard capture controller [branch: DEBUG-v016]
2026-06-22 15:52:43 PLAN/S0621_hotfix-standard-gesture-settings/PHASE_03__standard-manifest.md spec-tech Phase 03: standard manifest [branch: DEBUG-v016]
2026-06-22 15:52:43 PLAN/S0621_hotfix-standard-gesture-settings/PHASE_04__settings-ui-split.md spec-tech Phase 04: settings UI split [branch: DEBUG-v016]
2026-06-22 15:52:43 PLAN/S0621_hotfix-standard-gesture-settings/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs/catalog cleanup [branch: DEBUG-v016]
2026-06-22 15:52:43 PLAN/S0621_hotfix-standard-gesture-settings.md spec-tech Status -> Tactical [branch: DEBUG-v016]
2026-06-22 15:53:41 PLAN/S0622_left-edge-gestures-open-app.md spec Scaffold strategic spec skeleton S0622 [branch: DEBUG-v016]
2026-06-22 15:53:41 PLAN/S0623_app-launch-panel-dialog.md spec Scaffold strategic spec skeleton S0623 [branch: DEBUG-v016]
2026-06-22 16:05:46 AGENTS.md AGENTS.md add timestamp rule [branch: DEBUG-v016]
2026-06-22 16:05:55 CLAUDE.md CLAUDE.md add timestamp rule [branch: DEBUG-v016]
2026-06-22 16:09:12 app_v2/src/standard/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayControllerImpl.kt ScreenGestureOverlayControllerImpl S0621: standard MediaProjection-only edge-gesture controller; shared overlay machinery moved to src/screenCapture; standard manifest overlay FGS (no a11y); settings UI gates accessibility rows off standard [branch: DEBUG-v016]
2026-06-22 16:11:14 app_v2/src/main/res/layout-land/fragment_settings_general.xml Settings (General) landscape Landscape settings: pair All Files + Show Hidden Files on one row (vertical-space saving); pack default user/password/help to the left edge [branch: DEBUG-v016]
2026-06-22 16:12:04 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/OverlayHostService.kt spec-dev S0621 P01: move overlay machinery (OverlayHostService + ScreenGestureOverlayManager) from src/noLegal to shared src/screenCapture [branch: DEBUG-v016]
2026-06-22 16:12:04 app_v2/src/standard/AndroidManifest.xml spec-dev S0621 P03: standard manifest declares overlay strip host + SYSTEM_ALERT_WINDOW/SPECIAL_USE FGS (no accessibility service) [branch: DEBUG-v016]
2026-06-22 16:12:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt spec-dev S0621 P04: hide accessibility-shortcut rows on standard (gate on controller.isFallbackCaptureAvailable); search gate mirrors it [branch: DEBUG-v016]
2026-06-22 16:12:04 docs/ALL_FEATURES.jsonl spec-dev S0621: record standard edge-gesture screenshot capability; fix malformed L378 id prefix (s0612 -> player) [branch: DEBUG-v016]
2026-06-22 16:12:04 PLAN/S0621_hotfix-standard-gesture-settings.md spec-dev S0621 all 5 phases done; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-22 16:12:40 PLAN/S0624_bugfix-sftp-scan-hang-network.md spec Add strategic spec S0624 for SFTP scan hang on network handover (wlan0->rmnet0) [branch: DEBUG-v016]
2026-06-22 16:49:03 PLAN/S0624_bugfix-sftp-scan-hang-network/INDEX.md spec-tech Create tactical plan for S0624 (4 phases) [branch: DEBUG-v016]
2026-06-22 16:49:03 PLAN/S0624_bugfix-sftp-scan-hang-network/PHASE_01__sftp-network-invalidation.md spec-tech Phase 01: sftp-network-invalidation [branch: DEBUG-v016]
2026-06-22 16:49:03 PLAN/S0624_bugfix-sftp-scan-hang-network/PHASE_02__scan-timeout-error-channel.md spec-tech Phase 02: scan-timeout-error-channel [branch: DEBUG-v016]
2026-06-22 16:49:03 PLAN/S0624_bugfix-sftp-scan-hang-network/PHASE_03__sftp-session-hardening.md spec-tech Phase 03: sftp-session-hardening [branch: DEBUG-v016]
2026-06-22 16:49:03 PLAN/S0624_bugfix-sftp-scan-hang-network/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v016]
2026-06-22 16:49:03 PLAN/S0624_bugfix-sftp-scan-hang-network/research/05__forced-reset-lease-safety.md spec-tech Research 05: forced-reset lease safety + watchdog rationale [branch: DEBUG-v016]
2026-06-22 16:49:03 PLAN/S0624_bugfix-sftp-scan-hang-network.md spec-tech Status Approved -> Tactical [branch: DEBUG-v016]
2026-06-22 16:58:06 scripts/streams/collect-stream-candidates.ps1 collect-stream-candidates.ps1 add liveness progress ETA and header-only probe [branch: DEBUG-v016]
2026-06-22 17:06:53 scripts/streams/collect-stream-candidates.ps1 stream catalog unified collector merge stream collection and catalog liveness into one auto-applying script [branch: DEBUG-v016]
2026-06-22 17:06:59 PLAN/S0624_bugfix-sftp-scan-hang-network.md spec-dev S0624 all phases implemented; status -> BlockNeedUserTest [branch: DEBUG-v016]
2026-06-22 17:06:59 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt spec-dev S0624 SFTP scan-hang fix: network-change pool invalidation + force-close scan watchdog with ScanTimeoutException error channel (EN/RU/UK) + JSch keep-alive + dead-const removal [branch: DEBUG-v016]
2026-06-22 17:14:58 .claude/commands/spec-prerelease.md + .github/prompts/spec-prerelease.prompt.md spec-prerelease skill Add non-gating Step 0 ‘Refresh stream-catalog delivery asset’: collect (-PerQuery 30, append alive only) + -CatalogOnly health dry-run, no auto-prune (human-gated, geo-restricted streams read dead locally), plus re-zip/re-upload reminder for delivery-so-v1 asset; honors –dry-run; mirrored in both skill copies [branch: DEBUG-v016]
2026-06-22 17:22:35 app_v2/src/main/res/values*/strings.xml hint_touch_zone_3zone Marked touch zone hint strings as formatted=false in EN/RU/UK so literal percent values are not parsed as format placeholders during resource merge. [branch: DEBUG-v016]
2026-06-22 17:50:09 .claude/commands/spec-prerelease.md spec-prerelease Skill update from 2026-06-22 sweep: device-singleton pre-flight + always -DeviceId, hard-grant ACCESS_LOCAL_NETWORK/MANAGE_EXTERNAL_STORAGE, explicit MainActivity launch (LeakCanary trap), per-app locale on API 33+, Maestro exit-4 device-hygiene note, concrete gh upload command; mirrored to .github/prompts [branch: DEBUG-v016]
2026-06-22 17:58:56 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.6221.755 - plateau merge from DEBUG-v016 (Internet Streams, in-app camera, color themes, screenshot capture, viewer print/transfer, settings search; SFTP-scan + share-crash fixes) [branch: DEBUG-v016]
2026-06-22 18:16:16 docs/FEATURES.md FEATURES Showcase update for v2.60.6221.755 from ALL_FEATURES diff: Samsung-style in-app camera, screen capture, copy/move opened file, standalone image-viewer print/copy/move, print from standalone viewer, settings-search dropdown+edition-aware rows, custom color themes (EN/RU/UK lockstep, 77 bullets each) [branch: DEBUG-v017]
2026-06-22 18:21:38 .claude/commands/skill-release.md skill-release Skill update from 2026-06-22 release run: pin versionName+versionCode into the build (eliminates skew, supersedes post-build re-alignment); Step 2 computes both from one timestamp; Step 8 discards stale worktree build.gradle.kts stamp before merge (was blocking the merge); Step 3 drives release notes from ALL_FEATURES diff (commit log unreliable, PLAN gitignored); Step 6 dev-log-first + stage RU/UK WHATS_NEW + changelog (was omitted); Step 12a post-publish cleanup (commit fastlane changelogs, restore worktree stamp); Step 12b commit+push showcase on next DEBUG branch; FGS gate documented as non-blocking with MEDIA_PROJECTION example [branch: DEBUG-v017]
2026-06-22 21:02:43 .claude/commands/skill-release.md skill-release Correct Play FGS-recovery guidance: re-running publish-play-release.ps1 fails (always re-uploads, Play rejects duplicate versionCode); finish via Console Add-from-library after declaration. Parked S0628 for publisher attach-existing-bundle support [branch: DEBUG-v017]
2026-06-22 21:24:57 scripts/release/publish-play-release.py S0628 Play publisher: pre-check edits().bundles().list() and attach existing AAB by versionCode instead of always re-uploading; lets a post-FGS-403 re-run finish the release. README order-of-operations updated. [branch: DEBUG-v017]
2026-06-22 21:25:25 scripts/devtest/prerelease-prepare.ps1 S0625 Scope every adb call in the pre-release prepare stage to the device-ready-resolved id instead of the optional -DeviceId; fail loud (exit 10) on a non-numeric device-API read so a multi-device misdetect can no longer silently SKIP the ACCESS_LOCAL_NETWORK grant [branch: DEBUG-v017]
2026-06-22 21:30:08 scripts/devtest/prerelease-configure.ps1 S0626 Locale channel now applies the per-app locale with –user current and verifies against the current user (was operating on user 0 and misreading an applied locale as empty -> spurious exit 10), then relaunches the app via explicit MainActivity; updated both spec-prerelease skill mirrors to drop the manual locale workaround [branch: DEBUG-v017]
2026-06-22 21:47:48 app_v2/build.gradle.kts S0630 Gate screen capture out of standard via fms.screenCapture flag: drops MEDIA_PROJECTION + SPECIAL_USE from standard manifest (relocate SPECIAL_USE block + standard gesture controller to src/standardScreenCapture, gate src/screenCapture mount + onVariants injection); verified off-build manifest carries neither FGS, on-build restores both [branch: DEBUG-v017]
2026-06-22 21:57:37 app_v2/src/main/res/layout/activity_streams.xml, app_v2/src/main/res/layout-land/activity_streams.xml Streams search Add clear-text (X) end icon to the streams search field via Material endIconMode=clear_text; clearing resets the filter through the existing doAfterTextChanged wiring. Portrait + landscape. [branch: DEBUG-v017]
2026-06-22 22:06:08 scripts/streams/collect-stream-candidates.ps1 Stream catalog tooling Add -DeepSignal catalog probe: pulls a few KB of real media body (HLS master->media->first segment, DASH manifest, ICECAST/progressive body, RTSP OPTIONS) across many parallel runspaces (default -Throttle 48) to catch declared-but-not-playing streams that the header probe marks alive; adds -Limit/-SignalBytes/-SignalMinBytes/-SignalTimeoutSec and a bytes column in the liveness report. Drop the legal-scope/grey-area inclusion filter and the iptv-org - skip - catalog now keeps every reachable channel that carries signal (only defunct/header-gated/confirmed-dead dropped); README inclusion policy updated. [branch: DEBUG-v017]
2026-06-22 22:12:13 dev/CATALOG/scripts/scan.ps1 S0630 Add src/standardScreenCapture to catalog scan source roots (relocated standard gesture controller + DI module) [branch: DEBUG-v017]
2026-06-22 22:18:01 scripts/streams/collect-stream-candidates.ps1 Stream catalog tooling Add -Publish switch (+ -PublishTag, default delivery-so-v1): zips streams.csv and re-uploads it as the stream-catalog.zip GitHub Release asset via gh, at the end of an append run or after -CatalogOnly maintenance/prune. Uploaded current catalog (2026 rows) to delivery-so-v1. [branch: DEBUG-v017]
2026-06-22 22:59:44 PLAN/S0631_video-stream-player-view.md spec Scaffold strategic spec skeleton S0631 [branch: DEBUG-v017]
2026-06-22 23:05:08 PLAN/S0629_play-fgs-declaration-materials.md fgs-demo Record emulator FGS demo videos (MEDIA_PROJECTION + SPECIAL_USE) on capture-enabled standard build; add video paths and live-swipe emulator limitation to S0629 [branch: DEBUG-v017]
2026-06-22 23:28:34 PLAN/S0631_video-stream-player-view.md spec Approve strategic spec S0631 - stream player control profile [branch: DEBUG-v017]
2026-06-22 23:30:47 DOWNLOADS/FastMediaSorter_standard_release.aab release-eng Build Release B internal-testing AAB v2.60.6222.324 (versionCode 260622232) with fms.screenCapture=on; release manifest carries FOREGROUND_SERVICE_MEDIA_PROJECTION + FOREGROUND_SERVICE_SPECIAL_USE for the Play FGS declaration (S0629). Throwaway worktree flag, reverted; main stays FGS-free (Release A) [branch: DEBUG-v017]
2026-06-22 23:33:30 PLAN/S0631_video-stream-player-view/research/01__player-stream-mode-architecture.md spec S0631 research: flavor/cast matrix + test-coverage appendix, verdict cross-check (stream mode in existing player) [branch: DEBUG-v017]
2026-06-22 23:33:30 PLAN/S0632_cast-live-stream-direct-url.md spec Park draft S0632 - Chrome Cast broken for live stream URL (auto-capture from S0631 research) [branch: DEBUG-v017]
2026-06-22 23:33:30 PLAN/S0633_stream-behind-live-window-recovery.md spec Park draft S0633 - recover live stream on BehindLiveWindow instead of delete-channel dialog (auto-capture from S0631 research) [branch: DEBUG-v017]
2026-06-22 23:37:13 PLAN/S0631_video-stream-player-view/INDEX.md spec-tech Create tactical plan for S0631 (4 phases) [branch: DEBUG-v017]
2026-06-22 23:37:13 PLAN/S0631_video-stream-player-view/PHASE_01__stream-detection.md spec-tech Phase 01: stream-detection [branch: DEBUG-v017]
2026-06-22 23:37:13 PLAN/S0631_video-stream-player-view/PHASE_02__command-panel-profile.md spec-tech Phase 02: command-panel-profile [branch: DEBUG-v017]
2026-06-22 23:37:13 PLAN/S0631_video-stream-player-view/PHASE_03__share-stream-link.md spec-tech Phase 03: share-stream-link [branch: DEBUG-v017]
2026-06-22 23:37:13 PLAN/S0631_video-stream-player-view/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v017]
2026-06-22 23:37:13 PLAN/S0631_video-stream-player-view.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-22 23:40:17 PLAN/S0634_stream-live-hls-robustness.md spec-draft Park live-HLS robustness finding (BehindLiveWindow recovery) [branch: DEBUG-v017]
2026-06-22 23:40:17 PLAN/S0635_cast-live-stream-url.md spec-draft Park cast-for-live-stream-URL finding [branch: DEBUG-v017]
2026-06-23 00:30:43 PLAN/S0632_cast-live-stream-direct-url.md spec-update Refinement (claude-opus-4.8, focus: all) - clean draft skeleton, 0 applied 0 proposed [branch: DEBUG-v017]
2026-06-23 00:54:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/ S0631 video-stream player profile Live video stream player profile: PlayerState.isLiveVideoStream gate drives a stream-only control set (fullscreen, snapshot, rotation, info, video-control dialog, cast, send) across portrait/big-buttons/landscape, hiding file-only actions; Send to shares the stream URL as a text link (new ShareTarget.textCapable flag + ShareableContent.isTextOnly filter + SystemShareTargetHandler text path). Added planner unit tests; fixed unrelated SftpClientTest constructor arity to unblock the test source set. [branch: DEBUG-v017]
2026-06-23 01:03:19 PLAN/S0632_cast-live-stream-direct-url.md spec-all F1 strategic spec filled + approved: S0632 [branch: DEBUG-v017]
2026-06-23 01:06:30 PLAN/S0632_cast-live-stream-direct-url/INDEX.md spec-all F2 tactical plan (2 phases) + research artifact: S0632 [branch: DEBUG-v017]
2026-06-23 01:08:29 app_v2/src/main/res/layout-land/fragment_settings_images.xml spec-all S0618: landscape settings density + left-align - left-align music-source block + selector buttons across images/audio/video/destinations, pack audio/video top toggles and playback file-op row into weighted rows (R1/R2/R5) [branch: DEBUG-v017]
2026-06-23 01:08:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/ImagesSettingsFragment.kt spec-all S0618: BlockNeedUserTest debug-verification tags at view-setup entry of Images/Audio/Video/Playback/Operations settings fragments [branch: DEBUG-v017]
2026-06-23 01:08:29 docs/ARCHITECTURE.md spec-all S0618: document SettingsSelectionRow inline value + pinned chevron rule (R3) under UI Patterns - Trigger Row [branch: DEBUG-v017]
2026-06-23 01:15:43 PLAN/S0632_cast-live-stream-direct-url.md spec-all F3 implemented: direct-URL Cast branch for live video streams (S0632) [branch: DEBUG-v017]
2026-06-23 01:15:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastStreamResolver.kt spec-all New: maps media path to Cast decision (NotAStream/UnsupportedProtocol/Direct contentType), reuses StreamMediaKindClassifier [branch: DEBUG-v017]
2026-06-23 01:15:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt spec-all resolveAndSend routes live streams to direct-URL cast (STREAM_TYPE_LIVE, content-type) bypassing proxy/download; rtsp rejected with toast [branch: DEBUG-v017]
2026-06-23 01:15:43 app_v2/src/main/res/values/strings.xml spec-all Add cast_stream_unsupported_protocol (EN/RU/UK) [branch: DEBUG-v017]
2026-06-23 01:15:43 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/helpers/CastStreamResolverTest.kt spec-all Unit test: 9 cases for cast-stream decision [branch: DEBUG-v017]
2026-06-23 01:17:12 PLAN/S0618_landscape_settings_density_alignment.md spec-test-device Device run on emulator-5556 (landscape) -> PASS/SKIPPED 9/1; 5/5 S0618 tags fired, 0 errors, no crash [branch: DEBUG-v017]
2026-06-23 01:22:10 PLAN/S0618_landscape_settings_density_alignment.md spec-check Audit S0618 -> Verified; PASS/WARN/FAIL 19/0/0; landscape settings density + left-align confirmed on-device [branch: DEBUG-v017]
2026-06-23 01:22:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/ImagesSettingsFragment.kt spec-check Remove S0618 BlockNeedUserTest debug-verification tags + their imports from Images/Audio/Video/Playback/Operations settings fragments on Verified flip [branch: DEBUG-v017]
2026-06-23 01:34:00 PLAN/S0620_optional-nine-zone-grid.md spec-quiz S0620: Draft -> Approved via quiz (1 question; command-panel access on disabled grid resolved) [branch: DEBUG-v017]
2026-06-23 01:41:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt S0634 live-HLS robustness S0634: live-HLS recovery - re-anchor to live edge on BehindLiveWindow (P0), bounded classified retry with backoff (P1), LiveConfiguration + modest live buffer (P2) instead of the ‘channel unavailable’ delete dialog [branch: DEBUG-v017]
2026-06-23 02:00:51 PLAN/S0630_standard-screencapture-fgs-gate.md spec-check Audit S0630 -> Verified; PASS/WARN/FAIL 16/0/0; screen-capture FGS gate verified static (flag, source-set mount, manifest injection, empty-set multibinds, clean relocation) [branch: DEBUG-v017]
2026-06-23 02:02:59 PLAN/S0625_prerelease-prepare-localnet-grant-multidevice.md spec-check Audit S0625 -> Verified; PASS/WARN/FAIL 16/0/0; prerelease-prepare adb calls scoped to resolved TargetDevice, getprop misdetect fails loud instead of skipping ACCESS_LOCAL_NETWORK grant [branch: DEBUG-v017]
2026-06-23 02:06:34 PLAN/S0633_stream-behind-live-window-recovery.md spec-all Archived S0633 as duplicate of S0634 (stream-live-hls-robustness, BlockNeedUserTest) - BehindLiveWindow live-edge recovery already implemented in StreamPlaybackHelper [branch: DEBUG-v017]
2026-06-23 02:08:12 PLAN/S0629_play-fgs-declaration-materials.md spec-all S0629 -> BlockExternal: FGS declaration materials authored + demo videos recorded; remaining YouTube upload + Play Console submission is owner/external, gated on Release B [branch: DEBUG-v017]
2026-06-23 02:10:07 PLAN/S0608_settings-connected-tabs-binding-crash.md spec-check Audit S0608 -> Verified; PASS/WARN/FAIL 5/0/0; setupConnectedTabs captures tabLayout before post{} + isDestroyed short-circuit, binding deref removed from deferred path [branch: DEBUG-v017]
2026-06-23 02:18:22 PLAN/S0620_optional-nine-zone-grid/INDEX.md spec-tech Create tactical plan for S0620 (optional 9-zone grid): 5 phases - settings-storage, touch-zone-resolver, three-zone-command-access, settings-ui-and-strings, docs-catalog-cleanup; status Approved -> Tactical [branch: DEBUG-v017]
2026-06-23 02:20:25 PLAN/S0635_cast-live-stream-url.md spec-all Archived S0635 as duplicate of S0632 (cast-live-stream-direct-url, BlockNeedUserTest) - direct-URL live-stream cast already implemented in CastMediaManager.resolveAndSend via castStreamResolver [branch: DEBUG-v017]
2026-06-23 02:22:42 PLAN/S0614_prerelease-grant-access-local-network.md spec-check Audit S0614 -> Verified; PASS/WARN/FAIL 8/0/0; local-network-grant stage 2.6 grants ACCESS_LOCAL_NETWORK on API>=37 (fail-loud exit 10), SKIP below, reported in stages JSON, no app code [branch: DEBUG-v017]
2026-06-23 02:24:27 PLAN/S0592_stream-mediatype-hardcoded-video.md spec-check Audit S0592 -> Verified; PASS/WARN/FAIL 4/0/0; stream synthetic MediaFile derives type from catalog mediaKind (AUDIO->MediaType.AUDIO, else VIDEO); filled strategic placeholder sections [branch: DEBUG-v017]
2026-06-23 02:28:28 PLAN/S0626_prerelease-configure-perapp-locale.md spec-check Audit S0626 -> Verified; PASS/WARN/FAIL 7/0/0; prerelease-configure locale channel uses cmd locale set/get-app-locales –user current + explicit MainActivity relaunch [branch: DEBUG-v017]
2026-06-23 02:29:47 PLAN/S0628_play-publisher-attach-library-bundle.md spec-check Audit S0628 -> Verified; PASS/WARN/FAIL 8/0/0; publish-play-release.py attaches existing library bundle (bundles().list pre-check) instead of re-uploading duplicate versionCode; README attach-or-upload [branch: DEBUG-v017]
2026-06-23 02:31:56 PLAN/S0615_command-panel-hint-double-percent.md spec-check Audit S0615 -> Verified; PASS/WARN/FAIL 6/0/0; hint_touch_zone_3zone single percent EN/RU/UK (formatted=false), sole consumer setText not String.format, localize check OK [branch: DEBUG-v017]
2026-06-23 02:33:00 PLAN/spec-catalog.jsonl spec-next Session: 12 advanced (8 Verified, 2 archived-as-duplicate, 1 BlockExternal, 1 Approved->Tactical), 10 skip-cached (owner-deferred / research-heavy / desktop-subproject / build-epic) [branch: DEBUG-v017]
2026-06-23 03:00:12 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt S0622 Add OPEN_APP left-edge gesture action: bring app to foreground (reorder-to-front, preserve state) via shared pre-capture handler; wired into MediaProjection overlay + noLegal accessibility paths; picker label + EN/RU/UK strings [branch: DEBUG-v017]
2026-06-23 10:13:25 PLAN/S0426_home-screen-weather-block.md spec-research S0426/S0427/S0428/S0429: research-refresh (2026-06-23) of launcher home-surface sibling specs - resolved/informed open items (weather source licensing, app-shortcut query flags, call/SMS Play policy + contact-picker permission nuance, Google-content OAuth/CASA cost ladder), corrected stale assumptions (Open-Meteo geocoding non-commercial; Google identity plumbing is live not archived; YouTube scope sensitive not restricted), appended dated research-result sections with cited sources [branch: DEBUG-v017]
2026-06-23 10:14:44 PLAN/S0636_googlescope-kdoc-restricted-scope.md spec Scaffold strategic spec skeleton S0636 [branch: DEBUG-v017]
2026-06-23 10:41:31 PLAN/S0637_stream-channel-shortcut.md spec Add strategic spec S0637 for stream-channel home-screen launch shortcut [branch: DEBUG-v017]
2026-06-23 12:18:29 PLAN/S0404_android-launcher-mode-profiles.md spec S0404: add conceptual-model subsection 1.1 (what launcher mode is - system Home surface, three launch-point kinds, capability ladder) consolidating the owner clarification; shared terminology for S0426-S0429 siblings [branch: DEBUG-v017]
2026-06-23 12:21:15 PLAN/S0638_playback-control-adaptive-sections.md spec Add strategic spec S0638 for adaptive section navigation in playback control dialog [branch: DEBUG-v017]
2026-06-23 12:26:07 PLAN/S0637_stream-channel-shortcut/INDEX.md spec-tech Create tactical plan for S0637 (4 phases) [branch: DEBUG-v017]
2026-06-23 12:26:07 PLAN/S0637_stream-channel-shortcut/PHASE_01__deep-link-entry.md spec-tech Phase 01: stream play deep-link entry point [branch: DEBUG-v017]
2026-06-23 12:26:07 PLAN/S0637_stream-channel-shortcut/PHASE_02__pin-shortcut-helper.md spec-tech Phase 02: pin-shortcut creation helper [branch: DEBUG-v017]
2026-06-23 12:26:07 PLAN/S0637_stream-channel-shortcut/PHASE_03__row-action-trigger.md spec-tech Phase 03: row action trigger + strings [branch: DEBUG-v017]
2026-06-23 12:26:07 PLAN/S0637_stream-channel-shortcut/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog cleanup [branch: DEBUG-v017]
2026-06-23 12:26:07 PLAN/S0637_stream-channel-shortcut.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-23 12:30:26 PLAN/S0636_googlescope-kdoc-restricted-scope.md spec-all Compact spec + Last Audit: S0636 GoogleScope KDoc restricted-scope fix (Verified) [branch: DEBUG-v017]
2026-06-23 12:30:26 app_v2/src/main/java/com/sza/fastmediasorter/domain/identity/GoogleScope.kt spec-all Correct GoogleScope KDoc: label DRIVE/DRIVE_READONLY as restricted (CASA), reconcile class invariant wording [branch: DEBUG-v017]
2026-06-23 12:30:29 PLAN/spec-catalog.jsonl S0631 + S0640/S0641/S0642 Closed S0631 (stream player mode) -> Verified, removed S0631 debug tags; opened three follow-up Draft specs for stream player UX (hide copy/move groups, repurpose nav buttons to stream list navigation, trim on-player video controls) [branch: DEBUG-v017]
2026-06-23 12:32:10 PLAN/S0638_playback-control-adaptive-sections.md spec-quiz S0638: Draft -> Approved via quiz (2 questions) [branch: DEBUG-v017]
2026-06-23 12:49:08 PLAN/S0637_stream-channel-shortcut.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-23 12:49:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-dev Stream play-by-url deep-link entry, add-to-home-screen action, PlayRequested handling [branch: DEBUG-v017]
2026-06-23 12:49:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-dev playByUrl resolves a shortcut URL; new StreamsEvent.PlayRequested [branch: DEBUG-v017]
2026-06-23 12:49:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamSourceAdapter.kt spec-dev Row overflow PopupMenu (add to home screen / remove) [branch: DEBUG-v017]
2026-06-23 12:49:08 app_v2/src/main/res/layout/item_stream_source.xml spec-dev Overflow button on the stream row [branch: DEBUG-v017]
2026-06-23 12:49:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamShortcutPinManager.kt spec-dev New pin-shortcut helper (ShortcutManagerCompat requestPinShortcut) [branch: DEBUG-v017]
2026-06-23 12:49:08 app_v2/src/main/AndroidManifest.xml spec-dev StreamsActivity launchMode singleTop for shortcut re-entry [branch: DEBUG-v017]
2026-06-23 12:49:08 app_v2/src/main/res/values/strings.xml spec-dev Five new stream home-screen-shortcut strings (EN/RU/UK) [branch: DEBUG-v017]
2026-06-23 13:11:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt S0640 Stream player: top prev/next buttons now navigate the saved video-stream catalog (snapshot in list order) instead of being inert single-item no-ops; PlayerViewModel gains ObserveStreamSourcesUseCase, loader builds the channel list with URL-based start index and single-item fallback. [branch: DEBUG-v017]
2026-06-23 13:11:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ExoPlayerControlsManager.kt S0641 Stream player: trim the on-player overlay for a live video stream to play/pause, control-dialog and PiP; hide seek bar, timings, playback-order, file prev/next and rewind/forward, re-applied on every controller-show. [branch: DEBUG-v017]
2026-06-23 13:11:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/CommandPanelAvailabilityUpdater.kt S0642 Stream player: hide the Copy-to / Move-to destination panels for a live video stream by gating their visibility on isLiveVideoStream. [branch: DEBUG-v017]
2026-06-23 14:43:56 PLAN/S0638_playback-control-adaptive-sections/INDEX.md spec-tech Create tactical plan for S0638 (4 phases) [branch: DEBUG-v017]
2026-06-23 14:43:56 PLAN/S0638_playback-control-adaptive-sections.md spec-tech S0638 Status -> Tactical [branch: DEBUG-v017]
2026-06-23 14:49:04 PLAN/S0639_drive-restricted-scope-casa-compliance.md spec-all Strategic spec S0639: corrected CASA assessment (client-only -> CASA not applicable, only restricted-scope OAuth verification); recommend keeping restricted full-Drive, no drive.file migration; BlockQuestions on owner go/no-go + external verification status [branch: DEBUG-v017]
2026-06-23 14:57:37 PLAN/S0638_playback-control-adaptive-sections.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-23 14:57:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/MaxHeightLinearLayout.kt spec-dev New reusable height-capping LinearLayout for bounded dialogs (S0638) [branch: DEBUG-v017]
2026-06-23 14:57:37 app_v2/src/main/res/layout/dialog_playback_control.xml spec-dev Portrait playback control: vertical section rail + content master-detail, height-bounded (S0638) [branch: DEBUG-v017]
2026-06-23 14:57:37 app_v2/src/main/res/layout-land/dialog_playback_control.xml spec-dev Landscape playback control: horizontal section strip on top + content below, height-bounded (S0638) [branch: DEBUG-v017]
2026-06-23 14:57:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt spec-dev Bound dialog height to screen via playbackResizableArea.maxHeightPx (S0638) [branch: DEBUG-v017]
2026-06-23 15:00:19 PLAN/S0623_app-launch-panel-dialog.md S0623 Expanded strategic spec with MVP app-panel options, extensibility points, risks, and recent-app constraints [branch: DEBUG-v017]
2026-06-23 15:05:01 app_v2/src/main/java/com/sza/fastmediasorter/domain/identity/GoogleScope.kt spec-all S0639: correct restricted-scope KDoc - CASA does not apply to client-only data flow (only restricted-scope OAuth verification); record client-only invariant [branch: DEBUG-v017]
2026-06-23 15:05:01 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveBrowserAuthManager.kt spec-all S0639: derive browser/AppAuth Drive scope set from canonical DRIVE_SIGN_IN_SCOPES (single source of truth); remove duplicate raw scope constants from GoogleDriveAuthCoordinator [branch: DEBUG-v017]
2026-06-23 15:05:01 PLAN/S0639_drive-restricted-scope-casa-compliance.md spec-all S0639: resolve open questions (owner delegated) - keep restricted full-Drive + complete OAuth verification, no drive.file migration; scope single-source-of-truth done; BlockExternal on Google Console verification [branch: DEBUG-v017]
2026-06-23 15:16:51 PLAN/S0623_app-launch-panel-dialog.md spec-quiz S0623: Draft -> Approved via quiz (5 questions, 2 auto-resolved) [branch: DEBUG-v017]
2026-06-23 15:38:16 PLAN/S0623_app-launch-panel-dialog/INDEX.md spec-tech Create tactical plan for S0623 (7 phases) [branch: DEBUG-v017]
2026-06-23 15:38:16 PLAN/S0623_app-launch-panel-dialog.md spec-tech S0623 Status -> Tactical [branch: DEBUG-v017]
2026-06-23 15:42:05 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppLaunchPanelTileEntity.kt spec-dev S0623 Phase 01: app-launch panel domain model + Room storage (entity/dao/Migration35To36, @Database v36) [branch: DEBUG-v017]
2026-06-23 15:43:46 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/AppLaunchPanelRepositoryImpl.kt spec-dev S0623 Phase 02: AppLaunchPanelRepository + mapper + impl + Hilt binding (locked-view slot swap) [branch: DEBUG-v017]
2026-06-23 15:47:24 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/panel/ResolveAppLaunchPanelTilesUseCase.kt spec-dev S0623 Phase 03: manifest queries + panel UseCases (query launchable apps, resolve 15-slot UI w/ soft-degrade, launch, first-run seed) [branch: DEBUG-v017]
2026-06-23 16:29:30 PLAN/S0620_optional-nine-zone-grid.md S0620 Add optional 9-zone touch grid: new nineZoneGridEnabled setting (default on) toggled via ‘Disable 9-zone tracking’ at the top of the playback Touch zones block; when off, the fullscreen player uses the 3-zone fallback (previous/zoom/next) with a left-edge command-panel band, swipe stays zoom/seek, hint and settings visibility follow the flag. [branch: DEBUG-v017]
2026-06-23 17:00:58 app_v2/src/cloudEnabled/.../identity/GoogleTokenIssuer.kt + core/di/AppModule.kt S0643 cloud thumbnail token stall Isolate Google OAuth token issuance onto a dedicated single-thread @CloudTokenDispatcher instead of Dispatchers.IO; removes IO-pool starvation/deadlock that stalled cloud thumbnails during heavy media scans. [branch: DEBUG-v017]
2026-06-23 17:20:31 PLAN/spec-catalog.jsonl S0644/S0645/S0646 Opened three Draft specs for settings UI unification: list-value trigger rows, navigation rows, and simple list dialogs. [branch: DEBUG-v017]
2026-06-23 17:22:01 PLAN/spec-catalog.jsonl S0647 Opened a Draft spec for compact default-slideshow width in Player settings with one-row alignment to Default sort mode (portrait + landscape, no-build request). [branch: DEBUG-v017]
2026-06-23 17:27:33 PLAN/spec-catalog.jsonl S0648 Opened a Draft spec for unifying Resource-for-downloads and Upload-screenshots-to rows to match the camera/video target-row pattern. [branch: no-git-by-request]
2026-06-23 17:40:01 PLAN/spec-catalog.jsonl S0649 Opened a Draft spec for a new Additional programs and scenarios settings group in Operations, with moved quick camera translation, calculator, and mini-game rows plus two-column landscape layout. [branch: no-git-by-request]
2026-06-23 17:41:11 PLAN/spec-catalog.jsonl S0650 Opened a Draft spec for renaming the Camera, microphone and other functions settings group to Photo, Video, Recorder. [branch: no-git-by-request]
2026-06-23 17:42:54 PLAN/spec-catalog.jsonl S0651 Opened a Draft spec for showing Ask file name as a visual child of Enable microphone recording: indented in portrait and inline in landscape. [branch: no-git-by-request]
2026-06-23 17:53:33 PLAN/S0652_statistics-sorted-counter-semantics.md spec Add strategic draft spec S0652 for the ambiguous Statistics headline metric Sorted (always-zero / moved-only semantics). [branch: no-git-by-request]
2026-06-23 18:38:04 PLAN/S0646_settings-simple-list-dialog-unification.md spec-all F1 strategic spec authored; found canonical ListSelectionDialog (S0567 Phase 04) - S0646 is migration of remainder, not a new component; set BlockQuestions on 5 owner decisions (section 6) [branch: DEBUG-v017]
2026-06-23 18:44:30 PLAN/S0649_settings-operations-additional-programs-group.md spec-all F1 strategic spec authored: move 4 rows (camera OCR translation+only, calculator, mini-game) from OtherFeatures to new collapsible ‘Additional programs’ group; set BlockQuestions on Programs-menu scope + two-column-landscape pattern + group order [branch: DEBUG-v017]
2026-06-23 18:46:25 PLAN/S0644_settings-list-value-trigger-unification.md spec-all F1 strategic spec authored: row-trigger ematon (no-stretch, chevron-right, keep icon) for list-value rows; BlockByOtherTask on S0646 (shared dialog-vs-inline fork determines scope) [branch: DEBUG-v017]
2026-06-23 18:48:44 PLAN/S0645_settings-navigation-trigger-unification.md spec-all F1 strategic spec authored: navigation-row etalon (real arrow, hint, no-stretch); BlockQuestions on canonical nav-row widget choice + nav-vs-value glyph distinction [branch: DEBUG-v017]
2026-06-23 18:50:20 PLAN/S0648_settings-upload-target-rows-unification.md spec-all F1 strategic spec authored: two upload-target rows to match camera/video folder reference; BlockByOtherTask on S0644 (row-etalon owner) [branch: DEBUG-v017]
2026-06-23 18:58:01 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-all S0647: Default sort mode + Slideshow interval on one horizontal row, slideshow numeric field width-capped (no full-width stretch); portrait + landscape [branch: DEBUG-v017]
2026-06-23 20:04:27 PLAN/S0647_player-settings-default-slideshow-width.md spec-all Pipeline Verified: S0647 - audit confirmed compact Sort Mode + Slideshow row in both orientations [branch: DEBUG-v017]
2026-06-23 20:31:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/applaunchpanel/edit/EditAppLaunchPanelActivity.kt spec-dev S0623 Phase 04: Edit panel screen - 15-slot editable grid, app picker dialog, move/replace/remove; activity+land layouts, tile/picker layouts, trilingual strings, manifest entry [branch: DEBUG-v017]
2026-06-23 20:31:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/applaunchpanel/AppLaunchPanelActivity.kt spec-dev S0623 Phase 05: quick-launch panel - transparent host activity + 15-tile grid DialogFragment, tile adapter, ViewModel (seed+resolve), dialog/tile layouts, transparent theme, manifest entry [branch: DEBUG-v017]
2026-06-23 20:31:47 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-dev S0623 Phase 06: OPEN_PANEL gesture action - enum value, picker label (trilingual), pre-capture dispatch to AppLaunchPanelActivity [branch: DEBUG-v017]
2026-06-23 20:37:02 PLAN/S0623_app-launch-panel-dialog.md spec-all Pipeline BlockNeedUserTest: S0623 - phases 04-07 done (Edit panel + quick-launch panel dialog + OPEN_PANEL gesture), assembleStandardDebug PASS, all gates green; on-device verification deferred (install version-downgrade + edge-gesture drive) [branch: DEBUG-v017]
2026-06-23 20:49:47 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/EdgeToEdgeCompatHelper.kt Android 15 edge-to-edge Replace AndroidX enableEdgeToEdge with local WindowCompat setup and strip Material system-bar color setter calls from release R8 output [branch: DEBUG-v017]
2026-06-23 21:03:23 PLAN/S0646_settings-simple-list-dialog-unification.md spec-quiz S0646: BlockQuestions -> Approved via quiz (4 questions; section 6 resolved - tap-row+ListSelectionDialog, joint with S0644, include visualizer+action-pickers, network-parallelism excluded) [branch: DEBUG-v017]
2026-06-23 21:43:22 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt Android 15 edge-to-edge Revert to androidx enableEdgeToEdge(): drop custom EdgeToEdgeCompatHelper + R8 EdgeToEdgeUtils strip + re-added transparent bar theme items. Play warning #2 already cleared by Material 1.14.0 SDK guard; restores pre-29 nav-bar scrim. [branch: DEBUG-v017]
2026-06-23 21:46:26 PLAN/S0653_bugfix-v35-fullscreen-theme-shadowed.md spec Scaffold strategic spec skeleton S0653 (v35 FullScreen theme shadowed on API 35) [branch: DEBUG-v017]
2026-06-23 22:26:30 app_v2/proguard-rules.pro Android 15 edge-to-edge Fix Play warning #2 (real, present on 6222.158): framework-level R8 -assumenosideeffects strip of Window.setStatusBarColor/setNavigationBarColor + transparent bars via theme; keep enableEdgeToEdge(). Verified dexdump=0 framework invokes (was 7). [branch: DEBUG-v017]
2026-06-23 22:31:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/StatisticsViewModel.kt, app_v2/src/main/java/com/sza/fastmediasorter/ui/statistics/BuildStatisticsReportUseCase.kt, app_v2/src/main/java/com/sza/fastmediasorter/domain/stats/StatsModels.kt, app_v2/src/test/java/com/sza/fastmediasorter/domain/stats/StatsSnapshotTest.kt S0652 sorted statistics semantics Rebased the Statistics ‘Sorted’ headline on copy plus move totals and covered the shared formula with a unit test [branch: DEBUG-v017]
2026-06-23 22:31:40 PLAN/S0649_settings-operations-additional-programs-group.md spec-quiz S0649: BlockQuestions -> Approved via quiz (2 owner questions; 6.2 two-column auto-resolved) [branch: DEBUG-v017]
2026-06-23 22:33:03 PLAN/S0646_settings-simple-list-dialog-unification/INDEX.md spec-tech S0646 tactical plan: 5 phases (shared SimpleValueChoiceDialog wrapper, A-F dialog migration, OCR rows, audio visualizer row, cleanup) [branch: DEBUG-v017]
2026-06-23 22:34:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SimpleValueChoiceDialog.kt spec-dev S0646 Phase 01: reusable SimpleValueChoiceDialog wrapper over ListSelectionDialog [branch: DEBUG-v017]
2026-06-23 22:43:11 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCase.kt, app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ExecuteScheduledOperationUseCaseTest.kt S0652 scheduled operations statistics Switched scheduled MOVE execution to native FileOperation.Move so scheduled results feed statistics with move semantics and added a regression test [branch: DEBUG-v017]
2026-06-23 22:46:01 PLAN/S0654_usage-statistics-expand-metrics.md spec Add strategic spec S0654 for expanding usage-statistics metric coverage [branch: DEBUG-v017]
2026-06-23 22:51:48 PLAN/S0654_usage-statistics-expand-metrics/INDEX.md spec-tech Create tactical plan for S0654 (7 phases): expand usage-statistics metric coverage [branch: DEBUG-v017]
2026-06-23 22:51:48 PLAN/S0654_usage-statistics-expand-metrics.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-23 23:15:15 app_v2/src/main/res/values-v35/themes.xml S0653 v35 FullScreen theme correctness S0653: remove shadowing empty Theme.FastMediaSorter.FullScreen redefinition from values-v35 and values-night-v35 so API 35 falls back to the values/ definition and keeps windowActionBar/windowNoTitle/windowFullscreen [branch: DEBUG-v017]
2026-06-23 23:15:44 PLAN/S0652_statistics-sorted-counter-semantics.md spec-all Strategic spec approved: S0652 sorted-metric semantics (Copy+Move kept, wording + flush-on-open scope) [branch: DEBUG-v017]
2026-06-23 23:17:35 PLAN/S0649_settings-operations-additional-programs-group/INDEX.md spec-tech Create tactical plan for S0649 (3 phases) [branch: DEBUG-v017]
2026-06-23 23:17:35 PLAN/S0649_settings-operations-additional-programs-group.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-23 23:20:04 app_v2/src/main/res/values/strings_settings.xml spec-dev S0649 Phase 01: add settings_category_additional_programs (EN/RU/UK) [branch: DEBUG-v017]
2026-06-23 23:20:07 app_v2/src/main/res/values/strings_settings.xml S0650 Rename Operations capture settings group to ‘Photo, Video, Voice recorder’ (EN/RU/UK); regenerate settings manifest, annotation and SETTINGS_REFERENCE pages [branch: DEBUG-v017]
2026-06-23 23:20:07 app_v2/src/main/res/layout/fragment_settings_destinations.xml S0651 Show mic-recording ‘Ask for filename’ as a child of ‘Enable microphone recording’: indent in portrait (landscape already pairs them on one row) [branch: DEBUG-v017]
2026-06-23 23:20:43 PLAN/S0652_statistics-sorted-counter-semantics/INDEX.md spec-tech Create tactical plan for S0652 (3 phases) [branch: DEBUG-v017]
2026-06-23 23:20:43 PLAN/S0652_statistics-sorted-counter-semantics/PHASE_01__flush-on-open.md spec-tech Phase 01: flush-on-open [branch: DEBUG-v017]
2026-06-23 23:20:43 PLAN/S0652_statistics-sorted-counter-semantics/PHASE_02__honest-wording.md spec-tech Phase 02: honest-wording [branch: DEBUG-v017]
2026-06-23 23:20:43 PLAN/S0652_statistics-sorted-counter-semantics/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v017]
2026-06-23 23:20:43 PLAN/S0652_statistics-sorted-counter-semantics.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-23 23:21:43 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetStatisticsUseCase.kt spec-dev Flush pending stats before reading snapshot (S0652 close debounce gap) [branch: DEBUG-v017]
2026-06-23 23:24:20 app_v2/src/main/res/values/strings.xml spec-dev Honest ‘Sorted’ card label (copied + moved) EN/RU/UK (S0652) [branch: DEBUG-v017]
2026-06-23 23:37:57 PLAN/S0645_settings-navigation-trigger-unification.md spec-quiz S0645: BlockQuestions -> Approved via quiz (2 questions: nav-row widget = extend SettingsSelectionRow nav-mode, glyph rule = cross-batch arrow/chevron with S0644) [branch: DEBUG-v017]
2026-06-23 23:39:42 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-dev S0649 Phase 02: move OCR translation (+recognition only), calculator, mini-game into new Additional-programs collapsible group (portrait + landscape two-column) [branch: DEBUG-v017]
2026-06-23 23:39:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev S0649 Phase 02: register operations__additional_programs collapsible section; add BlockNeedUserTest debug tag [branch: DEBUG-v017]
2026-06-23 23:48:38 docs/settings/settings-manifest.json spec-dev S0649 Phase 03: regenerate settings manifest after Additional-programs regrouping (row order updated, headerAdditionalPrograms indexed) [branch: DEBUG-v017]
2026-06-23 23:48:38 docs/settings/settings-annotations.json spec-dev S0649 Phase 03: annotate headerAdditionalPrograms (EN/RU/UK) [branch: DEBUG-v017]
2026-06-23 23:48:38 docs/SETTINGS_REFERENCE.md spec-dev S0649 Phase 03: re-render settings reference (EN/RU/UK) [branch: DEBUG-v017]
2026-06-23 23:50:23 PLAN/S0649_settings-operations-additional-programs-group.md spec-dev All phases done; status -> BlockNeedUserTest (on-device visual verification of the new Additional-programs group) [branch: DEBUG-v017]
2026-06-23 23:57:42 PLAN/S0649_settings-operations-additional-programs-group.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/INCONCLUSIVE 7/0/1 (landscape portrait-locked on AVD) [branch: DEBUG-v017]
2026-06-24 00:00:28 PLAN/S0649_settings-operations-additional-programs-group.md spec-check Audit S0649 -> Verified; PASS/WARN/FAIL 14/0/0 [branch: DEBUG-v017]
2026-06-24 00:00:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-check S0649 Verified: remove BlockNeedUserTest debug tag [branch: DEBUG-v017]
2026-06-24 00:13:13 PLAN/S0616_general_settings_portrait_landscape_id_divergence.md spec-quiz S0616: BlockQuestions -> Draft via quiz (1 question, full parity chosen) [branch: DEBUG-v017]
2026-06-24 00:24:23 PLAN/S0645_settings-navigation-trigger-unification/INDEX.md spec-tech Create tactical plan for S0645 (4 phases: widget nav-mode, apply Bucket A, migrate Bucket B, cleanup) [branch: DEBUG-v017]
2026-06-24 00:24:23 PLAN/S0645_settings-navigation-trigger-unification/PHASE_01__widget-nav-mode.md spec-tech Phase 01: widget-nav-mode [branch: DEBUG-v017]
2026-06-24 00:24:23 PLAN/S0645_settings-navigation-trigger-unification/PHASE_02__apply-existing-rows.md spec-tech Phase 02: apply-existing-rows [branch: DEBUG-v017]
2026-06-24 00:24:23 PLAN/S0645_settings-navigation-trigger-unification/PHASE_03__migrate-adhoc-rows.md spec-tech Phase 03: migrate-adhoc-rows [branch: DEBUG-v017]
2026-06-24 00:24:23 PLAN/S0645_settings-navigation-trigger-unification/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v017]
2026-06-24 00:24:23 PLAN/S0645_settings-navigation-trigger-unification.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-24 00:25:22 app_v2/src/main/res/layout/fragment_settings_general.xml spec-all S0616: orientation parity for General settings - add compact-elements toggle to landscape, sync-interval dropdown to portrait [branch: DEBUG-v017]
2026-06-24 01:07:56 PLAN/S0645_settings-navigation-trigger-unification.md spec-dev S0645: all phases implemented; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 01:07:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsSelectionRow.kt spec-dev Add navigation mode (ssr_navMode): trailing forward arrow + no-stretch content [branch: DEBUG-v017]
2026-06-24 01:07:56 app_v2/src/main/res/values/attrs.xml spec-dev Declare ssr_navMode attribute for SettingsSelectionRow [branch: DEBUG-v017]
2026-06-24 01:07:56 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev Apply ssr_navMode to Saved authorizations + Statistics nav-rows (portrait + landscape) [branch: DEBUG-v017]
2026-06-24 01:07:56 app_v2/src/main/res/layout/fragment_settings_other.xml spec-dev Migrate Extensions/OCR-translation etalon nav-row to SettingsSelectionRow nav-mode (portrait + landscape) [branch: DEBUG-v017]
2026-06-24 01:07:56 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-dev Migrate Controls & keys nav-row to SettingsSelectionRow nav-mode (portrait + landscape) [branch: DEBUG-v017]
2026-06-24 01:07:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt spec-dev Extensions nav-row handler -> setOnRowClickListener [branch: DEBUG-v017]
2026-06-24 01:07:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-dev Controls & keys nav-row handler -> setOnRowClickListener [branch: DEBUG-v017]
2026-06-24 01:07:56 docs/ARCHITECTURE.md spec-dev Document SettingsSelectionRow navigation mode etalon [branch: DEBUG-v017]
2026-06-24 01:09:02 PLAN/S0616_general_settings_portrait_landscape_id_divergence.md spec-all S0616 Verified: General settings orientation parity (compact-elements + sync-interval available in both portrait and landscape) [branch: DEBUG-v017]
2026-06-24 01:09:02 app_v2/src/main/res/layout-land/fragment_settings_general.xml spec-all S0616: add compact-elements toggle to landscape; add sync-interval dropdown to portrait General settings [branch: DEBUG-v017]
2026-06-24 01:09:02 docs/settings/settings-annotations.json spec-all S0616: regenerate settings manifest + reference + annotate actvSyncInterval (EN/RU/UK) [branch: DEBUG-v017]
2026-06-24 01:36:34 app_v2/src/main/res/values-v35/themes.xml spec-all S0655: remove empty Theme.FastMediaSorter override in values-v35/night-v35 that shadowed v31 Android-12 splash items on API 35+; restore curated splash, keep v35 Base bottom-sheet override [branch: DEBUG-v017]
2026-06-24 01:42:37 PLAN/S0656_welcome-statistics-toggle.md spec Scaffold strategic spec skeleton S0656 [branch: DEBUG-v017]
2026-06-24 01:43:18 PLAN/S0652_statistics-sorted-counter-semantics.md, PLAN/S0652_statistics-sorted-counter-semantics/INDEX.md, PLAN/spec-catalog.jsonl S0652 implemented status Finalized the S0652 strategic+tactical plan set: all phases marked done, historical blockers resolved, and the strategic ticket advanced to Implemented with /spec-check left as the next formal step. [branch: DEBUG-v017]
2026-06-24 01:43:18 docs/ALL_FEATURES.jsonl S0652 / ALL_FEATURES Added the S0652 usage-statistics fix record and normalized three legacy spec-prefixed inventory ids so ALL_FEATURES validation passes again. [branch: DEBUG-v017]
2026-06-24 01:43:19 dev/CATALOG/app_v2.jsonl, dev/CATALOG/app_v2.md S0652 catalog sync Re-ran catalog_sync for app_v2 so GetStatisticsUseCase metadata reflects the injected StatsSink dependency while closing S0652. [branch: DEBUG-v017]
2026-06-24 02:10:36 PLAN/S0654_usage-statistics-expand-metrics.md spec-all S0654: expand usage-statistics coverage - new metrics for file renames, favorites add/remove, slideshow sessions/slides, scheduled-operation runs/files, streams (play/add/playlist import), GIF frame saves, file-op undo, and OCR scans; dashboard + TXT report rows with EN/RU/UK labels, zero-row hiding preserved. TEXT_TRANSLATIONS deferred to a 2nd wave. [branch: DEBUG-v017]
2026-06-24 02:12:22 docs/TECH_STACK.md docs/TECH_STACK.md Refresh tech stack doc with build topology and artifact size facts [branch: DEBUG-v017]
2026-06-24 02:18:34 scripts/spec_catalog/release-plan.ps1, .claude/commands/spec-next.md spec-next --plan Add release-plan.ps1 generator + /spec-next –plan mode: emits whole-catalog phased release command-sequence (A impl incl. every Draft/Approved -> B dependency chains with unblock-first -> C /spec-sweep+Implemented verify -> D /spec-prerelease+/skill-release -> Deferred). Cue-gated statusNote dependency edges, Kahn topo-sort across A/B boundary, read-only. [branch: DEBUG-v017]
2026-06-24 02:32:12 PLAN/S0646_settings-simple-list-dialog-unification.md spec-dev All 5 phases done; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 02:32:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SimpleValueChoiceDialog.kt spec-dev S0646 P01: reusable string-keyed value-choice dialog wrapper over ListSelectionDialog [branch: DEBUG-v017]
2026-06-24 02:32:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/DefaultPlayerHelper.kt spec-dev S0646 P02: migrate 6 ad-hoc settings pickers to unified list dialog [branch: DEBUG-v017]
2026-06-24 02:32:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt spec-dev S0646 P03: OCR spinners -> rows + dialog; settings-search gates/tests + manifest/annotations updated for id rename [branch: DEBUG-v017]
2026-06-24 02:32:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/AudioSettingsFragment.kt spec-dev S0646 P04: audio empty-state visualizer dropdown -> trigger row + dialog, delivery gate preserved [branch: DEBUG-v017]
2026-06-24 02:32:12 docs/settings/settings-manifest.json spec-dev S0646 P05: regenerate settings manifest/annotations/reference + catalog for renamed OCR rows and new audio row [branch: DEBUG-v017]
2026-06-24 02:58:37 PLAN/S0656_welcome-statistics-toggle.md spec-all Phase 01 done; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 02:58:37 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-all S0656: flip enableStatistics default OFF -> ON (local anonymous stats; S0473 privacy concern resolved) [branch: DEBUG-v017]
2026-06-24 02:58:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeFunctionalityController.kt spec-all S0656: wire welcome functionality statistics toggle to enableStatistics [branch: DEBUG-v017]
2026-06-24 02:58:37 app_v2/src/main/res/layout/page_welcome_functionality.xml spec-all S0656: add statistics toggle row to welcome functionality page (portrait + landscape) [branch: DEBUG-v017]
2026-06-24 02:58:37 app_v2/src/main/res/values/strings_settings.xml spec-all S0656: correct statistics summary EN/RU/UK (drop now-false off-by-default clause) [branch: DEBUG-v017]
2026-06-24 10:03:19 PLAN/S0644_settings-list-value-trigger-unification.md spec-dev Unblocked from S0646; tactical + impl done; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 10:03:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsSelectionRow.kt spec-dev S0644: value-row etalon - chevron sits right after the text (no full-width stretch) by default for single-line rows; extracted collapseContentToLeft from applyInlineLayout [branch: DEBUG-v017]
2026-06-24 10:13:56 app_v2/src/main/res/layout/fragment_settings_general.xml Settings > General tab Compact Language/Color theme/Device profile selectors in portrait: inline single-line (title beside value), shrink-to-cap field width, tightened vertical margins [branch: DEBUG-v017]
2026-06-24 10:19:04 PLAN/S0648_settings-upload-target-rows-unification.md spec-dev Unblocked from S0644; owner picked button pattern; impl done; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 10:19:05 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-dev S0648: two upload-target rows (download resource, screenshot destination) -> camera-folder selector pattern (label + value + Select button), portrait + landscape [branch: DEBUG-v017]
2026-06-24 10:19:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt spec-dev S0648: rewire screenshot-destination selector to button + value text [branch: DEBUG-v017]
2026-06-24 10:19:05 docs/settings/settings-manifest.json spec-dev S0648: regenerate manifest/annotations/reference (row keys -> select-button keys) [branch: DEBUG-v017]
2026-06-24 10:20:02 app_v2/src/main/.../settings Player interface settings Remove duplicate ‘Show detailed errors’ toggle from Player interface block (already present under Control > Program behavior); command panel row now full-width [branch: DEBUG-v017]
2026-06-24 10:33:47 docs/settings/settings-manifest.json Settings docs Regenerate settings manifest + reference (EN/RU/UK) after removing duplicate detailed-errors toggle from Player interface [branch: DEBUG-v017]
2026-06-24 11:57:12 .claude/agents/*.md, .claude/commands/*.md, .claude/agent-memory/ agent tooling Compress 4 agent defs + 30 command skills to terse robo-English (preserve all rules/paths/flags); prune stale memory: delete translationMlKit DFM memory, refresh screenCapture standard-controller + camera-permission + skill-release DFM trap claims to current state [branch: DEBUG-v017]
2026-06-24 12:02:43 docs/BUILD_TEST_FAST_PATH.md Build/Test Fast Path Add developer playbook for cheapest safe local build/test validation routes [branch: DEBUG-v017]
2026-06-24 12:02:44 docs/DOCS_MAP.md Documentation map Register Build & Test Fast Path developer playbook in docs map [branch: DEBUG-v017]
2026-06-24 12:09:10 .claude/settings.json, .claude/settings.local.json, CLAUDE.md agent tooling Speed setup: allowlist routine pwsh/PowerShell-tool/a.ps1/gradlew/git + mobile-mcp device-driving tools (settings.json 14->32 rules); drop 12 dead one-off exact-string perms from settings.local (21->9); add CLAUDE.md 6 background-long-builds rule [branch: DEBUG-v017]
2026-06-24 13:01:16 PLAN/S0658_settings_manifest_drift_destinations_playback.md spec-all S0658 Verified: regenerated settings-manifest from live scan (added destination-select buttons, dropped stale screenshot/autodownload/playback-detailed-errors rows), de-duplicated rowDetailedErrors annotation, re-rendered SETTINGS_REFERENCE EN/RU/UK/noLegal; settings-doc-sync gate green [branch: DEBUG-v017]
2026-06-24 13:05:29 PLAN/S0657_unit-test-source-set-broken.md spec-all S0657 Verified: compile drift already resolved in working tree; clean compileStandardDebugUnitTestKotlin –rerun-tasks BUILD SUCCESSFUL, sample symbols (ShareTarget.appliesTo, formatMediaDuration, reconcileFavoriteFlags) exist and tests reference them correctly [branch: DEBUG-v017]
2026-06-24 13:11:03 .claude/commands/spec-next.md spec-next Skill update: autonomous mandate + device-online awareness; BlockNeedUserTest now drainable via new Stage 0 device-probe + Stage 5.5 /spec-sweep delegation when emulator attached; final-report tip gated on device state [branch: DEBUG-v017]
2026-06-24 13:16:52 PLAN/S0653_bugfix-v35-fullscreen-theme-shadowed.md spec-all S0653 Verified: static audit - empty FullScreen redefinition removed from values-v35/night-v35 (falls back to values/ window items), Base override intact, processStandardDebugResources green; parked splash side-finding closed as S0655 [branch: DEBUG-v017]
2026-06-24 13:26:45 PLAN/S0621_hotfix-standard-gesture-settings.md spec-test-device Standard device run on emulator-5554: INCONCLUSIVE - gesture group absent because gradle.properties fms.screenCapture=off compiles out the standardScreenCapture controller; C3 (no a11y service in standard manifest) PASS [branch: DEBUG-v017]
2026-06-24 13:40:47 PLAN/S0611_bugfix-custom-theme-contrast.md spec-test-device Device run on emulator-5554 (standard debug) -> PASS-objective; DARK_GREEN/DARK_BLUE/LIGHT_BLUE themed + readable + ADR-3 toolbar; owner toolbar sign-off pending [branch: DEBUG-v017]
2026-06-24 13:45:47 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on emulator-5554 (API 37): processed 2 of ~24 eligible - S0621 INCONCLUSIVE (capability gated off by fms.screenCapture=off, needs build flag), S0611 objective-PASS owner-sign-off-pending; classified 11 real-device-only + 1 VR excluded; report temp/spec-sweep_20260624_1344/report.md [branch: DEBUG-v017]
2026-06-24 14:24:22 PLAN/S0650_settings-camera-group-rename.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 4/0/0; capture group header EN+RU driven, UK static, S0650 tag fired x2 [branch: DEBUG-v017]
2026-06-24 14:26:20 PLAN/S0650_settings-camera-group-rename.md spec-sweep S0650 Verified: Operations capture group rename confirmed on-device (EN/RU driven, UK static), S0650 probe fired; debug tag removed (S0651 tag preserved) [branch: DEBUG-v017]
2026-06-24 14:34:50 PLAN/ spec-arc Archive 21 closed specs (20 Verified + 1 Implemented: S0551,S0592,S0608,S0614,S0615,S0616,S0618,S0625,S0626,S0628,S0630,S0631,S0636,S0647,S0649,S0650,S0653,S0655,S0657,S0658,S0652) -> temp/done/ [branch: DEBUG-v017]
2026-06-24 15:00:18 PLAN/S0611_bugfix-custom-theme-contrast.md spec-test-device Device run on emulator-5554 (standard debug 2.60.6241.447) -> PASS-objective DARK_GREEN all criteria; DARK_BLUE not re-sampled (flaky dropdown); 0 crash; status unchanged (owner toolbar sign-off pending) [branch: DEBUG-v017]
2026-06-24 15:25:13 PLAN/S0659_streams-settings-expansion.md spec Add strategic spec S0659 for Streams settings expansion [branch: DEBUG-v017]
2026-06-24 15:25:56 app_v2/src/main/res/layout/fragment_settings_playback.xml Player settings / Sorting-slideshow row S0647 fix: slideshow numeric field uses fixed width so the sort-mode dropdown is no longer starved to 0px; short inline label [branch: DEBUG-v017]
2026-06-24 15:29:29 app_v2/src/main/res/layout/fragment_settings_playback.xml Player settings / Sorting-slideshow row S0647 follow-up: slideshow numeric field had android:layout_width=wrap_content but SettingsInputRow is internally match_parent, so it greedily filled the horizontal row and starved the weighted Default-sort-mode dropdown to 0px (looked unchanged). Switched the field to a fixed width (settings_input_numeric_max_width) with a short inline label slideshow_interval_inline (EN/RU/UK); dropdown now visible, field compact. Verified portrait+landscape on emulator; regenerated settings-manifest + SETTINGS_REFERENCE*. [branch: DEBUG-v017]
2026-06-24 15:38:01 PLAN/S0586_streams-toolbar-add-refresh-missing.md spec-test-device Device run on emulator-5554 (standard debug) -> PASS 4/4 light/dark x portrait/landscape; toolbar add+import+refresh all visible+tinted [branch: DEBUG-v017]
2026-06-24 15:40:54 PLAN/S0586_streams-toolbar-add-refresh-missing.md spec-check Verify S0586 on device PASS 4/4 combos (light/dark x portrait/landscape, standard+noLegal) -> Verified; PASS/WARN/FAIL 4/0/0 [branch: DEBUG-v017]
2026-06-24 15:40:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-check Remove S0586 BlockNeedUserTest debug probe on Verified [branch: DEBUG-v017]
2026-06-24 15:48:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CastMediaManager.kt spec-sweep S0632 -> BlockExternal (real Chromecast required for cast verification); removed BlockNeedUserTest probe [branch: DEBUG-v017]
2026-06-24 15:48:38 app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/GoogleTokenIssuer.kt spec-sweep S0643 -> BlockExternal (real Google Drive account required for verification); removed BlockNeedUserTest probe [branch: DEBUG-v017]
2026-06-24 16:07:01 PLAN/S0644_settings-list-value-trigger-unification.md spec-test-device Device run on emulator-5554 (Android 17) -> value-row chevron-after-text + no full-width stretch + tap-opens-picker verified portrait+landscape; PASS/FAIL/SKIPPED 6/0/2, 0 log errors [branch: DEBUG-v017]
2026-06-24 16:08:45 PLAN/S0644_settings-list-value-trigger-unification.md spec-check Verify S0644 on device (chevron-after-text portrait+landscape, picker opens, nav rows unchanged) -> Verified; removed BlockNeedUserTest probe from SettingsSelectionRow.kt; PASS/WARN/FAIL 1/0/0 [branch: DEBUG-v017]
2026-06-24 16:16:53 PLAN/S0659_streams-settings-expansion.md spec-update Refinement (GPT-5, focus: completeness, consistency) [branch: DEBUG-v017]
2026-06-24 16:23:25 PLAN/S0660_stream-card-overflow-actions-menu.md spec Scaffold strategic spec skeleton S0660 [branch: DEBUG-v017]
2026-06-24 16:24:24 PLAN/S0660_stream-card-overflow-actions-menu.md spec-update Append owner requirement for stream widget shortcut action in S0660 [branch: DEBUG-v017]
2026-06-24 16:25:55 PLAN/S0645_settings-navigation-trigger-unification.md spec-test-device Device run on emulator-5554 (portrait+landscape) -> all 4 settings nav rows show real arrow, no-stretch, icon/hint preserved, targets open; PASS 8/0/0 [branch: DEBUG-v017]
2026-06-24 16:26:13 PLAN/S0661_resource-overflow-home-screen-shortcut.md S0661 Add draft spec for resource overflow home-screen shortcut request [branch: DEBUG-v017]
2026-06-24 16:27:08 PLAN/S0645_settings-navigation-trigger-unification.md spec-check Verify S0645 on device: 4 nav rows show real arrow, left-hugging no-stretch portrait+landscape, all 4 targets open (Extensions/Controls/Saved-auth/Statistics) -> Verified; removed 3 BlockNeedUserTest probes (SettingsSelectionRow/OtherMediaSettings/OperationsSettings); PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v017]
2026-06-24 16:29:54 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on emulator-5554: closed 3 (S0586/S0644/S0645), 2 BlockExternal (S0632/S0643), 1 owner-gated (S0611), 1 inconclusive (S0646); stopped early by user, 18 emulator-testable tickets remain [branch: DEBUG-v017]
2026-06-24 16:29:54 PLAN/spec-catalog.jsonl spec-next Session: impl backlog empty (11 eligible skip-cached); device-drain processed 8, 3 verified, 4 blocked/gated, 1 inconclusive; stopped early by user [branch: DEBUG-v017]
2026-06-24 16:45:24 PLAN/S0662_welcome-default-gestures.md spec Add strategic spec S0662 for Welcome gesture toggle + default left-edge gesture bindings on install [branch: DEBUG-v017]
2026-06-24 16:49:09 PLAN/S0663_app-launch-panel-internal-routes.md spec Add strategic spec S0663 for app-launch-panel internal routes + OS shortcuts [branch: DEBUG-v017]
2026-06-24 16:54:38 PLAN/S0663_app-launch-panel-internal-routes/INDEX.md spec-tech Create tactical plan for S0663 (5 phases) [branch: DEBUG-v017]
2026-06-24 16:54:39 PLAN/S0663_app-launch-panel-internal-routes.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-24 16:55:53 PLAN/S0662_welcome-default-gestures/INDEX.md spec-tech Create tactical plan for S0662 (INDEX + 4 phases); status -> Tactical [branch: DEBUG-v017]
2026-06-24 17:04:38 PLAN/S0663_app-launch-panel-internal-routes.md spec-quiz S0663: resolved blockers 6.1/6.3/6.4 via quiz (3 questions); status stays Tactical [branch: DEBUG-v017]
2026-06-24 17:06:35 PLAN/S0664_streams-dpad-mouse-audit.md spec Scaffold strategic spec skeleton S0664 [branch: DEBUG-v017]
2026-06-24 17:13:46 PLAN/S0662_welcome-default-gestures.md spec-dev S0662 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 17:13:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SeedDefaultGestureBindingsUseCase.kt spec-dev S0662 P01 seed default left-edge gesture bindings on first run [branch: DEBUG-v017]
2026-06-24 17:13:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeViewModel.kt spec-dev S0662 P01 one-shot first-run seeding trigger + marker [branch: DEBUG-v017]
2026-06-24 17:13:46 app_v2/src/main/res/values/strings_setup.xml spec-dev S0662 P02 welcome_func_gestures strings EN/RU/UK [branch: DEBUG-v017]
2026-06-24 17:13:46 app_v2/src/main/res/layout/page_welcome_functionality.xml spec-dev S0662 P02 gestures toggle row (portrait + landscape) [branch: DEBUG-v017]
2026-06-24 17:13:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeGesturesManager.kt spec-dev S0662 P03 Welcome gesture toggle manager + permission flow [branch: DEBUG-v017]
2026-06-24 17:13:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeFunctionalityController.kt spec-dev S0662 P03 inject controllers + delegate gestures row [branch: DEBUG-v017]
2026-06-24 17:13:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-dev S0662 P03 register overlay-permission launcher + attach [branch: DEBUG-v017]
2026-06-24 17:21:33 PLAN/S0665_close-and-log-feature-id-prefix.md spec Scaffold strategic spec skeleton S0665 (close-and-log invalid ALL_FEATURES id) [branch: DEBUG-v017]
2026-06-24 17:54:52 scripts/spec_catalog/close-and-log.ps1 S0665 Fix -FuncOp ADD id derivation to use area-slug prefix (not spec id); repair 4 invalid ALL_FEATURES records (S0646/S0656/S0644/S0648); validate.ps1 now passes [branch: DEBUG-v017]
2026-06-24 17:55:31 PLAN/S0660_stream-card-overflow-actions-menu.md spec-update Refinement (GPT-5, focus: completeness, consistency, verifiability) [branch: DEBUG-v017]
2026-06-24 18:09:45 scripts/devtest/prerelease-prepare.ps1 S0666/spec-prerelease Durable onboarding bypass: seed full 4-key welcome_prefs.xml so the app never rewrites it mid-suite (single-key inject was dropped on the app’s next commit, reverting to WelcomeActivity and cascade-failing Maestro) [branch: DEBUG-v017]
2026-06-24 18:09:45 PLAN/S0484_emulator-prerelease-sweep.md spec-prerelease Pre-release sweep on emulator-5554 (API 37): verdict FAIL (Maestro) but root-caused 100% to harness (onboarding-bypass decay + flaky player-flow oracles); app healthy (in-app player, perf, log all clean); stream-catalog +347 re-uploaded; parked S0666; release NOT proposed [branch: DEBUG-v017]
2026-06-24 18:18:01 PLAN/S0664_streams-dpad-mouse-audit.md spec-all S0664: streams TV-remote/mouse input audit - per-row mouse right-click opens overflow menu, DialogKeyboardDelegate on all six streams dialogs (Escape/Enter), D-pad nextFocus polish in portrait+land layouts [branch: DEBUG-v017]
2026-06-24 18:29:47 PLAN/S0663_app-launch-panel-internal-routes.md spec-dev S0663 all phases implemented; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 18:29:47 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/InternalRouteCatalog.kt spec-dev S0663: app-launch panel internal routes - route/OS catalogs, availability resolver, INTERNAL_ROUTE launch+render dispatch, three-path editor pickers, enriched default seed [branch: DEBUG-v017]
2026-06-24 18:29:47 app_v2/src/main/res/values/strings.xml spec-dev S0663: panel route/OS/chooser strings (EN/RU/UK) + FEATURES sentence + ALL_FEATURES capability record [branch: DEBUG-v017]
2026-06-24 18:47:56 PLAN/S0660_stream-card-overflow-actions-menu.md spec-quiz S0660: Draft -> Approved via quiz (5 questions) [branch: DEBUG-v017]
2026-06-24 19:38:40 PLAN/S0660_stream-card-overflow-actions-menu/INDEX.md spec-tech Create tactical plan for S0660 [branch: DEBUG-v017]
2026-06-24 19:38:40 PLAN/S0660_stream-card-overflow-actions-menu/PHASE_01__edit-data-path.md spec-tech Phase 01: edit-data-path [branch: DEBUG-v017]
2026-06-24 19:38:40 PLAN/S0660_stream-card-overflow-actions-menu/PHASE_02__menu-strings.md spec-tech Phase 02: menu-strings [branch: DEBUG-v017]
2026-06-24 19:38:40 PLAN/S0660_stream-card-overflow-actions-menu/PHASE_03__overflow-commands.md spec-tech Phase 03: overflow-commands [branch: DEBUG-v017]
2026-06-24 19:38:40 PLAN/S0660_stream-card-overflow-actions-menu/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v017]
2026-06-24 19:38:40 PLAN/S0660_stream-card-overflow-actions-menu.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-24 19:39:39 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/StreamSourceDao.kt spec-dev S0660 Phase 01.1: manual-only in-place stream update query [branch: DEBUG-v017]
2026-06-24 19:41:39 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/StreamSourceRepository.kt spec-dev S0660 Phase 01.2: repository updateUserFields pass-through [branch: DEBUG-v017]
2026-06-24 19:43:41 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/streams/UpdateStreamSourceUseCase.kt spec-dev S0660 Phase 01.3: UpdateStreamSourceUseCase (manual-only edit) [branch: DEBUG-v017]
2026-06-24 19:46:52 app_v2/src/main/res/values/strings.xml spec-dev S0660 Phase 02.1: edit/send-link/share/edit-dialog menu strings (EN/RU/UK) [branch: DEBUG-v017]
2026-06-24 19:48:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamSourceAdapter.kt spec-dev S0660 Phase 03.1: edit (manual-only) + send-link overflow items [branch: DEBUG-v017]
2026-06-24 19:50:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-dev S0660 Phase 03.2: ViewModel onEdit via UpdateStreamSourceUseCase [branch: DEBUG-v017]
2026-06-24 19:53:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-dev S0660 Phase 03.3: edit dialog + share-link intent wiring [branch: DEBUG-v017]
2026-06-24 19:58:54 PLAN/S0660_stream-card-overflow-actions-menu.md spec-dev S0660: all 4 phases done; status -> BlockNeedUserTest (overflow edit + send-link commands) [branch: DEBUG-v017]
2026-06-24 20:01:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt Mini-game Board size now grows linearly with level (level 1 -> 5x5 .. level 16+ -> 20x20); generator MIN_BOARD_SIZE lowered to 5 [branch: DEBUG-v017]
2026-06-24 20:06:35 PLAN/S0660_stream-card-overflow-actions-menu.md spec-test-device Device run on emulator-5554 -> INCONCLUSIVE (mobile-mcp UiAutomationService crash; 0 app crashes; feature not exercised) [branch: DEBUG-v017]
2026-06-24 20:26:31 maestro/run-tests.ps1 S0666 Maestro emulator suite reliability: containsChild row-tap (fixes filename-tap landing on operation buttons), robust deep-list scroll (vis30/centerElement/waitToSettle), exclude inline-audio flows, retry-once+force-stop guard - emulator-default ‘all’ now 12/12 green (was 3/14 cascade) [branch: DEBUG-v017]
2026-06-24 20:46:47 PLAN/S0667_player-rotation-fullscreen-sync.md spec Add strategic spec S0667 for player rotation -> fullscreen/controls sync [branch: DEBUG-v017]
2026-06-24 20:48:08 PLAN/S0666_prerelease-maestro-suite-emulator-reliability.md spec-arc Archive S0666 (prerelease-maestro-suite-emulator-reliability) -> temp/done/ [branch: DEBUG-v017]
2026-06-24 20:48:08 PLAN/S0586_streams-toolbar-add-refresh-missing.md spec-arc Archive S0586 (streams-toolbar-add-refresh-missing) -> temp/done/ [branch: DEBUG-v017]
2026-06-24 20:48:08 PLAN/S0644_settings-list-value-trigger-unification.md spec-arc Archive S0644 (settings-list-value-trigger-unification) -> temp/done/ [branch: DEBUG-v017]
2026-06-24 20:48:08 PLAN/S0645_settings-navigation-trigger-unification.md spec-arc Archive S0645 (settings-navigation-trigger-unification) -> temp/done/ [branch: DEBUG-v017]
2026-06-24 20:48:09 PLAN/S0664_streams-dpad-mouse-audit.md spec-arc Archive S0664 (streams-dpad-mouse-audit) -> temp/done/ [branch: DEBUG-v017]
2026-06-24 20:48:09 PLAN/S0665_close-and-log-feature-id-prefix.md spec-arc Archive S0665 (close-and-log-feature-id-prefix) -> temp/done/ [branch: DEBUG-v017]
2026-06-24 20:53:57 PLAN/S0659_streams-settings-expansion.md spec-all S0659 strategic spec approved: owner quiz locked iteration-1 scope (list defaults + catalog), resolved research items [branch: DEBUG-v017]
2026-06-24 20:57:05 PLAN/S0667_player-rotation-fullscreen-sync/INDEX.md spec-tech Create tactical plan for S0667 [branch: DEBUG-v017]
2026-06-24 20:57:05 PLAN/S0667_player-rotation-fullscreen-sync/PHASE_01__orientation-mode-resolver.md spec-tech Phase 01: orientation-mode-resolver [branch: DEBUG-v017]
2026-06-24 20:57:05 PLAN/S0667_player-rotation-fullscreen-sync/PHASE_02__stream-host-wiring.md spec-tech Phase 02: stream-host-wiring [branch: DEBUG-v017]
2026-06-24 20:57:05 PLAN/S0667_player-rotation-fullscreen-sync/PHASE_03__standalone-host-wiring.md spec-tech Phase 03: standalone-host-wiring [branch: DEBUG-v017]
2026-06-24 20:57:05 PLAN/S0667_player-rotation-fullscreen-sync/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v017]
2026-06-24 20:57:06 PLAN/S0667_player-rotation-fullscreen-sync.md spec-tech Status -> Tactical [branch: DEBUG-v017]
2026-06-24 20:58:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerOrientationModeManager.kt spec-dev S0667 Phase 01.1: orientation-to-mode resolver [branch: DEBUG-v017]
2026-06-24 20:59:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ScreenRotationManager.kt spec-dev S0667 Phase 01.2: followsDevice() query [branch: DEBUG-v017]
2026-06-24 21:03:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0667 Phase 02.1: PlayerActivity rotation drives fullscreen/command-panel [branch: DEBUG-v017]
2026-06-24 21:05:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0667 Phase 02.1: PlayerActivity rotation drives fullscreen/command-panel [branch: DEBUG-v017]
2026-06-24 21:08:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0667 Phase 03.1: StandalonePlayerActivity rotation drives fullscreen/command-panel [branch: DEBUG-v017]
2026-06-24 21:10:34 PLAN/S0659_streams-settings-expansion/INDEX.md spec-tech Create tactical plan for S0659 (6 phases) [branch: DEBUG-v017]
2026-06-24 21:10:34 PLAN/S0659_streams-settings-expansion/PHASE_01__settings-persistence.md spec-tech Phase 01: settings-persistence [branch: DEBUG-v017]
2026-06-24 21:10:34 PLAN/S0659_streams-settings-expansion/PHASE_02__session-remember-last.md spec-tech Phase 02: session-remember-last [branch: DEBUG-v017]
2026-06-24 21:10:34 PLAN/S0659_streams-settings-expansion/PHASE_03__clear-statuses-reset.md spec-tech Phase 03: clear-statuses-reset [branch: DEBUG-v017]
2026-06-24 21:10:34 PLAN/S0659_streams-settings-expansion/PHASE_04__catalog-refresh-policy.md spec-tech Phase 04: catalog-refresh-policy [branch: DEBUG-v017]
2026-06-24 21:10:34 PLAN/S0659_streams-settings-expansion/PHASE_05__settings-ui-rows.md spec-tech Phase 05: settings-ui-rows [branch: DEBUG-v017]
2026-06-24 21:10:34 PLAN/S0659_streams-settings-expansion/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v017]
2026-06-24 21:12:30 PLAN/S0667_player-rotation-fullscreen-sync.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 21:12:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0667: insert debug tag at rotation mode-switch entry [branch: DEBUG-v017]
2026-06-24 21:12:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0667: insert debug tag at rotation mode-switch entry [branch: DEBUG-v017]
2026-06-24 21:23:05 PLAN/S0667_player-rotation-fullscreen-sync.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/INCONCLUSIVE 4/0/1 (standalone host verified) [branch: DEBUG-v017]
2026-06-24 21:24:48 PLAN/S0667_player-rotation-fullscreen-sync.md spec-check Audit S0667 -> Verified; PASS/WARN/FAIL 12/0/0 [branch: DEBUG-v017]
2026-06-24 21:24:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-check Remove S0667 debug tag on Verified transition [branch: DEBUG-v017]
2026-06-24 21:24:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-check Remove S0667 debug tag on Verified transition [branch: DEBUG-v017]
2026-06-24 21:26:16 PLAN/S0668_streams-favicon-sprite-map.md spec Scaffold strategic spec skeleton S0668 [branch: DEBUG-v017]
2026-06-24 21:30:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/applaunchpanel/edit/EditAppLaunchPanelActivity.kt S0663 S0663 follow-up: 4-path add chooser (Android app / FMS feature / FMS resource / OS), reset-panel button with confirm, settings Edit-app-panel button in screen-gestures group [branch: DEBUG-v017]
2026-06-24 21:39:32 PLAN/S0663_app-launch-panel-internal-routes.md S0663 Follow-up review fix: settings gesture-row buttons to 0dp+weight (RU/UK overflow); reset-panel debug probe; spec sync (4 paths + reset + settings entry) [branch: DEBUG-v017]
2026-06-24 21:55:20 PLAN/S0659_streams-settings-expansion.md spec-dev S0659 implemented: streams settings expansion; status -> BlockNeedUserTest [branch: DEBUG-v017]
2026-06-24 21:55:20 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/StreamsSettingsStore.kt spec-dev Phase 01: stream default enums + AppSettings fields + StreamsSettingsStore Values + SettingsRepositoryImpl wiring + device-profile-presets rows [branch: DEBUG-v017]
2026-06-24 21:55:20 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/StreamsSessionStore.kt spec-dev Phase 02: StreamsSessionStore (dedicated DataStore) + StreamsViewModel seed-from-session/defaults + persist last filter/sort/search [branch: DEBUG-v017]
2026-06-24 21:55:20 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/streams/ClearStreamPlayOutcomesUseCase.kt spec-dev Phase 03: clear-all-play-outcomes DAO/repo/usecase + SettingsViewModel clear action + resetMediaSection coverage [branch: DEBUG-v017]
2026-06-24 21:55:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-dev Phase 04: catalog refresh policy on-open (manual/on-open/wifi) + suggestion snackbar [branch: DEBUG-v017]
2026-06-24 21:55:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/StreamsSettingsFragment.kt spec-dev Phase 05: BaseSettingsFragment dropdown helpers + 3 dropdowns + clear button (portrait+land) + StreamsSettingsFragment wiring + EN/RU/UK strings [branch: DEBUG-v017]
2026-06-24 21:55:20 docs/settings/settings-annotations.json spec-dev Phase 06: regenerated settings manifest/annotations/SETTINGS_REFERENCE (Rule 22); annotated new streams keys + btnEditAppPanel [branch: DEBUG-v017]
2026-06-24 22:04:26 PLAN/S0659_streams-settings-expansion.md spec-test-device Device run on emulator-5554 -> PASS/INCONCLUSIVE/SKIPPED 4/2/1; tags A+B exercised, catalog snackbar confirmed, 0 app errors [branch: DEBUG-v017]
2026-06-24 22:11:09 PLAN/S0659_streams-settings-expansion.md spec-check Audit S0659 -> Verified; PASS/WARN/FAIL 18/0/0; 4 debug tags removed [branch: DEBUG-v017]
2026-06-24 22:11:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-check Removed 2 S0659 debug tags + now-unused Timber import on Verified transition [branch: DEBUG-v017]
2026-06-24 22:11:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/StreamsSettingsFragment.kt spec-check Removed S0659 debug tag on Verified transition [branch: DEBUG-v017]
2026-06-24 22:11:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-check Removed S0659 debug tag on Verified transition [branch: DEBUG-v017]
2026-06-24 22:23:17 PLAN/S0669_bugfix-widget-config-insets.md spec Add strategic spec S0669 for widget-config edge-to-edge insets (found in theme/UI audit) [branch: DEBUG-v017]
2026-06-24 22:36:31 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.6242.232 - plateau merge from DEBUG-v017 [branch: DEBUG-v017]
2026-06-24 22:44:03 docs/FEATURES.md FEATURES Showcase update for v2.60.6242.232 from ALL_FEATURES diff [branch: DEBUG-v018]
2026-06-24 23:21:57 PLAN/S0670_compact-playback-control-dialog.md spec Add strategic spec S0670 for compact context-aware playback control dialog [branch: DEBUG-v018]
2026-06-24 23:30:27 PLAN/S0670_compact-playback-control-dialog/INDEX.md spec-tech Create tactical plan for S0670 [branch: DEBUG-v018]
2026-06-24 23:30:27 PLAN/S0670_compact-playback-control-dialog/PHASE_01__flavor-capability.md spec-tech Phase 01: flavor-capability [branch: DEBUG-v018]
2026-06-24 23:30:28 PLAN/S0670_compact-playback-control-dialog/PHASE_02__resources.md spec-tech Phase 02: resources [branch: DEBUG-v018]
2026-06-24 23:30:28 PLAN/S0670_compact-playback-control-dialog/PHASE_03__dialog-layouts.md spec-tech Phase 03: dialog-layouts [branch: DEBUG-v018]
2026-06-24 23:30:28 PLAN/S0670_compact-playback-control-dialog/PHASE_04__tab-visibility-logic.md spec-tech Phase 04: tab-visibility-logic [branch: DEBUG-v018]
2026-06-24 23:30:28 PLAN/S0670_compact-playback-control-dialog/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v018]
2026-06-24 23:30:28 PLAN/S0670_compact-playback-control-dialog.md spec-tech S0670 Status -> Tactical [branch: DEBUG-v018]
2026-06-24 23:32:55 docs/HOW_TO_DEVELOP_AND_RELEASE_RU.md HOW_TO_DEVELOP_AND_RELEASE Refresh Scenario 3 + distribution channels to actual /skill-release pipeline (inventory-diff notes, version pinning, RU/UK mirrors, auto-publish GitHub/Play/Drive, FEATURES showcase, screen-capture gating caveat) [branch: DEBUG-v018]
2026-06-24 23:32:55 docs/REPLACES.md REPLACES Enrich EN+RU with new functionality: stream player/casting/shortcuts, Samsung in-app camera, video gestures/9-zone/auto-fullscreen, viewer printing, noLegal edge-gestures/app-panel; bump date [branch: DEBUG-v018]
2026-06-24 23:36:03 PLAN/S0671_standard-mediaprojection-capture-suite.md spec Add strategic spec S0671 - ship MediaProjection capture + post-processing suite to Play standard flavor (noLegal->standard, part 1) [branch: DEBUG-v018]
2026-06-24 23:36:03 PLAN/S0672_standard-edge-gesture-play-compliance.md spec Add strategic spec S0672 - Play-compliant edge-gesture trigger for standard (noLegal->standard, part 2; depends on S0671) [branch: DEBUG-v018]
2026-06-24 23:46:59 app_v2/src/main/java/com/sza/fastmediasorter/core/capability/MediaCapabilities.kt spec-dev S0670: add supportsVrMediaControls capability flag (default false) [branch: DEBUG-v018]
2026-06-24 23:46:59 app_v2/src/vr/java/com/sza/fastmediasorter/di/MediaCapabilitiesModule.kt spec-dev S0670: supportsVrMediaControls=true for vr+noLegal [branch: DEBUG-v018]
2026-06-24 23:46:59 app_v2/src/main/res/drawable/ic_volume_up.xml spec-dev S0670: distinct volume (speaker) icon for Volume tab [branch: DEBUG-v018]
2026-06-24 23:46:59 app_v2/src/main/res/values/strings_video_player.xml spec-dev S0670: rename Audio tab to Audio track (EN/RU/UK) + add speed preset labels 0.5x/1.5x/2x [branch: DEBUG-v018]
2026-06-24 23:46:59 app_v2/src/main/res/layout/dialog_playback_control.xml spec-dev S0670: portrait - speed preset buttons, volume icon, sliders 200->160dp [branch: DEBUG-v018]
2026-06-24 23:46:59 app_v2/src/main/res/layout-land/dialog_playback_control.xml spec-dev S0670: landscape - speed preset buttons + volume icon [branch: DEBUG-v018]
2026-06-24 23:46:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt spec-dev S0670: context-aware tabs (3D flavor-gated, audio>1, subs present) + speed preset wiring [branch: DEBUG-v018]
2026-06-24 23:46:59 PLAN/S0670_compact-playback-control-dialog.md spec-dev S0670: all phases done; status -> BlockNeedUserTest [branch: DEBUG-v018]
2026-06-24 23:49:44 PLAN/S0671_standard-mediaprojection-capture-suite/INDEX.md spec-tech Create tactical plan for S0671 (3 phases) [branch: DEBUG-v018]
2026-06-24 23:49:44 PLAN/S0671_standard-mediaprojection-capture-suite/PHASE_01__capture-flag-split.md spec-tech Phase 01: capture-flag-split (decouple S0671 capture from S0672 SPECIAL_USE overlay) [branch: DEBUG-v018]
2026-06-24 23:49:44 PLAN/S0671_standard-mediaprojection-capture-suite/PHASE_02__prominent-disclosure-gate.md spec-tech Phase 02: prominent-disclosure-gate [branch: DEBUG-v018]
2026-06-24 23:49:44 PLAN/S0671_standard-mediaprojection-capture-suite/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v018]
2026-06-24 23:49:44 PLAN/S0671_standard-mediaprojection-capture-suite.md spec-tech Status -> Tactical [branch: DEBUG-v018]
2026-06-24 23:56:34 PLAN/S0672_standard-edge-gesture-play-compliance.md spec-update Refinement (Opus 4.8): aligned 12 stale precondition; proposed P-1/P-2 (visible-vs-invisible contradiction, non-goals dup) [branch: DEBUG-v018]
2026-06-25 00:02:11 PLAN/S0671_standard-mediaprojection-capture-suite.md S0671 Enabled the standard MediaProjection capture suite, split the edge-overlay gate, added first-run disclosure consent persistence, and refreshed feature/settings/catalog artifacts. [branch: DEBUG-v018]
2026-06-25 00:12:13 PLAN/S0672_standard-edge-gesture-play-compliance.md spec-all Pipeline Blocked (BlockByOtherTask on S0671): F1 Draft->Approved, resolved P-1/P-2 contradiction; tactical/impl deferred until S0671 ships [branch: DEBUG-v018]
2026-06-25 00:16:32 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetConfigActivity.kt S0669 Apply system-bar+cutout insets to widget config Compose hosts (ResourceLaunch + RandomPhotoFrame) [branch: DEBUG-v018]
2026-06-25 00:23:10 PLAN/S0668_streams-favicon-sprite-map.md spec-update Refinement (claude-opus-4.8, focus: completeness, structure, consistency) [branch: DEBUG-v018]
2026-06-25 00:25:41 app_v2/src/main/java/com/sza/fastmediasorter/widget/ResourceLaunchWidgetPinManager.kt S0661 resource widget pinning Added a shared resource home-screen widget pin flow and surfaced it from the main resource overflow and the resource editor button. [branch: DEBUG-v018]
2026-06-25 00:40:38 temp/done/S0659_streams-settings-expansion.md spec-arc Archive S0659 (streams-settings-expansion, Verified) -> temp/done/ [branch: DEBUG-v018]
2026-06-25 00:40:38 temp/done/S0667_player-rotation-fullscreen-sync.md spec-arc Archive S0667 (player-rotation-fullscreen-sync, Verified) -> temp/done/ [branch: DEBUG-v018]
2026-06-25 00:46:25 PLAN/S0668_streams-favicon-sprite-map.md spec-quiz S0668: Draft -> Approved via quiz (2 questions) [branch: DEBUG-v018]
2026-06-25 01:06:21 PLAN/S0668_streams-favicon-sprite-map/ S0668 tactical plan spec-tech S0668: authored tactical plan (INDEX + 6 phases) + research artifact; favicon_index CSV column contract, sidecar-over-Room (url-keyed, no migration), decode-once atlas slicer; status Approved -> Tactical [branch: DEBUG-v018]
2026-06-25 01:06:44 PLAN/S0672_standard-edge-gesture-play-compliance/INDEX.md spec-tech S0672: authored tactical plan (INDEX + 3 phases: primary-path-readiness / qs-tile-fallback / docs-catalog-cleanup); cleared BlockByOtherTask; status Approved -> Tactical [branch: DEBUG-v018]
2026-06-25 01:12:56 PLAN/S0668_streams-favicon-sprite-map/ S0668 tactical plan - compat invariant spec-tech S0668: folded owner backward/forward-compat requirement into tactical plan - INDEX invariant subsection + Completion Gate item, Phase 01/02/03 Phase Done Criteria + Verification Greps (parser header-name keyed, zip streams.csv-first + size cap S0583, importer additive CSV-path-unchanged + atlas-absent test). No status change (Tactical) [branch: DEBUG-v018]
2026-06-25 01:18:46 PLAN/S0609_landscape_button_wide_layout.md spec-arc Archive S0609 (landscape multi-column settings) -> temp/done/ [branch: DEBUG-v018]
2026-06-25 01:18:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-arc Remove S0609 BlockNeedUserTest debug tag on archive [branch: DEBUG-v018]
2026-06-25 01:22:59 PLAN/S0611_bugfix-custom-theme-contrast.md spec-arc Archive S0611 (custom theme contrast) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:00 PLAN/S0612_standalone-nonimage-copy-move-groups.md spec-arc Archive S0612 (standalone copy/move groups) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:01 PLAN/S0617_video_snapshot_resource_name_no_ellipsize.md spec-arc Archive S0617 (video snapshot name ellipsize) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:01 PLAN/S0619_video-control-wide-sliders.md spec-arc Archive S0619 (video control wide sliders) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:02 PLAN/S0621_hotfix-standard-gesture-settings.md spec-arc Archive S0621 (standard gesture settings) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:03 PLAN/S0622_left-edge-gestures-open-app.md spec-arc Archive S0622 (left-edge gesture open app) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:03 PLAN/S0623_app-launch-panel-dialog.md spec-arc Archive S0623 (app launch panel dialog) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:04 PLAN/S0638_playback-control-adaptive-sections.md spec-arc Archive S0638 (playback control adaptive) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:04 PLAN/S0640_stream-player-list-navigation.md spec-arc Archive S0640 (stream player list nav) -> temp/done/ [branch: DEBUG-v018]
2026-06-25 01:23:05 PLAN/S0641_stream-player-trim-onplayer-controls.md spec-arc Archive S0641 (stream player trim controls) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:23:06 PLAN/S0642_stream-player-hide-copy-move-groups.md spec-arc Archive S0642 (stream hide copy/move groups) -> temp/done/; removed BlockNeedUserTest debug tag(s) [branch: DEBUG-v018]
2026-06-25 01:27:30 PLAN/S0646_settings-simple-list-dialog-unification.md spec-arc Archive S0646 (settings list-dialog unification) -> temp/done/; removed BlockNeedUserTest debug tag(s) + orphaned Timber imports [branch: DEBUG-v018]
2026-06-25 01:27:31 PLAN/S0648_settings-upload-target-rows-unification.md spec-arc Archive S0648 (settings upload-target rows) -> temp/done/; removed BlockNeedUserTest debug tag(s) + orphaned Timber imports [branch: DEBUG-v018]
2026-06-25 01:27:32 PLAN/S0654_usage-statistics-expand-metrics.md spec-arc Archive S0654 (usage statistics metrics) -> temp/done/; removed BlockNeedUserTest debug tag(s) + orphaned Timber imports [branch: DEBUG-v018]
2026-06-25 01:27:32 PLAN/S0669_bugfix-widget-config-insets.md spec-arc Archive S0669 (widget config insets) -> temp/done/; removed BlockNeedUserTest debug tag(s) + orphaned Timber imports [branch: DEBUG-v018]
2026-06-25 01:27:33 PLAN/S0523_menu-quick-capture-device-folders.md spec-arc Archive S0523 (menu quick capture) -> temp/done/; removed BlockNeedUserTest debug tag(s) + orphaned Timber imports [branch: DEBUG-v018]
2026-06-25 01:40:45 PLAN/S0668_streams-favicon-sprite-map/INDEX.md spec-all S0668 favicon sprite-atlas for stream catalog: parser favicon_index, sidecar atlas store + region slicer, adapter leading thumbnail with empty-slot fallback, PowerShell atlas packer + publish bundling (CSV-first, backward-compatible) [branch: DEBUG-v018]
2026-06-25 01:59:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt Streams catalog empty state (S0673) S0673: actionable empty state for streams catalog - icon + add/import buttons wired to existing toolbar handlers, portrait + land [branch: DEBUG-v018]
2026-06-25 02:05:10 PLAN/S0675_stream-grid-frame-capture.md spec Scaffold strategic spec skeleton S0675 [branch: DEBUG-v018]
2026-06-25 10:18:19 PLAN/S0676_bugfix-editor-bottom-panels.md spec Add strategic spec S0676 for image-editor bottom panels not collapsing in draw mode [branch: DEBUG-v018]
2026-06-25 10:21:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt player-standalone S0676: hide Copy/Move bottom panels while standalone draw editor is active; restore prior visibility on exit [branch: DEBUG-v018]
2026-06-25 10:21:23 app_v2/src/main/res/layout/fragment_settings_streams.xml fragment_settings_streams streams dropdown rows S0674: drop redundant focusable/clickable/nextFocus from streams SettingsDropdownRow wrappers (portrait+land) to match canonical playback/general usage; inner AutoCompleteTextView is the D-pad focus stop. Clears Rule 16 focus-highlight gate (6->0). [branch: DEBUG-v018]
2026-06-25 10:21:25 PLAN/S0675_stream-grid-frame-capture.md spec-all Strategic spec approved: S0675 stream grid frame-capture [branch: DEBUG-v018]
2026-06-25 10:29:47 PLAN/S0675_stream-grid-frame-capture/INDEX.md spec-tech Create tactical plan for S0675 [branch: DEBUG-v018]
2026-06-25 10:29:47 PLAN/S0675_stream-grid-frame-capture/PHASE_01__foundations.md spec-tech Phase 01: foundations [branch: DEBUG-v018]
2026-06-25 10:29:47 PLAN/S0675_stream-grid-frame-capture/PHASE_02__frame-cache.md spec-tech Phase 02: frame-cache [branch: DEBUG-v018]
2026-06-25 10:29:47 PLAN/S0675_stream-grid-frame-capture/PHASE_03__snapshot-engine.md spec-tech Phase 03: snapshot-engine [branch: DEBUG-v018]
2026-06-25 10:29:47 PLAN/S0675_stream-grid-frame-capture/PHASE_04__grid-cell-adapter.md spec-tech Phase 04: grid-cell-adapter [branch: DEBUG-v018]
2026-06-25 10:29:47 PLAN/S0675_stream-grid-frame-capture/PHASE_05__grid-mode-wiring.md spec-tech Phase 05: grid-mode-wiring [branch: DEBUG-v018]
2026-06-25 10:29:47 PLAN/S0675_stream-grid-frame-capture/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog-cleanup [branch: DEBUG-v018]
2026-06-25 10:29:47 PLAN/S0675_stream-grid-frame-capture.md spec-tech Status -> Tactical [branch: DEBUG-v018]
2026-06-25 10:34:34 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/StreamsSessionStore.kt spec-dev S0675: persist last display mode (list/grid) in streams session store [branch: DEBUG-v018]
2026-06-25 10:35:49 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-dev S0675: expose displayMode state + onToggleDisplayMode toggle [branch: DEBUG-v018]
2026-06-25 10:40:46 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/streams/StreamFrameCache.kt spec-dev S0675: in-memory TTL-bounded live-frame cache keyed by stream URL [branch: DEBUG-v018]
2026-06-25 10:45:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt spec-dev S0675: short-lived muted ExoPlayer live-frame snapshot engine with bounded capture queue [branch: DEBUG-v018]
2026-06-25 10:51:02 app_v2/src/main/res/values/strings.xml spec-dev S0675: grid-cell content-description strings (EN/RU/UK) [branch: DEBUG-v018]
2026-06-25 10:51:23 app_v2/src/main/res/layout/item_stream_grid_cell.xml spec-dev S0675: stream grid tile layout (16:9 TextureView + frame ImageView + title scrim) [branch: DEBUG-v018]
2026-06-25 10:51:46 app_v2/src/main/res/drawable/bg_stream_grid_title_scrim.xml spec-dev S0675: bottom-up scrim drawable behind grid-cell title [branch: DEBUG-v018]
2026-06-25 10:52:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamGridAdapter.kt spec-dev S0675: grid tile adapter with cached-frame binding + favicon fallback [branch: DEBUG-v018]
2026-06-25 10:54:10 PLAN/S0679_draw-editor-crop-tool.md spec Add strategic spec S0679 for in-editor rectangle crop tool [branch: DEBUG-v018]
2026-06-25 11:01:15 app_v2/src/main/res/values/strings.xml spec-dev S0675: list/grid view toggle labels (EN/RU/UK) [branch: DEBUG-v018]
2026-06-25 11:01:39 app_v2/src/main/res/menu/menu_streams.xml spec-dev S0675: add list/grid display-mode toggle menu item [branch: DEBUG-v018]
2026-06-25 11:01:55 app_v2/src/main/res/layout/activity_streams.xml spec-dev S0675: wrap rvStreams in SwipeRefreshLayout (portrait) [branch: DEBUG-v018]
2026-06-25 11:02:11 app_v2/src/main/res/layout-land/activity_streams.xml spec-dev S0675: wrap rvStreams in SwipeRefreshLayout (landscape) [branch: DEBUG-v018]
2026-06-25 11:02:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamGridModeManager.kt spec-dev S0675: grid-mode manager (adapter/layout swap, pull-to-refresh, periodic frame refresh) [branch: DEBUG-v018]
2026-06-25 11:03:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-dev S0675: wire list/grid toggle + grid-mode manager into StreamsActivity [branch: DEBUG-v018]
2026-06-25 11:06:46 PLAN/S0680_gesture-crop-screenshot-share.md spec Add strategic spec S0680 for gesture action ‘Crop screenshot and share’ [branch: DEBUG-v018]
2026-06-25 11:09:53 PLAN/S0675_stream-grid-frame-capture.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v018]
2026-06-25 11:09:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-dev S0675: displayMode state + toggle + debug tag [branch: DEBUG-v018]
2026-06-25 11:09:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamGridModeManager.kt spec-dev S0675: grid mode manager + debug tag [branch: DEBUG-v018]
2026-06-25 11:09:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt spec-dev S0675: snapshot engine + debug tag [branch: DEBUG-v018]
2026-06-25 11:20:33 PLAN/S0680_gesture-crop-screenshot-share/INDEX.md spec-tech Create tactical plan for S0680 [branch: DEBUG-v018]
2026-06-25 11:20:33 PLAN/S0680_gesture-crop-screenshot-share/PHASE_01__crop-share-orchestration.md spec-tech Phase 01: crop-share-orchestration [branch: DEBUG-v018]
2026-06-25 11:20:33 PLAN/S0680_gesture-crop-screenshot-share/PHASE_02__action-wiring-strings.md spec-tech Phase 02: action-wiring-strings [branch: DEBUG-v018]
2026-06-25 11:20:33 PLAN/S0680_gesture-crop-screenshot-share/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v018]
2026-06-25 11:20:33 PLAN/S0680_gesture-crop-screenshot-share/research/01__crop-source-and-share-target.md spec-tech Research 01: crop source and share target [branch: DEBUG-v018]
2026-06-25 11:20:33 PLAN/S0680_gesture-crop-screenshot-share.md spec-tech Status -> Tactical [branch: DEBUG-v018]
2026-06-25 11:20:53 PLAN/S0681_send-to-menu-resource-picker.md spec Add strategic spec S0681 for unified Send-to menu + Resource picker entry [branch: DEBUG-v018]
2026-06-25 11:24:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/contracts/PlayerActionHost.kt spec-dev S0680 P01.1: add onCropFlowCancelled host hook [branch: DEBUG-v018]
2026-06-25 11:24:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerCropDelegate.kt spec-dev S0680 P01.2: fire cancel hook on crop dismiss [branch: DEBUG-v018]
2026-06-25 11:24:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-dev S0680 P01.3: shareLocalCopy for cropped copy [branch: DEBUG-v018]
2026-06-25 11:24:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0680 P01.4: crop-and-share auto-action wiring [branch: DEBUG-v018]
2026-06-25 11:28:05 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ScreenshotGestureAction.kt spec-dev S0680 P02.2: add CROP_AND_SHARE enum action [branch: DEBUG-v018]
2026-06-25 11:28:06 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-dev S0680 P02.3: route CROP_AND_SHARE to crop-and-share auto-action [branch: DEBUG-v018]
2026-06-25 11:28:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/ScreenshotGestureActionPickerManager.kt spec-dev S0680 P02.4: picker label for CROP_AND_SHARE [branch: DEBUG-v018]
2026-06-25 11:28:06 app_v2/src/main/res/values/strings.xml spec-dev S0680 P02.1: screenshot_gesture_action_crop_and_share label (EN/RU/UK) [branch: DEBUG-v018]
2026-06-25 11:30:26 PLAN/S0682_app-launch-panel-relabel-icons.md spec Add strategic spec S0682 for app-launch-panel relabel + distinct OS-setting icons [branch: DEBUG-v018]
2026-06-25 11:30:29 PLAN/S0681_send-to-menu-resource-picker/INDEX.md spec-tech Create tactical plan for S0681 (4 phases) [branch: DEBUG-v018]
2026-06-25 11:30:29 PLAN/S0681_send-to-menu-resource-picker.md spec-tech S0681 Status -> Tactical [branch: DEBUG-v018]
2026-06-25 11:30:51 PLAN/S0683_quick-launch-panel-shade-tile.md spec Scaffold strategic spec skeleton S0683 [branch: DEBUG-v018]
2026-06-25 11:32:27 PLAN/S0680_gesture-crop-screenshot-share.md spec-dev All phases done; S0680 -> BlockNeedUserTest (crop-and-share gesture action) [branch: DEBUG-v018]
2026-06-25 11:32:34 PLAN/S0679_draw-editor-crop-tool/INDEX.md spec-tech Create tactical plan (5 phases) for S0679 draw-editor crop tool [branch: DEBUG-v018]
2026-06-25 11:32:34 PLAN/S0679_draw-editor-crop-tool.md spec-tech S0679 status Approved -> Tactical [branch: DEBUG-v018]
2026-06-25 11:44:40 PLAN/S0682_app-launch-panel-relabel-icons/INDEX.md spec-tech Create tactical plan for S0682 (3 phases) [branch: DEBUG-v018]
2026-06-25 11:44:40 PLAN/S0682_app-launch-panel-relabel-icons/PHASE_01__os-setting-icons.md spec-tech Phase 01: os-setting-icons [branch: DEBUG-v018]
2026-06-25 11:44:40 PLAN/S0682_app-launch-panel-relabel-icons/PHASE_02__relabel-chooser-strings.md spec-tech Phase 02: relabel-chooser-strings [branch: DEBUG-v018]
2026-06-25 11:44:40 PLAN/S0682_app-launch-panel-relabel-icons/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v018]
2026-06-25 11:44:40 PLAN/S0682_app-launch-panel-relabel-icons.md spec-tech Status -> Tactical [branch: DEBUG-v018]
2026-06-25 11:45:06 PLAN/S0681_send-to-menu-resource-picker.md spec-dev S0681 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v018]
2026-06-25 11:45:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/SendToMenuManager.kt spec-dev S0681 Phase 01: unified send-to source + pinned Select-resource entry (sheet + overflow) [branch: DEBUG-v018]
2026-06-25 11:45:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerCommandPanelCallbackImpl.kt spec-dev S0681 Phase 02: main player onPickResource -> existing copy dialog [branch: DEBUG-v018]
2026-06-25 11:45:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-dev S0681 Phase 03: standalone copy-to-resource dialog entry point [branch: DEBUG-v018]
2026-06-25 11:45:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0681 Phase 03: wire unified + 4 typed standalone hosts to copy-to-resource [branch: DEBUG-v018]
2026-06-25 11:50:42 PLAN/S0684_unify-dialog-ok-cancel-buttons.md spec Scaffold strategic spec skeleton S0684 [branch: DEBUG-v018]
2026-06-25 11:53:27 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/OsShortcutCatalog.kt applaunchpanel Distinct icons for OS shortcuts + relabel add-chooser items (S0682) [branch: DEBUG-v018]
2026-06-25 11:54:52 PLAN/S0682_app-launch-panel-relabel-icons.md spec-dev All phases done; status -> BlockNeedUserTest (S0682) [branch: DEBUG-v018]
2026-06-25 11:57:42 PLAN/S0685_adaptive-stream-buffering.md spec Scaffold strategic spec skeleton S0685 [branch: DEBUG-v018]
2026-06-25 12:07:05 app_v2/src/main/res/layout/page_welcome_functionality.xml welcome onboarding layouts Fix profile recommendation badge wrapping and switch the functionality welcome page to a two-column portrait layout [branch: DEBUG-v018]
2026-06-25 12:10:52 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt Statistics collection default First-install default for enableStatistics flipped OFF->ON (local-only stats); welcome onboarding toggle now defaults checked [branch: DEBUG-v018]
2026-06-25 12:16:23 PLAN/S0679_draw-editor-crop-tool.md spec-dev S0679: crop tool in draw editor - new CROP tool + reused selection overlay + full-res compositor (annotations baked in) + reversible-until-first-stroke, wired in both image hosts (5 phases). Status -> BlockNeedUserTest. [branch: DEBUG-v018]
2026-06-25 12:27:58 PLAN/S0686_bugfix-settings-cancellation-logged-error.md spec Scaffold strategic spec skeleton S0686 (settings VM logs coroutine cancellation as ERROR) [branch: DEBUG-v018]
2026-06-25 12:28:11 scripts/utils/search-log.ps1 tooling Fix JSON .logcat parsing: rename loop-local $json/$tag to avoid case-insensitive collision with [switch]$Json and [string]$Tag params (collision left filter set to last entry’s tag, silently dropping all output) [branch: DEBUG-v018]
2026-06-25 12:39:01 app_v2/src/main/res/layout/page_welcome_functionality.xml welcome functionality copy Add helper subtitles to every welcome functionality toggle and align portrait/landscape onboarding descriptions [branch: DEBUG-v018]
2026-06-25 12:57:13 PLAN/S0687_test-scheduled-operation.md spec Scaffold strategic spec skeleton S0687 [branch: DEBUG-v018]
2026-06-25 12:58:17 app_v2/src/main/java/com/sza/fastmediasorter/core/util/CoroutineExt.kt settings S0686: add Throwable.rethrowIfCancellation() and apply before generic catch across SettingsViewModel (16) + 4 Settings helpers - stops false error toasts and false ERROR logs from coroutine cancellation on screen teardown (fold/rotate/first-run preset) [branch: DEBUG-v018]
2026-06-25 14:02:46 PLAN/S0687_test-scheduled-operation.md spec-all Device verification PASS: scheduled operations end-to-end (create/runNow/worker/DELETE 6 files/op-log) on emulator-5556; S0687 Verified [branch: DEBUG-v018]
2026-06-25 14:11:00 PLAN/S0685_adaptive-stream-buffering.md spec-all Developed strategic spec from research; set BlockByOtherTask - blocked by S0634 (same stream-player file, overlap) + owner scope decisions in §6 [branch: DEBUG-v018]
2026-06-25 14:14:15 PLAN/S0684_unify-dialog-ok-cancel-buttons.md spec-all Developed strategic spec + audit; set BlockQuestions - red-Cancel request conflicts with S0538/S0611 standard, owner decision needed [branch: DEBUG-v018]
2026-06-25 14:33:06 app_v2/src/main/java/com/sza/fastmediasorter/core/AppLaunchPanelTileService.kt spec-all S0683: QuickSettings tile opening AppLaunchPanel (second entry point besides edge gesture) [branch: DEBUG-v018]
2026-06-25 14:41:16 PLAN/S0672_standard-edge-gesture-play-compliance.md spec-all Tactical plan ready; set BlockByOtherTask - impl gated on S0671 (BlockNeedUserTest) per INDEX + external Play review/owner go-ahead [branch: DEBUG-v018]
2026-06-25 14:42:33 PLAN/S0674_streams-settings-dropdown-focus-highlight.md spec-all Audit PASS: focus-highlight gate 0/0/0, dropdown-row wrapper focusable/clickable removed (streams + land), matches canonical pattern; Verified [branch: DEBUG-v018]
2026-06-25 14:46:14 app_v2/src/main/java/com/sza/fastmediasorter/data/network/glide/NetworkVideoFrameDecoder.kt spec-all S0677: remove 4 runBlocking from Glide decode thread - synchronous DAO/repo twins for thumbnail cache (behaviour-preserving, no schema change) [branch: DEBUG-v018]
2026-06-25 14:53:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-all S0678: route Streams menu gate through CapabilityAvailability.isStreamsAvailable() contract instead of direct BuildConfig.SUPPORT_STREAMS read; drop dead BuildConfig import [branch: DEBUG-v018]
2026-06-25 14:55:39 PLAN/spec-catalog.jsonl spec-next Session: 8 processed (S0687,S0685,S0684,S0683,S0672,S0674,S0677,S0678), 4 Verified, 4 blocked; emulator-5556 device verification [branch: DEBUG-v018]
2026-06-25 15:04:54 PLAN/S0629_play-fgs-declaration-materials.md release-prep Verified next-release FGS set: screenCapture=on/edgeGesture=off -> MEDIA_PROJECTION in, SPECIAL_USE out; declaration text submit-ready; demo video link remains the only gap [branch: DEBUG-v018]
2026-06-25 17:15:18 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.6251.711 - plateau merge from DEBUG-v018 [branch: DEBUG-v018]
2026-06-25 17:24:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt S0634 spec-arc Archived S0634 to temp/done and removed the temporary BlockNeedUserTest stream recovery probes [branch: DEBUG-v019]
2026-06-25 17:24:54 PLAN/S0685_adaptive-stream-buffering.md S0685 status Cleared the S0634 dependency block, returned S0685 to Draft, and rewrote the spec around the archived live-recovery baseline [branch: DEBUG-v019]
2026-06-25 18:25:56 PLAN/S0684_unify-dialog-ok-cancel-buttons.md spec-quiz S0684: BlockQuestions -> Approved via quiz (4 questions) [branch: DEBUG-v019]
2026-06-25 19:00:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt S0685 adaptive-stream-buffering S0685: stream wait-phase messaging (buffering vs reconnecting) - StreamWaitPhase enum + onStreamWaitPhase callback, streamWaitLabel in portrait+landscape, EN/RU/UK strings; safe stream buffer retune (min 20s, post-rebuffer 8s) preserving S0634 live-edge recovery [branch: DEBUG-v019]
2026-06-25 21:24:45 PLAN/S0690_stream-list-retap-stop.md spec-draft Scaffold strategic spec skeleton S0690 [branch: DEBUG-v019]
2026-06-25 21:29:05 PLAN/S0691_stream-title-duplicate-parentheses.md S0691 Add /spec-draft inbox ticket for duplicate parenthetical stream titles in list/grid [branch: DEBUG-v019]
2026-06-25 21:29:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BandwidthAdaptiveLoadControl.kt S0688 stream bandwidth-adaptive buffer S0688: BandwidthAdaptiveLoadControl decorator adapts stream buffer depth to live BandwidthMeter estimate (deeper on weak link, modest on healthy), clamped to S0685 live-safe depth for live content; wired into playStreamVideo via shared DefaultBandwidthMeter; removed superseded static buffer constants [branch: DEBUG-v019]
2026-06-25 21:31:54 PLAN/S0692_stream-list-landscape-multi-column.md S0692 Add /spec-draft strategic skeleton for landscape multi-column stream list request [branch: DEBUG-v019]
2026-06-25 21:32:18 PLAN/S0684_unify-dialog-ok-cancel-buttons/INDEX.md spec-tech S0684 tactical plan: 3 phases (cancel pink tonal smaller; codify + gate) [branch: DEBUG-v019]
2026-06-25 21:33:46 PLAN/S0693_landscape-mode-min-width-threshold.md spec-draft Add /spec-draft strategic skeleton S0693 for landscape-style windows by minimum width threshold [branch: DEBUG-v019]
2026-06-25 21:38:42 PLAN/S0694_stream-player-fullscreen-controls.md spec Scaffold strategic spec skeleton S0694 [branch: DEBUG-v019]
2026-06-25 21:41:29 PLAN/S0695_stream-longpress-pin-toggle.md spec Scaffold strategic spec skeleton S0695 [branch: DEBUG-v019]
2026-06-25 21:42:21 PLAN/S0696_stream-filter-pinned-only.md spec Scaffold strategic spec skeleton S0696 [branch: DEBUG-v019]
2026-06-25 21:43:13 PLAN/S0697_stream-persist-filter-sort.md spec Scaffold strategic spec skeleton S0697 [branch: DEBUG-v019]
2026-06-25 21:44:03 PLAN/S0698_wider-overflow-button-portrait.md spec Scaffold strategic spec skeleton S0698 [branch: DEBUG-v019]
2026-06-25 21:45:00 PLAN/S0699_stream-persist-scroll-position.md spec Scaffold strategic spec skeleton S0699 [branch: DEBUG-v019]
2026-06-25 21:47:01 app_v2/src/main/res/values/themes.xml spec-dev S0684: pink tonal smaller cancel + wide confirm (colors/dimens/themes single source) [branch: DEBUG-v019]
2026-06-25 21:47:01 docs/ARCHITECTURE.md spec-dev S0684: codify cancel standard in Button Taxonomy; assert-dialog-cancel-style gate + post-change wiring + CLAUDE/AGENTS rule [branch: DEBUG-v019]
2026-06-25 21:47:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseDeleteDialogManager.kt spec-dev S0684: BlockNeedUserTest debug probe on delete-confirm dialog [branch: DEBUG-v019]
2026-06-25 21:47:01 PLAN/S0684_unify-dialog-ok-cancel-buttons.md spec-dev S0684: all phases done; status -> BlockNeedUserTest [branch: DEBUG-v019]
2026-06-25 21:53:31 PLAN/S0700_stream-refresh-health-probe.md spec Scaffold strategic spec skeleton S0700 [branch: DEBUG-v019]
2026-06-25 21:55:50 PLAN/S0701_stream-grid-tile-overlay-controls.md spec Scaffold strategic spec skeleton S0701 [branch: DEBUG-v019]
2026-06-25 23:05:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt S0690 stream retap-stop Tapping an already-playing inline audio stream toggles it off (stop), so the same gesture starts and stops it. [branch: DEBUG-v019]
2026-06-25 23:05:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamTitleFormatter.kt S0691 stream title dedup Suppress a trailing parenthetical equal to the head of a stream title (Name (Name) -> Name); distinguishing suffixes kept. [branch: DEBUG-v019]
2026-06-25 23:05:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamGridModeManager.kt S0692 landscape multi-column list Streams list renders multiple columns in landscape; span recomputed on rotation (Activity handles configChanges). [branch: DEBUG-v019]
2026-06-25 23:05:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerGestureSetupManager.kt S0694 stream fullscreen player Video streams open straight to immersive fullscreen; surface tap toggles the command panel + ExoPlayer controller; 9/3 touch zones skipped for live streams. [branch: DEBUG-v019]
2026-06-25 23:05:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamSourceAdapter.kt S0695 long-press pin toggle Long-press on a stream row/tile toggles pin/unpin; the destructive remove now lives only in the overflow menu. [branch: DEBUG-v019]
2026-06-25 23:05:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt S0696 pinned-only filter Streams filter dialog gains a pinned-only facet that keeps only user-pinned streams. [branch: DEBUG-v019]
2026-06-25 23:05:23 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/StreamsSessionStore.kt S0697 persist filter and sort Stream filter (category/language/pinned-only), media kind, sort, and query persist across launches. [branch: DEBUG-v019]
2026-06-25 23:05:23 app_v2/src/main/res/layout/activity_main.xml S0698 wider overflow button portrait Main-window programs (three-dot) button is 1.5x wider in portrait where it has no text label. [branch: DEBUG-v019]
2026-06-25 23:05:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt S0699 persist scroll position Stream list first-visible position is remembered and restored on next open. [branch: DEBUG-v019]
2026-06-25 23:05:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamHealthProbeManager.kt S0700 refresh health probe Refresh probes each visible stream for reachability (green/red status) and re-captures grid thumbnails; aborts on any user interaction. [branch: DEBUG-v019]
2026-06-25 23:05:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamGridAdapter.kt S0701 grid tile overlays Grid tiles regain the play-status dot (bottom-left) and the per-stream overflow menu (top-right) from the list row. [branch: DEBUG-v019]
2026-06-25 23:06:46 PLAN/S0693_landscape-mode-min-width-threshold/INDEX.md spec-tech S0693: research to tactical - unified landscape decision node (union rule, 600dp), 5 phases; player out of scope [branch: DEBUG-v019]
2026-06-25 23:41:16 app_v2/src/main/java/com/sza/fastmediasorter/core/orientation/WideLayout.kt spec-dev S0693 P01: WideLayout decision node + unit test (union rule landscape OR width>=600dp, single threshold const) [branch: DEBUG-v019]
2026-06-25 23:41:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainLayoutChromeManager.kt spec-dev S0693 P02: route content screens (Main, Browse, Streams) to isWideLayout() [branch: DEBUG-v019]
2026-06-25 23:41:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsActivity.kt spec-dev S0693 P03: route dialogs/grids/settings (8 sites incl raw-pixel ScheduledOperationDialog) to isWideLayout() [branch: DEBUG-v019]
2026-06-25 23:41:16 app_v2/src/main/res/layout-w600dp/activity_main.xml spec-dev S0693 P04: -w600dp mirrors of -land (Main/Browse/Streams/Settings + values integers/bools/dimens) to align resource selection with the node [branch: DEBUG-v019]
2026-06-25 23:41:16 PLAN/S0693_landscape-mode-min-width-threshold.md spec-dev S0693 all phases done; status -> BlockNeedUserTest (4 device-test probes) [branch: DEBUG-v019]
2026-06-25 23:45:18 app_v2/src/main/res/layout/item_stream_grid_cell.xml S0700 grid frame capture fix Capture TextureView must be VISIBLE (invisible never renders -> onRenderedFirstFrame never fired); made it visible+opaque behind an opaque ivFrame, raised capture timeout to 12s, and drive the grid video status from the capture outcome (green/amber). [branch: DEBUG-v019]
2026-06-26 01:08:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseRecyclerViewManager.kt spec-dev S0693: lower wide list min-cell 580->360dp so wide screens (>=~730dp) show 2+ list columns instead of one sparse full-width row (verified span=2 @852dp) [branch: DEBUG-v019]
2026-06-26 01:11:28 PLAN/S0703_shared-state-mutation-audit.md spec Add strategic spec S0703 for cross-project shared-state mutation audit (UI + data) [branch: DEBUG-v019]
2026-06-26 01:12:42 PLAN/ spec-arc Archived 17 completed specs to temp/done/: Implemented S0696/S0697/S0699; Verified S0673/S0674/S0677/S0678/S0685/S0687/S0690/S0691/S0692/S0694/S0695/S0698/S0701 (bookkeeping, no functionality removed) [branch: DEBUG-v019]
2026-06-26 01:16:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/WindowMetricsCompat.kt spec-dev S0702: legacy WindowMetricsCompat branch getRealSize->getSize so player window size is multi-window aware (decode caps + scale type) [branch: DEBUG-v019]
2026-06-26 01:21:21 PLAN/S0703_shared-state-mutation-audit/INDEX.md spec-tech Create tactical plan for S0703 [branch: DEBUG-v019]
2026-06-26 01:21:21 PLAN/S0703_shared-state-mutation-audit/PHASE_01__writer-harvester-script.md spec-tech Phase 01: writer-harvester-script [branch: DEBUG-v019]
2026-06-26 01:21:21 PLAN/S0703_shared-state-mutation-audit/PHASE_02__audit-prompt-runner.md spec-tech Phase 02: audit-prompt-runner [branch: DEBUG-v019]
2026-06-26 01:21:21 PLAN/S0703_shared-state-mutation-audit/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v019]
2026-06-26 01:21:21 PLAN/S0703_shared-state-mutation-audit.md spec-tech Status -> Tactical [branch: DEBUG-v019]
2026-06-26 01:24:59 scripts/quality/audit-shared-state-writers.ps1 quality S0703 phase 01.1: UI-surface writer harvest [branch: DEBUG-v019]
2026-06-26 01:27:52 scripts/quality/audit-shared-state-writers.ps1 quality S0703 phase 01.2: data-surface writer harvest [branch: DEBUG-v019]
2026-06-26 01:30:01 scripts/quality/audit-shared-state-writers.ps1 quality S0703 phase 01.3: ownership grouping, pattern flags, ranked output, JSON [branch: DEBUG-v019]
2026-06-26 01:31:09 scripts/quality/shared-state-audit-prompt.md quality S0703 phase 02.1: commit reusable shared-state audit prompt [branch: DEBUG-v019]
2026-06-26 01:31:44 scripts/quality/shared-state-audit-prompt.md quality S0703 phase 02.2: document two-stage audit run flow [branch: DEBUG-v019]
2026-06-26 01:32:52 docs/DEV_OPS.md docs S0703 phase 03.1: document shared-state mutation audit tool [branch: DEBUG-v019]
2026-06-26 01:33:57 PLAN/S0703_shared-state-mutation-audit.md spec-dev S0703 all phases done; status -> Implemented (shared-state audit harvester + prompt + docs) [branch: DEBUG-v019]
2026-06-26 01:35:14 PLAN/S0703_shared-state-mutation-audit.md spec-check Audit S0703 -> Verified; PASS/WARN/FAIL 11/0/0; debug tags removed 0 [branch: DEBUG-v019]
2026-06-26 02:01:49 PLAN/S0703_shared-state-mutation-audit.md spec-draft S0703 stage-2 audit: parked 5 confirmed shared-state conflicts S0704-S0708 (progressBar dual-driver, SettingsManager orphan DataStore dup-keys, standalone panel toggle, cache-size input multi-writer, main resume-loading race) [branch: DEBUG-v019]
2026-06-26 02:23:31 PLAN/S0705_settingsmanager-orphan-datastore-dup-keys.md spec-all S0705 Verified: remove orphan SettingsManager class + its unit test (dormant DataStore split-brain hazard parked by S0703); strip stale SettingsManager mention from SettingsRepositoryImpl enable_statistics comment [branch: DEBUG-v019]
2026-06-26 02:43:39 PLAN/S0704_bugfix-player-progressbar-dual-driver.md spec-all S0704 design-first: strategic spec + tactical INDEX + research artifact for PlayerLoadingIndicatorCoordinator (single progressBar owner). No code written, status Tactical, awaiting owner approval to implement. [branch: DEBUG-v019]
2026-06-26 03:02:02 PLAN/S0709_bugfix-scheduled-ops-fgs-datasync-crash.md spec Scaffold Draft spec S0709 - scheduled-ops dataSync FGS crash (WorkManager onTimeout) [branch: DEBUG-v019]
2026-06-26 03:02:02 PLAN/S0710_bugfix-scheduled-move-never-completes.md spec Scaffold Draft spec S0710 - scheduled background MOVE perpetual re-upload loop + delete permission gap [branch: DEBUG-v019]
2026-06-26 03:07:11 app_v2/build.gradle.kts S0709 Bump WorkManager 2.9.0 -> 2.10.1 (work-runtime-ktx + work-multiprocess) so SystemForegroundService handles Service.onTimeout() for dataSync FGS on Android 14+, preventing ForegroundServiceDidNotStopInTimeException [branch: DEBUG-v019]
2026-06-26 03:07:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainResumePlaybackHelper.kt S0708 resume-loading race Helper owns nav-progress indicator via isResumeLoadingActive gate; MainActivity state collector defers while resume active [branch: DEBUG-v019]
2026-06-26 03:10:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt S0706 Route standalone command-panel toggle (keyboard + context-menu) through StandaloneFullscreenManager coordinator instead of raw isVisible flip, so panel/system-bars/fullscreen-button stay in sync [branch: DEBUG-v019]
2026-06-26 03:10:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCacheHelper.kt S0707 Guard cache-size cancel-path restore write with shared isUpdatingSpinner flag to stop re-entrant SettingsInputRow commit listener [branch: DEBUG-v019]
2026-06-26 03:14:04 app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/strategy/LocalOperationStrategy.kt S0710 scheduled MOVE never completes S0710: honour All-Files-Access in background delete (LocalOperationStrategy) + break scheduled loop on permission wall with advisory notification (ExecuteScheduledOperationUseCase, ScheduledOperationsWorker) [branch: DEBUG-v019]
2026-06-26 03:38:02 PLAN/S0704_bugfix-player-progressbar-dual-driver.md app_v2 unified player S0704: introduce PlayerLoadingIndicatorCoordinator as single source-counted owner of the unified player progressBar; migrate ~11 writer sites (reactive driver, image cycle, ExoPlayer, OCR, translation, PDF export, TEXT/EPUB) off direct isVisible writes; delete orphaned showLoadingIndicatorRunnable + hideLoadingSafetyRunnable [branch: DEBUG-v019]
2026-06-26 10:10:24 PLAN/S0709_bugfix-scheduled-ops-fgs-datasync-crash.md spec-check Audit S0709 -> Verified; PASS/WARN/FAIL 6/0/0; WorkManager 2.10.1 bump handles dataSync onTimeout [branch: DEBUG-v019]
2026-06-26 10:26:21 PLAN/S0704_bugfix-player-progressbar-dual-driver.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 2/0/3; coordinator source-counting proven (FILE_LIST/IMAGE_GLIDE/VIDEO_EXOPLAYER) [branch: DEBUG-v019]
2026-06-26 10:28:18 PLAN/S0704_bugfix-player-progressbar-dual-driver.md spec-check Audit S0704 -> Verified; PASS/WARN/FAIL 10/0/0; build+unit+device(FILE_LIST/IMAGE_GLIDE/VIDEO_EXOPLAYER) green [branch: DEBUG-v019]
2026-06-26 10:28:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLoadingIndicatorCoordinator.kt spec-check Remove S0704 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 10:45:26 PLAN/S0686_bugfix-settings-cancellation-logged-error.md spec-test-device Device run on emulator-5554 (Android 17) -> PASS/FAIL/INCONCLUSIVE 4/0/1; clearCache + mid-flight rotation (47MB), 0 false E lines / 0 JobCancellation across 12 Settings recreations [branch: DEBUG-v019]
2026-06-26 10:47:33 PLAN/S0686_bugfix-settings-cancellation-logged-error.md spec-sweep Device-verified S0686 -> Verified; rotation-cancelled clearCache no false toast/E across 12 recreations [branch: DEBUG-v019]
2026-06-26 10:47:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCacheHelper.kt spec-sweep Remove S0686 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 10:59:26 PLAN/S0671_standard-mediaprojection-capture-suite.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/INCONCLUSIVE 0/1/4: standard ships capture suite but menu-screenshot UI entry unreachable (button trapped in OFF edge-gesture card); 0 crashes; recommend /spec-fix S0671 [branch: DEBUG-v019]
2026-06-26 11:01:57 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on emulator-5554: closed 1 (S0686), reopened/finding 1 (S0671 entry unreachable on default standard), excluded 1 (S0606 VR), 14 real-device-only, 19 emulator-verifiable queued [branch: DEBUG-v019]
2026-06-26 11:02:24 PLAN/spec-catalog.jsonl spec-next Session: 6 touched, 3 Verified (S0709 WorkManager-2.10.1, S0704 player-spinner-coordinator device-tested, S0686 settings-cancellation device-tested); S0689 owner-deferred, S0672 blocked-by-S0671, S0671 device-FAIL stays blocked; sweep triaged 38 BlockNeedUserTest [branch: DEBUG-v019]
2026-06-26 11:10:39 PLAN/S0686_bugfix-settings-cancellation-logged-error.md spec-arc Archive S0686 (bugfix-settings-cancellation-logged-error) -> temp/done/ [branch: DEBUG-v019]
2026-06-26 11:10:40 PLAN/S0703_shared-state-mutation-audit.md spec-arc Archive S0703 (shared-state-mutation-audit) -> temp/done/ [branch: DEBUG-v019]
2026-06-26 11:10:41 PLAN/S0704_bugfix-player-progressbar-dual-driver.md spec-arc Archive S0704 (bugfix-player-progressbar-dual-driver) -> temp/done/ [branch: DEBUG-v019]
2026-06-26 11:10:42 PLAN/S0705_settingsmanager-orphan-datastore-dup-keys.md spec-arc Archive S0705 (settingsmanager-orphan-datastore-dup-keys) -> temp/done/ [branch: DEBUG-v019]
2026-06-26 11:10:43 PLAN/S0709_bugfix-scheduled-ops-fgs-datasync-crash.md spec-arc Archive S0709 (bugfix-scheduled-ops-fgs-datasync-crash) -> temp/done/ [branch: DEBUG-v019]
2026-06-26 11:12:43 .claude/agent-memory/android-rd-specialist/MEMORY.md agent-memory Added project CLI lesson: prefer repo wrappers and temp .ps1 helpers over nested PowerShell quoting [branch: DEBUG-v019]
2026-06-26 11:22:00 PLAN/S0708_bugfix-main-resume-loading-race.md spec-sweep Device-verified S0708 -> Verified; resume-loading indicator single-owned through resume check, collector defers [branch: DEBUG-v019]
2026-06-26 11:22:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainResumePlaybackHelper.kt spec-sweep Remove S0708 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 11:22:01 PLAN/S0707_bugfix-cache-size-input-multi-writer.md spec-sweep Device-verified S0707 -> Verified; cache-size cancel restore single-shot guarded, no extra commit [branch: DEBUG-v019]
2026-06-26 11:22:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsCacheHelper.kt spec-sweep Remove S0707 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 11:22:01 PLAN/S0706_bugfix-standalone-player-panel-toggle-race.md spec-sweep Device-verified S0706 -> Verified; standalone panel toggle via coordinator, survives rotation [branch: DEBUG-v019]
2026-06-26 11:22:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-sweep Remove S0706 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 11:42:57 PLAN/S0651_microphone-recording-child-toggle-visual-hierarchy.md spec-sweep Device-verified S0651 -> Verified; mic-recording ask-filename child indented portrait / same-row landscape [branch: DEBUG-v019]
2026-06-26 11:42:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-sweep Remove S0651 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 11:42:58 PLAN/S0620_optional-nine-zone-grid.md spec-sweep Device-verified S0620 -> Verified; grid-off 3-zone fallback + settings hides 9-zone, 8% edge panel, swipe zoom intact [branch: DEBUG-v019]
2026-06-26 11:42:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TouchZoneGestureManager.kt spec-sweep Remove S0620 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 11:42:58 PLAN/S0656_welcome-statistics-toggle.md spec-sweep Device-verified S0656 -> Verified; welcome statistics toggle ON by default, mirrors Settings + dashboard [branch: DEBUG-v019]
2026-06-26 11:42:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeFunctionalityController.kt spec-sweep Remove S0656 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 11:45:43 PLAN/S0711_bugfix-offline-resource-open-short-circuit.md spec-draft Add draft spec S0711 for early offline refusal before remote resource open attempts [branch: DEBUG-v019]
2026-06-26 11:47:23 PLAN/S0712_streams-persist-last-frame-thumbnail.md spec-draft Add draft spec S0712 for persistent low-res last-frame stream thumbnails between sessions [branch: DEBUG-v019]
2026-06-26 11:51:44 app_v2/src/main/res/menu/menu_streams.xml menu_streams Keep stream display-toggle and refresh as direct toolbar action buttons instead of spilling into overflow [branch: DEBUG-v019]
2026-06-26 11:55:17 PLAN/S0711_bugfix-offline-resource-open-short-circuit.md spec-update Refinement (claude-opus-4.8, focus: all); Draft clean, 0 applied 0 proposed [branch: DEBUG-v019]
2026-06-26 12:10:29 PLAN/S0610_standalone-image-player-commands.md spec-sweep Device-verified S0610 -> Verified; standalone Send-to Print + Copy/Move panels + SAF picker, copy keeps viewer/move closes [branch: DEBUG-v019]
2026-06-26 12:10:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-sweep Remove S0610 device-test probes on Verified flip [branch: DEBUG-v019]
2026-06-26 12:10:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneFileOperationsHandler.kt spec-sweep Remove S0610 device-test probe on Verified flip [branch: DEBUG-v019]
2026-06-26 12:25:30 .claude/agent-memory/android-rd-specialist/MEMORY.md agent-memory Add rule: argue concretely when needed, then follow the owner’s explicit final decision [branch: DEBUG-v019]
2026-06-26 12:27:01 PLAN/S0575_streams-toggle-welcome-entrypoints.md spec-sweep Device-verified S0575 -> Verified; Streams settings section + enable toggle persists; main-dropdown gated on toggle (probe removed) [branch: DEBUG-v019]
2026-06-26 12:27:01 PLAN/S0668_streams-favicon-sprite-map.md spec-sweep Device-verified S0668 -> Verified; catalog favicons render from atlas, favicon-less = empty slot, smooth scroll (probe removed) [branch: DEBUG-v019]
2026-06-26 12:27:02 PLAN/S0660_stream-card-overflow-actions-menu.md spec-sweep Device-verified S0660 -> Verified; MANUAL overflow order Add/Edit/Send/Remove; CATALOG hides Edit; Edit prefill+update; Send opens sharesheet (probe removed) [branch: DEBUG-v019]
2026-06-26 12:27:02 PLAN/S0591_synthetic-stream-resource-id-collision.md spec-sweep Device-verified S0591 -> Verified; stream launch resourceId=-200 (not -100/Favorites), no favorite button (probe removed) [branch: DEBUG-v019]
2026-06-26 12:33:50 app_v2/src/main/res/layout/fragment_settings_streams.xml fragment_settings_streams Arrange Streams settings group items into a two-column layout in portrait and landscape [branch: DEBUG-v019]
2026-06-26 12:40:15 PLAN/S0711_bugfix-offline-resource-open-short-circuit.md spec-all Compact spec S0711 (Approved): early soft-fail for streams play when offline [branch: DEBUG-v019]
2026-06-26 12:43:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-all S0711: early soft-fail on streams play when offline (no-network precheck + localized message) [branch: DEBUG-v019]
2026-06-26 12:56:06 PLAN/S0711_bugfix-offline-resource-open-short-circuit.md spec-all S0711 Verified: device-tested streams offline soft-fail; debug tag removed [branch: DEBUG-v019]
2026-06-26 12:56:17 PLAN/S0684_unify-dialog-ok-cancel-buttons.md spec-sweep Device-verified S0684 -> Verified; dialog pair: soft-pink shorter/narrower Cancel, wide green confirm, red destructive (day/landscape verified; night via DataStore theme deferred) (probe removed) [branch: DEBUG-v019]
2026-06-26 12:56:17 PLAN/S0681_send-to-menu-resource-picker.md spec-sweep Device-verified S0681 -> Verified; Select-resource last in Send-to (main+standalone), recipient picker + copy works (probe removed) [branch: DEBUG-v019]
2026-06-26 12:56:18 PLAN/S0675_stream-grid-frame-capture.md spec-sweep Device-verified S0675 -> Verified; grid toggle + .m3u8 frame capture rendered (beat AVD decoder limit), fallback, pull-refresh, persist (probe removed) [branch: DEBUG-v019]
2026-06-26 12:57:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-all remove S0711 BlockNeedUserTest debug tag after device verification [branch: DEBUG-v019]
2026-06-26 12:57:31 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep emulator-5554 (6 groups): closed 15 (S0686/S0708/S0707/S0706/S0651/S0620/S0656/S0610/S0575/S0668/S0660/S0591/S0684/S0681/S0675), 3 partial-blocked (S0670/S0613/S0679 real-device residual), 1 finding (S0671 entry unreachable default-standard), 3 flag-build deferred (S0663/S0682/S0680), 13 real-device-only, 1 VR excluded; all probe removals fk-clean [branch: DEBUG-v019]
2026-06-26 13:03:04 PLAN/spec-catalog.jsonl spec-arc Archived 15 Verified specs -> temp/done/: S0575 S0591 S0610 S0620 S0651 S0656 S0660 S0668 S0675 S0681 S0684 S0706 S0707 S0708 S0711 [branch: DEBUG-v019]
2026-06-26 13:08:54 PLAN/S0672_standard-edge-gesture-play-compliance.md spec-catalog consolidation (capture family) Consolidate noLegal->Play capture family (owner option A): S0629 -> Verified (FGS MEDIA_PROJECTION review passed, production 100%); S0671 capture engine rolled into S0672 and archived; S0672 BlockByOtherTask -> Tactical as single umbrella; S0680 crop+share kept separate. [branch: DEBUG-v019]
2026-06-26 14:07:17 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/OverlayHostService.kt S0672 Phase 01.1 Guard OverlayHostService FGS-start against ForegroundServiceStartNotAllowedException (Android 15 defensive backstop; sole caller is foreground) [branch: DEBUG-v019]
2026-06-26 14:07:17 app_v2/src/standardScreenCapture/AndroidManifest.xml S0672 Phase 01.2 Reword specialUse FGS subtype to a user-initiated, user-perceptible justification for Play review [branch: DEBUG-v019]
2026-06-26 14:16:51 docs/CODE_AUDIT_PROTOCOL.md,docs/DOCS_MAP.md Code Audit Protocol Add a project code-audit playbook for readability, lifecycle safety, memory leaks, startup, and performance review; index it in the docs map [branch: DEBUG-v019]
2026-06-26 14:18:57 docs/CODE_AUDIT_PROTOCOL.md docs/CODE_AUDIT_PROTOCOL.md Added memory safety and performance audit rules to CODE_AUDIT_PROTOCOL.md [branch: DEBUG-v019]
2026-06-26 14:24:21 app_v2/build.gradle.kts S0672 Phase 02.1-02.2 Add independent fms.edgeGestureTile gate: gradle.properties flag + build.gradle.kts reader, standardEdgeTile source-set mount (gated on screenCapture AND tile), and tile manifest injection [branch: DEBUG-v019]
2026-06-26 14:24:21 app_v2/src/standardEdgeTile/java/com/sza/fastmediasorter/screencapture/ScreenshotGestureTileService.kt S0672 Phase 02.3-02.4 Add ScreenshotGestureTileService (QS-tile fallback) + standardEdgeTile manifest: one-tap launches ScreenCaptureConsentActivity DOWN action, no specialUse / SYSTEM_ALERT_WINDOW / persistent overlay [branch: DEBUG-v019]
2026-06-26 14:24:21 app_v2/src/main/res/values/strings.xml S0672 Phase 02.5 Add tile_screenshot_label string across EN/RU/UK (QS-tile label) [branch: DEBUG-v019]
2026-06-26 14:33:13 app_v2/src/main/AndroidManifest.xml S0713 Add missing QS_TILE bind action to AudioToggleTileService and AppLaunchPanelTileService intent-filters (replaced bogus QS_TILE_PREFERENCES with no prefs activity wired) so both tiles are discoverable/addable in the Quick Settings tile picker [branch: DEBUG-v019]
2026-06-26 14:46:13 PLAN/S0672_standard-edge-gesture-play-compliance.md spec-dev S0672 All 3 phases done; status In Progress -> BlockNeedUserTest. Strip specialUse FGS hardening + subtype reword, QS-tile fallback, docs/catalog. [branch: DEBUG-v019]
2026-06-26 14:46:13 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/OverlayHostService.kt S0672 debug tag Insert S0672 BlockNeedUserTest probe at the strip FGS-start path [branch: DEBUG-v019]
2026-06-26 14:46:13 app_v2/src/standardEdgeTile/java/com/sza/fastmediasorter/screencapture/ScreenshotGestureTileService.kt S0672 debug tag Insert S0672 BlockNeedUserTest probe at tile onClick [branch: DEBUG-v019]
2026-06-26 14:46:13 dev/CATALOG/scripts/scan.ps1 S0672 tooling (Rule 13) Add src/standardEdgeTile/java to catalog scan srcRoots so the new source set indexes [branch: DEBUG-v019]
2026-06-26 14:46:13 docs/ALL_FEATURES.jsonl S0672 Phase 03.1 Record standard edge-gesture + QS-tile capture triggers capability (opt-in, pending Play review) [branch: DEBUG-v019]
2026-06-26 14:48:20 docs/CODE_AUDIT_PROTOCOL.md Code audit protocol + adoption spec family Extended CODE_AUDIT_PROTOCOL.md (added concurrency-correctness, Room/DB layer, release/R8 layer, severity taxonomy P0-P3, register/unregister symmetry, ExoPlayer/Media3 + Glide ownership, detekt/ktlint tooling gap, deterministic lifecycle probe); created adoption spec family S0714 umbrella + children S0715-S0723 (audit passes + infra/rules hardening) [branch: DEBUG-v019]
2026-06-26 15:19:43 PLAN/S0724_show-left-edge-gesture-strip.md spec Scaffold strategic spec skeleton S0724 [branch: DEBUG-v019]
2026-06-26 15:24:20 PLAN/S0672_standard-edge-gesture-play-compliance.md S0672 ADR-3 Submit Play specialUse with a VISIBLE gray strip (S0724), not invisible - revises ADR-1; resolves both research/02 stop-factors (review + Android-15 visible-overlay); demo video + submission blocked on S0724 [branch: DEBUG-v019]
2026-06-26 15:25:56 PLAN/S0715_memory-resource-ownership-audit S0715 memory/resource ownership audit Ran Layer-3 static audit (6 dimensions, adversarial verify): 14 candidates, 9 confirmed (0 P0, 0 P1, 6 P2, 3 P3); report at PLAN/S0715_…/AUDIT_FINDINGS.md; parked findings as fix-tickets S0725 (wear ExoPlayer ownership) + S0726 (app_v2 Layer-3 hygiene); recorded Last Audit, S0715 stays In Progress pending device LeakCanary scenarios [branch: DEBUG-v019]
2026-06-26 15:33:42 app_v2/src/main/java/com/sza/fastmediasorter S0726 app_v2 Layer-3 resource hygiene Fixed 4 S0715 findings: BackgroundMusicManager.release() now nulls onTrack/onMusicError listeners (mirrors AudioBackgroundPhotosManager); MediaMetadataHelper wraps MediaExtractor in try/finally (release on error path); VideoPosterExtractor clears Glide FutureTarget in finally; AudioMetadataLoader.memoryCache now bounded synchronizedMap LinkedHashMap (FIFO 5000, parity with failedCache). compileStandardDebugKotlin BUILD SUCCESSFUL; neuroslop delta 0 [branch: DEBUG-v019]
2026-06-26 15:53:38 app_v2/src/main/res/layout/fragment_settings_destinations.xml rowGestureStripVisible S0724: ‘Show the left-edge gesture strip’ option - opaque grey RGB(128,128,128); settings field + persistence + overlay manager/controllers/services live recolour + settings UI + EN/RU/UK + settings docs [branch: DEBUG-v019]
2026-06-26 16:16:19 app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt S0728 throttle @Volatile visibility Added @Volatile to userDefinedNetworkLimit and @field:Volatile to ProtocolState.currentLimit/isDegraded (cross-thread reads from IO throttle coroutines); S0716 P3 findings; compileStandardDebugKotlin SUCCESSFUL, neuroslop delta 0 [branch: DEBUG-v019]
2026-06-26 16:28:41 app_v2/src/main/java/com/sza/fastmediasorter/data/repository S0733 Room Layer-4 hygiene Fixed 2 S0717 P3 findings: ThumbnailCacheRepositoryImpl.migrateLegacyCache hoists getAllThumbnails() out of per-file loop into associateBy Map (was O(files x rows) N+1); FavoritesRepositoryImpl getAllFavorites/isFavorite Flows now .distinctUntilChanged(). compileStandardDebugKotlin SUCCESSFUL; neuroslop delta 0 [branch: DEBUG-v019]
2026-06-26 16:41:18 app_v2/src/main/java/com/sza/fastmediasorter S0736 readability trivial fixes Fixed 2 S0718 findings: WebViewAuthDialogFragment !request?.isForMainFrame!! latent NPE -> request?.isForMainFrame == false (null-safe); BrowseLoadingManager updateState 5 call-sites now use named args. compileStandardDebugKotlin SUCCESSFUL; neuroslop delta 0 [branch: DEBUG-v019]
2026-06-26 16:56:01 app_v2/proguard-rules.pro S0737 R8 keep rules for Gson models Added -keep for domain.usecase.Backup, data.model.TrashMetadata, domain.game. (Gson-serialized, no @SerializedName) so R8 cannot rename fields and break cross-version JSON restore (Drive backup/trash/game state); S0719 P1+2xP3. Pending release-build verification [branch: DEBUG-v019]
2026-06-26 17:04:06 app_v2/proguard-rules.pro S0737 R8 keep verified minifyStandardReleaseWithR8 BUILD SUCCESSFUL (3m18s) with new keep rules - R8 valid; Backup**/TrashMetadata/GameStateSnapshot fields preserved against obfuscation [branch: DEBUG-v019]
2026-06-26 17:19:14 app_v2/src/main/java/com/sza/fastmediasorter/core/db/DatabaseResetNotice.kt S0731 DB release-safety Part 1 (owner-decided behavior) DB reset on open/migration failure now: removed fallbackToDestructiveMigration (failures route through provideAppDatabase recovery), back up .db(+wal/shm) to device db-backups dir before deleteDatabase, and show an informative AlertDialog (reason + backup path) via new DatabaseResetNotice on MainActivity.onCreate instead of a silent Toast. Added 3 strings EN/RU/UK; removed orphaned database_reset_message. fc + string parity + neuroslop green. Part 2 (exportSchema + migration test) remains [branch: DEBUG-v019]
2026-06-26 17:35:48 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/AppDatabase.kt spec-all S0731 Part 2: enable Room schema export (exportSchema=true + kapt room.schemaLocation), commit schemas/36.json, add AppDatabaseSchemaExportTest JVM invariant guard [branch: DEBUG-v019]
2026-06-26 17:40:20 PLAN/S0731_database-release-safety.md spec-check Audit S0731 -> Verified; PASS/WARN/FAIL 9/0/0; Part 2 Room schema-export guard (exportSchema+36.json+JVM invariant test) [branch: DEBUG-v019]
2026-06-26 17:49:59 PLAN/S0737_r8-keep-gson-models.md spec-check Audit S0737 -> Verified; PASS 5/0/0; R8 minify green with keep rules, seeds.txt confirms Gson field names preserved [branch: DEBUG-v019]
2026-06-26 17:58:01 CLAUDE.md, AGENTS.md, .github/copilot-instructions.md Typography instruction scope Restricted ellipsis, dash, and Russian yo typography rules to documentation prose and user-visible UI text only; excluded code, technical specs, commands, logs, and chat. [branch: DEBUG-v019]
2026-06-26 18:32:23 app_v2/src/main/java/com/sza/fastmediasorter/data/network/lifecycle/SftpConnectionGate.kt spec-all S0727: move blocking disk/network IO off Main across 5 paths (SFTP gate teardown, scheduled-tasks widget onUpdate, settings import use-cases, MainActivity setupViews, gesture overlay controller) [branch: DEBUG-v019]
2026-06-26 18:35:20 PLAN/S0727_main-thread-blocking-io.md spec-check Audit S0727 -> Verified; PASS 9/0/0; 5 main-safety paths moved off Main (SFTP gate, widget onUpdate, import/apply use-cases, MainActivity setupViews, gesture overlay controllers); standard+noLegal builds green [branch: DEBUG-v019]
2026-06-26 18:41:31 PLAN/S0717_room-database-audit.md spec-check Audit S0717 -> Verified; PASS 7/0/0; Layer 4 Room audit deliverable complete, 12 findings parked into S0731(Verified)/S0732/S0733 [branch: DEBUG-v019]
2026-06-26 18:58:46 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyBackupPayloadUseCase.kt spec-all S0732: wrap multi-step Room writes in transactions (moveTile/replaceAll, mergeCatalog, ApplyBackupPayload Room sections); +fix S0727 ConnectionGatesTest regression [branch: DEBUG-v019]
2026-06-26 19:01:09 PLAN/S0732_room-write-atomicity.md spec-all S0732 -> Partial: findings 1-3 (moveTile/replaceAll, mergeCatalog, ApplyBackup) wrapped in withTransaction; finding 4 (ImportSettings legacy XML) deferred; tests green [branch: DEBUG-v019]
2026-06-26 19:03:35 PLAN/S0716_concurrency-correctness-audit.md spec-check Audit S0716 -> Verified; PASS 5/0/0; Layer 2 concurrency audit deliverable complete, 13 findings parked into S0727(Verified)/S0728/S0729/S0730 [branch: DEBUG-v019]
2026-06-26 19:04:08 PLAN/spec-catalog.jsonl spec-next Session: 7 processed, 5 Verified (S0731/S0737/S0727/S0717/S0716), 1 Partial (S0732), 1 BlockByOtherTask (S0715); +S0727 test regression fixed [branch: DEBUG-v019]
2026-06-26 19:12:18 app_v2/src/main/java/com/sza/fastmediasorter/core/cache/TranslationCacheManager.kt spec-all S0729: ConcurrentHashMap both levels + atomic putIfAbsent (race-safe Main/IO) [branch: DEBUG-v019]
2026-06-26 19:12:18 app_v2/src/main/java/com/sza/fastmediasorter/core/cache/MediaFilesCacheManager.kt spec-all S0729: single lock guards list mutations + toList snapshot (no CME with IO widget refresher) [branch: DEBUG-v019]
2026-06-26 19:12:18 PLAN/S0729_shared-cache-races.md spec-all S0729 shared-cache-races -> Verified; PASS/WARN/FAIL 2/0/0 [branch: DEBUG-v019]
2026-06-26 19:18:51 wear/src/main/java/com/sza/fastmediasorter/wear/di/WearAppModule.kt spec-all S0725: per-VM ExoPlayer (drop @Singleton); audio+video VMs release() in onCleared; VideoPlayerScreen detaches surface (player=null) on dispose [branch: DEBUG-v019]
2026-06-26 19:18:52 PLAN/S0725_wear-exoplayer-ownership-release.md spec-all S0725 -> BlockNeedUserTest (variant A chosen; wear build green; LeakCanary on Wear pending) [branch: DEBUG-v019]
2026-06-26 19:33:51 build.gradle.kts spec-all S0720: detekt 1.23.8 + ktlint formatting static gate (subprojects), frozen ratchet baselines, assert-detekt.ps1 wired into post-change.ps1, DEV_OPS note [branch: DEBUG-v019]
2026-06-26 19:33:51 PLAN/S0720_detekt-ktlint-static-analysis.md spec-all S0720 detekt+ktlint static analysis -> Verified; PASS/WARN/FAIL 5/0/0 [branch: DEBUG-v019]
2026-06-26 19:38:28 CLAUDE.md spec-all S0723: codify Code Audit Protocol into CLAUDE.md S13 + mirror AGENTS.md S8 + copilot-instructions.md S7 (P0-P3 taxonomy, listener symmetry, main-thread Room ban, R8/reflection-on-minified, player/Glide ownership) [branch: DEBUG-v019]
2026-06-26 19:38:28 PLAN/S0723_audit-protocol-rules-encoding.md spec-all S0723 audit-protocol-rules-encoding -> Verified; PASS/WARN/FAIL 5/0/0 [branch: DEBUG-v019]
2026-06-26 19:39:21 PLAN/spec-catalog.jsonl spec-next Session (cont): 4 processed - S0729/S0720/S0723 Verified, S0725 BlockNeedUserTest (wear, Wear-device LeakCanary); paused at clean boundary before S0712 feature (context) [branch: DEBUG-v019]
2026-06-26 20:17:32 PLAN/S0732_room-write-atomicity.md spec-check Audit S0732 -> Verified; finding #4 ImportSettingsUseCase legacy-XML wrapped in withTransaction; PASS/WARN/FAIL 4/0/0 [branch: DEBUG-v019]
2026-06-26 20:17:32 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt spec-dev S0732: wrap legacy-XML restore Room sections in appDatabase.withTransaction; defer WorkManager scheduling to post-commit; extract applyLegacyXmlSections + mergeCredentials/mergeResources/upsertScheduledOps/buildScheduledOp [branch: DEBUG-v019]
2026-06-26 20:22:26 PLAN/S0719_performance-r8-release-audit.md spec-check Audit S0719 -> Verified; Layer 6+7 static pass complete, S0737 keep-rules confirmed in proguard, S0738 parked; PASS/WARN/FAIL/MANUAL 4/0/0/1 (full-matrix release build deferred to release gate) [branch: DEBUG-v019]
2026-06-26 20:23:47 PLAN/S0736_readability-trivial-fixes.md spec-check Audit S0736 -> Verified; both S0718 trivial fixes confirmed in code (WebViewAuthDialogFragment !!-NPE removed, BrowseLoadingManager 5x named-args); stale Draft header synced; PASS/WARN/FAIL 3/0/0 [branch: DEBUG-v019]
2026-06-26 20:25:00 PLAN/S0726_app_v2-layer3-resource-hygiene.md spec-check Audit S0726 -> Verified; all 4 Layer3 resource-ownership fixes confirmed (BackgroundMusicManager listener null, MediaMetadataHelper extractor finally, VideoPosterExtractor Glide.clear finally, AudioMetadataLoader bounded cache); PASS/WARN/FAIL 4/0/0 [branch: DEBUG-v019]
2026-06-26 20:27:34 PLAN/S0718_code-readability-audit.md spec-check Audit S0718 -> Verified; Layer 1 readability static pass complete, AUDIT_FINDINGS present, fixes parked (S0736 Verified, S0734/S0735 Draft); PASS/WARN/FAIL 4/0/0 [branch: DEBUG-v019]
2026-06-26 20:29:30 PLAN/S0733_room-layer4-hygiene.md spec-check Audit S0733 -> Verified; both S0717 Layer4 fixes confirmed (migrateLegacyCache N+1 hoist to Map, Favorites Flows distinctUntilChanged); stale Draft header synced; PASS/WARN/FAIL 3/0/0 [branch: DEBUG-v019]
2026-06-26 20:30:21 PLAN/S0728_throttle-volatile-visibility.md spec-check Audit S0728 -> Verified; all 3 ConnectionThrottleManager visibility fields confirmed @Volatile/@field:Volatile (userDefinedNetworkLimit, ProtocolState.currentLimit/isDegraded); PASS/WARN/FAIL 2/0/0 [branch: DEBUG-v019]
2026-06-26 20:32:44 PLAN/spec-catalog.jsonl spec-next Session: 7 Verified (S0732 room-write-atomicity finding#4 real code fix; S0719/S0736/S0726/S0718/S0733/S0728 audit verifies); 2 parked (S0712 UX/research, S0721 owner-CI); heavy Drafts deferred to focused session (S0730/S0735/S0722/S0738/S0734); device-gated S0725/S0715 (Wear) [branch: DEBUG-v019]
2026-06-26 21:12:28 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseViewModel.kt S0735 unified ui state Introduce shared UiState and migrate main resource list rendering to a single observable [branch: DEBUG-v019]
2026-06-26 21:24:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt S0735 resourceListUiState Expose a unified resourceListUiState flow backed by BaseViewModel UiState for the main resource list. [branch: DEBUG-v019]
2026-06-26 21:24:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt S0735 main list rendering Replace split loading/error/empty reconciliation with a single resourceListUiState collector while preserving refresh progress for non-empty lists. [branch: DEBUG-v019]
2026-06-26 21:40:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseObserverManager.kt BrowseObserverManager S0730: single shared settings StateFlow for Browse observers (was 4x AppSettings rebuild per write); cancel ResourceEditor post-save verification on screen close (drop never-cancelled scope); throttle cloud download/upload progress via adaptCloudProgress (was raw coroutine per 64KB tick) [branch: DEBUG-v019]
2026-06-26 21:52:58 PLAN/S0738_adapter-perf-hygiene.md spec-check S0738 adapter perf-hygiene -> Verified; themes A(cached date formatter)/B(hoist+const+memoize+remove per-bind Timber.d)/C(PAYLOAD_SELECTION in 3 adapters)/D(SparseIntArray); size/duration deferred for locale-safety; fc+detekt green, adversarial review 3 PASS [branch: DEBUG-v019]
2026-06-26 21:52:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/AdapterFileInfoFormatter.kt spec-dev S0738: ThreadLocal cached SimpleDateFormat (formatTimestamp) replacing per-bind android DateFormat; shared with PagingMediaFileAdapter [branch: DEBUG-v019]
2026-06-26 21:52:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/MediaFileAdapter.kt spec-dev S0738: PAYLOAD_SELECTION partial rebind (shared applySelectionVisual), actionButtons+inlinePlayingBorder lazy hoist, KNOWN_PAYLOADS fallback set [branch: DEBUG-v019]
2026-06-26 21:52:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt spec-dev S0738: DARK_TEXT_COLOR const, removed per-bind Timber.d, formatMediaTypes LRU memoize, PAYLOAD_SELECTION partial rebind [branch: DEBUG-v019]
2026-06-26 21:52:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/ResourceToAddAdapter.kt spec-dev S0738: PAYLOAD_SELECTION + bindSelection partial rebind, narrowed setSelectedPaths to flipped-only [branch: DEBUG-v019]
2026-06-26 21:52:58 app_v2/src/main/java/com/sza/fastmediasorter/util/gif/AnimatedGifEncoder.kt spec-dev S0738: per-pixel colorMap mutableMapOf->SparseIntArray (cold GIF export, identical output) [branch: DEBUG-v019]
2026-06-26 23:36:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/GoogleAccountSettingsViewModel.kt S0639 S0639: dedup primaryScopes() to canonical GoogleDriveAuthPlugin.DRIVE_SIGN_IN_SCOPES (single source of truth, same path as BackupRestoreViewModel); behavior-identical 5-scope set; fk green. In-repo complete; stays BlockExternal (owner Cloud Console restricted-scope verification). [branch: DEBUG-v019]
2026-06-26 23:36:47 app_v2/src/main S0713,S0693,S0670 Release-safety device-test sweep (emulator v2.60.6261.106): S0713 QS tiles bind+work -> Verified; S0693 wide-layout threshold true@852dp / false@393dp across Main/Browse/Settings/panel -> Verified; S0670 dialog tabs/presets PASS but compact-height FAILS on tall display -> Partial. Removed 7 BlockNeedUserTest debug tags (S0713 x2, S0693 x4, S0670 x1) on leaving BlockNeedUserTest. [branch: DEBUG-v019]
2026-06-26 23:37:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt S0739 S0739: fix P0 IllegalStateException ‘Binding is only valid between onCreateView and onDestroyView’ - PlayerVrLaunchManager.updateOverlayMargins now captures the binding once before root.post{} and uses it inside the deferred Runnable instead of re-reading the throwing activity.activityBinding getter after the player Activity is destroyed. [branch: DEBUG-v019]
2026-06-26 23:44:35 scripts/quality/assert-detekt.ps1 assert-detekt.ps1 added optional module-scoped detekt gate and forwarding [branch: DEBUG-v019]
2026-06-27 00:19:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0676 Fix P1: gate isCommandPanelVisible() on drawModeActive so the async destination-panel populate cannot re-show Copy/Move panels over a gesture-launched draw canvas [branch: DEBUG-v019]
2026-06-27 00:19:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerDrawingSaveHelper.kt S0679 Fix two P1s: recycle the throwaway overlay bitmap after crop-apply (leak per crop); null-guard photoView.displayRect in buildMergedDrawingBytes (NPE before first layout) [branch: DEBUG-v019]
2026-06-27 00:19:45 app_v2/src/main/res/layout/dialog_playback_control.xml S0670 Fix compact-height: replace match_parent rail/content divider (resolves to full height cap under AT_MOST) with drawn showDividers so the dialog wraps to content [branch: DEBUG-v019]
2026-06-27 00:43:49 temp/test-devices/RFCR110NBQJ.md RFCR110NBQJ Added a local operational marker: current connected device is owner-approved for unrestricted test actions [branch: DEBUG-v019]
2026-06-27 00:55:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt S0741 Renamed the destination-panel visibility gate and suppressed Copy/Move panels across standalone draw/fullscreen overlays [branch: DEBUG-v019]
2026-06-27 00:55:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt BrowseActivity Optimized settings collect to use ViewModel.settings StateFlow instead of settingsRepository.getSettings() cold flow, avoiding unnecessary DB loads on main. Removed unused .first() import and database load. [branch: DEBUG-v019]
2026-06-27 00:55:19 PLAN/S0740_browseactivity-mic-settings-cold-collect.md S0740 spec Closed ticket S0740 and marked status Verified [branch: DEBUG-v019]
2026-06-27 01:09:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0676 Device-verified on real Galaxy S21+ (Android 15): gesture-launched draw editor keeps Copy/Move panels hidden (P1 fix confirmed); removed S0676 debug tag on Verified [branch: DEBUG-v019]
2026-06-27 01:09:32 PLAN/S0670_compact-playback-control-dialog.md S0670 Device-verified compact playback-control dialog on real 1080x2400 (audio + video dialogs wrap to content, no empty bottom half); S0670 -> Verified [branch: DEBUG-v019]
2026-06-27 01:23:24 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt S0724 Show only a semi-transparent 4 px left-edge guide while keeping the rest of the gesture strip transparent; sync strings, settings docs, ALL_FEATURES, and linked specs [branch: DEBUG-v019]
2026-06-27 01:24:42 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/GetMediaFilesUseCase.kt S0742 Rethrow CancellationException in get-media-files favorites-fetch + progressive-scan catches (cancellation is normal flow, was logged as ERROR/W and surfaced as debug snackbar); guard UiNotificationTree to never surface cancellation-rooted errors [branch: DEBUG-v019]
2026-06-27 02:00:20 a.ps1 id launcher command Added install-only standard debug alias and installer script for device deployment without auto-launch [branch: DEBUG-v019]
2026-06-27 02:01:42 PLAN/S0743_cloud-auth-dead-end-stale-bound-account-removed-from-device.md spec-all Strategic spec approved: S0743 cloud auth dead-end (stale bound account removed from device) [branch: DEBUG-v019]
2026-06-27 02:05:48 PLAN/S0743_cloud-auth-dead-end-stale-bound-account-removed-from-device/INDEX.md spec-all Tactical plan: S0743 cloud auth self-heal (2 phases) [branch: DEBUG-v019]
2026-06-27 02:19:19 app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/CredentialManagerGoogleIdentityRepository.kt spec-all S0743 cloud auth self-heal: GoogleTokenIssuer sealed TokenIssueResult + ACCOUNT_NOT_PRESENT detection, getAccessToken clears stale binding to Unbound (Partial - browser-auth store follow-up S0744) [branch: DEBUG-v019]
2026-06-27 02:58:13 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveAuthCoordinator.kt spec-all S0744 Drive browser-auth store self-heal + forced account chooser: clear browser store on identity self-heal, preferAccountChooser flag through signInPrimary; +detekt import-order fixes (BrowseActivity, GetMediaFilesUseCase) + magic-number/spacing [branch: DEBUG-v019]
2026-06-27 03:34:50 app_v2/src/main/java/com/sza/fastmediasorter/data/cloud/GoogleDriveInteractiveSignInCoordinator.kt GoogleDriveInteractiveSignInCoordinator Migrated Google Drive OAuth token issuance to GMS Authorization API and resolved PendingIntent natively via shadow activity. [branch: DEBUG-v019]
2026-06-27 03:51:59 a.ps1 cc and ind launcher commands Added noLegal install alias ind and commit-only cc command backed by NoPush support in commit-push script [branch: DEBUG-v019]
2026-06-27 04:09:04 PLAN/S0739_bugfix-vr-overlay-margins-binding-crash.md spec-arc Archive S0739 (bugfix-vr-overlay-margins-binding-crash) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:04 PLAN/S0629_play-fgs-declaration-materials.md spec-arc Archive S0629 (play-fgs-declaration-materials) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:05 PLAN/S0670_compact-playback-control-dialog.md spec-arc Archive S0670 (compact-playback-control-dialog) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:06 PLAN/S0676_bugfix-editor-bottom-panels.md spec-arc Archive S0676 (bugfix-editor-bottom-panels) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:07 PLAN/S0693_landscape-mode-min-width-threshold.md spec-arc Archive S0693 (landscape-mode-min-width-threshold) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:08 PLAN/S0713_qs-tile-missing-bind-action.md spec-arc Archive S0713 (qs-tile-missing-bind-action) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:09 PLAN/S0716_concurrency-correctness-audit.md spec-arc Archive S0716 (concurrency-correctness-audit) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:10 PLAN/S0717_room-database-audit.md spec-arc Archive S0717 (room-database-audit) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:11 PLAN/S0718_code-readability-audit.md spec-arc Archive S0718 (code-readability-audit) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:12 PLAN/S0719_performance-r8-release-audit.md spec-arc Archive S0719 (performance-r8-release-audit) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:13 PLAN/S0720_detekt-ktlint-static-analysis.md spec-arc Archive S0720 (detekt-ktlint-static-analysis) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:14 PLAN/S0723_audit-protocol-rules-encoding.md spec-arc Archive S0723 (audit-protocol-rules-encoding) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:15 PLAN/S0726_app_v2-layer3-resource-hygiene.md spec-arc Archive S0726 (app_v2-layer3-resource-hygiene) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:16 PLAN/S0727_main-thread-blocking-io.md spec-arc Archive S0727 (main-thread-blocking-io) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:17 PLAN/S0728_throttle-volatile-visibility.md spec-arc Archive S0728 (throttle-volatile-visibility) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:17 PLAN/S0729_shared-cache-races.md spec-arc Archive S0729 (shared-cache-races) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:18 PLAN/S0730_flow-coroutine-hygiene.md spec-arc Archive S0730 (flow-coroutine-hygiene) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:19 PLAN/S0731_database-release-safety.md spec-arc Archive S0731 (database-release-safety) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:20 PLAN/S0732_room-write-atomicity.md spec-arc Archive S0732 (room-write-atomicity) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:21 PLAN/S0733_room-layer4-hygiene.md spec-arc Archive S0733 (room-layer4-hygiene) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:22 PLAN/S0736_readability-trivial-fixes.md spec-arc Archive S0736 (readability-trivial-fixes) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:23 PLAN/S0737_r8-keep-gson-models.md spec-arc Archive S0737 (r8-keep-gson-models) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:24 PLAN/S0738_adapter-perf-hygiene.md spec-arc Archive S0738 (adapter-perf-hygiene) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:25 PLAN/S0740_browseactivity-mic-settings-cold-collect.md spec-arc Archive S0740 (browseactivity-mic-settings-cold-collect) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 04:09:26 PLAN/S0742_get-media-files-swallows-cancellation-favorites-error.md spec-arc Archive S0742 (get-media-files swallows CancellationException + ERROR-spams Failed to fetch favorites) -> temp/done/ [branch: DEBUG-v019]
2026-06-27 06:56:38 PLAN/S0307_emulator-user-test-sweep.md spec-prerelease+sweep Device session on RFCR110NBQJ: archived Drive cluster S0743-S0746; S0742 Verified; S0710 defect A verified (stays Block); S0624 blocked (no SIM); prerelease verdict FAIL (env-only: 4 maestro fixture-seed fails + real-device log noise), app-level clean; parked S0747 (seed not MediaStore-indexed); stream-catalog +20 rows [branch: DEBUG-v019]
2026-06-27 07:15:52 PLAN/S0747_prerelease-seed-media-not-mediastore-indexed.md spec-all Compact spec: S0747 prerelease seed MediaStore index [branch: DEBUG-v019]
2026-06-27 07:19:43 scripts/devtest/prerelease-prepare.ps1 spec-all S0747: prerelease-prepare forces MediaStore scan+verify of seeded fixtures (media-index stage) - closes Maestro image-flow race [branch: DEBUG-v019]
2026-06-27 07:50:09 PLAN/S0741_command-panel-visibility-draw-gate-cross-host.md spec-all S0741: gate in-app Player Copy/Move destination panels on imageEditMode - both the async populate path and the command-availability pass it re-enters now refuse to re-show panels over an active draw/crop overlay (closes cross-host pattern; standalone hosts already covered) [branch: DEBUG-v019]
2026-06-27 08:06:45 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.6270.802 - plateau merge from DEBUG-v019 [branch: DEBUG-v019]
2026-06-27 08:21:10 docs/FEATURES.md FEATURES Showcase update for v2.60.6270.802 from ALL_FEATURES diff (streams highlights) [branch: DEBUG-v020]
2026-06-27 08:28:58 PLAN/S0748_bugfix-battery-optimization-grant-button.md spec Scaffold strategic spec skeleton S0748 [branch: DEBUG-v020]
2026-06-27 08:29:13 app_v2/src/main/res/values/strings_setup.xml welcome_permissions_title Renamed A few permissions into A ‘few’ permissions. [branch: DEBUG-v020]
2026-06-27 09:29:08 app_v2/src/main/res/values-ru/strings_setup.xml welcome_permissions_title Renamed welcome_permissions_title in RU and UK locales to include escaped quotes. [branch: DEBUG-v020]
2026-06-27 09:31:45 PLAN/S0749_bugfix-instagram-second-account-html.md spec Scaffold strategic spec skeleton S0749 [branch: DEBUG-v020]
2026-06-27 09:37:09 app_v2/src/main/res/values/strings_setup.xml welcome_permissions_title Adjusted welcome_permissions_title quotes for sarcasm (quotes around few/Несколько/Кілька). [branch: DEBUG-v020]
2026-06-27 09:39:38 PLAN/S0750_ui-texts-sarcasm-irony.md spec Scaffold strategic spec skeleton S0750 [branch: DEBUG-v020]
2026-06-27 09:40:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt S0749 Clear WebView cookies before social login so a second account can register (fixes ERR_TOO_MANY_REDIRECTS hang) [branch: DEBUG-v020]
2026-06-27 09:44:58 PLAN/S0751_cleanup-detekt-drift-cloud-browse.md spec Scaffold strategic spec skeleton S0751 (detekt drift parked from S0749) [branch: DEBUG-v020]
2026-06-27 10:35:11 app_v2/src/main/res/values/strings.xml app_v2 empty-state/welcome strings + README front matter (EN/RU/UK) S0750: light self-deprecating irony in empty-state/welcome UI strings (12 keys x3 locales; removed stray emoji, de-bureaucratized operation_completed) + README intro line [branch: DEBUG-v020]
2026-06-27 10:40:33 app_v2/src/cloudEnabled/java/com/sza/fastmediasorter/identity/GoogleTokenIssuer.kt S0751 S0751: clear detekt drift in cloud-auth + browse (import ordering, generic-exception->check/error, unused-param suppress, max-line-length); no behavior change [branch: DEBUG-v020]
2026-06-27 16:15:50 PLAN/S0752_build-vs-release-workflow.md spec Add strategic spec S0752 for build-vs-release workflow concepts [branch: DEBUG-v020]
2026-06-27 16:19:46 PLAN/S0752_build-vs-release-workflow/INDEX.md spec-tech Create tactical plan for S0752 (5 phases) [branch: DEBUG-v020]
2026-06-27 16:19:46 PLAN/S0752_build-vs-release-workflow.md spec-tech Status -> Tactical [branch: DEBUG-v020]
2026-06-27 16:21:53 .github/workflows/android-ci.yml android-ci S0752 Phase 01: remove dead develop trigger; CI fires only on main push + PR [branch: DEBUG-v020]
2026-06-27 16:23:34 scripts/githooks/pre-push githooks S0752 Phase 02: pre-push guard blocks accidental direct push to main from dev worktree; release worktree + FMS_ALLOW_MAIN_PUSH exempt [branch: DEBUG-v020]
2026-06-27 16:23:34 scripts/githooks/activate-hooks.ps1 githooks S0752 Phase 02: one-time hook activation via core.hooksPath [branch: DEBUG-v020]
2026-06-27 16:24:45 docs/BUILD_VS_RELEASE.md docs S0752 Phase 03: build-vs-release glossary (terms, CI cost map, command mapping, main-push guard) [branch: DEBUG-v020]
2026-06-27 16:26:04 .claude/commands/build.md build-skill S0752 Phase 04: reference BUILD_VS_RELEASE glossary [branch: DEBUG-v020]
2026-06-27 16:26:04 .claude/commands/skill-release.md skill-release S0752 Phase 04: reference BUILD_VS_RELEASE glossary; note release is the only paid-CI flow [branch: DEBUG-v020]
2026-06-27 16:27:02 PLAN/S0752_build-vs-release-workflow.md spec-dev S0752 all 5 phases done; status -> Implemented (build/release glossary + main-push guard + CI cleanup) [branch: DEBUG-v020]
2026-06-27 16:28:29 PLAN/S0752_build-vs-release-workflow.md spec-check Audit S0752 -> Verified; PASS/WARN/FAIL 11/0/0 [branch: DEBUG-v020]
2026-06-27 16:35:07 .claude/commands/release.md release-skill New /release campaign runbook: assess -> finish work -> prerelease -> docs(WHATS_NEW) -> skill-release -> distribute -> verify [branch: DEBUG-v020]
2026-06-27 16:35:07 .claude/commands/build.md build-skill Add Build Checklist (work order) on top; reference kept below [branch: DEBUG-v020]
2026-06-27 16:35:08 CLAUDE.md skill-routing Register /release runbook; clarify /build as checklist+reference [branch: DEBUG-v020]
2026-06-27 16:35:08 docs/BUILD_VS_RELEASE.md docs Release flow: /release campaign wraps /skill-release; build flow notes /build checklist [branch: DEBUG-v020]
2026-06-27 16:35:45 AGENTS.md skill-routing Mirror /release + /build checklist routing from CLAUDE.md [branch: DEBUG-v020]
2026-06-27 21:08:02 PLAN/S0751_cleanup-detekt-drift-cloud-browse.md spec-check Audit S0751 -> Verified; PASS/WARN/FAIL 11/0/0; 9 detekt violations static-verified, baseline unchanged [branch: DEBUG-v020]
2026-06-27 21:14:44 PLAN/S0734_readability-refactors.md spec-check Audit S0734 -> Verified (review-mode); 4 readability refactors already in tree; PASS/WARN/FAIL 5/0/0; compile green [branch: DEBUG-v020]
2026-06-27 21:39:46 PLAN/S0545_camera-capabilities-expansion.md spec-sweep Device-verified S0545 on S21+ (photo/video/mic/lens-gated controls); reconstructed missing spec file; -> Verified [branch: DEBUG-v020]
2026-06-27 21:41:06 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on RFCR110NBQJ (S21+): closed 1 (S0545), external 4 (S0748/S0749/S0606/S0725), 12 direct-device deferred to next round, 7 blocked w/ documented gap [branch: DEBUG-v020]
2026-06-27 22:35:37 PLAN/S0661_resource-overflow-home-screen-shortcut.md spec-sweep Device-verified on S21+: overflow Add-to-Home-Screen -> One UI pin dialog -> widget opens resource in Browse; tag removed; -> Verified [branch: DEBUG-v020]
2026-06-27 22:35:37 PLAN/S0663_app-launch-panel-internal-routes.md spec-sweep Device-verified on S21+: 4 chooser paths add correctly-typed tiles, disabled feature shows off-state, Reset re-seeds default; runtime launch = manual (One UI intercepts edge-swipe); tags removed; -> Verified [branch: DEBUG-v020]
2026-06-27 22:35:38 PLAN/S0682_app-launch-panel-relabel-icons.md spec-sweep Device-verified on S21+: RU labels Приложение / Настройки ОС Андроид, 9 distinct OS-setting icons; tag removed; -> Verified [branch: DEBUG-v020]
2026-06-27 22:37:19 PLAN/S0753_camera-zoom-presets-slider-night.md spec Add strategic spec S0753: camera zoom presets + zoom slider + transparent legible controls + night-mode long exposure [branch: DEBUG-v020]
2026-06-27 22:40:09 app_v2/src/main/res/values/strings.xml string/screenshot_gesture_action_open_draw rename screenshot gesture edit action label [branch: DEBUG-v020]
2026-06-27 23:01:26 PLAN/S0753_camera-zoom-presets-slider-night/INDEX.md spec-tech Create tactical plan for S0753 (5 phases) [branch: DEBUG-v020]
2026-06-27 23:01:26 PLAN/S0753_camera-zoom-presets-slider-night/PHASE_01__zoom-presets.md spec-tech Phase 01: zoom-presets [branch: DEBUG-v020]
2026-06-27 23:01:26 PLAN/S0753_camera-zoom-presets-slider-night/PHASE_02__zoom-slider.md spec-tech Phase 02: zoom-slider [branch: DEBUG-v020]
2026-06-27 23:01:27 PLAN/S0753_camera-zoom-presets-slider-night/PHASE_03__control-legibility.md spec-tech Phase 03: control-legibility [branch: DEBUG-v020]
2026-06-27 23:01:27 PLAN/S0753_camera-zoom-presets-slider-night/PHASE_04__night-mode.md spec-tech Phase 04: night-mode [branch: DEBUG-v020]
2026-06-27 23:01:27 PLAN/S0753_camera-zoom-presets-slider-night/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v020]
2026-06-27 23:01:27 PLAN/S0753_camera-zoom-presets-slider-night.md spec-tech Status -> Tactical [branch: DEBUG-v020]
2026-06-27 23:06:49 PLAN/S0683_quick-launch-panel-shade-tile.md spec-sweep Device-verified on S21+: QS shade tile renders on One UI, tap opens Quick Launch Panel over foreground app; tag removed; -> Verified [branch: DEBUG-v020]
2026-06-27 23:06:50 PLAN/S0637_stream-channel-shortcut.md spec-sweep Device-verified on S21+: overflow add-to-home fires, requestPinShortcut accepted by OS, tap-to-play + stale-channel path code-verified (auto pin-cell placement not drivable on One UI); tags removed; -> Verified [branch: DEBUG-v020]
2026-06-27 23:06:50 PLAN/S0700_stream-refresh-health-probe.md spec-sweep Device test on S21+: list-mode green/amber probe PASS; grid thumbnail capture FAIL (black frame, decoder releases pre-frame); tag removed; -> Partial (thumbnail rework follow-up) [branch: DEBUG-v020]
2026-06-27 23:31:50 PLAN/S0662_welcome-default-gestures.md spec-sweep Device-verified on S21+: default gesture set seeded on first run, Welcome enable-gestures + overlay grant work, UP swipe opens panel; RIGHT/DOWN routing reached but editor/toast manual (One UI projection selector); tags removed; -> Verified [branch: DEBUG-v020]
2026-06-27 23:31:50 PLAN/S0724_show-left-edge-gesture-strip.md spec-sweep Device-verified on S21+: strip-visibility toggle present + EN/RU/UK, DataStore flips ON/OFF, survives restart; literal 4px render manual (overlay excluded from screencap); tag removed; -> Verified [branch: DEBUG-v020]
2026-06-27 23:31:51 PLAN/S0680_gesture-crop-screenshot-share.md spec-sweep Device test on S21+: action assignable + auto-action fires, but crop frame never opens and share sheet absent; tag removed; -> Broken (crop-mode entry defect) [branch: DEBUG-v020]
2026-06-27 23:32:02 PLAN/S0753_camera-zoom-presets-slider-night.md spec-dev S0753 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v020]
2026-06-27 23:32:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/model/CameraRuntimeCapabilities.kt spec-dev S0753 P01: widen zoom presets 0.5-30x clamped to lens + guaranteed max; unit test [branch: DEBUG-v020]
2026-06-27 23:32:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0753 P02/P03/P04: linear zoom slider synced with presets+pinch; legibility styling; night-mode toggle wiring [branch: DEBUG-v020]
2026-06-27 23:32:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSessionManager.kt spec-dev S0753 P02/P04: linearZoom set/read; device-gated photo night mode via CameraX NIGHT extension [branch: DEBUG-v020]
2026-06-27 23:32:03 app_v2/src/main/res/values/colors.xml spec-dev S0753 P03: overlay controls ~70% opacity + strengthened outline/shadow legibility (portrait+landscape) [branch: DEBUG-v020]
2026-06-28 00:14:35 PLAN/S0613_standalone-document-text-print-send-to.md spec-sweep Device test on S21+: print wiring correct but PrintManager.print() throws Can-print-only-from-an-activity on real hardware; tags removed; -> Broken (print context defect, not emulator-only) [branch: DEBUG-v020]
2026-06-28 00:14:36 PLAN/S0679_draw-editor-crop-tool.md spec-sweep Device test on S21+: crop tool works from draw-editor UI (both hosts); ADR-4 undo-reverts-crop fails (undo disabled post-crop); tags removed; -> Partial [branch: DEBUG-v020]
2026-06-28 00:15:50 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Round-2 direct-device drain on RFCR110NBQJ (S21+): 12 tickets - 7 Verified (S0661/S0663/S0682/S0683/S0637/S0662/S0724), 2 Partial (S0700/S0679), 2 Broken (S0680/S0613), 1 still BlockNeedUserTest (S0568 widget-tap not automatable); all tag removals compile clean [branch: DEBUG-v020]
2026-06-28 00:27:19 PLAN/S0545_camera-capabilities-expansion.md spec-arc Archive S0545 (camera-capabilities-expansion) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:20 PLAN/S0637_stream-channel-shortcut.md spec-arc Archive S0637 (stream-channel-shortcut) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:21 PLAN/S0661_resource-overflow-home-screen-shortcut.md spec-arc Archive S0661 (resource-overflow-home-screen-shortcut) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:22 PLAN/S0662_welcome-default-gestures.md spec-arc Archive S0662 (welcome-default-gestures) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:23 PLAN/S0663_app-launch-panel-internal-routes.md spec-arc Archive S0663 (app-launch-panel-internal-routes) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:24 PLAN/S0682_app-launch-panel-relabel-icons.md spec-arc Archive S0682 (app-launch-panel-relabel-icons) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:25 PLAN/S0683_quick-launch-panel-shade-tile.md spec-arc Archive S0683 (quick-launch-panel-shade-tile) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:26 PLAN/S0724_show-left-edge-gesture-strip.md spec-arc Archive S0724 (show-left-edge-gesture-strip) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:27 PLAN/S0734_readability-refactors.md spec-arc Archive S0734 (readability-refactors) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:28 PLAN/S0741_command-panel-visibility-draw-gate-cross-host.md spec-arc Archive S0741 (Cross-host command-panel visibility vs draw/overlay gate) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:29 PLAN/S0747_prerelease-seed-media-not-mediastore-indexed.md spec-arc Archive S0747 (prerelease-seed-media-not-mediastore-indexed) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:29 PLAN/S0751_cleanup-detekt-drift-cloud-browse.md spec-arc Archive S0751 (cleanup-detekt-drift-cloud-browse) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:27:30 PLAN/S0752_build-vs-release-workflow.md spec-arc Archive S0752 (build-vs-release-workflow) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 00:59:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSessionManager.kt spec-dev S0753 r1/r2: multi-camera lens cycling; night exposure-compensation fallback; reference focal for equivalent zoom [branch: DEBUG-v020]
2026-06-28 00:59:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCapabilityProbe.kt spec-dev S0753 r1/r2: enumerate all cameras; exposure-compensation + focal-length equivalent-zoom multiplier [branch: DEBUG-v020]
2026-06-28 00:59:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0753 r1/r2: night-mode wiring; equivalent-zoom chip labels; active-lens label; translucent chips [branch: DEBUG-v020]
2026-06-28 00:59:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/OutlinedTextView.kt spec-dev S0753 r1: outlined mode-tab and lens-label text [branch: DEBUG-v020]
2026-06-28 00:59:04 app_v2/src/main/res/values/colors.xml spec-dev S0753 r2: control opacity 50% + translucent zoom chips [branch: DEBUG-v020]
2026-06-28 01:07:27 PLAN/S0753_camera-zoom-presets-slider-night.md spec-quiz S0753: recorded device-feedback decisions via quiz (landscape, macro, lens naming, slider zoom value, preset thinning) [branch: DEBUG-v020]
2026-06-28 01:23:35 PLAN/S0753_camera-zoom-presets-slider-night.md spec-dev S0753 device-feedback round 3 + quiz decisions; status -> BlockNeedUserTest [branch: DEBUG-v020]
2026-06-28 01:23:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/model/CameraRuntimeCapabilities.kt spec-dev S0753 r3: thinned presets (only lens min below 1x, 1/2/3/5/10..max); macro capability fields [branch: DEBUG-v020]
2026-06-28 01:23:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSessionManager.kt spec-dev S0753 r3: macro via Camera2 close-focus lock; landscape now recreates (configChanges trimmed) [branch: DEBUG-v020]
2026-06-28 01:23:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0753 r3: lens-name label (Ultra-wide/Wide/Tele/Front); live zoom value by slider; macro toggle wiring [branch: DEBUG-v020]
2026-06-28 01:23:35 app_v2/src/main/res/layout-land/activity_camera_capture.xml spec-dev S0753 r3: full landscape layout - shutter bottom-centre, presets+slider bottom-left, slider = preset-row width [branch: DEBUG-v020]
2026-06-28 01:23:36 app_v2/src/main/AndroidManifest.xml spec-dev S0753 r3: drop orientation configChanges so the camera applies the landscape layout on rotation [branch: DEBUG-v020]
2026-06-28 01:42:17 PLAN/S0735_unified-uistate-sealed.md S0735 Reconcile S0735: unified sealed UiState already implemented in working tree (BaseViewModel.createUiState; MainActivity resourceListUiState; BrowseObserverManager fileListUiState). Non-list screens (AddResource/Player/Welcome) explicitly deferred - loading-only overlays. fk green, no code change needed. Draft -> Implemented. [branch: DEBUG-v020]
2026-06-28 01:44:56 docs/DEV_OPS.md,docs/CODE_AUDIT_PROTOCOL.md,docs/ALL_FEATURES.jsonl,PLAN/S0714_code-audit-protocol-adoption.md,PLAN/S0721_audit-mechanical-gates-lint.md,PLAN/spec-catalog.jsonl S0714/S0721 Document listener-symmetry gate adoption, sync umbrella/spec status to In Progress, and record tooling inventory. [branch: DEBUG-v020]
2026-06-28 01:54:53 scripts/quality/assert-listener-symmetry.ps1 assert-listener-symmetry Implemented listener symmetry checking script and integrated into post-change.ps1 gate under S0721 [branch: DEBUG-v020]
2026-06-28 01:54:54 lint-rules/ lint-rules Created custom lint rules module with detectors for Activity logic, UI context leaks, unsafe Flow collection, player release, and main thread I/O checks under S0721 [branch: DEBUG-v020]
2026-06-28 01:54:54 app_v2/src/androidTest/java/com/sza/fastmediasorter/leak/LeakDetectionInstrumentationTest.kt LeakDetectionInstrumentationTest Implemented LeakDetectionInstrumentationTest using LeakCanary to fail on memory leaks under S0721 [branch: DEBUG-v020]
2026-06-28 02:26:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0753 r4: see-through half-size custom zoom pills; lens names; live zoom value; transparency 70% [branch: DEBUG-v020]
2026-06-28 02:26:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSessionManager.kt spec-dev S0753 r4: digital crop zoom to 30x (preview scale + JPEG crop) beyond optical 8x [branch: DEBUG-v020]
2026-06-28 02:26:10 app_v2/src/main/res/layout-land/activity_camera_capture.xml spec-dev S0753 r4: landscape - presets/slider bottom-left, shutter right-centre [branch: DEBUG-v020]
2026-06-28 02:34:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0753 closed by owner after on-device verification: remove x from preset labels; remove debug tag; status -> Verified [branch: DEBUG-v020]
2026-06-28 02:37:18 PLAN/S0754_camera-orientation-send-settings-dialog.md spec Add strategic spec S0754 - camera wave 2 (fixed orientation, send-to, settings dialog, presets polish) [branch: DEBUG-v020]
2026-06-28 02:39:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt PhotoVideoStandaloneActivity Fix S0680 crop-and-share auto-action editable-image race [branch: DEBUG-v020]
2026-06-28 02:50:24 PLAN/S0754_camera-orientation-send-settings-dialog.md spec-quiz S0754: resolved 3 open research items via quiz (settings = full pro-mode; send-to + orientation resolved by research) [branch: DEBUG-v020]
2026-06-28 03:00:20 PLAN/S0755_main-window-programs-panel-toggle.md spec-draft Add /spec-draft inbox ticket S0755 for optional main-window programs panel toggle [branch: DEBUG-v020]
2026-06-28 03:04:23 PLAN/S0754_camera-orientation-send-settings-dialog/INDEX.md spec-tech Tactical plan for S0754: 6 phases + 3 research artifacts (orientation, send-to, settings dialog) [branch: DEBUG-v020]
2026-06-28 03:04:23 PLAN/S0754_camera-orientation-send-settings-dialog.md spec-tech S0754 Status -> Tactical [branch: DEBUG-v020]
2026-06-28 03:07:15 PLAN/S0756_main-window-streams-panel-toggle.md spec-draft Add /spec-draft inbox ticket S0756 for optional main-window streams panel toggle [branch: DEBUG-v020]
2026-06-28 03:10:23 app_v2/src/main/res/menu/menu_streams.xml quick Streams toolbar: surface Add stream + Import list as two always-visible buttons (was ifRoom -> overflow menu); shared menu covers portrait + landscape [branch: DEBUG-v020]
2026-06-28 03:15:58 app_v2/src/main/res/layout/activity_streams.xml quick Streams: first focus parks on Filter button (focusableInTouchMode + requestFocus in all 3 layouts) + windowSoftInputMode=stateHidden, so soft keyboard no longer auto-opens on launch and covers short landscape screens [branch: DEBUG-v020]
2026-06-28 03:19:24 app_v2/src/main/res/layout/dialog_streams_filter.xml quick Streams filter dialog: media-kind toggle moved to top (dropped ‘Type’ heading + dead string); category/language now two tappable columns with chevron + accent value to show they open a picker [branch: DEBUG-v020]
2026-06-28 03:24:37 PLAN/S0757_quick-launch-panel-program-entry.md spec Scaffold strategic spec skeleton S0757 (quick-launch panel as a programs/scenarios list entry; related S0755) [branch: DEBUG-v020]
2026-06-28 03:26:58 PLAN/S0758_programs-scenarios-menu-order.md spec Scaffold strategic spec skeleton S0758 (reorder programs/scenarios in three-dots menu + panel; related S0755/S0757) [branch: DEBUG-v020]
2026-06-28 03:32:08 PLAN/S0759_exit-button-minimize-when-background-active.md spec-draft Add /spec-draft inbox ticket S0759 for exit button minimizing when background features are active [branch: DEBUG-v020]
2026-06-28 03:40:24 PLAN/S0760_centralize-font-swipe-resize.md spec-draft Add /spec-draft inbox ticket S0760 for centralized swipe font resizing improvements [branch: DEBUG-v020]
2026-06-28 03:44:44 PLAN/S0761_streams-country-metadata-filter-sort.md spec-draft Add /spec-draft inbox ticket S0761 for stream country metadata, filter, and sorting [branch: DEBUG-v020]
2026-06-28 04:01:05 PLAN/S0761_streams-country-metadata-filter-sort.md spec-all Pipeline BlockQuestions: S0761 - streams country metadata; research done (mirror-plan artifact), 3 owner decisions pending (scope/display/filter-layout) [branch: DEBUG-v020]
2026-06-28 04:05:46 PLAN/S0760_centralize-font-swipe-resize.md spec-all Pipeline BlockQuestions: S0760 - font swipe-resize; research done (2 duplicate engines found), cheap path ready, owner variant/centralization decision pending [branch: DEBUG-v020]
2026-06-28 04:09:10 PLAN/S0759_exit-button-minimize-when-background-active.md spec-all Pipeline BlockQuestions: S0759 - exit-button minimize; research done (exit path + bg-feature inventory + moveTaskToBack), owner product/UX rule pending [branch: DEBUG-v020]
2026-06-28 04:20:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-all S0758: reorder main-window programs dropdown menu to owner canonical order (streams / [quick-launch slot] / camera / voice / calculator / camera-OCR / link-download / mini-game); camera before voice in quick-capture manager [branch: DEBUG-v020]
2026-06-28 04:28:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-all S0758 Verified: programs three-dots menu reorder to owner canonical order; camera before voice; order keys in MENU_ORDER_* constants [branch: DEBUG-v020]
2026-06-28 04:42:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-all S0757 Verified: Quick Launch Panel as programs-menu entry (slot 2), opens AppLaunchPanelActivity; device-verified on RFCR110NBQJ [branch: DEBUG-v020]
2026-06-28 04:46:33 PLAN/S0756_main-window-streams-panel-toggle.md spec-all Pipeline BlockQuestions: S0756 - main-window streams panel; pin/favicon infra confirmed, 4 owner design decisions + S0755 dep pending [branch: DEBUG-v020]
2026-06-28 04:50:29 PLAN/S0755_main-window-programs-panel-toggle.md spec-all Pipeline BlockQuestions: S0755 - main-window programs panel; programs source=menu confirmed, owner design decisions + S0757 button-visibility reconcile pending [branch: DEBUG-v020]
2026-06-28 04:56:01 PLAN/spec-catalog.jsonl spec-next Session: 7 processed (S0758/S0757 Verified+device-tested; S0761/S0760/S0759/S0756/S0755 BlockQuestions); S0754 skip-cached (large camera, focused session); S0762 parked (preflight tooling); S0613/S0679/S0700 + 9 BlockNeedUserTest not reached (context budget) [branch: DEBUG-v020]
2026-06-28 12:35:03 PLAN/S0755_main-window-programs-panel-toggle.md spec-quiz S0755: BlockQuestions -> Approved via quiz (3 questions) [branch: DEBUG-v020]
2026-06-28 12:38:43 PLAN/S0756_main-window-streams-panel-toggle.md spec-quiz S0756: BlockQuestions -> Draft via quiz (4 questions: Q2/Q4/Q5/Q6 resolved) [branch: DEBUG-v020]
2026-06-28 12:44:59 PLAN/S0760_centralize-font-swipe-resize.md spec-quiz S0760: BlockQuestions -> Draft via quiz (4 questions: Q1/Q2/Q3/Q4 resolved) [branch: DEBUG-v020]
2026-06-28 12:46:52 PLAN/S0761_streams-country-metadata-filter-sort.md spec-quiz S0761: BlockQuestions -> Approved via quiz (3 questions); v1=catalog-only, display=flag+code, filter=full-width 2nd row [branch: DEBUG-v020]
2026-06-28 12:50:14 PLAN/S0759_exit-button-minimize-when-background-active.md spec-quiz S0759: BlockQuestions -> Approved via quiz (4 questions) [branch: DEBUG-v020]
2026-06-28 12:59:12 PLAN/S0763_video-control-3d-section-gate.md spec Scaffold strategic spec skeleton S0763 [branch: DEBUG-v020]
2026-06-28 12:59:12 PLAN/S0764_video-control-section-column-layout.md spec Scaffold strategic spec skeleton S0764 [branch: DEBUG-v020]
2026-06-28 13:29:12 PLAN/S0765_bugfix-camera-photo-exif-metadata.md spec Scaffold strategic spec skeleton S0765 [branch: DEBUG-v020]
2026-06-28 13:36:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlaybackControlDialogFragment.kt playback-control 3D section gate S0763: gate the playback control dialog 3D/VR stereo section on the 3D-VR master toggle (AppSettings.disable3dVr) via new PlayerHostCapabilities.is3dVrEnabled, wired in all video player hosts [branch: DEBUG-v020]
2026-06-28 13:54:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSessionManager.kt camera digital-zoom EXIF preservation S0765: preserve EXIF (orientation, datetime, GPS, camera params) across the digital-zoom crop re-encode in CameraCaptureSessionManager - zoom shots no longer lose rotation/time/place [branch: DEBUG-v020]
2026-06-28 14:10:58 app_v2/src/main/res/layout/dialog_playback_control.xml playback-control portrait 3-column layout S0764: restructure portrait slider sections (volume/speed/brightness/hue) into a buttons column + outer-edge vertical slider so presets stack instead of overflowing [branch: DEBUG-v020]
2026-06-28 14:24:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainExitButtonManager.kt exit-button minimize when background active S0759: top-left exit button minimizes (moveTaskToBack) when any foreground service or edge-gestures overlay is active, fully closes otherwise; long-press always full-exits with toast+2s. New MainExitButtonManager, MainActivity wiring, ScheduledOperationsWorker.isRunning signal [branch: DEBUG-v020]
2026-06-28 14:30:08 PLAN/spec-catalog.jsonl spec-next Session: 4 implemented (S0763,S0765,S0764,S0759 -> BlockNeedUserTest), 3 parked (S0766,S0767,S0768), 1 human-gated skip (S0766). Builds+gates green; device verification pending. [branch: DEBUG-v020]
2026-06-28 15:03:40 app_v2/src/main/java/com/sza/fastmediasorter/worker/WorkManagerScheduler.kt spec-all S0768: shared sched_op tag on all scheduled-op work requests so cancelAllScheduledOperations actually cancels them [branch: DEBUG-v020]
2026-06-28 15:32:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-all S0761: stream country metadata - mirror language end-to-end (entity+Migration36To37, import, list chip, filter 3rd facet, COUNTRY sort, session persist) [branch: DEBUG-v020]
2026-06-28 15:41:57 PLAN/spec-catalog.jsonl spec-next Session (resumed): 2 implemented -> BlockNeedUserTest (S0768 sched-ops cancel-all tag fix; S0761 stream country metadata - Room 36->37 migration, filter+sort+list chip, 21 files via delegated impl). Builds+tests+gates green (my files; residual detekt = unrelated S0754 WIP). Loop PAUSED (impl backlog not exhausted). [branch: DEBUG-v020]
2026-06-28 15:52:27 PLAN/S0767_camera-crop-executor-leak.md spec-all Compact spec: S0767 camera crop executor leak [branch: DEBUG-v020]
2026-06-28 15:54:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSessionManager.kt spec-all S0767: release crop executor on unbind (lazy + orderly shutdown) [branch: DEBUG-v020]
2026-06-28 16:26:15 scripts/spec_catalog/spec-next-preflight.ps1 spec-next preflight Harden S0762 exclude normalization and research-heavy detection [branch: DEBUG-v020]
2026-06-28 16:32:00 PLAN/S0766_camera-photo-gps-geotag.md spec-all Strategic spec filled + approved: S0766 camera GPS geotag [branch: DEBUG-v020]
2026-06-28 16:32:10 app_v2/build.gradle.kts app_v2 build file Add kotlinx-coroutines-test dependency to androidTestImplementation [branch: DEBUG-v020]
2026-06-28 16:32:15 app_v2/src/androidTest/java/com/sza/fastmediasorter/data/link/GracefulDegradationTest.kt GracefulDegradationTest Rename test methods to camelCase and remove unused imports [branch: DEBUG-v020]
2026-06-28 16:34:32 app_v2/src/androidTest/java/com/sza/fastmediasorter/data/link/GracefulDegradationTest.kt GracefulDegradationTest Rename test methods to camelCase and remove unused imports [branch: DEBUG-v020]
2026-06-28 16:38:45 PLAN/S0766_camera-photo-gps-geotag/INDEX.md spec-all Tactical plan authored: S0766 camera GPS geotag (5 phases) [branch: DEBUG-v020]
2026-06-28 16:42:41 PLAN/S0714_code-audit-protocol-adoption.md spec-arc Archive S0714 (code-audit-protocol-adoption) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 16:42:42 PLAN/S0721_audit-mechanical-gates-lint.md spec-arc Archive S0721 (audit-mechanical-gates-lint) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 16:42:44 PLAN/S0735_unified-uistate-sealed.md spec-arc Archive S0735 (unified-uistate-sealed) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 16:42:45 PLAN/S0753_camera-zoom-presets-slider-night.md spec-arc Archive S0753 (camera-zoom-presets-slider-night) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 16:42:46 PLAN/S0757_quick-launch-panel-program-entry.md spec-arc Archive S0757 (quick-launch-panel-program-entry) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 16:42:47 PLAN/S0758_programs-scenarios-menu-order.md spec-arc Archive S0758 (programs-scenarios-menu-order) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 16:42:49 PLAN/S0762_spec-next-preflight-robustness.md spec-arc Archive S0762 (spec-next-preflight-robustness) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 16:42:50 PLAN/S0767_camera-crop-executor-leak.md spec-arc Archive S0767 (camera-crop-executor-leak) -> temp/done/ [branch: DEBUG-v020]
2026-06-28 16:43:24 app_v2/build.gradle.kts app_v2 build file Add kotlinx-coroutines-test dependency to androidTestImplementation [branch: DEBUG-v020]
2026-06-28 16:44:46 app_v2/build.gradle.kts app_v2 build file Add kotlinx-coroutines-test dependency to androidTestImplementation [branch: DEBUG-v020]
2026-06-28 16:46:53 app_v2/build.gradle.kts app_v2 build file Add kotlinx-coroutines-test dependency to androidTestImplementation [branch: DEBUG-v020]
2026-06-28 16:54:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-all S0766: opt-in camera photo GPS geotag - host reads setting, warms LocationManager while camera open, stamps freshest fix into CameraX metadata at shutter; manifest location permissions + non-required GPS feature [branch: DEBUG-v020]
2026-06-28 16:54:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt spec-all S0766: geotag opt-in toggle in Operations>Camera with at-enable location consent; settings persistence + docs regenerated; strings EN/RU/UK [branch: DEBUG-v020]
2026-06-28 17:41:59 PLAN/S0769_camera-landscape-top-right-overlap.md spec Scaffold strategic spec skeleton S0769 [branch: DEBUG-v020]
2026-06-28 17:58:48 PLAN/S0770_programs-streams-panel-overflow-menu.md spec Scaffold strategic spec skeleton S0770 [branch: DEBUG-v020]
2026-06-28 18:06:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainProgramsPanelManager.kt S0755 Main-window programs panel: settings toggle (Operations) + horizontal panel mirroring the programs three-dots menu (icons portrait / icons+labels landscape, overflow); hides three-dots button while shown [branch: DEBUG-v020]
2026-06-28 18:06:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainStreamsPanelManager.kt S0756 Main-window streams panel: settings toggle (Media/Streams) + horizontal panel with Streams entry button and pinned channels (favicon/short name by width, horizontal scroll); channel tap plays via StreamsActivity; dedups Streams item from programs panel [branch: DEBUG-v020]
2026-06-28 18:29:46 PLAN/S0773_vr-cinema-program-separate-player.md spec-draft Add /spec-draft inbox ticket S0773 for VR cinema as a separate immersive player [branch: DEBUG-v020]
2026-06-28 18:31:10 PLAN/S0773_vr-cinema-program-separate-player.md spec-draft Extend S0773 inbox with resource-level VR cinema entry and immersive browse/HUD scope [branch: DEBUG-v020]
2026-06-28 18:34:17 app_v2/src/main/res/layout-land/activity_camera_capture.xml S0769 Camera capture landscape: bound top bar + recording timer right edge to action bar start to stop top-right overlap with gallery thumbnail [branch: DEBUG-v020]
2026-06-28 18:40:35 PLAN/S0774_programs-screen-recording-action.md S0774 Added draft spec for screen recording action in Programs block with output resource setting capture [branch: DEBUG-v020]
2026-06-28 18:45:45 PLAN/S0772_bugfix-vr-7k-video-playback-oom-crash.md spec-all Root-cause research: OOM from unbounded heap byte[] buffer (prioritizeTimeOverSize + no targetBufferBytes); impl deferred to device session [branch: DEBUG-v020]
2026-06-28 18:55:54 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-all S0771: route immersive parseFilenameConfig through StereoDetector (SSOT) so VR180 SBS (_3dh) renders stereo, not mono [branch: DEBUG-v020]
2026-06-28 19:06:08 PLAN/spec-catalog.jsonl spec-next Session: 2 processed (S0771 fixed->BlockNeedUserTest, S0772 researched->deferred), remaining backlog owner/device-gated [branch: DEBUG-v020]
2026-06-28 20:47:37 PLAN/S0774_programs-screen-recording-action.md spec-quiz S0774: Draft -> Approved via quiz (3 questions: audio=mic, stop=notification+in-app, scope=whole-screen-background) [branch: DEBUG-v020]
2026-06-28 20:59:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FontResizeController.kt spec-all S0760: centralize font-resize step in shared FontResizeController (proportional per-engine step), wire TextViewer+Epub viewers, remove laggy per-step toasts + dead epub_font_size string [branch: DEBUG-v020]
2026-06-28 21:02:34 PLAN/S0760_centralize-font-swipe-resize.md spec-all S0760 Implemented: shared FontResizeController (proportional step), TextViewer+Epub wired, per-step toasts removed, epub_font_size string dropped [branch: DEBUG-v020]
2026-06-28 21:53:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PrefetchLoadControlFactory.kt S0772 VR 7K video OOM hardening Bound heap-resident ExoPlayer video buffer on low-heap (<=512MB) devices via explicit heapMax-derived setTargetBufferBytes + prioritizeTimeOverSizeThresholds(false); prevents OutOfMemoryError on Quest 3 playing high-bitrate 7K HEVC. Unit-tested pure cap resolver. [branch: DEBUG-v020]
2026-06-28 22:15:57 PLAN/S0775_publish-app-samsung-store.md S0775 Added draft spec for publishing the app in Samsung store [branch: DEBUG-v020]
2026-06-28 22:29:59 PLAN/S0770_programs-streams-panel-overflow-menu.md spec-all Strategic spec approved: S0770 per-item overflow menu for programs/streams panels [branch: DEBUG-v020]
2026-06-28 22:39:01 PLAN/S0770_programs-streams-panel-overflow-menu/INDEX.md spec-all Tactical plan: S0770 per-item overflow menu (6 phases) [branch: DEBUG-v020]
2026-06-28 23:13:45 PLAN/S0770_programs-streams-panel-overflow-menu/INDEX.md spec-all S0770 implemented: per-item context menu (Open / Open in new window / Remove) on main-window programs + streams panels; added unpin DAO/repo/use-case + PanelItemContextMenu; status BlockNeedUserTest [branch: DEBUG-v020]
2026-06-28 23:25:12 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/print/PrintDispatchActivity.kt S0613 Routed standalone PDF/text print through a transparent dispatch Activity to avoid BaseActivity locale-wrapped PrintManager context, preserved share-for-print fallback, and reinserted BlockNeedUserTest probes on standalone send-to entry points. [branch: DEBUG-v020]
2026-06-28 23:44:29 PLAN/S0774_programs-screen-recording-action/INDEX.md spec-tech Create tactical plan for S0774 (screen video recording, 8 phases) [branch: DEBUG-v020]
2026-06-28 23:49:51 app_v2/src/main/AndroidManifest.xml CameraCaptureActivity Locked the in-app camera host to portrait so controls stay physically fixed while overlay icons rotate. [branch: DEBUG-v020]
2026-06-28 23:49:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt CameraCaptureActivity Added the save-destination label, Send To action, countdown/grid rendering, fixed-orientation overlay rotation and camera settings dialog integration. [branch: DEBUG-v020]
2026-06-28 23:49:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraSettingsDialogFragment.kt CameraSettingsDialogFragment Added the capability-driven camera settings dialog and balanced slider listener cleanup for the listener-symmetry gate. [branch: DEBUG-v020]
2026-06-28 23:49:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSessionManager.kt CameraCaptureSessionManager Added HDR, exposure, white balance, manual sensor, aspect ratio, resolution and target-rotation handling with CameraX rebind support. [branch: DEBUG-v020]
2026-06-28 23:49:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCapabilityProbe.kt CameraCapabilityProbe Expanded runtime camera capability probing to expose manual sensor, white balance, HDR and output resolution metadata. [branch: DEBUG-v020]
2026-06-28 23:49:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureFlowManager.kt CameraCaptureFlowManager Stored UI-only camera state for the self-timer and grid overlay so the activity and settings dialog stay in sync. [branch: DEBUG-v020]
2026-06-28 23:49:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/model/CameraRuntimeCapabilities.kt CameraRuntimeCapabilities Extended camera capability snapshots with manual controls, aspect ratios, resolutions and updated zoom preset curation. [branch: DEBUG-v020]
2026-06-28 23:49:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/GridOverlayView.kt GridOverlayView Added a reusable 3x3 camera composition grid overlay for the preview. [branch: DEBUG-v020]
2026-06-28 23:49:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraOrientationManager.kt CameraOrientationManager Added orientation sensing that rotates overlay chrome and updates CameraX target rotation without moving the controls. [branch: DEBUG-v020]
2026-06-28 23:49:53 app_v2/src/main/res/layout/activity_camera_capture.xml activity_camera_capture Added the save-destination label, Send To button, settings button, countdown overlay and composition grid to the camera screen layout. [branch: DEBUG-v020]
2026-06-28 23:49:54 app_v2/src/main/res/layout/dialog_camera_settings.xml dialog_camera_settings Added the camera settings dialog layout with styled confirm/cancel actions and capability-gated controls. [branch: DEBUG-v020]
2026-06-28 23:49:54 app_v2/src/main/res/values/strings.xml camera settings strings Added localized camera destination, Send To and settings labels for the new camera UI. [branch: DEBUG-v020]
2026-06-28 23:49:54 app_v2/src/test/java/com/sza/fastmediasorter/ui/cameracapture/model/CameraRuntimeCapabilitiesTest.kt CameraRuntimeCapabilitiesTest Updated zoom preset expectations after removing the 2x preset from curated camera zoom buttons. [branch: DEBUG-v020]
2026-06-28 23:49:54 docs/ALL_FEATURES.jsonl ALL_FEATURES Registered the fixed-controls camera, Send To and settings dialog capability in the developer feature inventory. [branch: DEBUG-v020]
2026-06-29 00:29:51 PLAN/S0774_programs-screen-recording-action.md spec-dev S0774 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v020]
2026-06-29 00:29:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainProgramsMenuCoordinator.kt spec-dev S0774: extract programs-menu orchestration + register screen-recording scenario [branch: DEBUG-v020]
2026-06-29 00:29:51 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0774: screen-recording settings fields [branch: DEBUG-v020]
2026-06-29 00:29:51 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt spec-dev S0774: screen video recording foreground service (MediaProjection + MediaRecorder) [branch: DEBUG-v020]
2026-06-29 00:29:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainScreenRecordingManager.kt spec-dev S0774: in-app recording card + permission flow [branch: DEBUG-v020]
2026-06-29 00:29:51 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-dev S0774: screen-recording settings rows (portrait + landscape) [branch: DEBUG-v020]
2026-06-29 01:06:53 PLAN/S0776_settings-welcome-context-icons.md spec-draft Scaffold strategic spec skeleton S0776 and capture raw Settings/Welcome icon placement request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 01:14:52 PLAN/S0777_main-streams-panel-direct-audio-playback.md spec-draft Scaffold strategic spec skeleton S0777 and capture raw main-streams-panel direct audio playback request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 01:19:36 PLAN/S0778_streams-now-playing-panel-under-system-bars.md spec-draft Scaffold strategic spec skeleton S0778 and capture raw streams now-playing panel system-bars accessibility request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 01:26:27 PLAN/S0779_main-streams-panel-compact-header-menu.md spec-draft Scaffold strategic spec skeleton S0779 and capture raw main streams panel compact header and long-press menu request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 01:31:23 PLAN/S0780_main-panels-long-press-configure-action.md spec-draft Scaffold strategic spec skeleton S0780 and capture raw main panels long-press configure action request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 01:42:04 PLAN/S0781_main-resource-type-filter-panel-collapse.md spec-draft Scaffold strategic spec skeleton S0781 and capture raw main resource-type filter panel collapse request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 01:53:05 PLAN/S0782_streams-button-hide-panel-action.md spec-draft Scaffold strategic spec skeleton S0782 and capture raw streams button hide-panel action request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:02:11 PLAN/S0783_streams-favorites-channel-entry.md spec-draft Scaffold strategic spec skeleton S0783 and capture raw streams favorites channel entry request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:07:32 PLAN/S0761_streams-country-metadata-filter-sort.md spec-arc Archive S0761 (streams-country-metadata-filter-sort) -> temp/done/. [branch: DEBUG-v020]
2026-06-29 02:07:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt S0761 Removed the archived S0761 BlockNeedUserTest probe from streams facets computation. [branch: DEBUG-v020]
2026-06-29 02:07:32 PLAN/S0784_video-stream-last-frame-thumbnail-persistence.md spec-draft Scaffold strategic spec skeleton S0784 and capture raw video stream last-frame thumbnail persistence request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:10:03 PLAN/S0785_streams-list-country-flag-fallback-icon.md spec-draft Scaffold strategic spec skeleton S0785 and capture raw streams list country-flag fallback icon request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:11:18 app_v2/src/vr/java/com/sza/fastmediasorter/ui/settings/vr/VrSettingsBlockFragment.kt cleanup Remove leftover S0606 Quest-only geometry probe logging before archiving the VR landscape scroll ticket. [branch: DEBUG-v020]
2026-06-29 02:11:31 PLAN/S0606_vr-settings-landscape-scroll.md spec-arc Archive S0606 (3D/VR settings group not scrollable when expanded in landscape) -> temp/done/ [branch: DEBUG-v020]
2026-06-29 02:13:04 PLAN/S0613_standalone-document-text-print-send-to.md spec-update Record the 2026-06-29 owner retest for the standalone PDF host and mark S0613 Broken with the newly reported command-surface regressions. [branch: DEBUG-v020]
2026-06-29 02:13:52 PLAN/S0568_camera-launch-widget.md spec-arc Archive S0568 (camera-launch-widget) -> temp/done/ [branch: DEBUG-v020]
2026-06-29 02:14:54 PLAN/S0672_standard-edge-gesture-play-compliance.md spec-arc Archive S0672 (standard-edge-gesture-play-compliance) -> temp/done/ [branch: DEBUG-v020]
2026-06-29 02:21:13 PLAN/S0786_geolocation-permission-photo-video-metadata.md spec-draft Scaffold strategic spec skeleton S0786 and capture raw geolocation-permission request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:23:01 PLAN/S0787_settings-list-picker-usability.md spec-draft Scaffold strategic spec skeleton S0787 and capture raw list-picker usability request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:24:58 PLAN/S0788_left-edge-gesture-launch-camera-action.md spec-draft Scaffold strategic spec skeleton S0788 and capture raw edge-gesture camera-action request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:26:07 PLAN/S0789_left-edge-gesture-silent-screenshot-rename.md spec-draft Scaffold strategic spec skeleton S0789 and capture raw silent-screenshot rename request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:27:07 PLAN/S0790_left-edge-gesture-take-photo-action.md spec-draft Scaffold strategic spec skeleton S0790 and capture raw edge-gesture take-photo request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:28:08 PLAN/S0791_left-edge-gesture-take-photo-send-to-action.md spec-draft Scaffold strategic spec skeleton S0791 and capture raw edge-gesture take-photo-send-to request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:29:07 PLAN/S0792_left-edge-gesture-take-photo-edit-action.md spec-draft Scaffold strategic spec skeleton S0792 and capture raw edge-gesture take-photo-edit request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:32:10 PLAN/S0793_left-edge-gesture-action-labels-screenshot-camera.md spec-draft Scaffold strategic spec skeleton S0793 and capture raw screenshot/camera gesture-label request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:33:49 PLAN/S0794_left-edge-gesture-take-photo-ocr-translate-action.md spec-draft Scaffold strategic spec skeleton S0794 and capture raw edge-gesture take-photo-OCR-translate request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:34:53 PLAN/S0795_left-edge-gesture-start-video-recording-action.md spec-draft Scaffold strategic spec skeleton S0795 and capture raw edge-gesture start-video-recording request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:35:55 PLAN/S0796_left-edge-gesture-start-audio-recording-action.md spec-draft Scaffold strategic spec skeleton S0796 and capture raw edge-gesture start-audio-recording request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:36:55 PLAN/S0797_left-edge-gesture-start-screen-recording-action.md spec-draft Scaffold strategic spec skeleton S0797 and capture raw edge-gesture start-screen-recording request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:37:58 PLAN/S0798_left-edge-gesture-start-screen-video-recording-action.md spec-draft Scaffold strategic spec skeleton S0798 and capture raw edge-gesture start-screen-video-recording request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:42:52 PLAN/S0799_resource-vs-folder-terminology-audit.md spec-draft Scaffold strategic spec skeleton S0799 and capture raw resource-vs-folder terminology request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:44:02 PLAN/S0800_add-resource-remove-early-icon-picker.md spec-draft Scaffold strategic spec skeleton S0800 and capture raw add-resource icon-picker removal request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 02:51:50 PLAN/S0801_bugfix-camera-capture-resume-crash.md spec Add strategic spec S0801 for camera capture resume crash [branch: DEBUG-v020]
2026-06-29 02:51:50 PLAN/S0802_handled-network-failure-log-noise.md spec Add strategic spec S0802 for handled network failure log noise [branch: DEBUG-v020]
2026-06-29 02:58:19 PLAN/S0803_mini-game-level-field-scaling.md spec-draft Scaffold strategic spec skeleton S0803 and capture raw mini-game level field scaling request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 03:03:43 PLAN/S0804_mini-game-modes-classic-kryvavitsa.md spec-draft Scaffold strategic spec skeleton S0804 and capture raw mini-game modes request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 03:08:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt S0801 Fix camera-capture resume crash: route orientationManager.enable() through BaseActivity onResumeWithViews() (post deferred setup) instead of raw onResume; guard onPause/onDestroy against early lifecycle before setupViews [branch: DEBUG-v020]
2026-06-29 03:10:16 PLAN/S0805_stream-catalog-liveness-filter.md spec Scaffold strategic spec skeleton S0805 [branch: DEBUG-v020]
2026-06-29 03:12:34 PLAN/S0806_file-browser-menu-app-settings-entry.md spec Scaffold strategic spec skeleton S0806 [branch: DEBUG-v020]
2026-06-29 03:20:05 PLAN/S0807_main-programs-panel-header-menu.md spec Scaffold strategic spec skeleton S0807 [branch: DEBUG-v020]
2026-06-29 03:21:23 PLAN/S0808_streams-button-collapse-panel-action.md spec Scaffold strategic spec skeleton S0808 [branch: DEBUG-v020]
2026-06-29 03:24:18 PLAN/S0809_main-collapsed-panels-single-row-grouping.md spec-draft Add /spec-draft inbox ticket S0809 for grouped collapsed main panels [branch: DEBUG-v020]
2026-06-29 03:34:40 PLAN/S0810_main-panels-long-press-menu-title-labels.md spec-draft Add /spec-draft inbox ticket S0810 for long-press menu title labels [branch: DEBUG-v020]
2026-06-29 03:36:12 PLAN/S0811_camera-save-destination-short-label.md spec-draft Add /spec-draft inbox ticket S0811 for shorter camera save destination label [branch: DEBUG-v020]
2026-06-29 03:38:20 PLAN/S0812_camera-scenario-context-label.md spec-draft Add /spec-draft inbox ticket S0812 for camera scenario context label [branch: DEBUG-v020]
2026-06-29 03:41:22 PLAN/S0813_redesign-camera-settings-dialog.md spec Add strategic spec S0813 for camera settings dialog redesign [branch: DEBUG-v020]
2026-06-29 03:55:50 PLAN/S0814_sync-docs-site-from-tickets.md spec Scaffold strategic spec skeleton S0814 [branch: DEBUG-v020]
2026-06-29 03:57:25 PLAN/S0815_section-icons-in-docs-and-site.md spec Scaffold strategic spec skeleton S0815 [branch: DEBUG-v020]
2026-06-29 12:29:54 PLAN/S0816_agent-session-cost-optimization.md spec-draft Add /spec-draft strategic skeleton S0816 for agent session cost optimization [branch: DEBUG-v020]
2026-06-29 13:16:39 PLAN/S0817_browse-select-all-scroll-lock.md spec-draft Scaffold strategic spec skeleton S0817 and capture raw browse select-all scroll-lock report verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 13:19:00 PLAN/S0818_browse-file-operations-background-mode.md spec-draft Scaffold strategic spec skeleton S0818 and capture raw browse file-operations background-mode request verbatim in section 0. [branch: DEBUG-v020]
2026-06-29 22:24:55 PLAN/S0802_handled-network-failure-log-noise/research/01__handled-outcome-severity-boundary.md spec-next S0802 research: severity boundary resolved [branch: DEBUG-v020]
2026-06-29 22:24:55 PLAN/S0802_handled-network-failure-log-noise/research/02__single-line-vs-summary-counters.md spec-next S0802 research: single-line logging decision [branch: DEBUG-v020]
2026-06-29 22:24:55 PLAN/S0802_handled-network-failure-log-noise.md spec-tech S0802 strategic spec advanced to Tactical [branch: DEBUG-v020]
2026-06-29 22:24:55 PLAN/S0802_handled-network-failure-log-noise/INDEX.md spec-tech Create tactical plan for S0802 [branch: DEBUG-v020]
2026-06-29 22:24:56 PLAN/S0802_handled-network-failure-log-noise/PHASE_01__log-policy-foundations.md spec-tech S0802 Phase 01: log-policy-foundations [branch: DEBUG-v020]
2026-06-29 22:24:56 PLAN/S0802_handled-network-failure-log-noise/PHASE_02__sync-path-normalization.md spec-tech S0802 Phase 02: sync-path-normalization [branch: DEBUG-v020]
2026-06-29 22:24:56 PLAN/S0802_handled-network-failure-log-noise/PHASE_03__docs-catalog-cleanup.md spec-tech S0802 Phase 03: docs-catalog-cleanup [branch: DEBUG-v020]
2026-06-29 22:28:42 app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorClassifier.kt NetworkErrorClassifier add silent classification entrypoint for handled network log normalization [branch: DEBUG-v020]
2026-06-29 22:32:15 app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/HandledNetworkOutcomeLogger.kt HandledNetworkOutcomeLogger normalize handled network sync outcome logging [branch: DEBUG-v020]
2026-06-29 22:36:29 PLAN/S0802_handled-network-failure-log-noise.md spec-dev S0802 implemented; strategic metadata synced [branch: DEBUG-v020]
2026-06-29 22:36:29 PLAN/S0802_handled-network-failure-log-noise/INDEX.md spec-dev S0802 tactical index marked done [branch: DEBUG-v020]
2026-06-29 22:36:29 PLAN/S0802_handled-network-failure-log-noise/PHASE_01__log-policy-foundations.md spec-dev S0802 Phase 01 marked done [branch: DEBUG-v020]
2026-06-29 22:36:29 PLAN/S0802_handled-network-failure-log-noise/PHASE_02__sync-path-normalization.md spec-dev S0802 Phase 02 marked done [branch: DEBUG-v020]
2026-06-29 22:36:29 PLAN/S0802_handled-network-failure-log-noise/PHASE_03__docs-catalog-cleanup.md spec-dev S0802 Phase 03 marked done [branch: DEBUG-v020]
2026-06-29 22:36:29 app_v2/src/main/java/com/sza/fastmediasorter/worker/NetworkFilesSyncWorker.kt spec-next route handled sync failures through normalized logger [branch: DEBUG-v020]
2026-06-29 22:36:29 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SyncNetworkResourcesUseCase.kt spec-next route manual sync failures through normalized logger [branch: DEBUG-v020]
2026-06-29 22:36:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt quality-gate remove stale S0613 debug probe [branch: DEBUG-v020]
2026-06-29 22:36:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt quality-gate remove stale S0613 debug probe [branch: DEBUG-v020]
2026-06-29 22:36:29 app_v2/src/main/java/com/sza/fastmediasorter/widget/CameraLaunchWidgetManager.kt quality-gate remove stale S0568 debug probe [branch: DEBUG-v020]
2026-06-29 22:36:29 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/OverlayHostService.kt quality-gate remove stale S0672 debug probe [branch: DEBUG-v020]
2026-06-29 22:36:29 app_v2/src/standardEdgeTile/java/com/sza/fastmediasorter/screencapture/ScreenshotGestureTileService.kt quality-gate remove stale S0672 debug probe [branch: DEBUG-v020]
2026-06-29 22:46:10 PLAN/S0802_handled-network-failure-log-noise.md spec-check Audit S0802 -> Verified; PASS/WARN/FAIL 13/0/0 [branch: DEBUG-v020]
2026-06-29 22:46:10 PLAN/S0802_handled-network-failure-log-noise/INDEX.md spec-check Mark S0802 tactical completion gate verified [branch: DEBUG-v020]
2026-06-29 22:46:10 PLAN/S0802_handled-network-failure-log-noise/PHASE_02__sync-path-normalization.md spec-check Sync S0802 phase-02 prerequisite checklist [branch: DEBUG-v020]
2026-06-29 22:46:10 PLAN/S0802_handled-network-failure-log-noise/PHASE_03__docs-catalog-cleanup.md spec-check Sync S0802 phase-03 prerequisite checklist [branch: DEBUG-v020]
2026-06-29 22:50:22 PLAN/S0818_browse-file-operations-background-mode.md spec-all Promote S0818 draft to Approved with background-mode strategic contract [branch: DEBUG-v020]
2026-06-29 22:51:03 PLAN/spec-catalog.jsonl spec-next Session: 2 processed (S0802 Verified, S0818 Draft->Approved), 1 verified, 0 blocked; loop paused at clean boundary before S0817 draft backlog triage [branch: DEBUG-v020]
2026-06-29 23:13:24 PLAN/S0818_browse-file-operations-background-mode/INDEX.md spec-tech Create tactical plan for S0818 [branch: DEBUG-v020]
2026-06-29 23:13:24 PLAN/S0818_browse-file-operations-background-mode/PHASE_01__browse-transfer-contract.md spec-tech Phase 01: browse-transfer-contract [branch: DEBUG-v020]
2026-06-29 23:13:24 PLAN/S0818_browse-file-operations-background-mode/PHASE_02__browse-progress-reattach-ui.md spec-tech Phase 02: browse-progress-reattach-ui [branch: DEBUG-v020]
2026-06-29 23:13:24 PLAN/S0818_browse-file-operations-background-mode/PHASE_03__result-return-and-copy.md spec-tech Phase 03: result-return-and-copy [branch: DEBUG-v020]
2026-06-29 23:13:24 PLAN/S0818_browse-file-operations-background-mode/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v020]
2026-06-29 23:13:24 PLAN/S0818_browse-file-operations-background-mode.md spec-tech Status -> Tactical [branch: DEBUG-v020]
2026-06-29 23:48:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/transfer/BrowseFileTransferCoordinator.kt S0818 background transfer Added a WorkManager-backed browse copy/move contract with persisted requests, notification progress, terminal replay, and single-active-transfer coordination. [branch: DEBUG-v020]
2026-06-29 23:48:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOperationsManager.kt S0818 browse reattach UI Browse copy/move now enqueues background transfers, reattaches the progress dialog, handles terminal outcomes, and carries the BlockNeedUserTest probe. [branch: DEBUG-v020]
2026-06-29 23:48:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileOperationProgressDialog.kt S0818 dialog and notification UX Added the Background action, destination handoff path, landscape-parity layout updates, and localized browse-transfer notification strings. [branch: DEBUG-v020]
2026-06-29 23:48:03 docs/ALL_FEATURES.jsonl S0818 docs Recorded the browse background-transfer capability in the feature inventory and synced the public FEATURES docs in EN/RU/UK. [branch: DEBUG-v020]
2026-06-29 23:48:03 PLAN/S0818_browse-file-operations-background-mode/INDEX.md S0818 spec bookkeeping Marked all tactical phases done, aligned the tactical notes with the implemented symbols, and advanced S0818 to BlockNeedUserTest with a device-test note. [branch: DEBUG-v020]
2026-06-29 23:59:45 PLAN/S0819_tv-dpad-focus-visibility.md spec Scaffold strategic spec skeleton S0819 [branch: DEBUG-v020]
2026-06-30 00:03:01 PLAN/S0820_video-fullscreen-open-option.md spec Scaffold strategic spec skeleton S0820 [branch: DEBUG-v020]
2026-06-30 12:45:14 PLAN/ log-driven ticket triage Updated existing specs from 2026-06-25..30 device logs, verified S0749, and added new follow-up tickets S0821/S0822/S0823 for catalog import, Instagram authenticated extraction, and stale instrumentation. [branch: DEBUG-v020]
2026-06-30 12:54:42 PLAN/S0817_browse-select-all-scroll-lock.md spec-update Broadened scope from select-all to any browse item selection locking scroll [branch: DEBUG-v020]
2026-06-30 12:55:28 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/CookieFileWriter.kt spec-all S0822: write absolute epoch expiry in yt-dlp cookie file so Instagram auth cookies are not dropped as stale [branch: DEBUG-v020]
2026-06-30 12:56:50 PLAN/S0824_resource-profile-short-names.md spec-draft Add draft ticket for shortening quick-setup resource profile names [branch: DEBUG-v020]
2026-06-30 14:22:33 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/StreamSourceRepository.kt spec-all S0821: prune stream catalog merge in bind-safe IN-chunks (in-memory delta) instead of one giant NOT IN; fixes SQLite variable-limit crash on large catalogs + regression test [branch: DEBUG-v020]
2026-06-30 14:35:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt spec-all S0823: strip archived ticket-id prefixes (S0211/S0260/S0223) from 14 permanent auth/link-download log strings; preserved diagnostics + provenance comments + live S0288 probes [branch: DEBUG-v020]
2026-06-30 14:37:00 PLAN/S0816_agent-session-cost-optimization.md spec-all Strategic spec approved + research §6 resolved: S0816 agent-session-cost-optimization [branch: DEBUG-v020]
2026-06-30 14:38:49 PLAN/spec-catalog.jsonl spec-next Session: 3 processed (S0822 BlockNeedUserTest, S0821 Verified, S0823 Verified), 2 verified, remaining backlog is priority-50 UI drafts (human-gated) + S0816 meta [branch: DEBUG-v020]
2026-06-30 14:40:38 PLAN/S0816_agent-session-cost-optimization/INDEX.md spec-tech Create tactical plan for S0816 (3 phases, docs-only) [branch: DEBUG-v020]
2026-06-30 14:40:53 PLAN/S0816_agent-session-cost-optimization/PHASE_01__agent-cost-playbook.md spec-tech Phase 01: agent-cost-playbook [branch: DEBUG-v020]
2026-06-30 14:40:54 PLAN/S0816_agent-session-cost-optimization/PHASE_02__discoverability-anchor.md spec-tech Phase 02: discoverability-anchor [branch: DEBUG-v020]
2026-06-30 14:40:54 PLAN/S0816_agent-session-cost-optimization/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v020]
2026-06-30 14:40:54 PLAN/S0816_agent-session-cost-optimization.md spec-tech Status -> Tactical [branch: DEBUG-v020]
2026-06-30 14:43:22 docs/AGENT_COST_PLAYBOOK.md spec-dev S0816: new agent cost playbook (spawn/context/skill-tier/MCP/measurement) [branch: DEBUG-v020]
2026-06-30 14:43:22 CLAUDE.md spec-dev S0816: cost-discipline pointer + AGENTS.md/ops-index parity [branch: DEBUG-v020]
2026-06-30 14:44:37 PLAN/S0825_skill-cost-tier-model-assignment.md spec-dev S0816: spawn child ticket S0825 (skill-cost-tier model assignment) [branch: DEBUG-v020]
2026-06-30 14:46:16 PLAN/S0816_agent-session-cost-optimization.md spec-all Pipeline Verified: S0816 agent-session-cost-optimization [branch: DEBUG-v020]
2026-06-30 15:28:47 PLAN/S0826_build-gate-cost-guardrails.md spec Create S0826 (child of S0816): mechanical build/gate cost guardrails - 5 phases A-E from 2026-06-30 session retrospective; Approved [branch: DEBUG-v020]
2026-06-30 15:48:31 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/StreamSourceRepository.kt S0826-validation S0826 Phase 01 validation: scoped closure on dirty tree [branch: DEBUG-v020]
2026-06-30 15:58:10 scripts/post-change.ps1 spec-dev S0826: mechanical build/gate guardrails - diff-scoped detekt + post-change -ScopeToFile, a.ps1 fkn/fg, assert-fast-gates.ps1, detekt-clean-first checklist in spec-dev/spec-all/CLAUDE.md, compact-bugfix template in spec-draft (5 phases verified) [branch: DEBUG-v020]
2026-06-30 16:33:49 AGENTS.md, .github/copilot-instructions.md, .github/prompts/spec-dev.prompt.md, .github/prompts/spec-all.prompt.md S0826 Sync S0826 CLAUDE.md edits (fkn/fg, post-change -ScopeToFile, detekt-clean-first) into AGENTS.md + .github mirrors [branch: DEBUG-v020]
2026-06-30 16:42:23 .claude/commands/quick.md spec-dev S0825: model sonnet for mechanical leaf skills (caveman-commit caveman quick ns git doc-update) [branch: DEBUG-v020]
2026-06-30 16:42:23 PLAN/S0825_skill-cost-tier-model-assignment.md spec-dev S0825 Verified: skill cost tiers applied [branch: DEBUG-v020]
2026-06-30 16:43:32 app_v2/src/main/res/values/strings.xml spec-all S0824: strip quick-setup locale prefix from 6 label_profile_* values across EN/RU/UK; dialog title title_select_profile kept; audit -> Verified [branch: DEBUG-v020]
2026-06-30 16:56:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-all S0811: camera save-destination label shows only the folder name; removed dead string camera_save_destination (EN/RU/UK); audit -> Verified [branch: DEBUG-v020]
2026-06-30 17:10:45 PLAN/spec-catalog.jsonl spec-next Session: 2 verified (S0824, S0811); 47 deferred this run (device-visual / owner-decision / external / editorial-gated, no device attached); BlockNeedUserTest backlog parked (no device for Stage 5.5) [branch: DEBUG-v020]
2026-06-30 17:45:25 PLAN/S0404_android-launcher-mode-profiles.md spec-quiz S0404: recorded owner decisions (kiosk scope = full standard set; flavor matrix doc = new dev/FLAVOR_FEATURE_MATRIX.md); ready for /spec-tech [branch: DEBUG-v020]
2026-06-30 17:45:25 PLAN/S0556_publish-vr-android-xr-store.md spec-quiz S0556: recorded publisher decisions (dedicated Android XR track; OpenXR-required manifest; per-form-factor versionCode offset); ready for /spec-tech [branch: DEBUG-v020]
2026-06-30 17:45:25 PLAN/S0421_windows-sftp-folder-share-companion.md spec-quiz S0421: recorded decision (Windows companion MVP ships unsigned, OV-cert deferred); PAKE lib + rendezvous VM left to owner P2P spike; ready for /spec-tech level A [branch: DEBUG-v020]
2026-06-30 17:45:25 PLAN/S0715_memory-resource-ownership-audit.md spec-quiz S0715: BlockByOtherTask -> In Progress via quiz (split LeakCanary run: app_v2 now since S0726 archived, wear deferred to S0725) [branch: DEBUG-v020]
2026-06-30 18:22:42 PLAN/S0403_fdroid-foss-flavor/PHASE_01__cast-controller-seam.md S0403 fdroid-foss-flavor Phase 01 Extracted CastController seam: interface+factory in src/main, concrete CastMediaManagerImpl/CastOptionsProvider/LocalCastProxyServer moved to src/castEnabled, NoOpCastController in src/castDisabled, Hilt factory bindings per flavor, per-flavor cast deps + additive manifest injection via addStaticManifestFile. Standard+noLegal compile green; Cast registration preserved on standard. [branch: DEBUG-v020]
2026-06-30 18:29:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageDrawOverlayManager.kt S0679 draw-editor-crop-tool Enable Undo last/all immediately after crop (ADR-4): add DrawCanvasView.hasPendingCropUndo() and gate overflow-menu undo enablement on hasActions||hasPendingCropUndo. Fixes greyed-out undo that blocked reverting a crop before the first stroke. [branch: DEBUG-v020]
2026-06-30 18:40:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt S0700 stream-refresh-health-probe GRID first-frame thumbnail: replace cell-TextureView capture with offscreen ImageReader (view-decoupled), first-frame wait + CPU readback to StreamFrameCache, repaint tile from cache; centralize URL-identity guard in repaintUrl to close P1 scroll/recycle race; proper ExoPlayer teardown (setVideoSurface(null)/release/surface.release/reader.close); removed dead capture TextureView from item_stream_grid_cell.xml. [branch: DEBUG-v020]
2026-06-30 18:44:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt S0700 stream-refresh-health-probe GRID first-frame thumbnail: replace cell-TextureView capture with offscreen ImageReader (view-decoupled), first-frame wait + CPU readback to StreamFrameCache, repaint tile from cache; centralize URL-identity guard in repaintUrl to close P1 scroll/recycle race; proper ExoPlayer teardown; removed dead capture TextureView from item_stream_grid_cell.xml. [branch: DEBUG-v020]
2026-06-30 18:45:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt S0613 standalone-document-text-print-send-to Fix R2 panel-revert race: set cachedCopyCollapsed/cachedMoveCollapsed BEFORE settingsRepository.updateSettings in all four toggle/set methods, so the settings-Flow emission cannot repopulate destination panels with the pre-toggle value. Core print path already fixed via PrintDispatchActivity. [branch: DEBUG-v020]
2026-06-30 19:10:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FontResizeController.kt S0760 centralize-font-swipe-resize Add S0760 device-probe tag at the shared FontResizeController.step() chokepoint; implementation (centralized proportional swipe-resize across text/OCR/translation/EPUB, both toasts removed) statically verified, now pending on-device feel check. [branch: DEBUG-v020]
2026-06-30 19:12:19 PLAN/S0403_fdroid-foss-flavor/PHASE_02__wear-datalayer-seam.md S0403 fdroid-foss-flavor Phase 02 Extracted WearableDataLayer seam: de-leaked interface to WearNode in src/main, GMS impl + PhoneWearListenerService moved to src/wearGms, NoOp to src/wearStub, per-flavor source-set mounts + wearable dep + additive manifest (addStaticManifestFile); WearSyncEvents kept in main as cross-flavor consumer. standard(wearGms)+lite(wearStub) compile green, both Hilt graphs resolve; fixed 3 wear use-case unit tests Node->WearNode (pass). [branch: DEBUG-v020]
2026-06-30 19:18:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/dragselect/DragSelectTouchListener.kt S0817 browse-select-all-scroll-lock Drag-select TouchSlop gate: touch defers interception until the finger passes scaledTouchSlop and the movement is predominantly horizontal (commitDrag); vertical moves release to the RecyclerView so a list with an active selection scrolls normally. Mouse immediate-capture + band-select unchanged. [branch: DEBUG-v020]
2026-06-30 19:22:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/dragselect/DragSelectTouchListener.kt S0817 browse-select-all-scroll-lock Drag-select TouchSlop gate: defer touch interception until past scaledTouchSlop with a predominantly-horizontal sweep (commitDrag); vertical moves release to the RecyclerView so an active-selection list scrolls. Mouse capture/band-select unchanged. [branch: DEBUG-v020]
2026-06-30 19:32:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraSettingsDialogFragment.kt S0813 redesign-camera-settings-dialog Camera settings dialog redesigned to canonical components (presentation-only): full-width title line, Spinner->SettingsDropdownRow, MaterialSwitch->SettingsToggleRow, Cancel/Apply relocated to a bottom action row (DialogCancel/DialogConfirm styles), new res/layout-land/ counterpart with matching IDs. Fragment rewired via bindDropdown helper; exposure/ISO/shutter sliders and all callback paths unchanged. [branch: DEBUG-v020]
2026-06-30 19:45:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraSettingsDialogFragment.kt S0813 redesign-camera-settings-dialog Camera settings dialog redesigned to canonical components (presentation-only): full-width title, Spinner->SettingsDropdownRow, MaterialSwitch->SettingsToggleRow, Cancel/Apply bottom action row, new layout-land counterpart. Fragment rewired via bindDropdown; onCreateDialog split into focused helpers; slider magic numbers extracted to named consts; String.format given explicit Locale.US. [branch: DEBUG-v020]
2026-06-30 19:54:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt S0803 mini-game-level-field-scaling Mini-game board size per level: replace level+7 (one cell/level) with 8 + level/3 integer division capped at 20 (one cell per 3 levels), via boardSizeForLevel(); literals as named consts BOARD_SIZE_BASE/GROWTH_DIVISOR/MAX; removed dead BOARD_SIZE_LEVEL_OFFSET/MIN. [branch: DEBUG-v020]
2026-06-30 20:03:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamInlineAudioManager.kt S0778 streams-now-playing-panel-under-system-bars Now-playing streams mini-control no longer drawn under system bars: StreamInlineAudioManager.applyWindowInsets() wires the shared applySystemBarInsetPadding (systemBars+displayCutout, bottom+left+right, top suppressed since toolbar owns status bar) on streamMiniControl; mirrors CameraCaptureActivity. Extended ViewExtensions helper with optional onApplied callback (backward-compatible). [branch: DEBUG-v020]
2026-06-30 21:16:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt spec-arc Remove stale S0689 parked-reference comment (S0689 archived obsolete; radio plays on separate audio player) [branch: DEBUG-v020]
2026-06-30 21:19:18 temp/done/S0689_stream-radio-vs-live-loadcontrol-split.md spec-arc Archive S0689 (stream-radio-vs-live-loadcontrol-split): obsolete, premise invalid - radio (AUDIO) and live-video already on separate players/LoadControls, no shared stream LoadControl to split [branch: DEBUG-v020]
2026-06-30 21:24:27 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/streams/StreamFramePersistentStore.kt S0712 S0712: persist last GRID-captured stream frame to disk; pre-warm grid cache from disk on next launch [branch: DEBUG-v020]
2026-06-30 22:37:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/widget/SettingsToggleRow.kt S0776 Add optional leading icon slot (app:str_icon / app:csh_icon, setIcon) to SettingsToggleRow + CollapsibleSectionHeader mirroring SettingsSelectionRow ssr_icon; wire monochrome feature icons onto curated Settings group headers and feature toggles (4 tabs) and Welcome functionality/networks rows incl layout-land; add ic_apps/ic_gesture/ic_cloud mono vectors. [branch: DEBUG-v020]
2026-06-30 22:58:27 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt Instagram link download diagnostics S0822: classify okhttp redirect-loop login-wall on curated social hosts as AuthRequired (actionable re-login) instead of silent NoMediaFound [branch: DEBUG-v020]
2026-06-30 23:27:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainStreamsInlineAudioManager.kt S0777 S0777: play AUDIO streams-panel channels inline in the home window via new MainStreamsInlineAudioManager (owned by MainStreamsPanelManager) + bottom now-playing mini-control in 3 activity_main layouts; VIDEO/RTSP unchanged [branch: DEBUG-v020]
2026-06-30 23:30:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainStreamsInlineAudioManager.kt S0777 S0777: detekt fixes (when-routing + braces) in inline-audio coordinator [branch: DEBUG-v020]
2026-06-30 23:47:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainStreamsPanelManager.kt S0779 Compact main-window streams panel: orientation-driven entry label (landscape only), removed three-dots button, long-press menu adds Disable (turns off enableStreams) [branch: DEBUG-v020]
2026-07-01 00:21:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/main S0780 Add Configure item to programs-panel and streams-button long-press menus; deep-links to the relevant Settings group via EXTRA_EXPAND_SECTION + per-fragment self-expand [branch: DEBUG-v020]
2026-07-01 01:00:09 PLAN/S0781_main-resource-type-filter-panel-collapse.md spec-all Strategic spec approved: S0781 resource-type filter panel collapse [branch: DEBUG-v020]
2026-07-01 01:08:29 PLAN/S0781_main-resource-type-filter-panel-collapse/INDEX.md spec-tech Tactical plan (INDEX + 4 phases) for S0781 resource-type filter collapse [branch: DEBUG-v020]
2026-07-01 01:31:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainResourceTabsCollapseManager.kt spec-dev S0781 resource-type filter collapse manager [branch: DEBUG-v020]
2026-07-01 01:33:35 PLAN/S0781_main-resource-type-filter-panel-collapse.md spec-dev S0781 implemented: resource-type filter strip collapse - persist flag (AppSettings+DataStore+backup), strip resources across 3 layouts, MainResourceTabsCollapseManager + wiring. Status -> BlockNeedUserTest. [branch: DEBUG-v020]
2026-07-01 01:41:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainStreamsPanelManager.kt S0782 streams panel Hide-panel menu action S0782: add ‘Hide panel’ item to the streams-panel entry long-press menu (flips showStreamsPanelInMainWindow off, keeps Streams enabled); new StreamsPanelMenuActions.onHideStreamsPanel callback + MainActivity.hideStreamsPanelFromPanel handler + streams_panel_hide_action string EN/RU/UK [branch: DEBUG-v020]
2026-07-01 01:47:02 PLAN/S0831_mainactivity-loc-ceiling-extract-managers.md spec Scaffold strategic spec skeleton S0831 [branch: DEBUG-v020]
2026-07-01 02:38:16 PLAN/S0783_streams-favorites-channel-entry.md spec-all S0783: live channels can be added to shared Favorites (catalog list/grid + main-window panel menus, feature-gated), shown by channel name and opened in the stream player; favorites table gains a kind discriminator (Room v38) with widget/export/backup kept file-only [branch: DEBUG-v020]
2026-07-01 03:10:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainPanelItemActionsManager.kt spec-all S0831 S0831: extract S0770 panel item context-menu actions from MainActivity into MainPanelItemActionsManager (1536->1467 LOC, under 1500 ceiling); behaviour-preserving [branch: DEBUG-v020]
2026-07-01 03:21:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/print/PrintDispatchActivity.kt spec-all S0828 S0828: harden PDF print spool copy - raw Thread -> structured cancellable coroutine; reliable cancel via source-stream close; drop copyJob!! [branch: DEBUG-v020]
2026-07-01 03:34:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/print/PrintDispatchActivity.kt spec-all S0828 S0828: harden PDF print spool copy - raw Thread -> structured cancellable coroutine; reliable cancel via source-stream close; drop copyJob!!; clear pre-existing detekt findings in touched file [branch: DEBUG-v020]
2026-07-01 03:41:04 app_v2/src/main/java/com/sza/fastmediasorter/core/game/GameLaunchIntents.kt spec-all S0829 S0829: fix game-toggle Settings deep-link (was wrong tab TAB_PLAYBACK + dead EXTRA_HIGHLIGHT_SETTING) -> reuse S0780 openProgramsSectionIntent (Operations tab + expand Additional Programs); remove dead EXTRA_HIGHLIGHT_SETTING/HIGHLIGHT_EMBEDDED_GAME from SettingsActivity [branch: DEBUG-v020]
2026-07-01 03:46:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainProgramsPanelManager.kt spec-all S0830 S0830: overflow programs-panel items now open the same per-item context menu (showItemMenu) as visible items - restores Open/new-window/configure/remove parity [branch: DEBUG-v020]
2026-07-01 03:48:06 PLAN/spec-catalog.jsonl spec-next Autonomous session: 4 advanced (S0831/S0828/S0830 -> BlockNeedUserTest, S0829 -> Verified); deferred large/owner/device tickets [branch: DEBUG-v020]
2026-07-01 10:04:25 PLAN/spec-catalog.jsonl spec-next Re-assessment run: deferred S0403 (drift-needs-review); confirmed S0715 device-only and remaining pri-50 Drafts owner-UX/device/epic-gated; autonomous-static backlog already drained (S0828/S0829/S0830/S0831 last session). 0 new advanced. [branch: DEBUG-v020]
2026-07-01 10:31:57 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamGridModeManager.kt S0784 S0784: grid frame refresh re-captures in place (no atlas revert) [branch: DEBUG-v020]
2026-07-01 10:41:14 PLAN/S0785_streams-list-country-flag-fallback-icon.md S0785 S0785: streams-list shows the channel country flag in the leading slot when no favicon atlas tile is available (keeps row alignment) [branch: DEBUG-v020]
2026-07-01 10:52:13 PLAN/S0786_geolocation-permission-photo-video-metadata.md S0786 S0786: register the opt-in location permission in the app permission registry so users grant/deny the photo-video geotag from onboarding and Settings (embedding already in S0766) [branch: DEBUG-v020]
2026-07-01 11:02:07 PLAN/S0787_settings-list-picker-usability.md S0787 S0787: redesigned the universal ListSelectionDialog picker - readable rows with a highlighted current selection and a height-capped scrollable list, replacing faint outlined-button items [branch: DEBUG-v020]
2026-07-01 11:10:11 PLAN/S0788_left-edge-gesture-launch-camera-action.md S0788 S0788: added a Launch camera action to the edge-gesture action set (opens the in-app camera via the widget trampoline) [branch: DEBUG-v020]
2026-07-01 11:24:54 app_v2/src/main/res/values*/strings.xml S0789+S0793 Rename edge-gesture action labels: SILENT_SCREENSHOT -> ‘Silent screenshot of the screen’ wording (RU/UK) and ‘Screenshot -‘ prefix on the screenshot-family actions (open/edit/OCR/send-to/share/crop) + ‘Open the main app window’. EN/RU/UK parity verified. [branch: DEBUG-v020]
2026-07-01 11:56:12 PLAN/S0832_settings-media-images-gif-portrait-two-rows.md spec-draft Open Draft spec S0832 for portrait-only separation of the two image/GIF toggles in Settings -> Media [branch: DEBUG-v020]
2026-07-01 11:57:38 PLAN/S0833_settings-media-text-pdf-remove-toggle-document-icons.md spec-draft Open Draft spec S0833 for removing duplicate document icons from four text/PDF group toggles in Settings -> Media [branch: DEBUG-v020]
2026-07-01 11:59:48 PLAN/S0834_settings-media-ocr-toggle-remove-label-suffix.md spec-draft Open Draft spec S0834 for removing the OCR suffix from the OCR toggle label in Settings -> Media [branch: DEBUG-v020]
2026-07-01 12:03:47 PLAN/S0835_settings-media-streams-row-layout-tightening.md spec-draft Open Draft spec S0835 for portrait/landscape layout tightening of the Streams settings rows and buttons [branch: DEBUG-v020]
2026-07-01 12:05:22 PLAN/S0836_settings-general-remote-resource-icons-unify.md spec-draft Open Draft spec S0836 for unifying remote resource icons in General settings with the rest of the app [branch: DEBUG-v020]
2026-07-01 12:07:06 PLAN/S0837_screenshot-draw-save-overwrite-original-by-default.md spec-draft Open Draft spec S0837 for overwriting the original screenshot on draw-editor save-and-exit unless Save as is used [branch: DEBUG-v020]
2026-07-01 12:08:33 PLAN/S0815_section-icons-in-docs-and-site.md spec-draft Append S0815 draft with explicit user-docs/site guidance to reuse app icons instead of emoji [branch: DEBUG-v020]
2026-07-01 12:10:29 app_v2/src/main/java/com/sza/fastmediasorter/widget/ScreenRecordingLaunchActivity.kt S0795+S0796+S0797 Edge-gesture actions: start video recording (camera forced to video mode), start audio recording (reuse QuickAudioRecorder trampoline, toggle), start screen recording (new ScreenRecordingLaunchActivity consent trampoline + picker gating on the capture engine). Enum/dispatcher/picker/strings in src/main. [branch: DEBUG-v020]
2026-07-01 12:10:30 app_v2/src/main/java/com/sza/fastmediasorter/widget/PhotoCaptureLaunchManager.kt S0790+S0791+S0792+S0794 Edge-gesture take-photo family: new auto-fire capture primitive (CameraCaptureContract.EXTRA_AUTO_CAPTURE + CameraCaptureActivity.maybeAutoCapture) + PhotoCaptureLaunchActivity/Manager - photo+toast, and routes to viewer send-to/draw-editor/OCR-translate. [branch: DEBUG-v020]
2026-07-01 12:11:48 PLAN/S0838_send-to-icons-unify-settings-and-menus.md spec-draft Open Draft spec S0838 for unifying Send-to icons across Player settings and all Send-to menus [branch: DEBUG-v020]
2026-07-01 12:13:26 PLAN/S0839_settings-player-delete-confirm-child-row-portrait.md spec-draft Open Draft spec S0839 for moving the delete-confirm child toggle to its own indented portrait row [branch: DEBUG-v020]
2026-07-01 12:14:46 PLAN/S0840_settings-player-sorting-slideshow-group-remove-icon.md spec-draft Open Draft spec S0840 for removing the misleading icon from the sorting/slideshow player settings group [branch: DEBUG-v020]
2026-07-01 12:17:14 PLAN/S0841_settings-management-canonical-feature-icons.md spec-draft Open Draft spec S0841 for applying canonical feature icons to Management settings rows [branch: DEBUG-v020]
2026-07-01 12:19:03 PLAN/S0842_canonical-resource-icon-and-picker-affordance.md spec-draft Open Draft spec S0842 for a canonical registered-resource icon and icon-only resource-picker affordances [branch: DEBUG-v020]
2026-07-01 13:02:13 app_v2/src/main/res/values/strings.xml S0799 Resource-vs-folder terminology audit: renamed mislabeled resource strings across EN/RU/UK (incl. the ‘Add resource’ dialog that showed ‘Додати теку’), deleted 5 dead editor keys, fixed Wear/external-file near-misses, added a Resource-vs-Folder glossary to COMMUNICATION_POLICY (EN/RU/UK). [branch: DEBUG-v020]
2026-07-01 13:02:13 app_v2/src/main/res/drawable/ic_resource.xml S0842 Canonical resource icon (stacked-collection glyph, neutral tint); Send-to Select-resource affordance now uses ic_resource instead of the folder icon, splitting the resource vs folder marker. [branch: DEBUG-v020]
2026-07-01 14:07:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt S0800 S0800: remove meaningless early icon picker from Add Resource toolbar (icon is assigned later in resource editor); drop setupIconPicker, userPickedIconId, pickIconAction include and now-unused icon imports [branch: DEBUG-v020]
2026-07-01 14:30:18 scripts/streams/collect-stream-candidates.ps1 S0805 Discovery append gate now runs deep-signal verification as a second stage after the header probe: header-alive candidates are re-probed for real media bytes and only signal-verified rows are appended, blocking pseudo-alive channels (playlist 2xx, no segment) from the shipped catalog. Added -SkipDeepSignal opt-out and signal_bytes report column. README updated. Validated: negative case (stale NASA/DW seeds -> segment 404 -> dropped) + positive case (mux HLS -> alive). [branch: DEBUG-v020]
2026-07-01 14:44:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/ResourceOpsMenuManager.kt S0806 S0806: add ‘App settings’ entry (pinned last) to the browse overflow menu; opens the main Settings window [branch: DEBUG-v020]
2026-07-01 15:10:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/game S0804 Add mini-game visual modes (Classic/Kryvavitsa): persisted GameMode, themed board rendering (silhouettes, door, stomp animation), mode picker under ‘How to play’, mode-aware help legend. [branch: DEBUG-v020]
2026-07-01 15:23:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainProgramsPanelManager.kt spec-all S0807 S0807: programs-panel header three-dots menu (Configure panel / Collapse panel / Hide panel) + collapsed strip + programsPanelCollapsed persist flag [branch: DEBUG-v020]
2026-07-01 15:54:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainStreamsPanelManager.kt spec-all S0808: streams panel Collapse panel menu item + persisted labelled strip (mirror S0807) [branch: DEBUG-v020]
2026-07-01 16:03:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0812: camera scenario context label (enum + contract + host label + OCR caller) [branch: DEBUG-v020]
2026-07-01 16:18:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-all S0809: group collapsed panel strips into one shared chips row (mainCollapsedPanelsRow); managers render into shared-row chips [branch: DEBUG-v020]
2026-07-01 16:20:59 PLAN/S0819_tv-dpad-focus-visibility.md spec-all Strategic spec S0819: app-wide window-level focus-frame overlay for D-pad/TV/joystick, Draft->Approved [branch: DEBUG-v020]
2026-07-01 16:48:53 PLAN/S0819_tv-dpad-focus-visibility/INDEX.md spec-tech Create tactical plan for S0819 (6 phases) [branch: DEBUG-v020]
2026-07-01 16:48:53 PLAN/S0819_tv-dpad-focus-visibility/PHASE_01__foundations.md spec-tech Phase 01: foundations (overlay drawable + theming) [branch: DEBUG-v020]
2026-07-01 16:48:53 PLAN/S0819_tv-dpad-focus-visibility/PHASE_02__app-wide-attach.md spec-tech Phase 02: app-wide attach (activity windows) [branch: DEBUG-v020]
2026-07-01 16:48:53 PLAN/S0819_tv-dpad-focus-visibility/PHASE_03__dialog-coverage.md spec-tech Phase 03: dialog/bottom-sheet coverage [branch: DEBUG-v020]
2026-07-01 16:48:53 PLAN/S0819_tv-dpad-focus-visibility/PHASE_04__reconcile-existing.md spec-tech Phase 04: reconcile existing focus visuals [branch: DEBUG-v020]
2026-07-01 16:48:53 PLAN/S0819_tv-dpad-focus-visibility/PHASE_05__player-focus-nav.md spec-tech Phase 05: player focus navigation [branch: DEBUG-v020]
2026-07-01 16:48:53 PLAN/S0819_tv-dpad-focus-visibility/PHASE_06__docs-catalog-cleanup.md spec-tech Phase 06: docs-catalog cleanup [branch: DEBUG-v020]
2026-07-01 16:48:54 PLAN/S0819_tv-dpad-focus-visibility.md spec-tech Status -> Tactical [branch: DEBUG-v020]
2026-07-01 16:53:00 app_v2/src/main/res/values/attrs.xml spec-dev S0819 P01 S0819 P01.1: add focus-frame theme attrs [branch: DEBUG-v020]
2026-07-01 16:54:22 app_v2/src/main/res/values/themes.xml spec-dev S0819 P01 S0819 P01.2: bind focus-frame tokens in base theme [branch: DEBUG-v020]
2026-07-01 16:54:51 app_v2/src/main/res/values/dimens.xml spec-dev S0819 P01 S0819 P01.2: focus-frame stroke/corner dimens [branch: DEBUG-v020]
2026-07-01 16:55:12 app_v2/src/main/res/values/colors.xml spec-dev S0819 P01 S0819 P01.2: focus-frame fallback color [branch: DEBUG-v020]
2026-07-01 16:58:09 app_v2/src/main/res/values/integers.xml spec-dev S0819 P01 S0819 P01.4: focus-frame anim duration integer [branch: DEBUG-v020]
2026-07-01 16:58:32 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameOverlay.kt spec-dev S0819 P01 S0819 P01.3: FocusFrameOverlay animated focus-frame drawable [branch: DEBUG-v020]
2026-07-01 17:04:56 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameController.kt spec-dev S0819 P02 Add FocusFrameController: per-Window travelling D-pad focus frame driver [branch: DEBUG-v020]
2026-07-01 17:07:20 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameActivityCallbacks.kt spec-dev S0819 P02 Add FocusFrameActivityCallbacks + FocusFrameExcluded marker: app-wide focus-frame attach [branch: DEBUG-v020]
2026-07-01 17:09:49 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt spec-dev S0819 P02 Register FocusFrameActivityCallbacks in onCreate for app-wide D-pad focus frame [branch: DEBUG-v020]
2026-07-01 17:16:23 PLAN/S0847_corner-edge-gestures-twelve-directions.md spec-draft Open Draft spec S0847 for expanding left-edge gestures to four corner zones with up to twelve gesture slots [branch: DEBUG-v020]
2026-07-01 17:18:07 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameFragmentCallbacks.kt spec-dev S0819 P03 Dialog/bottom-sheet focus-frame coverage via FragmentLifecycleCallbacks [branch: DEBUG-v020]
2026-07-01 17:19:57 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameActivityCallbacks.kt spec-dev S0819 P03 Register fragment callbacks for dialog windows [branch: DEBUG-v020]
2026-07-01 17:21:50 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameOverlay.kt spec-dev S0819 P03 Idempotent moveTo guard: stop per-frame animator restart spin [branch: DEBUG-v020]
2026-07-01 17:29:52 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameFragmentCallbacks.kt spec-dev S0819 P03 Dialog focus-frame coverage (ReturnCount fixed) [branch: DEBUG-v020]
2026-07-01 17:31:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/input/FocusRingHelper.kt spec-dev S0819 P04 Neutralize runtime focus ring; app-wide overlay draws it now (isActivated-only) [branch: DEBUG-v020]
2026-07-01 17:37:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/PanelItemContextMenu.kt spec-all S0810: name-label header in panel/streams/channel long-press menus + command-bar tooltips [branch: DEBUG-v020]
2026-07-01 17:41:39 app_v2/src/main/assets/input/default_bindings.json spec-dev S0819 P05 S0819 P05.1: free bare D-pad keys in player (remove DPAD triggers from prev/next-file and volume up/down) [branch: DEBUG-v020]
2026-07-01 17:43:53 app_v2/src/main/res/layout/custom_player_controls.xml spec-dev S0819 P05 S0819 P05.2: make player transport controls D-pad focusable with S0289 stroke + deterministic nextFocus chain (compact + large parity) [branch: DEBUG-v020]
2026-07-01 17:48:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0819 P05 S0819 P05.3/05.4: keep player controls visible in non-touch mode (gate scheduleHideControls) + fix getInitialFocusView to show overlay and focus a visible transport control [branch: DEBUG-v020]
2026-07-01 17:50:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0819 P05 S0819 P05.3/05.4: keep player controls visible in non-touch mode (gate scheduleHideControls) + fix getInitialFocusView to show overlay and focus a visible transport control [branch: DEBUG-v020]
2026-07-01 17:54:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0819 P05 S0819 P05.3/05.4: keep player controls visible in non-touch mode (gate scheduleHideControls) + fix getInitialFocusView to show overlay and focus a visible transport control [branch: DEBUG-v020]
2026-07-01 17:56:08 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameController.kt spec-dev S0819 P05 S0819 P05.5: temporary device-test probe when the focus frame moves to a newly focused view [branch: DEBUG-v020]
2026-07-01 17:57:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerKeyboardHandler.kt spec-dev S0819 P05 S0819 P05.5: temporary device-test probe when a bare player D-pad direction falls through to focus traversal [branch: DEBUG-v020]
2026-07-01 18:02:27 PLAN/S0848_post-change-runtime-optimization.md spec-draft Scaffold strategic spec skeleton S0848 for post-change runtime optimization without gate loss [branch: DEBUG-v020]
2026-07-01 18:23:57 dev/CATALOG/scripts/scan.ps1 scan.ps1 incremental mode S0848 Phase 1: incremental catalog scan - scan.ps1/-catalog_sync.ps1/-post-change.ps1 gain -ChangedFiles so git last-touched is recomputed only for changed files (unchanged reuse prior JSONL date; ambiguous flavor-variant paths fall back to git). app_v2 scan ~39.8s -> ~5.3s, JSONL parity preserved. [branch: DEBUG-v020]
2026-07-01 18:31:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateManager.kt BrowseStateManager.getCurrentFocusPosition S0845: browser commands target the actually-focused item (recyclerView.focusedChild -> getChildAdapterPosition), fallback first-visible then 0; + BrowseStateManagerFocusPositionTest [branch: DEBUG-v020]
2026-07-01 18:35:20 app_v2/src/test/java/com/sza/fastmediasorter/ui/browse/managers/BrowseStateManagerFocusPositionTest.kt spec-all S0845 verified: focus-position targeting fix + unit test (4 branches), scoped detekt clean [branch: DEBUG-v020]
2026-07-01 18:39:13 PLAN/S0789_left-edge-gesture-silent-screenshot-rename.md spec-next S0789 verified: silent-screenshot label rename, EN/RU/UK parity, wired to picker (audit) [branch: DEBUG-v020]
2026-07-01 18:39:33 PLAN/S0805_stream-catalog-liveness-filter.md spec-next S0805 verified: deep-signal liveness gate on stream discovery (default-on, -SkipDeepSignal opt-out, reject reasons in report, prune untouched) (audit) [branch: DEBUG-v020]
2026-07-01 18:39:51 PLAN/S0800_add-resource-remove-early-icon-picker.md spec-next S0800 verified: early non-functional icon picker removed from Add Resource toolbar, dead code gone, editor path intact, fc green (audit) [branch: DEBUG-v020]
2026-07-01 18:40:04 PLAN/S0793_left-edge-gesture-action-labels-screenshot-camera.md spec-next S0793 verified: screenshot gesture labels prefixed + OPEN_APP relabel, EN/RU/UK parity, wired to picker (audit) [branch: DEBUG-v020]
2026-07-01 18:41:25 PLAN/S0799_resource-vs-folder-terminology-audit.md spec-next S0799 verified: resource-vs-folder terminology fixed (Add Resource title, editor strings, glossary in COMMUNICATION_POLICY EN/RU/UK); tidied stale folder comments (audit) [branch: DEBUG-v020]
2026-07-01 18:44:13 PLAN/spec-catalog.jsonl spec-next Session: 9 processed (6 verified, 1 partial/shipped, 1 device-blocked, 1 deferred), 1 parked (S0849); device offline [branch: DEBUG-v020]
2026-07-01 20:08:30 app_v2/src/main/res/values-uk/strings.xml spec-all S0849: add missing UK/RU translations for 6 resource strings (trilingual parity restored) [branch: DEBUG-v020]
2026-07-01 20:38:27 scripts/post-change.ps1 spec-all S0848: parallel detekt (ThreadJob), in-process neuroslop, -ChangedFiles delta for flavor-flag+deprecated-pm gates (remainder S0850) [branch: DEBUG-v020]
2026-07-01 20:49:09 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-all S0841: canonical feature icons on Management settings rows (camera-OCR, mini-game, edit-app-panel), portrait + landscape [branch: DEBUG-v020]
2026-07-01 20:50:28 PLAN/spec-catalog.jsonl spec-next Session: 3 processed (S0849 Verified, S0848 Implemented, S0841 Verified), S0847 deferred (owner UX), S0850 created [branch: DEBUG-v020]
2026-07-01 21:50:52 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-all S0840: remove sorting/slideshow group header icon (portrait+land), text-only header [branch: DEBUG-v020]
2026-07-01 21:56:03 app_v2/src/main/res/layout/fragment_settings_playback.xml spec-all S0839: portrait stacks Confirm-delete as an indented child of Allow-delete; landscape 3-up row kept [branch: DEBUG-v020]
2026-07-01 22:06:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/PlaybackSettingsFragment.kt spec-all S0838: unify Send-to receiver icons - group header ic_share + per-row icons (installed-app icon, glyph fallback) matching runtime menus [branch: DEBUG-v020]
2026-07-01 22:11:02 PLAN/S0815_section-icons-in-docs-and-site.md spec-all S0815: authored strategic spec (icon inventory -> docs/site), Draft -> Approved; tactical/impl deferred as focused follow-up [branch: DEBUG-v020]
2026-07-01 22:17:49 app_v2/src/main/res/layout/fragment_settings_general.xml spec-all S0836: align Remote-sources settings row icons to canonical ic_resource_smb/sftp/cloud (portrait+land) [branch: DEBUG-v020]
2026-07-01 22:26:42 app_v2/src/main/res/values/strings.xml spec-all S0834: drop redundant (OCR) suffix from enable_ocr toggle label (EN/RU/UK) + Rule 22 manifest/reference regen [branch: DEBUG-v020]
2026-07-01 22:27:16 PLAN/spec-catalog.jsonl spec-next Session: 6 processed (S0840/S0839/S0838/S0836/S0834 Verified, S0815 Approved); 3 deferred (S0847 owner-UX, S0837 destructive+device, S0835 UI-ambiguity) [branch: DEBUG-v020]
2026-07-01 23:04:07 app_v2/src/main/res/layout/fragment_settings_documents.xml spec-all S0833: remove duplicate ic_book icon from 4 text/PDF/EPUB/Office toggles (portrait+land); icon kept on group header [branch: DEBUG-v020]
2026-07-01 23:07:02 app_v2/src/main/res/layout/fragment_settings_images.xml spec-all S0832: portrait stacks image/GIF support toggles on separate rows; landscape stays paired [branch: DEBUG-v020]
2026-07-01 23:07:24 PLAN/spec-catalog.jsonl spec-next Session (cont): 8 processed (S0840/S0839/S0838/S0836/S0834/S0833/S0832 Verified, S0815 Approved); settings-UI quick-win queue drained; 3 deferred (S0847/S0837/S0835) [branch: DEBUG-v020]
2026-07-02 00:02:37 app_v2/src/main/res/layout-land/activity_player_unified.xml S0852 S0852: anchor mini Now Playing bar above bottomPanelsContainer in landscape player (was bottom_toBottomOf=parent, elevated bar covered Move/Copy destination buttons); portrait already stacks; BlockNeedUserTest probe in NowPlayingManager [branch: DEBUG-v020]
2026-07-02 12:10:23 PLAN/S0878_audit-mass-2026-07-02-followup.md spec Mass audit 2026-07-02: parked 26 draft tickets (S0853..S0878) from workflow wf_34a4d99d-fbf findings [branch: DEBUG-v020]
2026-07-02 13:11:42 PLAN/S0878_audit-mass-2026-07-02-followup.md spec Mass audit verification campaign: 21 sequential skeptics judged all 25 parked drafts (S0853-S0877) - 23 confirmed (43 findings, 2 escalated to P0), 2 downgraded, 0 archived; priorities and cross-links (S0854<->S0865, S0866->S0624) recorded in spec headers [branch: DEBUG-v020]
2026-07-02 15:14:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BackgroundMusicManager.kt S0853 Fix background music empty-playlist crash and confine manager state to Main [branch: DEBUG-v020]
2026-07-02 15:17:39 PLAN/S0854_bugfix-playbackposition-loop-retains-activity.md spec-all Compact spec: S0854 [branch: DEBUG-v020]
2026-07-02 15:23:37 app_v2/src/main/java/com/sza/fastmediasorter/core/AudioToggleTileService.kt S0856 Fix AudioToggleTileService MediaController future leak [branch: DEBUG-v020]
2026-07-02 15:23:42 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0855 Guard XR playback controller teardown before late init [branch: DEBUG-v020]
2026-07-02 15:30:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt S0857 Reuse in-flight audio service controller futures and guard tracked state [branch: DEBUG-v020]
2026-07-02 15:39:14 .claude/commands/spec-next.md spec-next Drop research-heavy auto-skip: drive every Draft/Approved to readiness or a real blocker; allow mid-loop /compact at round boundaries [branch: DEBUG-v020]
2026-07-02 15:47:56 PLAN/S0854_bugfix-playbackposition-loop-retains-activity.md spec-all S0854 implemented: stop-before-overwrite + releasePlayer stop + serialized playVideo via activeLoadJob; BlockNeedUserTest (no device online) [branch: DEBUG-v020]
2026-07-02 15:47:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackPositionHelper.kt S0854 startPositionSaving stops previous loop before overwriting reference [branch: DEBUG-v020]
2026-07-02 15:47:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt S0854 releasePlayer stops position-save loop on every teardown path [branch: DEBUG-v020]
2026-07-02 15:47:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt S0854 playVideo tracks and cancels the in-flight load job before dispatching a new one [branch: DEBUG-v020]
2026-07-02 15:57:12 PLAN/S0855_bugfix-xr-release-lateinit-crash.md spec-check Audit S0855 -> Verified; PASS/WARN/FAIL 8/0/0; filled placeholder sections 2-4 [branch: DEBUG-v020]
2026-07-02 15:59:46 PLAN/S0853_bugfix-bgmusic-empty-playlist-crash-and-race.md spec-check Audit S0853 -> Verified; PASS/WARN/FAIL 9/0/0; MANUAL 1 (device test deferred - no device online) [branch: DEBUG-v020]
2026-07-02 16:03:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt StreamFrameSnapshotManager S0875: guard acquireLatestImage() at both call sites against main-thread reader.close() race [branch: DEBUG-v020]
2026-07-02 16:06:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt StreamFrameSnapshotManager S0875: guard acquireLatestImage() at both call sites against main-thread reader.close() race [branch: DEBUG-v020]
2026-07-02 16:08:08 PLAN/S0875_bugfix-streamsnapshot-imagereader-race.md spec-check Audit S0875 -> Verified; PASS/WARN/FAIL 7/0/0; MANUAL 1 (device test deferred - no device online) [branch: DEBUG-v020]
2026-07-02 16:12:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt AudioEmptyStateController S0863: release video MediaPlayer on mode switch + on error, guard start() sites symmetric to pause() [branch: DEBUG-v020]
2026-07-02 16:14:27 PLAN/S0863_bugfix-audio-empty-state-player-orphans.md spec-check Audit S0863 -> Verified; PASS/WARN/FAIL 8/0/0; MANUAL 1 (device test deferred - no device online) [branch: DEBUG-v020]
2026-07-02 16:21:18 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt SftpConnectionPool S0866: CopyOnWriteArrayList for pooledChannels + unify session-map creation under synchronized(pooledSessions) across suspend/blocking paths [branch: DEBUG-v020]
2026-07-02 16:24:58 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt SftpConnectionPool S0866: CopyOnWriteArrayList for pooledChannels + unify session-map creation under synchronized(pooledSessions) across suspend/blocking paths [branch: DEBUG-v020]
2026-07-02 16:26:38 PLAN/S0866_bugfix-sftp-pool-lock-domain-races.md spec-check Audit S0866 -> Verified; PASS/WARN/FAIL 9/0/0; MANUAL 1 (device test deferred - no device online) [branch: DEBUG-v020]
2026-07-02 16:29:31 PLAN/S0857_bugfix-audioservicecontroller-future-overwrite.md spec-check Audit S0857 -> Verified; PASS/WARN/FAIL 7/0/0; MANUAL 1 (device test deferred - no device online) [branch: DEBUG-v020]
2026-07-02 16:31:14 PLAN/S0856_bugfix-audiotile-controller-future-leak.md spec-check Audit S0856 -> Verified; PASS/WARN/FAIL 8/0/0; MANUAL 1 (device test deferred - no device online) [branch: DEBUG-v020]
2026-07-02 16:32:30 PLAN/spec-catalog.jsonl spec-next Session: 7 processed, 7 verified, 0 blocked (S0855,S0853,S0875,S0863,S0866,S0857,S0856) [branch: DEBUG-v020]
2026-07-02 16:38:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt S0872 Release translationManager in onDestroy via explicit Lazy delegate [branch: DEBUG-v020]
2026-07-02 16:39:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/TextStandaloneActivity.kt S0872 Release translationManager in onDestroy via explicit Lazy delegate [branch: DEBUG-v020]
2026-07-02 16:41:11 PLAN/S0872_bugfix-translationmanager-not-released.md spec-check Audit S0872 -> Verified; PASS/WARN/FAIL 8/0/0 [branch: DEBUG-v020]
2026-07-02 16:46:45 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameWidgetProvider.kt S0870 goAsync+IO scope in onUpdate to avoid main-thread runBlocking [branch: DEBUG-v020]
2026-07-02 16:49:51 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameWidgetProvider.kt S0870 goAsync+IO scope in onUpdate to avoid main-thread runBlocking [branch: DEBUG-v020]
2026-07-02 16:51:04 app_v2/src/main/java/com/sza/fastmediasorter/widget/RandomPhotoFrameConfigActivity.kt S0870 Move config-activity widget refresh off Main; only finishWithResult stays on Main [branch: DEBUG-v020]
2026-07-02 16:52:17 app_v2/src/main/java/com/sza/fastmediasorter/widget/ScheduledTasksWidgetRefresher.kt S0870 Make refresh() suspend + withContext(IO) so every caller is main-thread safe [branch: DEBUG-v020]
2026-07-02 16:53:46 PLAN/S0870_bugfix-widget-runblocking-main-thread.md spec-check Audit S0870 -> Verified; PASS/WARN/FAIL 9/0/0 [branch: DEBUG-v020]
2026-07-02 17:00:02 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt S0865 Add releaseIfRacedPlayer() belt-and-braces guard against duplicate-player race [branch: DEBUG-v020]
2026-07-02 17:01:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt S0865 Guard against duplicate-player race post TS-probe suspension [branch: DEBUG-v020]
2026-07-02 17:02:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt S0865 Guard against duplicate-player race post TS-probe suspension [branch: DEBUG-v020]
2026-07-02 17:03:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt S0865 Guard against duplicate-player race post TS-probe suspension [branch: DEBUG-v020]
2026-07-02 17:05:36 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt S0865 Guard against duplicate-player race post TS-probe suspension [branch: DEBUG-v020]
2026-07-02 17:07:22 PLAN/S0789_left-edge-gesture-silent-screenshot-rename.md spec-arc Archive S0789 (left-edge-gesture-silent-screenshot-rename) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:22 PLAN/S0793_left-edge-gesture-action-labels-screenshot-camera.md spec-arc Archive S0793 (left-edge-gesture-action-labels-screenshot-camera) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:23 PLAN/S0799_resource-vs-folder-terminology-audit.md spec-arc Archive S0799 (resource-vs-folder-terminology-audit) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:24 PLAN/S0800_add-resource-remove-early-icon-picker.md spec-arc Archive S0800 (add-resource-remove-early-icon-picker) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:25 PLAN/S0805_stream-catalog-liveness-filter.md spec-arc Archive S0805 (stream-catalog-liveness-filter) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:26 PLAN/S0811_camera-save-destination-short-label.md spec-arc Archive S0811 (camera-save-destination-short-label) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:27 PLAN/S0829_settings-highlight-setting-extra-never-consumed.md spec-arc Archive S0829 (settings-highlight-setting-extra-never-consumed) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:28 PLAN/S0832_settings-media-images-gif-portrait-two-rows.md spec-arc Archive S0832 (settings-media-images-gif-portrait-two-rows) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:29 PLAN/S0833_settings-media-text-pdf-remove-toggle-document-icons.md spec-arc Archive S0833 (settings-media-text-pdf-remove-toggle-document-icons) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:30 PLAN/S0834_settings-media-ocr-toggle-remove-label-suffix.md spec-arc Archive S0834 (settings-media-ocr-toggle-remove-label-suffix) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:31 PLAN/S0836_settings-general-remote-resource-icons-unify.md spec-arc Archive S0836 (settings-general-remote-resource-icons-unify) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:32 PLAN/S0838_send-to-icons-unify-settings-and-menus.md spec-arc Archive S0838 (send-to-icons-unify-settings-and-menus) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:33 PLAN/S0839_settings-player-delete-confirm-child-row-portrait.md spec-arc Archive S0839 (settings-player-delete-confirm-child-row-portrait) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:34 PLAN/S0840_settings-player-sorting-slideshow-group-remove-icon.md spec-arc Archive S0840 (settings-player-sorting-slideshow-group-remove-icon) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:35 PLAN/S0841_settings-management-canonical-feature-icons.md spec-arc Archive S0841 (settings-management-canonical-feature-icons) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:36 PLAN/S0845_browse-focus-position-command-targeting.md spec-arc Archive S0845 (browse-focus-position-command-targeting) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:37 PLAN/S0849_missing-ru-uk-resource-import-strings.md spec-arc Archive S0849 (missing-ru-uk-resource-import-strings) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:38 PLAN/S0853_bugfix-bgmusic-empty-playlist-crash-and-race.md spec-arc Archive S0853 (bugfix-bgmusic-empty-playlist-crash-and-race) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:39 PLAN/S0855_bugfix-xr-release-lateinit-crash.md spec-arc Archive S0855 (bugfix-xr-release-lateinit-crash) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:40 PLAN/S0856_bugfix-audiotile-controller-future-leak.md spec-arc Archive S0856 (bugfix-audiotile-controller-future-leak) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:41 PLAN/S0857_bugfix-audioservicecontroller-future-overwrite.md spec-arc Archive S0857 (bugfix-audioservicecontroller-future-overwrite) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:42 PLAN/S0863_bugfix-audio-empty-state-player-orphans.md spec-arc Archive S0863 (bugfix-audio-empty-state-player-orphans) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:43 PLAN/S0866_bugfix-sftp-pool-lock-domain-races.md spec-arc Archive S0866 (bugfix-sftp-pool-lock-domain-races) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:44 PLAN/S0870_bugfix-widget-runblocking-main-thread.md spec-arc Archive S0870 (bugfix-widget-runblocking-main-thread) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:45 PLAN/S0872_bugfix-translationmanager-not-released.md spec-arc Archive S0872 (bugfix-translationmanager-not-released) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:07:46 PLAN/S0875_bugfix-streamsnapshot-imagereader-race.md spec-arc Archive S0875 (bugfix-streamsnapshot-imagereader-race) -> temp/done/ [branch: DEBUG-v020]
2026-07-02 17:08:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt S0865 Guard against duplicate-player race post TS-probe suspension; extract buildSftpUri to shrink playSftpVideo below LongMethod [branch: DEBUG-v020]
2026-07-02 17:09:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt S0865 Guard against duplicate-player race post TS-probe suspension [branch: DEBUG-v020]
2026-07-02 17:10:51 PLAN/S0865_bugfix-ftpplayback-duplicate-player-race.md spec-check Audit S0865 -> Verified; PASS/WARN/FAIL 9/0/0 [branch: DEBUG-v020]
2026-07-02 17:14:13 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackHealthHelper.kt S0864 Stop/release ExoPlayer before MediaPlayer fallback; fix isUsingMediaPlayer set-then-reset ordering [branch: DEBUG-v020]
2026-07-02 17:15:30 PLAN/S0864_bugfix-playbackhealth-dual-player.md spec-check Audit S0864 -> Verified; PASS/WARN/FAIL 8/0/0 [branch: DEBUG-v020]
2026-07-02 17:18:52 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseInlineAudioManager.kt S0862 Add generation-token guard against duplicate-player race; release MediaPlayer on error path; rethrow CancellationException [branch: DEBUG-v020]
2026-07-02 17:21:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseInlineAudioManager.kt S0862 Add generation-token guard against duplicate-player race; release MediaPlayer on error path; rethrow CancellationException; extract buildInlineMediaPlayer to satisfy ThrowsCount [branch: DEBUG-v020]
2026-07-02 17:22:18 PLAN/S0862_bugfix-browse-inline-audio-race-and-error-leak.md spec-check Audit S0862 -> Verified; PASS/WARN/FAIL 9/0/0 [branch: DEBUG-v020]
2026-07-02 17:26:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt S0861 Add reentrancy guard in startRecording() and release() teardown hook [branch: DEBUG-v020]
2026-07-02 17:27:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0861 Release mic recording session on onPause - first real teardown edge for this manager [branch: DEBUG-v020]
2026-07-02 17:29:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt S0861 Release mic recording session on onPause - first real teardown edge for this manager [branch: DEBUG-v020]
2026-07-02 17:30:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainVoiceCaptureManager.kt S0861 Transfer pendingTempFile ownership to save() coroutine before launch, not in its finally [branch: DEBUG-v020]
2026-07-02 17:31:38 PLAN/S0861_bugfix-mic-capture-ownership-races.md spec-check Audit S0861 -> Verified; PASS/WARN/FAIL 9/0/0 [branch: DEBUG-v020]
2026-07-02 17:32:38 PLAN/spec-catalog.jsonl spec-next Session: 13 processed, 13 verified, 0 blocked (S0855,S0853,S0875,S0863,S0866,S0857,S0856,S0872,S0870,S0865,S0864,S0862,S0861) [branch: DEBUG-v020]
2026-07-02 17:40:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0859 Release previous video player/audio controller before dispatch; clear Glide target on release [branch: DEBUG-v020]
2026-07-02 17:41:54 PLAN/S0859_bugfix-standaloneviewmanager-release-contract-gaps.md spec-check Audit S0859 -> Verified; PASS/WARN/FAIL 8/0/0 [branch: DEBUG-v020]
2026-07-02 17:46:29 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt S0858 Guard reentrant start/stop and add last-resort teardown in QuickAudioRecorderService [branch: DEBUG-v020]
2026-07-02 17:47:56 PLAN/S0858_bugfix-quickrecorder-teardown-and-reentrancy.md spec-check Audit S0858 -> Verified; PASS/WARN/FAIL 7/0/0 [branch: DEBUG-v020]
2026-07-02 18:14:32 app_v2/src/main/java/com/sza/fastmediasorter/data/network/ConnectionThrottleManager.kt spec-all S0868: cancel stale 300ms videoPlayerResumeJob on activateVideoPlayerMode + re-check videoPlayerResources.isEmpty() under lock before clearing videoPlayerActive [branch: DEBUG-v020]
2026-07-02 18:21:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamInlineAudioManager.kt spec-all S0874: staleness guard in StreamInlineAudioManager service-play callback - stop just-started shared controller if currentSource changed during async connect (no orphaned playing player after stop) [branch: DEBUG-v020]
2026-07-02 18:30:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-all S0873: releaseActiveViewer() releases ALL initialized viewers (named pdf/epub lazy delegates + isInitialized guards) instead of type-gated on resolvedType - off-type PdfRenderer/PFD/WebView resurrected by a stale async load no longer leaks past teardown [branch: DEBUG-v020]
2026-07-02 18:41:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TtsReadAloudManager.kt spec-all S0871: release LyricsManager bound TextToSpeech on PlayerActivity teardown (releaseResources + LyricsManager.release) and confine TtsReadAloudManager state writes to main (@Volatile + Handler.post) - fixes leaked TTS ServiceConnection + cross-thread state race [branch: DEBUG-v020]
2026-07-02 18:48:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-all S0860: guard viewManager.release() with ::viewManager.isInitialized in StandalonePlayerActivity.onDestroy - prevents UninitializedPropertyAccessException on the default-player probe early-exit / first-frame destroy path [branch: DEBUG-v020]
2026-07-02 19:12:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-all S0851: re-arm persisted PlaybackOrderMode on timeline-ready after AudioPlaybackService reconnect (servicePlaybackListener.onTimelineChanged + one-shot guard) - fixes SHUFFLE lost on music resume; BlockNeedUserTest probe added [branch: DEBUG-v020]
2026-07-02 19:15:45 PLAN/spec-catalog.jsonl spec-next Session: 8 processed, 5 verified (S0868/S0874/S0873/S0871/S0860), 3 blocked/deferred (S0869 BlockQuestions, S0851 BlockNeedUserTest, S0876 drift-defer) [branch: DEBUG-v020]
2026-07-02 19:45:38 PLAN/S0869_bugfix-room-open-on-main-thread.md spec-quiz S0869: BlockQuestions -> Approved via quiz (2 questions) - Option 3 chosen (recovery untouched + Lazy inject + IO warm-up) [branch: DEBUG-v020]
2026-07-02 20:05:45 PLAN/S0722_macrobenchmark-baseline-profiles.md spec-all Auto-approve S0722 strategic spec [branch: DEBUG-v020]
2026-07-02 20:08:33 PLAN/S0815_section-icons-in-docs-and-site/INDEX.md spec-tech Tactical plan S0815: icon-inventory generator + SVG(currentColor) export + trilingual legend + drift gate (4 phases); resolved 6 open questions D1-D6 [branch: DEBUG-v020]
2026-07-02 20:10:04 PLAN/S0769_camera-landscape-top-right-overlap.md spec-all S0769: rework strategic spec + Last Audit; reported top-right landscape overlap traced to removed res/layout-land (pre-S0754), not reproducible in current portrait-lock + icon-rotation design; parked BlockNeedUserTest for device confirmation, no code change [branch: DEBUG-v020]
2026-07-02 20:13:05 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt spec-all S0869: warm-open Room off the main thread in FastMediaSorterApp.onCreate (inject dagger.Lazy, IO .get() before MainActivity touches the DB); Lazy-wrap resourceRepository in MainViewModel + ResourceOrderManager/ResourceNavigationCoordinator/ResourceScanCoordinator so VM construction no longer forces provideAppDatabase() via that path. Fixes main-thread SQLite open + migration ladder on cold start. [branch: DEBUG-v020]
2026-07-02 20:13:23 PLAN/S0722_macrobenchmark-baseline-profiles/INDEX.md spec-tech Create tactical plan for S0722 [branch: DEBUG-v020]
2026-07-02 20:13:23 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_01__benchmark-build-wiring.md spec-tech Phase 01: benchmark-build-wiring [branch: DEBUG-v020]
2026-07-02 20:13:23 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_02__benchmark-bootstrap.md spec-tech Phase 02: benchmark-bootstrap [branch: DEBUG-v020]
2026-07-02 20:13:24 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_03__macrobenchmark-journeys.md spec-tech Phase 03: macrobenchmark-journeys [branch: DEBUG-v020]
2026-07-02 20:13:24 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_04__baseline-profile-commands.md spec-tech Phase 04: baseline-profile-commands [branch: DEBUG-v020]
2026-07-02 20:13:24 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v020]
2026-07-02 20:13:25 PLAN/S0722_macrobenchmark-baseline-profiles.md spec-tech Status -> Tactical [branch: DEBUG-v020]
2026-07-02 20:16:31 settings.gradle.kts benchmark module include Add benchmark module to Gradle settings [branch: DEBUG-v020]
2026-07-02 20:16:32 build.gradle.kts baseline profile root plugin Register baseline profile plugin for benchmark tooling [branch: DEBUG-v020]
2026-07-02 20:16:32 benchmark/build.gradle.kts benchmark module config Add benchmark producer module Gradle config [branch: DEBUG-v020]
2026-07-02 20:16:33 benchmark/src/main/AndroidManifest.xml benchmark module manifest Add benchmark module manifest stub [branch: DEBUG-v020]
2026-07-02 20:17:48 app_v2/build.gradle.kts benchmark build type Add release-like benchmark build type [branch: DEBUG-v020]
2026-07-02 20:17:49 app_v2/src/benchmark/AndroidManifest.xml benchmark profileable overlay Add benchmark build type profileable manifest overlay [branch: DEBUG-v020]
2026-07-02 20:21:20 build.gradle.kts baseline profile plugin version Upgrade baseline profile plugin for AGP 9 benchmark compatibility [branch: DEBUG-v020]
2026-07-02 20:21:20 benchmark/build.gradle.kts benchmark library versions Upgrade benchmark dependencies for AGP 9 baseline profile compatibility [branch: DEBUG-v020]
2026-07-02 20:22:22 benchmark/build.gradle.kts benchmark dependency DSL Use explicit androidTestImplementation adds for AGP 9 test module compatibility [branch: DEBUG-v020]
2026-07-02 20:22:46 benchmark/build.gradle.kts benchmark implementation configs Use implementation dependencies for self-instrumenting benchmark module [branch: DEBUG-v020]
2026-07-02 20:23:49 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_01__benchmark-build-wiring.md phase 01 closure Record Phase 01 completion after benchmark assemble validation [branch: DEBUG-v020]
2026-07-02 20:23:49 PLAN/S0722_macrobenchmark-baseline-profiles/INDEX.md phase status tracking Close Phase 01 and start Phase 02 after benchmark assemble pass [branch: DEBUG-v020]
2026-07-02 20:23:49 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_02__benchmark-bootstrap.md phase 02 start Mark benchmark bootstrap phase as in progress [branch: DEBUG-v020]
2026-07-02 20:27:21 PLAN/S0820_video-fullscreen-open-option.md spec Add strategic spec S0820 for video-fullscreen-open-option [branch: DEBUG-v020]
2026-07-02 20:38:08 app_v2/src/benchmark/AndroidManifest.xml benchmark overlay components Register benchmark-only setup receiver and route activity [branch: DEBUG-v020]
2026-07-02 20:38:08 app_v2/src/benchmark/java/com/sza/fastmediasorter/perf/BenchmarkSetupReceiver.kt benchmark setup receiver Prepare benchmark app state by skipping welcome and provisioning default resources [branch: DEBUG-v020]
2026-07-02 20:38:09 app_v2/src/benchmark/java/com/sza/fastmediasorter/perf/BenchmarkContract.kt benchmark contract Add benchmark-only action and extra constants [branch: DEBUG-v020]
2026-07-02 20:38:09 app_v2/src/benchmark/java/com/sza/fastmediasorter/perf/BenchmarkRouteActivity.kt benchmark route activity Route benchmark journeys into existing browse and player entry flows [branch: DEBUG-v020]
2026-07-02 20:38:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt player trace anchors Emit player ready and back-navigation trace sections for benchmark flows [branch: DEBUG-v020]
2026-07-02 20:38:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt browse ready trace anchor Emit one-shot browse readiness trace after the first committed content bind [branch: DEBUG-v020]
2026-07-02 20:38:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt player ready callback trace Trigger the player readiness benchmark trace from playback-ready callback [branch: DEBUG-v020]
2026-07-02 20:38:24 PLAN/S0820_video-fullscreen-open-option/INDEX.md spec-tech Create tactical plan for S0820 [branch: DEBUG-v020]
2026-07-02 20:38:24 PLAN/S0820_video-fullscreen-open-option/PHASE_01__settings-model-persistence.md spec-tech Phase 01: settings-model-persistence [branch: DEBUG-v020]
2026-07-02 20:38:24 PLAN/S0820_video-fullscreen-open-option/PHASE_02__device-profile-defaults.md spec-tech Phase 02: device-profile-defaults [branch: DEBUG-v020]
2026-07-02 20:38:24 PLAN/S0820_video-fullscreen-open-option/PHASE_03__video-settings-ui.md spec-tech Phase 03: video-settings-ui [branch: DEBUG-v020]
2026-07-02 20:38:24 PLAN/S0820_video-fullscreen-open-option/PHASE_04__player-launch-fullscreen-gate.md spec-tech Phase 04: player-launch-fullscreen-gate [branch: DEBUG-v020]
2026-07-02 20:38:24 PLAN/S0820_video-fullscreen-open-option/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v020]
2026-07-02 20:38:24 PLAN/S0820_video-fullscreen-open-option.md spec-tech Status -> Tactical [branch: DEBUG-v020]
2026-07-02 20:40:32 app_v2/src/benchmark/java/com/sza/fastmediasorter/perf/BenchmarkContract.kt benchmark contract Add benchmark-only action and extra constants [branch: DEBUG-v020]
2026-07-02 20:41:40 app_v2/src/benchmark/java/com/sza/fastmediasorter/perf/BenchmarkRouteActivity.kt benchmark route activity Route benchmark journeys into existing browse and player entry flows [branch: DEBUG-v020]
2026-07-02 20:43:16 app_v2/src/benchmark/java/com/sza/fastmediasorter/perf/BenchmarkRouteActivity.kt benchmark route activity Route benchmark journeys into existing browse and player entry flows [branch: DEBUG-v020]
2026-07-02 20:44:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseActivity.kt browse ready trace anchor Emit one-shot browse readiness trace after the first committed content bind [branch: DEBUG-v020]
2026-07-02 20:46:00 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0820 phase01: add openVideoInFullscreen field [branch: DEBUG-v020]
2026-07-02 20:46:00 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/SettingsRepositoryImpl.kt spec-dev S0820 phase01: persist openVideoInFullscreen in DataStore [branch: DEBUG-v020]
2026-07-02 20:46:00 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupData.kt spec-dev S0820 phase01: add openVideoInFullscreen to backup schema [branch: DEBUG-v020]
2026-07-02 20:46:00 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/BackupMapper.kt spec-dev S0820 phase01: map openVideoInFullscreen both directions [branch: DEBUG-v020]
2026-07-02 20:46:00 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ImportSettingsUseCase.kt spec-dev S0820 phase01: import openVideoInFullscreen from settings JSON [branch: DEBUG-v020]
2026-07-02 20:46:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-dev S0820 phase01: include openVideoInFullscreen in resetMediaSection [branch: DEBUG-v020]
2026-07-02 20:46:00 PLAN/S0820_video-fullscreen-open-option/PHASE_01__settings-model-persistence.md spec-dev S0820 phase01 done - settings-model-persistence [branch: DEBUG-v020]
2026-07-02 20:46:12 PLAN/S0722_macrobenchmark-baseline-profiles/INDEX.md phase 02 blocker state Record Phase 02 code completion and external validation blocker [branch: DEBUG-v020]
2026-07-02 20:46:13 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_02__benchmark-bootstrap.md phase 02 completion notes Mark Phase 02 steps done and capture external compile blocker [branch: DEBUG-v020]
2026-07-02 20:48:18 build.gradle.kts baseline profile plugin version bump Align benchmark plugin with AGP 9 support [branch: DEBUG-v020]
2026-07-02 20:48:19 settings.gradle.kts benchmark module include Register benchmark test module [branch: DEBUG-v020]
2026-07-02 20:48:20 benchmark/build.gradle.kts benchmark module wiring Add macrobenchmark self-instrumenting module [branch: DEBUG-v020]
2026-07-02 20:48:21 PLAN/S0879_device-profile-preset-csv-gap.md spec Scaffold strategic spec skeleton S0879 [branch: DEBUG-v020]
2026-07-02 20:49:07 benchmark/src/main/AndroidManifest.xml benchmark runner manifest Declare test package runner settings [branch: DEBUG-v020]
2026-07-02 20:49:20 app_v2/build.gradle.kts benchmark build type Add benchmark build type derived from release [branch: DEBUG-v020]
2026-07-02 20:50:07 app_v2/src/benchmark/AndroidManifest.xml benchmark target manifest Expose benchmark-only profileable and routing components [branch: DEBUG-v020]
2026-07-02 20:50:20 app_v2/src/benchmark/java/com/sza/fastmediasorter/perf/BenchmarkContract.kt benchmark journey contract Define benchmark actions extras and journey ids [branch: DEBUG-v020]
2026-07-02 20:52:21 PLAN/spec-catalog.jsonl spec-next Session: 1 processed (S0869 Approved->BlockNeedUserTest), loop STOPPED early - active concurrent implementer detected on S0815 (icon-inventory.json + IconInventoryExportTest.kt being written live), standing down to avoid shared-state corruption. [branch: DEBUG-v020]
2026-07-02 20:52:35 PLAN/S0880_settings-default-app-buttons-dialog.md spec Scaffold strategic spec skeleton S0880 [branch: DEBUG-v020]
2026-07-02 20:53:32 app_v2/src/main/assets/device_profile_presets.csv spec-dev S0820 phase02: add openVideoInFullscreen preset row [branch: DEBUG-v020]
2026-07-02 20:53:32 app_v2/src/main/java/com/sza/fastmediasorter/data/preset/DeviceProfilePresetApplier.kt spec-dev S0820 phase02: apply openVideoInFullscreen preset override [branch: DEBUG-v020]
2026-07-02 20:53:32 PLAN/S0820_video-fullscreen-open-option/PHASE_02__device-profile-defaults.md spec-dev S0820 phase02 done - device-profile-defaults [branch: DEBUG-v020]
2026-07-02 20:53:47 PLAN/S0881_split-settings-toggles-portrait.md spec Scaffold strategic spec skeleton S0881 [branch: DEBUG-v020]
2026-07-02 20:56:19 app_v2/src/main/res/values/strings_settings.xml spec-dev S0820 phase03: add open-video-fullscreen title/desc strings (EN) [branch: DEBUG-v020]
2026-07-02 20:56:19 app_v2/src/main/res/values-ru/strings_settings.xml spec-dev S0820 phase03: add open-video-fullscreen title/desc strings (RU) [branch: DEBUG-v020]
2026-07-02 20:56:19 app_v2/src/main/res/values-uk/strings_settings.xml spec-dev S0820 phase03: add open-video-fullscreen title/desc strings (UK) [branch: DEBUG-v020]
2026-07-02 20:56:19 app_v2/src/main/res/layout/fragment_settings_video.xml spec-dev S0820 phase03: add rowOpenVideoInFullscreen toggle (portrait) [branch: DEBUG-v020]
2026-07-02 20:56:19 app_v2/src/main/res/layout-land/fragment_settings_video.xml spec-dev S0820 phase03: add rowOpenVideoInFullscreen toggle (landscape) [branch: DEBUG-v020]
2026-07-02 20:56:19 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt spec-dev S0820 phase03: wire rowOpenVideoInFullscreen bind/observe [branch: DEBUG-v020]
2026-07-02 20:56:19 PLAN/S0820_video-fullscreen-open-option/PHASE_03__video-settings-ui.md spec-dev S0820 phase03 done - video-settings-ui [branch: DEBUG-v020]
2026-07-02 20:57:20 PLAN/S0882_collapsible-groups-photo-video-recorder.md spec Scaffold strategic spec skeleton S0882 [branch: DEBUG-v020]
2026-07-02 20:59:05 PLAN/S0883_reorder-settings-groups-copy-delete.md spec Scaffold strategic spec skeleton S0883 [branch: DEBUG-v020]
2026-07-02 21:00:23 PLAN/S0884_split-delete-confirm-toggles-portrait.md spec Scaffold strategic spec skeleton S0884 [branch: DEBUG-v020]
2026-07-02 21:00:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt spec-dev S0820 phase04: compute enterFullscreenOnOpen gate for video taps [branch: DEBUG-v020]
2026-07-02 21:00:51 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0820 phase04: thread enterFullscreen through createPanelIntent; generalize launch gate [branch: DEBUG-v020]
2026-07-02 21:00:52 PLAN/S0820_video-fullscreen-open-option/PHASE_04__player-launch-fullscreen-gate.md spec-dev S0820 phase04 done - player-launch-fullscreen-gate [branch: DEBUG-v020]
2026-07-02 21:05:31 PLAN/S0885_app-icons-send-to-toggles.md spec Scaffold strategic spec skeleton S0885 [branch: DEBUG-v020]
2026-07-02 21:07:07 PLAN/S0886_icons-black-screen-pip-toggles.md spec Scaffold strategic spec skeleton S0886 [branch: DEBUG-v020]
2026-07-02 21:07:55 PLAN/S0887_icons-rename-delete-toggles.md spec Scaffold strategic spec skeleton S0887 [branch: DEBUG-v020]
2026-07-02 21:08:43 PLAN/S0888_icon-favorites-toggle.md spec Scaffold strategic spec skeleton S0888 [branch: DEBUG-v020]
2026-07-02 21:10:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt spec-dev S0820: insert BlockNeedUserTest debug tag on toggle change [branch: DEBUG-v020]
2026-07-02 21:10:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt spec-dev S0820: insert BlockNeedUserTest debug tag on gate decision [branch: DEBUG-v020]
2026-07-02 21:10:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-dev S0820: insert BlockNeedUserTest debug tag on fullscreen entry [branch: DEBUG-v020]
2026-07-02 21:10:45 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt spec-dev S0820: wrap comment to fix detekt MaxLineLength [branch: DEBUG-v020]
2026-07-02 21:18:02 docs/settings/settings-manifest.json spec-dev S0820 phase05: regenerate settings manifest with rowOpenVideoInFullscreen [branch: DEBUG-v020]
2026-07-02 21:18:02 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/RestoreFromGoogleDriveUseCaseTest.kt spec-dev S0820 phase05: fix unrelated pre-existing any() type-inference ambiguity blocking manifest test [branch: DEBUG-v020]
2026-07-02 21:18:02 docs/settings/settings-annotations.json spec-dev S0820 phase05: add rowOpenVideoInFullscreen annotation EN/RU/UK [branch: DEBUG-v020]
2026-07-02 21:18:02 docs/SETTINGS_REFERENCE.md spec-dev S0820 phase05: re-render settings reference (EN) [branch: DEBUG-v020]
2026-07-02 21:18:02 docs/SETTINGS_REFERENCE_RU.md spec-dev S0820 phase05: re-render settings reference (RU) [branch: DEBUG-v020]
2026-07-02 21:18:02 docs/SETTINGS_REFERENCE_UK.md spec-dev S0820 phase05: re-render settings reference (UK) [branch: DEBUG-v020]
2026-07-02 21:18:02 docs/ALL_FEATURES.jsonl spec-dev S0820 phase05: record video-player.open-in-fullscreen-from-browse capability [branch: DEBUG-v020]
2026-07-02 21:18:02 PLAN/S0820_video-fullscreen-open-option/PHASE_05__docs-catalog-cleanup.md spec-dev S0820 phase05 done - docs-catalog-cleanup [branch: DEBUG-v020]
2026-07-02 21:31:29 app_v2/src/benchmark/java/com/sza/fastmediasorter/perf/BenchmarkSetupReceiver.kt benchmark app preparation Skip welcome and provision default resources for benchmarks [branch: DEBUG-v020]
2026-07-02 21:33:17 PLAN/S0827_redesign-player-settings-dialog-canonical-rows.md spec-all Compact spec: S0827 approved and implemented [branch: DEBUG-v020]
2026-07-02 21:33:17 app_v2/src/main/res/layout/dialog_player_settings.xml spec-all Player settings dialog: title on own line, Cancel/Apply moved to bottom row (mirrors S0813) [branch: DEBUG-v020]
2026-07-02 21:33:18 app_v2/src/main/res/layout-land/dialog_player_settings.xml spec-all Player settings dialog landscape: same header/actions relayout as portrait [branch: DEBUG-v020]
2026-07-02 21:33:18 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/PlayerSettingsDialog.kt spec-all S0827 debug verification tag at dialog onCreate [branch: DEBUG-v020]
2026-07-02 21:35:14 app_v2/build.gradle.kts standard benchmark target gating Restrict benchmark build type to the strategic standard target and add benchmark-only Chucker classpath [branch: DEBUG-v020]
2026-07-02 21:35:14 app_v2/src/benchmark/java/com/sza/fastmediasorter/ui/settings/IntegrationTestDialog.kt benchmark build-type stub Add benchmark-only IntegrationTestDialog stub so release-like benchmark builds avoid debug-only settings references [branch: DEBUG-v020]
2026-07-02 21:35:14 benchmark/build.gradle.kts benchmark module compile alignment Align the self-instrumenting benchmark module to Java 17 and compile benchmark sources from the main source set [branch: DEBUG-v020]
2026-07-02 21:35:14 benchmark/src/main/java/com/sza/fastmediasorter/benchmark/BenchmarkAppSetup.kt phase 03 shared benchmark setup Add benchmark app-preparation helper and deterministic journey launcher scaffolding [branch: DEBUG-v020]
2026-07-02 21:35:14 benchmark/src/main/java/com/sza/fastmediasorter/benchmark/StartupBenchmarks.kt phase 03 startup benchmark Measure cold startup of the standard benchmark target with MacrobenchmarkRule [branch: DEBUG-v020]
2026-07-02 21:35:14 benchmark/src/main/java/com/sza/fastmediasorter/benchmark/NavigationBenchmarks.kt phase 03 navigation benchmarks Measure browse readiness player readiness and player back-navigation trace anchors [branch: DEBUG-v020]
2026-07-02 21:35:14 benchmark/src/main/java/com/sza/fastmediasorter/benchmark/BaselineProfileGenerator.kt phase 04 baseline profile generator Collect baseline profiles from the same startup and navigation journeys as the macrobenchmark suite [branch: DEBUG-v020]
2026-07-02 21:35:14 scripts/builders/run-standard-macrobenchmark.ps1 phase 04 benchmark wrapper Add a stable local wrapper for the standard connected macrobenchmark suite [branch: DEBUG-v020]
2026-07-02 21:35:14 scripts/builders/generate-standard-baseline-profile.ps1 phase 04 baseline profile wrapper Add a stable local wrapper for standard baseline profile collection [branch: DEBUG-v020]
2026-07-02 21:35:14 a.ps1 phase 04 benchmark aliases Expose the macrobenchmark and baseline profile wrappers through mb and gbp aliases [branch: DEBUG-v020]
2026-07-02 21:35:14 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_02__benchmark-bootstrap.md phase 02 resolved status Mark Phase 02 done after standardBenchmark compile proof replaced the unrelated flavor blocker [branch: DEBUG-v020]
2026-07-02 21:35:14 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_03__macrobenchmark-journeys.md phase 03 completion notes Record implemented benchmark journeys and compile proof for the self-instrumenting module [branch: DEBUG-v020]
2026-07-02 21:35:14 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_04__baseline-profile-commands.md phase 04 blocker state Record baseline-profile scaffolding completion and the missing-device blocker for runtime proof [branch: DEBUG-v020]
2026-07-02 21:35:14 PLAN/S0722_macrobenchmark-baseline-profiles/INDEX.md phase progress rollover Advance S0722 tactical progress through Phase 04 and record the current external blocker [branch: DEBUG-v020]
2026-07-02 21:39:50 PLAN/S0815_section-icons-in-docs-and-site.md spec-all Verified iter1: icon inventory + SVG assets + trilingual legend + drift gate [branch: DEBUG-v020]
2026-07-02 21:39:50 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/ResourceTypeIconMap.kt spec-all S0815 enumerable icon registries (OsShortcutCatalog.all + ResourceTypeIconMap) + IconInventoryExportTest -> icon-inventory.json [branch: DEBUG-v020]
2026-07-02 21:39:50 scripts/docs/export-icon-svgs.ps1 spec-all S0815 docs icon tooling: SVG(currentColor) export + legend renderer + assert-icon-inventory-sync gate [branch: DEBUG-v020]
2026-07-02 21:39:50 docs/ICON_LEGEND.md spec-all S0815 trilingual icon legend EN/RU/UK (117 rows) + icons convention README + DOCS_MAP link [branch: DEBUG-v020]
2026-07-02 21:41:18 .mcp.json config Optimize mobile-mcp to run globally installed package via Node directly, avoiding npx [branch: DEBUG-v020]
2026-07-02 21:41:22 docs/PERFETTO_PLAYBOOK.md S0722 Add perf playbook [branch: DEBUG-v020]
2026-07-02 21:41:22 docs/AGENT_COST_PLAYBOOK.md docs Add subagent MCP isolation rule to CLAUDE.md, AGENTS.md, and AGENT_COST_PLAYBOOK.md to prevent duplicate MCP servers [branch: DEBUG-v020]
2026-07-02 21:41:22 docs/DEV_OPS.md S0722 Add perf commands to ops docs [branch: DEBUG-v020]
2026-07-02 21:41:23 docs/CODE_AUDIT_PROTOCOL.md S0722 Record perf harness in audit protocol [branch: DEBUG-v020]
2026-07-02 21:41:24 docs/ALL_FEATURES.jsonl S0722 Record perf harness capability [branch: DEBUG-v020]
2026-07-02 21:41:26 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_05__docs-catalog-cleanup.md S0722 Close phase 05 docs cleanup [branch: DEBUG-v020]
2026-07-02 21:41:27 PLAN/S0722_macrobenchmark-baseline-profiles/INDEX.md S0722 Update tactical progress after phase 05 [branch: DEBUG-v020]
2026-07-02 21:42:13 docs/DEV_OPS.md S0722 Add wrapper script names to ops docs [branch: DEBUG-v020]
2026-07-02 21:42:23 PLAN/S0722_macrobenchmark-baseline-profiles/PHASE_05__docs-catalog-cleanup.md S0722 Finalize phase 05 done criteria [branch: DEBUG-v020]
2026-07-02 22:02:47 app_v2/src/main/res/layout/fragment_settings_streams.xml Settings/Media/Streams group layout S0835: streams group - portrait selectors on own inline rows, clear+open buttons on one row (portrait+landscape) [branch: DEBUG-v020]
2026-07-02 22:07:29 scripts/streams/collect-stream-candidates.ps1 S0843 webcam seeds S0843: refresh stale Get-WebcamSeeds - replace 3 dead NASA/DW seeds with 12 deep-signal-verified 24/7 public HLS feeds (DW/France24/AlJazeera/CGTN/InWonder/WildEarth/RedBull/AKC/30A) [branch: DEBUG-v020]
2026-07-02 22:16:26 PLAN/S0837_screenshot-draw-save-overwrite-original-by-default.md spec-all S0837: screenshot Open-in-draw default save overwrites the original in place; Save-as still writes a new file [branch: DEBUG-v020]
2026-07-02 22:35:10 PLAN/S0844_camera-capture-activity-detekt-baseline-drift.md spec Add strategic spec S0844 for camera-capture-activity-detekt-baseline-drift [branch: DEBUG-v020]
2026-07-02 22:42:39 PLAN/S0844_camera-capture-activity-detekt-baseline-drift/INDEX.md spec-tech Create 8-phase tactical plan for S0844 (CameraCaptureActivity detekt decomposition); status -> Tactical [branch: DEBUG-v020]
2026-07-02 23:26:21 PLAN/S0844_camera-capture-activity-detekt-baseline-drift/INDEX.md spec-dev Complete 8-phase tactical plan for S0844 [branch: DEBUG-v020]
2026-07-02 23:26:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-dev S0844: decompose into 6 helper classes, fix mechanical detekt findings; class now clears LargeClass/TooManyFunctions for real [branch: DEBUG-v020]
2026-07-02 23:26:21 config/detekt/baseline-app_v2.xml spec-dev S0844: remove 3 stale baseline entries keyed to CameraCaptureActivity old supertype signature [branch: DEBUG-v020]
2026-07-02 23:30:47 PLAN/S0844_camera-capture-activity-detekt-baseline-drift.md spec-check Audit S0844 -> Verified; PASS/WARN/FAIL/MANUAL/EXEMPT 17/0/0/1/2 [branch: DEBUG-v020]
2026-07-02 23:53:55 PLAN/S0876_bugfix-welcome-enableall-lost-update.md spec-all S0876 verified: transform-overload mutex fix confirmed in tree; root cause, fix and Last Audit recorded [branch: DEBUG-v020]
2026-07-02 23:53:55 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ApplyProfilePresetUseCaseTest.kt spec-all Align stale no-overrides test with identity-transform contract; drop dead captureTransformResult helper (S0876) [branch: DEBUG-v020]
2026-07-03 00:02:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt spec-all S0877: guard detached-fragment dismiss in VM save callback (isAdded/isDetached), cookie scrub stays unconditional [branch: DEBUG-v020]
2026-07-03 00:03:04 app_v2/src/main/java/com/sza/fastmediasorter/data/network/SmbConnectionManager.kt spec-all S0867: timeout counters to AtomicInteger/AtomicLong, thresholds judged on own increment, CAS auto-reset cooldown [branch: DEBUG-v020]
2026-07-03 00:06:03 PLAN/S0877_bugfix-webviewauth-dismiss-detached-fragment.md spec-all S0877 verified: detached-fragment dismiss guard implemented; root cause, fix and Last Audit recorded [branch: DEBUG-v020]
2026-07-03 00:07:03 PLAN/S0867_bugfix-smb-timeout-counter-race.md spec-all S0867 verified: SMB timeout counters race fixed with atomics + CAS cooldown; root cause, fix and Last Audit recorded [branch: DEBUG-v020]
2026-07-03 00:11:57 scripts/spec_catalog/close-and-log.ps1 close-and-log Accept single JSON-array string as -DevLogs transport form (pwsh -File binds only first array element); fixes root cause of wrapper-script workarounds [branch: DEBUG-v020]
2026-07-03 00:18:34 scripts/spec_catalog/drift-check.ps1 spec-next Fix drift-check false positive: exclude dev/CHANGELOG.md and .claude/ from git log -S (scaffold log lines flagged fresh Drafts as DRIFT) [branch: DEBUG-v020]
2026-07-03 00:22:04 PLAN/S0879_device-profile-preset-csv-gap.md spec-all S0879 Draft -> Verified: 6 missing preset fields resolved as explicit no-override rows (family precedents, no owner input needed) [branch: DEBUG-v020]
2026-07-03 00:22:04 app_v2/src/main/assets/device_profile_presets.csv spec-all Append 6 no-override rows via check_device_profile_presets.ps1 -AddMissing; checker now CONSISTENT 187/187 [branch: DEBUG-v020]
2026-07-03 00:23:34 PLAN/S0848_post-change-runtime-optimization.md spec-all S0848 Implemented -> Verified: re-audit confirmed incremental scan, parallel detekt, in-process neuroslop, delta gates all live; criterion #5 tail owned by S0850 [branch: DEBUG-v020]
2026-07-03 00:34:03 PLAN/S0850_changedfiles-delta-neuroslop-listener.md spec-all S0850 Approved -> Verified: -ChangedFiles delta extended to all 8 neuroslop children + listener-symmetry; harness 29/29 (parity, clean PASS, seeded FAIL, byte-exact restore) [branch: DEBUG-v020]
2026-07-03 00:34:03 scripts/quality/assert-neuroslop.ps1 spec-all S0850: 8 children + umbrella accept -ChangedFiles (delta vs HEAD via shared helper, own count logic as callback); listener-symmetry gains Get-FileImbalance shared by full scan and delta [branch: DEBUG-v020]
2026-07-03 00:34:03 scripts/post-change.ps1 spec-all S0850: neuroslop-gate + listener-symmetry-gate now FATAL per-file delta under -ScopeToFile (was advisory full scan); only icon-inventory-sync remains advisory [branch: DEBUG-v020]
2026-07-03 00:39:08 PLAN/S0889_docs-icons-emoji-to-inline.md spec-all S0889 Draft -> BlockQuestions: vocabulary research done - most emoji slots have no canonical app icon; 3 decision-ready owner questions written into spec [branch: DEBUG-v020]
2026-07-03 00:45:36 PLAN/S0878_audit-mass-2026-07-02-followup.md spec-all S0878 Draft -> Verified: P2 appendix triaged 65/65 - 12 thematic cluster drafts S0893-S0904 + coverage-tail S0905 registered, 3 WebView findings folded into S0892, 0 dropped [branch: DEBUG-v020]
2026-07-03 00:51:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/CloudProviderIconMap.kt S0890 New CloudProviderIconMap: shared cloud-provider icon refinement extracted from ConnectionBadgeMapper/ResourceIconComposer duplicates [branch: DEBUG-v020]
2026-07-03 00:52:22 app_v2/src/main/java/com/sza/fastmediasorter/ui/icon/ConnectionBadgeMapper.kt S0890 Dedup ResourceType->icon copies onto ResourceTypeIconMap: badge mapper, composer, shortcuts, picker, widget delegate to the shared map; CLOUD provider table extracted to CloudProviderIconMap; widget stream icon aligned to ic_cast [branch: DEBUG-v020]
2026-07-03 00:52:22 PLAN/S0890_resource-type-icon-map-dedup.md spec-all S0890 Draft -> Verified: 5 live copies deduped (spec knew 2), divergences documented, fk + delta gates + scoped detekt clean [branch: DEBUG-v020]
2026-07-03 00:55:11 app_v2/src/main/res/layout/dialog_list_selection.xml S0846 Replace raw Widget.Material3.Button.TextButton with named Widget.FastMediaSorter.Button.Text on btnClear/btnCancel (Button Taxonomy; DialogCancel exempt for selection pickers) [branch: DEBUG-v020]
2026-07-03 00:55:17 PLAN/S0846_listselectiondialog-cancel-button-taxonomy.md spec-all S0846 Draft -> Verified: premise corrected (DialogCancel exempt for selection picker), real deviation fixed - raw Material3 style refs replaced with named Button.Text role [branch: DEBUG-v020]
2026-07-03 00:56:23 logo-dark.png S0891 Delete orphaned repo-root logo-dark.png + logo-light.png (0 inbound refs across tracked tree, config, workflows; Rule 20 dead-weight) [branch: DEBUG-v020]
2026-07-03 00:56:23 PLAN/S0891_orphaned-root-logo-assets.md spec-all S0891 Draft -> Verified: orphan check executed per spec checklist, both PNGs removed [branch: DEBUG-v020]
2026-07-03 00:58:55 app_v2/src/main/res/layout/fragment_settings_general.xml S0888 Add ic_resource_favorites feature icon to Enable Favorites toggle (str_icon, portrait + land) matching the established settings-toggle icon pattern [branch: DEBUG-v020]
2026-07-03 01:02:51 app_v2/src/main/res/layout/fragment_settings_general.xml S0888 Add ic_resource_favorites feature icon to Enable Favorites toggle (str_icon, portrait + land) matching the established settings-toggle icon pattern [branch: DEBUG-v020]
2026-07-03 01:03:27 app_v2/src/main/res/layout-land/fragment_settings_general.xml S0888 Landscape counterpart: same ic_resource_favorites str_icon on rowEnableFavorites (orientation parity) [branch: DEBUG-v020]
2026-07-03 01:03:27 PLAN/S0888_icon-favorites-toggle.md spec-all S0888 Draft -> Verified: favorites feature icon added to Enable Favorites toggle (portrait+land), fr green, settings-doc-sync PASS (no manifest change) [branch: DEBUG-v020]
2026-07-03 01:13:03 PLAN/S0906_cloud-title-internal-id.md spec Scaffold strategic spec skeleton S0906 [branch: DEBUG-v020]
2026-07-03 01:16:26 scripts/docs/lib/vectordrawable-svg.ps1 S0889 Pipeline foundation: extract VectorDrawable->SVG converter to shared lib (byte-identical, S0815 gate green); install cairosvg for SVG->PNG; prove feature-icon convertibility [branch: DEBUG-v020]
2026-07-03 01:18:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt S0894 fixed standalone host lifecycle teardown, rename, and lazy-release edges [branch: DEBUG-v020]
2026-07-03 01:30:14 PLAN/S0889_docs-icons-emoji-to-inline.md spec-all S0889 In Progress -> Verified: emoji replaced by app icons across icon slots (landing cards inline-SVG, howto/DOCS_MAP/SETTINGS_REFERENCE PNG), trilingual; residual JS-filter emoji parked S0907 [branch: DEBUG-v020]
2026-07-03 01:30:14 scripts/docs/export-doc-icon-pngs.ps1 S0889 Doc-icon asset pipeline: doc-icon-map.json + shared vectordrawable-svg lib + cairosvg rasterizer -> 27 drawables x svg/png under docs/icons/doc/; apply-doc-icons.ps1 rewrites landing+markdown; render-settings-reference.ps1 gains per-section icons [branch: DEBUG-v020]
2026-07-03 01:30:14 scripts/quality/assert-doc-icons-sync.ps1 S0889 New drift gate: map<->asset coverage, landing card-icon spans emoji-free with inline svg, referenced PNGs exist [branch: DEBUG-v020]
2026-07-03 01:31:00 PLAN/spec-catalog.jsonl spec-next Session: 12 processed (S0879 S0848 S0850 S0889 S0878 S0890 S0846 S0891 S0888 + drift-check fix, doc-icon pipeline), 11/11 release-gating Verified, S0907 parked [branch: DEBUG-v020]
2026-07-03 01:53:26 PLAN/S0894_standalone-player-misc-p2.md spec-check Independent re-audit S0894 -> Verified; PASS/WARN/FAIL 5/0/0 [branch: DEBUG-v020]
2026-07-03 01:54:02 docs/icons/doc-icon-map.json landing card-icon slots (index*.html, doc-icon-map) S0889 addendum: meta/nav/legal landing cards (What’s New..Terms of Service, 16) go text-only, no icon - owner reversal of nearest-drawable-for-all; pruned 3 orphaned drawables [branch: DEBUG-v020]
2026-07-03 01:56:43 PLAN/S0889_docs-icons-emoji-to-inline.md spec-check Audit S0889 addendum -> Verified; PASS/WARN/FAIL 10/0/0 (MANUAL 1, EXEMPT 1) [branch: DEBUG-v020]
2026-07-03 02:09:46 PLAN/S0893_player-release-edges-p2.md spec-dev All 4 phases done; status -> BlockNeedUserTest [branch: DEBUG-v020]
2026-07-03 02:09:46 PLAN/S0893_player-release-edges-p2/INDEX.md spec-tech Tactical plan: 4 phases, 12 files [branch: DEBUG-v020]
2026-07-03 02:09:46 PLAN/S0893_player-release-edges-p2/PHASE_01__audio-empty-state-lifecycle.md spec-dev Phase 01 done: AudioEmptyStateController lifecycle unification [branch: DEBUG-v020]
2026-07-03 02:09:46 PLAN/S0893_player-release-edges-p2/PHASE_02__video-lifecycle-helper-release.md spec-dev Phase 02 done: VideoPlayerLifecycleHelper release-contract fixes [branch: DEBUG-v020]
2026-07-03 02:09:46 PLAN/S0893_player-release-edges-p2/PHASE_03__standalone-video-host-release.md spec-dev Phase 03 done: standalone video-host background release [branch: DEBUG-v020]
2026-07-03 02:09:46 PLAN/S0893_player-release-edges-p2/PHASE_04__docs-catalog-cleanup.md spec-dev Phase 04 done: probe tags + mechanical closure [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioEmptyStateController.kt spec-dev S0893 Phase 01: self-registering DefaultLifecycleObserver, onStop/onStart video release/rebuild, surfaceTextureListener symmetry fix, orphaned-MediaPlayer-on-throw fix [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt spec-dev S0893 Phase 01: pass activity.lifecycle into AudioEmptyStateController [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivityLifecycleBridge.kt spec-dev S0893 Phase 01: remove manual onPause/onResume calls superseded by DefaultLifecycleObserver auto-dispatch [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-dev S0893 Phase 02: track activeExtraPlayerListener/lastResourceType/lastCredentialsId; onStop/onStart overrides [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt spec-dev S0893 Phase 02: remove extra listener + drain video effects before release; add onStop/onStart release-and-recreate [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt spec-dev S0893 Phase 02: track PauseAwareLoadControl as activeExtraPlayerListener [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CloudPlaybackHelper.kt spec-dev S0893 Phase 02: track PauseAwareLoadControl as activeExtraPlayerListener [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/FtpPlaybackHelper.kt spec-dev S0893 Phase 02: track PauseAwareLoadControl as activeExtraPlayerListener [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SftpPlaybackHelper.kt spec-dev S0893 Phase 02: track PauseAwareLoadControl as activeExtraPlayerListener [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/SmbPlaybackHelper.kt spec-dev S0893 Phase 02: track PauseAwareLoadControl as activeExtraPlayerListener [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt spec-dev S0893 Phase 02: track per-stream Player.Listener as activeExtraPlayerListener [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-dev S0893 Phase 03: add onStopVideo - API24+ video-only release, reuses existing releaseVideoPlayer [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-dev S0893 Phase 03: onStop/onStart video release-and-rebuild [branch: DEBUG-v020]
2026-07-03 02:09:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-dev S0893 Phase 03: onStop/onStart video release-and-rebuild [branch: DEBUG-v020]
2026-07-03 02:17:09 PLAN/S0908_listener-symmetry-baseline-audit.md spec Scaffold strategic spec skeleton S0908 [branch: DEBUG-v020]
2026-07-03 02:40:01 PLAN/S0896_audio-focus-contract-sweep-p2.md spec-all Audio focus contract sweep P2: BlockNeedUserTest, multi-window + focus fixes across 6 hosts [branch: DEBUG-v020]
2026-07-03 02:40:01 PLAN/S0896_audio-focus-contract-sweep-p2/INDEX.md spec-all Tactical plan: 4 phases, all done [branch: DEBUG-v020]
2026-07-03 02:40:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BackgroundMusicManager.kt spec-all S0896: multi-window ref-counted release, handleAudioFocus=true, CancellationException no longer logged as error [branch: DEBUG-v020]
2026-07-03 02:40:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseInlineAudioManager.kt spec-all S0896: inline audio now requests/abandons audio focus via AudioFocusManager [branch: DEBUG-v020]
2026-07-03 02:40:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt spec-all S0896: abandonAudioFocus() on focus-denied path, was leaking a dangling listener [branch: DEBUG-v020]
2026-07-03 02:40:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainVoiceCaptureManager.kt spec-all S0896: abandonAudioFocus() on focus-denied path, was leaking a dangling listener [branch: DEBUG-v020]
2026-07-03 02:40:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamInlineAudioManager.kt spec-all S0896: OFF-mode local player now requests audio focus + becoming-noisy handling [branch: DEBUG-v020]
2026-07-03 02:40:01 wear/src/main/java/com/sza/fastmediasorter/wear/di/WearAppModule.kt spec-all S0896: wear ExoPlayer now requests audio focus (handleAudioFocus=true) [branch: DEBUG-v020]
2026-07-03 02:58:45 PLAN/S0895_player-misc-p2.md spec-all Player subsystem misc P2: Verified, 9 findings fixed across 11 files, 2 files deleted (dead PlayerEntryCoordinator + its test) [branch: DEBUG-v020]
2026-07-03 02:58:45 PLAN/S0895_player-misc-p2/INDEX.md spec-all Tactical plan: 6 phases, all done [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/AudioPlaybackService.kt spec-all S0895: destroy-edge position save now survives serviceScope.cancel() via a dedicated scope [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/entry/PlayerEntryCoordinator.kt spec-all S0895: deleted, dead code with no production caller [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/di/PlayerContractsModule.kt spec-all S0895: removed dead bindPlayerEntryCoordinator binding [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/test/java/com/sza/fastmediasorter/ui/player/entry/PlayerEntryCoordinatorTest.kt spec-all S0895: deleted, subject class removed [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerSetupHelper.kt spec-all S0895: createPlayer() gained optional mediaSourceFactory override [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/LocalPlaybackHelper.kt spec-all S0895: BD-TS local playback routed through createPlayer(), no longer duplicates its bookkeeping [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerLifecycleManager.kt spec-all S0895: fixed orphan VideoPlayerManager creation during onDestroy teardown [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerVrLaunchManager.kt spec-all S0895: settings write no longer skips 2D-host teardown or crashes after successful VR dispatch [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingViewModel.kt spec-all S0895: position poll gated on host-started state, not just isPlaying [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/NowPlayingBottomSheetFragment.kt spec-all S0895: forwards onStart/onStop to NowPlayingViewModel [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerManagerInitializer.kt spec-all S0895: 3 bare collectors wrapped in repeatOnLifecycle(STARTED) [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt spec-all S0895: stream error-recovery no longer acts on a stale player after file navigation [branch: DEBUG-v020]
2026-07-03 02:58:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/AudioServiceController.kt spec-all S0895: release() no longer clobbers a foreign MemoryEnduranceTracker scenario [branch: DEBUG-v020]
2026-07-03 03:01:17 PLAN/S0909_inline-audio-stale-generation-state-clobber.md spec-draft Scaffold strategic spec skeleton S0909 (parked from S0896) [branch: DEBUG-v020]
2026-07-03 10:26:04 PLAN/S0815_section-icons-in-docs-and-site.md spec-arc Archive S0815 (section-icons-in-docs-and-site) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:04 PLAN/S0844_camera-capture-activity-detekt-baseline-drift.md spec-arc Archive S0844 (camera-capture-activity-detekt-baseline-drift) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:05 PLAN/S0846_listselectiondialog-cancel-button-taxonomy.md spec-arc Archive S0846 (listselectiondialog-cancel-button-taxonomy) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:05 PLAN/S0848_post-change-runtime-optimization.md spec-arc Archive S0848 (post-change-runtime-optimization) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:05 PLAN/S0850_changedfiles-delta-neuroslop-listener.md spec-arc Archive S0850 (changedfiles-delta-neuroslop-listener) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:06 PLAN/S0858_bugfix-quickrecorder-teardown-and-reentrancy.md spec-arc Archive S0858 (bugfix-quickrecorder-teardown-and-reentrancy) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:06 PLAN/S0859_bugfix-standaloneviewmanager-release-contract-gaps.md spec-arc Archive S0859 (bugfix-standaloneviewmanager-release-contract-gaps) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:06 PLAN/S0860_bugfix-standaloneplayer-ondestroy-lateinit-crash.md spec-arc Archive S0860 (bugfix-standaloneplayer-ondestroy-lateinit-crash) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:07 PLAN/S0861_bugfix-mic-capture-ownership-races.md spec-arc Archive S0861 (bugfix-mic-capture-ownership-races) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:07 PLAN/S0862_bugfix-browse-inline-audio-race-and-error-leak.md spec-arc Archive S0862 (bugfix-browse-inline-audio-race-and-error-leak) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:07 PLAN/S0864_bugfix-playbackhealth-dual-player.md spec-arc Archive S0864 (bugfix-playbackhealth-dual-player) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:07 PLAN/S0865_bugfix-ftpplayback-duplicate-player-race.md spec-arc Archive S0865 (bugfix-ftpplayback-duplicate-player-race) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:08 PLAN/S0867_bugfix-smb-timeout-counter-race.md spec-arc Archive S0867 (bugfix-smb-timeout-counter-race) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:08 PLAN/S0868_bugfix-throttle-resume-job-not-cancelled.md spec-arc Archive S0868 (bugfix-throttle-resume-job-not-cancelled) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:08 PLAN/S0871_bugfix-tts-release-and-state-race.md spec-arc Archive S0871 (bugfix-tts-release-and-state-race) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:08 PLAN/S0873_bugfix-docstandalone-viewer-resurrect.md spec-arc Archive S0873 (bugfix-docstandalone-viewer-resurrect) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:09 PLAN/S0874_bugfix-streaminline-stale-play-callback.md spec-arc Archive S0874 (bugfix-streaminline-stale-play-callback) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:09 PLAN/S0876_bugfix-welcome-enableall-lost-update.md spec-arc Archive S0876 (bugfix-welcome-enableall-lost-update) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:09 PLAN/S0877_bugfix-webviewauth-dismiss-detached-fragment.md spec-arc Archive S0877 (bugfix-webviewauth-dismiss-detached-fragment) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:09 PLAN/S0878_audit-mass-2026-07-02-followup.md spec-arc Archive S0878 (audit-mass-2026-07-02-followup) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:09 PLAN/S0879_device-profile-preset-csv-gap.md spec-arc Archive S0879 (device-profile-preset-csv-gap) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:10 PLAN/S0888_icon-favorites-toggle.md spec-arc Archive S0888 (icon-favorites-toggle) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:10 PLAN/S0889_docs-icons-emoji-to-inline.md spec-arc Archive S0889 (docs-icons-emoji-to-inline) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:10 PLAN/S0890_resource-type-icon-map-dedup.md spec-arc Archive S0890 (resource-type-icon-map-dedup) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:10 PLAN/S0891_orphaned-root-logo-assets.md spec-arc Archive S0891 (orphaned-root-logo-assets) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:10 PLAN/S0894_standalone-player-misc-p2.md spec-arc Archive S0894 (standalone-player-misc-p2) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:26:10 PLAN/S0895_player-misc-p2.md spec-arc Archive S0895 (player-misc-p2) -> temp/done/ [branch: DEBUG-v020]
2026-07-03 10:38:13 app_v2/build.gradle.kts yt-dlp dependency Bump yt-dlp stable 2026.6.9 -> nightly 2026.07.02.234458 to fix Instagram reels/video ‘empty media response’ (extractor rework #17075) [branch: DEBUG-v020]
2026-07-03 10:53:23 PLAN/S0897_tts-lifecycle-p2.md spec-all S0897 TTS lifecycle P2: stop read-aloud on viewer close/file-swap/OCR-swap/reopen; recover from TTS init failure (reset engine). Compile PASS; BlockNeedUserTest (no device). [branch: DEBUG-v020]
2026-07-03 11:03:07 PLAN/S0898_room-import-transactions-p2.md spec-all S0898 Room import atomicity P2: wrap insertAllAsOverrides / addAllIgnoringDuplicates / favorites import loop in db.withTransaction (all-or-nothing on crash). No schema change (v38). Compile+detekt(own files) PASS. [branch: DEBUG-v020]
2026-07-03 11:09:34 PLAN/S0899_native-fd-leaks-p2.md spec-all S0899 native fd/extractor leaks P2: SafUriExtractor MediaExtractor try/finally + PdfRenderer/PFD .use; MediaMuxerRemuxer release extractor on setDataSource-fail early return. Compile+detekt(own files) PASS. [branch: DEBUG-v020]
2026-07-03 11:17:46 PLAN/S0900_streams-helpers-p2.md spec-all S0900 streams helpers P2 (5 fixes): rethrow CancellationException in snapshot/probe catches; drainOne pending-guard skips capture after grid-left; health sweep onComplete via NonCancellable; inline-audio service player quiesced (playWhenReady=false+clearMediaItems) so onTaskRemoved stopSelf fires. Compile+detekt(own files) PASS. [branch: DEBUG-v020]
2026-07-03 11:30:22 PLAN/S0901_browse-managers-p2.md spec-all S0901 browse managers P2 (4 fixes): @Volatile job fields (BrowseLoadingAuxManager); warm-up collectors -> collectOnLifecycle (BrowseManagerInitializer); inline_audio cache 256MB oldest-first eviction (BrowseInlineAudioManager); mic save on @ApplicationScope + UI-teardown guards (BrowseMicRecordingManager + BrowseActivity). Compile+detekt(own files) PASS; unsafe-collect 5->3. [branch: DEBUG-v020]
2026-07-03 11:34:27 PLAN/S0909_inline-audio-stale-generation-state-clobber.md spec-all S0909 BrowseInlineAudioManager: guard both _inlinePlayerState resets (localPath==null + outer catch) with if(myGeneration==playGeneration), grouped with the S0896 releaseFocus guard - a superseded generation no longer clobbers the newer track UI state. Compile+detekt(own file) PASS. [branch: DEBUG-v020]
2026-07-03 11:53:16 PLAN/S0911_main-window-interface-settings-group.md spec Scaffold strategic spec skeleton S0911 [branch: DEBUG-v020]
2026-07-03 12:06:04 PLAN/S0904_infra-misc-p2.md spec-all S0904 infra P2 (4 fixes): AudioToggleTileService releases stale MediaController before overwrite; BaseConnectionPool.invalidateConnection guards tryLock/unlock; dead FtpExoPlayerPool idle-pool removed + FtpClient arm dropped + FtpConnectionGate.closeFor no-op (client param removed); ScreenVideoRecordingService resets isFinalizing on start. Finding 4 deferred to S0910. Compile + detekt(own files) + affected unit tests PASS. [branch: DEBUG-v020]
2026-07-03 12:06:04 app_v2/src/test/java/com/sza/fastmediasorter/domain/usecase/ImportFavoritesUseCaseTest.kt spec-all S0898 unit-test collateral: InputBindingRepositoryTest + ImportFavoritesUseCaseTest broke on the AppDatabase ctor param (fk skips test sources). Inject mockk AppDatabase + mockkStatic(RoomDatabaseKt) withTransaction passthrough. testStandardDebugUnitTest PASS. [branch: DEBUG-v020]
2026-07-03 12:06:15 app_v2/src/main/res/values-ru/strings.xml app_launch_panel_route_ocr Reorder OCR to middle of launch-panel route label (RU/UK); EN already OCR-in-middle, unchanged [branch: DEBUG-v020]
2026-07-03 12:07:14 PLAN/S0912_quick-launch-panel-programs-scenarios.md spec Scaffold strategic spec skeleton S0912 [branch: DEBUG-v020]
2026-07-03 12:08:45 PLAN/S0913_programs-screen-recording-order-icon.md spec-all Compact spec: S0913 screen-recording programs item order+icon [branch: DEBUG-v020]
2026-07-03 12:11:31 PLAN/S0892_webviewauth-webview-teardown.md spec-all S0892 WebViewAuthDialogFragment lifecycle (findings 2/3/4; finding 1 already fixed by S0877): safe onDestroyView teardown (stopLoading->about:blank->removeView->destroy); onPause/onResume forwarded to WebView; account-name AlertDialog held+dismissed on teardown (no WindowLeaked). Compile+detekt(own file) PASS; BlockNeedUserTest (no device). [branch: DEBUG-v020]
2026-07-03 12:18:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainProgramsMenuCoordinator.kt spec-all S0913: programs screen-recording item - reorder after Camera-OCR + use settings icon ic_display (with MainScreenRecordingMenuManager.kt) [branch: DEBUG-v020]
2026-07-03 12:18:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainProgramsPanelManager.kt S0830 S0830: overflow programs items now launch on short tap; long-press/three-dots open the per-item menu (anchored PopupWindow of item rows, parity with visible items) [branch: DEBUG-v020]
2026-07-03 12:20:40 PLAN/S0914_main-window-panel-accent-colors.md spec-all Compact spec: S0914 main-window panel accent colours [branch: DEBUG-v020]
2026-07-03 12:22:47 PLAN/S0913_programs-screen-recording-order-icon.md spec-all Pipeline Verified: S0913 screen-recording programs item order+icon [branch: DEBUG-v020]
2026-07-03 12:30:28 app_v2/src/main/res/layout/activity_main.xml spec-all S0914: per-panel accent colours + collapsed-chip icons for the main-window collapsible panels (programs/streams/filter), across portrait/land/w600dp [branch: DEBUG-v020]
2026-07-03 12:33:50 PLAN/S0915_mainactivity-loc-extraction.md spec-draft Park finding: MainActivity 1487/1500 LOC extraction (from S0914 research) [branch: DEBUG-v020]
2026-07-03 13:20:13 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.7031.316 - plateau merge from DEBUG-v020 [branch: DEBUG-v020]
2026-07-03 13:28:54 docs/FEATURES.md FEATURES Showcase update for v2.60.7031.316 from ALL_FEATURES diff [branch: DEBUG-v021]
2026-07-03 14:24:34 PLAN/S0912_quick-launch-panel-programs-scenarios.md spec-all Strategic spec S0912: extend quick-launch panel with Programs-and-Scenarios items [branch: DEBUG-v021]
2026-07-03 14:30:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt PhotoVideoStandaloneActivity teardown Fix Glide destroyed-activity crash in StandaloneViewManager.release() by clearing via applicationContext instead of an Activity-scoped RequestManager [branch: DEBUG-v021]
2026-07-03 14:34:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt PhotoVideoStandaloneActivity teardown Fix Glide destroyed-activity crash in StandaloneViewManager.release() by clearing via applicationContext instead of an Activity-scoped RequestManager [branch: DEBUG-v021]
2026-07-03 14:36:22 PLAN/S0912_quick-launch-panel-programs-scenarios/INDEX.md spec-tech Create tactical plan for S0912 [branch: DEBUG-v021]
2026-07-03 14:36:22 PLAN/S0912_quick-launch-panel-programs-scenarios/PHASE_01__standalone-launch-surfaces.md spec-tech Phase 01: standalone-launch-surfaces [branch: DEBUG-v021]
2026-07-03 14:36:22 PLAN/S0912_quick-launch-panel-programs-scenarios/PHASE_02__panel-registry-wiring.md spec-tech Phase 02: panel-registry-wiring [branch: DEBUG-v021]
2026-07-03 14:36:23 PLAN/S0912_quick-launch-panel-programs-scenarios/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v021]
2026-07-03 14:36:23 PLAN/S0912_quick-launch-panel-programs-scenarios.md spec-tech Status -> Tactical [branch: DEBUG-v021]
2026-07-03 14:37:36 app_v2/src/main/java/com/sza/fastmediasorter/widget/CameraQuickCaptureLaunchManager.kt app_v2 S0912 step 01.1: add panel default-target sentinel for quick-camera launch manager [branch: DEBUG-v021]
2026-07-03 14:38:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainLinkDownloadManager.kt app_v2 S0912 step 01.2: add optional onClosed callback for non-MainActivity hosts [branch: DEBUG-v021]
2026-07-03 14:39:58 app_v2/src/main/java/com/sza/fastmediasorter/widget/LinkDownloadLaunchActivity.kt app_v2 S0912 step 01.3: add link-download panel trampoline Activity [branch: DEBUG-v021]
2026-07-03 14:44:01 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/InternalRouteCatalog.kt app_v2 S0912 step 02.1: register quick-camera/voice/screen-recording/link-download routes [branch: DEBUG-v021]
2026-07-03 14:44:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainScreenRecordingManager.kt S0774 Remove BlockNeedUserTest debug tag (re-opening ticket for rework) [branch: DEBUG-v021]
2026-07-03 14:44:11 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt S0774 Remove BlockNeedUserTest debug tag (re-opening ticket for rework) [branch: DEBUG-v021]
2026-07-03 14:45:27 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/AppLaunchPanelRouteIntents.kt app_v2 S0912 step 02.2: add intent builders for the four new panel routes [branch: DEBUG-v021]
2026-07-03 14:46:57 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/panel/ResolvePanelRouteAvailabilityUseCase.kt app_v2 S0912 step 02.3: extend availability resolution for the four new panel routes [branch: DEBUG-v021]
2026-07-03 14:47:08 PLAN/S0774_programs-screen-recording-action.md spec-update Refinement (claude-sonnet-4-5, focus: completeness) - device-test finding + shared compact indicator + pause scope [branch: DEBUG-v021]
2026-07-03 14:53:30 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/AppLaunchPanelRouteIntents.kt app_v2 S0912: insert BlockNeedUserTest debug-verification tags at the four new panel-route entry points [branch: DEBUG-v021]
2026-07-03 14:54:48 PLAN/S0774_programs-screen-recording-action/INDEX.md spec-tech Add phases 09-12 for compact-indicator + pause rework [branch: DEBUG-v021]
2026-07-03 14:54:48 PLAN/S0774_programs-screen-recording-action/PHASE_09__recording-pause-state-contract.md spec-tech Phase 09: recording-pause-state-contract [branch: DEBUG-v021]
2026-07-03 14:54:49 PLAN/S0774_programs-screen-recording-action/PHASE_10__recording-engine-pause-impl.md spec-tech Phase 10: recording-engine-pause-impl [branch: DEBUG-v021]
2026-07-03 14:54:49 PLAN/S0774_programs-screen-recording-action/PHASE_11__compact-recording-indicator-ui.md spec-tech Phase 11: compact-recording-indicator-ui [branch: DEBUG-v021]
2026-07-03 14:54:49 PLAN/S0774_programs-screen-recording-action/PHASE_12__docs-catalog-cleanup-rework.md spec-tech Phase 12: docs-catalog-cleanup-rework [branch: DEBUG-v021]
2026-07-03 14:57:31 app_v2/src/main/res/layout/activity_main.xml Main window collapsed-panels row / resource-type filter styling S0914-R1 + S0809: bound collapsed chips to maxLines=1/ellipsize=end to stop a width-squeeze height blowup; drop the filter panel accent to colorSurface/colorControlNormal per owner device-test decision [branch: DEBUG-v021]
2026-07-03 14:57:45 app_v2/src/main/res/layout-land/activity_main.xml Main window collapsed-panels row / resource-type filter styling (landscape) S0914-R1 + S0809: mirror the portrait chip maxLines/ellipsize + filter no-accent fix [branch: DEBUG-v021]
2026-07-03 14:57:57 app_v2/src/main/res/layout-w600dp/activity_main.xml Main window collapsed-panels row / resource-type filter styling (w600dp) S0914-R1 + S0809: mirror the portrait chip maxLines/ellipsize + filter no-accent fix [branch: DEBUG-v021]
2026-07-03 14:58:10 app_v2/src/main/res/values/colors.xml Main window panel accent colors S0914-R1: remove unused main_filter_panel_accent - filter chip/tabs reverted to neutral colorSurface, only programs/streams keep an accent [branch: DEBUG-v021]
2026-07-03 14:58:19 dev/CATALOG/app_v2.jsonl spec-dev S0912 phase 03.1: regenerate app_v2 catalog [branch: DEBUG-v021]
2026-07-03 14:58:19 docs/ALL_FEATURES.jsonl spec-dev S0912 phase 03.2: record panel programs-and-scenarios capability [branch: DEBUG-v021]
2026-07-03 14:59:03 PLAN/S0912_quick-launch-panel-programs-scenarios.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v021]
2026-07-03 15:09:36 app_v2/src/main/java/com/sza/fastmediasorter/util/RecordingElapsedTimer.kt S0774 Phase 09.1 Relocate CameraRecordingTimer to shared util.RecordingElapsedTimer (S0774 rework) [branch: DEBUG-v021]
2026-07-03 15:10:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt S0774 Phase 09.1 Update import/refs after CameraRecordingTimer relocation (S0774 rework) [branch: DEBUG-v021]
2026-07-03 15:10:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraRecordingTimer.kt S0774 Phase 09.1 Deleted - relocated to util/RecordingElapsedTimer.kt (S0774 rework) [branch: DEBUG-v021]
2026-07-03 15:11:46 PLAN/S0912_quick-launch-panel-programs-scenarios.md spec-test-device Device run on emulator-5554 -> PASS/SKIPPED/OUT-OF-SCOPE 2/1/2 [branch: DEBUG-v021]
2026-07-03 15:11:47 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenRecordingStateController.kt S0774 Phase 09.2 Add pause bookkeeping (isPaused/markPaused/markResumed/elapsedMs) to ScreenRecordingStateController [branch: DEBUG-v021]
2026-07-03 15:14:51 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenVideoRecordingController.kt S0774 Phase 09.3 Add requestPause/requestResume (default no-op bodies) to ScreenVideoRecordingController [branch: DEBUG-v021]
2026-07-03 15:17:26 PLAN/S0912_quick-launch-panel-programs-scenarios.md spec-check Audit S0912 -> Verified; PASS/WARN/FAIL 16/0/0, MANUAL 1 [branch: DEBUG-v021]
2026-07-03 15:17:26 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/AppLaunchPanelRouteIntents.kt spec-check Remove S0912 BlockNeedUserTest debug tags on Verified transition [branch: DEBUG-v021]
2026-07-03 15:18:43 PLAN/S0912_quick-launch-panel-programs-scenarios.md spec-all Pipeline Verified: S0912 [branch: DEBUG-v021]
2026-07-03 15:24:58 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt S0774 Phase 10.1 Add pause/resume to ScreenVideoRecordingService (MediaRecorder pause/resume, notification toggle) [branch: DEBUG-v021]
2026-07-03 15:29:37 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt S0774 Phase 10.1 Add pause/resume to ScreenVideoRecordingService (MediaRecorder pause/resume, notification toggle) [branch: DEBUG-v021]
2026-07-03 15:32:33 PLAN/S0911_main-window-interface-settings-group.md spec-all Strategic spec S0911: new Main window interface settings group [branch: DEBUG-v021]
2026-07-03 15:41:28 PLAN/S0911_main-window-interface-settings-group/INDEX.md spec-tech Create tactical plan for S0911 [branch: DEBUG-v021]
2026-07-03 15:41:28 PLAN/S0911_main-window-interface-settings-group/PHASE_01__new-section-scaffold.md spec-tech Phase 01: new-section-scaffold [branch: DEBUG-v021]
2026-07-03 15:41:29 PLAN/S0911_main-window-interface-settings-group/PHASE_02__move-resource-ops-toggle.md spec-tech Phase 02: move-resource-ops-toggle [branch: DEBUG-v021]
2026-07-03 15:41:29 PLAN/S0911_main-window-interface-settings-group/PHASE_03__move-programs-panel-toggle.md spec-tech Phase 03: move-programs-panel-toggle [branch: DEBUG-v021]
2026-07-03 15:41:30 PLAN/S0911_main-window-interface-settings-group/PHASE_04__move-streams-panel-toggle.md spec-tech Phase 04: move-streams-panel-toggle [branch: DEBUG-v021]
2026-07-03 15:41:30 PLAN/S0911_main-window-interface-settings-group/PHASE_05__docs-catalog-cleanup.md spec-tech Phase 05: docs-catalog-cleanup [branch: DEBUG-v021]
2026-07-03 15:41:30 PLAN/S0911_main-window-interface-settings-group.md spec-tech Status -> Tactical [branch: DEBUG-v021]
2026-07-03 15:42:58 app_v2/src/main/res/values/strings.xml app_v2 S0911 step 01.1: new group title string + shortened programs-panel title [branch: DEBUG-v021]
2026-07-03 15:43:41 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt S0774 Phase 10.1 Add pause/resume to ScreenVideoRecordingService; clean up pre-existing unbaselined detekt findings (narrow exception types, extract magic numbers, justified suppresses) [branch: DEBUG-v021]
2026-07-03 15:44:17 app_v2/src/main/res/values/strings.xml S0774 Phase 10.1 Add shared recording_pause/recording_resume strings (EN/RU/UK) for the pause/resume notification action [branch: DEBUG-v021]
2026-07-03 15:44:46 app_v2/src/main/res/layout/fragment_settings_general.xml app_v2 S0911 step 01.2: add empty Main window interface section (portrait+land) [branch: DEBUG-v021]
2026-07-03 15:49:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/GeneralSettingsFragment.kt app_v2 S0911 step 01.3: register Main window interface collapsible section [branch: DEBUG-v021]
2026-07-03 15:52:33 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingControllerImpl.kt S0774 Phase 10.2 Implement requestPause/requestResume delegating to ScreenVideoRecordingService [branch: DEBUG-v021]
2026-07-03 15:55:19 app_v2/src/main/res/layout/fragment_settings_general.xml app_v2 S0911 step 02.1: move resource-ops-overflow row into Main window interface section (portrait+land) [branch: DEBUG-v021]
2026-07-03 15:56:27 app_v2/src/main/res/layout/view_recording_indicator.xml S0774 Phase 11.1 Add compact recording indicator layout (dot + timer + pause/stop icon buttons) [branch: DEBUG-v021]
2026-07-03 15:58:39 app_v2/src/main/res/layout/activity_main.xml S0774 Phase 11.3 Mount compact recording indicator container in activity_main.xml (portrait) [branch: DEBUG-v021]
2026-07-03 15:58:48 app_v2/src/main/res/layout-land/activity_main.xml S0774 Phase 11.3 Mount compact recording indicator container in activity_main.xml (landscape) [branch: DEBUG-v021]
2026-07-03 15:59:07 app_v2/src/main/res/layout/view_recording_indicator.xml S0774 Phase 11.1 Fix app namespace URI (res-auto, not res/app) in compact recording indicator layout [branch: DEBUG-v021]
2026-07-03 16:02:06 app_v2/src/main/res/layout/fragment_settings_general.xml app_v2 S0911 phase 03: move programs-panel toggle from Operations to General (layout+wiring) [branch: DEBUG-v021]
2026-07-03 16:03:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/RecordingIndicatorOverlayManager.kt S0774 Phase 11.2 Add shared compact recording indicator overlay manager [branch: DEBUG-v021]
2026-07-03 16:06:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainScreenRecordingManager.kt S0774 Phase 11.4 Rewire MainScreenRecordingManager to shared compact indicator (drop modal AlertDialog), wire pause/resume [branch: DEBUG-v021]
2026-07-03 16:07:42 app_v2/src/main/res/layout/fragment_settings_general.xml app_v2 S0911 phase 04: move streams-panel toggle from Streams to General with gate replicated [branch: DEBUG-v021]
2026-07-03 16:11:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainScreenRecordingManager.kt S0774 Phase 11.4 Rewire MainScreenRecordingManager to shared compact indicator, wire pause/resume; clean up pre-existing unbaselined detekt findings [branch: DEBUG-v021]
2026-07-03 16:16:03 docs/settings/settings-annotations.json app_v2 S0911 phase 05: add headerMainWindowInterface annotation entry [branch: DEBUG-v021]
2026-07-03 16:16:03 docs/settings/settings-manifest.json app_v2 S0911 phase 05: regenerate settings manifest + reference docs + catalog [branch: DEBUG-v021]
2026-07-03 16:16:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainScreenRecordingManager.kt S0774 Phase 11.4 Rewire MainScreenRecordingManager to shared compact indicator, wire pause/resume; clean up pre-existing unbaselined detekt findings [branch: DEBUG-v021]
2026-07-03 16:18:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt app_v2 S0911: insert BlockNeedUserTest debug-verification tags for 3 relocated toggles [branch: DEBUG-v021]
2026-07-03 16:19:03 PLAN/S0911_main-window-interface-settings-group.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v021]
2026-07-03 16:40:01 PLAN/S0911_main-window-interface-settings-group.md spec-test-device Device run on emulator-5554 -> PASS/SKIPPED 9/1 [branch: DEBUG-v021]
2026-07-03 16:42:32 PLAN/S0911_main-window-interface-settings-group.md spec-check Audit S0911 -> Verified; PASS/WARN/FAIL 18/0/0, MANUAL 1 [branch: DEBUG-v021]
2026-07-03 16:42:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-check Remove S0911 BlockNeedUserTest debug tags on Verified transition [branch: DEBUG-v021]
2026-07-03 16:43:17 PLAN/S0911_main-window-interface-settings-group.md spec-all Pipeline Verified: S0911 [branch: DEBUG-v021]
2026-07-03 16:55:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainVoiceCaptureManager.kt S0774 Phase 11.5 Rewire MainVoiceCaptureManager to shared compact indicator, add pause/resume, add discard button support [branch: DEBUG-v021]
2026-07-03 16:56:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/RecordingIndicatorOverlayManager.kt S0774 Phase 11.5 Add optional discard button + stopCd contentDescription to RecordingIndicatorOverlayManager [branch: DEBUG-v021]
2026-07-03 16:56:50 app_v2/src/main/res/layout/view_recording_indicator.xml S0774 Phase 11.5 Add optional discard button to compact recording indicator layout [branch: DEBUG-v021]
2026-07-03 16:57:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainScreenRecordingManager.kt S0774 Phase 11.5 Pass stopCd contentDescription to indicator.show() (accessibility fix discovered while wiring voice capture) [branch: DEBUG-v021]
2026-07-03 17:03:11 PLAN/S0908_listener-symmetry-baseline-audit.md spec-all Strategic spec S0908: fix 4 real listener leaks, classify 54 false positives [branch: DEBUG-v021]
2026-07-03 17:03:40 docs/ALL_FEATURES.jsonl S0774 Phase 12.2 Amend S0774 + S0523 records to mention pause/resume/discard via the new compact indicator [branch: DEBUG-v021]
2026-07-03 17:08:02 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt S0774 Phase 12 Insert BlockNeedUserTest debug tags for pause/resume flows [branch: DEBUG-v021]
2026-07-03 17:09:45 PLAN/S0774_programs-screen-recording-action.md spec-dev Phases 09-12 done; status -> BlockNeedUserTest [branch: DEBUG-v021]
2026-07-03 17:09:45 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt spec-dev Insert BlockNeedUserTest debug tags for screen recording pause/resume [branch: DEBUG-v021]
2026-07-03 17:09:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainVoiceCaptureManager.kt spec-dev Insert BlockNeedUserTest debug tags for voice capture pause/resume [branch: DEBUG-v021]
2026-07-03 17:09:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/RecordingIndicatorOverlayManager.kt spec-dev Insert BlockNeedUserTest debug tag for compact indicator show [branch: DEBUG-v021]
2026-07-03 17:11:33 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt S0774 Phase 12 BlockNeedUserTest debug tags for pause/resume flows [branch: DEBUG-v021]
2026-07-03 17:13:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt app_v2 S0908: track videoErrorListener and remove it before player release [branch: DEBUG-v021]
2026-07-03 17:14:38 scripts/utils/agent-lock.ps1 agent-lock.ps1 add cross-agent BUILD.LOCK/CODE.LOCK coordination library [branch: DEBUG-v021]
2026-07-03 17:18:37 PLAN/S0916_icon-legend-locale-drift.md spec Scaffold strategic spec skeleton S0916 [branch: DEBUG-v021]
2026-07-03 17:27:28 scripts/builders/build-debug.PS1 scripts/builders/*.ps1 + scripts/quality/assert-detekt.ps1,assert-settings-doc-sync.ps1,assert-icon-inventory-sync.ps1 wire BUILD.LOCK guard (Enter-BuildLockOrExit/Exit-AgentLock) into every gradle-invoking leaf script - refuses a second concurrent gradle build with the holder PID/age/reason [branch: DEBUG-v021]
2026-07-03 17:27:46 CLAUDE.md CLAUDE.md Rule 23 + AGENTS.md + build.md,quick.md,spec-dev.md,spec-all.md,ns.md,spec-tech.md,skill-fix.md document cross-agent BUILD.LOCK/CODE.LOCK coordination convention and how skills should acquire/check CODE.LOCK before source edits [branch: DEBUG-v021]
2026-07-03 17:32:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt app_v2 S0908: track videoErrorListener, remove before player release; fix pre-existing import order [branch: DEBUG-v021]
2026-07-03 17:32:48 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt app_v2 S0908: track tracksChangedListener, remove before viewManager.release() [branch: DEBUG-v021]
2026-07-03 17:33:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt app_v2 S0908: track tracksChangedListener, remove before viewManager.release() [branch: DEBUG-v021]
2026-07-03 17:33:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BackgroundMusicManager.kt app_v2 S0908: track musicPlayerListener, consolidate removal into releaseMusicPlayerInstance(); fix pre-existing import order/comment-wrapping [branch: DEBUG-v021]
2026-07-03 17:35:20 PLAN/S0908_listener-symmetry-baseline-audit.md spec-next S0908: all 4 real listener leaks fixed; status -> Implemented [branch: DEBUG-v021]
2026-07-03 17:35:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-next S0908: track videoErrorListener, remove before player release [branch: DEBUG-v021]
2026-07-03 17:35:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt spec-next S0908: track tracksChangedListener, remove before viewManager.release() [branch: DEBUG-v021]
2026-07-03 17:35:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/StandalonePlayerActivity.kt spec-next S0908: track tracksChangedListener, remove before viewManager.release() [branch: DEBUG-v021]
2026-07-03 17:35:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BackgroundMusicManager.kt spec-next S0908: track musicPlayerListener, consolidate removal into releaseMusicPlayerInstance() [branch: DEBUG-v021]
2026-07-03 17:41:56 PLAN/S0908_listener-symmetry-baseline-audit/research/01__false-positive-classification.md spec-next S0908: document false-positive classification for remaining listener-symmetry findings (Goal 3) [branch: DEBUG-v021]
2026-07-03 17:41:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/BackgroundMusicManager.kt spec-next S0908: reword WHY comments to avoid literal addListener/removeListener tokens inflating the regex gate count [branch: DEBUG-v021]
2026-07-03 17:42:48 PLAN/S0908_listener-symmetry-baseline-audit.md spec-check Audit S0908 -> Verified; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v021]
2026-07-03 17:58:40 PLAN/S0898_room-import-transactions-p2.md spec-arc Archive S0898 (room-import-transactions-p2) -> temp/done/ [branch: DEBUG-v021]
2026-07-03 17:58:43 PLAN/S0899_native-fd-leaks-p2.md spec-arc Archive S0899 (native-fd-leaks-p2) -> temp/done/ [branch: DEBUG-v021]
2026-07-03 17:58:47 PLAN/S0904_infra-misc-p2.md spec-arc Archive S0904 (infra-misc-p2) -> temp/done/ [branch: DEBUG-v021]
2026-07-03 17:58:50 PLAN/S0908_listener-symmetry-baseline-audit.md spec-arc Archive S0908 (listener-symmetry-baseline-audit) -> temp/done/ [branch: DEBUG-v021]
2026-07-03 17:58:53 PLAN/S0909_inline-audio-stale-generation-state-clobber.md spec-arc Archive S0909 (inline-audio-stale-generation-state-clobber) -> temp/done/ [branch: DEBUG-v021]
2026-07-03 17:58:56 PLAN/S0911_main-window-interface-settings-group.md spec-arc Archive S0911 (main-window-interface-settings-group) -> temp/done/ [branch: DEBUG-v021]
2026-07-03 17:58:59 PLAN/S0912_quick-launch-panel-programs-scenarios.md spec-arc Archive S0912 (quick-launch-panel-programs-scenarios) -> temp/done/ [branch: DEBUG-v021]
2026-07-03 17:59:02 PLAN/S0913_programs-screen-recording-order-icon.md spec-arc Archive S0913 (programs-screen-recording-order-icon) -> temp/done/ [branch: DEBUG-v021]
2026-07-03 18:04:39 scripts/utils/agent-lock.ps1 agent lock tooling finish BUILD/CODE lock coverage, shared worktree root, and stale-clear helper [branch: DEBUG-v021]
2026-07-03 18:04:59 PLAN/S0906_cloud-title-internal-id.md spec-next S0906: full strategic spec authored from workflow research; Draft -> Approved [branch: DEBUG-v021]
2026-07-03 18:04:59 PLAN/S0906_cloud-title-internal-id/research/01__cloud-title-root-cause.md spec-next S0906: root-cause research artifact (5-agent workflow sweep) [branch: DEBUG-v021]
2026-07-03 18:09:48 PLAN/S0917_cloud-breadcrumb-click-depth-navigation.md spec-draft Park S0917: cloud breadcrumb-click depth navigation no-op, found during S0906 tactical planning [branch: DEBUG-v021]
2026-07-03 18:12:22 PLAN/S0906_cloud-title-internal-id/INDEX.md spec-tech Create tactical plan for S0906 [branch: DEBUG-v021]
2026-07-03 18:12:23 PLAN/S0906_cloud-title-internal-id/PHASE_01__navigation-name-tracking.md spec-tech Phase 01: navigation-name-tracking [branch: DEBUG-v021]
2026-07-03 18:12:23 PLAN/S0906_cloud-title-internal-id/PHASE_02__rewire-title-breadcrumb-consumers.md spec-tech Phase 02: rewire-title-breadcrumb-consumers [branch: DEBUG-v021]
2026-07-03 18:12:23 PLAN/S0906_cloud-title-internal-id/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v021]
2026-07-03 18:12:23 PLAN/S0906_cloud-title-internal-id.md spec-tech Status -> Tactical; §1/§2/§5/§11 patched with root-level leak finding [branch: DEBUG-v021]
2026-07-03 18:13:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/BrowseState.kt app_v2 S0906: add folderNameStack/currentFolderName to BrowseState (phase 01 step 01.1) [branch: DEBUG-v021]
2026-07-03 18:17:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt app_v2 S0906: keep folderNameStack/currentFolderName synchronized with pathStack/currentPath across all navigation mutation points (phase 01 step 01.2) [branch: DEBUG-v021]
2026-07-03 18:20:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt app_v2 S0906: rewrite 4 breadcrumb getters to use folderNameStack/currentFolderName instead of path-string parsing (phase 02 step 02.1) [branch: DEBUG-v021]
2026-07-03 18:23:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseUtilityManager.kt app_v2 S0906: rewire buildBreadcrumb to BrowseState-based real names; fix buildRootPathDisplay cloud id leak at resource root (phase 02 steps 02.2-02.3) [branch: DEBUG-v021]
2026-07-03 18:24:25 app_v2\src\main\java\com\sza\fastmediasorter\ui\streams\helpers\StreamFrameSnapshotManager.kt StreamFrameSnapshotManager.MAX_CONCURRENT_CAPTURES Reduce grid snapshot concurrency 2->1 after user-reported native crash entering Streams GRID (S0700/S0900 device-test) [branch: DEBUG-v021]
2026-07-03 18:32:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt app_v2 S0906: insert BlockNeedUserTest debug probe at navigateToFolder(MediaFile) entry [branch: DEBUG-v021]
2026-07-03 18:36:00 PLAN/S0906_cloud-title-internal-id.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v021]
2026-07-03 18:36:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseNavigationManager.kt spec-dev S0906 debug probe: navigateToFolder captured real name [branch: DEBUG-v021]
2026-07-03 18:36:00 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseUtilityManager.kt spec-dev S0906 debug probe: pathDisplay resolution [branch: DEBUG-v021]
2026-07-03 18:42:49 app_v2/src/main/AndroidManifest.xml S0918 Declare android.hardware.screen.portrait/.landscape required=false to cancel the orientation-implied requirement from CameraCaptureActivity portrait lock; restores ~2958 Play devices lost in 2.60.7031. [branch: DEBUG-v021]
2026-07-03 18:58:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/print/PrintDispatchActivity.kt S0919 Route image print through PrintDispatchActivity trampoline (clean Activity context) so Samsung One UI reaches the system print UI; fixes standalone photo print no-op; DocumentPrintManager image path unified onto the same trampoline [branch: DEBUG-v021]
2026-07-03 19:01:20 app_v2/src/main/AndroidManifest.xml S0918 Play device reach S0918: declare android.hardware.screen.portrait/landscape uses-feature required=false to cancel the orientation-implied required feature (restores ~2958 devices of Play reach lost in 2.60.7031); add assert-orientation-implied-feature gate wired into post-change + fast-gates [branch: DEBUG-v021]
2026-07-03 19:17:57 PLAN/S0920_bugfix-standalone-player-ui.md spec Scaffold strategic spec skeleton S0920 [branch: DEBUG-v021]
2026-07-03 19:18:02 app_v2\src\main\java\com\sza\fastmediasorter\ui\streams\helpers\StreamFrameSnapshotManager.kt StreamFrameSnapshotManager.CAPTURE_ENABLED Disable real GRID snapshot capture (favicon-only fallback) - native crash on Samsung SM-S731B/Android16 not fixed by concurrency reduction, S0700/S0900 stopgap pending root cause [branch: DEBUG-v021]
2026-07-03 19:20:00 app_v2\src\main\java\com\sza\fastmediasorter\ui\streams\helpers\StreamFrameSnapshotManager.kt StreamFrameSnapshotManager.CAPTURE_ENABLED Disable real GRID snapshot capture (favicon-only fallback) - native crash on Samsung SM-S731B/Android16 not fixed by concurrency reduction, S0700/S0900 stopgap pending root cause [branch: DEBUG-v021]
2026-07-03 20:31:46 app_v2\src\main\java\com\sza\fastmediasorter\ui\streams\helpers\StreamFrameSnapshotManager.kt StreamFrameSnapshotManager.capture (settle-delay experiment) Re-enable GRID capture with a post-layout settle delay experiment - owner reports live thumbnails worked before today, retry with a different fix angle before giving up on the feature [branch: DEBUG-v021]
2026-07-03 20:33:47 app_v2\src\main\java\com\sza\fastmediasorter\ui\streams\helpers\StreamFrameSnapshotManager.kt StreamFrameSnapshotManager.capture (settle-delay experiment) Re-enable GRID capture with a post-layout settle delay experiment - owner reports live thumbnails worked before today, retry with a different fix angle before giving up on the feature [branch: DEBUG-v021]
2026-07-03 20:34:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt;app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/PhotoVideoStandaloneActivity.kt S0920 stale probe cleanup Removed 3 stale Timber.d(S0920: …) debug probes - ticket S0920 is status Tactical (not BlockNeedUserTest), tags were blocking the ticket-log-audit gate for an unrelated change [branch: DEBUG-v021]
2026-07-03 20:34:59 app_v2/src/main/res/layout/dialog_list_selection.xml S0787 list picker S0787: persistent vertical scroll thumb in list-selection dialog so overflowing option sets read as scrollable [branch: DEBUG-v021]
2026-07-03 20:54:46 PLAN/spec-catalog.jsonl spec-catalog + app_v2 .kt Archive 23 BlockNeedUserTest tickets as owner-verified on device (Block A 16 + S0776/S0835 + Block D minus S0820); removed 26 debug probe tags and 9 orphaned Timber imports across 13 files; parked S0921 migrated-toggle-not-applied bug found via S0820 [branch: DEBUG-v021]
2026-07-03 21:07:41 PLAN/S0921_settings-migrated-toggle-not-applied.md spec-all Pipeline Blocked: S0921 root-caused from code (fullscreen-on-open precedence gate vs migrated per-resource showCommandPanel); BlockQuestions pending owner A/B/C decision [branch: DEBUG-v021]
2026-07-03 23:57:21 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/ spec-all S0920: standalone players - Copy/Move panel expand, video fullscreen honors openVideoInFullscreen (panel-aware), hide draw-overlay in text/audio, unified top-toolbar order [branch: DEBUG-v021]
2026-07-04 00:13:50 PLAN/S0887_icons-rename-delete-toggles.md spec-all S0887 Verified: added ic_rename/ic_delete leading icons to Allow-rename/Allow-delete toggles in Settings>Playback (portrait+land), via existing str_icon attr [branch: DEBUG-v021]
2026-07-04 00:17:03 PLAN/S0886_icons-black-screen-pip-toggles.md spec-all S0886 Verified: added ic_black_screen/ic_picture_in_picture leading icons to Black-screen/PiP toggles in Settings>Playback (portrait+land) via str_icon [branch: DEBUG-v021]
2026-07-04 00:20:33 PLAN/S0885_app-icons-send-to-toggles.md spec-all S0885 Verified (duplicate): recognizable per-app icons on Send-to settings toggles already delivered by S0838 (ShareTargetIconResolver, installed-app launcher icons) [branch: DEBUG-v021]
2026-07-04 00:32:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraOrientationManager.kt S0922 Fix camera overlay counter-rotation sign so labels stay upright in both landscape orientations (was 180 deg upside-down) [branch: DEBUG-v021]
2026-07-04 00:54:45 PLAN/S0923_ocr-native-attach-arm64-crash.md spec-all S0923: guard delivered native-lib attach - loader verifies findLibrary resolves into filesDir (else graceful DeliveredNativeLibraryIncompatibleException + WARN), Tesseract/Paddle engine init catches LinkageError; fixes camera OCR UnsatisfiedLinkError crash on arm64 API 36 [branch: DEBUG-v021]
2026-07-04 01:28:23 PLAN/S0922_camera-overlay-upside-down-landscape.md spec-arc Archive S0922 (camera-overlay-upside-down-landscape, implemented) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 01:28:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraOrientationManager.kt spec-arc Remove S0922 BlockNeedUserTest debug tag + now-unused Timber import [branch: DEBUG-v021]
2026-07-04 01:40:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseCameraCaptureManager.kt app_v2 Fix camera save-destination label showing scratch temp-folder name (Pictures) instead of the actual browsed target (e.g. Downloads) when launching in-app camera from Browse or the quick-capture widget - S0754 device-test finding [branch: DEBUG-v021]
2026-07-04 01:44:08 temp/done/S0837_screenshot-draw-save-overwrite-original-by-default.md spec-arc Archive S0837 as implemented -> temp/done/; removed BlockNeedUserTest probe tag from StandaloneDrawSaveHelper.kt [branch: DEBUG-v021]
2026-07-04 01:44:08 temp/done/S0769_camera-landscape-top-right-overlap.md spec-arc Archive S0769 as implemented -> temp/done/ (visual-only, no probe tag) [branch: DEBUG-v021]
2026-07-04 01:44:08 temp/done/S0801_bugfix-camera-capture-resume-crash.md spec-arc Archive S0801 as implemented -> temp/done/; removed probe tag from CameraCaptureActivity.kt [branch: DEBUG-v021]
2026-07-04 01:44:08 temp/done/S0812_camera-scenario-context-label.md spec-arc Archive S0812 as implemented -> temp/done/; removed probe tag from CameraCaptureSaveDestinationLabelManager.kt [branch: DEBUG-v021]
2026-07-04 01:47:24 PLAN/spec-catalog.jsonl spec-arc Archived S0788 (edge-gesture launch camera) + S0680 (gesture crop-screenshot-share) as Implemented per owner; removed their BlockNeedUserTest probe tags (ScreenshotGestureActionDispatcher, PhotoVideoStandaloneActivity), compile green [branch: DEBUG-v021]
2026-07-04 01:50:46 PLAN/S0924_camera-settings-dialog-rotation.md spec Scaffold strategic spec skeleton S0924 [branch: DEBUG-v021]
2026-07-04 01:52:05 PLAN/S0813_redesign-camera-settings-dialog.md S0813 spec Descope unreachable landscape criterion to S0924 (CameraCaptureActivity portrait-locked per S0754) [branch: DEBUG-v021]
2026-07-04 01:57:09 scripts/streams/collect-stream-candidates.ps1 S0925 Publish guard: refuse to ship a favicon_index-bearing CSV without the atlas (-AllowFaviconlessPublish override); re-published stream-catalog.zip now bundles favicon-atlas.png [branch: DEBUG-v021]
2026-07-04 01:59:02 PLAN/S0927_disable-page-swipe-with-edge-gestures.md spec Scaffold strategic spec skeleton S0927 [branch: DEBUG-v021]
2026-07-04 01:59:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt S0926 S0926: auto-start video recording for the ‘Start video recording’ edge-gesture (autoCapture flag on the switchable/video launch path; reuses S0790 maybeAutoCapture -> triggerCapture -> toggleRecording) [branch: DEBUG-v021]
2026-07-04 02:04:14 PLAN/S0806_file-browser-menu-app-settings-entry.md spec-arc Archive S0806 (browse overflow app-settings entry) as implemented -> temp/done/; removed S0817/S0806/S0818 BNUT probe tags [branch: DEBUG-v021]
2026-07-04 02:04:15 PLAN/S0817_browse-select-all-scroll-lock.md spec-arc Archive S0817 (browse select-all scroll lock) as implemented -> temp/done/ [branch: DEBUG-v021]
2026-07-04 02:04:16 PLAN/S0818_browse-file-operations-background-mode.md spec-arc Archive S0818 (browse file-ops background mode) as implemented -> temp/done/ [branch: DEBUG-v021]
2026-07-04 02:09:56 PLAN/S0803_mini-game-level-field-scaling.md spec-arc Archive S0803 (mini-game level field scaling) as implemented -> temp/done/; removed S0803/S0804 BNUT probe tags [branch: DEBUG-v021]
2026-07-04 02:09:58 PLAN/S0804_mini-game-modes-classic-kryvavitsa.md spec-arc Archive S0804 (mini-game classic/kryvavitsa modes) as implemented -> temp/done/ [branch: DEBUG-v021]
2026-07-04 02:11:24 PLAN/S0928_mini-game-skip-turn-button.md spec Scaffold strategic spec skeleton S0928 [branch: DEBUG-v021]
2026-07-04 02:12:30 PLAN/S0919_image-print-trampoline.md spec-arc Archive S0919 (image print trampoline) as implemented -> temp/done/; removed S0919/S0613 BNUT probe tags [branch: DEBUG-v021]
2026-07-04 02:12:31 PLAN/S0613_standalone-document-text-print-send-to.md spec-arc Archive S0613 (standalone document/text print send-to + panel-revert fix) as implemented -> temp/done/ [branch: DEBUG-v021]
2026-07-04 02:22:55 PLAN/S0929_file-info-exif-geotag-maps.md spec Scaffold strategic spec skeleton S0929 [branch: DEBUG-v021]
2026-07-04 02:29:51 app_v2/src/main/res/layout/page_welcome_functionality.xml Welcome functionality page - portrait single-column toggle stack Portrait variant now stacks capability toggles in one flush column (icons no longer fit two columns); landscape keeps two columns [branch: DEBUG-v021]
2026-07-04 02:30:00 PLAN/S0930_quick-audio-recorder-stop-overlay.md spec Add strategic spec S0930 for a floating stop indicator on the headless quick audio recorder (widget/edge-gesture), triggered by an S0796 device-test finding [branch: DEBUG-v021]
2026-07-04 02:38:55 app_v2/src/main/java/com/sza/fastmediasorter/widget/PhotoCaptureLaunchManager.kt S0790-S0794 Headless photo capture for take-photo edge gestures: replace CameraCaptureActivity auto-capture (result lost to trampoline noHistory teardown) with in-lifecycle CameraX ImageCapture (no preview, no second activity); drop noHistory from trampoline manifest. [branch: DEBUG-v021]
2026-07-04 02:38:57 PLAN/S0931_recording-timer-duplication.md spec Scaffold strategic spec skeleton S0931 (parked from S0930 tactical research) [branch: DEBUG-v021]
2026-07-04 02:46:18 PLAN/S0930_quick-audio-recorder-stop-overlay/INDEX.md spec-tech Create tactical plan for S0930 [branch: DEBUG-v021]
2026-07-04 02:46:18 PLAN/S0930_quick-audio-recorder-stop-overlay/PHASE_01__foundations.md spec-tech Phase 01: foundations [branch: DEBUG-v021]
2026-07-04 02:46:19 PLAN/S0930_quick-audio-recorder-stop-overlay/PHASE_02__flavor-overlay-impl.md spec-tech Phase 02: flavor-overlay-impl [branch: DEBUG-v021]
2026-07-04 02:46:19 PLAN/S0930_quick-audio-recorder-stop-overlay/PHASE_03__service-wiring.md spec-tech Phase 03: service-wiring [branch: DEBUG-v021]
2026-07-04 02:46:19 PLAN/S0930_quick-audio-recorder-stop-overlay/PHASE_04__docs-catalog-cleanup.md spec-tech Phase 04: docs-catalog-cleanup [branch: DEBUG-v021]
2026-07-04 02:46:20 PLAN/S0930_quick-audio-recorder-stop-overlay.md spec-tech Status -> Tactical [branch: DEBUG-v021]
2026-07-04 02:49:28 app_v2 browse+streams favorites S0783 Favorites list stream rows: show live catalog channel name (MaterializeFavoritesUseCase, shared by both materializers) and favicon-atlas thumbnail (AdapterThumbnailLoader STREAM branch, wired via BrowseActivity/BrowseManagerInitializer/MediaFileAdapter); fixes master.m3u8 name + placeholder icon [branch: DEBUG-v021]
2026-07-04 02:49:34 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickRecorderIndicatorController.kt app_v2 S0930 Phase 01.1: add QuickRecorderIndicatorController contract for the headless quick-recorder floating stop indicator [branch: DEBUG-v021]
2026-07-04 02:50:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt S0700 grid capture crash S0700: guard offscreen ImageReader capture against UnsupportedOperationException (producer YUV 0x23 vs reader RGBA 0x1) - catch on the reader HandlerThread with favicon fallback instead of a process kill; root cause is a codec format mismatch, not experiment #3’s timing race [branch: DEBUG-v021]
2026-07-04 02:50:35 app_v2/src/main/java/com/sza/fastmediasorter/di/QuickRecorderIndicatorModule.kt app_v2 S0930 Phase 01.2: add empty-set Hilt multibinding for QuickRecorderIndicatorController [branch: DEBUG-v021]
2026-07-04 02:51:49 app_v2/src/main/res/values/strings.xml docs+strings Clarify screen-capture consent: accessibility service enables silent screenshots only; screen video recording always shows Android MediaProjection app/whole-screen consent at each recording start and cannot be skipped (rate-limit/no-audio/Play-policy make an accessibility video path non-viable). Updated screenshot_accessibility_service_description, setting_screenshot_accessibility_shortcut_hint, screen_recording_disclosure_message (EN/RU/UK) + btnOpenAccessibilitySettings annotation; re-rendered SETTINGS_REFERENCE*. [branch: DEBUG-v021]
2026-07-04 02:58:54 app_v2/src/standardScreenCapture/java/com/sza/fastmediasorter/widget/QuickRecorderIndicatorControllerImpl.kt app_v2 S0930 Phase 02.1: standardScreenCapture floating stop-indicator implementation reusing the S0774 pill layout [branch: DEBUG-v021]
2026-07-04 02:59:26 app_v2/src/standardScreenCapture/java/com/sza/fastmediasorter/di/ScreenCaptureModule.kt app_v2 S0930 Phase 02.1: bind QuickRecorderIndicatorControllerImpl into the standardScreenCapture DI graph [branch: DEBUG-v021]
2026-07-04 03:00:01 app_v2/src/noLegal/java/com/sza/fastmediasorter/widget/QuickRecorderIndicatorControllerImpl.kt app_v2 S0930 Phase 02.2: noLegal floating stop-indicator implementation reusing the S0774 pill layout [branch: DEBUG-v021]
2026-07-04 03:00:31 app_v2/src/noLegal/java/com/sza/fastmediasorter/di/ScreenCaptureModule.kt app_v2 S0930 Phase 02.2: bind QuickRecorderIndicatorControllerImpl into the noLegal DI graph [branch: DEBUG-v021]
2026-07-04 03:05:47 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt app_v2 S0930 Phase 03: wire QuickRecorderIndicatorController + RecordingElapsedTimer into the four service lifecycle transition points (start/stopAndSave/failAndStop/onDestroy) [branch: DEBUG-v021]
2026-07-04 03:13:51 docs/ALL_FEATURES.jsonl docs S0930 Phase 04.1: record floating quick-recorder stop-indicator capability (screen-capture.quick-recorder-floating-stop-indicator) and extend the screen-capture/audio-recording bullet in docs/FEATURES.md + _RU + _UK [branch: DEBUG-v021]
2026-07-04 03:16:01 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt app_v2 S0930 Phase 04.3: insert S0930 device-test probe at the indicator-show branch [branch: DEBUG-v021]
2026-07-04 03:17:06 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt app_v2 S0930 Phase 04.3: insert S0930 device-test probe at the indicator-show branch (status now BlockNeedUserTest) [branch: DEBUG-v021]
2026-07-04 03:23:23 PLAN/S0790_left-edge-gesture-take-photo-action.md spec-arc Archive S0790-S0794 as implemented (headless take-photo edge-gesture family); removed 5 debug tags from PhotoCaptureLaunchManager + ScreenshotGestureActionDispatcher on leaving BlockNeedUserTest. [branch: DEBUG-v021]
2026-07-04 03:28:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt S0700 grid capture crash S0700: disable CAPTURE_ENABLED - grid live-thumbnail capture native-crashes on Samsung Exynos/API36 (process kill during decoder/Surface setup, before any Java callback; uncaught by the reader-thread try/catch which only handles the emulator’s Java UnsupportedOperationException). Grid falls back to the S0785 favicon atlas until capture is reworked off the offscreen ImageReader path. Verified on standard debug emulator: grid renders favicons, 0 capture attempts, 0 FATAL. [branch: DEBUG-v021]
2026-07-04 03:30:29 PLAN/S0930_quick-audio-recorder-stop-overlay.md spec-test-device Device run on emulator-5554 (noLegal debug) -> PASS/BLOCKED/INCONCLUSIVE 3/1/1, 0 log errors; indicator display itself needs manual owner tap [branch: DEBUG-v021]
2026-07-04 03:30:57 PLAN/S0884_split-delete-confirm-toggles-portrait.md spec-all Compact spec: S0884 split confirm-delete/confirm-move toggles into two rows (portrait only) [branch: DEBUG-v021]
2026-07-04 03:31:28 PLAN/S0881_split-settings-toggles-portrait.md spec-all Compact spec: S0881 split settings toggles into two rows in portrait [branch: DEBUG-v021]
2026-07-04 03:32:14 PLAN/S0930_quick-audio-recorder-stop-overlay.md spec-check Audit S0930 -> held at BlockNeedUserTest (PASS 17, WARN 0, FAIL 0, MANUAL 3); floating-indicator display itself still needs a real on-device tap before Verified [branch: DEBUG-v021]
2026-07-04 03:32:36 PLAN/S0910_welcome-enable-all-process-death-resume.md spec-all Compact spec: S0910 welcome enable-all process-death stage-chain fix [branch: DEBUG-v021]
2026-07-04 03:33:25 app_v2/src/main/res/layout/fragment_settings_destinations.xml SettingsDestinationsFragment layout S0881: split default-player toggles into two rows in portrait [branch: DEBUG-v021]
2026-07-04 03:35:03 app_v2/src/main/res/layout/fragment_settings_destinations.xml spec-all S0884: split confirm-delete/confirm-move toggles into two rows, portrait only [branch: DEBUG-v021]
2026-07-04 03:35:03 PLAN/S0884_split-delete-confirm-toggles-portrait.md spec-all S0884 Verified - Last Audit recorded [branch: DEBUG-v021]
2026-07-04 03:36:15 app_v2/src/main/res/layout/fragment_settings_destinations.xml SettingsDestinationsFragment layout S0881: split default-player toggles into two rows in portrait [branch: DEBUG-v021]
2026-07-04 03:36:57 PLAN/S0881_split-settings-toggles-portrait.md spec-all S0881 implemented: portrait settings toggles split into two rows [branch: DEBUG-v021]
2026-07-04 03:37:18 app_v2/src/main/java/com/sza/fastmediasorter/util/RecordingElapsedTimer.kt shared recording indicator timer deduplicated screen recording elapsed timer with shared helper [branch: DEBUG-v021]
2026-07-04 03:38:39 PLAN/S0881_split-settings-toggles-portrait.md spec-check Audit S0881 -> Verified; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v021]
2026-07-04 03:50:24 PLAN/S0843_refresh-stale-webcam-seeds.md spec-arc Archive S0843 (refresh-stale-webcam-seeds) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:50:25 PLAN/S0881_split-settings-toggles-portrait.md spec-arc Archive S0881 (split-settings-toggles-portrait) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:50:26 PLAN/S0884_split-delete-confirm-toggles-portrait.md spec-arc Archive S0884 (split-delete-confirm-toggles-portrait) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:50:27 PLAN/S0885_app-icons-send-to-toggles.md spec-arc Archive S0885 (app-icons-send-to-toggles) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:50:28 PLAN/S0886_icons-black-screen-pip-toggles.md spec-arc Archive S0886 (icons-black-screen-pip-toggles) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:50:28 PLAN/S0887_icons-rename-delete-toggles.md spec-arc Archive S0887 (icons-rename-delete-toggles) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:50:29 PLAN/S0918_restore_device_reach_screen_portrait_feature.md spec-arc Archive S0918 (Restore Play device reach lost to implied screen.portrait feature) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:50:30 PLAN/S0925_stream-catalog-publish-drops-favicon-atlas.md spec-arc Archive S0925 (stream-catalog-publish-drops-favicon-atlas) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:50:31 PLAN/S0931_recording-timer-duplication.md spec-arc Archive S0931 (recording-timer-duplication) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:51:25 PLAN/S0883_reorder-settings-groups-copy-delete.md spec-all Compact spec S0883: reorder Copy/Move above Safety/Trash in Operations settings - Verified [branch: DEBUG-v021]
2026-07-04 03:51:25 app_v2/src/main/res/layout/fragment_settings_destinations.xml OperationsSettingsFragment Reorder Copy/Move card above Safety/Trash card (+ layout-land counterpart) per S0883 [branch: DEBUG-v021]
2026-07-04 03:55:35 PLAN/S0754_camera-orientation-send-settings-dialog.md spec-arc Archive S0754 (camera-orientation-send-settings-dialog) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:55:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraCaptureSaveDestinationLabelManager.kt spec-arc Remove leftover S0754 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 03:55:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraSettingsCallbackHandler.kt spec-arc Remove leftover S0754 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 03:56:06 PLAN/S0933_streams-grid-capture-engine-rework.md spec-all Strategic spec approved: S0933 crash-free stream grid capture engine rework [branch: DEBUG-v021]
2026-07-04 03:57:01 PLAN/S0765_bugfix-camera-photo-exif-metadata.md spec-arc Archive S0765 (bugfix-camera-photo-exif-metadata) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:57:09 PLAN/S0774_programs-screen-recording-action.md spec-arc Archive S0774 (programs-screen-recording-action) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:57:09 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenVideoRecordingService.kt spec-arc Remove leftover S0774 BlockNeedUserTest debug tags on archive [branch: DEBUG-v021]
2026-07-04 03:57:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/RecordingIndicatorOverlayManager.kt spec-arc Remove leftover S0774 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 03:57:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainVoiceCaptureManager.kt spec-arc Remove leftover S0774 BlockNeedUserTest debug tags on archive [branch: DEBUG-v021]
2026-07-04 03:59:38 PLAN/S0778_streams-now-playing-panel-under-system-bars.md spec-arc Archive S0778 (streams-now-playing-panel-under-system-bars) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:59:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamInlineAudioManager.kt spec-arc Remove leftover S0778 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 03:59:44 PLAN/S0783_streams-favorites-channel-entry.md spec-arc Archive S0783 (streams-favorites-channel-entry) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:59:44 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/MaterializeFavoritesUseCase.kt spec-arc Remove leftover S0783 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 03:59:50 PLAN/S0785_streams-list-country-flag-fallback-icon.md spec-arc Archive S0785 (streams-list-country-flag-fallback-icon) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:59:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamSourceAdapter.kt spec-arc Remove leftover S0785 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 03:59:57 PLAN/S0786_geolocation-permission-photo-video-metadata.md spec-arc Archive S0786 (geolocation-permission-photo-video-metadata) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 03:59:57 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt spec-arc Remove leftover S0786 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 04:00:03 PLAN/S0787_settings-list-picker-usability.md spec-arc Archive S0787 (settings-list-picker-usability) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 04:00:03 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/ListSelectionDialog.kt spec-arc Remove leftover S0787 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 04:01:34 PLAN/S0933_streams-grid-capture-engine-rework/INDEX.md spec-all Tactical plan + research 01: S0933 TextureView crash-free capture rework [branch: DEBUG-v021]
2026-07-04 04:02:27 PLAN/S0813_redesign-camera-settings-dialog.md spec-arc Archive S0813 (redesign-camera-settings-dialog) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 04:02:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraSettingsDialogFragment.kt spec-arc Remove leftover S0813 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 04:02:40 PLAN/S0820_video-fullscreen-open-option.md spec-arc Archive S0820 (video-fullscreen-open-option) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 04:02:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/VideoSettingsFragment.kt spec-arc Remove leftover S0820 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 04:02:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-arc Remove leftover S0820 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 04:02:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt spec-arc Remove leftover S0820 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 04:02:47 PLAN/S0828_print-dispatch-raw-thread-io-hardening.md spec-arc Archive S0828 (print-dispatch-raw-thread-io-hardening) -> temp/done/ [branch: DEBUG-v021]
2026-07-04 04:02:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/print/PrintDispatchActivity.kt spec-arc Remove leftover S0828 BlockNeedUserTest debug tag on archive [branch: DEBUG-v021]
2026-07-04 04:03:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeEnableAllManager.kt WelcomeEnableAllManager Persist welcome enable-all resume across recreation and reattach the grant-all completion callback [branch: DEBUG-v021]
2026-07-04 04:04:10 PLAN/S0933_streams-grid-capture-engine-rework/INDEX.md spec-all S0933 pipeline paused at F3: strategic+tactical+research ready; impl deferred to device-in-loop /spec-dev (native crash reproduces only on Samsung Exynos; tree mid-edit by parallel S0931) [branch: DEBUG-v021]
2026-07-04 04:31:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt S0933 capture rework S0933: rework grid frame capture from offscreen ImageReader to off-screen TextureView + getBitmap (crash-free on HW decoders); re-enable CAPTURE_ENABLED. Emulator smoke: 7 frames captured, 0 FATAL, ImageReader path gone [branch: DEBUG-v021]
2026-07-04 04:36:50 PLAN/S0933_streams-grid-capture-engine-rework.md spec-dev S0933 all phases done -> BlockNeedUserTest; TextureView capture rework, emulator PASS (7 frames, 0 crash), Samsung device gate pending [branch: DEBUG-v021]
2026-07-04 04:48:34 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneSystemBars.kt S0920 standalone player chrome S0920 wave-2: standalone players show the OS status bar in commands mode. New StandaloneSystemBars clears Theme.FullScreen FLAG_FULLSCREEN, shows the status bar and forces light system-bar icons; wired into all 4 hosts (PhotoVideo/Text/Document/Audio). Shared FullScreen theme untouched (in-app PlayerActivity shares it). TextStandalone hides the redundant btnCloseTextViewer. Font-size swipe confirmed already working via shared TextViewerManager. [branch: DEBUG-v021]
2026-07-04 05:31:13 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.7040.526 - plateau merge from DEBUG-v021 [branch: DEBUG-v021]
2026-07-04 05:38:02 docs/FEATURES.md FEATURES Showcase update for v2.60.7040.526 from ALL_FEATURES diff [branch: DEBUG-v022]
2026-07-04 13:56:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileInfoDialog.kt S0929 file-info EXIF geotag File info dialog: extract EXIF capture date for local photos via async detailed read, render GPS coords as a tappable maps link (geo: intent, browser fallback, Toast on none) in the EXIF section, gate video geotag to VIDEO, tvExifGPS colorPrimary in both layouts. Build standard debug SUCCESSFUL; status BlockNeedUserTest (device verify). [branch: DEBUG-v022]
2026-07-04 14:09:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt S0928 mini-game skip-turn Mini-game: add skip-turn button in the D-pad center (both layouts). GameRulesEngine.applySkipTurn ticks a turn and moves enemies without moving the player; GameViewModel.skipTurn mirrors move(); btnGameSkip wired in GameActivity; game_skip_turn string EN/RU/UK. Build standard debug SUCCESSFUL; status BlockNeedUserTest (device verify). My files detekt-clean; listener/detekt gate fails are sibling WIP on dirty tree. [branch: DEBUG-v022]
2026-07-04 14:18:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerGestureCallbackImpl.kt S0927 disable page-swipe on edge gestures Player: suppress horizontal page-swipe navigation (file/PDF page/EPUB chapter/office) when the left-edge screen-gesture overlay is enabled, to avoid colliding with the capture gesture. Gated in PlayerGestureCallbackImpl via viewModel.settings.gestureOverlayEnabled; vertical swipes and tap-zones unchanged. Build standard debug SUCCESSFUL; status BlockNeedUserTest (device verify). [branch: DEBUG-v022]
2026-07-04 14:37:26 PLAN/S0924_camera-settings-dialog-rotation.md S0924 camera-settings-dialog-rotation Research + strategic spec: chose mechanism (C) View.rotation + dialog.window.setLayout to rotate ONLY the camera settings dialog under the portrait-locked activity; documented reusable CameraOrientationManager signal, rotate-and-swap-measure helper plan, dropdown-popup/tooltip visual seams, dead layout-land removal. Draft -> Approved. Implementation device-gated (HIGH blind risk per research; needs on-device visual iteration). [branch: DEBUG-v022]
2026-07-04 14:40:16 PLAN/spec-catalog.jsonl spec-next Session: 4 processed (S0929/S0928/S0927 -> BlockNeedUserTest, S0924 -> Approved), 0 verified, 3 device-parked + 1 device-gated impl; checkpoint at round boundary for context/compact. [branch: DEBUG-v022]
2026-07-04 15:50:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.kt S0882 collapsible-groups-photo-video-recorder Settings/Operations: split the single ‘Photo, Video, Voice recorder’ collapsible group into four separate collapsible groups (Photography/Video recording/Voice recorder/Screen recording) with header icons; 4 register() keys, 4 group strings EN/RU/UK, settings-doc-sync regenerated; removed orphaned settings_category_other_features string + dead section-state migration mapping. Build standard debug SUCCESSFUL; status BlockNeedUserTest (device verify). [branch: DEBUG-v022]
2026-07-04 17:10:11 PLAN/S0935_bugfix-instagram-reel-ytdlp-404.md spec Scaffold strategic spec skeleton S0935 (Instagram reel yt-dlp HTTP 404) [branch: DEBUG-v022]
2026-07-04 17:10:12 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot.md spec Scaffold strategic spec skeleton S0936 (stream freeze native-heap snapshot pipeline) [branch: DEBUG-v022]
2026-07-04 17:10:12 PLAN/S0937_player-playback-observability.md spec Scaffold strategic spec skeleton S0937 (player playback observability) [branch: DEBUG-v022]
2026-07-04 17:23:06 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt S0935 Instagram reel yt-dlp HTTP 404 -> NotFound so cascade falls through to html/dynamic [branch: DEBUG-v022]
2026-07-04 17:26:15 app_v2/src/main/AndroidManifest.xml; app_v2/src/vr/AndroidManifest.xml S0934 Pre-arm API-36 large-screen opt-out: PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY=true on CameraCaptureActivity (main) + DiagnosticXrActivity (vr, symmetric). Inert until targetSdk 36; preserves portrait-lock/overlay-rotation UX (S0754/S0844). [branch: DEBUG-v022]
2026-07-04 17:33:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/DefaultAppsDialogFragment.kt S0880 settings-default-app-buttons-dialog Settings/Operations: moved the default-player button subgroup (4 per-type buttons + 2 toggles) into a new DefaultAppsDialogFragment; replaced it in-place with a single ‘Set as default’ launcher button; DefaultPlayerSettingsManager.bind now takes DialogDefaultAppsBinding; SettingsSearchRegistry + settings-doc-sync updated; added 2 strings EN/RU/UK, removed 1 orphan. Build standard debug SUCCESSFUL; status BlockNeedUserTest (device verify). [branch: DEBUG-v022]
2026-07-04 17:34:56 PLAN/spec-catalog.jsonl spec-next Session cont.: 6 processed (S0929/S0928/S0927/S0882/S0880 -> BlockNeedUserTest, S0924 -> Approved device-gated). All builds green, scoped detekt PASS. S0880/S0882 impl delegated to android-kotlin-developer subagents. [branch: DEBUG-v022]
2026-07-04 17:59:00 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot.md spec-all S0936 root-cause corrected: stream stall-watchdog gap (native-heap/snapshot hypothesis disproven by code); Approved then BlockByOtherTask on S0937 [branch: DEBUG-v022]
2026-07-04 18:07:01 PLAN/S0814_sync-docs-site-from-tickets.md spec-all S0814 Draft->Approved->BlockQuestions: strategic spec rewritten + doc-freshness reconciliation report (research/01: 11 clear gaps, top=Screen Capture edge-gesture area). Blocked on owner section-6 decisions (which candidates/doc, timing vs BlockNeedUserTest wave, checklist vs gate). [branch: DEBUG-v022]
2026-07-04 18:09:45 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt S0937 Stream playback observability: log stream player state/isPlaying transitions so silent stalls are visible in Timber harvest [branch: DEBUG-v022]
2026-07-04 18:12:06 PLAN/S0937_player-playback-observability.md spec-all Pipeline Verified: S0937 stream player state/isPlaying logging (unblocks S0936) [branch: DEBUG-v022]
2026-07-04 18:16:43 PLAN/S0937_player-playback-observability.md spec-check Audit S0937 -> Verified; PASS/WARN/FAIL 8/0/0. Stream state+isPlaying observability confirmed in StreamPlaybackHelper.kt (onPlaybackStateChanged/onIsPlayingChanged Timber.d, streamStateLabel); zero probe tags; catalog Approved->Verified reconciled with file header + prior code-audit. [branch: DEBUG-v022]
2026-07-04 18:17:17 PLAN/S0883_reorder-settings-groups-copy-delete.md spec-arc Archive S0883 (reorder-settings-groups-copy-delete) -> temp/done/ [branch: DEBUG-v022]
2026-07-04 18:17:20 PLAN/S0934_targetsdk36-orientation-restriction-optout.md spec-arc Archive S0934 (targetsdk36-orientation-restriction-optout) -> temp/done/ [branch: DEBUG-v022]
2026-07-04 18:17:24 PLAN/S0937_player-playback-observability.md spec-arc Archive S0937 (player-playback-observability) -> temp/done/ [branch: DEBUG-v022]
2026-07-04 18:20:18 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot/INDEX.md spec-tech Create tactical plan for S0936 (stream stall watchdog) [branch: DEBUG-v022]
2026-07-04 18:20:18 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot/PHASE_01__stall-detection-watchdog.md spec-tech Phase 01: stall detection watchdog (detect+log, no recovery) [branch: DEBUG-v022]
2026-07-04 18:20:18 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot/PHASE_02__watchdog-recovery-trigger.md spec-tech Phase 02: watchdog recovery trigger (BLOCKED: device-repro + owner thresholds) [branch: DEBUG-v022]
2026-07-04 18:20:18 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v022]
2026-07-04 18:20:18 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot.md spec-tech Status -> Tactical [branch: DEBUG-v022]
2026-07-04 18:21:10 PLAN/S0775_publish-app-samsung-store.md spec-all S0775 Draft->Approved->BlockExternal: strategic spec for Samsung Galaxy Store publication (reuse release AAB, port Play listing EN/RU/UK, compliance pre-check). Core work external (Samsung Seller Portal account + submission + review); unblocks on owner account. [branch: DEBUG-v022]
2026-07-04 18:36:44 PLAN/S0938_pinned-stream-reorder.md spec Add strategic spec S0938 for pinned-stream-reorder [branch: DEBUG-v022]
2026-07-04 18:38:44 docs/icons/icon-inventory.json spec-all S0916 Verified: regenerated icon-inventory from app (IconInventoryExportTest generate mode) - fixes ic_camera_capture humanized-fallback caused by S0882 removing settings_category_other_features; re-rendered ICON_LEGEND EN/RU/UK; exported 2 missing SVGs (ic_cloud_download, ic_picture_in_picture); assert-icon-inventory-sync PASS all locales. [branch: DEBUG-v022]
2026-07-04 18:43:40 PLAN/S0938_pinned-stream-reorder/INDEX.md spec-tech Create tactical plan for S0938 [branch: DEBUG-v022]
2026-07-04 18:43:40 PLAN/S0938_pinned-stream-reorder/PHASE_01__reorder-persistence.md spec-tech Phase 01: reorder-persistence [branch: DEBUG-v022]
2026-07-04 18:43:40 PLAN/S0938_pinned-stream-reorder/PHASE_02__list-grid-menu.md spec-tech Phase 02: list-grid-menu [branch: DEBUG-v022]
2026-07-04 18:43:40 PLAN/S0938_pinned-stream-reorder/PHASE_03__docs-catalog-cleanup.md spec-tech Phase 03: docs-catalog-cleanup [branch: DEBUG-v022]
2026-07-04 18:43:40 PLAN/S0938_pinned-stream-reorder.md spec-tech Status -> Tactical [branch: DEBUG-v022]
2026-07-04 18:46:12 PLAN/S0940_streams-landscape-header-toolbar.md spec Add strategic spec S0940 for streams landscape header toolbar [branch: DEBUG-v022]
2026-07-04 18:52:10 PLAN/S0941_bugfix-portrait-playback-slider-touch.md spec Add strategic spec S0941 for portrait playback-control slider touch bug [branch: DEBUG-v022]
2026-07-04 18:57:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VerticalSeekBar.kt S0941 Fix vertical-mode touch geometry: scale touchY into getWidth() domain so playback-control sliders track the finger in portrait [branch: DEBUG-v022]
2026-07-04 18:57:24 PLAN/S0938_pinned-stream-reorder.md spec-dev All phases done; status -> BlockNeedUserTest [branch: DEBUG-v022]
2026-07-04 18:57:24 app_v2/src/main/java/com/sza/fastmediasorter/data/local/db/StreamSourceDao.kt spec-dev S0938: pinnedSnapshot + setSortIndex for reorder [branch: DEBUG-v022]
2026-07-04 18:57:24 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/StreamSourceRepository.kt spec-dev S0938: transactional reorderPinned contiguous renumber [branch: DEBUG-v022]
2026-07-04 18:57:24 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/streams/ReorderPinnedStreamUseCase.kt spec-dev S0938: new ReorderPinnedStreamUseCase + PinnedStreamMove [branch: DEBUG-v022]
2026-07-04 18:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-dev S0938: onMovePinned + manual pinned-block order in applyFilter [branch: DEBUG-v022]
2026-07-04 18:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamSourceAdapter.kt spec-dev S0938: reorder menu items (list) with edge gating [branch: DEBUG-v022]
2026-07-04 18:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamGridAdapter.kt spec-dev S0938: reorder menu items (grid) with edge gating [branch: DEBUG-v022]
2026-07-04 18:57:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-dev S0938: wire reorder callbacks to onMovePinned [branch: DEBUG-v022]
2026-07-04 18:57:24 app_v2/src/main/res/values/strings.xml spec-dev S0938: streams_move_up/down/to_top (EN/RU/UK) [branch: DEBUG-v022]
2026-07-04 19:06:22 PLAN/S0940_streams-landscape-header-toolbar/INDEX.md spec-tech Create tactical plan for S0940 (3 phases) [branch: DEBUG-v022]
2026-07-04 19:06:22 PLAN/S0940_streams-landscape-header-toolbar.md spec-tech Status -> Tactical; fix ADR-1 + resolve S6 (no-recreate) [branch: DEBUG-v022]
2026-07-04 19:09:14 app_v2/src/main/res/layout/activity_streams.xml spec-dev S0940 P01: add headerControlsHost slot in streams toolbar (portrait+land) [branch: DEBUG-v022]
2026-07-04 19:13:20 PLAN/S0915_mainactivity-loc-extraction.md spec-all S0915 strategic spec approved: MainActivity now 1330 LOC (was 1487) - reframed from urgent-ceiling to proactive hygiene, target <=1200, player/stream surface out of scope (concurrent session). [branch: DEBUG-v022]
2026-07-04 19:16:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamsControlsPlacementManager.kt spec-dev S0940 P02: add StreamsControlsPlacementManager [branch: DEBUG-v022]
2026-07-04 19:17:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-dev S0940 P02: wire placement manager in setupViews + onConfigurationChanged [branch: DEBUG-v022]
2026-07-04 19:17:36 app_v2/src/main/res/layout-w600dp/activity_streams.xml spec-dev S0940 P02: add headerControlsHost to w600dp variant [branch: DEBUG-v022]
2026-07-04 19:17:56 PLAN/S0942_bugfix-stream-pip-pauses.md spec Add strategic spec S0942 for stream-pauses-on-PiP bug [branch: DEBUG-v022]
2026-07-04 19:18:33 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamsControlsPlacementManager.kt spec-dev S0940 detekt confirm [branch: DEBUG-v022]
2026-07-04 19:18:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamsControlsPlacementManager.kt spec-dev S0940 detekt confirm2 [branch: DEBUG-v022]
2026-07-04 19:19:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamsControlsPlacementManager.kt spec-dev S0940 detekt confirm3 [branch: DEBUG-v022]
2026-07-04 19:23:34 PLAN/S0940_streams-landscape-header-toolbar.md spec-dev S0940 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v022]
2026-07-04 19:37:29 PLAN/S0915_mainactivity-loc-extraction/INDEX.md spec-all S0915 tactical plan: 2-phase MainActivity extraction (1483->1342) into MainLayoutChromeManager + MainEventHandler + KeyboardNavigationHandler; clean #1-7 candidates, streams cluster deferred. [branch: DEBUG-v022]
2026-07-04 19:47:03 PLAN/S0943_app-wide-dpad-operability.md spec Add strategic spec S0943 for app-wide non-touch (D-pad/remote/keyboard/gamepad) operability [branch: DEBUG-v022]
2026-07-04 19:59:57 PLAN/S0943_app-wide-dpad-operability/INDEX.md spec-tech Create tactical plan for S0943 (7 phases; Phase 01 unblocked, 02/05/06 gated on research) [branch: DEBUG-v022]
2026-07-04 20:09:29 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameController.kt spec-dev S0943 S0943 Phase 01: transform-aware focus-frame bounds (getLocationInWindow) fixes indicator offset [branch: DEBUG-v022]
2026-07-04 20:10:21 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusFrameOverlay.kt spec-dev S0943 S0943 Phase 01: snap focus-frame to target on rapid navigation (no mid-flight lag) [branch: DEBUG-v022]
2026-07-04 20:11:43 PLAN/S0915_mainactivity-loc-extraction.md spec-all S0915 Verified: MainActivity 1483->1383 LOC (-100, 117 headroom) - extracted focus-chain/insets/filter-warning -> MainLayoutChromeManager (#1-3) and showError/showInfo -> MainEventHandler (#4-5); 5 methods, no new classes, no player/stream touch, detekt-clean; fixed pre-existing import-order/spacing/long-line debt (Rule 7); #6/#7+dead-code and streams cluster deferred. [branch: DEBUG-v022]
2026-07-04 20:33:00 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt S0935 Broaden ytdlp extraction-failure fallthrough to any HTTP error + DownloadError/ExtractorError (device test: 500 also needs cascade) [branch: DEBUG-v022]
2026-07-04 20:45:57 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/focus/FocusDecorationController.kt spec-dev S0943 S0943 Phase 01: replace overlay focus frame with platform-standard in-place focus decoration (per-view outline); archive S0819; remove overlay code + res tokens [branch: DEBUG-v022]
2026-07-04 21:10:19 PLAN/S0943_app-wide-dpad-operability.md spec Close S0943 Verified: focus indicator delivered (in-place per-view decoration, S0819 overlay removed); reachability deferred to S0944 [branch: DEBUG-v022]
2026-07-04 21:10:19 PLAN/S0944_app-wide-focus-reachability.md spec Draft S0944: app-wide focus reachability (carried over from S0943 closure) [branch: DEBUG-v022]
2026-07-04 21:11:57 PLAN/S0907_landing-js-filter-emoji.md spec-all S0907 Verified: strip decorative emoji from landing feature-explorer (text-only, owner-approved 2026-07-04) - JS filter/scenario/category/howto labels + variant/tab/toggle buttons + summary/innerText headings across index{,-ru,-uk}.html; functional controls (dropdown/theme/clear/search/arrow/bullet) kept. [branch: DEBUG-v022]
2026-07-04 21:11:57 scripts/docs/strip-landing-filter-emoji.ps1 spec-all New: global ASCII-safe idempotent emoji strip for the 3 landing pages (UTF-8 no BOM); whitelist U+25BC/25D0/2716/1F50D/2192/2022 preserved by construction. [branch: DEBUG-v022]
2026-07-04 21:11:57 scripts/quality/assert-doc-icons-sync.ps1 spec-all Add section 5: assert landing pages carry no non-whitelist emoji anywhere; negative-tested (inject U+1F310 -> exit 1). [branch: DEBUG-v022]
2026-07-04 21:14:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt S0942 Skip player lifecycle pause while host activity is in PiP so streams keep playing (root cause: VideoPlayerManager lifecycle observer paused player without a PiP guard, unlike standalone hosts) [branch: DEBUG-v022]
2026-07-04 21:22:29 PLAN/S0944_app-wide-focus-reachability.md spec-all Strategic spec S0944 approved [branch: DEBUG-v022]
2026-07-04 21:25:36 PLAN/S0944_app-wide-focus-reachability/INDEX.md spec-all Tactical plan S0944 (6 phases; universal window-level reachability; 04/05 research-gated) [branch: DEBUG-v022]
2026-07-04 21:29:02 PLAN/S0924_camera-settings-dialog-rotation/INDEX.md spec-all Tactical plan for S0924 authored (F2): 3 phases - rotation-signal-api, rotation-container-manager, cleanup-acceptance. F3 implementation device-gated per strategic sec.6 (blind = HIGH risk), deferred until a device is attached. [branch: DEBUG-v022]
2026-07-04 21:32:41 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-all S0944 S0944 Phase 01: universal initial-focus fallback to content root in BaseActivity (reuses FocusTargetResolver) - every non-overriding screen lands focus on a real control in non-touch [branch: DEBUG-v022]
2026-07-04 21:34:25 PLAN/S0944_app-wide-focus-reachability/INDEX.md spec-all S0944 Phase 01 done (universal initial-focus fallback, device-verified); phases 02-05 deferred (02/03 ready, 04/05 research-gated) [branch: DEBUG-v022]
2026-07-04 21:44:08 PLAN/S0944_app-wide-focus-reachability.md spec-all Close S0944 Verified: universal initial-focus fallback delivered + device-verified; reachability backlog (02-06) deferred by owner [branch: DEBUG-v022]
2026-07-04 22:44:55 scripts/quality/assert-icon-inventory-sync.ps1 assert-icon-inventory-sync.ps1 add cheap settings-source icon inventory freshness check [branch: DEBUG-v022]
2026-07-04 22:44:56 scripts/post-change.ps1 post-change.ps1 trigger icon inventory gate for settings source edits [branch: DEBUG-v022]
2026-07-04 22:44:57 docs/icons/README.md docs/icons/README.md document settings-source icon inventory gate triggers [branch: DEBUG-v022]
2026-07-04 22:46:08 PLAN/S0939_icon-inventory-drift-silent-postchange.md spec S0939: strategic spec updated for the lightweight settings icon inventory drift fix [branch: DEBUG-v022]
2026-07-04 22:46:08 PLAN/S0939_icon-inventory-drift-silent-postchange/INDEX.md spec-tech Tactical plan S0939: cheap settings-source icon inventory gate [branch: DEBUG-v022]
2026-07-04 22:46:09 PLAN/S0939_icon-inventory-drift-silent-postchange/PHASE_01__settings-icon-gate.md spec-dev S0939 completed: lightweight settings icon inventory gate implementation and validation [branch: DEBUG-v022]
2026-07-04 22:56:28 temp/done/ spec-arc Bulk-archive 15 implemented tickets (BlockNeedUserTest sweep) -> temp/done/: S0632, S0688, S0700, S0710, S0712, S0766, S0768, S0784, S0795, S0797, S0822, S0880, S0882, S0915, S0920. Removed debug tags from 13 .kt files; S0933 grid-capture tag kept (still open). [branch: DEBUG-v022]
2026-07-04 23:10:30 app_v2/src/main/res/layout/fragment_settings_destinations.xml,app_v2/src/main/res/layout-land/fragment_settings_destinations.xml,app_v2/src/main/res/layout/fragment_settings_video.xml,app_v2/src/main/res/layout-land/fragment_settings_video.xml,app_v2/src/main/res/layout/fragment_settings_images.xml,app_v2/src/main/res/layout-land/fragment_settings_images.xml,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsCaptureManager.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt,app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OperationsSettingsFragment.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/search/LayoutSettingsSearchSource.kt Settings destination pickers S0842: convert all remaining ‘Select resource..’ text buttons (Destinations/Video/Images settings, 8 buttons) to icon-only per the owner-decided affordance policy; fix Settings-Search BUTTON title fallback so the icon-only rows stay searchable [branch: DEBUG-v022]
2026-07-04 23:14:24 PLAN/S0926_auto-start-video-recording-gesture.md spec-arc Archive S0926 (auto-start-video-recording-gesture) -> temp/done/, owner device-test confirmed [branch: DEBUG-v022]
2026-07-04 23:14:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraCaptureActivity.kt spec-arc S0926: remove BlockNeedUserTest probe tag on archive [branch: DEBUG-v022]
2026-07-04 23:14:25 PLAN/S0927_disable-page-swipe-with-edge-gestures.md spec-arc Archive S0927 (disable-page-swipe-with-edge-gestures) -> temp/done/, owner device-test confirmed [branch: DEBUG-v022]
2026-07-04 23:14:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerGestureCallbackImpl.kt spec-arc S0927: remove BlockNeedUserTest probe tag on archive [branch: DEBUG-v022]
2026-07-04 23:14:27 PLAN/S0928_mini-game-skip-turn-button.md spec-arc Archive S0928 (mini-game-skip-turn-button) -> temp/done/, owner device-test confirmed [branch: DEBUG-v022]
2026-07-04 23:14:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameViewModel.kt spec-arc S0928: remove BlockNeedUserTest probe tag on archive [branch: DEBUG-v022]
2026-07-04 23:14:41 PLAN/S0929_file-info-exif-geotag-maps.md spec-arc Archive S0929 (file-info-exif-geotag-maps) -> temp/done/, owner device-test confirmed [branch: DEBUG-v022]
2026-07-04 23:14:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/FileInfoDialog.kt spec-arc S0929: remove BlockNeedUserTest probe tags (2) on archive [branch: DEBUG-v022]
2026-07-04 23:14:42 PLAN/S0933_streams-grid-capture-engine-rework.md spec-arc Archive S0933 (streams-grid-capture-engine-rework) -> temp/done/, owner device-test confirmed [branch: DEBUG-v022]
2026-07-04 23:14:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamFrameSnapshotManager.kt spec-arc S0933: remove BlockNeedUserTest probe tag on archive [branch: DEBUG-v022]
2026-07-04 23:14:44 PLAN/S0938_pinned-stream-reorder.md spec-arc Archive S0938 (pinned-stream-reorder) -> temp/done/, owner device-test confirmed [branch: DEBUG-v022]
2026-07-04 23:14:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsViewModel.kt spec-arc S0938: remove BlockNeedUserTest probe tag on archive [branch: DEBUG-v022]
2026-07-04 23:15:05 PLAN/S0940_streams-landscape-header-toolbar.md spec-arc Archive S0940 (streams-landscape-header-toolbar) -> temp/done/, owner device-test confirmed [branch: DEBUG-v022]
2026-07-04 23:15:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/StreamsActivity.kt spec-arc S0940: remove BlockNeedUserTest probe tags (2) on archive [branch: DEBUG-v022]
2026-07-04 23:15:07 PLAN/S0942_bugfix-stream-pip-pauses.md spec-arc Archive S0942 (bugfix-stream-pip-pauses) -> temp/done/, owner device-test confirmed [branch: DEBUG-v022]
2026-07-04 23:15:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt spec-arc S0942: remove BlockNeedUserTest probe tag on archive [branch: DEBUG-v022]
2026-07-04 23:20:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VerticalSeekBar.kt VerticalSeekBar Fix vertical thumb position desync from AbsSeekBar’s unswapped getWidth() progress-refresh; remove S0941 BlockNeedUserTest debug tag [branch: DEBUG-v022]
2026-07-04 23:36:39 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamStallWatchdog.kt StreamStallWatchdog S0936 Phase 01.1: stream stall detection watchdog (detect+log, no recovery) [branch: DEBUG-v022]
2026-07-04 23:37:11 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt VideoPlayerManager S0936 Phase 01.2: watchdog state fields (streamStallRunnable/LastPosition/Polls/BufferingSince) [branch: DEBUG-v022]
2026-07-04 23:41:04 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamPlaybackHelper.kt StreamPlaybackHelper S0936 Phase 01.3+01.4: wire stall watchdog start/cancel + buffering-timeout arm into stream state transitions [branch: DEBUG-v022]
2026-07-04 23:41:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt VideoPlayerLifecycleHelper S0936 Phase 01.3: cancel stall watchdog on releasePlayer()+onDestroy() teardown edges (listener symmetry) [branch: DEBUG-v022]
2026-07-04 23:45:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt VideoPlayerLifecycleHelper S0936 Phase 01.3: cancel stall watchdog on releasePlayer()+onDestroy() teardown edges (listener symmetry); incidental detekt-clean fix: onStart() ReturnCount 3->2 [branch: DEBUG-v022]
2026-07-05 00:04:06 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.7042.357 - plateau merge from DEBUG-v022 [branch: DEBUG-v022]
2026-07-05 00:08:39 docs/FEATURES.md FEATURES Showcase update for v2.60.7042.357 from ALL_FEATURES diff [branch: DEBUG-v023]
2026-07-05 00:12:38 scripts/utils/import-remote-logs.ps1 newlog skill + import-remote-logs.ps1 add /newlog skill: import newest diagnostic-log archive from remote-device drop folder C:\GD\temp into logs/, auto-trigger /log-reader on new sessions only [branch: DEBUG-v023]
2026-07-05 00:53:35 PLAN/S0773_vr-cinema-program-separate-player.md spec-all S0773 strategic spec: authored full VR-cinema epic spec from inbox capture + architecture research; approved (gate PASS); parked BlockQuestions on 3 owner decisions (flavor gating vs S0241, first-iteration scope/decomposition, resource open semantics) [branch: DEBUG-v023]
2026-07-05 00:57:45 PLAN/S0530_rendezvous-signaling-server.md spec-all S0530 strategic spec (rendezvous/signaling server for S0421 level B): already complete; approved (gate PASS); parked BlockByOtherTask on S0421 - tactical depends on S0421 P2P transport choice; deliverable is external backend infra, not Android code [branch: DEBUG-v023]
2026-07-05 01:00:09 PLAN/S0555_publish-vr-app-meta-store.md spec-all S0555 strategic spec (publish VR to Meta Horizon Store): complete; approved (gate PASS); parked BlockExternal - Meta App Lab submission + VRC review + Quest-hardware verification are third-party/hardware gates; note vr-flavor SUPPORT_VR_PLAYER=false (S0241) [branch: DEBUG-v023]
2026-07-05 01:02:35 PLAN/S0556_publish-vr-android-xr-store.md spec-all S0556 strategic spec (publish VR to Google Play Android XR track): Approved with all research resolved; parked BlockExternal - Play Console XR submission + Android XR device verification are third-party/hardware gates; needs new Play-Services XR flavor (ADR-0556-01) + owner P-1 decision; immersive depends on S0241 [branch: DEBUG-v023]
2026-07-05 01:06:31 PLAN/S0552_resume-wear-development.md spec-all S0552 strategic spec (resume Wear development): filled skeleton with current-state framing (wear module active + open tickets S0902/S0932/S0725); parked BlockQuestions - umbrella directive, owner must define concrete first Wear increment; not approved (direction is the open question) [branch: DEBUG-v023]
2026-07-05 01:07:23 PLAN/S0748_bugfix-battery-optimization-grant-button.md spec-arc Archive S0748 (bugfix-battery-optimization-grant-button) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 01:08:14 PLAN/S0624_bugfix-sftp-scan-hang-network.md spec-arc Archive S0624 (bugfix-sftp-scan-hang-network) -> temp/done/; removed 4 S0624 debug tags [branch: DEBUG-v023]
2026-07-05 01:08:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt spec-arc Remove S0624 debug tag [branch: DEBUG-v023]
2026-07-05 01:08:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaFilesLoader.kt spec-arc Remove S0624 debug tag [branch: DEBUG-v023]
2026-07-05 01:08:14 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpMediaScanner.kt spec-arc Remove S0624 debug tag [branch: DEBUG-v023]
2026-07-05 01:08:14 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpConnectionPool.kt spec-arc Remove S0624 debug tag [branch: DEBUG-v023]
2026-07-05 01:08:33 PLAN/S0421_windows-sftp-folder-share-companion.md spec-all S0421 strategic spec (Windows SFTP folder-share companion): Approved; parked BlockExternal - MVP is a Windows desktop subproject outside the Android build with undecided tech stack (owner-owned); no autonomously verifiable Android-only slice; level B deps S0530/S0046/S0494/S0496 blocked [branch: DEBUG-v023]
2026-07-05 01:09:10 PLAN/S0923_ocr-native-attach-arm64-crash.md spec-arc Archive S0923 (ocr-native-attach-arm64-crash) -> temp/done/; removed S0923 debug tag [branch: DEBUG-v023]
2026-07-05 01:09:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/RecognitionBackend.kt spec-arc Remove S0923 debug tag [branch: DEBUG-v023]
2026-07-05 01:09:15 PLAN/S0854_bugfix-playbackposition-loop-retains-activity.md spec-arc Archive S0854 (bugfix-playbackposition-loop-retains-activity) -> temp/done/; removed 3 S0854 debug tags [branch: DEBUG-v023]
2026-07-05 01:09:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-arc Remove S0854 debug tag [branch: DEBUG-v023]
2026-07-05 01:09:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt spec-arc Remove S0854 debug tag [branch: DEBUG-v023]
2026-07-05 01:09:15 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlaybackPositionHelper.kt spec-arc Remove S0854 debug tag [branch: DEBUG-v023]
2026-07-05 01:14:43 PLAN/S0773_vr-cinema-program-separate-player.md spec-quiz S0773: BlockQuestions -> Approved via quiz (3 questions: flavor scope, pillar split/sequence, resource-open semantics) [branch: DEBUG-v023]
2026-07-05 01:16:08 PLAN/S0921_settings-migrated-toggle-not-applied.md spec-quiz S0921: BlockQuestions -> Draft via quiz (2 questions; behaviour A chosen, repro state unconfirmed) [branch: DEBUG-v023]
2026-07-05 01:21:48 PLAN/S0814_sync-docs-site-from-tickets.md spec-quiz S0814: BlockQuestions -> Approved via quiz (4 questions) [branch: DEBUG-v023]
2026-07-05 01:24:05 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/ApplyWatchFavoritesDeltaUseCase.kt spec-all S0932: guard watch->phone favorites delta apply against clobbering STREAM favorites (skip when already favorite) + STREAM-preservation unit test + drop unused Timber import [branch: DEBUG-v023]
2026-07-05 01:27:24 PLAN/S0288_nolegal-paddleocr-paddlelite-bundle.md spec-arc Archive S0288 (nolegal-paddleocr-paddlelite-bundle) -> temp/done/; removed 7 S0288 debug tags [branch: DEBUG-v023]
2026-07-05 01:27:24 app_v2/src/noLegal/java/com/sza/fastmediasorter/domain/ocr/PaddleOcrEngine.kt spec-arc Remove S0288 debug tag [branch: DEBUG-v023]
2026-07-05 01:27:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/fragments/OtherMediaSettingsFragment.kt spec-arc Remove S0288 debug tag [branch: DEBUG-v023]
2026-07-05 01:27:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/ImageOcrManager.kt spec-arc Remove 4 S0288 debug tags [branch: DEBUG-v023]
2026-07-05 01:27:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerImageTranslationManager.kt spec-arc Remove S0288 debug tag [branch: DEBUG-v023]
2026-07-05 01:31:08 PLAN/S0552_resume-wear-development.md spec-quiz S0552: BlockQuestions -> Approved via quiz (1 question: first Wear increment -> activate S0902) [branch: DEBUG-v023]
2026-07-05 01:31:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseEventHandler.kt spec-all S0921: document at the fullscreen-open gate that a migrated explicit showCommandPanel legitimately suppresses the global fullscreen toggle after upgrade (owner decision A, intended precedence, not a bug) [branch: DEBUG-v023]
2026-07-05 01:37:01 PLAN/S0902_wear-p2.md spec-all Compact spec: S0902 (5-phase P2 cluster: audio loop, dead album-art, video autoplay, bounded SMB cache, onStop teardown) [branch: DEBUG-v023]
2026-07-05 01:40:15 PLAN/S0814_sync-docs-site-from-tickets/INDEX.md spec-tech S0814: tactical plan authored (INDEX + 6 phases) for narrative-guide reconciliation [branch: DEBUG-v023]
2026-07-05 01:40:15 PLAN/S0814_sync-docs-site-from-tickets.md spec-tech S0814: Status Approved -> Tactical [branch: DEBUG-v023]
2026-07-05 01:43:55 wear/src/main/java/com/sza/fastmediasorter/wear/ui/player S0902 Wear players P2 cluster: fixed audio STATE_ENDED loop (missing pause before seekTo), video autoplay-after-battery-dismiss, added bounded SMB temp-cache eviction (SmbCacheEvictor, audio/video), onStop pause for both players, removed dead album-art constructor deps from AudioPlayerViewModel [branch: DEBUG-v023]
2026-07-05 01:46:31 PLAN/S0902_wear-p2.md S0902 S0902: Approved -> BlockNeedUserTest (5 probe tags inserted, wear debug compile PASS, no device online this session) [branch: DEBUG-v023]
2026-07-05 02:44:07 docs/HOW_TO.md S0814 Phase 01 Add HOW_TO scenarios for capture/recording/camera/statistics/duplicates/streams-grid/quick-sort digits (EN/RU/UK); fix 12 stale settings paths (Management -> Operations); SHA-256 + EXIF/GPS detail [branch: DEBUG-v023]
2026-07-05 02:44:07 docs/FAQ.md S0814 Phase 02 FAQ entries for edge-gesture capture, statistics opt-in, duplicate finder (SHA-256), geotag/EXIF File Info, streams grid + Chromecast, digit shortcuts (EN/RU/UK); fix stale Management settings paths [branch: DEBUG-v023]
2026-07-05 02:44:07 docs/QUICK_START.md S0814 Phase 03 QUICK_START: in-app camera detail + Screen Capture & Edge Gestures advanced block; README Key Features: capture suite, usage statistics, duplicate finder bullets (EN/RU/UK) [branch: DEBUG-v023]
2026-07-05 02:44:07 docs/DOCS_MAP.md S0814 Phase 04 Bump Last Updated to 2026-07-05 for README/QUICK_START/HOW_TO/FAQ rows; add date-vs-publish-status convention note for the two tables [branch: DEBUG-v023]
2026-07-05 02:44:07 .claude/commands/release.md S0814 Phase 05 Narrative-guide drift review anchored in release runbook Step 4 + checklist (pre-existed; verified against ALL_FEATURES-based review contract) [branch: DEBUG-v023]
2026-07-05 02:45:12 PLAN/S0814_sync-docs-site-from-tickets.md spec-dev All 6 phases done (20/20 steps); narrative guides reconciled EN/RU/UK; status -> Implemented [branch: DEBUG-v023]
2026-07-05 02:46:23 PLAN/S0814_sync-docs-site-from-tickets.md spec-check Audit S0814 -> Verified; PASS/WARN/FAIL 18/0/0; docs-only, no debug tags [branch: DEBUG-v023]
2026-07-05 02:51:02 PLAN/S0946_quick-launch-panel-more-android-functions.md S0946 Captured draft spec for expanding Android-level quick-launch panel functions with feasibility analysis and candidate shortlist [branch: DEBUG-v023]
2026-07-05 02:52:42 PLAN/S0947_quick-launch-picker-search-filter.md spec-draft Open Draft spec S0947 for quick search-filter in the quick-launch program picker [branch: DEBUG-v023]
2026-07-05 03:21:18 PLAN/S0947_quick-launch-picker-search-filter.md S0947 Generalized the draft from a quick-launch app picker fix into a common long-picker search-filter UX rule [branch: DEBUG-v023]
2026-07-05 03:28:03 index.html landing hero Compact hero over animation (title+facts+desc+quickstart+links in one block, EN/RU/UK), drop version badge, neutralize CTA; even Replaces grid 4/2/1 with top-aligned cards [branch: DEBUG-v023]
2026-07-05 03:28:03 .github/workflows/jekyll-gh-pages.yml pages ci Add .html/.css/*.js/icons to Pages deploy path filter so root landing edits publish automatically [branch: DEBUG-v023]
2026-07-05 13:13:11 PLAN/S0948_bugfix-stale-archived-ticket-ids-in-permanent-logs.md spec Scaffold strategic spec skeleton S0948 [branch: DEBUG-v023]
2026-07-05 13:22:45 PLAN/S0935_bugfix-instagram-reel-ytdlp-404.md spec-check Audit S0935 -> Verified; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v023]
2026-07-05 13:22:45 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/YtDlpExtractionStrategy.kt spec-check Remove S0935 debug probe tag (spec left BlockNeedUserTest) [branch: DEBUG-v023]
2026-07-05 13:28:35 PLAN/S0949_document-horizontal-swipe-zoom.md spec-draft Open Draft spec S0949 for document horizontal swipe zoom in player and standalone [branch: DEBUG-v023]
2026-07-05 13:31:43 app_v2/build.gradle.kts S0950 Bump yt-dlp nightly 2026.07.02.234458 -> 2026.07.04.221833 (Instagram reel extractor #17075 followup + cookie-invalidation #17126) [branch: DEBUG-v023]
2026-07-05 13:37:48 PLAN/S0951_standalone-document-gesture-parity.md spec-draft Open Draft spec S0951 for standalone document gesture parity with in-app player [branch: DEBUG-v023]
2026-07-05 13:44:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-all S0951 Part A: standalone document host PDF vertical-swipe page parity (setOnSingleFlingListener -> pdfViewerManager.handlePdfFling), mirroring in-app player [branch: DEBUG-v023]
2026-07-05 13:44:45 PLAN/S0952_cross-host-gesture-parity-audit.md spec-all Split S0951 Part B into S0952 (cross-host gesture parity audit, owner-gated Draft) [branch: DEBUG-v023]
2026-07-05 13:55:52 PLAN/S0946_quick-launch-panel-more-android-functions.md spec-quiz S0946: BlockQuestions -> Draft via quiz (4 questions: action-type, debug-meaning, hotspot-fallback, portrait-lock scope) [branch: DEBUG-v023]
2026-07-05 14:05:58 PLAN/S0947_quick-launch-picker-search-filter.md spec-quiz S0947: BlockQuestions -> Draft via quiz (2 questions; canonical simple picker scope + dynamic fit threshold) [branch: DEBUG-v023]
2026-07-05 14:11:03 scripts/quality/assert-no-ticket-logs.ps1 spec-all S0948(b): rewrite ticket-log gate to span-based scan - catches Sxxxx in multi-line Timber calls; blanks in-call //,/* */ comments to avoid false positives [branch: DEBUG-v023]
2026-07-05 14:11:03 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt spec-all S0948(a): strip stale Archived ticket ids (S0151/S0166/S0139/S0211/S0022) from permanent Timber logs across link/auth/browse; delete 3 stale Timber.d probes (S0765/S0640/S0671) [branch: DEBUG-v023]
2026-07-05 14:11:03 PLAN/S0948_bugfix-stale-archived-ticket-ids-in-permanent-logs.md spec-all S0948 compact bugfix: root cause + fix + verification -> Verified [branch: DEBUG-v023]
2026-07-05 14:13:03 PLAN/S0949_document-horizontal-swipe-zoom.md spec-quiz S0949: BlockQuestions -> Draft via quiz (4 questions: swipe-semantics, scale-range, scroll-mode, doc-scope; 1 resolved silently: below-fit-scale) [branch: DEBUG-v023]
2026-07-05 14:15:29 PLAN/S0932_wear-favorites-delta-corrupts-stream-name.md spec-all Audit S0932 -> Verified: apply-guard + STREAM-preservation unit test green (exit 0); Wear round-trip is later MANUAL, not a precondition [branch: DEBUG-v023]
2026-07-05 14:16:26 PLAN/S0952_cross-host-gesture-parity-audit.md spec-quiz S0952: BlockQuestions -> Draft via quiz (4 questions; scope/canonical/legacy-mirror/per-family resolved) [branch: DEBUG-v023]
2026-07-05 14:21:20 PLAN/S0939_icon-inventory-drift-silent-postchange.md spec-all Audit S0939 -> Verified: settings-source-vs-inventory stage in assert-icon-inventory-sync.ps1 + widened post-change trigger confirmed; gate green (exit 0), Phase 01 Done [branch: DEBUG-v023]
2026-07-05 14:24:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomePermissionsManager.kt spec-all S0910: add device-test probe at grant-all callback reattach (fix already in code; enable-all process-death resume) [branch: DEBUG-v023]
2026-07-05 14:25:24 PLAN/S0910_welcome-enable-all-process-death-resume.md spec-all S0910 Approved -> BlockNeedUserTest: Phase 1 fix confirmed in code, Phase 2 build PASS, probe added for Phase 3 device process-death test [branch: DEBUG-v023]
2026-07-05 14:27:20 PLAN/spec-catalog.jsonl spec-next Session: 16 rounds, 3 Verified (S0948/S0932/S0939), 2 impl->BlockNeedUserTest (S0951/S0910), 1 ticket split (S0952), 9 blocked/deferred triaged [branch: DEBUG-v023]
2026-07-05 14:42:25 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt spec-all S0949: PDF horizontal-swipe zoom v1 - shared stepPdfZoom (0.3x..10x), widened PhotoView scale band, standalone buttons routed through it [branch: DEBUG-v023]
2026-07-05 15:16:01 PLAN/S0910_welcome-enable-all-process-death-resume.md spec-test-device S0910 emulator device-test attempt (emulator-5554): reached MANAGE_MEDIA special screen + am kill + return; default-player enabled/no visible stall but reattach probe did NOT fire and app relaunched fresh - INCONCLUSIVE, real device needed; stays BlockNeedUserTest [branch: DEBUG-v023]
2026-07-05 15:26:22 PLAN/S0952_cross-host-gesture-parity-audit.md spec-all S0952: cross-host gesture matrix delivered (research); ranked 5 divergences (PDF tap/long-press + legacy fling = clean parity gaps; VIDEO/AUDIO vocabulary = mutually-exclusive owner UX fork); Draft -> BlockQuestions on video-vocabulary decision [branch: DEBUG-v023]
2026-07-05 15:27:06 PLAN/spec-catalog.jsonl spec-next Session (drafts+approved, device online): S0949 PDF swipe-zoom v1 impl->BlockNeedUserTest; S0910 emulator device-test INCONCLUSIVE (real-device needed); S0952 gesture matrix delivered->BlockQuestions; S0946/S0947 owner-resolved but sizable, deferred for capacity [branch: DEBUG-v023]
2026-07-05 22:22:27 PLAN/S0952_cross-host-gesture-parity-audit.md spec-quiz S0952: BlockQuestions -> Draft via quiz (3 questions; video/audio/split forks resolved) [branch: DEBUG-v023]
2026-07-05 22:32:29 PLAN/S0814_sync-docs-site-from-tickets.md spec-arc Archive S0814 (sync-docs-site-from-tickets) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:30 PLAN/S0907_landing-js-filter-emoji.md spec-arc Archive S0907 (landing-js-filter-emoji) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:31 PLAN/S0916_icon-legend-locale-drift.md spec-arc Archive S0916 (icon-legend-locale-drift) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:32 PLAN/S0921_settings-migrated-toggle-not-applied.md spec-arc Archive S0921 (settings-migrated-toggle-not-applied) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:33 PLAN/S0932_wear-favorites-delta-corrupts-stream-name.md spec-arc Archive S0932 (wear-favorites-delta-corrupts-stream-name) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:34 PLAN/S0935_bugfix-instagram-reel-ytdlp-404.md spec-arc Archive S0935 (bugfix-instagram-reel-ytdlp-404) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:35 PLAN/S0939_icon-inventory-drift-silent-postchange.md spec-arc Archive S0939 (icon-inventory-drift-silent-postchange) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:35 PLAN/S0943_app-wide-dpad-operability.md spec-arc Archive S0943 (app-wide-dpad-operability) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:36 PLAN/S0944_app-wide-focus-reachability.md spec-arc Archive S0944 (app-wide-focus-reachability) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:32:37 PLAN/S0948_bugfix-stale-archived-ticket-ids-in-permanent-logs.md spec-arc Archive S0948 (bugfix-stale-archived-ticket-ids-in-permanent-logs) -> temp/done/ [branch: DEBUG-v023]
2026-07-05 22:38:56 PLAN/S0945_stale-settings-paths-ungated-guides.md spec-quiz S0945: BlockQuestions -> Approved via quiz (1 question) - owner chose Variant A (correct all narrative-guide Settings paths + extend S0558 gate coverage) [branch: DEBUG-v023]
2026-07-05 22:41:28 PLAN/S0952_cross-host-gesture-parity-audit.md spec-all S0952 audit Verified: matrix+decisions delivered, CLEAN gaps split to child S0953 [branch: DEBUG-v023]
2026-07-05 22:48:20 PLAN/S0953_standalone-pdf-gesture-parity.md spec-all S0953: standalone PDF gesture parity - DocumentStandalone tap/long-press + legacy fling; build+detekt pass; -> BlockNeedUserTest [branch: DEBUG-v023]
2026-07-05 22:55:27 PLAN/S0905_audit-layers-567-runtime-evidence.md S0905 Audit sweep layers 5/6/7 + runtime evidence: L5 startup clean, L6 perf parked, L7 R8 proven on minified build (assembleStandardBenchmark, mapping.txt), LeakCanary clean on 12 instances. Parked S0954-S0959. [branch: DEBUG-v023]
2026-07-05 23:06:05 PLAN/S0954_perf-paging-source-per-page-sort-order.md spec-all S0954: investigated - Paging3 browse path is dead, stated P1 latent; -> BlockQuestions (remove vs revive fork) [branch: DEBUG-v023]
2026-07-05 23:07:33 PLAN/S0955_perf-browse-adapter-hotpath-rebind-thumbnail.md spec-all S0955: investigated - dead Paging adapter, latent; -> BlockByOtherTask on S0954 [branch: DEBUG-v023]
2026-07-05 23:14:28 scripts/quality/assert-howto-settings-paths.ps1 spec-all S0945 Phase A: howto-settings gate refactored to multi-file-group; opt-in -IncludeNarrative scans README/QUICK_START/FAQ/TROUBLESHOOTING (resolve-only); hard gate stays HOW_TO-only+green [branch: DEBUG-v023]
2026-07-05 23:17:35 PLAN/S0954_perf-paging-source-per-page-sort-order.md spec-quiz S0954: BlockQuestions -> Approved via quiz (1 question; owner chose remove dead Paging3 subsystem, subsumes S0955) [branch: DEBUG-v023]
2026-07-05 23:51:34 PLAN/S0954_perf-paging-source-per-page-sort-order.md spec-all S0954: removed dead Paging3 browse subsystem (MediaFilesPagingSource+test, Paging adapters, setupPagination, loadMediaFilesWithPagination, pagingDataFlow, usePagination flag); live full-scan path unchanged; build+detekt PASS; -> BlockNeedUserTest (browse smoke) [branch: DEBUG-v023]
2026-07-06 01:11:12 PLAN/S0945_stale-settings-paths-ungated-guides.md spec-all S0945: extend settings-path drift gate to narrative guides (README/QUICK_START/FAQ/TROUBLESHOOTING, EN/RU/UK); add recipe-shape discriminator (Android system-path skip + bare-tab prose prefix); fix 88 broken settings paths to manifest truth across 3 locales; promote gate default-on + wire post-change detection [branch: DEBUG-v023]
2026-07-06 01:16:40 PLAN/S0947_quick-launch-picker-search-filter.md spec-all S0947 F1: finalized strategic spec, added 3.3 owner-inputs approval block, Draft -> Approved (canonical single-choice picker with conditional search-filter) [branch: DEBUG-v023]
2026-07-06 01:18:43 PLAN/S0947_quick-launch-picker-search-filter/INDEX.md spec-all S0947 F2: tactical plan - 4 phases (canonical SearchableOptionPickerDialog enhancement, quick-launch family migration, generic list-dialog migration, on-device verification); 7 in-scope surfaces + documented exclusions [branch: DEBUG-v023]
2026-07-06 01:19:46 PLAN/spec-catalog.jsonl spec-next Session: 3 processed (S0945 Verified, S0947 Draft->Tactical, S0955 skip-cached blocker-not-verified); Draft backlog S0946/S0956/S0957/S0958/S0959 + device-drain remain for continuation [branch: DEBUG-v023]
2026-07-06 01:38:21 PLAN/S0946_quick-launch-panel-more-android-functions.md spec-all F1: S0946 Track A finalized (OS-settings tile catalog expansion), approval gate PASS, Draft->Approved [branch: DEBUG-v023]
2026-07-06 01:47:55 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/OsShortcutCatalog.kt spec-all S0946 Track A: 8 Android OS-settings quick-launch tiles (Developer options, Battery saver, Auto-rotate, Accessibility, Wireless networks, Data usage, NFC, VPN) with 6 new icons, EN/RU/UK strings, regenerated icon inventory/SVGs/legend [branch: DEBUG-v023]
2026-07-06 01:55:33 PLAN/S0956_perf-recyclerview-stable-ids-hygiene.md spec-next S0956 research: stable-IDs premise net-negative for ListAdapter+DiffUtil adapters (crash risk, no gain); findings + won’t-do recommendation written; owner disposition (archive vs marginal setHasFixedSize) deferred [branch: DEBUG-v023]
2026-07-06 02:02:20 PLAN/S0957_r8-browse-file-transfer-gson-field-rename-desync.md spec-all F1: S0957 fix decision (@SerializedName pins transfer-model wire format vs R8 rename), approval gate PASS, Draft->Approved [branch: DEBUG-v023]
2026-07-06 02:16:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/transfer/BrowseFileTransferModels.kt spec-all S0957: @SerializedName pins browse-transfer Gson persistence models (BrowseFileTransferRequest/Source/TerminalPayload) against R8 field renames; cross-version JSON desync fix + reflection guard test [branch: DEBUG-v023]
2026-07-06 02:22:22 PLAN/S0958_deadweight-player-activity-class-buildconfig.md spec-all F1: S0958 dead BuildConfig.PLAYER_ACTIVITY_CLASS removal decided, gate PASS, Draft->Approved [branch: DEBUG-v023]
2026-07-06 02:25:56 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/PlayerActivity.kt spec-all S0958: remove dead BuildConfig.PLAYER_ACTIVITY_CLASS from all 6 flavor blocks, trim stale createPanelIntent KDoc, drop orphaned detekt baseline entry [branch: DEBUG-v023]
2026-07-06 02:31:22 PLAN/S0960_bugfix-vr-diagnostic-oom-decode.md spec Scaffold compact bugfix skeleton S0960 (VR diagnostic decode OOM) [branch: DEBUG-v023]
2026-07-06 02:38:01 app_v2/build.gradle.kts spec-all S0958: removed dead BuildConfig.PLAYER_ACTIVITY_CLASS from all 6 flavor blocks (fc PASS, BuildConfig regenerated without it); reverted the optional KDoc trim + baseline edit to avoid unrelated pre-existing ImportOrdering stale-baseline debt in PlayerActivity.kt (parked) [branch: DEBUG-v023]
2026-07-06 02:38:42 PLAN/S0961_bugfix-vr-immersive-hud-empty-grey.md spec Scaffold compact bugfix skeleton S0961 (empty grey HUD in immersive real playback) [branch: DEBUG-v023]
2026-07-06 02:39:00 PLAN/S0905_audit-layers-567-runtime-evidence.md spec-arc Archive S0905 (audit-layers-567-runtime-evidence) -> temp/done/ [branch: DEBUG-v023]
2026-07-06 02:39:01 PLAN/S0945_stale-settings-paths-ungated-guides.md spec-arc Archive S0945 (stale-settings-paths-ungated-guides) -> temp/done/ [branch: DEBUG-v023]
2026-07-06 02:39:03 PLAN/S0946_quick-launch-panel-more-android-functions.md spec-arc Archive S0946 (quick-launch-panel-more-android-functions) -> temp/done/ [branch: DEBUG-v023]
2026-07-06 02:39:05 PLAN/S0952_cross-host-gesture-parity-audit.md spec-arc Archive S0952 (cross-host-gesture-parity-audit) -> temp/done/ [branch: DEBUG-v023]
2026-07-06 02:39:07 PLAN/S0957_r8-browse-file-transfer-gson-field-rename-desync.md spec-arc Archive S0957 (r8-browse-file-transfer-gson-field-rename-desync) -> temp/done/ [branch: DEBUG-v023]
2026-07-06 02:39:09 PLAN/S0958_deadweight-player-activity-class-buildconfig.md spec-arc Archive S0958 (deadweight-player-activity-class-buildconfig) -> temp/done/ [branch: DEBUG-v023]
2026-07-06 02:43:48 PLAN/S0959_debug-strictmode-flag-hardcoded-off.md spec-next S0959 decision: flip ENABLE_DEBUG_STRICT_MODE to true (not remove) - valuable non-fatal DEBUG-only hook, StrictModeHelper whitelist infra confirmed present; flip+backlog-triage execution deferred (runtime/device-gated + build lock held) [branch: DEBUG-v023]
2026-07-06 02:44:15 PLAN/spec-catalog.jsonl spec-next Session: 8 processed - 3 Verified (S0946 OS-settings tiles, S0957 R8 gson @SerializedName+minified-proof, S0958 dead BuildConfig field), 2 researched+deferred (S0956 stable-ids net-negative, S0959 StrictMode flip decision), 3 skip-cached device/concurrent-gated (S0947 picker, S0960/S0961 VR bugfixes owned by concurrent session) [branch: DEBUG-v023]
2026-07-06 02:56:08 PLAN/S0773_vr-cinema-program-separate-player.md spec Decompose S0773 epic into 3 child tickets S0962/S0963/S0964; mark S0241 VR-removal superseded (owner direction: keep+expand VR) [branch: DEBUG-v023]
2026-07-06 03:18:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/helpers/BrowseVrCinemaLaunchManager.kt S0962 S0962 (VR Cinema Stolp 1): cold immersive launch from Browse video-file overflow (Open in VR Cinema), VR-gated; new BrowseVrCinemaLaunchManager + overflow item + BMI/Activity wiring + EN/RU/UK strings [branch: DEBUG-v023]
2026-07-06 03:39:22 PLAN/spec-catalog.jsonl spec-next Session: 0 processed via spec-all, 0 verified, 2 skip-cached (S0963/S0964 device-gated VR immersive pillars); backlog exhausted, no device [branch: DEBUG-v023]
2026-07-06 10:57:29 PLAN/S0965_docs-vr-drift-reconcile-quickpath.md spec Draft S0965: VR docs drift reconcile + enable/configure/watch-3D quick-path (owner-requested) [branch: DEBUG-v023]
2026-07-06 11:28:32 PLAN/S0966_docs-features-vr-overclaim-showcase.md spec Scaffold strategic spec skeleton S0966 [branch: DEBUG-v023]
2026-07-06 11:29:34 PLAN/S0967_docs-dev-ops-vr-stale-class-names.md spec Scaffold strategic spec skeleton S0967 [branch: DEBUG-v023]
2026-07-06 11:31:33 PLAN/S0968_howto-sbs-3d-vr-mode-flavor-drift.md spec Scaffold strategic spec skeleton S0968 [branch: DEBUG-v023]
2026-07-06 11:32:33 PLAN/S0969_bugfix-vr-install-cta-shows-on-vr-flavor.md spec Scaffold strategic spec skeleton S0969 [branch: DEBUG-v023]
2026-07-06 11:32:44 docs/VR_EDITION.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:44 docs/VR_EDITION_RU.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:45 docs/VR_EDITION_UK.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:45 docs/VR_CONTROLS.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:45 docs/VR_CONTROLS_RU.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:46 docs/VR_CONTROLS_UK.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:46 docs/HOW_TO.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:46 docs/HOW_TO_RU.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:46 docs/HOW_TO_UK.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:47 docs/howto/index.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:47 docs/howto/index-ru.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:32:47 docs/howto/index-uk.md docs S0965: reconcile VR docs to reality + 3D quick-path [branch: DEBUG-v023]
2026-07-06 11:36:27 PLAN/S0965_docs-vr-drift-reconcile-quickpath.md spec-all Pipeline Verified: S0965 (VR docs reconciled to reality + 3D quick-path, 12 files EN/RU/UK) [branch: DEBUG-v023]
2026-07-06 11:52:26 PLAN/S0970_bugfix-permission-flavor-gate-unknown-buildconfig-field.md spec Park S0970 from /newlog: permission flavor-gate references unknown BuildConfig fields (SUPPORT_AUDIO/ENABLE_PERSISTENT_AUDIO_PLAYBACK) on standard release [branch: DEBUG-v023]
2026-07-06 12:21:49 PLAN/S0971_delivery-play-standard-native-modules-unavailable-messaging.md spec Park S0971 from /newlog: Play-standard native modules (OCR/DTS) unavailable + misleading ‘delivered via Google Play’ message [branch: DEBUG-v023]
2026-07-06 12:27:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainLayoutChromeManager.kt S0972 S0972: hide top-bar Start Player button when control-bar buttons overflow (measured, MainLayoutChromeManager); restores + restitches focus on fit change [branch: DEBUG-v023]
2026-07-06 15:57:55 app_v2/src/main/java/com/sza/fastmediasorter/data/delivery/RealDeliverableSetDownloader.kt S0971 S0971: re-bundle OCR (Tesseract/PaddleOCR) + FFmpeg-DTS native .so back into the APK (Play forbids downloading executable .so); mark bundled per flavor, short-circuit downloader/inventory to Installed, drop OCR Play-gate [branch: DEBUG-v023]
2026-07-06 23:43:08 PLAN/S0954_perf-paging-source-per-page-sort-order.md spec-check Audit S0954 -> Verified; device PASS (global sort order Name/Size/Type, correct index resolve, 0 Paging3 refs), probe cleared [branch: DEBUG-v023]
2026-07-06 23:43:08 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseFileOpenManager.kt spec-check Remove S0954 debug probe on Verified transition [branch: DEBUG-v023]
2026-07-07 00:00:22 PLAN/S0951_standalone-document-gesture-parity.md spec-test-device Device run emulator-5554 (API37): PDF standalone fling paging PASS 5/0/1 (scroll-mode not exercised); probe fired 3x, zoom guard verified [branch: DEBUG-v023]
2026-07-07 00:01:28 PLAN/S0951_standalone-document-gesture-parity.md spec-check Audit S0951 -> Verified; device PASS (standalone PDF fling paging up/down + probe x3, zoom/scroll suppression; scroll-guard code-verified), probe cleared [branch: DEBUG-v023]
2026-07-07 00:01:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-check Remove S0951 debug probe on Verified [branch: DEBUG-v023]
2026-07-07 00:08:54 PLAN/S0972_ui-main-toolbar-overflow-hide-start-player.md spec-check Audit S0972 -> Verified; device PASS (Start Player present at 393dp, hidden at 360/196dp overflow with probe, others visible, restored on reset), probe cleared [branch: DEBUG-v023]
2026-07-07 00:08:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainLayoutChromeManager.kt spec-check Remove S0972 debug probe on Verified [branch: DEBUG-v023]
2026-07-07 00:37:35 PLAN/S0949_document-horizontal-swipe-zoom.md spec-check Audit S0949 -> Verified; device PASS (horizontal swipe zoom in/out on in-app + standalone hosts, vertical pages, deep-zoom buttons, scroll-mode ignores; pinch-10x code-verified), probe cleared [branch: DEBUG-v023]
2026-07-07 00:37:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PdfViewerManager.kt spec-check Remove S0949 debug probe on Verified [branch: DEBUG-v023]
2026-07-07 00:39:40 PLAN/S0973_nolegal-link-download-carousel-humanized-delay.md spec Scaffold Draft S0973: noLegal humanized random 0.5-2s pause between carousel download items [branch: DEBUG-v023]
2026-07-07 00:53:19 PLAN/S0930_quick-audio-recorder-stop-overlay.md spec-test-device Device run on emulator-5554 (API37, edgeGestureOverlay=on) -> FAIL 0/3/1: overlay show() crashes on MaterialButton ThemeEnforcement (app-context inflate), failAndStop discards recording [branch: DEBUG-v023]
2026-07-07 00:56:10 PLAN/S0930_quick-audio-recorder-stop-overlay.md spec-sweep S0930 device FAIL -> Broken: QuickRecorderIndicatorControllerImpl.show() crashes inflating view_recording_indicator (MaterialButton needs Theme.MaterialComponents, inflated from app context) -> recording discarded; probe removed [branch: DEBUG-v023]
2026-07-07 00:56:10 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt spec-sweep Remove S0930 probe on Broken transition [branch: DEBUG-v023]
2026-07-07 01:17:16 PLAN/S0953_standalone-pdf-gesture-parity.md spec-test-device Device run on emulator-5554 (Android 17) -> PASS/FAIL/SKIPPED 5/0/1, 0 FMS errors; all 3 S0953 probes fired, image-swipe guard held [branch: DEBUG-v023]
2026-07-07 01:18:20 PLAN/S0953_standalone-pdf-gesture-parity.md spec-check Audit S0953 -> Verified; device PASS (standalone tap/long-press->overlay, legacy+doc fling paging, image-swipe guard held, 3 probes fired), probes cleared [branch: DEBUG-v023]
2026-07-07 01:18:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/standalone/DocumentStandaloneActivity.kt spec-check Remove S0953 tap/long-press probes on Verified [branch: DEBUG-v023]
2026-07-07 01:18:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-check Remove S0953 legacy-fling probe on Verified [branch: DEBUG-v023]
2026-07-07 01:32:27 PLAN/S0901_browse-managers-p2.md spec-check Audit S0901 -> Verified; device PASS (mic-save routes via appScope, survives Browse teardown incl immediate BACK, probe x2, no orphan/crash/leak), probe cleared [branch: DEBUG-v023]
2026-07-07 01:32:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseMicRecordingManager.kt spec-check Remove S0901 debug probe on Verified [branch: DEBUG-v023]
2026-07-07 01:55:54 PLAN/S0910_welcome-enable-all-process-death-resume.md spec-sweep S0910 device FAIL -> Broken: reattach runs in onCreate before BaseActivity deferred setupViews()/attach(), so permissionsManager null -> reattachGrantAllCallback no-op; enable-all stalls after process death. Fix: reattach in attach()/onResumeWithViews. Probe removed [branch: DEBUG-v023]
2026-07-07 01:55:55 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomePermissionsManager.kt spec-sweep Remove S0910 probe on Broken transition [branch: DEBUG-v023]
2026-07-07 01:56:42 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on emulator-5554 (after-S0900): closed 6 (S0954/S0951/S0972/S0949/S0953/S0901), reopened 2 Broken (S0930/S0910 real defects), 1 needs-cloud (S0906) [branch: DEBUG-v023]
2026-07-07 02:02:11 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt S0930 Fix S0930 (2/2): isolate indicator show() in its own try + themed-context inflate in both indicator impls (noLegal/standardScreenCapture) - MaterialButton crash no longer discards recording; compiles fc+fkn [branch: DEBUG-v023]
2026-07-07 07:57:29 PLAN/S0910_welcome-enable-all-process-death-resume.md S0910 Fix S0910: move grant-all reattach from onRestoreInstanceState (too early, permissionsManager null) into attach() where it is wired; compiles fc+fkn; BlockNeedUserTest for device re-verify [branch: DEBUG-v023]
2026-07-07 07:57:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomeEnableAllManager.kt S0910 Reattach grant-all callback in attach() (post-deferred-setupViews) instead of onRestoreInstanceState [branch: DEBUG-v023]
2026-07-07 07:57:29 PLAN/S0969_bugfix-vr-install-cta-shows-on-vr-flavor.md S0969 Fix S0969: VR install CTA gate uses supportsVrMediaControls (true on vr+noLegal) not supportsVrPlayer (false on vr since S0241) so it no longer fires on the vr flavor [branch: DEBUG-v023]
2026-07-07 07:57:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerPlaybackCallbackImpl.kt S0969 VR install CTA gate -> supportsVrMediaControls [branch: DEBUG-v023]
2026-07-07 07:57:30 PLAN/S0970_bugfix-permission-flavor-gate-unknown-buildconfig-field.md S0970 Fix S0970: replace BuildConfig reflection in permission flavor-gate with compile-time when-map (R8 inlines+strips static final booleans, so getField threw on minified release and silently disabled audio permission) [branch: DEBUG-v023]
2026-07-07 07:57:30 app_v2/src/main/java/com/sza/fastmediasorter/data/permissions/PermissionRegistryRepositoryImpl.kt S0970 evaluateFlavorGates: reflection -> resolveFlavorGate when-map (R8-safe) [branch: DEBUG-v023]
2026-07-07 07:58:43 PLAN/S0974_stale-vrstereorenderer-comments.md spec Scaffold strategic spec skeleton S0974 [branch: DEBUG-v023]
2026-07-07 08:14:54 docs/DEV_OPS.md docs S0967/S0968: reconcile VR docs to reality [branch: DEBUG-v023]
2026-07-07 08:14:54 docs/HOW_TO.md docs S0967/S0968: reconcile VR docs to reality [branch: DEBUG-v023]
2026-07-07 08:14:54 docs/HOW_TO_RU.md docs S0967/S0968: reconcile VR docs to reality [branch: DEBUG-v023]
2026-07-07 08:14:54 docs/HOW_TO_UK.md docs S0967/S0968: reconcile VR docs to reality [branch: DEBUG-v023]
2026-07-07 08:24:54 docs/DEV_OPS.md S0967 Reconcile VR ADB-debug section to code: VrPlayerActivity -> DiagnosticXrActivity, drop fictional .vr taskAffinity split, verify logcat tags exist in src/vr, add S0251/S0282 historical note [branch: DEBUG-v023]
2026-07-07 08:24:54 PLAN/S0967_docs-dev-ops-vr-stale-class-names.md spec-check Audit S0967 -> Verified (docs-only); PASS 4/0/0 [branch: DEBUG-v023]
2026-07-07 08:24:55 docs/HOW_TO.md S0968 Fix 3D-video sections flavor scope: single-eye crop universal, manual per-format picker vr/noLegal-only; correct backwards Standard-Legacy claim in both 3D sections [branch: DEBUG-v023]
2026-07-07 08:24:55 docs/HOW_TO_RU.md S0968 Mirror S0968 3D flavor-scope fix (How to Watch 3D Videos section) [branch: DEBUG-v023]
2026-07-07 08:24:55 docs/HOW_TO_UK.md S0968 Mirror S0968 3D flavor-scope fix (How to Watch 3D Videos section) [branch: DEBUG-v023]
2026-07-07 08:24:55 PLAN/S0968_howto-sbs-3d-vr-mode-flavor-drift.md spec-check Audit S0968 -> Verified (docs-only); PASS 3 WARN 1 (three-section 3D overlap follow-up) [branch: DEBUG-v023]
2026-07-07 08:26:38 PLAN/S0975_howto-consolidate-3d-sections.md spec-draft Scaffold Draft skeleton S0975 (consolidate three overlapping HOW_TO 3D sections; follow-up from S0968) [branch: DEBUG-v023]
2026-07-07 09:25:15 PLAN/S0976_prerelease-audit-benign-allowlist-tune.md spec-draft Scaffold Draft skeleton S0976 (tune prerelease log-audit benign allowlist; 110 false actionables in sweep) [branch: DEBUG-v023]
2026-07-07 09:41:20 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.7070.937 - plateau merge from DEBUG-v023 [branch: DEBUG-v023]
2026-07-07 09:55:15 docs/FEATURES.md FEATURES Showcase update for v2.60.7070.937 from ALL_FEATURES diff (PDF hyperlink viewer S0953, more OS tiles S0946) [branch: DEBUG-v024]
2026-07-07 13:56:15 PLAN/S0555_publish-vr-app-meta-store.md S0555 Add 2026 Meta Horizon Store readiness checklist (section 13) + research artifact; refresh status note (App Lab retired, internal S0773 blocker) [branch: DEBUG-v024]
2026-07-07 14:06:59 PLAN/S0555_publish-vr-app-meta-store.md S0555 Record owner decisions (Immersive, quest2-3s, next-block) into readiness checklist + status note [branch: DEBUG-v024]
2026-07-08 15:49:16 maestro/ Maestro suite Add 9 Maestro regression flows: screen tour, add-resource forms, settings toggle sweep, settings search, back-from-every-screen (in -Suite all); resource create/edit/lifecycle-delete and rotation sweep (precondition-gated, excluded from all). Extend run-tests.ps1 all-filter + INDEX. [branch: DEBUG-v024]
2026-07-08 18:32:27 maestro/ Maestro suite Validate 9 new Maestro flows on device (rebuilt+installed fresh debug APK - emulator had stale 2.60.6052). 8/9 green: screen_tour, add_resource_forms, settings_toggle_sweep, settings_search, back_from_every_screen, settings baseline, resource_create_local, resource_edit_toggles. Added _shared/dismiss_settings_dialogs (cache-size dialog blocked settings), removed rotation_sweep (setOrientation unsupported in Maestro 2.6.1). resource_lifecycle create+rename+delete-mechanism verified; grid card-targeting limitation documented. [branch: DEBUG-v024]
2026-07-08 18:33:35 PLAN/S0977_resource-card-test-handles.md spec Scaffold strategic spec skeleton S0977 [branch: DEBUG-v024]
2026-07-09 05:30:40 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt S0977 Per-card E2E handle: contentDescription more_options: on resource overflow buttons [branch: DEBUG-v024]
2026-07-09 08:32:46 PLAN/S0977_resource-card-test-handles.md spec-all Verified S0977: per-card E2E overflow handle; resource_lifecycle 9/9 green on device [branch: DEBUG-v024]
2026-07-09 08:32:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt spec-all Set contentDescription more_options handle on resource overflow buttons for stable E2E targeting [branch: DEBUG-v024]
2026-07-09 08:32:46 maestro/features/resource/resource_lifecycle.yaml spec-all Delete via per-card handle plus popup swipe; removed KNOWN LIMITATION [branch: DEBUG-v024]
2026-07-09 10:54:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraSettingsDialogRotationManager.kt S0924 New rotate-and-swap-measure container that turns the camera settings dialog with device rotation [branch: DEBUG-v024]
2026-07-09 10:55:10 PLAN/S0924_camera-settings-dialog-rotation.md spec-all S0924 code impl (Phase 01-02 + cleanup): camera settings dialog rotates with device via CameraSettingsDialogRotationManager + CameraOrientationManager StateFlow; dead layout-land removed; BlockNeedUserTest (device visual verify pending real phone) [branch: DEBUG-v024]
2026-07-09 11:02:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SearchableOptionPickerDialog.kt S0947 Phase 01 canonical picker: conditional search on overflow, selected highlight+autoscroll, passive IME, reset-row opt-out, label-only filter [branch: DEBUG-v024]
2026-07-09 18:20:32 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SearchableOptionPickerController.kt S0947 Extract reusable single-choice picker controller; migrate 4 quick-launch pickers onto canonical component [branch: DEBUG-v024]
2026-07-09 18:21:43 PLAN/S0947_quick-launch-picker-search-filter.md spec-all S0947 canonical single-choice picker: conditional search-on-overflow + highlight/autoscroll + passive IME + general leading image; extracted SearchableOptionPickerController; migrated 4 quick-launch pickers; ListSelectionDialog family kept bespoke (owner); dead-weight removed; BlockNeedUserTest (device visual verify pending) [branch: DEBUG-v024]
2026-07-09 18:32:06 PLAN/S0947_quick-launch-picker-search-filter.md spec-all Verified S0947 on device: canonical picker conditional search + label filter + passive IME + leading images; 4 quick-launch pickers migrated [branch: DEBUG-v024]
2026-07-09 18:32:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/dialog/SearchableOptionPickerController.kt spec-all Reusable single-choice picker controller (conditional search-on-overflow, highlight+autoscroll, label filter) [branch: DEBUG-v024]
2026-07-09 18:32:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/applaunchpanel/edit/AppPickerDialogFragment.kt spec-all Migrated 4 quick-launch pickers onto canonical searchable picker; removed bespoke adapters/layouts [branch: DEBUG-v024]
2026-07-09 21:41:44 PLAN/S0969_bugfix-vr-install-cta-shows-on-vr-flavor.md spec-all Verified S0969: VR install CTA gate reads supportsVrMediaControls (hidden on vr+noLegal, shown on non-VR); static flavor-wiring audit [branch: DEBUG-v024]
2026-07-09 21:47:16 PLAN/S0971_delivery-play-standard-native-modules-unavailable-messaging.md spec-all Verified S0971: OCR/DTS .so re-bundled (20 across 4 ABI proven in APK), bundled short-circuit + Play-gate removal confirmed, delivery unit tests green [branch: DEBUG-v024]
2026-07-09 21:50:56 PLAN/S0970_bugfix-permission-flavor-gate-unknown-buildconfig-field.md spec-all Verified S0970: permission flavor-gate resolves BuildConfig via compile-time when-map (R8-safe), not reflection; NoSuchFieldException on release eliminated [branch: DEBUG-v024]
2026-07-09 22:24:07 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/DestinationButtonsManager.kt spec-sweep S0531/S0902/S0906 -> BlockExternal (real HW/OAuth deps not reproducible on emulator): removed BlockNeedUserTest probe tags [branch: DEBUG-v024]
2026-07-09 22:34:10 PLAN/S0950_bump-ytdlp-nightly-instagram-reel.md spec-test-device Device run on emulator-5554 -> PASS/FAIL/SKIPPED 2/0/1 [branch: DEBUG-v024]
2026-07-09 22:56:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-sweep S0851 Verified on-device (shuffle re-armed on service reconnect); removed S0851 probe tag [branch: DEBUG-v024]
2026-07-09 22:59:58 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt spec-sweep S0869 Verified on-device (Room warm-up off-main confirmed, no jank/ANR); removed S0869 probe tag [branch: DEBUG-v024]
2026-07-09 23:14:54 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsCaptureManager.kt spec-sweep S0842 Verified on-device (8 icon-only dest pickers render+tap+D-pad; ic_resource glyph correct); removed 9 S0842 probe tags + unused Timber imports [branch: DEBUG-v024]
2026-07-09 23:39:17 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerLifecycleHelper.kt spec-sweep S0893 Verified on-device (PlayerActivity + PhotoVideoStandalone bg/fg resume clean); removed 6 S0893 probe tags [branch: DEBUG-v024]
2026-07-09 23:53:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/helpers/WelcomePermissionsManager.kt spec-sweep S0910 reopened Broken (device-test FAIL: attach() ordering redelivers pending result before grantAllOnComplete armed); removed S0910 probe tag [branch: DEBUG-v024]
2026-07-10 00:24:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamHealthProbeManager.kt spec-sweep S0900 Verified on-device (health-sweep cancel-safe + inline-radio quiesce; flow1 N/A capture-disabled); removed 3 S0900 probe tags [branch: DEBUG-v024]
2026-07-10 00:56:23 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/TtsReadAloudManager.kt spec-sweep S0897 Verified on-device (TTS stops on file-swap/back-close, engine-reset on init-fail; 2b/3 code-parity, emulator tap-wedge); removed 3 S0897 probe tags [branch: DEBUG-v024]
2026-07-10 01:10:57 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-sweep S0796 Verified on-device (left-edge gesture toggles quick recorder: start -> stop+save m4a to MediaStore); removed S0796 probe tag [branch: DEBUG-v024]
2026-07-10 01:18:23 app_v2/src/main/java/com/sza/fastmediasorter/widget/QuickAudioRecorderService.kt spec-sweep S0930 Verified on-device (floating stop pill inflates via ContextThemeWrapper, no ThemeEnforcement crash; Stop saves clip); removed S0930 probe tag [branch: DEBUG-v024]
2026-07-10 01:28:05 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/auth/WebViewAuthDialogFragment.kt spec-sweep S0892 Verified on-device (login+account-dialog rotate/dismiss clean teardown, zero WindowLeaked; harvest-mode headless residual); removed S0892 probe tag [branch: DEBUG-v024]
2026-07-10 01:30:50 PLAN/S0307_emulator-user-test-sweep.md spec-sweep Batch device sweep on emulator-5554: closed 10 Verified, reopened 1 Broken (S0910), blocked 3 BlockExternal (S0531/S0902/S0906), 3 stay BNUT (S0896 narrowed/S0715/S0924), excluded 5 VR [branch: DEBUG-v024]
2026-07-10 01:32:58 PLAN/S0978_quick-access-panel-add-gesture-actions.md spec Scaffold strategic spec skeleton S0978 [branch: DEBUG-v024]
2026-07-10 08:09:33 PLAN/S0978_quick-access-panel-add-gesture-actions.md spec-all Compact spec + approve: S0978 (add 4 camera/video gesture actions to quick-access panel) [branch: DEBUG-v024]
2026-07-10 08:28:47 app_v2/src/main/java/com/sza/fastmediasorter/core/panel/InternalRouteCatalog.kt spec-all S0978 Verified: added 4 camera/video gesture actions to app-launch panel function picker (take-photo send-to/edit/ocr-translate, start video recording); device-tested [branch: DEBUG-v024]
2026-07-10 08:29:54 PLAN/spec-catalog.jsonl spec-arc Batch-archived 25 Verified specs to temp/done/ (S0796..S0978) [branch: DEBUG-v024]
2026-07-10 09:02:24 app_v2/src/main/java/com/sza/fastmediasorter/ui/welcome/WelcomeActivity.kt spec-all S0910 Verified: fixed enable-all process-death stall by re-ordering attach() (enableAllManager before permissionsManager, arms grant-all callback before synchronous special-permission redelivery); device-verified process-death restore [branch: DEBUG-v024]
2026-07-10 11:08:20 PLAN/S0979_quick-launch-dialog-close-button.md spec-draft Scaffold strategic spec skeleton S0979 [branch: DEBUG-v024]
2026-07-10 11:08:58 PLAN/S0980_bugfix-open-downloaded-files-instagram.md spec-draft Scaffold bugfix spec skeleton S0980 [branch: DEBUG-v024]
2026-07-10 11:20:12 PLAN/S0980_bugfix-open-downloaded-files-instagram.md spec-all Compact spec + fix: open-in-player for resource-saved and batch downloads (S0980) [branch: DEBUG-v024]
2026-07-10 11:21:00 app_v2/src/main/java/com/sza/fastmediasorter/data/link/LinkDownloadWriter.kt spec-all Populate Saved.destinationUri from copiedFilePaths for local resources (S0980) [branch: DEBUG-v024]
2026-07-10 11:21:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt spec-all Open first saved file on successful batch when open-in-player set (S0980) [branch: DEBUG-v024]
2026-07-10 11:27:29 PLAN/S0979_quick-launch-dialog-close-button.md spec-all Compact spec + close button for quick-launch panel dialog (S0979) [branch: DEBUG-v024]
2026-07-10 11:27:29 app_v2/src/main/res/layout/dialog_app_launch_panel.xml spec-all Add close (X) MaterialButton before the title in quick-launch panel header (S0979) [branch: DEBUG-v024]
2026-07-10 11:27:29 app_v2/src/main/java/com/sza/fastmediasorter/ui/applaunchpanel/AppLaunchPanelDialogFragment.kt spec-all Wire btnClosePanel to dismiss() (S0979) [branch: DEBUG-v024]
2026-07-10 11:32:43 PLAN/S0974_stale-vrstereorenderer-comments.md spec-all Compact spec + Verified: correct stale VrStereoRenderer comments (S0974) [branch: DEBUG-v024]
2026-07-10 11:32:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/VideoPlayerManager.kt spec-all Fix applyStereoEffect KDoc to name real OpenXR per-eye mechanism (S0974) [branch: DEBUG-v024]
2026-07-10 11:32:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-all Fix stale VrStereoRenderer inline comment (S0974) [branch: DEBUG-v024]
2026-07-10 11:44:34 PLAN/S0973_nolegal-link-download-carousel-humanized-delay.md spec-all Compact spec + Verified: noLegal humanized carousel pacing (S0973) [branch: DEBUG-v024]
2026-07-10 11:44:34 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkDownloadPacer.kt spec-all New LinkDownloadPacer interface + main @Multibinds empty set (S0973) [branch: DEBUG-v024]
2026-07-10 11:44:34 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/link/LinkAutoDownloadCoordinator.kt spec-all Pause between carousel items via injected pacer set (S0973) [branch: DEBUG-v024]
2026-07-10 11:44:34 app_v2/src/noLegal/java/com/sza/fastmediasorter/data/link/nolegal/HumanizedCarouselPacer.kt spec-all noLegal humanized 0.5-2.0s carousel pacer + @IntoSet bind (S0973) [branch: DEBUG-v024]
2026-07-10 11:47:32 PLAN/S0847_corner-edge-gestures-twelve-directions.md spec-all Research gesture model + park BlockQuestions: 3 owner design decisions (S0847) [branch: DEBUG-v024]
2026-07-10 14:48:19 PLAN/S0966_docs-features-vr-overclaim-showcase.md spec-all Research VR showcase drift + park BlockQuestions: 25 active ALL_FEATURES VR records vs vr-flavor reality; 3 owner decisions (S0966) [branch: DEBUG-v024]
2026-07-10 14:53:28 PLAN/S0976_prerelease-audit-benign-allowlist-tune.md spec-all Compact spec + Verified: tune prerelease log-audit benign allowlist (S0976) [branch: DEBUG-v024]
2026-07-10 14:53:28 scripts/devtest/prerelease-log-audit.ps1 spec-all Add foreign-tag drop set + tag+signature benign pairs so emulator/GMS/Maestro noise leaves actionable, real app errors stay (S0976) [branch: DEBUG-v024]
2026-07-10 15:09:15 PLAN/S0975_howto-consolidate-3d-sections.md spec-all Compact spec + Verified: consolidate 3 overlapping HOW_TO 3D sections (S0975) [branch: DEBUG-v024]
2026-07-10 15:09:15 docs/HOW_TO.md spec-all Merge 3 overlapping 3D sections into OpenXR VR Immersive Cinema across EN/RU/UK; fold settings toggle + 4 modes; fix TOC; S0558 gate green (S0975) [branch: DEBUG-v024]
2026-07-10 15:31:23 PLAN/S0980_bugfix-open-downloaded-files-instagram.md spec-test-device Device run on emulator-5554 -> INCONCLUSIVE 0/0/4; probes unreachable (present() suppressed for success) [branch: DEBUG-v024]
2026-07-10 16:44:38 PLAN/S0981_bugfix-link-download-foreground-autoopen-suppressed.md spec-draft Park finding from S0980 discussion: foreground auto-open dead (MainActivity notificationShown suppression kills present()); owner A/B decision (S0981) [branch: DEBUG-v024]
2026-07-10 16:44:38 PLAN/S0982_bugfix-link-download-destination-picker-missing.md spec-draft Park finding from S0980 device-test: Quick Sort destinations picker not rendering, blocks setting linkAutoDownloadResourceId (S0982) [branch: DEBUG-v024]
2026-07-10 17:07:57 PLAN/S0421_windows-sftp-folder-share-companion.md spec Resolve desktop-stack fork (Go core + Wails UI, worker-as-service + tray, IPC loopback); unblock S0421 BlockExternal -> Approved for Level A MVP [branch: DEBUG-v024]
2026-07-10 17:17:00 PLAN/S0421_windows-sftp-folder-share-companion/INDEX.md spec-tech Author Level-A tactical plan: 8 phases (Go/Wails desktop subproject + Android config-import slice); Status Approved -> Tactical; impl gated on toolchain-install + folder/auth owner decisions [branch: DEBUG-v024]
2026-07-10 18:45:22 PLAN/S0983_audio-lyrics-icon-book.md spec Scaffold strategic spec skeleton S0983 [branch: DEBUG-v024]
2026-07-10 19:55:01 PLAN/S0421_windows-sftp-folder-share-companion.md spec-quiz S0421: resolve 2 owner forks via quiz (subproject root P:/windows/fms_companion out-of-repo; client-auth = login+random password); status stays Tactical, toolchain-install remains sole blocker [branch: DEBUG-v024]
2026-07-10 21:19:00 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/companion/ImportCompanionConfigUseCase.kt S0421 companion import S0421 Phase 07: one-action import of Windows-companion .fmscfg (CompanionConfigParser/Dto, ImportCompanionConfigUseCase, AddResourceCompanionCoordinator, Add-Resource UI button, EN/RU/UK strings, parser unit test) [branch: DEBUG-v024]
2026-07-10 21:33:57 PLAN/S0421_windows-sftp-folder-share-companion.md spec-all S0421 Level A implemented end-to-end: Go+Wails companion subproject at P:/windows/fms_companion (sftpserver, ipc, service, netaccess, config, onboarding, unsigned NSIS installer; 18/18 Go tests) + Android .fmscfg import; emulator e2e proof (434-file browse over live companion SFTP, pinned key); status BlockNeedUserTest (desktop walkthrough remains) [branch: DEBUG-v024]
2026-07-10 21:33:57 docs/HOW_TO.md spec-all S0421: added Import a Windows Companion Share section + TOC entry in EN/RU/UK (S0558 gate green) [branch: DEBUG-v024]
2026-07-10 21:33:57 docs/ALL_FEATURES.jsonl spec-all S0421: recorded network-cloud.companion-sftp-import capability (standard,photos,legacy,vr,noLegal) [branch: DEBUG-v024]
2026-07-10 22:01:42 P:/windows/fms_companion spec-all S0421: product renamed to ‘FastMediaSorter Folder Share Companion’ (installer captions/ARP/window/service DisplayName via wails.json info block), NSIS InstallDir de-duplicated to single Program Files level; installer rebuilt [branch: DEBUG-v024]
2026-07-10 22:16:45 P:/windows/fms_companion/build/windows/installer/project.nsi spec-all S0421: installer welcome page now describes the product (what it does, privacy note, admin-rights expectation); diagnosed owner’s install write-error - silent elevated install succeeds, failure specific to launch method [branch: DEBUG-v024]
2026-07-10 23:01:18 PLAN/S0421_windows-sftp-folder-share-companion.md spec-all S0421 PIVOT executed: standalone companion closed (uninstalled, repo marked reference); Timber probe removed (fk+gate green); status BlockExternal. Prepared Lite handoff: headless fms-share-worker.exe (cmd/worker + ExportConfig IPC with QR PNG, live-tested over named pipe from .NET) vendored into FastMediaSorter_Lite/payload/companion; wrote SPECIFICATION_ANDROID_FOLDER_SHARE.md in Lite house style; 4-agent research + 3-skeptic adversarial verify, all findings fixed [branch: DEBUG-v024]
2026-07-10 23:19:44 index.html site S0421: new scenario card Windows Folder Share (LITE Companion) + footer LITE entry updated, EN/RU/UK (index*.html); links to LITE site, GitHub latest release, winget id, Store name [branch: DEBUG-v024]
2026-07-10 23:19:44 docs/HOW_TO.md docs S0421: companion HOW_TO section repointed at FastMediaSorter LITE with distribution links (site/GitHub/winget/Store), EN/RU/UK; S0558 gate green [branch: DEBUG-v024]
2026-07-10 23:26:49 PLAN/S0984_share-sftp-resource-config.md spec-draft S0984 drafted: share SFTP resource access as .fmscfg via Telegram/email (reuses frozen S0421 contract + shipped import pipeline); design captured, open questions listed [branch: DEBUG-v024]
2026-07-10 23:33:07 PLAN/S0985_expand-send-to-social-apps.md spec-all Approve compact spec S0985 [branch: DEBUG-v024]
2026-07-10 23:37:58 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetHandlerModule.kt S0985 social share targets added Viber, Messenger, and short-video app receivers [branch: DEBUG-v024]
2026-07-10 23:40:43 PLAN/S0985_expand-send-to-social-apps.md spec-all Implementation complete for S0985 [branch: DEBUG-v024]
2026-07-10 23:41:14 PLAN/S0985_expand-send-to-social-apps.md spec-check Audit S0985 -> Verified; PASS/WARN/FAIL 15/0/0 [branch: DEBUG-v024]
2026-07-10 23:43:21 PLAN/S0984_share-sftp-resource-config.md spec-quiz S0984: Draft -> Approved via quiz (2 questions: passwordless-export checkbox = yes; missing fingerprint = share without, no network calls at export; 4 items resolved without asking) [branch: DEBUG-v024]
2026-07-10 23:48:25 app_v2/src/main/java/com/sza/fastmediasorter/core/share/di/ShareTargetModule.kt S0985 recognizable social icons assigned official recognizable fallback silhouettes to social share targets [branch: DEBUG-v024]
2026-07-10 23:49:12 PLAN/S0985_expand-send-to-social-apps.md spec-check Re-audit S0985 recognizable icons -> Verified; PASS/WARN/FAIL 18/0/0 [branch: DEBUG-v024]
2026-07-11 00:28:38 PLAN/S0981_bugfix-link-download-foreground-autoopen-suppressed.md spec-all S0981: foreground link-download auto-open reachable (present() no longer suppressed for success; only duplicate toast gated); consume-once replay-cache clear prevents re-open on return/recreation [branch: DEBUG-v024]
2026-07-11 00:29:33 PLAN/S0983_audio-lyrics-icon-book.md spec-all Compact spec: S0983 [branch: DEBUG-v024]
2026-07-11 00:29:38 PLAN/S0982_bugfix-link-download-destination-picker-missing.md spec-all Pipeline Verified: S0982 link-download destination picker investigation [branch: DEBUG-v024]
2026-07-11 00:29:40 PLAN/S0981_bugfix-link-download-foreground-autoopen-suppressed.md spec-all Pipeline BlockNeedUserTest: S0981 (variant A resolved from setting contract; device-test deferred, no device) [branch: DEBUG-v024]
2026-07-11 00:30:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt CommandPanelLayoutPlanner change lyrics icon to book [branch: DEBUG-v024]
2026-07-11 00:31:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/CommandPanelLayoutPlanner.kt CommandPanelLayoutPlanner change lyrics icon to book [branch: DEBUG-v024]
2026-07-11 00:32:10 app_v2/src/main/res/menu/overflow_menu_player.xml menu_lyrics change lyrics menu item icon to book [branch: DEBUG-v024]
2026-07-11 00:38:25 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt spec-all S0959: enable DEBUG StrictMode penaltyLog hook by default [branch: DEBUG-v024]
2026-07-11 00:38:53 PLAN/S0959_debug-strictmode-flag-hardcoded-off.md spec-all Pipeline Verified: S0959 DEBUG StrictMode hook enabled by default [branch: DEBUG-v024]
2026-07-11 00:39:01 PLAN/S0960_bugfix-vr-diagnostic-oom-decode.md spec-all Compact spec finalized: S0960 VR diagnostic OOM decode fix plan [branch: DEBUG-v024]
2026-07-11 00:45:25 PLAN/S0984_share-sftp-resource-config/INDEX.md spec-tech Tactical plan for S0984 (5 phases: contract-relaxation, export-domain, export-ui, import-trampoline, docs-cleanup); status Approved -> Tactical [branch: DEBUG-v024]
2026-07-11 00:47:43 PLAN/spec-catalog-archive.jsonl spec-catalog Archived S0956 and moved its strategic spec to temp/done [branch: DEBUG-v024]
2026-07-11 00:48:23 scripts/spec_catalog/close-and-log.ps1 spec-all Add -FeatNoLegal switch: route feature records to ALL_FEATURES_noLegal.jsonl [branch: DEBUG-v024]
2026-07-11 00:49:02 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0960 Fix VR diagnostic OOM: budget-sampled bundled decode + OOM-guarded shared RGBA copy helper [branch: DEBUG-v024]
2026-07-11 00:51:52 PLAN/S0960_bugfix-vr-diagnostic-oom-decode.md spec-all Pipeline BlockNeedUserTest: S0960 (fix implemented, fkn PASS, awaiting Quest 3 device test) [branch: DEBUG-v024]
2026-07-11 00:52:56 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0961 S0961: hide immersive HUD quad until first real content upload (native hudContentUploaded gate in xr_session.cpp + S0961 probe at queueFilenameHud); grey 1x1 placeholder never exposed [branch: DEBUG-v024]
2026-07-11 00:53:20 PLAN/S0963_vr-cinema-immersive-browser/INDEX.md spec-tech Create tactical plan for S0963 (6 phases) [branch: DEBUG-v024]
2026-07-11 00:53:20 PLAN/S0963_vr-cinema-immersive-browser/research/01__immersive-browser-architecture.md spec-tech Research 01: immersive browser architecture [branch: DEBUG-v024]
2026-07-11 00:53:20 PLAN/S0963_vr-cinema-immersive-browser.md spec-tech Status -> Tactical; fill 4, resolve 6 [branch: DEBUG-v024]
2026-07-11 00:55:16 PLAN/S0964_vr-cinema-immersive-hud-tracks/INDEX.md spec-all S0964 tactical plan: 3 phases (native quad size, panel track rows, activity wiring) + research 01 [branch: DEBUG-v024]
2026-07-11 01:31:57 PLAN/S0984_share-sftp-resource-config/INDEX.md spec-dev S0984 all phases implemented; status -> BlockNeedUserTest [branch: DEBUG-v024]
2026-07-11 01:31:57 app_v2/src/main/java/com/sza/fastmediasorter/data/companion/CompanionConfigParser.kt spec-dev Relax parser: accept empty password + empty host-key fingerprint (Android-side passwordless/no-pin share) [branch: DEBUG-v024]
2026-07-11 01:31:57 app_v2/src/main/java/com/sza/fastmediasorter/data/companion/CompanionConfigSerializer.kt spec-dev New serializer: write CompanionConfigDto back to .fmscfg JSON (export) [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/companion/ImportCompanionConfigUseCase.kt spec-dev Blank fingerprint -> hostKeyFingerprint=null (no-pin) instead of failing [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/companion/ExportCompanionConfigUseCase.kt spec-dev New export use case: build+write .fmscfg from a live SFTP resource; prune stale temp files [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/utils/SftpHostReachabilityClassifier.kt spec-dev New classifier: private/CGNAT/LAN host detection for the export reachability warning [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainSftpShareManager.kt spec-dev New manager: SFTP access share dialog (password-omit checkbox + LAN warning) [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/companionimport/CompanionConfigImportActivity.kt spec-dev New trampoline activity: one-tap .fmscfg import via ACTION_VIEW/SEND with confirm + password field [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt spec-dev SFTP-only Share-access overflow item wired in both viewholders [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainViewModel.kt spec-dev shareSftpResourceConfig + MainEvent.ShareCompanionConfigFile [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainEventHandler.kt spec-dev Share .fmscfg via ACTION_SEND with vendor MIME [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/AndroidManifest.xml spec-dev CompanionConfigImportActivity + VIEW octet-stream / SEND vendor-MIME intent filters [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/lite/AndroidManifest.xml spec-dev Remove CompanionConfigImportActivity in lite (no SFTP) [branch: DEBUG-v024]
2026-07-11 01:31:58 app_v2/src/main/res/values/strings.xml spec-dev S0984 export/import UI strings (EN/RU/UK) [branch: DEBUG-v024]
2026-07-11 01:35:56 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/ImmersiveBrowseActivity.kt spec-dev S0963 immersive browse activity [branch: DEBUG-v024]
2026-07-11 01:39:53 app_v2/src/main/java/com/sza/fastmediasorter/core/xr/VrLaunchContract.kt spec-dev S0963 Ph01: RESOURCE_BROWSE mode + resourceId + resourceBrowse factory; shared toLaunchUriString mapper [branch: DEBUG-v024]
2026-07-11 01:39:53 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/browse/ImmersiveBrowseGridRenderer.kt spec-dev S0963 Ph02: immersive BROWSE render primitives (grid renderer, ray hit-test dispatcher, heap-bounded thumbnail decoder, cell model) [branch: DEBUG-v024]
2026-07-11 01:39:53 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/browse/ImmersiveBrowseContentLoader.kt spec-dev S0963 Ph03: domain-read content loader (GetMediaFilesUseCase + StereoDetector) + in-process playback controller [branch: DEBUG-v024]
2026-07-11 01:39:53 app_v2/src/vr/java/com/sza/fastmediasorter/core/xr/XrEntryGatewayImpl.kt spec-dev S0963 Ph04: route RESOURCE_BROWSE to ImmersiveBrowseActivity + VR manifest declaration + use-case validation [branch: DEBUG-v024]
2026-07-11 01:39:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt spec-dev S0963 Ph05: resource menu Open in VR Cinema entry (adapter callback, both popups, launch manager, MainActivity wiring) [branch: DEBUG-v024]
2026-07-11 01:39:53 PLAN/S0963_vr-cinema-immersive-browser/INDEX.md spec-dev S0963: all 6 phases done; status -> BlockNeedUserTest [branch: DEBUG-v024]
2026-07-11 01:52:31 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt S0964 S0964: immersive HUD tracks - interactive panel (1024x640) rendered into HUD quad on FILE_URI launches with AUDIO/SUBS cycle rows via HudTrackController over VideoTrackSelectionManager; native setHudQuadSize API; banner kept on diagnostic path; vr strings EN/RU/UK [branch: DEBUG-v024]
2026-07-11 02:07:36 PLAN/S0961_bugfix-vr-immersive-hud-empty-grey.md spec-all Pipeline BlockNeedUserTest: S0961 - native hudContentUploaded gate, grey placeholder never exposed; nd BUILD SUCCESSFUL; device test deferred [branch: DEBUG-v024]
2026-07-11 02:07:36 PLAN/S0964_vr-cinema-immersive-hud-tracks.md spec-all Pipeline BlockNeedUserTest: S0964 - interactive panel HUD with AUDIO/SUBS track rows on FILE_URI; nd BUILD SUCCESSFUL; scoped detekt PASS; device test deferred [branch: DEBUG-v024]
2026-07-11 02:14:38 PLAN/S0988_qr-scan-companion-import.md spec Scaffold strategic spec skeleton S0988 (QR-scan companion .fmscfg import) [branch: DEBUG-v024]
2026-07-11 02:26:44 temp/done/S0910_welcome-enable-all-process-death-resume.md spec-arc Archive S0910 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:26:45 temp/done/S0959_debug-strictmode-flag-hardcoded-off.md spec-arc Archive S0959 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:26:45 temp/done/S0973_nolegal-link-download-carousel-humanized-delay.md spec-arc Archive S0973 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:26:45 temp/done/S0974_stale-vrstereorenderer-comments.md spec-arc Archive S0974 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:26:45 temp/done/S0975_howto-consolidate-3d-sections.md spec-arc Archive S0975 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:26:46 temp/done/S0976_prerelease-audit-benign-allowlist-tune.md spec-arc Archive S0976 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:26:46 temp/done/S0982_bugfix-link-download-destination-picker-missing.md spec-arc Archive S0982 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:26:46 temp/done/S0985_expand-send-to-social-apps.md spec-arc Archive S0985 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:26:47 PLAN/S0983_audio-lyrics-icon-book.md spec-all Audio lyrics icon changed from ic_microphone to ic_book (avoid dictaphone lookalike) [branch: DEBUG-v024]
2026-07-11 02:27:14 PLAN/S0903_vr-diagxr-p2.md spec-all Compact spec (verified 3 P2 findings; F2 stale): S0903 [branch: DEBUG-v024]
2026-07-11 02:29:48 PLAN/S0847_corner-edge-gestures-twelve-directions.md spec-quiz S0847: BlockQuestions -> Draft via quiz (3 questions; corner-gesture product decisions locked) [branch: DEBUG-v024]
2026-07-11 02:32:10 PLAN/S0903_vr-diagxr-p2.md spec-all S0903 Verified: VR DiagXr P2 cluster (re-entry focus gate, abandoned-thread log) [branch: DEBUG-v024]
2026-07-11 02:32:10 app_v2/src/vr/java/com/sza/fastmediasorter/ui/xr/DiagnosticXrActivity.kt spec-all Re-arm windowFocusedDeferred on render-thread teardown (re-entry gate); elevate abandoned-thread log to Timber.e [branch: DEBUG-v024]
2026-07-11 02:33:11 PLAN/S0917_cloud-breadcrumb-click-depth-navigation.md spec-all Compact bugfix spec S0917 verified: cloud breadcrumb arbitrary-depth navigation [branch: DEBUG-v024]
2026-07-11 02:33:54 PLAN/S0966_docs-features-vr-overclaim-showcase.md spec-quiz S0966: BlockQuestions -> Draft via quiz (3 questions) [branch: DEBUG-v024]
2026-07-11 02:34:36 PLAN/S0989_vr-diagxr-activity-decompose.md spec Scaffold strategic spec skeleton S0989 [branch: DEBUG-v024]
2026-07-11 02:35:23 PLAN/S0988_qr-scan-companion-import.md spec-all F1 strategic spec approved (ZXing decided): S0988 [branch: DEBUG-v024]
2026-07-11 02:39:40 PLAN/S0988_qr-scan-companion-import/INDEX.md spec-all F2 tactical plan: S0988 [branch: DEBUG-v024]
2026-07-11 02:57:43 temp/done/S0903_vr-diagxr-p2.md spec-arc Archive S0903 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:57:43 temp/done/S0917_cloud-breadcrumb-click-depth-navigation.md spec-arc Archive S0917 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 02:57:44 temp/done/S0983_audio-lyrics-icon-book.md spec-arc Archive S0983 -> temp/done/ [branch: DEBUG-v024]
2026-07-11 03:05:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/helpers/MainProgramsMenuCoordinator.kt S0962 VR Cinema program tile + resource-selection dialog S0773/S0962 closure: add VR Cinema as a standalone programs-menu/panel entry (XR+VR-3D gated, after Streams) that prompts for a resource via the canonical ResourcePickerDialog then opens the immersive browser (RESOURCE_BROWSE). Wires MainProgramsMenuCoordinator (item/gate/dispatch), ResourceVrCinemaLaunchManager.promptResourceAndLaunch, MainActivity gate+lambda; adds vr_cinema_program_title EN/RU/UK. Completes S0962 goals 1-3 (program tile + dialog) that were previously unimplemented. [branch: DEBUG-v024]
2026-07-11 03:09:32 PLAN/S0990_xr-aware-standard-panel.md spec Scaffold strategic spec skeleton S0990 (XR-aware standard mobile-track panel) [branch: DEBUG-v024]
2026-07-11 03:18:38 PLAN/S0988_qr-scan-companion-import.md spec-all S0988 QR-scan companion import: ZXing analyzer + LifecycleCameraController scan screen + add-resource entry (FEATURE_CAMERA_ANY-gated) feeding the existing parser/import; standard debug + fk green, my files detekt-clean; strings EN/RU/UK; -> BlockNeedUserTest (device scan). [branch: DEBUG-v024]
2026-07-11 03:40:55 PLAN/S0991_add-resource-import-file-barcode.md spec Scaffold strategic spec skeleton S0991 [branch: DEBUG-v024]
2026-07-11 03:44:00 PLAN/S0992_sftp-resource-header-import-buttons.md spec Scaffold strategic spec skeleton S0992 [branch: DEBUG-v024]
2026-07-11 03:53:32 PLAN/S0987_sftp-credential-clobber-on-reimport.md spec-all Pipeline BlockQuestions: S0987 (caller audit + auth-precedence research banked; collision policy owner-gated) [branch: DEBUG-v024]
2026-07-11 03:56:51 PLAN/S0992_sftp-resource-header-import-buttons.md spec-all Pipeline BlockQuestions: S0992 (import file/QR infra already exists; UI placement owner-gated) [branch: DEBUG-v024]
2026-07-11 03:59:13 PLAN/S0991_add-resource-import-file-barcode.md spec-all Pipeline BlockQuestions: S0991 (import infra exists; menu placement owner-gated; sibling S0992) [branch: DEBUG-v024]
2026-07-11 04:02:30 PLAN/S0990_xr-aware-standard-panel.md spec-all Pipeline BlockQuestions: S0990 (manifest slice specified but owner-deferred; panel polish XR-device-gated) [branch: DEBUG-v024]
2026-07-11 04:05:40 PLAN/S0847_corner-edge-gestures-twelve-directions.md spec-all Pipeline BlockQuestions: S0847 (gesture address-space expansion; UX owner decisions gate impl) [branch: DEBUG-v024]
2026-07-11 04:25:00 PLAN/S0966_docs-features-vr-overclaim-showcase.md spec-all S0966: from-code audit of 25 VR/OpenXR ALL_FEATURES records (16 backed / 8 partial / 1 absent); 0 retires (conservative per owner decision #3); Rule-11 exception recorded; status Implemented [branch: DEBUG-v024]
2026-07-11 11:56:36 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/SmbOperationsUseCase.kt spec-all S0987: non-destructive SFTP credential merge (preserve key on null, preserve password on blank) [branch: DEBUG-v024]
2026-07-11 11:58:45 app_v2/src/main/AndroidManifest.xml spec-all S0990: declare uses-feature android.software.xr.api.spatial required=false (XR-panel compat, no device-reach loss) [branch: DEBUG-v024]
2026-07-11 12:48:06 PLAN/S0847_corner-edge-gestures-twelve-directions/INDEX.md spec-tech S0847 tactical plan: 6 phases (domain-model, persistence-migration, dispatch-wiring, detection-geometry, settings-ui, docs-closure) for 4-band 12-gesture edge model [branch: DEBUG-v024]
2026-07-11 13:39:50 PLAN/S0993_minigame-contrast-mode-guide-arrow.md spec Scaffold strategic spec skeleton S0993 [branch: DEBUG-v024]
2026-07-11 13:44:45 PLAN/S0847_corner-edge-gestures-twelve-directions/INDEX.md spec-dev S0847: expand single left-edge gesture strip into 4 independently-toggleable edge bands (2 left, 2 right at 10-40%/60-90% height) each with DOWN/RIGHT/UP = up to 12 gestures. New ScreenshotGestureZone; zone threaded overlay->host->consent->capture->dispatcher + noLegal accessibility + edge-tile; 12 action slots + 4 toggles across AppSettings/persistence (legacy LEFT_TOP migration)/settings-UI (portrait+land)/seed/preset; section header generalized to Edge gestures (+HOW_TO cascade); strings EN/RU/UK; settings manifest+annotations+reference regenerated; ALL_FEATURES + catalog synced. standard+noLegal build green, detekt-clean, emulator smoke test (launch + settings inflate, no crash). BlockNeedUserTest: real-device gesture geometry. [branch: DEBUG-v024]
2026-07-11 13:48:42 PLAN/S0993_minigame-contrast-mode-guide-arrow.md spec-all Strategic spec filled + approved: S0993 [branch: DEBUG-v024]
2026-07-11 13:51:42 PLAN/S0993_minigame-contrast-mode-guide-arrow/INDEX.md spec-all Tactical plan: S0993 (4 phases) [branch: DEBUG-v024]
2026-07-11 14:01:18 PLAN/S0991_add-resource-import-file-barcode/INDEX.md spec-all Tactical plan S0991 (joint S0992): shared import action source + type-screen entries [branch: DEBUG-v024]
2026-07-11 14:11:02 PLAN/S0994_companion-publish-folders-help-link.md spec Add strategic spec S0994 for companion publish-folders help link [branch: DEBUG-v024]
2026-07-11 14:11:30 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt spec-all S0991/S0992: import entry points on type screen + SFTP header via shared action source [branch: DEBUG-v024]
2026-07-11 14:13:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameBoardView.kt spec-all S0993: contrast mini-game mode (solid tiles, stepped move+ghost) + player->nearest-exit guide arrow in all modes; strings, mapper, theme, tests [branch: DEBUG-v024]
2026-07-11 14:13:49 PLAN/S0995_player-manual-rotate-90.md spec Scaffold strategic spec skeleton S0995 [branch: DEBUG-v024]
2026-07-11 14:14:29 app_v2/src/main/res/layout/activity_add_resource.xml spec-all S0991/S0992 Verified: import entry points on type screen + SFTP header (device-verified) [branch: DEBUG-v024]
2026-07-11 14:15:31 PLAN/S0992_sftp-resource-header-import-buttons.md spec-all S0992 Verified via joint delivery with S0991 (SFTP header import buttons relocated + renamed) [branch: DEBUG-v024]
2026-07-11 14:16:13 PLAN/S0994_companion-publish-folders-help-link/INDEX.md spec-tech Create tactical plan for S0994 (5 phases) [branch: DEBUG-v024]
2026-07-11 14:17:33 PLAN/S0993_minigame-contrast-mode-guide-arrow.md spec-all Pipeline BlockNeedUserTest: S0993 - built, unit-tested, detekt-clean; device verify deferred to owner [branch: DEBUG-v024]
2026-07-11 14:58:31 PLAN/S0994_companion-publish-folders-help-link.md spec-dev S0994 all phases done; status -> BlockNeedUserTest [branch: DEBUG-v024]
2026-07-11 14:58:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/support/SupportIntentFactory.kt spec-dev S0994 single-source companion publish-folders guide URL + accessor [branch: DEBUG-v024]
2026-07-11 14:58:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/addresource/AddResourceActivity.kt spec-dev S0994 contextual publish-folders help link next to companion import [branch: DEBUG-v024]
2026-07-11 14:58:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/GeneralSettingsViewSetupHelper.kt spec-dev S0994 settings useful-links entry gated by companion availability [branch: DEBUG-v024]
2026-07-11 14:58:31 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/SettingsViewModel.kt spec-dev S0994 expose isCompanionImportAvailable via injected RemoteSourceAvailabilityGate [branch: DEBUG-v024]
2026-07-11 14:58:31 app_v2/src/main/res/layout/fragment_settings_general.xml spec-dev S0994 publish-folders link button portrait + landscape + label strings EN/RU/UK [branch: DEBUG-v024]
2026-07-11 14:58:31 docs/HOW_TO.md spec-dev S0994 publish-folders deep-link in HOW_TO/FAQ/README/index EN/RU/UK - 13 files [branch: DEBUG-v024]
2026-07-11 14:58:31 docs/settings/settings-manifest.json spec-dev S0994 regen settings manifest/reference/annotations + ALL_FEATURES record [branch: DEBUG-v024]
2026-07-11 15:34:40 PLAN/S0996_bugfix-mouse-wheel-scroll-lists.md spec Scaffold strategic spec skeleton S0996 [branch: DEBUG-v024]
2026-07-11 15:37:52 PLAN/S0997_splash-screen-app-branding.md spec Scaffold strategic spec skeleton S0997 [branch: DEBUG-v024]
2026-07-11 15:53:16 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/ResourceAdapter.kt resource overflow menu Tint resource popup-menu icons with colorControlNormal so white-fill vectors stay visible in light theme [branch: DEBUG-v024]
2026-07-11 16:03:45 PLAN/S0998_disable-scheduled-ops-when-empty.md spec Scaffold strategic spec skeleton S0998 [branch: DEBUG-v024]
2026-07-11 16:08:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamsControlsPlacementManager.kt Streams landscape toolbar Streams landscape header: keep toolbar title visible (end-gravity wrap host), fixed-width surface-filled search field instead of full-width transparent one [branch: DEBUG-v024]
2026-07-11 16:13:21 PLAN/S0999_settings-send-commands-two-column.md spec Scaffold strategic spec skeleton S0999 [branch: DEBUG-v024]
2026-07-11 16:30:01 app_v2/src/main/java/com/sza/fastmediasorter/core/ui/BaseActivity.kt spec-all S0996 S0996: mouse wheel native-first dispatch so lists/forms under the cursor scroll [branch: DEBUG-v024]
2026-07-11 16:37:03 PLAN/S1000_bugfix-sftp-not-found-error-message.md spec Scaffold strategic spec skeleton S1000 [branch: DEBUG-v024]
2026-07-11 16:40:13 PLAN/S0999_settings-send-commands-two-column.md spec-all S0999 Strategic design for two-column Send-file-to list; 4 owner UI decisions parked in section 6 -> BlockQuestions [branch: DEBUG-v024]
2026-07-11 16:47:41 PLAN/S1000_bugfix-sftp-not-found-error-message.md spec-all Compact spec: S1000 [branch: DEBUG-v024]
2026-07-11 16:49:33 PLAN/S0999_settings-send-commands-two-column.md spec-quiz S0999: BlockQuestions -> Approved via quiz (3 questions asked, 1 resolved without asking) [branch: DEBUG-v024]
2026-07-11 16:56:38 PLAN/S0998_disable-scheduled-ops-when-empty.md spec-all S0998 Strategic design for auto-disable scheduled-ops toggle when empty; 3 owner decisions parked in section 6 -> BlockQuestions [branch: DEBUG-v024]
2026-07-11 16:58:59 PLAN/S0997_splash-screen-app-branding.md spec-all S0997 Strategic design for app-branding splash animation; 4 owner/design decisions parked in section 6 -> BlockQuestions [branch: DEBUG-v024]
2026-07-11 17:03:20 PLAN/S0995_player-manual-rotate-90.md spec-all S0995 Strategic spec for manual 90-deg content rotation across player family (owner-specified behavior); approach + video-surface research item documented -> Approved; Full impl deferred to focused device session [branch: DEBUG-v024]
2026-07-11 17:04:32 docs/HOW_TO.md docs+site Windows sibling app rebrand sync: display name FastMediaSorter LITE -> Fast Media Sorter for Windows across index.html, README.md, docs/README, docs/FAQ, docs/HOW_TO (EN/RU/UK); URLs, winget id and Store listing name kept (frozen old identity per Lite naming rule) [branch: DEBUG-v024]
2026-07-11 17:08:05 PLAN/spec-catalog.jsonl spec-next Session: 9 processed, 0 verified; advanced 5 (S0996 impl->BlockNeedUserTest, S0999/S0998/S0997 ->BlockQuestions, S0995 ->Approved), 2 drift-deferred (S0987/S0990), 1 backed-off concurrent (S1000, reverted), 1 reviewed-complete (S0966). Stage 5.5 /spec-sweep deferred: active concurrent code session + mostly real-hardware BNUT backlog. [branch: DEBUG-v024]
2026-07-11 17:15:55 PLAN/S1000_bugfix-sftp-not-found-error-message.md spec-all Compact bugfix spec S1000: SFTP not-found error message [branch: DEBUG-v024]
2026-07-11 17:15:55 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/SftpOperationFailure.kt spec-all Map SFTP SSH_FX_NO_SUCH_FILE to NOT_FOUND category; browse resolvers surface friendly not-found via protocol code (locale-independent) [branch: DEBUG-v024]
2026-07-11 17:43:33 PLAN/S0998_disable-scheduled-ops-when-empty.md spec-quiz S0998: BlockQuestions -> Approved via quiz (3 questions: settings-local reconcile, auto re-enable, uncheck) [branch: DEBUG-v024]
2026-07-11 17:50:20 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt S1000 SFTP not-found friendly message verified on-device (SM-S731B); removed BlockNeedUserTest probe, S1000 -> Verified [branch: DEBUG-v024]
2026-07-11 17:57:43 PLAN/S0997_splash-screen-app-branding.md spec-quiz S0997: BlockQuestions -> Approved via quiz (2 questions: platform SplashScreen API, minimal fade-in; API<31 fallback + author-logo placement auto-resolved) [branch: DEBUG-v024]
2026-07-11 18:14:18 PLAN/S1001_bugfix-resource-stats-not-updating.md spec Scaffold strategic spec skeleton S1001 [branch: DEBUG-v024]
2026-07-11 18:19:14 PLAN/S1002_companion-config-v2-resource-params.md spec-all Strategic spec S1002: companion config v2 resource params [branch: DEBUG-v024]
2026-07-11 18:21:27 PLAN/S1003_resource-media-types-profile-unify.md spec Scaffold strategic spec skeleton S1003 [branch: DEBUG-v024]
2026-07-11 18:21:45 PLAN/S1002_companion-config-v2-resource-params/INDEX.md spec-all Tactical plan S1002: 5 phases (schema v2, import, export, vectors, companion deliverable) [branch: DEBUG-v024]
2026-07-11 18:41:57 docs/howto/scenario-companion-share*.md, docs/HOW_TO*.md, docs/FEATURES*.md, docs/howto/index*.md Feature docs Document Windows companion QR-scan folder share prominently: new scenario guide trio (scan a code to open PC folders over SFTP, file fallback), featured callout + upgraded companion recipe in HOW_TO EN/RU/UK, top entries in howto indexes, and a lead bullet in FEATURES section 1 (S0421/S0988/S0991) [branch: DEBUG-v024]
2026-07-11 18:49:51 PLAN/S1002_companion-config-v2-resource-params.md spec-all S1002 companion config contract v2: strategic+tactical spec, audit, COMPANION_EXPORT_SPEC deliverable [branch: DEBUG-v024]
2026-07-11 18:49:51 app_v2/src/main/java/com/sza/fastmediasorter/data/companion/CompanionConfigDto.kt spec-all Companion config schema v2: per-root resource params (profile/media/scan/destination/comment/pin/slideshow) in DTO, import+export mapping, token maps, ResourceProfile.mediaPreset extraction, canonical v2 vector + parser/serializer tests [branch: DEBUG-v024]
2026-07-11 18:57:55 PLAN/S1001_bugfix-resource-stats-not-updating.md spec-all S1001 root-caused + verified: browse lost-update clobbered resource stats (fileCount/lastBrowseDate/lastSyncDate) [branch: DEBUG-v024]
2026-07-11 18:58:50 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/metadata/BrowseMetadataManager.kt spec-all S1001 fix: merge persisted stats into browse state, targeted single-column writes for scroll/lastViewedFile, lastSyncDate for CLOUD (8 files + 2 fakes + 2 unit tests) [branch: DEBUG-v024]
2026-07-11 19:30:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamStallWatchdog.kt spec-all S0936 Phase 02: stream stall watchdog now recovers - bounded stop+re-prepare (budget 3, RECONNECTING label), exhaustion falls to error dialog; silent stall + recovery verified on emulator via throttled connection [branch: DEBUG-v024]
2026-07-11 19:30:42 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot.md spec-all S0936 verified: silent-stall repro + watchdog recovery + budget exhaustion evidence in section 4 / Last Audit [branch: DEBUG-v024]
2026-07-11 19:37:08 PLAN/S1003_resource-media-types-profile-unify.md spec-all S1003 strategic spec authored: unify media-types togglers + resource-profile dialog across create/edit [branch: DEBUG-v024]
2026-07-11 22:10:42 app_v2/src/main/java/com/sza/fastmediasorter/ui/common/ResourceProfileDialog.kt spec-all S1003: shared Resource Profile dialog; editor no longer hides media-types card on File Manager profile; create forms apply the S1002 domain preset (fixes VIDEO_LIBRARY drift + wrong dialog title); title_select_profile retitled EN/RU/UK [branch: DEBUG-v024]
2026-07-11 22:10:42 PLAN/S1003_resource-media-types-profile-unify.md spec-all S1003 verified on emulator: editor + create scenarios, criteria in section 11 / Last Audit [branch: DEBUG-v024]
2026-07-11 22:43:38 app_v2/src/main/res/drawable/ic_splash_animated.xml spec-all S0997: splash center = app logo + Fast Media Sorter wordmark fading in (animated-vector); author logo moved to platform branding slot (bottom-center); v31 themes rewired, orphan ic_splash_logo removed. Impl builds; splash visual device-unconfirmed (emulator splash window too brief) [branch: DEBUG-v024]
2026-07-12 00:09:56 PLAN/S0936_bugfix-stream-freeze-native-heap-snapshot.md spec-arc Archive S0936 (bugfix-stream-freeze-native-heap-snapshot) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:02 PLAN/S0991_add-resource-import-file-barcode.md spec-arc Archive S0991 (add-resource-import-file-barcode) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:09 PLAN/S0992_sftp-resource-header-import-buttons.md spec-arc Archive S0992 (sftp-resource-header-import-buttons) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:13 PLAN/S1000_bugfix-sftp-not-found-error-message.md spec-arc Archive S1000 (bugfix-sftp-not-found-error-message) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:18 PLAN/S1001_bugfix-resource-stats-not-updating.md spec-arc Archive S1001 (bugfix-resource-stats-not-updating) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:22 PLAN/S1002_companion-config-v2-resource-params.md spec-arc Archive S1002 (companion-config-v2-resource-params) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:29 PLAN/S1003_resource-media-types-profile-unify.md spec-arc Archive S1003 (resource-media-types-profile-unify) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:34 PLAN/S0966_docs-features-vr-overclaim-showcase.md spec-arc Archive S0966 (docs-features-vr-overclaim-showcase) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:36 PLAN/S0987_sftp-credential-clobber-on-reimport.md spec-arc Archive S0987 (sftp-credential-clobber-on-reimport) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:38 PLAN/S0990_xr-aware-standard-panel.md spec-arc Archive S0990 (xr-aware-standard-panel) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 00:10:40 PLAN/S0997_splash-screen-app-branding.md spec-arc Archive S0997 (splash-screen-app-branding) -> temp/done/ [branch: DEBUG-v024]
2026-07-12 01:18:54 PLAN/S1004_bugfix-keyboard-extract-mode-hides-ui.md spec Scaffold strategic spec skeleton S1004 (fullscreen IME hides dialog UI, found during S0484 sweep) [branch: DEBUG-v024]
2026-07-12 01:19:45 PLAN/S1005_bugfix-video-player-no-playback-controls.md spec Scaffold strategic spec skeleton S1005 (video player has no playback controls, found during S0484 sweep) [branch: DEBUG-v024]
2026-07-12 01:27:29 scripts/devtest/prerelease-verdict.ps1 S0484 sweep infra Scope crash/ANR verdict detection to FastMediaSorter package; unrelated GMS ANR (IndexWorkerService) was flipping the sweep verdict to FAIL [branch: DEBUG-v024]
2026-07-12 02:55:38 PLAN/S1006_sftp-multipath-endpoint-fallback.md spec Add strategic spec S1006 for multi-path SFTP endpoint fallback (companion resource works on LAN + WAN from one import) [branch: DEBUG-v024]
2026-07-12 03:07:02 PLAN/S1006_sftp-multipath-endpoint-fallback/INDEX.md spec-tech Create tactical plan for S1006 (5 phases: alt-paths, import, resolver, wire-in, cleanup) [branch: DEBUG-v024]
2026-07-12 03:21:54 PLAN/S1004_bugfix-keyboard-extract-mode-hides-ui.md spec-all Fix: 33 layout files (base/land/w600dp) gain android:imeOptions=flagNoExtractUi so single-line text fields in dialogs/search panels no longer hide behind fullscreen IME extract mode on wide landscape screens [branch: DEBUG-v024]
2026-07-12 03:49:56 PLAN/S1006_sftp-multipath-endpoint-fallback.md spec-dev S1006: implement multi-path SFTP endpoint fallback - alt_access_paths column + Room 39 migration, companion import stores all endpoints + per-candidate credentials, SftpEndpointResolver (happy-eyeballs, per-network cache), wired into scan/file-ops/transfer/player/test [branch: DEBUG-v024]
2026-07-12 04:40:27 PLAN/S1005_bugfix-video-player-no-playback-controls.md spec-all Compact bugfix spec filled (root cause + fix): S1005 video player no playback controls [branch: DEBUG-v024]
2026-07-12 04:44:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/callbacks/PlayerTouchZoneCallbackImpl.kt spec-all S1005: reveal ExoPlayer controller on video/audio center-tap (onPauseResume showController) [branch: DEBUG-v024]
2026-07-12 04:44:44 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/PlayerMediaLoaderManager.kt spec-all S1005: show transport controller when a video opens (configurePlayerViewForMediaType video branch) [branch: DEBUG-v024]
2026-07-12 04:46:04 PLAN/S1007_tv-player-video-focus-frame.md spec Scaffold strategic spec skeleton S1007 [branch: DEBUG-v024]
2026-07-12 14:20:39 PLAN/S1007_tv-player-video-focus-frame.md spec-all Fix: 8 layout files (activity_player_unified + standalone photo_video/audio/document, base+land pairs) - PlayerView gains android:focusable=”false” so the S0943 TV D-pad focus decoration no longer outlines the video/artwork surface itself [branch: DEBUG-v024]
2026-07-12 14:30:58 index.html, index-ru.html, index-uk.html, nolegal.html, nolegal-ru.html, nolegal-uk.html, styles.css, _config.yml GitHub Pages site Rebrand: drop ‘v2’ from displayed product name, use Play Store title ‘Fast Media Sorter & Organizer’ (localized) in SEO tags and short ‘Fast Media Sorter’ in header/hero/footer; widen hero/lead text columns and trim header/section spacing so titles wrap to fewer lines and pages need less scrolling on wide viewports [branch: DEBUG-v024]
2026-07-12 14:37:17 styles.css hero-inner, subtitle, whatfor, quickstart, section-lead, nolegal-intro, topology-lead Corrected the width fix per reference site (universal-agent-kit): unified hero/section text columns to the same fixed –wide as .site-header (1100px) instead of per-element vw-scaled clamp() caps, and let subtitle/whatfor shrink-wrap inside that column instead of imposing their own narrower max-width - matches nav bar edges, fewer wrapped lines, no viewport-dependent guessing [branch: DEBUG-v024]
2026-07-12 15:19:30 PLAN/S1008_edge-gesture-bar-visibility-settings.md spec Scaffold strategic spec skeleton S1008 [branch: DEBUG-v024]
2026-07-12 15:22:57 PLAN/S1009_scheduled-ops-local-folder-picker.md spec Scaffold strategic spec skeleton S1009 [branch: DEBUG-v024]
2026-07-12 15:25:32 PLAN/S1010_write-resource-picker-local-folder.md spec Scaffold strategic spec skeleton S1010 [branch: DEBUG-v024]
2026-07-12 15:26:36 PLAN/S1011_picker-button-before-value.md spec Scaffold strategic spec skeleton S1011 [branch: DEBUG-v024]
2026-07-12 15:27:46 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt S0981 device-test round 2: foreground-snap fix + default-off migration launchPlayer waits for RESUMED via withResumed, adds FLAG_ACTIVITY_NEW_TASK; linkAutoDownloadOpenInPlayer default flips true->false with run-once migration for existing installs [branch: DEBUG-v024]
2026-07-12 15:29:00 app_v2/src/main/java/com/sza/fastmediasorter/data/migration/S0981OpenInPlayerDefaultOff.kt S0981 default-off migration for linkAutoDownloadOpenInPlayer Run-once migration forcing existing installs’ linkAutoDownloadOpenInPlayer from ON to OFF, matching new code default [branch: DEBUG-v024]
2026-07-12 15:33:58 app_v2/src/main/java/com/sza/fastmediasorter/FastMediaSorterApp.kt S0981 migration wiring Wire S0981OpenInPlayerDefaultOff into app startup after firstFrameSignal [branch: DEBUG-v024]
2026-07-12 15:34:59 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt S0981 device-test round 2: foreground-snap fix launchPlayer waits for RESUMED via withResumed, adds FLAG_ACTIVITY_NEW_TASK to bring existing task to front reliably [branch: DEBUG-v024]
2026-07-12 15:40:46 PLAN/S1012_import-resources-toast-summary.md spec Scaffold strategic spec skeleton S1012 [branch: DEBUG-v024]
2026-07-12 16:10:43 app_v2/src/main/java/com/sza/fastmediasorter/ui/share/LinkAutoDownloadResultPresenter.kt S0981 device-test round 2: foreground-snap fix (recheck) launchPlayer waits for RESUMED via withResumed, adds FLAG_ACTIVITY_NEW_TASK [branch: DEBUG-v024]
2026-07-12 16:11:47 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/AppSettings.kt S0981 linkAutoDownloadOpenInPlayer default true->false Owner call: default OFF after device-test found background-triggered player launch can miss foreground snap; opt-in is safer until UX is fully robust [branch: DEBUG-v024]
2026-07-12 16:12:28 app_v2/screencapture+settings S1008 Per-zone edge-gesture strip visibility: moved the single left-edge strip toggle into the LEFT_TOP zone block and added analogous toggles to the other three zones (portrait+land). Strip visibility is now a per-zone setting resolved at the overlay host like enabled-zones; old flag migrates into LEFT_TOP. Touches AppSettings, ScreenshotSettingsStore (+migration), dispatcher, overlay manager/host, a11y service, controller interface + 2 flavor impls, welcome flow, settings docs. [branch: DEBUG-v024]
2026-07-12 16:12:54 app_v2/src/main/java/com/sza/fastmediasorter/data/repository/settings/LinkSettingsStore.kt S0981 linkAutoDownloadOpenInPlayer default true->false DataStore read-default mirrors AppSettings.kt code default flip [branch: DEBUG-v024]
2026-07-12 16:35:20 app_v2/src/main/res/layout/fragment_settings_destinations.xml Settings destinations S1011: move resource-picker Select button before the value in all 6 destination selectors (portrait + land) [branch: DEBUG-v024]
2026-07-12 17:03:27 PLAN/S1013_companion-lan-mdns-discovery.md spec Add strategic spec S1013 - companion LAN mDNS discovery (out-of-box on same network) [branch: DEBUG-v024]
2026-07-12 17:03:27 PLAN/S1014_network-resource-connection-guidance.md spec Add strategic spec S1014 - actionable connection-failure guidance [branch: DEBUG-v024]
2026-07-12 17:17:56 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/CompanionMdnsDiscovery.kt S1013 S1013: companion LAN mDNS discovery (NsdManager _sftp-fms._tcp, fingerprint-matched) feeds SftpEndpointResolver so same-Wi-Fi companion resources connect via the live local address [branch: DEBUG-v024]
2026-07-12 17:25:12 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/CompanionMdnsDiscovery.kt S1013 S1013: companion LAN mDNS discovery (NsdManager _sftp-fms._tcp, fingerprint-matched) feeds SftpEndpointResolver so same-Wi-Fi companion resources connect via the live local address [branch: DEBUG-v024]
2026-07-12 17:29:27 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/CompanionMdnsDiscovery.kt S1013 S1013: companion LAN mDNS discovery (NsdManager _sftp-fms._tcp, fingerprint-matched) feeds SftpEndpointResolver so same-Wi-Fi companion resources connect via the live local address [branch: DEBUG-v024]
2026-07-12 17:32:39 app_v2/src/main/java/com/sza/fastmediasorter/data/remote/sftp/CompanionMdnsDiscovery.kt S1013 S1013: companion LAN mDNS discovery (NsdManager _sftp-fms._tcp, fingerprint-matched) feeds SftpEndpointResolver so same-Wi-Fi companion resources connect via the live local address [branch: DEBUG-v024]
2026-07-12 17:36:58 PLAN/S1015_bugfix-add-rtsp-stream-manually.md spec Scaffold strategic spec skeleton S1015 [branch: DEBUG-v024]
2026-07-12 18:00:15 app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapper.kt S1014 S1014: actionable connection-failure guidance - store+show companion accessNote, SFTP/FTP default access guidance, wired via NetworkErrorMessageMapper (Room v40 access_note column) [branch: DEBUG-v024]
2026-07-12 18:02:22 app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapper.kt S1014 S1014: actionable connection-failure guidance (companion accessNote + SFTP/FTP default access guidance) [branch: DEBUG-v024]
2026-07-12 18:05:31 app_v2/src/main/java/com/sza/fastmediasorter/data/network/exceptions/NetworkErrorMessageMapper.kt S1014 S1014: actionable connection-failure guidance (companion accessNote + SFTP/FTP default access guidance) [branch: DEBUG-v024]
2026-07-12 18:08:42 docs/howto/scenario-companion-share.md doc-update S1006/S1013/S1014: update companion-share how-to (EN/RU/UK) - LAN auto-discovery, one import works home and away when PC is reachable, guidance on connect failure [branch: DEBUG-v024]
2026-07-12 18:26:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/browse/managers/BrowseLoadingAuxManager.kt S1014 S1014: cover the browse-scan failure surface - show companion accessNote / default access guidance where the user opens a shared folder that cannot be reached [branch: DEBUG-v024]
2026-07-12 20:53:34 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/companion/ImportCompanionConfigUseCase.kt S1016 Companion .fmscfg/QR: honour per-root readOnly flag (writable = readOnly==false OR isDestination); DTO field + resolveReadOnly rule, import mapping, export emit, unit tests [branch: DEBUG-v024]
2026-07-12 20:56:17 PLAN/S1017_bugfix-settings-collapsed-section.md spec Scaffold strategic spec skeleton S1017 [branch: DEBUG-v024]
2026-07-12 20:56:57 PLAN/S1018_bugfix-d2d-background-asset-missing.md spec Scaffold strategic spec skeleton S1018 [branch: DEBUG-v024]
2026-07-12 20:58:43 scripts/devtest/prerelease-log-audit.ps1 S0484 Extend log-audit foreign-tag/benign exclude lists with confirmed non-app clusters from the 2026-07-12 prerelease sweep (PID-cross-checked against app Start-proc lines) - cuts false-positive triage noise 18->3 actionable clusters [branch: DEBUG-v024]
2026-07-12 21:00:28 temp/S0484/prerelease_20260712_193755.md spec-prerelease Pre-release sweep 2026-07-12: verdict FAIL (Maestro 16/17, log/perf clean) - parked S1017 (Maestro collapsed-section flow) + S1018 (missing d2d asset); log-audit noise filter fixed inline; stream-catalog refreshed+reuploaded [branch: DEBUG-v024]
2026-07-12 21:33:05 PLAN/S1020_bugfix-extension-install-hang.md spec Scaffold strategic spec skeleton S1020 [branch: DEBUG-v024]
2026-07-12 21:36:03 PLAN/S1020_bugfix-extension-install-hang.md spec Delete erroneous spec S1020 (created by mistake, archived + file removed) [branch: DEBUG-v024]
2026-07-12 21:46:48 app_v2/src/main/java/com/sza/fastmediasorter/domain/model/ResourceWriteCapability.kt S1019 Unify write-permission gating via MediaResource.allowsWriteOperations() so clearing ‘read-only’ enables Move/Rename/Delete on network resources; player+browse+operation guards share one resolver (what the user sees = what works) [branch: DEBUG-v024]
2026-07-12 21:58:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StreamDataSourceFactoryProvider.kt S1015 stream basic-auth fix Basic-Auth-from-URL support for HTTP stream playback datasource [branch: DEBUG-v024]
2026-07-12 22:09:06 app_v2/src/main/java/com/sza/fastmediasorter/ui/streams/helpers/StreamInlineAudioManager.kt S1015 stream basic-auth fix Reuse shared StreamDataSourceFactoryProvider (Basic-Auth + Icy-MetaData) in OFF-mode inline radio playback instead of a duplicated local factory [branch: DEBUG-v024]
2026-07-12 22:49:26 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt FileOperationUseCase.executeWithProgress/executeInternal + BrowseFileTransferWorker.doWork S1021: add debug probes to bisect silent Move-transfer stall (coroutine-launch, try-entry, post-classification, handler-dispatch, worker cancellation-catch) [branch: DEBUG-v024]
2026-07-12 22:50:06 PLAN/S1022_edge-gestures-visual-grouping.md spec Scaffold strategic spec skeleton S1022 [branch: DEBUG-v024]
2026-07-12 22:51:49 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt FileOperationUseCase.executeWithProgress/executeInternal + BrowseFileTransferWorker.doWork S1021: add debug probes to bisect silent Move-transfer stall (coroutine-launch, try-entry, post-classification, handler-dispatch, worker cancellation-catch) [branch: DEBUG-v024]
2026-07-12 22:57:47 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt S1008 Remove S1008 BlockNeedUserTest probe tag; route device-test failure into S1008 (Partial) [branch: DEBUG-v024]
2026-07-12 23:04:01 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt S1008 Remove S1008 BlockNeedUserTest probe tag; fix pre-existing LongParameterList/ArgumentListWrapping detekt debt via ZoneViews bundle; route right-edge band device-test failure into S1008 (Partial) [branch: DEBUG-v024]
2026-07-12 23:05:41 app_v2/src/main/java/com/sza/fastmediasorter/ui/settings/helpers/OperationsGesturesManager.kt S1008 Remove S1008 BlockNeedUserTest probe tag; fix pre-existing LongParameterList/ArgumentListWrapping/LongMethod detekt debt via ZoneViews bundle and per-zone bind functions; route right-edge band device-test failure into S1008 (Partial) [branch: DEBUG-v024]
2026-07-12 23:15:45 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt FileOperationUseCase.executeInternal + BrowseFileTransferWorker.doWork S1021: widen catch to Throwable in Move classification path and Worker.doWork backstop, so an escaping Error is logged instead of silently swallowed by WorkManager [branch: DEBUG-v024]
2026-07-12 23:16:44 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt FileOperationUseCase.executeInternal + BrowseFileTransferWorker.doWork S1021: widen catch to Throwable in Move classification path and Worker.doWork backstop, so an escaping Error is logged instead of silently swallowed by WorkManager [branch: DEBUG-v024]
2026-07-12 23:18:05 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt FileOperationUseCase.executeInternal + BrowseFileTransferWorker.doWork S1021: widen catch to Throwable in Move classification path and Worker.doWork backstop, so an escaping Error is logged instead of silently swallowed by WorkManager [branch: DEBUG-v024]
2026-07-12 23:19:32 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt FileOperationUseCase.executeInternal + BrowseFileTransferWorker.doWork S1021: widen catch to Throwable in Move classification path and Worker.doWork backstop, so an escaping Error is logged instead of silently swallowed by WorkManager [branch: DEBUG-v024]
2026-07-12 23:42:47 app_v2/src/main/java/com/sza/fastmediasorter/worker/BrowseFileTransferWorker.kt BrowseFileTransferWorker.toFile S1021 fix: capture path/displayName/size into locals in toFile network-File override - bare ‘path’ bound to File.getPath() causing infinite getPath() recursion (StackOverflowError) that silently broke every Browse background Copy/Move of a network source [branch: DEBUG-v024]
2026-07-12 23:44:40 app_v2/src/main/java/com/sza/fastmediasorter/worker/BrowseFileTransferWorker.kt BrowseFileTransferWorker.toFile S1021 fix: capture path/displayName/size into locals in toFile network-File override - bare ‘path’ bound to File.getPath() causing infinite getPath() recursion (StackOverflowError) that silently broke every Browse background Copy/Move of a network source [branch: DEBUG-v024]
2026-07-12 23:50:47 app_v2/src/main/java/com/sza/fastmediasorter/worker/BrowseFileTransferWorker.kt BrowseFileTransferWorker.toFile S1021 fix: capture path/displayName/size into locals in toFile network-File override to stop infinite getPath() recursion (StackOverflowError silently breaking Browse background Copy/Move of network sources); also cleared this file’s never-baselined detekt debt (magic numbers, complex condition, arg wrapping) [branch: DEBUG-v024]
2026-07-13 00:04:14 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt S1008 Widen edge-gesture guide visible width 4->5px as mitigation for right-edge panel perceptibility issue found in device test [branch: DEBUG-v024]
2026-07-13 00:05:48 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt S1008 Widen edge-gesture guide visible width 4->5px as mitigation for right-edge panel perceptibility issue found in device test; fix pre-existing SpacingBetweenDeclarationsWithComments detekt debt [branch: DEBUG-v024]
2026-07-13 00:06:32 PLAN/S1024_media-capture-missing-extension.md spec Scaffold strategic spec skeleton S1024 [branch: DEBUG-v024]
2026-07-13 00:10:06 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt S1008 Split edge-gesture guide visible width per side: left stays 4px (unchanged/working), right stays 5px (fixes right-edge panel perceptibility) [branch: DEBUG-v024]
2026-07-13 00:36:35 PLAN/S1026_animated-webp-support.md spec Scaffold strategic spec skeleton S1026 [branch: DEBUG-v024]
2026-07-13 00:46:01 app_v2/src/main/java/com/sza/fastmediasorter/data/transfer/AtomicFileOperationStrategy.kt file-transfer logging trim (5 files) S1027: trim per-file/per-progress/per-call transfer logging on large folders - drop isNetworkPath per-call log, gate Processing to file-change, remove AtomicFileOperationStrategy step chatter, concise SFTP/SMB failure logs instead of full stack traces, real cause in SMB connectivity check [branch: DEBUG-v024]
2026-07-13 00:48:25 PLAN/S1028_dedupe-network-path-detection.md spec Scaffold strategic spec skeleton S1028 [branch: DEBUG-v024]
2026-07-13 00:55:05 PLAN/S1029_audit-duplicate-domain-logic.md spec Scaffold strategic spec skeleton S1029 [branch: DEBUG-v024]
2026-07-13 00:55:39 app_v2/src/main/java/com/sza/fastmediasorter/domain/usecase/FileOperationUseCase.kt FileOperationUseCase.executeInternal classification S1027 finish: collapse 4 near-identical protocol-classification when-blocks (and their 16 per-branch log lines) into one hasProtocol helper plus a single per-operation classification summary [branch: DEBUG-v024]
2026-07-13 01:13:53 PLAN/S1030_android-kotlin-antipattern-audit.md spec Scaffold strategic spec skeleton S1030 [branch: DEBUG-v024]
2026-07-13 09:43:47 maestro/smoke/settings_toggle_sweep.yaml spec-all S1017: expand Interface section before scrollUntilVisible so rowEnableFavorites is reachable (Maestro flow fix, not a product regression) [branch: DEBUG-v024]
2026-07-13 09:48:42 PLAN/S1018_bugfix-d2d-background-asset-missing.md spec-arc Archive S1018 (not-a-defect): AndroidProtocolHandler E-line is benign WebView noise beside a successful EPUB cover.jpg intercept (117KB served); no product change [branch: DEBUG-v024]
2026-07-13 09:56:10 PLAN/S1023_audit-anonymous-file-getpath-recursion.md spec-arc Archive S1023 (audit complete, zero defects): all 9 object:File getPath override sites SAFE (path is local/param, no S1021 recursion); preventive factory+gate folded into S1028 [branch: DEBUG-v024]
2026-07-13 10:03:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt spec-all S1003: diagnostic S1003 probes at profile->media-types-visibility flow (renderFieldSchema, updateMediaTypesSectionVisibility, virtual-path branch, onProfileSelected); status Broken->BlockNeedUserTest [branch: DEBUG-v024]
2026-07-13 10:07:37 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt spec-all S1003: add diagnostic S1003 probes (ResourceEditorFragment renderFieldSchema/updateMediaTypesSectionVisibility/virtual-branch + ResourceFormViewModel.onProfileSelected); Broken->BlockNeedUserTest, needs on-device SMB profile-switch logcat capture [branch: DEBUG-v024]
2026-07-13 10:17:13 PLAN/S1030_android-kotlin-antipattern-audit.md spec-all Archive S1030 (antipattern audit umbrella): codebase already clean on canonical antipatterns; 4 ungated findings decomposed into S1031 (public mutable flow gate), S1032 (!! cleanup), S1033 (SMB Thread.sleep), S1034 (SimpleDateFormat thread-safety) [branch: DEBUG-v024]
2026-07-13 10:23:15 app_v2/src/main/java/com/sza/fastmediasorter/core/logging/LoggingHelper.kt spec-all S1034: confine shared SimpleDateFormat to ThreadLocal in FileLoggingTree + ExecuteScheduledOperationUseCase (thread-safety; behaviour-preserving) [branch: DEBUG-v024]
2026-07-13 10:24:18 PLAN/spec-catalog.jsonl spec-next Session (context-boundary pause): 7 processed - S1034 Verified; S1017+S1003 BlockNeedUserTest (device); S1018+S1023+S1030 Archived; S1027 drift-deferred; spawned S1031-S1034 [branch: DEBUG-v024]
2026-07-13 10:49:13 PLAN/S1035_edge-gesture-config-dialog.md spec Add strategic spec S1035 (edge-gesture config dialog); supersede + archive S1022 [branch: DEBUG-v024]
2026-07-13 10:49:13 temp/done/S1022_edge-gestures-visual-grouping.md spec-arc Archive S1022 (superseded by S1035) [branch: DEBUG-v024]
2026-07-13 11:04:36 PLAN/S1035_edge-gesture-config-dialog.md spec Resolve S1035 owner questions; Draft -> Approved [branch: DEBUG-v024]
2026-07-13 11:11:26 PLAN/S1035_edge-gesture-config-dialog/INDEX.md spec-tech S1035 tactical: INDEX.md [branch: DEBUG-v024]
2026-07-13 11:11:27 PLAN/S1035_edge-gesture-config-dialog/PHASE_01__strings-and-schema-view.md spec-tech S1035 tactical: PHASE_01__strings-and-schema-view.md [branch: DEBUG-v024]
2026-07-13 11:11:27 PLAN/S1035_edge-gesture-config-dialog/PHASE_02__dialog-layout.md spec-tech S1035 tactical: PHASE_02__dialog-layout.md [branch: DEBUG-v024]
2026-07-13 11:11:27 PLAN/S1035_edge-gesture-config-dialog/PHASE_03__dialog-fragment-and-manager.md spec-tech S1035 tactical: PHASE_03__dialog-fragment-and-manager.md [branch: DEBUG-v024]
2026-07-13 11:11:28 PLAN/S1035_edge-gesture-config-dialog/PHASE_04__settings-tab-entry.md spec-tech S1035 tactical: PHASE_04__settings-tab-entry.md [branch: DEBUG-v024]
2026-07-13 11:11:28 PLAN/S1035_edge-gesture-config-dialog/PHASE_05__settings-search-sync.md spec-tech S1035 tactical: PHASE_05__settings-search-sync.md [branch: DEBUG-v024]
2026-07-13 11:11:28 PLAN/S1035_edge-gesture-config-dialog/PHASE_06__docs-catalog-cleanup.md spec-tech S1035 tactical: PHASE_06__docs-catalog-cleanup.md [branch: DEBUG-v024]
2026-07-13 11:11:28 PLAN/S1035_edge-gesture-config-dialog.md spec-tech S1035 Status -> Tactical [branch: DEBUG-v024]
2026-07-13 11:15:10 app_v2/src/main/res/values/strings.xml spec-dev S1035 phase-01.1: add edge-gesture dialog strings (EN/RU/UK) [branch: DEBUG-v024]
2026-07-13 11:49:38 PLAN/S1036_gesture-launch-app-selection.md spec Add strategic spec S1036 (per-gesture launch-app selection); BlockByOtherTask on S1035 [branch: DEBUG-v024]
2026-07-13 12:02:46 PLAN/S1038_gesture-action-catalog-grouped-picker.md spec Add strategic spec S1038 (gesture action catalog expansion + grouped picker); Approved [branch: DEBUG-v024]
2026-07-13 12:39:22 PLAN/S1027_trim-file-transfer-logging-large-folders.md spec-check Audit S1027 -> Verified; PASS/WARN/FAIL 7/0/0 [branch: DEBUG-v024]
2026-07-13 12:40:35 PLAN/S1016_companion-config-writable-root.md spec-check Audit S1016 -> Verified; PASS/WARN/FAIL 4/0/0 [branch: DEBUG-v024]
2026-07-13 12:42:04 PLAN/S1011_picker-button-before-value.md spec-check Audit S1011 -> Verified; PASS/WARN/FAIL 6/0/0 [branch: DEBUG-v024]
2026-07-13 12:43:39 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt spec-check S1008: add band-visibility probe tag; Partial -> BlockNeedUserTest for release device sweep [branch: DEBUG-v024]
2026-07-13 14:00:53 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraSettingsDialogRotationManager.kt S0924 Fix rotated camera settings dialog sizing: swap window axes so landscape dialog is wide-and-short (was narrow column); add dialog_landscape_max_width cap [branch: DEBUG-v024]
2026-07-13 14:01:35 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraSettingsDialogRotationManager.kt S0924 Fix rotated camera settings dialog sizing: swap window axes so landscape dialog is wide-and-short (was narrow column); add dialog_landscape_max_width cap [branch: DEBUG-v024]
2026-07-13 14:04:31 PLAN/S1039_share-resource-fmscfg.md spec Scaffold strategic spec skeleton S1039 [branch: DEBUG-v024]
2026-07-13 14:05:25 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt spec-check S0847 device-verified; remove probe tag [branch: DEBUG-v024]
2026-07-13 14:05:26 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenGestureOverlayManager.kt spec-check S1008 device-verified; remove probe tag [branch: DEBUG-v024]
2026-07-13 14:05:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceEditorFragment.kt spec-check S1003 device-verified; remove probe tags [branch: DEBUG-v024]
2026-07-13 14:05:26 app_v2/src/main/java/com/sza/fastmediasorter/ui/resourceeditor/ResourceFormViewModel.kt spec-check S1003 device-verified; remove probe tag [branch: DEBUG-v024]
2026-07-13 14:05:27 app_v2/src/main/java/com/sza/fastmediasorter/ui/companionimport/qr/CompanionQrScanActivity.kt spec-check S0988 device-verified; remove probe tag [branch: DEBUG-v024]
2026-07-13 14:05:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/game/GameBoardView.kt spec-check S0993 device-verified; remove probe tags [branch: DEBUG-v024]
2026-07-13 14:05:28 app_v2/src/main/java/com/sza/fastmediasorter/data/migration/S0981OpenInPlayerDefaultOff.kt spec-check S0981 device-verified; remove probe tag [branch: DEBUG-v024]
2026-07-13 14:05:28 app_v2/src/main/java/com/sza/fastmediasorter/ui/main/MainActivity.kt spec-check S0981 device-verified; remove probe tag + unused kind [branch: DEBUG-v024]
2026-07-13 14:14:22 PLAN/S1040_smb-network-flap-debounce-invalidation.md spec Scaffold strategic spec skeleton S1040 [branch: DEBUG-v024]
2026-07-13 14:31:16 app_v2/src/main/java/com/sza/fastmediasorter/core/network/NetworkStateMonitor.kt spec-dev S1040: debounce network-change invalidation; suppress same-network flap round-trips [branch: DEBUG-v024]
2026-07-13 14:34:15 PLAN/S1040_smb-network-flap-debounce-invalidation.md spec-dev S1040: fill strategic sections; implement network-flap debounce; -> BlockNeedUserTest [branch: DEBUG-v024]
2026-07-13 14:51:42 app_v2/src/main/res/layout/dialog_camera_settings.xml S0924 Landscape camera settings dialog: fill full long axis width + reflow rows into 2 columns via new ColumnFlowLayout to cut content height [branch: DEBUG-v024]
2026-07-13 14:58:30 PLAN/S1041_gesture_screenshot_ocr_translate_drawable_race.md spec-all Compact spec: S1041 gesture screenshot OCR/translate drawable race [branch: DEBUG-v024]
2026-07-13 15:06:09 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-all S1041: defer standalone auto-OCR/translate until image drawable is decoded (onImageReady Glide listener); fixes false ocr_extract_image_failed toast on gesture-screenshot flow [branch: DEBUG-v024]
2026-07-13 15:13:47 PLAN/S1041_gesture_screenshot_ocr_translate_drawable_race.md spec-all Pipeline BlockNeedUserTest: S1041 defer standalone auto-OCR/translate until image drawable ready [branch: DEBUG-v024]
2026-07-13 15:29:14 app_v2/src/main/java/com/sza/fastmediasorter/ui/player/helpers/StandaloneViewManager.kt spec-all S1041 rev2: dispatch onImageReady via photoView.post so the auto-action reads the bound (non-null) drawable - RequestListener.onResourceReady fires before Glide binds it [branch: DEBUG-v024]
2026-07-13 15:52:36 PLAN/S1042_screenshot_ocr_crop_flow_unification.md spec Strategic spec: S1042 screenshot OCR crop-flow unification [branch: DEBUG-v024]
2026-07-13 16:07:57 PLAN/S1042_screenshot_ocr_crop_flow_unification.md spec-all F1 strategic spec approved: S1042 [branch: DEBUG-v024]
2026-07-13 16:10:18 PLAN/S1042_screenshot_ocr_crop_flow_unification/INDEX.md spec-all F2 tactical plan: S1042 (5 phases) [branch: DEBUG-v024]
2026-07-13 16:27:03 PLAN/S1042_screenshot_ocr_crop_flow_unification/INDEX.md spec-all F3 impl: screenshot + all OCR entry points route into photo crop/OCR/translate flow; capture temp-stages raw frame, only cropped saved [branch: DEBUG-v024]
2026-07-13 16:27:12 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenCaptureService.kt spec-all S1042: OCR screenshot actions temp-stage the raw frame and open the unified crop/OCR/translate screen [branch: DEBUG-v024]
2026-07-13 16:28:28 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenCaptureService.kt spec-all S1042 detekt detail [branch: DEBUG-v024]
2026-07-13 16:29:46 app_v2/src/screenCapture/java/com/sza/fastmediasorter/screencapture/ScreenCaptureService.kt spec-all S1042 detekt detail [branch: DEBUG-v024]
2026-07-13 16:34:50 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-all S1042: reroute OCR gesture entry points into the unified crop/OCR/translate screen [branch: DEBUG-v024]
2026-07-13 17:30:10 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/helpers/CameraSettingsDialogRotationManager.kt S0924 Landscape camera settings dialog: use full short-axis physical height (drop max_height cap) so 2-column content + action row fit without scrolling [branch: DEBUG-v024]
2026-07-13 17:59:38 app_v2/src/main/java/com/sza/fastmediasorter/ui/cameracapture/CameraSettingsDialogFragment.kt S0924 Remove S0924 BlockNeedUserTest probe tag + unused Timber import on verify [branch: DEBUG-v024]
2026-07-13 18:22:40 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-all S1042: share OCR temp-staging via dispatcher; mirror OCR pre-save branch into noLegal accessibility capture [branch: DEBUG-v024]
2026-07-13 18:23:25 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-all S1042: share OCR temp-staging via dispatcher; mirror OCR pre-save into noLegal accessibility capture [branch: DEBUG-v024]
2026-07-13 18:24:23 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-all S1042: share OCR temp-staging via dispatcher; mirror OCR pre-save into noLegal accessibility capture [branch: DEBUG-v024]
2026-07-13 18:26:13 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-all S1042: share OCR temp-staging via dispatcher; mirror into noLegal accessibility capture [branch: DEBUG-v024]
2026-07-13 18:29:12 app_v2/src/noLegal/java/com/sza/fastmediasorter/screencapture/ScreenshotAccessibilityService.kt spec-all S1042: mirror OCR pre-save temp-stage into noLegal accessibility capture backend; share stageOcrSourceFile via dispatcher [branch: DEBUG-v024]
2026-07-13 18:38:34 app_v2/src/main/res/layout/activity_camera_ocr_translate.xml spec-all S1042: remove crop-screen hint (tvCropHint + camera_ocr_crop_hint string); preview keeps fitCenter above the bottom command bar [branch: DEBUG-v024]
2026-07-13 18:47:49 app_v2/src/main/java/com/sza/fastmediasorter/core/screencapture/ScreenshotGestureActionDispatcher.kt spec-all S1042/S1041 Verified: remove debug probes; restore plain OCR-crop launch failure log [branch: DEBUG-v024]
2026-07-13 19:40:55 PLAN/S1043_maestro-settings-tab-flaky.md spec Scaffold strategic spec skeleton S1043 [branch: DEBUG-v024]
2026-07-13 20:49:32 docs/WHATS_NEW.md WHATS_NEW Release notes for v2.60.7132.046 - plateau merge from DEBUG-v024 [branch: DEBUG-v024]