---
source_path: "changes/index.md"
canonical_url: "https://doc.sensory.com/tnl/7.9/changes/"
---

# Version 7 changes (current)

TrulyNatural version 7 introduced support for STT and is fully backwards compatible
with [version 6](https://doc.sensory.com/tnl/7.9/changes/version-6.md#v6-changes) models and code.

This library uses [semantic versioning][semver].

<!--
Duplicate this template after renaming the previous Unreleased section
to a specific release. Timestamp it with YYYY-MM-DD.

When carrying changelog entries forward into a new release section,
update any version-pinned URLs to match the new release. The 7.8.0
"Added" entry below references `…/tnl/7.8/llms.txt` (and the rest of
the agent-docs bundle) on purpose: the URLs document the version that
introduced the feature. New release sections that reference these
artifacts should pin to their own release (e.g. `…/tnl/7.9/llms.txt`)
rather than copying the 7.8 URLs verbatim. (Tracked as agent-8.)

## 7.m.p (2026-)
- **Added**
    - Level one
        + Level two
- **Changed**
    -
- **Deprecated**
    -
- **Removed**
    -
- **Fixed**
    -
- **Security**
    -
-->

## 7.9.0 (2026-08-08)
- **Added**
    - Models with support for [grammar-import-path](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#grammar-import-path):
        + _tpl-spot-concurrent-1.6.0.snsr_
        + _tpl-spot-debug-1.6.0.snsr_
        + _tpl-spot-select-1.6.0.snsr_
        + _tpl-spot-sequential-1.6.0.snsr_
        + _tpl-spot-vad-3.14.0.snsr_
        + _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.29.0.snsr_
        + _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.24.0.snsr_
        + _(TrulyNatural only)_ _tpl-vad-lvcsr-3.18.0.snsr_
    - [spot-voicegenie-enUS-6.6.0-m.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#spot-voicegenie-enUS) with
      support for the [confidence-score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#confidence-score) result.
    - _(TrulyNatural only)_ [lvcsr-build-enUS-14.2.0-5MB.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#lvcsr-build-enUS)
      with improved accuracy, and in-grammar acoustic confidence scores.
    - _(STT only)_ Grammar-based recognition with [grammar-stream](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#grammar-stream), including
      runtime and in-grammar classes,
      [`<dictation/>`](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-special) hand-off, and
      [`<unknown/>`](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-special) wildcard support.
    - _(STT only)_ [stt-enUS-general-medium-2.4.5-pnc.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#stt-enUS-general-medium)
      with support for [grammar-stream](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#grammar-stream).
    - _(TrulyNatural only)_ _(STT only)_ Grammar-based recognition also accepts [BNF+EM v2.1
      grammars](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-bnfplus) (auto-detected by a `#BNF+EM` header) for the
      supported subset, easing migration from Cerence-style grammars.
    - _(TrulyNatural only)_ _(STT only)_ Grammar-based recognition also accepts [W3C SRGS 1.0 ABNF
      grammars](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-srgs) (auto-detected by an `#ABNF` header) for the
      supported subset, easing migration from SRGS ABNF grammars.
    - _(TrulyNatural only)_ _(STT only)_ Native grammars accept a bounded-repeat postfix quantifier,
      `x{m,n}` (with `x{m}`, `x{m,}`, and `x{,n}` variants), for repeating a
      symbol or group a specific number of times. See
      [grammar syntax](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax).
    - _(TrulyNatural only)_ _(STT only)_ Native grammars accept a group weight suffix, `( ... )/w`, which
      attaches a weight to a whole group; on an alternative branch it biases the
      recognizer without changing which utterances match. See
      [grammar syntax](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax).
    - _(TrulyNatural only)_ _(STT only)_ Native grammars accept the `<void/>` [special
      symbol](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-special): an unmatchable alternative that no input can
      traverse, useful as a placeholder branch. It is the native equivalent of
      BNF+EM `<VOID>` and SRGS `$VOID`. See [grammar syntax](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-special).
    - _(TrulyNatural only)_ _(STT only)_ A grammar rule referenced with the `~` sigil is compiled into an
      in-grammar recognition [class](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax-class), so common classes
      can be defined directly in the grammar text without a separate
      [grammar-stream](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#grammar-stream). The same rule referenced with `$` is still inlined. An
      in-grammar definition is an overridable default: an external stream still
      takes precedence, and existing grammars are unaffected. See
      [grammar syntax](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax-class).
    - _(TrulyNatural only)_ _(STT only)_ Native grammars can be split across files and share rules with
      `import`, `from ... import`, and `export` directives. `import "m";` brings
      a module's exported names in verbatim (`import "m" as ns;` prefixes them
      with `ns.`); `export name;` and the `export prefix*;` glob control
      visibility and re-export, so an aggregator module can re-export many
      sub-modules under one prefix. Imported rules are inlined with `$name` or
      become in-grammar [classes](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax-class) with `~name`. Existing
      single-file grammars are unaffected. See
      [modules and imports](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-imports).
    - _(TrulyNatural only)_ _(STT only)_ New [grammar-import-path](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#grammar-import-path) configuration setting: a
      `:`-separated directory search path for resolving bare grammar `import`
      references. Defaults to the current working directory. See
      [modules and imports](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-imports).
    - _(TrulyNatural only)_ _(STT only)_ Native grammars may declare a dialect version with an optional
      `#SNSR MAJOR.MINOR` header on the first line, for example `#SNSR 2.0`.
      The compiler rejects a grammar that declares a newer version than it
      implements, so a grammar that relies on features from a later dialect
      fails clearly instead of misparsing. A grammar with no header, or a bare
      `#SNSR`, is treated as the current version, so existing grammars are
      unaffected. See [grammar syntax](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax).
    - _(TrulyNatural only)_ _(STT only)_ Native grammars may declare their language with a `language`
      directive, for example `language en-US;` — a two- or three-letter
      language with an optional two-letter region (a subset of BCP 47), matched
      case-insensitively. The declaration is advisory and does not change which
      utterances match; a build may use it to sanity-check the grammar against
      the acoustic model. It is preserved across the native and SRGS formats. See
      [grammar syntax](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-language).
- **Changed**
    - Improved [load](https://doc.sensory.com/tnl/7.9/api/inference.md#load) speed.
    - [fromAudioFile](https://doc.sensory.com/tnl/7.9/api/io.md#fromaudiofile) can now read single-channel [FLAC] files.
    - The [confidence-score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#confidence-score) result setting is no longer deprecated. It
      reports a calibrated true-accept probability for fixed-phrase wake words
      and its documentation describes the SNR range over which the probabilities
      were measured.
    - CMake integration now locates the SDK with
      `find_package(SnsrLibrary CONFIG)` and requires CMake 3.15 or
      later (previously `include(SnsrLibrary)` with CMake 3.10). See
      [Integrate with your build § CMake](https://doc.sensory.com/tnl/7.9/api/build-system.md#build-cmake).
    - _(TrulyNatural only)_ The LVCSR phrase-level recognition [score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#score) now reports the
      geometric mean of the per-word scores instead of their length-biased
      product, and models built for it report a normalized in-grammar
      acoustic confidence.
    - _(TrulyNatural only)_ _(STT only)_ A grammar rule referenced with the `~` sigil now defaults to an
      in-grammar recognition [class](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax-class) built from that rule.
      This changes an edge case: a grammar that both defined a rule `a` and
      referenced `~a`, for example `a = 1 | 2 | 3; b = <s> say ~a </s>;`,
      previously left `~a` undefined until supplied at runtime; `~a` now defaults
      to `1 | 2 | 3`. A runtime [grammar-stream](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#grammar-stream) still overrides it.
    - _(TrulyNatural only)_ _(STT only)_ A `~name` class that is referenced but never defined (in the
      grammar or through an external stream) now produces an advisory warning
      when the grammar is built or run. It is not an error, since any class can
      still be filled at runtime, but it usually indicates an oversight. Define
      the class, or use `name = <void/>;` to keep it intentionally empty without
      the warning. An undefined system class (`~s.*`) remains a hard error. See
      [grammar syntax](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax-class).
    - _(TrulyNatural only)_ _(STT only)_ [grammar-stream](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#grammar-stream) and [nlu-grammar-stream](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#nlu-grammar-stream) are now readable.
      Reading one back returns the grammar most recently set, flattened into a
      single self-contained grammar in native SNSR format: `import` references
      are resolved and merged in, aggregators are expanded, comments are
      preserved, and a [BNF+EM](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-bnfplus) or [SRGS](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-srgs) source
      grammar is converted to the native format. See
      [modules and imports](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-imports).
    - _(STT only)_ [`<unknown/>`](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-special) in STT grammars expands to
      primitive wildcard symbols. Word-level STT recognizers use
      `<unknown-start/>` followed by zero or more `<unknown-cont/>`;
      character-level recognizers use `<unknown-start/>` or
      `<unknown-cont/>`. Grammar-specified
      weights on unknown symbols are preserved.
    - _(STT only)_ The phrase-level recognition [score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#score) now reports a normalized
      recognition confidence instead of a length-biased product of per-word
      scores.
- **Deprecated**
    - _(TrulyNatural only)_ Binary class libraries (LVCSR-only, pre-built `.snsr` class
      repositories such as _lvcsr-lib-enUS-14.0.2.snsr_) are deprecated, and
      Sensory no longer publishes new ones. Existing LVCSR models that load a
      binary class library continue to work. For new grammars, reference the
      classes you need and import their definitions with
      [`import`](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-imports), so the same grammar runs on both STT and
      LVCSR without loading a separate class-library model. See
      [grammar syntax](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-syntax-class).
- **Removed**
    - _spot-voicegenie-enUS-6.5.1-m.snsr_
    - _tpl-spot-concurrent-1.5.0.snsr_
    - _tpl-spot-debug-1.5.1.snsr_
    - _tpl-spot-select-1.4.0.snsr_
    - _tpl-spot-sequential-1.5.0.snsr_
    - _tpl-spot-vad-3.13.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.28.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.23.0.snsr_
    - _(TrulyNatural only)_ _tpl-vad-lvcsr-3.17.0.snsr_
    - _(TrulyNatural only)_ _lvcsr-build-enUS-14.0.2-5MB.snsr_
    - _(TrulyNatural only)_ _lvcsr-lib-enUS-14.0.2.snsr_
      Existing binary class libraries still load on LVCSR models, but new grammars
      should import class [modules](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-imports) instead.
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.15-pnc.snsr_.
      A variant of this model is available for [download](https://doc.sensory.com/tnl/7.9/models/downloads.md#models-downloads).
- **Fixed**
    - [snsrStreamFromAudioFile](https://doc.sensory.com/tnl/7.9/api/io.md#fromaudiofile) mishandled the variadic
      arguments that follow a non-default [StreamAudioFormat](https://doc.sensory.com/tnl/7.9/api/io.md#streamaudioformat), so formats
      requiring extra parameters (such as sample rate) were read incorrectly.
    - _(STT only)_ NLU wildcard echo markers are resolved before grammar
      minimization, so matched OOV words are preserved instead of
      appearing as literal `.` tokens.
    - _(STT only)_ [snsr-eval-batch](https://doc.sensory.com/tnl/7.9/tools/snsr-eval-batch.md#snsr-eval-batch) now reports a character error rate (CER) for
      languages without word delimiters, such as Japanese and Chinese.
      Previously it applied word error rate (WER) to these languages, whose
      ambiguous word segmentation produced misleading rates. Space-delimited
      languages still report WER. See [character error rate](https://doc.sensory.com/tnl/7.9/tools/snsr-eval-batch.md#snsr-eval-batch-cer).

## 7.8.0 (2026-05-30)
- **Added**
    - License key introspection: [LICENSE_INFO](https://doc.sensory.com/tnl/7.9/api/library-config.md#config_license_info), [LICENSE_SUPPORT](https://doc.sensory.com/tnl/7.9/api/library-config.md#config_license_support),
      [LICENSE_OVERRIDE_NOT_VALID](https://doc.sensory.com/tnl/7.9/api/inference.md#rc).
    - [profile:samples](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#profilesamples).
    - Python language binding: platform-specific `snsr` wheel (ctypes over the
      C API) for [Python][] 3.10 and later, with sample projects in _sample/python/_
      and documentation ([Python examples](https://doc.sensory.com/tnl/7.9/api/sample/python/index.md#python-examples),
      [Integrate with your build § Python](https://doc.sensory.com/tnl/7.9/api/build-system.md#build-python), and the Python tab in
      [Your first program](https://doc.sensory.com/tnl/7.9/getting-started/your-first-program.md#your-first-program)).
    - [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) `-i` flag to support [batch processing](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#batch-processing).
    - LLM-friendly documentation Markdown bundle for coding agents and
      RAG pipelines. Each page is mirrored on the site at the same path
      as its source file—section roots as `<dir>/index.md` beside
      `<dir>/index.html`, leaf pages as `<dir>/<page>.md` beside
      `<dir>/<page>/index.html`—and the entry point is
      [llms.txt](https://doc.sensory.com/tnl/7.8/llms.txt):
        + [llms.txt](https://doc.sensory.com/tnl/7.8/llms.txt) —
          discoverable index following the
          [llmstxt.org](https://llmstxt.org) convention; lists every
          page with one-line summaries plus a `## Symbols` section
          deep-linking C/Java identifiers to their documenting
          headings.
        + [manifest.json](https://doc.sensory.com/tnl/7.8/manifest.json)
          — JSON index of every member with `path`, `source_path`,
          `bytes`, `title`, `canonical_url`, an optional H2/H3 outline
          on reference pages, and an optional ISO 8601 UTC
          `last_modified` so indexers can do incremental re-ingest.
        + [llms-full.txt](https://doc.sensory.com/tnl/7.8/llms-full.txt)
          — every page concatenated with `<!-- FILE: … -->` per-page
          separators (path and canonical URL in each header) for
          one-shot ingestion.
        + [agent-docs.zip](https://doc.sensory.com/tnl/7.8/agent-docs.zip)
          — same files packaged as a single archive for vendored or
          air-gapped use; agents with network access should crawl the
          loose mirror instead.
    - _(TrulyNatural only)_ [lvcsr-build-enUS-14.0.2-5MB.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#lvcsr-build-enUS)
      with improved recognition accuracy.
    - _(TrulyNatural only)_ _lvcsr-lib-enUS-14.0.2.snsr_ class library
      compatible with _lvcsr-build-enUS-14.0.2-5MB.snsr_.
- **Changed**
    - The [library-info](https://doc.sensory.com/tnl/7.9/api/setting-keys/library-information.md#library-info) summary includes text for [LICENSE_SUPPORT](https://doc.sensory.com/tnl/7.9/api/library-config.md#config_license_support).
    - [fromCode](https://doc.sensory.com/tnl/7.9/api/io.md#fromcode) checks that the `SnsrCodeModel` data were compiled with compatible `struct` packing.
    - [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) `-p` reports the real-time fraction required to run models in [template](https://doc.sensory.com/tnl/7.9/models/tpl/index.md#template-type) slots.
    - `spot-eval-batch` renamed to [snsr-eval-batch](https://doc.sensory.com/tnl/7.9/tools/snsr-eval-batch.md#snsr-eval-batch) with support for commands, LVCSR and STT models.
    - [Setting keys](https://doc.sensory.com/tnl/7.9/api/setting-keys/index.md#setting-keys) reorganized by concern (configuration, runtime,
      results, events, iterators) with new groups for LVCSR & STT,
      wake word & command set, and THF Micro DSP. Per-key anchors
      (e.g. `#listen-window`, `#partial-result-interval`) are stable;
      cross-references and bookmarks continue to resolve.
    - macOS installers built for Apple Silicon (arm64) only.
      Contact [Technical Support](https://doc.sensory.com/tnl/7.9/contact.md#technical-support) for Intel (x86_64) macOS installers.
      Both installer packages include libraries for arm64 and x86_64.
    - _(STT only)_ [nlu-grammar-stream](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#nlu-grammar-stream) overrides machine-learned NLU only if it detects no NLU matches.
- **Removed**
    - _lib/ios/libsnsr.a_, use XCFramework instead.
    - _(TrulyNatural only)_ _lvcsr-build-enUS-12.13.1-5MB.snsr_
    - _(TrulyNatural only)_ _lvcsr-lib-enUS-1.2.0.snsr_
    - _(STT only)_ CRF++ and fastText dependencies used for NLU in legacy STT models.
- **Fixed**
    - Changes to [listen-window](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#listen-window) had no effect after the first call to [setHandler](https://doc.sensory.com/tnl/7.9/api/inference.md#sethandler).
    - The documentation for [complete-only](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#complete-only) mistakenly noted that the default value was `0`.
      This had changed to `1` in [v6.20.0](https://doc.sensory.com/tnl/7.9/changes/version-6.md#v6.20.0).
    - [tpl-spot-sequential](https://doc.sensory.com/tnl/7.9/models/tpl/tpl-spot-sequential.md#tpl-spot-sequential-type) with [`loop = 2`](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#loop) mistakenly
      invoked the [^listen-end](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#listen-end) handler after each [listen-window](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#listen-window) timeout.
- **Security**
    - On Windows, using filenames longer than 256 characters with [fromFileName](https://doc.sensory.com/tnl/7.9/api/io.md#fromfilename) or
      [fromAudioFile](https://doc.sensory.com/tnl/7.9/api/io.md#fromaudiofile) could cause out-of-bounds heap access.
    - Reading or changing an unknown setting on a model built with deeply-nested
      [templates](https://doc.sensory.com/tnl/7.9/models/tpl/index.md#template-type) could access freed heap memory when reporting the error.

## 7.7.0 (2026-01-24)
- **Added**
    - Smart Wake Word option to gate a VAD with a wake word at the
      [start or at the end](https://doc.sensory.com/tnl/7.9/models/tpl/tpl-opt-spot-vad-lvcsr.md#use-trailing-wake-word) of an utterance.
        + [wake-word-at-end](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#wake-word-at-end), [backlog-interval](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#backlog-interval)
        + [tpl-spot-vad-3.13.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad)
        + _(TrulyNatural only)_ [tpl-spot-vad-lvcsr-3.23.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr)
        + _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr-1.28.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr)
    - Option to apply library license keys with [LICENSE](https://doc.sensory.com/tnl/7.9/api/library-config.md#config_license) [configuration](https://doc.sensory.com/tnl/7.9/api/library-config.md#config-enum).
        + [LICENSE_OVERRIDE_NOT_ENABLED](https://doc.sensory.com/tnl/7.9/api/inference.md#rc_license_override_not_enabled),
          [LICENSE_OVERRIDE_NOT_SUPPORTED](https://doc.sensory.com/tnl/7.9/api/inference.md#rc_license_override_not_supported).
    - The [STT_SUPPORT](https://doc.sensory.com/tnl/7.9/api/library-config.md#config_stt_support) [config](https://doc.sensory.com/tnl/7.9/api/library-config.md#config) option requires a call to [new](https://doc.sensory.com/tnl/7.9/api/inference.md#new).
    - _(TrulyNatural only)_ [lvcsr-build-enUS-12.13.1-5MB.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#lvcsr-build-enUS) with improved recognition accuracy
      and simplified out-of-grammar modeling. This model replaces both
      _lvcsr-build-enUS-2.7.3.snsr_
      and _lvcsr-background-enUS-1.2.3.snsr_ included in the previous release.
- **Changed**
    - _(STT only)_ Improved STT model loading and initialization speed.
- **Removed**
    - _tpl-spot-vad-3.10.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.20.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.25.0.snsr_
    - _(TrulyNatural only)_ _lvcsr-build-enUS-2.7.3.snsr_
    - _(TrulyNatural only)_ _lvcsr-background-enUS-1.2.3.snsr_
- **Fixed**
    - _(TrulyNatural only)_ Creating an LVCSR recognizer with a [grammar](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition) that had a syntax error
      (such as unbalanced parentheses) _and_ included empty lines or comments at the start of the grammar
      could lead to a crash caused by de-referencing a `NULL` pointer.
    - _(STT only)_ With [partial-result-interval](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#partial-result-interval) `= 0` STT recognizers did not produce
      [recognition results](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result) on short utterances.

## 7.6.1 (2025-11-25)
- **Changed**
    - [Android examples](https://doc.sensory.com/tnl/7.9/api/sample/android/index.md#android-examples) build with Java 17 and later.
- **Fixed**
    - Higher than expected CPU use in wake words and command sets.
      This addresses a regression introduced in [7.5.0](https://doc.sensory.com/tnl/7.9/changes/index.md#v7.5.0).
    - [snsr-debug](https://doc.sensory.com/tnl/7.9/api/sample/android/snsr-debug.md#snsr-debug) mistakenly used [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr) and _stt-enUS-automotive-medium_
      model versions from an earlier SDK release.
    - Some of the [C examples](https://doc.sensory.com/tnl/7.9/api/sample/c/index.md#c-examples) failed to build on Windows.
- **Security**
    - [profile](https://doc.sensory.com/tnl/7.9/api/inference.md#profile) could access released memory if called on a [Session](https://doc.sensory.com/tnl/7.9/api/inference.md#session) instance where the
      model, or a filled [template](https://doc.sensory.com/tnl/7.9/models/tpl/index.md#template-type) slot, was replaced with another model at runtime.

## 7.6.0 (2025-09-15)
- **Added**
    - Setting [`loop = 2`](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#loop) pins the [tpl-spot-sequential](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-sequential) listening focus to
      the recognizer in slot `1`.
    - [tpl-spot-debug-1.5.1.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-debug) with support for NLU intents and entities.
    - [udt-universal-3.67.1.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#udt-universal) with improved accuracy.
    - [tpl-spot-vad-3.10.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad) with support for [include-wake-word-audio](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#include-wake-word-audio).
    - [snsr-debug](https://doc.sensory.com/tnl/7.9/api/sample/android/snsr-debug.md#snsr-debug) Android sample replaces `spot-debug` and adds support for STT.
    - _(TrulyNatural only)_ [tpl-spot-vad-lvcsr-3.20.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr) and
      [tpl-opt-spot-vad-lvcsr-1.25.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr) with support for [include-wake-word-audio](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#include-wake-word-audio).
    - _(TrulyNatural only)_ Documentation notes that [score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#score) values are not usable when [result-max](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#result-max) `> 1`.
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.15-pnc.snsr_
        + Support for [nlu-match-max](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#nlu-match-max).
        + Setting [stt-profile](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#stt-profile) does not change [partial-result-interval](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#partial-result-interval).
    - _(STT only)_ Support for STT on 64-bit iOS platforms:
        + _iPhoneOS_ on `arm64` and `arm64e`.
        + _iPhoneSimulator_ on `arm64` and `x86_64`.
- **Changed**
    - Documentation system from [Doxygen][] to [Material for MkDocs][].
    - `arm-linux-gnueabi` library requires GLIBC >= 2.17 instead of GLIBC >= 2.34 for improved compatibility.
    - _lib/\*/README\*md_ for the [supported target platforms](https://doc.sensory.com/tnl/7.9/reference/overview.md#supported-target-platforms) include the minimum required
      `GLIBC` version where relevant.
- **Removed**
    - _tpl-spot-debug-1.5.0.snsr_
    - _udt-universal-3.66.1.9.snsr_
    - _tpl-spot-vad-3.9.0.snsr_
    - `spot-debug` Android sample, see [snsr-debug](https://doc.sensory.com/tnl/7.9/api/sample/android/snsr-debug.md#snsr-debug) instead.
    - Know issues documentation page.
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.19.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.24.snsr_
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.13-pnc.snsr_
- **Fixed**
    - [spot-convert](https://doc.sensory.com/tnl/7.9/tools/spot-convert.md#spot-convert) could show incorrect license recognition or duration limits
      in the comments at the start of the header file it generates.
    - [allocPerf](https://doc.sensory.com/tnl/7.9/api/library-config.md#allocperf) did not produce usable results when used with [allocStdlib](https://doc.sensory.com/tnl/7.9/api/library-config.md#allocstdlib).
    - _(TrulyNatural only)_ Incorrect [begin-ms](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#begin-ms), [end-ms](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#end-ms), and [score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#score) results for a
      [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/tpl/tpl-spot-vad-lvcsr.md#tpl-spot-vad-lvcsr-type) recognizer in [slot](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slot) `1`
      of [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.9/models/tpl/tpl-spot-concurrent.md#tpl-spot-concurrent-type).
    - _(TrulyNatural only)_ Using [tpl-spot-sequential](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-sequential) in slot 0 of
      [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr) or [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr) could lead
      to warning messages on `stderr`.
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) `-a` option failed when used with [class libraries](https://doc.sensory.com/tnl/7.9/models/types/lvcsr.md#grammar-class-libraries-legacy).
    - _(STT only)_ Bus error on 32-bit Arm platforms when using a model with machine-learned NLU or
      punctuation and capitalization support.
      This was caused by a [bug in ONNX](https://github.com/onnx/onnx/issues/6573)
      that resulted in an attempt to read `int64_t` values not aligned to 8 bytes.
- **Security**
    - _(TrulyNatural only)_ If [nlu-grammar-stream](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#nlu-grammar-stream) reduced the length of the
      phrase result (by using the `:` rewrite operator, for example)
      in an STT model with punctuation and capitalization support,
      an unterminated string could cause an out-of-bounds memory read.

## 7.5.0 (2025-06-12)
- **Added**
    - [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) `-a`, `-q`, and `-u` flags.
    - [stt-support](https://doc.sensory.com/tnl/7.9/api/setting-keys/library-information.md#stt-support), [thread-support](https://doc.sensory.com/tnl/7.9/api/setting-keys/library-information.md#thread-support).
    - Support for loading parts of a model that resides in ROM onto the heap.
      This can improve inference speed when ROM is significantly slower than RAM.
    - Reduced peak RAM requirement on small platforms
        + [prune:enable](https://doc.sensory.com/tnl/7.9/api/setting-keys/runtime.md#pruneenable) option to remove unused settings after a model's been loaded.
        + Reduced overhead in the session configuration store.
    - [fromProvider](https://doc.sensory.com/tnl/7.9/api/io.md#fromprovider) as an alias for `snsrStream_alloc()`.
    - [profile](https://doc.sensory.com/tnl/7.9/api/inference.md#profile) is available in the Java language binding.
    - Support for `armv7k` and `arm64_32` watchOS architectures.
    - [tpl-spot-concurrent-1.5.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-concurrent)
      with support for [^listen-begin](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#listen-begin), [^listen-end](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#listen-end), [^begin](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#begin), [^end](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#end),
      [^limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#limit), and [^silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#silence).
    - [tpl-spot-vad-3.9.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad)
    - _(TrulyNatural only)_ [ram-limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#ram-limit), [ac-prune-top-k](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#ac-prune-top-k).
    - _(TrulyNatural only)_ Support for improved out-of-grammar detection (with better
      discrimination and lower RAM overhead) in [grammar-based recognition](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition) and
      [VoiceHub Pro](https://doc.sensory.com/tnl/7.9/reference/voicehub.md#voicehub) models.
    - _(TrulyNatural only)_ Support for [grammar-based recognition](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition) models that report recognition scores.
    - _(TrulyNatural only)_ Templates with support for [domain](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#domain), [am-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#am-size), [lm-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#lm-size),
      [nlu-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#nlu-size), and [slm-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-size):
        + [tpl-opt-spot-vad-lvcsr-1.24.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr)
        + [tpl-spot-vad-lvcsr-3.19.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr)
        + [tpl-vad-lvcsr-3.17.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-vad-lvcsr)
    - _(TrulyNatural only)_ Models updated to support [score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#score) setting:
        + _lvcsr-background-enUS-1.2.3.snsr_
        + _lvcsr-build-enUS-2.7.3.snsr_
    - _(STT only)_ [domain](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#domain), [slm-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-size).
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.13-pnc.snsr_
      with support for [domain](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#domain) and [slm-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-size).
      This model includes a single language model, so [domain](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#domain)
      will return `NULL`. It does not include a generative language model
      either: [slm-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-size) is `0`.
- **Changed**
    - Documentation available online.
    - [snsr-edit](https://doc.sensory.com/tnl/7.9/tools/snsr-edit.md#snsr-edit) requires the `-o` flag to create output.
    - [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) prints scores with the `%g` format specifier.
    - [getDouble](https://doc.sensory.com/tnl/7.9/api/inference.md#getters), [setDouble](https://doc.sensory.com/tnl/7.9/api/inference.md#setters), [getInt](https://doc.sensory.com/tnl/7.9/api/inference.md#getters), and [setInt](https://doc.sensory.com/tnl/7.9/api/inference.md#setters)
      support both double and integer settings,
      but will report [INCORRECT_SETTING_TYPE](https://doc.sensory.com/tnl/7.9/api/inference.md#rc_incorrect_setting_type) if a double value cannot
      be converted to an integer without loss of precision or overflow.
    - [getString](https://doc.sensory.com/tnl/7.9/api/inference.md#getters) and [setString](https://doc.sensory.com/tnl/7.9/api/inference.md#setters) support double and integer settings.
    - [set](https://doc.sensory.com/tnl/7.9/api/inference.md#set) no longer requires quotes for string arguments without embedded spaces.
    - [SOURCE](https://doc.sensory.com/tnl/7.9/api/inference.md#fm_source), [SOURCE_RAM](https://doc.sensory.com/tnl/7.9/api/inference.md#fm_source_ram), and [SOURCE_PRUNED](https://doc.sensory.com/tnl/7.9/api/inference.md#dataformat)
      create code that tags all model objects with preprocessor macro `SNSR_MODEL_ATTR`.
      Use this, for example, to specify the section in which the linker places these objects.
      See [Compile-time macros § SNSR_MODEL_ATTR](https://doc.sensory.com/tnl/7.9/api/compile-macros.md#snsr-model-attr).
    - _sample/c/CMakeLists.txt_
        + Builds `snsr-eval-subset`.
        + Installs the sample binaries in _sample/c/bin/_.
    - _sample/c/Makefile_ and _sample/c/CMakeLists.txt_ build the
      [live-spot-stream.c](https://doc.sensory.com/tnl/7.9/api/sample/c/live-spot-stream.md#live-spot-streamc) example on macOS.
    - _util/gradlew_ uses Gradle 8.14, compatible with Java 21.
    - [Java examples](https://doc.sensory.com/tnl/7.9/api/sample/java/index.md#java-examples) use lambda expressions for event handlers and iterators.
    - [Enrolled wake word](https://doc.sensory.com/tnl/7.9/models/index.md#enroll-models) tasks no longer invoke [^pause](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#pause) and
      [^resume](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#resume) when [interactive](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#interactive) `== 0`.
    - _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr) and [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr)
      with [include-leading-silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#include-leading-silence) `= 1` no longer invoke the [^result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result), [^nlu-intent](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#nlu-intent), and [^nlu-slot](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#nlu-slot) events if the VAD does not detect speech.
      The [^listen-end](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#listen-end) directly follows the [^silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#silence) event.
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) with live audio input will not run LVCSR or STT models that do
      not include a VAD component. Use the new `-a` flag to add [tpl-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-vad-lvcsr) on the fly.
    - _(TrulyNatural only)_ [complete-only](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#complete-only) `= 1` accepts results even if there's no
      trailing silence in the utterance.
    - _(STT only)_ In STT models with punctuation and capitalization support, empty
      results are reported as an empty string instead of a single period.
- **Removed**
    - _tpl-spot-concurrent-1.4.0.snsr_
    - _tpl-spot-vad-3.8.0.snsr_
    - _(TrulyNatural only)_ _lvcsr-background-enUS-1.2.1.snsr_
    - _(TrulyNatural only)_ _lvcsr-build-enUS-2.7.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.20.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.11.0.snsr_
    - _(TrulyNatural only)_ _tpl-vad-lvcsr-3.10.0.snsr_
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.13.snsr_
- **Fixed**
    - Machine-learned VAD components detected the speech onset late on
      synthetic audio data with significant all-zero leading silence.
    - [oss-components](https://doc.sensory.com/tnl/7.9/api/setting-keys/library-information.md#oss-components) always returned `NULL.`
    - _(TrulyNatural only)_ In rare cases [grammar-based recognition](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition) NLU intent names could mistakenly
      include the first word of the NLU intent value.
    - _(TrulyNatural only)_ In rare cases VoiceHub models that use [grammar-based recognition](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition) could
      misclassify in-domain intents as `background`.
    - _(TrulyNatural only)_ Potentially reduced recognition accuracy in [grammar-based recognition](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition) models that
      use [ram-limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#ram-limit) to constrain the Viterbi decoder.
- **Security**
    - Deeply-nested templates with duplicate models (for example,
      combining the same spotter model with [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-concurrent),
      then combining the result with another [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-concurrent)
      and the same spotter model, three levels deep), could result in
      out-of-bounds memory access when releasing the session.

## 7.4.1 (2025-03-13)
- **Fixed**
    - _(STT only)_ Using [custom-vocab](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#custom-vocab) to map multi-word sequences could
      result in missed NLU entities.

## 7.4.0 (2025-01-22)
- **Added**
    - Java support on _x86_64-windows-msvc._
    - [SOURCE_RAM](https://doc.sensory.com/tnl/7.9/api/inference.md#fm_source_ram) and [snsr-edit](https://doc.sensory.com/tnl/7.9/tools/snsr-edit.md#snsr-edit) `-C` option.
    - Spotter template modes with new settings [low-fr-operating-point](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#low-fr-operating-point) and [duration-ms](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#duration-ms):
        + [tpl-spot-debug-1.5.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-debug)
        + [tpl-spot-vad-3.8.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad)
        + [tpl-spot-sequential-1.5.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-sequential)
    - Support for Smart Wake Words. On a near-miss false reject, these
      models switch to a more accepting operating point for a limited
      duration to make it more likely that the model will accept a repeated
      wake word utterance.
      Enable this feature (on wake word models
      that support it) by setting [low-fr-operating-point](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#low-fr-operating-point). Adjust the
      duration of the low false-reject listening window with [duration-ms](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#duration-ms).
    - [spot-voicegenie-enUS-6.5.1-m.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#spot-voicegenie-enUS) with
      support for [low-fr-operating-point](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#low-fr-operating-point) and [duration-ms](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#duration-ms).
    - Compatibility with 2025 [VoiceHub Pro](https://doc.sensory.com/tnl/7.9/reference/voicehub.md#voicehub) wake words and command sets.
    - [VERSION_CMAKE](https://doc.sensory.com/tnl/7.9/api/constants.md#version_cmake).
    - _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr-1.20.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr)
      supports changing VAD settings [backoff](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#backoff), [hold-over](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#hold-over),
      [leading-silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#leading-silence), [max-recording](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#max-recording), [trailing-silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#trailing-silence),
      and [include-leading-silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#include-leading-silence). Adds [vocab-iterator](https://doc.sensory.com/tnl/7.9/api/setting-keys/iterators.md#vocab-iterator),
      [^slm-start](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-start), [^slm-result-partial](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-result-partial),
      [^slm-result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-result), [slm-enabled](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-enabled), [slm-turn-limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-turn-limit),
      [stt-profile](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#stt-profile), [low-fr-operating-point](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#low-fr-operating-point), and [duration-ms](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#duration-ms).
    - _(TrulyNatural only)_ VAD template models with new settings
      [^slm-start](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-start), [^slm-result-partial](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-result-partial),
      [^slm-result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-result), [slm-enabled](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-enabled), [slm-turn-limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-turn-limit),
      [stt-profile](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#stt-profile), [low-fr-operating-point](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#low-fr-operating-point), and [duration-ms](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#duration-ms):
        + [tpl-spot-vad-lvcsr-3.15.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr)
        + [tpl-vad-lvcsr-3.14.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-vad-lvcsr)
    - _(STT only)_ [stt-profile](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#stt-profile).
    - _(STT only)_ Experimental support for generative language models. New settings:
      [^slm-start](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-start), [^slm-result-partial](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-result-partial),
      [^slm-result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#slm-result), [slm-enabled](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-enabled), and [slm-turn-limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slm-turn-limit).
    - _(STT only)_ _stt-enUS-automotive-medium-2.3.13.snsr_
        + Results include capitalization and punctuation.
        + Supports [stt-profile](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#stt-profile).
- **Changed**
    - Android JNI shared libraries export only TrulyNatural function names. This
      significantly reduces the chances of symbol clashes in applications
      that use third-party libraries that depend on the same OSS modules as
      the TrulyNatural SDK.
    - Android JNI libraries built with NDK r27c and [flexible page size support][].
    - Improved compatibility with older Android releases, support for
      [API level 21][api-levels] and later.
    - _SnsrLibrary.cmake_ removes unused functions and data from target
      executables (`-ffunction-sections -fdata-sections`)
    - DSP library (for creating embedded spotter models) version 8.5.0.
    - Toolchain updates:
        + _arm-linux-gnueabi_ built with gcc 13.2.0.
        + _arm-linux-gnueabihf_ built with gcc 13.3.1.
        + _i686-linux-gnu_ built with gcc 13.2.0.
    - On Windows, [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) sets the console code page to `UTF-8.`
    - If application code used [push](https://doc.sensory.com/tnl/7.9/api/inference.md#push) and did not call [stop](https://doc.sensory.com/tnl/7.9/api/inference.md#stop)
      before releasing the model, the call to [release](https://doc.sensory.com/tnl/7.9/api/heap.md#release)
      invoked all pending event handlers. It now ignores these.
    - [stop](https://doc.sensory.com/tnl/7.9/api/inference.md#stop) completes even if the session is in an error state.
    - _(TrulyNatural only)_ No [^result-partial](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result-partial) for empty hypotheses.
    - _(STT only)_ Support Windows `\r\n` line termination as entry separators in [custom-vocab](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#custom-vocab).
    - _(STT only)_ Removed the 1000-entry limit for [custom-vocab](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#custom-vocab). Using
      such large custom vocabularies is frequently counter-productive.
      Consider contacting your [Sensory Sales](https://doc.sensory.com/tnl/7.9/contact.md#contact) representative to
      discuss creating a domain-specific recognizer instead.
    - _(STT only)_ Improved [custom-vocab](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#custom-vocab) behavior in character-based languages
      such as Mandarin Chinese.
    - _(STT only)_ STT models start fewer threads.
- **Deprecated**
    - [threshold](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#threshold).
- **Removed**
    - _spot-voicegenie-enUS-6.5.0-m.snsr_
    - _tpl-spot-debug-1.4.0.snsr_
    - _tpl-spot-sequential-1.4.0.snsr_
    - _tpl-spot-vad-3.7.0.snsr_
    - _tpl-spot-dynop-1.4.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.12.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.11.0.snsr_
    - _(TrulyNatural only)_ _tpl-vad-lvcsr-3.10.0.snsr_
    - _(STT only)_ _stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr_
- **Fixed**
    - With [push-duration-limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#push-duration-limit) `> 0`, [reset](https://doc.sensory.com/tnl/7.9/api/inference.md#reset)
      did not flush the push backlog buffer enabled with [push-buffer-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#push-buffer-size).
    - Low memory use VoiceHub Large Vocabulary Project models could fail to run
      if settings (such as [operating-point](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#operating-point)) were changed after registering
      event handlers.
    - Reading settings from models built from deeply nested templates could
      mistakenly report [VALUE_NOT_SET](https://doc.sensory.com/tnl/7.9/api/inference.md#rc).
    - _(TrulyNatural only)_ [search.frame-nota](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#searchframe-nota) was ignored for [^result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result) when used with lightweight NLU.
- **Security**
    - If application code using the C API used [push](https://doc.sensory.com/tnl/7.9/api/inference.md#push), and a result handler called [forEach](https://doc.sensory.com/tnl/7.9/api/inference.md#foreach),
      and that handler was invoked by [release](https://doc.sensory.com/tnl/7.9/api/heap.md#release) because the session was released without
      calling [stop](https://doc.sensory.com/tnl/7.9/api/inference.md#stop) first, then a double-free and access of invalid heap memory could occur.
    - _(TrulyNatural only)_ Out-of-bounds memory access could occur if [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr)
      was used with `0.include-leading-silence = 1`.

## 7.3.0 (2024-07-29)
- **Added**
    - New FAQ section:
      [How do I take action on an NLU result?](https://doc.sensory.com/tnl/7.9/faq.md#lvcsr-nlu-action)
    - Support for adding this SDK to projects that use CMake. See [C examples](https://doc.sensory.com/tnl/7.9/api/sample/c/index.md#examples-cmake).
    - Real-time clock implementation for Windows, enables [profile:real-time](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#profilereal-time).
    - Support for multi-phrase spotter models with lower false accept rates.
    - _arm-none-eabi_ library with NEON built with gcc 13.3.1.
    - _(TrulyNatural only)_ VAD template models with settings [backoff](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#backoff) and [max-recording](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#max-recording)
      optimized for STT.
      The defaults are now 300 ms for audio backoff, and
      60 seconds for the maximum recording duration.
        + _tpl-opt-spot-vad-lvcsr-1.12.0.snsr_
        + _tpl-spot-vad-lvcsr-3.11.0.snsr_
        + _tpl-vad-lvcsr-3.10.0.snsr_
    - _(STT only)_ Improved STT recognition speed and accuracy, and
      reduced [^result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result) and [^nlu-intent](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#nlu-intent) latency when used with a VAD.
    - _(STT only)_ STT support for _arm-linux-gnueabihf,_
      _aarch64-linux-gnu,_ and _x86_64-windows-msvc._
    - _(STT only)_ _stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr_
        + 100 MiB total size compared to 299 MiB in previous version.
        + Improved NLU inference speed.
        + Improved accuracy.
- **Changed**
    - _arm-linux-gnueabihf_ and _aarch64-linux-gnu_ libraries
      built with gcc 10.3.1.
    - _(TrulyNatural only)_ Optimized machine-learned NLU models. On average these now
      run about ten times faster.
- **Removed**
    - Windows ports: x86-windows-2008, x86-windows-2015, x86_64-windows-2008,
        x86_64-windows-2015, x86_64-windows-mingw.
    - _arm-buildroot-linux-uclibcgnueabihf_ library.
    - _arm-ca7-linux-gnueabihf_ library.
    - _(TrulyNatural only)_ VAD template models:
        + _tpl-opt-spot-vad-lvcsr-1.11.0.snsr_
        + _tpl-spot-vad-lvcsr-3.10.0.snsr_
        + _tpl-vad-lvcsr-3.9.0.snsr_
    - _(STT only)_ _stt-enUS-automotive-small_medium-2.0.8-BBB-ff.snsr_
- **Fixed**
    - Certain low false-accept spotter models reported an internal
      validation error when used with _tpl-spot-sequential-1.4.0.snsr_
    - [spot-convert](https://doc.sensory.com/tnl/7.9/tools/spot-convert.md#spot-convert) `-c` produced incorrect code output for recent
      low false-accept models.
    - The iOS sample app mistakenly embedded _snsr.xcframework,_ leading to
      TestFlight rejection due to asset validation errors.
    - The TrulyNatural SDK linked against `-landroid,` making it
      incompatible with the [Vendor Native Development Kit][].
    - _(STT only)_ Duplicate entities and typographic errors in the documentation for
      _stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr_
- **Security**
    - _(STT only)_ NLU models could cause out-of-bounds memory access on very long
      (hundreds of words) recognition results.

## 7.2.0 (2024-04-11)
- **Added**
    - [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) `-p` option shows an estimate of the CPU
      processing capacity required to run a model in real-time.
    - [profile:real-time](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#profilereal-time).
    - _(TrulyNatural only)_ [nlu-intent-score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-intent-score), [nlu-entity-score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-entity-score), and [nlu-slot-score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-slot-score).
    - _(TrulyNatural only)_ Models updated to support NLU score and [score](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#score) settings:
        + [tpl-opt-spot-vad-lvcsr-1.11.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr)
        + [tpl-spot-vad-lvcsr-3.10.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr)
        + [tpl-vad-lvcsr-3.9.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-vad-lvcsr)
    - _(STT only)_ [am-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#am-size), [lm-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#lm-size), [nlu-size](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#nlu-size).
    - _(STT only)_ _stt-enUS-automotive-small_medium-2.0.8-BBB-ff.snsr_
        + Improved recognition accuracy compared to
          _stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr_
        + Adjusts model evaluation interval to match [partial-result-interval](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#partial-result-interval).
- **Changed**
    - [run](https://doc.sensory.com/tnl/7.9/api/inference.md#run) ignores [push-duration-limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#push-duration-limit).
    - _(TrulyNatural only)_ `snsr-eval` `-lll` does not show [^nlu-intent](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#nlu-intent) or [^nlu-slot](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#nlu-slot) results.
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.9/tools/snsr-eval.md#snsr-eval) shows NLU intent, entity, and slot scores.
    - _(STT only)_ STT models use [partial-result-interval](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#partial-result-interval) to set the model evaluation
      interval. The larger this interval the lower the average CPU use.
- **Removed**
    - _(TrulyNatural only)_ Models updated to support NLU score settings:
        + _tpl-opt-spot-vad-lvcsr-1.9.0.snsr_
        + _tpl-spot-vad-lvcsr-3.8.0.snsr_
        + _tpl-vad-lvcsr-3.8.0.snsr_
        + _tpl-spot-lvcsr-1.5.0.snsr_
          (Use [tpl-spot-vad-lvcsr-3.10.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr) instead.)
    - _(STT only)_ _stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr_
- **Fixed**
    - [load](https://doc.sensory.com/tnl/7.9/api/inference.md#load) now returns [LIBRARY_TOO_OLD](https://doc.sensory.com/tnl/7.9/api/inference.md#rc) when
      attempting to load a model that uses features it does not support.

## 7.1.1 (2024-02-13)
- **Fixed**
    - Linking against the Android static libraries could suppress
        the output of calls to
        `__android_log_print(),` `__android_log_vprint(),` and
        `__android_log_write()` in the entire application.
    - The AAR file for Android once again links against `-llog.`
    - _(TrulyNatural only)_ [tpl-spot-vad-lvcsr-3.8.0.snsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-vad-lvcsr)
      would keep listening for LVCSR audio if enough silence after the
      wake word lead to [^silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#silence).
        + This happened only for LVCSR recognizers (including those made
          with [VoiceHub](https://doc.sensory.com/tnl/7.9/reference/voicehub.md#voicehub)) and did not affect STT ones.
        + Regression from 7.0.0.

## 7.1.0 (2024-01-11)
- **Added**
    - _(TrulyNatural only)_ Simplified NLU API
        + Reduces NLU slot hierarchy to just two levels.
        + Provides direct access to top-level NLU slots as "intents" and
            child slots as "entities".
        + Does not support [nlu-match-max](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#nlu-match-max) `>` `1.`
        + Does not replace the existing NLU slot API.
        + See [^nlu-intent](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#nlu-intent), [nlu-intent-name](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-intent-name),
             [nlu-intent-value](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-intent-value),
             [nlu-entity-iterator](https://doc.sensory.com/tnl/7.9/api/setting-keys/iterators.md#nlu-entity-iterator), [nlu-entity-count](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-entity-count),
             [nlu-entity-name](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-entity-name), and [nlu-entity-value](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-entity-value).
    - _(TrulyNatural only)_ Models updated to support simplified NLU API:
        + _lvcsr-background-enUS-1.2.1.snsr_
        + _lvcsr-build-enUS-2.7.0.snsr_
        + _tpl-opt-spot-vad-lvcsr-1.9.0.snsr_
        + _tpl-spot-lvcsr-1.5.0.snsr_
        + _tpl-spot-vad-lvcsr-3.8.0.snsr_
    - _(STT only)_ Support for machine-learned NLU intent and entity classifiers.
    - _(STT only)_ [custom-vocab](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#custom-vocab)
    - _(STT only)_ _stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr_
- **Changed**
    - AAR file for Android is no longer linked against `-landroid` and
      `-llog.` This allows it to be used in an AOSP system image.
- **Removed**
    - Energy-only VAD models superseded by machine-learned versions:
        + _tpl-spot-vad-2.4.0.snsr_
        + _tpl-spot-vad-2.0.1.snsr_
        + _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-2.4.0.snsr_
        + _(TrulyNatural only)_ _tpl-vad-lvcsr-2.5.0.snsr_
    - _(TrulyNatural only)_ Models updated to support simplified NLU API:
        + _lvcsr-background-enUS-1.1.0.snsr_
        + _lvcsr-build-enUS-2.6.0.snsr_
        + _tpl-opt-spot-vad-lvcsr-1.8.0.snsr_
        + _tpl-spot-lvcsr-1.4.0.snsr_
        + _tpl-spot-vad-lvcsr-3.7.0.snsr_
        + _tpl-vad-lvcsr-3.7.0.snsr_
    - _(STT only)_ _stt-v1-en-1.0.1-400ms.snsr_
- **Fixed**
    - [VAD models](https://doc.sensory.com/tnl/7.9/models/index.md#vad-models) models ignored the [max-recording](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#max-recording) setting.
    - _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr) did not produce a
      [^result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result) for [slot](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#slot) `=` [0](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#0) if
      [0](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#0).[include-leading-silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#include-leading-silence) was set to `1`
      and a [leading-silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#leading-silence) timeout occurred.
    - _(TrulyNatural only)_ LVCSR models used in a [VAD](https://doc.sensory.com/tnl/7.9/models/index.md#vad-models) template would stop
      producing [^result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result) callbacks if the VAD reported
      [^limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#limit). STT models were not affected.

## 7.0.0 (2023-11-20)
- **Added**
    - [CONFIG_PRUNED](https://doc.sensory.com/tnl/7.9/api/inference.md#dataformat) and [SOURCE_PRUNED](https://doc.sensory.com/tnl/7.9/api/inference.md#dataformat) reduce the size
      of serialized models by removing configuration options such as
      unused [operating-point](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#operating-point) values.
    - [snsr-edit](https://doc.sensory.com/tnl/7.9/tools/snsr-edit.md#snsr-edit) `-p` option reduces [phrasespot](https://doc.sensory.com/tnl/7.9/api/setting-keys/values.md#phrasespot) model sizes by removing
      operating points other than the currently selected [operating-point](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#operating-point).
    - _(STT only)_ STT support with improved accuracy suitable for
      command-and-control and dictation tasks.
        + **This initial release includes STT support on Android, macOS, and
          x86_64-linux only.**
        + Includes Open Source modules, see [open source licenses](https://doc.sensory.com/tnl/7.9/licenses/oss.md#open-source-licenses).
        + Requires linking against a C++ runtime, see [Integrate with your build](https://doc.sensory.com/tnl/7.9/api/build-system.md#integrate-with-your-build).
        + Using STT models do not require any API changes. These are
          drop-in replacements for older LVCSR models on supported platforms.
        + STT recognition models
            - _stt-v1-en-1.0.1-400ms.snsr_
            - Contact your [Sensory Sales](https://doc.sensory.com/tnl/7.9/contact.md#contact) representative for
              additional languages.
        + New settings: [oss-components](https://doc.sensory.com/tnl/7.9/api/setting-keys/library-information.md#oss-components), [STT_SUPPORT](https://doc.sensory.com/tnl/7.9/api/library-config.md#config_stt_support).
- **Changed**
    - The deprecated [delay](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#delay) setting is read-only.
    - DSP library (for creating embedded spotter models) version 7.4.0.
    - _(TrulyNatural only)_ The effects of `:` terminal rewrites @b are now visible
      in [^result](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result) [text](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#text) values.
    - _(TrulyNatural only)_ The lightweight NLU processor scoring algorithm no longer
      considers `:inserted` and `removed:` words when ranking
      result parses. This potentially changes the primary NLU result,
      or the order in which NLU results are presented when [nlu-match-max](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#nlu-match-max)
      `> 1`, for grammars that use the `:` rewrite feature to better match expectations.
    - _(TrulyNatural only)_ If the time required to compute a partial LVCSR result exceeds the
      [push-duration-limit](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#push-duration-limit), the [^result-partial](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#result-partial) callback does not happen.
    - _(TrulyNatural only)_ The [grammar-based recognition](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition) grammars support the literal use of special tokens
      by escaping them with a backslash.
- **Deprecated**
    - Lightweight VAD. Use a [VAD model](https://doc.sensory.com/tnl/7.9/models/index.md#vad-models) instead.
- **Removed**
    - _(TrulyNatural only)_ References to the `<-` slot assignment operator in
      [grammar-based recognition](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition). This had been a symbol reserved for internal use only.
    - _(TrulyNatural only)_ _lvcsr-broad-enUS-3.1.0-t5.snsr_
- **Fixed**
    - Machine-learned [VAD](https://doc.sensory.com/tnl/7.9/models/types/vad.md#vad-type) models could unexpectedly report an error when
      the from-index value was less than the first-index value.
    - A subset of spotter models showed increased false accept rates when
      used with [task templates](https://doc.sensory.com/tnl/7.9/models/tpl/index.md#template-type).
    - _(TrulyNatural only)_ [tpl-opt-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-opt-spot-vad-lvcsr) mistakenly invoked [^silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#silence)
      and [^listen-end](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#listen-end) multiple times at end-of-stream if
      [0.include-leading-silence](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#include-leading-silence) was set to `1`.
    - _(TrulyNatural only)_ [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.9/models/index.md#tpl-spot-concurrent) with a spotter model in slot [0](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#0) and
      an LVCSR model (gated by a VAD, or spotter and VAD) in slot [1](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#1) would
      mistakenly return [nlu-slot-name](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-slot-name) and [nlu-slot-value](https://doc.sensory.com/tnl/7.9/api/setting-keys/results.md#nlu-slot-value) values as `NULL.`
    - _(TrulyNatural only)_ [^nlu-slot](https://doc.sensory.com/tnl/7.9/api/setting-keys/events.md#nlu-slot) could still occur even if [complete-only](https://doc.sensory.com/tnl/7.9/api/setting-keys/configuration.md#complete-only)
      suppressed the recognition result.
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.9/reference/grammar.md#grammar-based-recognition) with [classes](https://doc.sensory.com/tnl/7.9/models/types/lvcsr.md#grammar-classes) could fail
      with a segmentation fault when attempting to build a recognizer with too many class references.
- **Security**
    - This sequence of operations could lead to [getString](https://doc.sensory.com/tnl/7.9/api/inference.md#getters)
      returning an unterminated string:
        + Use [setStream](https://doc.sensory.com/tnl/7.9/api/inference.md#setters) to set a configuration value
          to a sequence of bytes that does not include `\0.`
        + Save the model to persistent storage.
        + Load the modified model from persistent storage.
        + Access the configuration value with [getString](https://doc.sensory.com/tnl/7.9/api/inference.md#getters).
    - In the Java language binding [fromMemory](https://doc.sensory.com/tnl/7.9/api/io.md#frommemory) and [fromString](https://doc.sensory.com/tnl/7.9/api/io.md#fromstring)
      could potentially access the underlying `byte[]` memory after it
      was garbage-collected.

<!-- Reference definitions from includes/links.md -->
[api-levels]: https://en.wikipedia.org/wiki/Android_version_history "Android version history and API levels"
[Doxygen]: https://doxygen.nl/ "Code Documentation. Automated."
[flexible page size support]: https://developer.android.com/guide/practices/page-sizes "Support 16 KB page sizes on Android"
[Material for MkDocs]: https://squidfunk.github.io/mkdocs-material/ "Documentation system"
[Python]: https://en.wikipedia.org/wiki/Python_(programming_language) "Python programming language"
[semver]: https://semver.org/ "Semantic versioning specification"
[Vendor Native Development Kit]: https://source.android.com/docs/core/architecture/vndk "Android Vendor Native Development Kit"

<!-- Abbreviation definitions from includes/abbreviations.md -->
*[API]: Application Programming Interface
*[FR]: False Reject: the recognizer did not trigger when the target phrase was spoken
*[LVCSR]: Large Vocabulary Continuous Speech Recognition model, feed-forward neural net acoustic model with FST decoder
*[NLU]: Natural Language Understanding model
*[OSS]: Open-source software
*[PNC]: Punctuation and Capitalization, an STT model variant that emits cased text with punctuation
*[RAM]: Random Access Memory
*[ROM]: Read-Only Memory, typically nonvolatile flash memory
*[SDK]: Software Development Kit
*[SLM]: Generative Small Language Model
*[SNR]: Signal-to-Noise Ratio
*[STT]: Speech To Text: transformers with language model and CTC decoding
*[THF]: TrulyHandsfree, Sensory's wake word and command recognition technology
*[TNL]: TrulyNatural, Sensory's large-vocabulary speech recognition technology
*[UDT]: User-Defined Trigger: enrolled wake words and command sets
*[VAD]: Voice Activity Detector
