Skip to content

S1.25: adopt com.baodeep.hackerskeyboard identity - #46

Merged
adeepn merged 6 commits into
v2from
agent/s1-25-application-identity
Aug 13, 2026
Merged

S1.25: adopt com.baodeep.hackerskeyboard identity#46
adeepn merged 6 commits into
v2from
agent/s1-25-application-identity

Conversation

@adeepn

@adeepn adeepn commented Aug 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • adopt com.baodeep.hackerskeyboard as both permanent v2 applicationId and code namespace, backed by the owner-controlled baodeep.com domain
  • move Java/instrumentation packages, XML custom-view references, private intent actions, lint baseline paths, and JNI registration to the new identity
  • preserve the legacy external dictionary discovery action org.pocketworkstation.DICT and all 66 preference keys
  • expose the new installation as Hacker's Keyboard v2 in the launcher and system IME list
  • add source, merged-APK, API 24, and API 36 identity checks
  • record coexistence, settings, signing, and rollback consequences in ADR-0002

User impact

v2 installs as a separate application beside historical Hacker's Keyboard instead of being treated as an incompatible update to org.pocketworkstation.pckeyboard. Android still requires the user to enable/select the new IME. Private v1 settings are not automatically copied across application IDs.

CI debug APKs remain fresh-install artifacts because GitHub-hosted runners use ephemeral debug certificates. Stable owner-controlled release signing is explicitly tracked in #45; this PR contains no key or signing secret.

Compatibility and provenance

  • existing AOSP/Google/author notices are preserved and mechanically changed legacy files carry the v2 modification notice
  • no external source code was imported
  • canonical upstream has no applicable open/closed identity-migration issue or PR
  • freshly fetched max-pulya, crab182, and hongkongphoooey tips all retain org.pocketworkstation.pckeyboard; no fork patch was used
  • legacy Hacker's Keyboard and AnySoftKeyboard dictionary contracts remain unchanged

Validation

  • prek run --all-files
  • python3 scripts/verify-application-identity.py
  • python3 scripts/verify-keyboard-xml-semantics.py
  • shell syntax checks for APK/device verification scripts
  • git diff --check
  • debug/release APK build and merged-manifest identity check
  • Android lint, wrapper validation, and CodeQL
  • application and JNI smoke on Android 7 / API 24
  • application and JNI smoke on Android 16 / API 36
  • inspect final debug APK package, label, ABI contents, size, and digest
  • manual install and visual smoke on OnePlus 13 / Android 16 / OxygenOS 16.0.9; discovered gap tracked separately in S2.19 — Remove the persistent one-row gap above the keyboard #47

Local Gradle/device execution is unavailable because this host lacks the required JDK 17 and Android SDK. The pinned ubuntu-latest CI jobs are authoritative for those checks.

Review gates

Final reviewed commit SHA: b3c5077fb9caf7f797f4c7adca4973976fb78efe

  • all required CI checks pass on the final SHA
  • Codex reviewed the final diff; actionable findings are resolved
  • owner review and approval
  • all conversations are resolved and the branch is current with v2

Codex review: no unresolved actionable findings. Full review and APK evidence.

Installable debug APK: GitHub Actions artifact, package com.baodeep.hackerskeyboard, display name Hacker's Keyboard v2, 3,591,182 bytes, SHA-256 f093017de656cf0456bd73e29ec9ccc053d90512248f5a7d030fbdcadfa4dbeb. The release APK in the same archive is intentionally unsigned.

Claude or another external model was not invoked.

Closes #26
Closes #44

@adeepn

adeepn commented Aug 13, 2026

Copy link
Copy Markdown
Owner Author

Codex review — final SHA 9d7339dab03d7335d37aa5b4567f1a7eb4353f45

No actionable findings.

Reviewed the complete diff against v2, including the mechanical Java/XML/lint/JNI namespace migration, Android manifest placeholders and private actions, legacy dictionary exception, preference-key snapshot, APK manifest guard, ADR-0002, fork/upstream research, and licensing notices.

Key conclusions:

  • applicationId, Android namespace, Java/XML components and JNI registration consistently use io.github.baodeep.hackerskeyboard;
  • no obsolete org.pocketworkstation.pckeyboard application identity remains in Android inputs;
  • org.pocketworkstation.DICT remains exactly once as the intentional external compatibility contract, and all 66 preference keys are unchanged;
  • existing copyright/license notices are preserved, moved/modified legacy files carry a v2 modification notice, and new files use Apache-2.0 SPDX identifiers;
  • no external/fork code, signing material, secret, or Claude invocation is involved.

