Commit graph

454 commits

Author SHA1 Message Date
Joshua Horton
98d2a529be
Merge pull request #15444 from keymanapp/change/web/remove-sourceText-property
change(web): remove .sourceText property from cached context tokens 🚂
2026-01-29 05:41:00 +07:00
Joshua Horton
10d768678c
docs(web): apply doc-comment PR review suggestion
Co-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>
2026-01-29 04:50:25 +07:00
Joshua Horton
c4b8f69216 change(web): remove .sourceText property
Once we enable whitespace fat-fingering, it will be possible for the 'source text' to actually _change_ after an autocorrect yet still be correctable.  `.sourceText` does not reflect this adequately.  What _does_ remain unchanged is the `.sourceRangeKey` property and its value - those provide a better source of stability and identification.

Build-bot: skip build:web
Test-bot: skip
2026-01-22 12:29:15 -06:00
Joshua Horton
a0bd109174 fix(web): do not preserve taillessTrueKeystroke when receiving empty input 2026-01-22 12:24:27 -06:00
Joshua Horton
4f763fba11 change(web): rework suggestion-alignment helper to use tokenization directly 2026-01-22 12:24:26 -06:00
Joshua Horton
ceabe5a041 refactor(web): convert main correction-search method to accept multiple spaces
Build-bot: skip build:web
Test-bot: skip
2026-01-22 12:23:57 -06:00
Joshua Horton
fb347d85f2 Merge branch 'epic/autocorrect' into refactor/web/differentiate-module-types 2026-01-22 10:01:15 -06:00
Joshua Horton
0925ff64ec
Merge pull request #14987 from keymanapp/refactor/web/use-interface-as-search-parent
refactor(web): generalize SearchQuotientSpur parent requirements 🚂
2026-01-22 23:00:03 +07:00
Joshua Horton
fb825ce4a5 Merge branch 'refactor/web/use-interface-as-search-parent' into refactor/web/differentiate-module-types 2026-01-22 09:36:13 -06:00
Joshua Horton
2f4089a318 fix(web): better hasInputs handling for root nodes 2026-01-22 09:35:45 -06:00
Joshua Horton
5d294df1bf Merge branch 'refactor/web/use-interface-as-search-parent' into refactor/web/differentiate-module-types 2026-01-22 09:35:00 -06:00
Joshua Horton
42fcbc390d refactor(web): move unit-testing .hasInputs to standalone, tree-shakable method 2026-01-22 09:21:05 -06:00
Joshua Horton
64791e1277 fix(web): adjust formatting nit re: missing else 2026-01-22 08:40:41 -06:00
Joshua Horton
b0b56e426a
Merge pull request #15405 from keymanapp/refactor/web/local-input-cost-heuristic
refactor(web): refactor local input cost heuristic 🚂
2026-01-22 21:38:14 +07:00
Joshua Horton
2ef4c89215
Merge pull request #15404 from keymanapp/refactor/web/search-result-node-access
refactor(web): make SearchResult's node-path accessible 🚂
2026-01-22 21:38:03 +07:00
Joshua Horton
4ecaf051f3 Merge branch 'fix/web/delete-corrections-flat-cost' into refactor/web/replace-addInput-with-constructor 2026-01-22 08:13:52 -06:00
Joshua Horton
d73f6eec07 change(web): one let -> const 2026-01-22 08:09:42 -06:00
Joshua Horton
69a64dbf02 Merge branch 'epic/autocorrect' into fix/web/delete-corrections-flat-cost 2026-01-22 08:09:04 -06:00
Joshua Horton
c57bd06b57
Merge pull request #15399 from keymanapp/fix/web/prevent-insdel-sub-aliasing
fix(web): prevent insert-delete edit sequences from aliasing as substitution edits 🚂
2026-01-22 21:07:27 +07:00
Joshua Horton
2a8eba9688 Merge branch 'feat/web/search-space-identifiers' into change/web/remove-duplicate-path-filtering 2026-01-21 16:06:27 -06:00
Joshua Horton
0ff6f23564 Merge branch 'epic/autocorrect' into feat/web/search-space-identifiers 2026-01-21 16:04:25 -06:00
Joshua Horton
74edbdc023
Merge pull request #14979 from keymanapp/refactor/web/search-batcher
refactor(web): adds SearchQuotientNode base interface 🚂
2026-01-22 04:57:42 +07:00
Joshua Horton
813beeb988
Merge pull request #15415 from keymanapp/change/web/rename-module-prop-name
change(web): rename .searchSpace property to .searchModule 🚂
2026-01-22 04:57:31 +07:00
Joshua Horton
221ac83edc
Merge pull request #14921 from keymanapp/refactor/web/simple-search-space-reuse
refactor(web): simple reuse of search modules 🚂
2026-01-22 04:57:19 +07:00
Joshua Horton
79ebd76573
Merge pull request #14920 from keymanapp/refactor/web/relocate-search-space
refactor(web): relocate SearchSpace definition as SearchQuotientSpur, tests to own code file 🚂
2026-01-22 04:57:09 +07:00
Joshua Horton
6067807ab8
Merge pull request #15161 from keymanapp/docs/web/add-search-space-doc
docs(web): start internal doc on SearchSpace design, requirements, and analysis 🚂
2026-01-22 04:56:58 +07:00
Joshua Horton
20d7855eb8
Merge pull request #14916 from keymanapp/refactor/web/correction-heuristic-and-thresholding
refactor(web): rework correction heuristic and thresholding toward multi-tokenization support 🚂
2026-01-22 04:56:46 +07:00
Joshua Horton
aaaab2eafc docs(web): clarify keystroke non-independence 2026-01-20 14:50:39 -06:00
Joshua Horton
4807e35df8 docs(web): fix outdated doc-comments, typos per review 2026-01-16 08:42:00 -06:00
Joshua Horton
a281711ebf refactor(web): create separate types for search graph root notes 2026-01-14 15:21:32 -06:00
Joshua Horton
5a17050bff change(web): improve nil-input case handling 2026-01-09 14:50:25 -06:00
Joshua Horton
348e876907 refactor(web): differentiate search-space module types
This PR converts SearchQuotientSpur into an abstract base class with specialized forms for different cases.  Two implementations are provided:
- SearchQuotientRoot - for the root node of the search
- LegacyQuotientSpur - for modeling existing behavior before swapping to our target design and model

