Files
fileworkbench/docs/CODEX_HANDOFF.md
T
zemion db873063f8
Verify source and build Android / android (push) Canceled after 0s
initial commit v 0.2.0
2026-09-24 22:49:27 +02:00

4.1 KiB

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.