Skip to content

Commit 500ae77

Browse files
committed
test: pin mime filter aggregates
1 parent 469e232 commit 500ae77

13 files changed

Lines changed: 182 additions & 30 deletions

File tree

AGENTS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ and sourced reasoning; mine them for *why*, but pick the next task from
1818
`ROADMAP.md`.
1919

2020
1. [`PROJECT_CONTEXT.md`](PROJECT_CONTEXT.md) — single-page consolidated
21-
project context. Pins the load-bearing invariants, current v1.8.240
21+
project context. Pins the load-bearing invariants, current v1.8.241
2222
stack, the module layout, roadmap-file routing, and current source-of-truth
2323
state.
2424
2. [`ARCHITECTURE.md`](ARCHITECTURE.md) — contributor-facing module,
@@ -91,7 +91,7 @@ evidence. A matching `fastlane/metadata/android/en-US/changelogs/<versionCode>.t
9191

9292
`gradle.properties` `projectVersionCode` + `projectVersionName` bump in lockstep
9393
with the changelog commit. Tag the release commit at the same time
94-
(`git push --tags`). HEAD is `v1.8.240` (versionCode 2040) as of 2026-06-04.
94+
(`git push --tags`). HEAD is `v1.8.241` (versionCode 2041) as of 2026-06-04.
9595

9696
### 5. Definition of Done (per [ROADMAP.md](ROADMAP.md) §15)
9797

ARCHITECTURE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SwiftFloris Architecture
22

3-
Last updated: 2026-06-04, against the v1.8.240 codebase.
3+
Last updated: 2026-06-04, against the v1.8.241 codebase.
44

55
This file is the fast architectural map for contributors. It is intentionally
66
shorter than `ROADMAP.md` and more code-oriented than `PROJECT_CONTEXT.md`.

CHANGELOG.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,45 @@
22

33
All SwiftFloris release history is consolidated here. This replaces the former root-level `RELEASE_NOTES_v*.md` file-per-release pattern.
44

5+
<a id="v1.8.241"></a>
6+
## v1.8.241
7+
8+
Released: 2026-06-04
9+
10+
### MIME helper contract
11+
12+
R4-3 is closed. The shared MIME helper no longer prints compiled filters from its constructor, its aggregate helpers document their null/empty/exactly-one semantics, and focused coverage pins case-sensitive matching plus the legacy fragment-wildcard patterns used by extension import filters.
13+
14+
### Changes
15+
16+
- **`MimeTypeFilter.kt`** - removes constructor stdout logging and replaces aggregate-helper TODOs with explicit KDoc for `matchesAll`, `matchesAny`, and `matchesOne`.
17+
- **`MimeTypeFilterTest.kt`** - adds null/empty/all/any/exactly-one aggregate tests, a stdout-capture guard, case-sensitive matching coverage, and intentional fragment-wildcard aggregate coverage.
18+
- **`ExtensionEditFilesScreen.kt`** - documents the legacy font MIME wildcard contract at the import filter call site.
19+
- **`README.md` / `PROJECT_CONTEXT.md` / `AGENTS.md` / `ARCHITECTURE.md` / `ROADMAP.md` / `COMPLETED.md` / `RESEARCH_REPORT.md` / `gradle.properties` / fastlane metadata** - advances the release marker to v1.8.241 / versionCode 2041 and closes R4-3.
20+
21+
### Verification
22+
23+
- `cmd /c ".\gradlew.bat --no-daemon --no-parallel --max-workers=1 -Dorg.gradle.jvmargs=-Xmx1536m -Dkotlin.daemon.jvm.options=-Xmx1536m :lib:kotlin:test --tests org.florisboard.lib.kotlin.MimeTypeFilterTest"` - PASS in 31s.
24+
- `git diff --check` - PASS.
25+
- `bash scripts/check-fastlane-metadata.sh` - PASS for versionCode 2041.
26+
- APK assembly was intentionally skipped in this local batch per operator request to avoid repeated heavy Android builds.
27+
28+
### Files Touched
29+
30+
- `AGENTS.md`
31+
- `ARCHITECTURE.md`
32+
- `CHANGELOG.md`
33+
- `COMPLETED.md`
34+
- `PROJECT_CONTEXT.md`
35+
- `README.md`
36+
- `RESEARCH_REPORT.md`
37+
- `ROADMAP.md`
38+
- `app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionEditFilesScreen.kt`
39+
- `fastlane/metadata/android/en-US/changelogs/2041.txt` (new)
40+
- `gradle.properties` (versionCode 2040->2041, versionName 1.8.240->1.8.241)
41+
- `lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/MimeTypeFilter.kt`
42+
- `lib/kotlin/src/test/kotlin/org/florisboard/lib/kotlin/MimeTypeFilterTest.kt`
43+
544
<a id="v1.8.240"></a>
645
## v1.8.240
746

COMPLETED.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ Consolidated from the archived open-work checklist (closed items). Full per-rele
7979
- [x] R4-2 (P3) — Clipboard image/video history tiles now expose localized TalkBack labels with media type, history group, and copied-time context while keeping thumbnail/video overlay icons decorative. Shipped v1.8.238. — *Source: ROADMAP.md Researcher Queue Cycle 4.*
8080
- [x] R10-1 (P2) — Editor start-view and selection-update content generation is cancelled or superseded across reset, finishInput, and input-connection switches so delayed jobs cannot republish stale editor state or touch an old `InputConnection`. Shipped v1.8.239. — *Source: ROADMAP.md Researcher Queue Cycle 10.*
8181
- [x] R11-1 (P2) — Async preference-store initialization failures now stage a crash report, unblock the Settings splash wait, and redirect to the existing crash recovery surface before normal Settings content renders. Shipped v1.8.240. — *Source: ROADMAP.md Researcher Queue Cycle 11.*
82+
- [x] R4-3 (P3) — `MimeTypeFilter` aggregate helper behavior is documented and covered for null, empty, many-match, exactly-one, case-sensitive, and legacy fragment-wildcard inputs, and constructor stdout logging is removed. Shipped v1.8.241. — *Source: ROADMAP.md Researcher Queue Cycle 4.*
8283
- [x] F1, F2, F15, F16, F17, F19, F20, F25, F26, F32, F34, F35, F36, F41, F42, EI8, EI11, EI4 (doc) — Closed across v1.8.174 -> v1.8.187. — *Source: TODO_2026-06-03.md*
8384
- [x] IMPROVEMENT_PLAN Workstreams 1, 3, 4, 5, 6 complete; Workstream 2 (lint) monotonically decreasing. — *Source: IMPROVEMENT_PLAN_2026-05-18.md*
8485

PROJECT_CONTEXT.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
**Maintained at root for fast onboarding.**
44
**Last consolidated:** 2026-06-04 (from the autonomous research run at
55
[`.ai/research/2026-05-17/`](.ai/research/2026-05-17/) plus follow-up slices
6-
through v1.8.240).
6+
through v1.8.241).
77

88
This file is the single fastest read for an AI session, new contributor, or
99
maintainer-context refresh. It does **not** replace [ROADMAP.md](ROADMAP.md),
@@ -47,7 +47,7 @@ them requires changing both the relevant code *and* the gate.
4747
If a proposed change conflicts with any of these, the answer is "move that
4848
feature into an addon" — never "loosen the invariant."
4949

50-
## 3. Stack at HEAD (v1.8.240)
50+
## 3. Stack at HEAD (v1.8.241)
5151

5252
```
5353
Kotlin 2.3.21 · Compose BOM 2026.05.01 · Material 3 + material-kolor 4.1.1
@@ -204,7 +204,7 @@ and in [`ROADMAP.md` §0 v5.5 + v5.4](ROADMAP.md). Net deltas to invariants:
204204
at `docs/outreach/2026-05-17-swiftkey-migration/` covering
205205
AlternativeTo, BGR, Android Authority, and r/Swiftkey.
206206

207-
**v1.8.104 - v1.8.240** ships the seventh research-pass privacy,
207+
**v1.8.104 - v1.8.241** ships the seventh research-pass privacy,
208208
voice, clipboard, NLP, visual-regression, Addons trust/asset/catalog layer, and
209209
input-behavior testability plus conservative lint/dependency cleanup and
210210
performance-baseline / CI-quality / repo-hygiene / destructive-confirmation
@@ -538,7 +538,7 @@ keyboard preview field now renders as a distinct bottom surface, exposes
538538
ready/active focus-state feedback, preserves bottom-bar traversal ordering, and
539539
uses coroutine-safe feedback when Android cannot open the keyboard picker.
540540

541-
v1.8.171 through v1.8.240 refresh the release front door after the 2026-05-31
541+
v1.8.171 through v1.8.241 refresh the release front door after the 2026-05-31
542542
SwiftKey account-export cutoff, consolidate planning into `ROADMAP.md`,
543543
backfill audit docs, ship settings search and search polish, add hardware
544544
keyboard import and per-app language/accent discovery, harden release gates
@@ -603,6 +603,10 @@ v1.8.240 closes the async preference-store startup recovery gap: failed
603603
`FlorisPreferenceStore.initAndroid(...)` work is staged through the existing
604604
crash-report path, the Settings splash wait is unblocked, and Settings checks
605605
for that staged failure before rendering normal content.
606+
v1.8.241 closes the MIME helper contract gap: aggregate helper behavior is
607+
documented and tested for null, empty, many-match, exactly-one, case-sensitive,
608+
and legacy fragment-wildcard inputs, while constructor stdout logging is
609+
removed.
606610

