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
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
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
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.
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.
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
changed the title
S1.25: adopt io.github.baodeep.hackerskeyboard identity
S1.25: adopt com.baodeep.hackerskeyboard identity
Aug 13, 2026
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 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.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
com.baodeep.hackerskeyboardas both permanent v2applicationIdand code namespace, backed by the owner-controlledbaodeep.comdomainorg.pocketworkstation.DICTand all 66 preference keysHacker's Keyboard v2in the launcher and system IME listUser 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
org.pocketworkstation.pckeyboard; no fork patch was usedValidation
prek run --all-filespython3 scripts/verify-application-identity.pypython3 scripts/verify-keyboard-xml-semantics.pygit diff --checkLocal Gradle/device execution is unavailable because this host lacks the required JDK 17 and Android SDK. The pinned
ubuntu-latestCI jobs are authoritative for those checks.Review gates
Final reviewed commit SHA:
b3c5077fb9caf7f797f4c7adca4973976fb78efev2Codex review: no unresolved actionable findings. Full review and APK evidence.
Installable debug APK: GitHub Actions artifact, package
com.baodeep.hackerskeyboard, display nameHacker's Keyboard v2, 3,591,182 bytes, SHA-256f093017de656cf0456bd73e29ec9ccc053d90512248f5a7d030fbdcadfa4dbeb. The release APK in the same archive is intentionally unsigned.Claude or another external model was not invoked.
Closes #26
Closes #44