Build-bot: skip build:web
Test-bot: skip
2026-01-09 11:32:45 -06:00
Joshua Horton
3a56e23753 refactor(web): generalize SearchQuotientSpur parent requirements
As an upcoming goal is to introduce a new SearchQuotientNode type that will assist with context-caching across multiple tokenizaitons, it is wise to generalize SearchQuotientSpur and functions utilizing it to accept any SearchQuotientNode-implementing type as its parent.

Build-bot: skip build:web
Test-bot: skip
2026-01-09 11:31:08 -06:00
Joshua Horton
445cca21c4 refactor(web): refactor local input cost heuristic
These changes were previously part of #14987 and have been extracted for ease of review.

Build-bot: skip build:web
Test-bot: skip
2026-01-09 11:23:12 -06:00
Joshua Horton
72ee0fe576 refactor(web): make SearchResult's node-path accessible
This was formerly part of #14987 and has been extracted for ease of review.

Build-bot: skip build:web
Test-bot: skip
2026-01-09 11:18:28 -06:00
Joshua Horton
f16542fce2 refactor(web): replace SearchQuotientSpur.addInput() with extended constructor
This has been factorized out of #14987 for ease of review.

Build-bot: skip build:web
Test-bot: skip
2026-01-09 11:17:57 -06:00
Joshua Horton
2a04d35f1f fix(web): deletions should have flat cost
That is, corrections that eliminate user keystrokes from consideration should have a flat cost regardless of the keystroke's original transform distribution.  Neither deleteLeft nor insert effects should have any impact.

