@maccesar/titools 5.2.3 → 5.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/README.md +96 -87
  2. package/docs/examples.md +10 -3
  3. package/package.json +2 -2
  4. package/skills/ti-synthengine/SKILL.md +50 -18
  5. package/skills/ti-synthengine/assets/example/README.md +19 -6
  6. package/skills/ti-synthengine/assets/example/app.js +69 -12
  7. package/skills/ti-synthengine/assets/index.d.ts +106 -0
  8. package/skills/ti-synthengine/references/advanced-examples.md +34 -9
  9. package/skills/ti-synthengine/references/api.md +327 -246
  10. package/skills/ti-synthengine/references/audio-engine.md +28 -14
  11. package/skills/ti-synthengine/references/audio-pipeline-validation.md +1 -1
  12. package/skills/ti-synthengine/references/examples.md +5 -5
  13. package/skills/ti-synthengine/references/guide.md +40 -21
  14. package/skills/ti-synthengine/references/instruments-and-effects.md +164 -0
  15. package/skills/ti-synthengine/references/native-tone-repetition-validation.md +59 -0
  16. package/skills/ti-synthengine/references/native-variation-proposal.md +182 -0
  17. package/skills/ti-synthengine/references/native-variation-validation.md +63 -0
  18. package/skills/ti-synthengine/references/native-variation.md +285 -0
  19. package/skills/ti-synthengine/references/recipes-interaction.md +3 -1
  20. package/skills/ti-synthengine/references/recipes.md +3 -2
  21. package/skills/ti-synthengine/references/recommendations.md +5 -5
  22. package/skills/ti-synthengine/references/sound-design.md +18 -16
  23. package/skills/ti-synthengine/references/source-notes.md +54 -37
  24. package/skills/ti-synthengine/references/source-snapshot.json +188 -144
  25. package/skills/ti-synthengine/references/stats-performance.md +1 -1
  26. package/skills/ti-synthengine/references/troubleshooting.md +43 -35
@@ -1,8 +1,8 @@
1
- > Source snapshot: official TiSynthEngine 1.0.2 documentation from reviewed working-tree source based on `4a45f21230ffc5a8838fbd5fc108dd3ab470362a` (2026-10-29). Upstream `documentation/recommendations.md` SHA-256: `de212dae8b2b362c241cc2b63c7e11cad9db1ff758fd52ffba4fd26ac66bf794`.
1
+ > Source snapshot: official TiSynthEngine documentation at commit `ec04f4e634075c41b55f66279eabcd78b9652d58` (2026-11-02). Published module 1.1.0; public API 1.1.0. Upstream `documentation/recommendations.md` SHA-256: `f72c3df9c36df0cbdb843bbe2c6799ae537324ece499fe6d1a2de80e43df5261`.
2
2
 
3
3
  # Recommendations
4
4
 
5
- The defaults work for ordinary tones and chords. The choices below matter when an app has dense overlap, user-controlled values, demanding speakers or several audio systems sharing one lifecycle.
5
+ The defaults work for ordinary tones and chords. Use the guidance below when an app has dense overlap, user-controlled values, demanding speakers or several audio systems sharing one lifecycle.
6
6
 
7
7
  ## Group simultaneous notes
8
8
 
@@ -87,7 +87,7 @@ Do not copy the frequency maximum into application code. It depends on the activ
87
87
 
88
88
  The same rule applies to `noiseRate`, `lowPassHz` and `filterHz`. Validate a custom `waveTable` as 2 to 64 finite values from -1 to 1, and remember that `bitDepth` accepts zero or an integer from 2 to 16. For `detune`, check the resulting pitch too: a shifted pitch that leaves the frequency range is rejected even when the cents value is in range.
89
89
 
90
- Check Boolean return values during development. A rejected call includes the method, key and reason in the native log. Logging that result at the caller is often enough to identify a stale preset or misspelled field.
90
+ Check each method's documented return value during development: Boolean publication acceptance or a positive sequence ID, with 0 rejecting a sequence. Methods that emit structured validation warnings include the method, key and reason in the native log, but some sequence/control rejection paths do not log. Logging the return at the caller helps identify a stale preset or misspelled field without treating silence in the native log as acceptance.
91
91
 
92
92
  ## Test the intended sound
93
93
 
@@ -103,7 +103,7 @@ Exercise the real worst case:
103
103
  - a route change while a note is playing;
104
104
  - screen off, interruption and background transitions if the product depends on them.
105
105
 
106
- An underrun counter only describes transport. A clean counter cannot tell you whether a waveform, pitch or mix is pleasant.
106
+ An underrun counter describes transport; it cannot tell you whether a waveform, pitch or mix is pleasant.
107
107
 
108
108
  ## Binaural placement
109
109
 
@@ -128,7 +128,7 @@ Use a sample player or a dedicated music engine when a product needs streaming,
128
128
 
129
129
  ## Use effects and held voices deliberately
130
130
 
131
- Use `noteOn` for a sound whose duration follows interaction, such as a key, motor or beam; release its ID on touch end, cancellation, pause or scene teardown. Use `playSequence` for a finite musical cue or repeating grid. Neither needs JavaScript to keep an already accepted note alive. Both share the same 32-slot maximum with collision and interface tones; held notes can be stolen, and an accepted `updateVoice` on a stolen ID is a no-op. Optional priority 0-3 affects stealing; it reserves no voices. There is no voice-finished event.
131
+ Use `noteOn` for a sound whose duration follows interaction, such as a key, motor or beam; release its ID on touch end, cancellation, pause or scene teardown. Use `playSequence` for a finite musical cue or repeating grid. Neither needs JavaScript to keep an already accepted note alive. Both share the same 32-slot maximum with collision and interface tones; held notes can be stolen, and an accepted `updateNote` on a stolen ID is a no-op. Optional priority 0-3 affects stealing; it reserves no voices. There is no voice-finished event.
132
132
 
133
133
  Keep chorus/delay/reverb mixes modest when dialogue or short game feedback must remain distinct. By default they process all four categories, so enabling reverb for a victory chord also affects simultaneous shots and collisions. Select categories with `applyTo` and assign each voice a `bus`, or use explicit `effectSend` values to choose the processed share. All selected voices share one effects chain. Disabling effects lets tails drain for at most 30 seconds; use panic when immediate history invalidation is required. Start with saturation disabled and compare creative drive at matched levels. Do not use saturation as an automatic substitute for the final limiter.
134
134
 
@@ -1,10 +1,12 @@
1
- > Source snapshot: official TiSynthEngine 1.0.2 documentation from reviewed working-tree based on commit `4a45f21230ffc5a8838fbd5fc108dd3ab470362a` (2026-10-29). Upstream `documentation/sound-design.md` SHA-256: `d7dbf023a72b2baaf726c20f6e240795f25095e63124264d8a13d9202b42e1d0`.
1
+ > Source snapshot: official TiSynthEngine documentation at commit `ec04f4e634075c41b55f66279eabcd78b9652d58` (2026-11-02). Published module 1.1.0; public API 1.1.0. Upstream `documentation/sound-design.md` SHA-256: `ac3f4552065051bc5291d8838945ed256ad3b0da7857e1f1cb5f54f5962ebfae`.
2
2
 
3
3
  # Sound design with TiSynthEngine
4
4
 
5
+ Additional [curated recipes](recipes.md) provide application sound and interaction variants.
6
+
5
7
  TiSynthEngine generates sound with oscillators, without recorded samples. Pitch, waveform, envelope, movement and level define each sound, from interface feedback and musical cues to alarms, retro effects and simple percussion.
6
8
 
7
- Additional [curated recipes](recipes.md) provide application sound and interaction variants.
9
+ For the distinction between a playable timbre and a complete effect recipe, start with [instruments, sound effects and complete sequences](instruments-and-effects.md). It covers held keys, independent shots, native sequences, layered effects, demonstrations and shared output headroom.
8
10
 
9
11
  The examples assume the engine is running and use these constants:
10
12
 
