@maccesar/titools 5.2.5 → 5.4.0

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 (138) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +58 -97
  3. package/agents/ti-pro.md +4 -2
  4. package/commands/ti-audit.md +7 -5
  5. package/docs/examples.md +24 -13
  6. package/docs/knowledge-index.md +2 -1
  7. package/lib/config.js +1 -0
  8. package/package.json +1 -1
  9. package/skills/alloy-guides/SKILL.md +18 -179
  10. package/skills/alloy-guides/references/CLI_TASKS.md +17 -216
  11. package/skills/alloy-guides/references/CONCEPTS.md +27 -162
  12. package/skills/alloy-guides/references/CONTROLLERS.md +38 -236
  13. package/skills/alloy-guides/references/MODELS.md +47 -723
  14. package/skills/alloy-guides/references/MODELS_ADVANCED.md +21 -482
  15. package/skills/alloy-guides/references/VIEWS_DYNAMIC.md +12 -222
  16. package/skills/alloy-guides/references/VIEWS_STYLES.md +39 -358
  17. package/skills/alloy-guides/references/VIEWS_XML.md +36 -552
  18. package/skills/alloy-guides/references/WIDGETS.md +49 -127
  19. package/skills/alloy-howtos/SKILL.md +14 -169
  20. package/skills/alloy-howtos/references/best_practices.md +9 -113
  21. package/skills/alloy-howtos/references/cli_reference.md +18 -223
  22. package/skills/alloy-howtos/references/config_files.md +50 -133
  23. package/skills/alloy-howtos/references/debugging_troubleshooting.md +19 -63
  24. package/skills/alloy-howtos/references/samples.md +21 -138
  25. package/skills/ti-api/SKILL.md +10 -2
  26. package/skills/ti-api/references/api-android.md +36 -2
  27. package/skills/ti-api/references/api-app-platform.md +39 -3
  28. package/skills/ti-api/references/api-core.md +50 -18
  29. package/skills/ti-api/references/api-data-network.md +49 -35
  30. package/skills/ti-api/references/api-media.md +45 -27
  31. package/skills/ti-api/references/api-services.md +39 -9
  32. package/skills/ti-api/references/api-ui-android.md +33 -13
  33. package/skills/ti-api/references/api-ui-extras.md +41 -15
  34. package/skills/ti-api/references/api-ui-ios-animator.md +42 -26
  35. package/skills/ti-api/references/api-ui-ios.md +74 -2
  36. package/skills/ti-api/references/api-ui-lists.md +32 -16
  37. package/skills/ti-api/references/api-ui-text-input.md +34 -17
  38. package/skills/ti-api/references/api-ui-views.md +27 -1
  39. package/skills/ti-api/references/api-ui-windows-navigation.md +32 -18
  40. package/skills/ti-api/references/api-xml-global.md +66 -16
  41. package/skills/ti-create-release/SKILL.md +98 -0
  42. package/skills/ti-create-release/references/module-discovery.md +69 -0
  43. package/skills/ti-expert/references/adaptive-layouts.md +1 -1
  44. package/skills/ti-guides/SKILL.md +37 -76
  45. package/skills/ti-guides/references/advanced-data-and-images.md +122 -126
  46. package/skills/ti-guides/references/android-manifest.md +24 -83
  47. package/skills/ti-guides/references/app-distribution.md +31 -377
  48. package/skills/ti-guides/references/application-frameworks.md +127 -335
  49. package/skills/ti-guides/references/cli-reference.md +184 -633
  50. package/skills/ti-guides/references/commonjs-advanced.md +81 -231
  51. package/skills/ti-guides/references/compatibility-matrix.md +36 -75
  52. package/skills/ti-guides/references/hello-world.md +95 -70
  53. package/skills/ti-guides/references/hyperloop-native-access.md +52 -448
  54. package/skills/ti-guides/references/resources.md +174 -142
  55. package/skills/ti-guides/references/sdk-release-notes.md +28 -71
  56. package/skills/ti-guides/references/tiapp-config.md +222 -598
  57. package/skills/ti-howtos/SKILL.md +23 -123
  58. package/skills/ti-howtos/references/cross-platform-development.md +119 -324
  59. package/skills/ti-howtos/references/debugging-profiling.md +77 -445
  60. package/skills/ti-howtos/references/extending-titanium.md +199 -673
  61. package/skills/ti-howtos/references/local-data-sources.md +87 -300
  62. package/skills/ti-howtos/references/location-and-maps.md +86 -213
  63. package/skills/ti-howtos/references/media-apis.md +103 -223
  64. package/skills/ti-howtos/references/notification-services.md +86 -506
  65. package/skills/ti-howtos/references/remote-data-sources.md +97 -316
  66. package/skills/ti-howtos/references/using-modules.md +77 -133
  67. package/skills/ti-synthengine/SKILL.md +62 -111
  68. package/skills/ti-synthengine/assets/example/README.md +50 -59
  69. package/skills/ti-synthengine/assets/example/app.js +67 -65
  70. package/skills/ti-synthengine/assets/example/lib/sequenceOwner.js +39 -40
  71. package/skills/ti-synthengine/assets/example/lib/soundPreset.js +34 -0
  72. package/skills/ti-synthengine/assets/index.d.ts +122 -2
  73. package/skills/ti-synthengine/references/advanced-examples.md +4 -4
  74. package/skills/ti-synthengine/references/api.md +40 -18
  75. package/skills/ti-synthengine/references/audio-engine.md +15 -57
  76. package/skills/ti-synthengine/references/examples.md +63 -6
  77. package/skills/ti-synthengine/references/guide.md +61 -57
  78. package/skills/ti-synthengine/references/instruments-and-effects.md +15 -15
  79. package/skills/ti-synthengine/references/native-variation.md +53 -14
  80. package/skills/ti-synthengine/references/recipes-interaction.md +25 -20
  81. package/skills/ti-synthengine/references/recipes.md +19 -16
  82. package/skills/ti-synthengine/references/recommendations.md +12 -12
  83. package/skills/ti-synthengine/references/sound-api.md +197 -0
  84. package/skills/ti-synthengine/references/sound-design.md +7 -7
  85. package/skills/ti-synthengine/references/source-notes.md +62 -172
  86. package/skills/ti-synthengine/references/troubleshooting.md +17 -19
  87. package/skills/ti-synthengine/references/upgrade-2.0.0.md +40 -0
  88. package/skills/ti-ui/SKILL.md +28 -143
  89. package/skills/ti-ui/references/icons-and-splash-screens.md +74 -403
  90. package/skills/ti-ui/references/layouts-and-positioning.md +175 -402
  91. package/skills/ti-ui/references/listviews-and-performance.md +100 -703
  92. package/skills/ti-ui/references/platform-conventions.md +180 -0
  93. package/skills/ti-ui/references/user-interface.md +43 -0
  94. package/skills/alloy-guides/references/VIEWS_WITHOUT_CONTROLLERS.md +0 -102
  95. package/skills/alloy-howtos/references/custom_tags.md +0 -148
  96. package/skills/ti-guides/references/coding-best-practices.md +0 -149
  97. package/skills/ti-guides/references/javascript-primer.md +0 -414
  98. package/skills/ti-guides/references/reserved-words.md +0 -36
  99. package/skills/ti-guides/references/style-and-conventions.md +0 -103
  100. package/skills/ti-howtos/references/android-platform-deep-dives.md +0 -624
  101. package/skills/ti-howtos/references/automation-fastlane-appium.md +0 -96
  102. package/skills/ti-howtos/references/buffer-codec-streams.md +0 -162
  103. package/skills/ti-howtos/references/google-maps-v2.md +0 -172
  104. package/skills/ti-howtos/references/ios-map-kit.md +0 -149
  105. package/skills/ti-howtos/references/ios-platform-deep-dives.md +0 -611
  106. package/skills/ti-howtos/references/tutorials.md +0 -565
  107. package/skills/ti-howtos/references/web-content-integration.md +0 -287
  108. package/skills/ti-howtos/references/webpack-build-pipeline.md +0 -124
  109. package/skills/ti-synthengine/references/android-sim80-correction-evidence.zip +0 -0
  110. package/skills/ti-synthengine/references/android-sim80-correction.json +0 -162
  111. package/skills/ti-synthengine/references/audio-pipeline-validation.md +0 -19
  112. package/skills/ti-synthengine/references/bypass-physical-recheck-evidence.zip +0 -0
  113. package/skills/ti-synthengine/references/frontier-android-evidence.zip +0 -0
  114. package/skills/ti-synthengine/references/frontier-ipad-evidence.zip +0 -0
  115. package/skills/ti-synthengine/references/frontier-physical-validation.json +0 -1918
  116. package/skills/ti-synthengine/references/native-tone-repetition-validation.md +0 -59
  117. package/skills/ti-synthengine/references/native-variation-proposal.md +0 -182
  118. package/skills/ti-synthengine/references/native-variation-validation.md +0 -63
  119. package/skills/ti-synthengine/references/performance-review-evidence.zip +0 -0
  120. package/skills/ti-synthengine/references/performance-review.json +0 -1146
  121. package/skills/ti-synthengine/references/physical-validation.json +0 -1457
  122. package/skills/ti-synthengine/references/source-snapshot.json +0 -542
  123. package/skills/ti-synthengine/references/stats-performance.json +0 -2992
  124. package/skills/ti-synthengine/references/stats-performance.md +0 -82
  125. package/skills/ti-synthengine/references/studio-validation.json +0 -6202
  126. package/skills/ti-synthengine/references/unified-bypass-performance.json +0 -22425
  127. package/skills/ti-synthengine/references/unified-validation.json +0 -314
  128. package/skills/ti-ui/references/accessibility-deep-dive.md +0 -288
  129. package/skills/ti-ui/references/animation-and-matrices.md +0 -569
  130. package/skills/ti-ui/references/application-structures.md +0 -626
  131. package/skills/ti-ui/references/custom-fonts-styling.md +0 -549
  132. package/skills/ti-ui/references/event-handling.md +0 -401
  133. package/skills/ti-ui/references/gestures.md +0 -448
  134. package/skills/ti-ui/references/orientation.md +0 -374
  135. package/skills/ti-ui/references/platform-ui-android.md +0 -727
  136. package/skills/ti-ui/references/platform-ui-ios.md +0 -576
  137. package/skills/ti-ui/references/scrolling-views.md +0 -288
  138. package/skills/ti-ui/references/tableviews.md +0 -542
