diff --git a/HISTORY.md b/HISTORY.md
index 56e8f96c954..e22d0e994b0 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -1,5 +1,30 @@
# Keyman Version History
+## 17.0.186 alpha 2023-10-04
+
+* feat(developer): show an INFO message when warnings have failed a build (#9652)
+* chore(developer): reduce duplicate words warning to hint (#9653)
+* feat(developer): issue hint if package includes keyboard source files (#9658)
+* chore(developer): switch on code coverage reporting for kmc (#9662)
+* fix(core): clean cached ICU in core (#9668)
+* feat(developer): warn if .kps includes a .js which is not touch-capable (#9667)
+
+## 17.0.185 alpha 2023-10-03
+
+* chore(web): Add non-printing characters to the OSK (#9547)
+* feat(developer): support `store(&version) '17.0'` (#9656)
+* chore(developer): add test for `checkFilenameConventions == false` or unset (#9661)
+* feat(developer): ldml scan codes support (#9615)
+
+## 17.0.184 alpha 2023-10-02
+
+* fix(web): fixes toolbar refocus timing after a keyboard change (#9618)
+
+## 17.0.183 alpha 2023-09-29
+
+* feat(web): browser-KMW support for default subkeys (#9496)
+* refactor(linux): Add more tests for `keymanutil.c` ️ (#9595)
+
## 17.0.182 alpha 2023-09-28
* chore(web): builds that output to web/build/publish should also clean it (#9613)
diff --git a/VERSION.md b/VERSION.md
index 8bf382e6d5e..8eb52f8484b 100644
--- a/VERSION.md
+++ b/VERSION.md
@@ -1 +1 @@
-17.0.183
\ No newline at end of file
+17.0.187
\ No newline at end of file
diff --git a/android/Tests/KeyboardHarness/app/src/main/assets/keyboardharness.kmp b/android/Tests/KeyboardHarness/app/src/main/assets/keyboardharness.kmp
index 3a8f1cb624c..30a4f87663b 100644
Binary files a/android/Tests/KeyboardHarness/app/src/main/assets/keyboardharness.kmp and b/android/Tests/KeyboardHarness/app/src/main/assets/keyboardharness.kmp differ
diff --git a/android/Tests/KeyboardHarness/app/src/main/assets/test9469.kmp b/android/Tests/KeyboardHarness/app/src/main/assets/test9469.kmp
index 100cc1d70b6..8390d5dee31 100644
Binary files a/android/Tests/KeyboardHarness/app/src/main/assets/test9469.kmp and b/android/Tests/KeyboardHarness/app/src/main/assets/test9469.kmp differ
diff --git a/android/Tests/KeyboardHarness/readme.md b/android/Tests/KeyboardHarness/readme.md
index 1e00343bf55..898d9926382 100644
--- a/android/Tests/KeyboardHarness/readme.md
+++ b/android/Tests/KeyboardHarness/readme.md
@@ -10,6 +10,8 @@ and consists of these engineering keyboards:
* web/testing/chirality/chirality.js
* web/testing/platform/platformtest.js
+test9469.kmp is another engineering keyboard to show non-printing characters on the OSK.
+
### Compiling From Command Line
1. Launch a command prompt to the `android/` folder
2. Compile KMEA. This will build and copy `keyman-engine.aar` to the Samples and Test projects
diff --git a/common/include/km_types.h b/common/include/km_types.h
index d81f2672384..aa7fb2e5182 100644
--- a/common/include/km_types.h
+++ b/common/include/km_types.h
@@ -28,14 +28,14 @@ typedef uint8_t KMX_BYTE;
typedef uint16_t KMX_WORD;
#if defined(__cplusplus)
-typedef char16_t km_kbp_cp;
-typedef char32_t km_kbp_usv;
+typedef char16_t km_core_cp;
+typedef char32_t km_core_usv;
#else
-typedef uint16_t km_kbp_cp; // code point
-typedef uint32_t km_kbp_usv; // Unicode Scalar Value
+typedef uint16_t km_core_cp; // code point
+typedef uint32_t km_core_usv; // Unicode Scalar Value
#endif
-typedef km_kbp_cp KMX_WCHAR; // wc, 16-bit UNICODE character
+typedef km_core_cp KMX_WCHAR; // wc, 16-bit UNICODE character
typedef KMX_WCHAR* PKMX_WCHAR;
typedef char KMX_CHAR;
@@ -60,7 +60,7 @@ typedef KMX_DWORD* PKMX_DWORD;
#ifdef USE_CHAR16_T
#define lpuch(x) u ## x
-typedef km_kbp_cp KMX_UCHAR;
+typedef km_core_cp KMX_UCHAR;
#else
#define lpuch(x) L ## x
typedef wchar_t KMX_UCHAR;
diff --git a/common/include/kmx_file.h b/common/include/kmx_file.h
index b689ba685ad..243e5e0d638 100644
--- a/common/include/kmx_file.h
+++ b/common/include/kmx_file.h
@@ -68,9 +68,10 @@ namespace kmx {
#define VERSION_150 0x00000F00
#define VERSION_160 0x00001000
+#define VERSION_170 0x00001100
#define VERSION_MIN VERSION_50
-#define VERSION_MAX VERSION_160
+#define VERSION_MAX VERSION_170
//
// Backspace types
diff --git a/common/include/test_assert.h b/common/include/test_assert.h
index 655074ba8b2..8cc0f3b624d 100644
--- a/common/include/test_assert.h
+++ b/common/include/test_assert.h
@@ -30,7 +30,7 @@
#endif
#define try_status(expr) { \
auto __s = (expr); \
- if (__s != KM_KBP_STATUS_OK) { \
+ if (__s != KM_CORE_STATUS_OK) { \
_assert_failed(__s, u ## #expr); \
} \
}
diff --git a/common/models/templates/package.json b/common/models/templates/package.json
index 0bec0fc88fa..33f89cca706 100644
--- a/common/models/templates/package.json
+++ b/common/models/templates/package.json
@@ -21,9 +21,7 @@
"exports": {
".": "./build/obj/index.js",
"./lib": {
- "types": "./build/lib/index.d.ts",
- "import": "./build/lib/index.mjs",
- "require": "./build/lib/index.cjs"
+ "types": "./build/lib/index.d.ts"
},
"./obj/*.js": "./build/obj/*.js"
},
diff --git a/common/models/wordbreakers/package.json b/common/models/wordbreakers/package.json
index bd8d0157fbd..7a03dc9e8fb 100644
--- a/common/models/wordbreakers/package.json
+++ b/common/models/wordbreakers/package.json
@@ -19,8 +19,7 @@
"exports": {
".": "./build/obj/index.js",
"./lib": {
- "import": "./build/lib/index.mjs",
- "require": "./build/lib/index.cjs"
+ "types": "./build/lib/index.d.ts"
},
"./obj/*.js": "./build/obj/*.js"
},
diff --git a/common/predictive-text/testing/index.html b/common/predictive-text/testing/index.html
deleted file mode 100644
index 8a00094b701..00000000000
--- a/common/predictive-text/testing/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- LMLayer Testing
-
-
-
- Language-Modeling Layer module testing
- Designed as a baseline functionality test we can run against various platforms as a first-stage canary of sorts.
- A prototype for directly embedding a WebWorker's code within a "master" script.
- A prototype for two-stage compilation of a master/slave main-script/WebWorker pair.
- A prototype for sending code over to a WebWorker via a Blob URI reference.
-
-
diff --git a/common/predictive-text/testing/one-stage-embedded-webworker/.gitignore b/common/predictive-text/testing/one-stage-embedded-webworker/.gitignore
deleted file mode 100644
index df6361deda9..00000000000
--- a/common/predictive-text/testing/one-stage-embedded-webworker/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-main.js
-main.js.map
\ No newline at end of file
diff --git a/common/predictive-text/testing/one-stage-embedded-webworker/build.sh b/common/predictive-text/testing/one-stage-embedded-webworker/build.sh
deleted file mode 100755
index f1f727b8c03..00000000000
--- a/common/predictive-text/testing/one-stage-embedded-webworker/build.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env bash
-#
-# Compiles the Language Modeling Layer for common use in predictive text and autocorrective applications.
-# Designed for optimal compatibility with the Keyman Suite.
-#
-
-## START STANDARD BUILD SCRIPT INCLUDE
-# adjust relative paths as necessary
-THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
-. "${THIS_SCRIPT%/*}/../../../../resources/build/build-utils.sh"
-. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
-## END STANDARD BUILD SCRIPT INCLUDE
-
-display_usage ( ) {
- echo "build.sh [-clean]"
- echo
- echo " -clean to erase pre-existing build products before a re-build"
-}
-
-SOURCE="testing/one-stage-embedded-webworker"
-
-echo "Node.js + dependencies check"
-npm install --no-optional
-
-if [ $? -ne 0 ]; then
- builder_die "Build environment setup error detected! Please ensure Node.js is installed!"
-fi
-
-# A nice, extensible method for -clean operations. Add to this as necessary.
-clean ( ) {
- rm -rf "./*.js"
- if [ $? -ne 0 ]; then
- builder_die "Failed to erase the prior build."
- fi
-}
-
-# Process command-line arguments
-while [[ $# -gt 0 ]] ; do
- key="$1"
- case $key in
- -clean)
- clean
- ;;
- esac
- shift # past the processed argument
-done
-
-npm run tsc -- -p $SOURCE/tsconfig.json
-
-if [ $? -ne 0 ]; then
- builder_die "Compilation failed."
-fi
-
-echo "Typescript compilation successful."
\ No newline at end of file
diff --git a/common/predictive-text/testing/one-stage-embedded-webworker/index.html b/common/predictive-text/testing/one-stage-embedded-webworker/index.html
deleted file mode 100644
index 244f4aa2833..00000000000
--- a/common/predictive-text/testing/one-stage-embedded-webworker/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Embedded WebWorker test
-
-
-
-
-
-
-
-
-
- LM Layer Testing - One-Stage Embedded WebWorkers
- This page serves as a prototype for embedding a WebWorker's code within its "master" script
- across the TypeScript transpilation boundary.
-
-
-
-
-
-
-
diff --git a/common/predictive-text/testing/one-stage-embedded-webworker/main.ts b/common/predictive-text/testing/one-stage-embedded-webworker/main.ts
deleted file mode 100644
index 5d15ae88b58..00000000000
--- a/common/predictive-text/testing/one-stage-embedded-webworker/main.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-// Useful for passing class constructors
-type Workable = {
- new (...args: any[]): T;
- // Requires a static implementation.
- onmessage(e: any): void;
-};
-
-class A {
- a(x: number, y: number):number {
- return x + y;
- }
-}
-
-var WorkerGlobals = {
- counter: 0,
- a: A
-}
-
-class WorkerCore {
- static WorkerGlobals = WorkerGlobals;
- //static counter: number;
-
- static onmessage(e: any) {
- WorkerGlobals.counter++;
-
- console.log("Message received from main page: ", e.data);
-
- // Forces TypeScript to interpret this line as plain JavaScript, as it uses a non-Worker definition.
- // @ts-ignore
- postMessage(WorkerGlobals.counter);
- }
-}
-
-function createWorkerFromClasses(globals: object, fn: Workable