# Continuation brief ## User objective Replace the routine act of opening mobile file attachments in Google/Microsoft apps with an account-free local viewer. Android first; preserve an iOS path through reusable core logic. Do not turn this into a storage cloud or a new full Office suite as the first deliverable. ## Current source Read `README.md`, `FEATURES.md`, `ARCHITECTURE.md`, `SECURITY.md`, `BUILD.md` and `VALIDATION.md`. Android Kotlin/Compose implementation, isolated PDF service, JVM ZIP adapter and genuine common Kotlin reading-preview parsers are present. 112 offline core/JVM checks passed. Android and Apple builds have not completed; Android bootstrap attempts fail before compilation. The archive contains no APK and no LibreOffice binary. ## Browser addition in 0.2.0 Read `BROWSER.md` and `BROWSER_ACCEPTANCE.md`. Native SAF folder browsing and a separate GET_CONTENT picker are implemented, with APP_FILES/directory VIEW registration. Shared browser models, sort/filter, MIME/selection policy and streamed-copy limits are in commonMain. Android adapters own grants, metadata, opt-in thumbnails and copied FileProvider results. Exported activity extras are sanitized before SavedStateHandle defaults are created. Do not remove that protection or forward directory grants. No broad storage access, all-files permission, raw-path enumeration, file mutation, persistent picker result or replacement system DocumentsUI is implemented. Android 11+ root/Downloads restrictions are intentional and explained in the UI. The debug-only fixture DocumentsProvider is for tests only. ## First actions Bootstrap the official checksum-verified Gradle wrapper on a connected build machine; install the pinned Android SDK/JDK tooling; resolve/build/test/lint. Fix all actual compile/runtime issues before extending formats. Run `ViewerSmokeTest`, `BrowserIntegrationTest`, and the manual distinct-UID real-provider flows. Preserve known limitations in the UI and documentation. Update the validation report only with commands actually run. ## Non-negotiable boundaries Keep originals read-only; explicit copy/export/share only. Do not add INTERNET, all-files access, telemetry or account requirements to solve a document-opening problem. A selected provider may have independent networking. Do not execute scripts/macros/formulas or load external resources. Keep input/output/ZIP/XML/repetition limits enforced during parsing. Never extract archive paths to the filesystem. Preserve capability/fidelity labels and explicit error recovery. Keep Android types out of commonMain. `platform-jvm` is not the iOS implementation. Use the configured Apple framework and build a native ZIP/file/PDF adapter later. Do not call an untested interface or placeholder native bridge an implemented engine. ## Known areas for review Custom preview XML parser is bounded but not schema/namespace validating. Office previews omit substantial content. PDF IPC, worker cancellation/lifecycle and actual device memory need testing. Image EXIF/animation handling is absent. Export/share jobs and cache cleanup need race tests. UI strings are currently English and mostly inline; move them to a localization layer before adding languages. Dependency locking/verification/SBOM requires an actual resolved build. Follow the implementation slices in `ROADMAP.md`, with measurable acceptance results. Keep source and documentation complete in each release ZIP. Do not commit user documents, local SDK paths, private signing keys or generated build caches. ## Continuation from 0.2.3 Current requested baseline: Gradle 8.14.5, installed JDK 17, Kotlin 2.2.21, AGP 8.11.1. All sources and SAF-D1 diagnostics are integrated; no patch step remains. Check `docs/VALIDATION.md` before claiming build/device success. The persistent folder failure is unresolved; obtain the exact new message after confirming the 0.2.3 / SAF-D1 footer. Do not infer permission failure from retained-grant=false alone. Do not upgrade the build toolchain or add a duplicate root Kotlin JVM plugin to investigate the storage-provider issue. Current pins are checked offline by `scripts/check-build-config.py` as well as by Gradle settings at configuration time.