607611
## 4. Module layout
608612

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SwiftFloris
22

3-
![Version](https://img.shields.io/badge/version-v1.8.240-blue) ![License](https://img.shields.io/badge/license-Apache%202.0-green) ![Platform](https://img.shields.io/badge/platform-Android%208.0+-orange) ![Network](https://img.shields.io/badge/network-none-lightgrey) ![Dictionary imports](https://img.shields.io/badge/dictionary%20imports-local%20files-green)
3+
![Version](https://img.shields.io/badge/version-v1.8.241-blue) ![License](https://img.shields.io/badge/license-Apache%202.0-green) ![Platform](https://img.shields.io/badge/platform-Android%208.0+-orange) ![Network](https://img.shields.io/badge/network-none-lightgrey) ![Dictionary imports](https://img.shields.io/badge/dictionary%20imports-local%20files-green)
44

55
**SwiftFloris** is a privacy-first Android keyboard, forked from FlorisBoard and pushed toward SwiftKey-class multilingual typing without the cloud. It ships under Apache-2.0, holds no `INTERNET` permission, and binds zero accounts.
66

@@ -37,7 +37,7 @@
3737
3838
## Highlights
3939

40-
| Area | What's in v1.8.240 | Privacy posture |
40+
| Area | What's in v1.8.241 | Privacy posture |
4141
|------|-------------------|-----------------|
4242
| **Autocorrect / prediction** | SCOWL 117k English dictionary, SymSpell d1+d2, bigram + trigram next-word, capitalization-aware completions, contraction handling, instant-remember user-dictionary overlay | On-device |
4343
| **Multilingual typing** | Bilingual subtype presets (EN+ES / EN+FR / EN+DE), per-token Latin language identification, top-two straddle guard, sentence-local context scoring, and opt-in remembered keyboard language per app | On-device |
@@ -56,7 +56,7 @@
5656
| **Editor reliability** | Expected-content generation for selection, text commit, composing finalize, and composing-region replacement paths now happens before `InputConnection` batch edits, with try/finally begin/end pairing and focused call-order tests | Local editor state only |
5757
| **Alternative layouts** | Colemak / Dvorak / Workman from the FlorisBoard layout pack, plus selectable honeycomb hex layout with clipped hex keys and hex-aware hit testing (only FOSS Android keyboard shipping this — Typewise vacated the consumer market early 2026; see [docs/HONEYCOMB_LAYOUT.md](docs/HONEYCOMB_LAYOUT.md)) | On-device |
5858
| **AI transparency** | First-run AI/ML explainer plus Settings → About → AI features screen covering next-word, glide, voice, translation, and smart compose; async suggestion work consumes request-scoped privacy snapshots for incognito, no-personalized-learning, offensive-content, and ghost-text sensitivity gates | On-device, no account, no telemetry |
59-
| **CI / build** | No-network gate, repo-hygiene gate, OSV dep scan, Dependabot version review, lint baseline-drift wrapper with no committed app lint baseline, startup crash recovery via the local crash dialog, restore/crash diagnostics routed through project logging with safe fallback copy, settings-search resource/route drift guard, post-hotfix regression coverage for Arabic shaping, Snygg imports, private trace suppression, and locale-scoped n-gram flushes, manual emulator settings smoke, reproducible-build toolchain pins + build-twice APK self-check chained into release publication, Roborazzi visual-regression hard gate with committed theme/Addons baselines, Macrobenchmark trace sections in 6 hot paths, manual benchmark trend-regression report, and compatible dependency freshness through Compose BOM 2026.05.01 / KSP 2.3.9 / Roborazzi 1.63.0 | Audit-friendly |
59+
| **CI / build** | No-network gate, repo-hygiene gate, OSV dep scan, Dependabot version review, lint baseline-drift wrapper with no committed app lint baseline, startup crash recovery via the local crash dialog, restore/crash diagnostics routed through project logging with safe fallback copy, settings-search resource/route drift guard, MIME helper aggregate-contract tests, post-hotfix regression coverage for Arabic shaping, Snygg imports, private trace suppression, and locale-scoped n-gram flushes, manual emulator settings smoke, reproducible-build toolchain pins + build-twice APK self-check chained into release publication, Roborazzi visual-regression hard gate with committed theme/Addons baselines, Macrobenchmark trace sections in 6 hot paths, manual benchmark trend-regression report, and compatible dependency freshness through Compose BOM 2026.05.01 / KSP 2.3.9 / Roborazzi 1.63.0 | Audit-friendly |
6060

6161
## Distribution
6262

@@ -287,6 +287,7 @@ Real device-number collection is tracked in [`docs/BENCHMARKS.md`](docs/BENCHMAR
287287

288288
The full release stream lives in [`CHANGELOG.md`](CHANGELOG.md) and on [GitHub Releases](https://github.com/SysAdminDoc/SwiftFloris/releases).
289289

290+
- **v1.8.241** (2026-06-04) — MIME helper aggregate semantics are now documented and covered, constructor stdout logging is removed, and legacy font wildcard matching is explicit. ([notes](CHANGELOG.md#v1.8.241))
290291
- **v1.8.240** (2026-06-04) — Async preference-store init failures now stage a crash report, unblock the Settings splash wait, and redirect to recovery instead of hanging. ([notes](CHANGELOG.md#v1.8.240))
291292
- **v1.8.239** (2026-06-04) — Editor start/selection content-generation jobs now cancel or supersede stale work before reset, finishInput, or field switches can republish old state. ([notes](CHANGELOG.md#v1.8.239))
292293
- **v1.8.238** (2026-06-04) — Clipboard image/video history tiles now expose localized TalkBack labels with media type, history group, and copied-time context while keeping decorative thumbnail overlays hidden. ([notes](CHANGELOG.md#v1.8.238))
@@ -470,7 +471,7 @@ limitations under the License.
470471

471472
## Status
472473

473-
🚀 **Active development.** Current release: **v1.8.240** (2026-06-04). The SwiftKey account export window closed on **2026-05-31**; local/on-device migration paths remain documented above.
474+
🚀 **Active development.** Current release: **v1.8.241** (2026-06-04). The SwiftKey account export window closed on **2026-05-31**; local/on-device migration paths remain documented above.
474475

475476
---
476477

0 commit comments

Comments
 (0)