Fixes: #15325

Build-bot: skip build:web
Test-bot: skip
2026-01-09 11:12:46 -06:00
Joshua Horton
bfad3ef074 fix(web): prevent insert-delete edit sequences from aliasing as substitution edits
Build-bot: skip build:web
Test-bot: skip
2026-01-09 11:03:42 -06:00
Joshua Horton
4f98dbff7f change(web): avoid main-code internal-hash imports 2026-01-09 10:59:38 -06:00
Joshua Horton
cf862439d5 change(web): track SearchNode last edit-edge type 2026-01-09 10:59:38 -06:00
Joshua Horton
8a165d24b4 change(web): remove duplicate correction-search path filtering
Upon investigation into the code being removed, this mostly triggered whenever an empty transform appeared in the input - during a context reset, at initialization, or when a deadkey is typed.  (Deadkeys aren't sent to the pred-text engine.)  This is generally not a common case within the engine, and there exists other filtering that helps prevent duplicating search results.

Suppose a token that begins tagged with an empty transform.  When the search performs an 'insertion' to better lookup words down a lexical path, the 'insertion' is identical whether before or after an empty transform.  Similarly, insertions after a deletion appear no different than substitutions (or the same insertion before the deletion, then the deletion itself).

The code likely didn't gain us much, as it likely carried some performance overhead - it built a large object that required memory and lookup time that involved constructing and processing strings for hashing.

Build-bot: skip build:web
Test-bot: skip
2026-01-09 10:59:38 -06:00
Joshua Horton
db77619672 docs(web): fix SearchNode.setupSubsetProcessing param doc comments 2026-01-09 10:57:29 -06:00
Joshua Horton
32de0293c5 fix(web): post-rebase patchup 2026-01-09 10:57:27 -06:00
Joshua Horton
92d84b1b91 change(web): use search-space ID to find matching tokenization, preservation transform 2026-01-09 10:56:33 -06:00
Joshua Horton
fa828d4710 feat(web): add correction source search-space identification
When we start supporting more than one "space" for correction-searches, we may need to know which "space" (tokenization) a suggestion arose from.  This way, we have a path forward for applying tokenization-dependent behaviors that may be required.

Build-bot: skip build:web
Test-bot: skip
2026-01-09 10:55:47 -06:00
Joshua Horton
ce3f90dd81 change(web): do not export SPACE_ID_SEED 2026-01-09 10:54:58 -06:00
Joshua Horton
af61a56db9 docs(web): fix doc-comment word omisson per review 2026-01-09 10:54:58 -06:00
Joshua Horton
d0469ff3f0 refactor(web): adds SearchQuotientNode interface
This new interface is being added in preparation for efficient multi-tokenization correction-search.  SearchQuotientSpur has been modified to implement it, and a new type (SearchQuotientNodeImpl) will be added in the near future as an additional implementing type.

Build-bot: skip build:web
Test-bot: skip
2026-01-09 10:54:55 -06:00
Joshua Horton
340406cdfc change(web): rename .searchSpace property to .searchModule
Build-bot: skip build:web
Test-bot: skip
2026-01-09 10:24:29 -06:00
Joshua Horton
4b201870e9 refactor(web): implement simple search-quotient-spur reuse
This changes SearchQuotientSpur to construct new instances whenever the path is extended, treating SearchQuotientSpur as an immutable portion of the search graph that may be extended by new input, creating new instances of SearchQuotientSpur.

This, in turn, removes the need to clone SearchQuotientSpur instances when new input is received for an incoming token; the original instance's represention will remain unchanged and may also be reused by a new instance extending the graph for the newly-received input.

Relates-to: #14445

Build-bot: skip build:web
Test-bot: skip
2026-01-09 10:06:56 -06:00