Validation on the final SHA:

  • all GitHub Actions checks pass: prek, debug/release build, APK identity/ABI verification, lint, wrapper validation, CodeQL, dependency submission;
  • application + JNI smoke passes with two tests on Android 7 / API 24 and Android 16 / API 36;
  • both merged APK manifests report io.github.baodeep.hackerskeyboard;
  • debug and unsigned release APKs contain libjni_pckeyboard.so for armeabi-v7a, arm64-v8a, x86, and x86_64;
  • debug APK: 3,591,310 bytes; SHA-256 08a8ff2b601631bcd4c30fe888421975129e9f191c735cb90e94cdb9e9b9cfc1;
  • final APK artifact, archive SHA-256 76fe4269777a9b51700a9d3c97e0bd9f0cc17a200f6bdeafa840189c320fd08b.

The APK now has a distinct install identity and can coexist with historical v1. Stable cross-release update signing remains correctly separated into #45; the release APK in this PR is intentionally unsigned.

@adeepn adeepn changed the title S1.25: adopt io.github.baodeep.hackerskeyboard identity S1.25: adopt com.baodeep.hackerskeyboard identity Aug 13, 2026
@adeepn

adeepn commented Aug 13, 2026

Copy link
Copy Markdown
Owner Author

Final Codex review — 00d1c1679656fef60a1bfc64ca9b69a320c68936

Reviewed the complete PR diff against v2, including the Android/Java/XML/JNI
rename, manifest actions, compatibility exceptions, tests, CI integration,
licensing notices, and ADR/docs.

One review finding was fixed before this final pass: the source identity guard
now rejects both the historical org.pocketworkstation.pckeyboard identity and
the superseded io.github.baodeep.hackerskeyboard candidate. The intentional
external dictionary action org.pocketworkstation.DICT remains unchanged.

Final result: no unresolved actionable findings.

Evidence:

  • local prek run --all-files, identity guard, XML semantic guard, shell syntax,
    and git diff --check pass;
  • all GitHub checks pass on the reviewed SHA, including build, lint, CodeQL,
    API 24 smoke, and API 36 smoke;
  • CI verified com.baodeep.hackerskeyboard in both debug and unsigned release
    APK manifests;
  • all 66 preference keys are unchanged;
  • JNI dictionary lookup passed on API 24 and API 36;
  • debug APK contains libjni_pckeyboard.so for arm64-v8a, armeabi-v7a, x86,
    and x86_64;
  • branch is current with v2, worktree is clean, and GitHub reports the PR
    mergeable/clean.

Final artifact: APK archive

  • debug APK: 3,591,166 bytes; SHA-256
    abb649fd22f24461ed9bd741e2a13cb4d1363ea3d4556b9e59f9dca4a8d6728c;
  • unsigned release APK: 3,213,618 bytes; SHA-256
    cd2d8ec849e715002675c8d43bce7176cdf344534e0b2d41b9d9f67ed73216b0.

The release APK is intentionally unsigned; stable signing remains tracked in
#45. Claude or another external model was not invoked.

@adeepn

adeepn commented Aug 13, 2026

Copy link
Copy Markdown
Owner Author

Final Codex review — b3c5077fb9caf7f797f4c7adca4973976fb78efe

Reviewed the complete PR diff against v2, including application identity,
Java/XML/JNI migration, manifest actions, dictionary compatibility, preference
keys, licensing notices, documentation, and the new user-visible v2 label.

The display-name follow-up now exposes Hacker's Keyboard v2 as the application
and registered IME label in both default and Russian resources. The launcher
activity inherits the application label. Instrumentation asserts the application
label, launcher title, and IME label on API 24 and API 36.

During CI follow-up, Android lint reported a redundant activity label. It was
fixed by inheriting the identical application label; the complete CI suite was
then rerun successfully.

Final result: no unresolved actionable findings.

Evidence:

  • local prek run --all-files, identity/XML guards, resource parsing, and
    git diff --check pass;
  • all GitHub checks pass on the reviewed SHA: build, lint, CodeQL, API 24 smoke,
    and API 36 smoke;
  • both APK manifests contain com.baodeep.hackerskeyboard;
  • all 66 preference keys and org.pocketworkstation.DICT remain unchanged;
  • JNI dictionary lookup and the exact Hacker's Keyboard v2 labels pass on
    API 24 and API 36;
  • branch is current with v2, worktree is clean, and GitHub reports the PR
    mergeable/clean.

Final artifact: APK archive

  • debug APK: 3,591,182 bytes; SHA-256
    f093017de656cf0456bd73e29ec9ccc053d90512248f5a7d030fbdcadfa4dbeb;
  • unsigned release APK: 3,213,630 bytes; SHA-256
    2e5041f8fec5575546deb241a6b1c550408f6c3535a33487501974da11fb1478.

The Android old-target warning is expected while Stage 1 intentionally retains
targetSdk 26; its compatibility migration remains Stage 2 work. The release
APK is intentionally unsigned, with stable signing tracked in #45. Claude or
another external model was not invoked.

@adeepn
adeepn merged commit 455ec69 into v2 Aug 13, 2026
12 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.

S1.25 implementation — migrate v2 to com.baodeep.hackerskeyboard S1.25 — Select v2 application identity and migration policy

1 participant