@@ -137,27 +139,27 @@ synth.playTone({
137
139
 
138
140
  ## Envelope and total duration
139
141
 
140
- Every event uses an attack, an implicit sustain section and a release:
142
+ A timed tone or chord uses an attack, an implicit sustain section and a release (with an optional decay stage described below):
141
143
 
142
144
  ```text
143
145
  silence -> attack -> full level -> release -> silence
144
146
  |<---------- duration ---------->|
145
147
  ```
146
148
 
147
- `duration` is the total time, not the sustain time. If duration is 500 ms, attack is 50 ms and release is 100 ms, the full-level middle lasts 350 ms.
149
+ `duration` on `playTone` and `playChord` is the total time, not the sustain time. If duration is 500 ms, attack is 50 ms and release is 100 ms, the full-level middle lasts 350 ms. Held voices instead release on `noteOff`; native sequence steps use `duration` for the next-attack interval and `length` or gate for the note deadline. Their release can overlap later attacks. See [the playback contracts](instruments-and-effects.md#3-complete-sound-sequences-and-layered-effects).
148
150
 
149
151
  Short attacks feel immediate. A 0 or 1 ms attack can be useful for percussion, but an abrupt start at an unlucky phase can sound like a click. Values between 5 and 15 ms keep most game feedback crisp without a hard edge.
150
152
 
151
153
  Long attacks soften the onset. Use 100 to 500 ms for pads and slow warnings. Release controls how the sound leaves: 20 to 80 ms feels tight, while several hundred milliseconds leaves a tail.
152
154
 
153
- Explicit attack and release values must fit. These relationships are required:
155
+ For timed tones and chords, explicit attack and release values must fit. These relationships are required:
154
156
 
155
157
  ```text
156
158
  attack < duration
157
159
  release <= duration - attack
158
160
  ```
159
161
 
160
- Defaults are adjusted internally if a very short duration leaves no room, but values supplied by the caller are never reshaped silently.
162
+ Timed defaults are adjusted internally if a very short duration leaves no room; explicit values must pass validation. Native rendering has additional edge rules: held and sequence voices use at least 3 ms attack/release, while iOS timed conversion rounds an accepted zero attack/release to at least one sample and Android preserves zero. Validator acceptance does not establish identical sample envelopes.
161
163
 
162
164
  ## Decay and sustain
163
165
 
@@ -177,7 +179,7 @@ Practical starting regions:
177
179
 
178
180
  `sustain` below 1 needs a nonzero `decay`. Without one the level would jump instantly, which clicks, so the call is rejected with `sustain_without_decay`.
179
181
 
180
- The release scales the level the note has reached. If the release begins while the decay is still running, the note leaves smoothly from that point. The decay still has to fit: `attack` plus `decay` cannot exceed `duration`, and the 50 ms default attack counts. Set a short `attack` explicitly for a tight pluck.
182
+ The release scales the level the note has reached. If the release begins while the decay is still running, the note leaves smoothly from that point. For timed tones and chords, the decay still has to fit: `attack` plus `decay` cannot exceed `duration`, and the 50 ms default attack counts. Set a short `attack` explicitly for a tight pluck.
181
183
 
182
184
  ## Pan and movement
183
185
 
@@ -241,7 +243,7 @@ Filters shape harmonics, so give them a source that has some: `SAWTOOTH`, `SQUAR
241
243
 
242
244
  `filterQ` is the resonance. The default 0.7071 is flat. Values from 2 to 4 add character, and above about 6 the filter whistles around the cutoff. A low-pass or high-pass boosts the cutoff region by about `filterQ`, so Q 10 is roughly 20 dB. Lower the event `volume` as Q goes up. The limiter catches peaks, but a resonance that keeps hitting it makes the whole mix pump. The band-pass keeps unity gain at its center for every Q and only narrows.
243
245
 
244
- `filterHzEnd` moves the cutoff over the whole event. The motion is exponential, so each second covers the same musical distance. Set it above `filterHz` to open the filter and below to close it. Zero disables the sweep.
246
+ For timed tones and chords, `filterHzEnd` moves the cutoff over the whole event. A native sequence sweep instead uses the note length and holds its endpoint during release. The motion is exponential, so each second covers the same musical distance. Set it above `filterHz` to open the filter and below to close it. Zero disables the sweep.
245
247
 
246
248
  ```javascript
247
249
  synth.playTone({
@@ -628,7 +630,7 @@ See [Examples](examples.md) for complete code and [Recommendations](recommendati
628
630
 
629
631
  ## Holding a sound and adding movement
630
632
 
631
- Choose a held voice when the ending follows a player action instead of a fixed duration: motor, charge beam, pad or the last chord of a ceremony. `noteOn` starts a positive app-owned ID; `noteOff` begins release from the current level, and compatible `updateVoice` edits ramp over 10 ms. Distinct IDs remain independent events with fixed gain. Reserve enough capacity for their releases and unrelated effects, and release on cancellation as well as ordinary key up. See the [held motor recipe](advanced-examples.md#sustained-game-motor) for retry/cleanup handling.
633
+ Choose a held voice when the ending follows a player action instead of a fixed duration: motor, charge beam, pad or the last chord of a ceremony. `noteOn` starts a positive app-owned ID; `noteOff` begins release from the current level, and compatible `updateNote` edits ramp over 10 ms. Distinct IDs remain independent events with fixed gain. Reserve enough capacity for their releases and unrelated effects, and release on cancellation as well as ordinary key up. See the [held motor recipe](advanced-examples.md#sustained-game-motor) for retry/cleanup handling.
632
634
 
633
635
  A fanfare can use beat or millisecond sequences with native chords, rests, gate, independent length, swing and pitch-ordered arpeggios. A long release can ring over later steps. Use held voices when release follows presentation or interaction. See [transport usage](guide.md#choose-the-musical-transport).
634
636
 
@@ -636,13 +638,13 @@ The two additional voice LFOs move filter cutoff, square PWM or sine FM index us
636
638
 
637
639
  ## Native space and creative drive
638
640
 
639
- | Processor | What changes | Useful starting region |
640
- | --- | --- | --- |
641
- | Stereo chorus | A short interpolated delay with offset LFO phases adds width and movement. | Rate 0.3 to 0.8 Hz, depth 0.15 to 0.35, mix 0.08 to 0.2. |
642
- | Ping-pong delay | Alternating echoes create rhythmic or spatial repeats. | 180 to 350 ms or synced eighths, feedback 0.15 to 0.35, mix 0.08 to 0.18. |
643
- | Stereo reverb | Damped comb/allpass reflections create a diffuse decay. | Decay 0.8 to 1.8 seconds, damping 0.5 to 0.7, mix 0.08 to 0.18. |
644
- | Optional saturation | Soft waveshaping adds harmonics and changes attack/timbre. | Drive 1.2 to 1.6 with a small blend; compare at matched levels. |
641
+ | Processor | What changes | Useful starting region |
642
+ | ------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
643
+ | Stereo chorus | A short interpolated delay with offset LFO phases adds width and movement. | Rate 0.3 to 0.8 Hz, depth 0.15 to 0.35, mix 0.08 to 0.2. |
644
+ | Ping-pong delay | Alternating echoes create rhythmic or spatial repeats. | 180 to 350 ms or synced eighths, feedback 0.15 to 0.35, mix 0.08 to 0.18. |
645
+ | Stereo reverb | Damped comb/allpass reflections create a diffuse decay. | Decay 0.8 to 1.8 seconds, damping 0.5 to 0.7, mix 0.08 to 0.18. |
646
+ | Optional saturation | Soft waveshaping adds harmonics and changes attack/timbre. | Drive 1.2 to 1.6 with a small blend; compare at matched levels. |
645
647
 
646
648
  All processors are off initially, with input gain 1. Enable one shared chain through `setMasterProcessing`; select `applyTo` categories such as `music` and `ambience` to keep explosions dry. Per-voice `effectSend` overrides that category selection. [Configuration](advanced-examples.md#chorus-delay-reverb-and-creative-saturation) and [exact ranges](api.md#setmasterprocessingoptions) explain chorus, delay, reverb and optional saturation.
647
649
 
648
- Disabling an effect closes its input gradually and drains the tail before exact bypass; it does not immediately erase its history. Panic invalidates histories. Saturation is a creative choice rather than automatic gain protection; the final limiter stays in place. Match dry/wet comparison levels and watch accumulated limiter reduction so a louder version does not win an A/B comparison merely by level. None of these effects makes a small speaker reproduce missing bass.
650
+ Disabling an effect closes its input gradually and drains the tail before exact bypass; it does not immediately erase its history. Panic invalidates histories. Saturation changes the sound and provides no automatic gain protection; the final limiter stays in place. Match dry/wet comparison levels and watch accumulated limiter reduction so a louder version does not win an A/B comparison merely by level. None of these effects makes a small speaker reproduce missing bass.
@@ -1,27 +1,30 @@
1
1
  # Maintaining the synthesis snapshot
2
2
 
3
- These references describe **TiSynthEngine module 1.0.2, public API 1.0.0**.
4
- The corrected official documentation is a reviewed working tree based on
5
- `4a45f21230ffc5a8838fbd5fc108dd3ab470362a`, recorded with its exact fingerprint in
6
- [source-snapshot.json](source-snapshot.json). The documentation corrections are
7
- not represented as committed by that base revision. Review date: 2026-10-29.
3
+ These references cover **published module 1.1.0 with public API 1.1.0**. Older 1.0.2 packages retain API 1.0.0 and lack attack variation and finite-tone repetition. All sixteen official Markdown documents were reviewed; fourteen are mirrored into fifteen parts, with explicit index/notices exclusions. The snapshot anchors committed official sources at `ec04f4e634075c41b55f66279eabcd78b9652d58`: official prose corrections remove a stale local-package label and statistics-method count and document the verified native interval edge. Those documentation corrections are committed and pushed to official main; the already published 1.1.0 ZIPs retain their original documentation. Exact source/mirror hashes are in [source-snapshot.json](source-snapshot.json). Review date: 2026-11-02.
8
4
 
9
5
  ## Public downloads and artifact provenance
10
6
 
11
- The replacement packages were freshly downloaded from the existing public URLs
12
- on 2026-10-30 UTC (2026-10-29 locally), rather than reusing cached 1.0.2 files.
7
+ Both public 1.1.0 platform releases target `7cd035409453b01df2736aef56f2316d94ca019c`. Their ZIPs were downloaded on 2026-11-02; SHA-256 matches the GitHub asset digests and full ZIP CRC checks pass. Manifests declare module 1.1.0, minimum Titanium 13.2.0.GA, four Android ABIs and Apple Mac Catalyst support. Packaged `index.d.ts` files match the official source and the bundled [declaration asset](../assets/index.d.ts) byte for byte. Native manifest `apiversion` is separate from JavaScript `apiVersion`. No binary was installed on a device during this update.
8
+
9
+ | Platform | Current public release | Package SHA-256 |
10
+ | --- | --- | --- |
11
+ | Android | [android-1.1.0](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.1.0) | `69dea7daaa8b5dd77f7a3d4d6e6ad801e2a0bd48f9e2c79b9caf584dd56e36eb` |
12
+ | iOS / Mac Catalyst | [ios-1.1.0](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.1.0) | `c426fed49d78926f8dd4e176addaebf0cb0fe4592c5eb48c842aef833ad798b4` |
13
+
14
+ ### Historical 1.0.2 artifact verification
15
+
16
+ The following replacement packages were downloaded and verified on 2026-10-30 UTC (2026-10-29 locally). Their checks remain historical evidence; they are not the current 1.1.0 downloads.
13
17
 
14
18
  | Platform | Published release | Replacement package SHA-256 |
15
19
  | --- | --- | --- |
16
20
  | Android | [android-1.0.2](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.0.2) | `8698104f188782a77699fbd6308a779ca0b190833ceebf398557b628af1b8bbe` |
17
21
  | iOS / Mac Catalyst | [ios-1.0.2](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.0.2) | `779e77d018d5b3f686d69cb1b4b0162281803ea12691487df565c1fd15175c58` |
18
22
 
19
- Both ZIPs passed full CRC checks and match the current GitHub asset SHA-256
20
- digests. These hashes replace the original 1.0.2 packages' hashes; filenames and
23
+ Both ZIPs passed full CRC checks and matched the GitHub asset SHA-256 digests at that verification. These hashes replace the original 1.0.2 packages' hashes; filenames and
21
24
  release URLs did not change. Manifests report module `ti.synthengine`, version
22
25
  `1.0.2`, minimum Titanium `13.2.0.GA`, four Android ABIs and Apple Mac Catalyst
23
26
  support. The manifest's native `apiversion` field is distinct from the JavaScript
24
- contract's `apiVersion: '1.0.0'`, which remains unchanged.
27
+ 1.0.2 contract's `apiVersion: '1.0.0'`.
25
28
 
26
29
  All eight Android native libraries (inside the AAR) and three Apple static
27
30
  libraries match the preserved original 1.0.2 release packages byte for byte.
@@ -32,15 +35,14 @@ app-root ZIP installation and both `tiapp.xml` declarations.
32
35
 
33
36
  ## Sources and permitted transformations
34
37
 
35
- Nine official Markdown documents are mirrored into ten parts, including the
36
- ordered examples/advanced-examples split. The current snapshot inventories all
38
+ Fourteen official Markdown documents are mirrored into fifteen parts, including the ordered examples/advanced-examples split. New references preserve the complete [instruments/effects guide](instruments-and-effects.md), [implemented variation contract](native-variation.md), [historical proposal](native-variation-proposal.md) and [variation verification](native-variation-validation.md). The proposal is historical design context, not an outstanding implementation plan. The current snapshot inventories all
37
39
  complete JSON reports, bundled example assets and linked raw-evidence archives.
38
- The new [performance review](performance-review.json) and its raw archive are
40
+ The historical [performance review](performance-review.json) and its raw archive are
39
41
  preserved alongside historical reports; none is replaced by a favorable summary.
40
42
  Read snapshot records for exact counts and hashes. Example JavaScript and raw
41
43
  reports/archives remain byte-identical to source.
42
44
 
43
- Each Markdown part and the example README have a reviewed working-tree provenance header and recorded navigation transformations. Native-backed corrections to stale official prose are also declared as reversible `link_fixes`; the source hash still identifies the original official text, not the corrected mirror. Reversible `link_fixes` rebase links into the split advanced examples, preserve [curated recipes](recipes.md), and resolve current example links to bundled assets. The example README points back to this skill's current API and guides. All three example JavaScript files remain byte-identical to source; none requires a historical GitHub snapshot.
45
+ Each Markdown part and the example README have a committed-source provenance header and recorded navigation transformations. Verified API, timing, spatial, panic, processing and diagnostic corrections were applied to the official module documentation before synchronization. They are shared source content, not mirror-only errata. Remaining `link_fixes` record navigation and curated entry points; the source hash identifies the exact reviewed official text, including the committed prose corrections. Reversible `link_fixes` rebase links into the split advanced examples, preserve [curated recipes](recipes.md), and resolve current example links to bundled assets. The example README points back to this skill's current API and guides. All three example JavaScript files remain byte-identical to source; none requires a historical GitHub snapshot.
44
46
 
45
47
  The fidelity regression strips provenance/navigation, concatenates example parts, reverses declared transformations and compares the complete source hash. Raw records must remain byte-identical. Update transformations intentionally; never change hashes merely to hide unexplained source drift.
46
48
 
@@ -52,7 +54,7 @@ Focused executable recipe tests inspect submitted intervals, envelope lengths, p
52
54
 
53
55
  ## Current contract and acceptance boundaries
54
56
 
55
- `start` configures one engine, up to 32 shared voices and one to four preallocated sequence slots. `playSequence` is the only successive-sound scheduler and returns a positive ID or zero. Sequence edits, state queries and cancellation name that ID. Global `setTempo` governs beat timing and synchronized modulation; millisecond sequences retain fixed times. Finite playback is the default, and circular patterns explicitly opt into looping.
57
+ `start` configures one engine, up to 32 shared voices and one to four preallocated sequence slots. `playSequence` schedules scores and returns a positive sequence ID or zero. `repeatTone` preserves the complete finite renderer for one repeating recipe and returns a positive tone ID or zero; its 32 slots are independent of the sequence slots, while admitted attacks share the voice pool. Sequence edits, state queries and cancellation name that ID. Global `setTempo` governs beat timing and synchronized modulation; millisecond sequences retain fixed times. Finite playback is the default, and circular patterns explicitly opt into looping.
56
58
 
57
59
  Selective `music`, `effects`, `ui` and `ambience` categories feed one shared effect chain; an explicit per-voice send overrides category selection. Live spatial position, noise clock, low-pass cutoff and compatible continuous voice controls ramp over 10 ms while preserving history. Priorities protect higher-priority voices without reserved quotas. See the [API](api.md) for exact limits, source compatibility, return values and event delivery.
58
60
 
@@ -82,11 +84,10 @@ fixed-gain recommendations target the measured 1–8-voice configuration, with
82
84
  underrun remains unresolved, including independent silent Oboe reproduction.
83
85
  Route-wide latency, Bluetooth and extended maximum-load acceptance remain open.
84
86
 
85
- Official corrections now preserve panic cancellation (`stopAll` stops every
87
+ Official documentation corrections preserve panic cancellation (`stopAll` stops every
86
88
  sequence and invalidates effect histories), compatible live `updateVoice`
87
89
  noise/low-pass/spatial/send edits, and category selection with `applyTo` plus
88
- explicit `effectSend` overrides. Their superseded mirror errata were removed;
89
- remaining native-backed errata and curated recipe navigation stay reversible.
90
+ explicit `effectSend` overrides. The matching mirror-only errata were removed from the transformation list; curated recipe navigation remains reversible.
90
91
  Android and Apple production callback tests now run in CI; the historical Java
91
92
  DSP model is not the production audio oracle. No native binaries were installed
92
93
  or device/listening tests rerun during this skill update.
@@ -110,12 +111,10 @@ bypass, memory and strict Frontier presentation criteria. Current evidence and
110
111
  rejected candidates must not be combined into a general pass. This skill update
111
112
  did not rerun devices, install binaries or alter native source.
112
113
 
113
- The earlier native findings were independently rechecked against the
114
- 1.0.2 source on October 29. These current differences remain explicit;
115
- hash fidelity alone cannot establish them:
114
+ The native differences below were rechecked against current sources on November 2 and are now documented accurately in the official API/engine guides as well as the mirrors. They describe implementation differences, not unresolved documentation contradictions:
116
115
 
117
- - iOS timed tone/chord command construction still rounds accepted zero attack
118
- and release to at least one sample; Android preserves zero. Validator
116
+ - iOS timed tone/chord command construction initially rounds accepted zero attack
117
+ and release to one sample before duration-budget trimming; Android preserves zero. Validator
119
118
  acceptance does not establish identical sample envelopes.
120
119
  - iOS early tempo/sequence/processing rejections and incompatible held spatial/
121
120
  modulation edits can bypass rejection counters. Android also leaves some
@@ -124,21 +123,39 @@ hash fidelity alone cannot establish them:
124
123
  - Sequence cutoff coefficients currently refresh every 16 samples on Android
125
124
  and every 8 samples on Apple; both use note length but do not promise identical
126
125
  sample output. See [engine details](audio-engine.md).
127
- - Android `getDefaults()` additionally returns `capabilities` and
128
- `limits.stepDurationMs`; iOS omits those keys. Both platforms return
129
- `limits.maxSequences`, `limits.priority` and `limits.effectSend`. Detect
130
- required methods rather than requiring Android-only metadata flags. Sequence
131
- intervals use different beat and millisecond ranges; see [API](api.md).
132
- - Remaining stale official claims are corrected only where verified against
133
- current native behavior, with exact reversible transformations. Corrections
134
- already adopted upstream are removed from the transformation list.
135
-
136
-
137
- These findings are skill corrections and module implementation findings, not
138
- native fixes. No module code, public range or hardware acceptance was changed.
126
+ - Published 1.1.0 returns `capabilities.variation: true` and `variationSchemaVersion: 1` on both platforms. Android also reports native sequence/master processing/modulation flags and `limits.stepDurationMs`; iOS omits those additional entries. Published 1.0.2 does not accept variation. Both platforms return sequence-capacity, priority and send limits; use the [API](api.md) for exact beat/millisecond ranges.
127
+ - Official examples now bind their waveform constants and document native sequence modulation, complete effect fidelity and publication ownership correctly. The mirrors preserve the same facts.
128
+
129
+
130
+ These are official-documentation and skill corrections, not native implementation fixes. No module code, public range or hardware acceptance was changed.
139
131
  A validator corpus establishes accepted/rejected dictionaries, not sample-identical
140
- rendering on a physical device. Consumer scenarios and exact native locators
141
- are recorded in the maintainer's October 23 audit evidence.
132
+ rendering on a physical device. Current source-first coverage ledgers and native locators are recorded in the maintainer's November 2 audit evidence.
133
+
134
+ ## Published 1.1.0 attack variation
135
+
136
+ Both platforms validate eight bounded parameter ranges and select once per admitted attack. Require the capability/schema pair and omit the property entirely on published 1.0.2, including amount zero. The [variation guide](native-variation.md) preserves exact bounds, linear amount, pitch ratio, source prerequisites, per-chord ordinals, held stability, whole-dictionary step replacement, revision merging and deterministic seed identity. `updateNote` and its deprecated `updateVoice` alias reject the attack dictionary. Preserve all of the authored envelope, cadence, routing and layer gains.
137
+
138
+ The [verification report](native-variation-validation.md) separates initial host/build checks from later consumer installations and scoped listening feedback. It records the 144-byte configuration and four-transport growth from 8,627,712 to 9,537,152 bytes, excluding other engine/bridge/process storage. Earlier 1.0.2 memory reports remain historical. Host callback timings do not prove device overhead or sustained acceptance.
139
+
140
+ The earlier variation audit reran the paired production validators (156 cases per platform). This repetition update ran the focused shared scheduler, Android production renderer, Java bridge, Apple exact-render host and Android tone contract checks, plus official documentation/example and TiTools mirror/recipe checks. New source inspection verified sampling/admission and sequence seed identity. Historical renderer PCM, native build, consumer install and listening results were read with their original boundaries; they were not repeated or expanded into general device acceptance. No native source or binary was changed.
141
+
142
+ All thirteen raw JSON/ZIP records moved upstream from `documentation/` to `docs/validation/` without changing bytes. Their distributed skill paths are preserved; the snapshot now records their actual upstream locations. All five ZIPs passed CRC checks. The three example JavaScript assets remain byte-identical; `app.js` now includes the capability-gated attack-variation action.
143
+
144
+ ## Finite-tone repetition and compatibility
145
+
146
+ Read the complete [API](api.md#finite-tone-repetition), [effect fidelity guide](instruments-and-effects.md) and [repetition verification](native-tone-repetition-validation.md). Require `capabilities.toneRepetition === true` and the three repetition methods before enabling controls. `playTone` remains Boolean standalone playback and rejects `intervalMs`; independent event-driven calls and deliberate finite JavaScript bursts are supported, with application-owned timer cleanup. Native repetition provides a sample-clock cadence independent of tempo.
147
+
148
+ `repeatTone` requires integer `intervalMs` 1–60,000. `updateTone` validates partial changes merged with the latest accepted recipe, keeps the next deadline and applies the new interval after that attack. Active voices retain their admitted recipe. `stopTone` cancels future attacks at the next render block, even under ordinary queue saturation, and lets admitted finite voices finish. There is no `toneend`; IDs are never reused over shutdown/start. Global stop and shutdown invalidate repetitions. A positive ID does not guarantee every future attack is admitted; reserve for overlapping finite lifetimes and other sounds.
149
+
150
+ Each repetition retains its own admitted-attack variation stream. A replacement variation dictionary replaces the whole prior dictionary; amount zero disables future variation, seed changes restart the stream, and rejected attacks do not consume a selection. The new report separately records 617,744 Android and 620,048 Apple transport bytes and scoped host measurements; earlier sequence/variation storage and device evidence do not measure repetition overhead.
151
+
152
+ Use `updateNote` for current held-voice edits and `enableStats`/`disableStats` for current diagnostics. `updateVoice` and `setStatsEnabled` remain deprecated compatibility aliases, without scheduled removal or repeated runtime warnings. Older 1.0.2 binaries need method detection and their original aliases; never send new closed-dictionary fields speculatively.
153
+
154
+ ### Known native interval edge
155
+
156
+ The documented interval contract requires an integer. Android rejects `intervalMs: 1.0000000001`; the reviewed Apple validator accepts it within its 1e-9 integer tolerance and command conversion truncates it to 1. This was independently reproduced against the production validators. Always submit exact integer milliseconds; do not rely on Apple's acceptance. This native edge remains unresolved: no native source or published binary was changed by the skill update. It is separate from the existing platform zero-envelope and diagnostic differences above.
157
+
158
+ The declaration asset is a byte-identical official aid, not a runtime validator: TypeScript `number` cannot prove finite/integer/range constraints or native state/capacity. Its original candidate comment is preserved as source text, while current release provenance is recorded above. Preserve historical API 1.0.0 wording inside dated variation reports/proposals rather than relabeling their evidence as current acceptance.
142
159
 
143
160
  ## Upstream documents outside the mirror set
144
161