@@ -1,287 +0,0 @@
1
- # Web content integration
2
-
3
- ## 1. The WebView component
4
-
5
- ### WKWebView (Titanium SDK 8.0.0+)
6
- As of Titanium SDK 8.0.0, WKWebView is the only supported web view on iOS. UIWebView was deprecated and removed. WKWebView behaves differently, so plan for that.
7
-
8
- ### Basic WebView creation
9
-
10
- Remote URL:
11
- ```javascript
12
- const webview = Ti.UI.createWebView({
13
- url: 'https://titaniumsdk.com'
14
- });
15
- win.add(webview);
16
- win.open();
17
- ```
18
-
19
- Local HTML:
20
- ```javascript
21
- const webview = Ti.UI.createWebView({
22
- url: 'local.html' // Relative to Resources or app/assets/app/lib
23
- });
24
- win.add(webview);
25
- ```
26
-
27
- Inline HTML:
28
- ```javascript
29
- const webview = Ti.UI.createWebView({
30
- html: '<html><body><h1>Hello</h1></body></html>'
31
- });
32
- ```
33
-
34
- ### Local web content with assets
35
- Local content can include CSS, JS, and images. Paths are relative to Resources (Classic) or app/assets/app/lib (Alloy).
36
-
37
- `local.html`:
38
- ```html
39
- <html>
40
- <head>
41
- <link rel="stylesheet" type="text/css" href="local.css"/>
42
- <script src="local.js"></script>
43
- </head>
44
- <body>
45
- <p>Local content</p>
46
- </body>
47
- </html>
48
- ```
49
-
50
- ### WebView properties and methods
51
-
52
- Navigation:
53
- - `canGoBack()` - returns true if possible to go back
54
- - `canGoForward()` - returns true if possible to go forward
55
- - `goBack()` - navigate back in history
56
- - `goForward()` - navigate forward in history
57
-
58
- Load control:
59
- - `loading` (Boolean) - current loading state
60
- - `reload()` - refresh the page
61
- - `stopLoading()` - stop loading
62
- - `repaint()` - force repaint
63
-
64
- Data handling:
65
- - `url` - local or remote URL
66
- - `html` - inline HTML string
67
- - `scalesPageToFit` - scale content to dimensions
68
- - `setBasicAuthentication(host, username, password)` - HTTP auth
69
-
70
- ```javascript
71
- webView.setBasicAuthentication('myDomain.com', 'username', 'password');
72
- ```
73
-
74
- Events:
75
- - `beforeload` - fires before loading begins (`e.url` contains the source)
76
- - `load` - fires when content has loaded
77
- - `error` - fires on load failures (`e.url`, `e.message`)
78
-
79
- ## 2. Communication between WebViews and Titanium
80
-
81
- ### Local web content communication
82
-
83
- Logging from WebView: Ti.API methods work inside local HTML.
84
-
85
- ```html
86
- <html>
87
- <body onload="Ti.API.info('Page loaded!');">
88
- <p>Logging works!</p>
89
- </body>
90
- </html>
91
- ```
92
-
93
- Bidirectional events with `Ti.App`:
94
-
95
- In local HTML:
96
- ```html
97
- <html>
98
- <head>
99
- <script>
100
- // Listen for events from Titanium
101
- Ti.App.addEventListener('app:fromTitanium', (e) => {
102
- alert(e.message);
103
- document.getElementById('output').textContent = e.message;
104
- });
105
-
106
- // Send event to Titanium
107
- function sendToApp() {
108
- Ti.App.fireEvent('app:fromWebView', {
109
- message: 'Hello from WebView!'
110
- });
111
- }
112
- </script>
113
- </head>
114
- <body>
115
- <button onclick="sendToApp()">Send to Titanium</button>
116
- <div id="output"></div>
117
- </body>
118
- </html>
119
- ```
120
-
121
- In Titanium:
122
- ```javascript
123
- const webview = Ti.UI.createWebView({ url: 'local.html' });
124
-
125
- // Listen for events from the WebView
126
- Ti.App.addEventListener('app:fromWebView', (e) => {
127
- alert(e.message);
128
- });
129
-
130
- // Send event to the WebView
131
- const button = Ti.UI.createButton({
132
- title: 'Send to WebView'
133
- });
134
- button.addEventListener('click', () => {
135
- Ti.App.fireEvent('app:fromTitanium', {
136
- message: 'Hello from Titanium!'
137
- });
138
- });
139
- ```
140
-
141
- ### Remote web content communication
142
-
143
- Titanium statements (`Ti.API`, `Ti.App`) do not work in remote HTML content.
144
-
145
- Warning: On iOS 12.0+, calling `evalJS()` synchronously from some contexts can deadlock. Prefer the async version with a callback.
146
-
147
- #### Using `evalJS()` for remote content
148
- Inject JavaScript and retrieve results as strings:
149
-
150
- ```javascript
151
- const webview = Ti.UI.createWebView({ url: 'https://example.com' });
152
-
153
- webview.addEventListener('load', (e) => {
154
- // Get the page title
155
- const title = webview.evalJS('document.title');
156
- Ti.API.info(`Page title: ${title}`);
157
-
158
- // Get cookies
159
- const cookies = webview.evalJS('document.cookie');
160
- Ti.API.info(`Cookies: ${cookies}`);
161
-
162
- // Execute a custom function
163
- webview.evalJS('alert("Hello from Titanium!");');
164
- });
165
- ```
166
-
167
- `evalJS()` rules:
168
- - Call it from the `load` event (page must be loaded)
169
- - Pass code as a single string
170
- - Returns a string (or null)
171
- - Use `JSON.stringify()` for complex data
172
-
173
- #### Passing data to remote content
174
-
175
- ```javascript
176
- webview.addEventListener('load', () => {
177
- const data = { user: 'John', score: 100 };
178
- webview.evalJS(`window.appData = ${JSON.stringify(data)};`);
179
- });
180
- ```
181
-
182
- Then in remote HTML:
183
- ```html
184
- <script>
185
- console.log(window.appData.user); // 'John'
186
- </script>
187
- ```
188
-
189
- ## 3. Performance and interaction concerns
190
-
191
- ### WebView performance
192
- WebView consumes significant resources:
193
- - Each WebView has its own rendering context
194
- - Memory overhead is high
195
- - Load time is independent of content complexity
196
-
197
- Best practice: if you can recreate the content with native Titanium components, do it.
198
-
199
- ### WebView in TableViews
200
- Anti-pattern: embedding WebViews in TableViewRows causes slow scrolling.
201
-
202
- ### WebView in scrollable components
203
- WebViews do not behave well inside other scrollable containers (ScrollView, TableView). They consume touch events.
204
-
205
- Workaround: set `touchEnabled: false` on the WebView if it sits inside a scrollable parent:
206
-
207
- ```javascript
208
- const webview = Ti.UI.createWebView({
209
- url: 'content.html',
210
- touchEnabled: false // Allow parent to handle touches
211
- });
212
- ```
213
-
214
- ### Viewport meta tag
215
- For mobile-optimized content, use the viewport meta tag:
216
-
217
- ```html
218
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
219
- ```
220
-
221
- ## 4. WebView use cases
222
-
223
- Common WebView use cases:
224
- - HTML forms: auto-scroll to focused fields, next/previous navigation, native keyboard integration
225
- - Rich text or HTML email: render styled content that is hard to replicate with native labels
226
- - Canvas/graphics: HTML5 Canvas provides 2D drawing not available in native Titanium APIs
227
- - OAuth flows: load third-party auth pages in a WebView and intercept redirects
228
-
229
- ### Authentication flows
230
- Many OAuth providers use WebView for login (for example, the Facebook module).
231
-
232
- ```javascript
233
- const authWebView = Ti.UI.createWebView({
234
- url: 'https://auth.example.com/oauth'
235
- });
236
-
237
- authWebView.addEventListener('load', (e) => {
238
- // Detect redirect to callback URL with token
239
- if (e.url.indexOf('myapp://callback') === 0) {
240
- const token = extractTokenFromUrl(e.url);
241
- Ti.App.fireEvent('auth:success', { token: token });
242
- }
243
- });
244
- ```
245
-
246
- ### Canvas and graphics
247
- For complex graphics, use HTML5 Canvas:
248
-
249
- `local.html`:
250
- ```html
251
- <canvas id="myCanvas" width="300" height="200"></canvas>
252
- <script>
253
- const ctx = document.getElementById('myCanvas').getContext('2d');
254
- ctx.fillStyle = 'green';
255
- ctx.fillRect(10, 10, 150, 100);
256
- </script>
257
- ```
258
-
259
- ## 5. WKWebView behavioral differences (iOS)
260
-
261
- - Cookies: WKWebView uses a separate cookie store from `Ti.Network`. Cookies set via HTTPClient are not shared with WebViews.
262
- - `localStorage`/`sessionStorage`: not shared between the native app and the WebView. Each WKWebView has its own storage.
263
- - `evalJS` is async: on iOS 12.0+, synchronous `evalJS()` can deadlock. Use the callback form instead:
264
-
265
- ```javascript
266
- webView.evalJS('document.title', (result) => {
267
- Ti.API.info(`Title: ${result}`);
268
- });
269
- ```
270
-
271
- - Viewport meta tag required: WKWebView needs an explicit viewport tag to scale content correctly:
272
-
273
- ```html
274
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
275
- ```
276
-
277
- - Custom fonts: use a special `@font-face` path format in WKWebView CSS. Fonts must be in the app bundle and referenced correctly.
278
- - Remote HTML limitations: `Ti.API`, `Ti.App.fireEvent()`, and other Titanium calls do not work in remotely-loaded HTML. Only local HTML can communicate with the Titanium runtime.
279
-
280
- ## Best practices summary
281
-
282
- 1. Avoid WebViews when possible. Use native components.
283
- 2. Never embed a WebView in a TableView.
284
- 3. Use local content for integration. Only local content supports `Ti.App` events.
285
- 4. Use `evalJS()` for remote content. It is the only way to interact with remote pages.
286
- 5. Wait for the `load` event before calling `evalJS()`.
287
- 6. Configure the viewport for proper mobile rendering.
@@ -1,124 +0,0 @@
1
- # Webpack build pipeline
2
-
3
- > **⚠️ Appcelerator/Axway era feature**
4
- > The Webpack pipeline documented here was introduced with Titanium SDK 9.1.0 as part of the Axway AMPLIFY toolchain (`appcd` daemon). Since Axway discontinued Appcelerator, this feature is **not maintained** in the current TiDev CLI (`ti`). If you are using the community TiDev CLI, this pipeline may not be available. Prefer the standard `ti build` pipeline unless your project already uses Webpack.
5
-
6
- Webpack integration is an alternative build pipeline starting with Titanium SDK 9.1.0. It is optional. When enabled, Webpack manages asset and code bundling.
7
-
8
- ## 1. Key benefits
9
- - Fast incremental builds: only changed files are processed.
10
- - npm support: install packages in the root and import them directly.
11
- - Build-time resolution: `require` calls are resolved during compilation, not at runtime.
12
-
13
- ## 2. The `@` alias
14
- Webpack adds the `@` alias to reference the source root without deep relative paths.
15
-
16
- | Project type | Path mapped by `@` |
17
- | :----------- | :----------------- |
18
- | Alloy | `app/lib` |
19
- | Classic | `src` |
20
-
21
- Usage example:
22
-
23
- ```javascript
24
- // Before (without webpack)
25
- import Utils from '../../utils/helper';
26
-
27
- // Now (with webpack)
28
- import Utils from '@/utils/helper';
29
- ```
30
-
31
- ## 3. npm dependency management
32
- Install a package in the project root:
33
-
34
- ```bash
35
- npm install lodash
36
- ```
37
-
38
- Use it in Titanium code:
39
-
40
- ```javascript
41
- import _ from 'lodash';
42
- const data = _.chunk(['a', 'b', 'c', 'd'], 2);
43
- ```
44
-
45
- ## 4. Platform-specific files
46
- Webpack detects platform-specific files using the `filename.<platform>.js` pattern.
47
-
48
- Example:
49
- - `utils.js` (common)
50
- - `utils.ios.js` (iOS only)
51
- - `utils.android.js` (Android only)
52
-
53
- When you `import { func } from '@/utils'`, Webpack picks the correct version for the build target.
54
-
55
- ## 5. Diagnostic web UI
56
- Webpack includes a web interface to analyze builds and asset sizes. Default URL: `http://localhost:1732/webpack/latest/web`
57
-
58
- ## 6. Project plugins
59
- Webpack support is powered by plugins chosen based on project type:
60
-
61
- | Plugin | Purpose |
62
- | ---------------------------------- | ----------------------- |
63
- | `@appcd/webpack-plugin-alloy` | Alloy project support |
64
- | `@appcd/webpack-plugin-classic` | Classic project support |
65
- | `@appcd/webpack-plugin-babel` | Babel transpilation |
66
- | `@appcd/webpack-plugin-typescript` | TypeScript support |
67
-
68
- ### Custom plugin configuration
69
- Customize with the `webpack-chain` API in `webpack.config.js`:
70
-
71
- ```javascript
72
- module.exports = (api) => {
73
- // Add a custom alias
74
- api.chainWebpack((config) => {
75
- config.resolve.alias.set('@utils', api.resolve('app/lib/utils'));
76
- });
77
- };
78
- ```
79
-
80
- Common customizations:
81
- - Add alias: `config.resolve.alias.set(name, path)`
82
- - Add loader: `config.module.rule(name).use(name).loader(loader)`
83
- - Delete plugin: `config.plugins.delete(name)`
84
-
85
- ## 7. Advanced configuration
86
- Extend configuration via plugins in `package.json`:
87
-
88
- ```json
89
- {
90
- "appcdWebpackPlugins": [
91
- "my-local-plugin.js"
92
- ]
93
- }
94
- ```
95
-
96
- ## 8. Global configuration
97
- Configure Webpack daemon settings in `~/.appcelerator/appcd/config.json`:
98
-
99
- ```json
100
- {
101
- "webpack": {
102
- "inactivityTimeout": 600000
103
- }
104
- }
105
- ```
106
-
107
- ## 9. Troubleshooting
108
-
109
- Build seems stuck: the Webpack daemon may need a restart.
110
-
111
- ```bash
112
- appcd exec /webpack/latest/stop
113
- ```
114
-
115
- View build logs:
116
-
117
- ```bash
118
- appcd logcat "*webpack*"
119
- ```
120
-
121
- ## 10. Known limitations
122
- - Hyperloop is not compatible with the Webpack pipeline.
123
- - Alloy.jmk build hooks are not supported. Use Webpack plugins instead.
124
- - The first build may be slower due to daemon startup.
@@ -1,162 +0,0 @@
1
- {
2
- "schemaVersion": 1,
3
- "date": "2026-10-23",
4
- "moduleVersion": "1.0.0 beta",
5
- "status": "corrected-for-tested-Sim80-headphone-case",
6
- "acceptanceComplete": false,
7
- "listening": {
8
- "accepted": true,
9
- "reviewer": "Cesar",
10
- "replyTranslation": "Clean, no perceptible distortion.",
11
- "scenario": "Real Sim80, live synthesis, headphones, eight-output candidate",
12
- "scope": "Subjective acceptance of this short scene, not every voice/effect or a ten-minute maximum-load pass."
13
- },
14
- "implementation": {
15
- "platform": "Android ARM64",
16
- "change": "Reuse FIR coefficients across eight consecutive samples per voice while preserving each sample partial-sum and reduction order. Bound tiles at sequence attacks. Keep the previous stereo and other-ABI paths.",
17
- "gainQualityOrVoiceLimitsChanged": false,
18
- "outputBufferChanged": false,
19
- "publicApiChanged": false,
20
- "diagnosticInterfacesInProduction": false
21
- },
22
- "comparisonWithIOS": {
23
- "sharedBinauralAlgorithm": true,
24
- "ipadMeasuredRate": 44100,
25
- "ipadMeasuredBlockFrames": 1024,
26
- "androidMeasuredRate": 48000,
27
- "androidMeasuredBlockFrames": 256,
28
- "ipadTaps": 128,
29
- "androidTaps": 140,
30
- "limits": "Different measured hardware/output configurations; larger blocks alone do not cure sustained CPU overload."
31
- },
32
- "profilingBeforeCorrection": {
33
- "route": "speaker",
34
- "volumeIndex": 80,
35
- "callbacks": 1801,
36
- "xruns": 73,
37
- "cpuBlocksAboveDeadline": 455,
38
- "withoutOnsetCpuBlocksAboveDeadline": 357,
39
- "onsetCpuShare": 0.004458489684975288,
40
- "spatialFirSamples": 1017,
41
- "audioThreadSamples": 1566,
42
- "scope": "Actual Sim80, flat250HzCPU sampling with inline symbol attribution, not DSP-only isolation."
43
- },
44
- "fourOutputCandidate": {
45
- "speakerXruns": 1,
46
- "speakerCpuP95LoadInterval": [
47
- 1.205,
48
- 1.21
49
- ],
50
- "manualHeadphoneXruns": 37,
51
- "manualHeadphoneVolumeIndex": 120,
52
- "manualHeadphoneCpuP95LoadInterval": [
53
- 1.62,
54
- 1.625
55
- ],
56
- "listening": "Improved but still a couple of perceived distorted moments.",
57
- "limits": "Speaker profiling and manual headphone capture are distinct runs/routes, not a controlled route comparison."
58
- },
59
- "eightOutputCapture": {
60
- "device": "Android CPH2639",
61
- "route": "wired headphones",
62
- "volumeIndex": 120,
63
- "volumeMax": 160,
64
- "sampleRate": 48000,
65
- "callbackFrames": 256,
66
- "burstFrames": 256,
67
- "bufferFrames": 512,
68
- "frames": 480000,
69
- "capturedSeconds": 10,
70
- "xruns": 0,
71
- "routeStayedValid": true,
72
- "callbacks": 1875,
73
- "maxVoices": 32,
74
- "maxTails": 25,
75
- "wallP95LoadInterval": [
76
- 1.02,
77
- 1.025
78
- ],
79
- "cpuP95LoadInterval": [
80
- 0.965,
81
- 0.97
82
- ],
83
- "wallMaxNs": 9150154,
84
- "cpuMaxNs": 8857462,
85
- "wallBlocksAboveDeadline": 104,
86
- "cpuBlocksAboveDeadline": 80,
87
- "clockErrors": 0,
88
- "pcmHash": "7f89b839f15ce44d",
89
- "nonFiniteFrames": 0,
90
- "peakLeft": 0.8500000238418579,
91
- "peakRight": 0.8500000238418579,
92
- "scope": "Private instrumented module with PCM capture/clocks and250Hzsampling. Observed output delivery passed this ten-second scene; callback overruns still prevent a strict render-deadline pass."
93
- },
94
- "verification": {
95
- "streamingVsBlocked": "120000 standalone frames/sixrates8\u2013192k, ramps, wrap and complete state bit-identical on Android; varied short blocks also pass C and forcedAndroidNEON on ARM host.",
96
- "renderer": "135onset/fullstate,20fractionaltransport/fullstate,9legacy renders, spatial regression and fullheld regression match or pass on ARM host.",
97
- "review": "Independent source review found no critical/important issue in four/eight windows, clocks, tails, sends, stereo guard or bounded stack.",
98
- "physicalAcceptance": false,
99
- "stereoBypassChange": {
100
- "scope": "One stereo voice, new fix versus immediately preceding205a renderer, same warmed process, both4slots; previous937screen separate",
101
- "pairs": 10,
102
- "medianRenderRatio": 1.0113211982131405,
103
- "medianP95Ratio": 1.0053333333333334,
104
- "ratios": [
105
- 1.0005653275429052,
106
- 1.0126349702109787,
107
- 1.0196281518419976,
108
- 1.0126315815643214,
109
- 1.0206466219701242,
110
- 1.0100108148619595,
111
- 0.996436735715484,
112
- 1.016768104985823,
113
- 1.0091023055656232,
114
- 0.9846528665539155
115
- ],
116
- "bitExact": true
117
- },
118
- "finalProductionClockHeldLegacy": "Byte-identical to the pre-correction renderer after restoring lazy scalar clock reads and forced inlining."
119
- },
120
- "productionSourceSha256": {
121
- "android/jni/SynthOboeEngine.cpp": "cc7f050084871a79cb028b48081a8e51158a3a69f876c59e0f9de1a6ea7ecac6",
122
- "shared/synth_spatial.h": "d628ef9c60776be463c5dc45a972c9f9bbb0d183656f0dc177211038ba39d75a",
123
- "tests/spatial_regression.c": "2cf768e4dc18035010819b74837921c8b27ae391670acde0bf56197793c655c0"
124
- },
125
- "measuredPrivateArtifact": {
126
- "apkSha256": "324dc75a4b6caddbf6205915287ad90f68f0c735ac9d395ffb6bfb4821cbd934",
127
- "aarSha256": "156156df699eabc8647598b5da7fa4f0d20014c3a765b04120a43a0800e40d47",
128
- "sourceSha256": {
129
- "android/jni/SynthOboeEngine.cpp": "8b0fc7eb99bc1f0b1d76643776fcb7e8eb540f4ba5cd9379313e7f615670e1b0",
130
- "shared/synth_spatial.h": "9184a9d81de04c5216c52b96a8860c33bfd3492081089b34df35743d51e90bbb"
131
- },
132
- "nativeHashes": {
133
- "lib/arm64-v8a/liboboe.so": "2696179a9e302f4047ce04146de39f64930bdfaa75d51da63bc7af1a228b8d73",
134
- "lib/arm64-v8a/libti.synthengine.so": "3c04735e3f4a60b4d5218fadb192121978c30e105f02115383ba68120635c272",
135
- "lib/armeabi-v7a/liboboe.so": "6eebcff8923f11f79d10bd3404afccab9c8d9ba629709334fc76663894b0e914",
136
- "lib/armeabi-v7a/libti.synthengine.so": "b07a4b3d2e1d32b71a5267cd47d52024f9f8414d2531867ebcb0281548402919",
137
- "lib/x86/liboboe.so": "8846bdc73a1ad884e017c7f3082042184bb8c9876651f48e77faef24f7c7eec4",
138
- "lib/x86/libti.synthengine.so": "b13a3adcc8681090d6c305ca7436d60e367ffbcabce0fec0c64861925fcb28cc",
139
- "lib/x86_64/liboboe.so": "f1168819d87b8571bb7c8147176854a2e5783bae6e35d2a420d99dc19692db94",
140
- "lib/x86_64/libti.synthengine.so": "c008b2eb71b38e271a39fc3c5a1d70698e60bd06da578c723637890291970e98"
141
- }
142
- },
143
- "rawEvidenceArchive": "android-sim80-correction-evidence.zip",
144
- "remaining": [
145
- "Android ten-minute maximum-load criterion is still open; do not reinterpret this short Sim80 result as that acceptance.",
146
- "The measured candidate still has80CPU/104wall callbacks above one deadline.",
147
- "Whole-process192k memory, prior one-voice bypass screen, Android Sim20 renderer elapsed work and strict Sim80 presentation matching retain their prior limits."
148
- ],
149
- "publication": "Beta1.0.0, no release or push.",
150
- "rawEvidenceArchiveSha256": "faff448de458ef0cb5299e234177f17a914f7801c27581ab969a9010a68c3c5f",
151
- "productionAndroidBuild": {
152
- "aarSha256": "7e98bf4fbc6fbe4d1f4a5d9f5a561137522e831fb54480ae0310dd22b60a0c2c",
153
- "nativeSoSha256": {
154
- "arm64-v8a": "631aaca4f4dabcedc33cf3bf1b23601de3da6291448a299e195cbf5b07f526e3",
155
- "armeabi-v7a": "1a4100a25f920784dfc5bda91f30fa6f405e2b85deee51a8b14ce5502a2cf47c",
156
- "x86": "8f4545e24cb7f35220445b6e8c04f561bbf5a6cbf55b755c8e8aeffe923e748d",
157
- "x86_64": "96a8c5224129de2cd215c9d3b6a2cc50c08865f2de35bf95274026ea452a4a57"
158
- },
159
- "realFourAbiBuild": true,
160
- "diagnosticCodeAbsent": true
161
- }
162
- }
@@ -1,19 +0,0 @@
1
- > Source snapshot: official TiSynthEngine documentation at commit `ec04f4e634075c41b55f66279eabcd78b9652d58` (2026-11-02). Published module 1.1.0; public API 1.1.0. Upstream `documentation/audio-pipeline-validation.md` SHA-256: `7359d85de63e9fe94f85477e03a22fc1531c8acaabe30333e7ff2515cc5ec3e9`.
2
-
3
- # Audio pipeline correction
4
-
5
- Version 1.0.2 removes final-output retention on Android and iOS while retaining one stereo output per platform, fixed event gains, waveform profiles and chord compensation. It adds no public options. Existing envelopes, release tails and parameter transitions keep their roles.
6
-
7
- The final protector responds immediately to each stereo sample peak. This removes the old mandatory 10 ms delay, at the cost of a different overload response. Heavy mixes can audibly change waveform shape. Protection recovers with a 100 ms exponential time constant. The 0.85/0.70 ceilings describe sample values, not inter-sample peaks or speaker behavior. The master now follows the same linear 10 ms ramp on both platforms. iOS consumers requesting `raw` now receive its documented gain instead of the conservative gain; review those mixes.
8
-
9
- `tests/output_core_regression.c` checks linked impulses, silence/reset, bounded recovery and exact/retargeted master ramps at 16, 44.1, 48, 96 and 192 kHz (absolute double tolerance 1e-12). Android host checks compile the real C++ callback. Apple checks extract the actual callback, helpers and start validation/profile selection, replacing device/Titanium plumbing. The historical Java DSP model is not an oracle for native sound. CI runs production output checks alongside transport, effects, spatial and statistics regressions.
10
-
11
- `tools/calibrate_studio.py` (Android by default, `--platform ios` for Apple) reports all 37 Studio presets individually across independent low/mid/high notes, grouped chords, unisons and overlapping releases at 1, 2, 4, 8, 16 and 32 voices. Its recommendation uses the maximum measured pre-protection peak for the declared usual configuration (1-8 voices) to target −6 dBFS, with 0.01 dB measurement margin and the public volume limit. It reports 16/32-voice stress separately. The recommendations apply to the measured configuration. Event gains remain fixed, and other workloads can exceed the target. Effects and new LFOs are disabled in preset calibration. It never edits Studio.
12
-
13
- The before/after host comparison covered 80 PCM pairs across both renderers at five sample rates. After aligning the former output delay, all 40 cases without overload preserved the waveform within an absolute float tolerance of 1e-7. Overload cases remained finite and within the sample ceiling; their waveform differences were measured. Matched host benchmarks found no median callback-time increase. These measurements do not establish whole-app CPU use or physical output latency.
14
-
15
- Physical comparisons used Studio and Frontier on an OPPO CPH2639 running Android 16 and an iPad. Studio checks covered its 37 presets, short notes, Hold, chords, repetitions, sequences, effects and spatial controls. Frontier checks covered gameplay with simultaneous sounds. The same native candidate binaries were then integrated into the real Studio and Frontier apps, which built and launched on both devices. Their presets and gains were preserved. Route-wide latency, Bluetooth behavior and extended maximum-load acceptance remain outside these results.
16
-
17
- Android can report an underrun during stream startup. An initial matched repeat recorded it in four of six starts for both the original and candidate, with no additional underruns during the subsequent note/chord checks. Further silent tests reproduced the symptom with an independent Oboe 1.11.0 callback that only writes zeros. The startup condition remains unresolved; the counter is retained. Silent tests do not establish whether it causes an audible defect. Oboe's open [LatencyTuner proposal](https://github.com/google/oboe/pull/2432) discusses how startup XRuns affect buffer tuning, but does not eliminate their cause. TiSynthEngine does not use that tuner.
18
-
19
- PCM, original and candidate packages, commands, hashes and device traces are retained outside the app repositories. The physical results apply to the tested devices and scenarios.