Skip to content

Release 0.1.1#40

Merged
mibrahimdev merged 11 commits into
mainfrom
develop
Jul 3, 2026
Merged

Release 0.1.1#40
mibrahimdev merged 11 commits into
mainfrom
develop

Conversation

@mibrahimdev

@mibrahimdev mibrahimdev commented Jul 2, 2026

Copy link
Copy Markdown
Owner

Promotes develop to main for the 0.1.1 release.

What ships

Versioned as a patch by maintainer decision — this is framed as the locale-leak fix release.

After merge: tag v0.1.1 on main to stage to Maven Central per docs/RELEASING.md.

🤖 Generated with Claude Code

mibrahimdev and others added 11 commits June 17, 2026 21:17
Establish the two-trunk flow: dev is the development integration branch,
main stays the release/stable trunk. The build+test gate already runs on
every PR (so PRs into dev are gated); add dev to the push trigger so direct
pushes to the trunk are built too. Pages deploy (pages.yml) and the
tag-driven Maven Central publish stay pinned to main — releases cut from main.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The development trunk was renamed dev → develop (now the GitHub default
branch). The earlier commit wired the build+test push trigger to a now-dead
`dev` ref; correct it to `develop` so direct pushes to the trunk are gated.
Pages deploy and the tag-driven publish stay on main.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ci: point the push gate at develop after dev → develop rename
SharinganExport.countsLine() hardcoded three `count { it is X }` calls and a
literal "HTTP h · MQTT m · BLE b" template, so a fourth protocol would be
silently omitted from the session export header — while NotificationContent
already iterated Protocol.entries. Extract one internal protocolCountsLine()
helper next to the Protocol registry (EventFilter.kt) and route both callers
through it. Output is byte-for-byte identical for the three current protocols
(SharinganExportTest / NotificationContentTest stay green); a new protocol now
appears in the export header automatically.

TDD: EventFilterTest pins the format and asserts one segment per
Protocol.entries (red -> green).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…iptor

Completes the descriptor as the single home for per-protocol knowledge. The
tab-bar icon and the search-field placeholder were the last two per-protocol
facts resolved by `when (protocol)` blocks inside HomeScreen; lift them to
abstract tabIcon / searchPlaceholder members on ProtocolDescriptor, implemented
by each descriptor, and collapse the two HomeScreen `when`s to
descriptorOf(protocol).tabIcon / .searchPlaceholder. Adding a protocol now
touches one place and the compiler forces both members to be supplied.
Internal-only; no public API or noop change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ptor

Complete the Protocol Descriptor as the single home for per-protocol knowledge
Opening the Sharingan logger from a host that uses per-app locales
(e.g. AppCompat set to Arabic/RTL) rendered the logger in an RTL frame
and, worse, permanently corrupted the host: after closing the logger the
host was stuck in English text with RTL layout (issue #38).

Root cause: SharinganActivity is a plain ComponentActivity that neither
pins its own locale nor guards the process-global one. On API 33+ the
framework applied the host's per-app locale (ar -> RTL) to the logger,
and the logger's config handling flipped the process-global
Locale/LocaleList default to English, which leaked back to the host.

The logger is a locale-neutral surface: always English + LTR, and it must
never read or mutate the host's locale. Two-layer fix:

- Activity: attachBaseContext pins an en/LTR Configuration via the
  non-mutating createConfigurationContext (never resources.updateConfiguration).
- Compose: the stateless SharinganScreenContent forces
  LocalLayoutDirection = Ltr around its whole body, so the frame is LTR on
  every platform (including iOS) and in Studio previews.

The global-locale guard was needed: an instrumented test proved that
createConfigurationContext(en) resets LocaleList.getDefault() to English.
SharinganActivity now snapshots the host's LocaleList in attachBaseContext
and restores it (right after, and again in onDestroy), leaving the host's
locale untouched.

Verified red->green on an API 34 emulator with a new instrumented test that
pins the process to Arabic, opens/closes the logger, and asserts the logger
is LTR while open and every process-global JVM locale default is still
Arabic after. The test is @SdkSuppress(minSdkVersion = 33) since it drives
the API 33+ LocaleManager.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The locale-leak regression (LoggerLocaleLeakTest) and the other connected
suites (:sharingan UI tests, CaptureNotificationE2eTest) previously never
ran in CI — build.yml only covered JVM and iOS unit tests, so the issue-#38
fix was only verified by manual emulator runs. Add an `android` job
(reactivecircus/android-emulator-runner, API 34, KVM-accelerated ubuntu)
that runs both modules' connectedDebugAndroidTest and uploads reports on
failure, and correct the LoggerLocaleLeakTest KDoc that wrongly claimed CI
already ran emulators.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(android): isolate logger locale so it can't corrupt the host app
Locale-leak fix (#38) plus the completed ProtocolDescriptor feature (#37)
ship together, so this is a minor bump per semver rather than a patch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Maintainer call: this release is framed as the locale-leak fix release,
so it takes the next patch number rather than a minor bump.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mibrahimdev mibrahimdev changed the title Release 0.2.0 Release 0.1.1 Jul 2, 2026
@mibrahimdev mibrahimdev merged commit 8ff393e into main Jul 3, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant