You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: RESEARCH_REPORT.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,8 @@
1
1
# SwiftFloris Research Report
2
2
3
-
This report summarizes current research conclusions. The full 2026-05-25 research plan is archived at `docs/archive/research/RESEARCH_FEATURE_PLAN_2026-05-25.md`. Deep-research pass refreshed **2026-06-03** (post-v1.8.204).
3
+
This report summarizes current research conclusions. The full 2026-05-25 research plan is archived at `docs/archive/research/RESEARCH_FEATURE_PLAN_2026-05-25.md`. Deep-research pass refreshed **2026-06-03** (post-v1.8.204), with a 2026-06-04 freshness note after the v1.8.207 voice-copy slice.
4
+
5
+
2026-06-04 freshness note: the live dirty tree has already moved EI7 out of active work into v1.8.207 release docs, with `VoiceInputEmptyStateCopyTest.kt` pinning the FUTO explanation and F-Droid install action. This pass did not run Gradle because repo instructions say not to run Android gates from this VM unless asked; the changelog's green Gradle evidence remains unverified here. Current external checks support the copy: FUTO's Voice Input page describes it as working entirely on-device with no stored data, latest F-Droid/standalone version v1.3.6 (28), and the source mirror says FUTO Voice Input remains available for third-party keyboards even though FUTO development has shifted toward FUTO Keyboard. Android-platform sources also moved: Android 17 API 37 setup docs are current, but SwiftFloris already keeps API 37 as a future behavior-gate decision. Maven metadata shows low-priority freshness drift rather than a security issue: Kotlin 2.4.0, Compose BOM 2026.05.01, AndroidX Core 1.19.0, and Roborazzi 1.63.0 are newer than the pinned versions, while Room 2.8.4, SQLCipher 4.16.0, Tink 1.21.0, and Robolectric 4.16.1 still match current metadata. A P3 dependency-refresh row was added to `ROADMAP.md`.
4
6
5
7
## Executive Summary
6
8
@@ -54,7 +56,7 @@ Privacy-first multilingual IME. `:app` is Apache-2.0-ceiling, no network permiss
54
56
## Architecture & Technical Findings
55
57
56
58
-**Module boundaries:** clean `:app` + `:lib:*` split; addon capability isolation is a deliberate, well-documented pattern. No new boundary issue surfaced.
57
-
-**Dependency health:**versions are current; no obviously outdated/deprecated/vulnerable libs in `libs.versions.toml` (Kotlin 2.3.21, AGP 9.2.1, Room 2.8.4, SQLCipher 4.16.0, Tink 1.21.0, Roborazzi 1.60.0). No net-new dependency item warranted. [Verified]
59
+
-**Dependency health:**the security-sensitive pins checked here are still current for SQLCipher 4.16.0 and Tink 1.21.0, and Room/Robolectric also match metadata. Freshness drift now exists for Kotlin 2.4.0, Compose BOM 2026.05.01, AndroidX Core 1.19.0, and Roborazzi 1.63.0; AGP 9.2.1 appears to be the stable baseline while Google Maven's newest AGP metadata is 9.3 alpha. This is a P3 maintenance batch, not a security item. [Verified via Maven metadata]
58
60
-**Overgrown files:**`IndicTransliterator.kt` (~86 KB), `TextKeyboardLayout.kt` (~76 KB), `LatinLanguageProvider.kt` (~60 KB), `KeyboardManager.kt` (~60 KB) are large but the SHIFT state machine was already extracted (F27 shipped) and the audits already track `LatinLanguageProvider` heap risk (A1). Left as-is — no speculative refactor proposed.
59
61
-**Testability:** 217 JVM test files, 5 androidTest. The search subsystem is the thinnest-tested new code; RA-1/RA-3 close that.
60
62
-**Release automation:** mature (reproducible build, SBOM/provenance and signed-tags already roadmapped as maintainer-gated). No new item.
Copy file name to clipboardExpand all lines: ROADMAP.md
+33Lines changed: 33 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,25 @@ Hard rules still apply (see `AGENTS.md`): no `INTERNET` permission in `:app`; Ap
8
8
9
9
Item IDs trace to their origin research: `F#`/`EI#` from the archived 2026-05-25 research feature plan; `R#`/`O#` from the 2026-05-25 second-pass findings; `WS#` from the archived improvement-plan workstreams; `N#`/`Next-#`/`L#` from the archived roadmap tiers. Shipped items and reframed/rejected items live in `COMPLETED.md`; full release detail in `CHANGELOG.md`. Historical strategy (tiered NOW/NEXT/LATER, sourced appendix) is preserved at `docs/archive/ROADMAP_v5.67_2026-05-18.md`.
10
10
11
+
> Last researched: Cycle 1 - 2026-06-04.
12
+
13
+
## Implementer Instructions
14
+
15
+
- Treat this roadmap as the planning history and `PROJECT_CONTEXT.md` /
16
+
`AGENTS.md` as the operational entry point. Shipped work belongs in
17
+
`CHANGELOG.md`; completed roadmap items belong in `COMPLETED.md`.
18
+
- Keep the `:app` invariant strict: no internet/network permissions, Apache-2.0
19
+
ceiling, no closed-source blobs, and network or incompatible features only in
20
+
isolated addon APKs.
21
+
- Do not run Gradle on this VM unless explicitly asked. Use the Android SDK host
22
+
for `:app:verifyNoInternetPermission :app:testDebugUnitTest :app:lintDebug
23
+
:app:assembleDebug` and device-gated manual QA.
24
+
- For release work, keep `gradle.properties`, consolidated `CHANGELOG.md`, and
25
+
fastlane changelog metadata in lockstep with the version bump.
26
+
- Researcher-queue ownership tags: `🤖` means implementer-actionable, `🔧`
27
+
means user/external/manual gated, `🔬` means researcher-added this cycle, and
@@ -56,6 +75,11 @@ Item IDs trace to their origin research: `F#`/`EI#` from the archived 2026-05-25
56
75
57
76
### Docs & hygiene
58
77
78
+
-[ ] P3 — Low-risk dependency freshness batch after v1.8.207
79
+
- Why: 2026-06-04 Maven metadata shows small freshness drift after the current release: Kotlin 2.4.0, Compose BOM 2026.05.01, AndroidX Core 1.19.0, and Roborazzi 1.63.0 are newer than the pinned versions. Room 2.8.4, SQLCipher 4.16.0, Tink 1.21.0, and Robolectric 4.16.1 still match current metadata; Google Maven's newest AGP is 9.3 alpha, so do not churn AGP blindly.
80
+
- Touches: `gradle/libs.versions.toml`, release notes if bumped.
81
+
- Acceptance: bump only compatible low-risk pins; `:app:verifyNoInternetPermission :app:testDebugUnitTest :app:lintDebug :app:assembleDebug` green on an Android SDK host; no new permission or dependency-license surface.
82
+
- Source: 2026-06-04 research refresh.
59
83
-[ ] P2 — Confirm absence of lint baseline / close EI10 (EI10)
60
84
- Why: Research says no `app/lint-baseline.xml` exists; confirm and note.
@@ -143,6 +167,15 @@ These are genuine blockers — each needs an account, key, sibling repo, ML infr
143
167
144
168
## Research-Driven Additions
145
169
170
+
### Researcher Queue (Cycle 1 - 2026-06-04)
171
+
172
+
-[x] 🔬 `voice-copy-dependency-refresh-2026-06-04` - rechecked the v1.8.207
173
+
voice-copy slice and public dependency metadata without running Gradle on this
174
+
VM. FUTO Voice Input remains the correct privacy-preserving handoff for voice
175
+
copy, Android 17/API 37 remains future behavior-gate work, and dependency
176
+
drift is low-risk maintenance rather than a security item. The new P3
177
+
dependency freshness row is the build-lane handoff.
178
+
146
179
*Research conducted 2026-06-03. Items below are new — not duplicates of Existing Planned Work.*
147
180
148
181
This pass focused on the v1.8.204 **settings search** drop (the newest feature, shipped this release) and a few cross-cutting gaps the three deep audits (`docs/AUDIT_2026-05-28/29` + `2026-06-02`) and the existing roadmap do not already cover. The search subsystem is a hand-maintained static catalog that mirrors the navigation graph with no drift guard — the highest-leverage net-new work.
0 commit comments