@maccesar/titools 5.1.0 → 5.2.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 (85) hide show
  1. package/README.md +44 -12
  2. package/agents/ti-pro.md +4 -0
  3. package/commands/ti-audit.md +4 -0
  4. package/lib/config.js +2 -0
  5. package/package.json +1 -1
  6. package/skills/purgetss/SKILL.md +4 -4
  7. package/skills/purgetss/references/EXAMPLES.md +3 -3
  8. package/skills/purgetss/references/adopting-purgetss.md +2 -2
  9. package/skills/purgetss/references/animation-advanced.md +2 -2
  10. package/skills/purgetss/references/arbitrary-values.md +8 -5
  11. package/skills/purgetss/references/class-categories.md +5 -5
  12. package/skills/purgetss/references/class-index-properties.md +6 -6
  13. package/skills/purgetss/references/class-index.md +2 -2
  14. package/skills/purgetss/references/cli-commands.md +2 -2
  15. package/skills/purgetss/references/dynamic-component-creation.md +2 -2
  16. package/skills/purgetss/references/grid-layout.md +1 -1
  17. package/skills/purgetss/references/migration-guide.md +34 -4
  18. package/skills/purgetss/references/multi-density-images.md +6 -6
  19. package/skills/purgetss/references/platform-modifiers.md +21 -0
  20. package/skills/purgetss/references/ui-ux-design.md +1 -1
  21. package/skills/purgetss/references/version-history.md +9 -4
  22. package/skills/ti-admob-unified/SKILL.md +44 -0
  23. package/skills/ti-admob-unified/agents/openai.yaml +4 -0
  24. package/skills/ti-admob-unified/assets/example/app.js +1003 -0
  25. package/skills/ti-admob-unified/assets/example/lib/ads.js +618 -0
  26. package/skills/ti-admob-unified/assets/example/library-usage.js +104 -0
  27. package/skills/ti-admob-unified/references/api-reference.md +592 -0
  28. package/skills/ti-admob-unified/references/banners.md +435 -0
  29. package/skills/ti-admob-unified/references/contributing.md +228 -0
  30. package/skills/ti-admob-unified/references/dependencies.md +85 -0
  31. package/skills/ti-admob-unified/references/fullscreen.md +223 -0
  32. package/skills/ti-admob-unified/references/game-monetization.md +17 -0
  33. package/skills/ti-admob-unified/references/getting-started.md +275 -0
  34. package/skills/ti-admob-unified/references/index.md +30 -0
  35. package/skills/ti-admob-unified/references/integration.md +85 -0
  36. package/skills/ti-admob-unified/references/library.md +189 -0
  37. package/skills/ti-admob-unified/references/mediation.md +132 -0
  38. package/skills/ti-admob-unified/references/migration.md +255 -0
  39. package/skills/ti-admob-unified/references/module-changelog.md +54 -0
  40. package/skills/ti-admob-unified/references/module-license.txt +21 -0
  41. package/skills/ti-admob-unified/references/privacy.md +254 -0
  42. package/skills/ti-admob-unified/references/roadmap.md +146 -0
  43. package/skills/ti-admob-unified/references/source-notes.md +33 -0
  44. package/skills/ti-admob-unified/references/source-snapshot.json +440 -0
  45. package/skills/ti-admob-unified/references/third-party-notices.md +22 -0
  46. package/skills/ti-game/SKILL.md +10 -1
  47. package/skills/ti-game/references/api.md +10 -2
  48. package/skills/ti-game/references/debugging-performance.md +6 -0
  49. package/skills/ti-game/references/examples.md +11 -1
  50. package/skills/ti-game/references/patterns.md +24 -2
  51. package/skills/ti-game/references/physics.md +502 -0
  52. package/skills/ti-game/references/project-setup.md +23 -1
  53. package/skills/ti-game/references/recipes-action.md +46 -14
  54. package/skills/ti-game/references/recipes-adventure-effects.md +12 -1
  55. package/skills/ti-game/references/roadmap.md +2 -2
  56. package/skills/ti-game/references/tilemaps.md +2 -1
  57. package/skills/ti-game-assets/SKILL.md +53 -0
  58. package/skills/ti-game-assets/agents/openai.yaml +4 -0
  59. package/skills/ti-game-assets/references/alpha.md +26 -0
  60. package/skills/ti-game-assets/references/art-direction.md +37 -0
  61. package/skills/ti-game-assets/references/integration.md +49 -0
  62. package/skills/ti-game-assets/references/manifest.example.json +429 -0
  63. package/skills/ti-game-assets/references/manifest.md +39 -0
  64. package/skills/ti-game-assets/references/offline-audio.md +33 -0
  65. package/skills/ti-game-assets/references/prompts.md +33 -0
  66. package/skills/ti-game-assets/references/repeating-textures.md +17 -0
  67. package/skills/ti-game-assets/references/responsible-ads.md +31 -0
  68. package/skills/ti-game-assets/references/sound-assets.md +42 -0
  69. package/skills/ti-game-assets/references/vector-sources.md +21 -0
  70. package/skills/ti-game-assets/scripts/alpha_tools.py +160 -0
  71. package/skills/ti-game-assets/scripts/requirements.txt +1 -0
  72. package/skills/ti-game-assets/scripts/validate_manifest.py +267 -0
  73. package/skills/ti-synthengine/SKILL.md +37 -13
  74. package/skills/ti-synthengine/references/api.md +397 -31
  75. package/skills/ti-synthengine/references/audio-engine.md +235 -14
  76. package/skills/ti-synthengine/references/examples.md +396 -17
  77. package/skills/ti-synthengine/references/guide.md +331 -12
  78. package/skills/ti-synthengine/references/recipes.md +212 -22
  79. package/skills/ti-synthengine/references/recommendations.md +53 -16
  80. package/skills/ti-synthengine/references/sound-design.md +359 -15
  81. package/skills/ti-synthengine/references/source-notes.md +121 -0
  82. package/skills/ti-synthengine/references/source-snapshot.json +105 -0
  83. package/skills/ti-synthengine/references/stats-performance.json +2992 -0
  84. package/skills/ti-synthengine/references/stats-performance.md +38 -0
  85. package/skills/ti-synthengine/references/troubleshooting.md +61 -4
@@ -1,6 +1,6 @@
1
1
  # Migration Guide
2
2
 
3
- This guide summarizes the official PurgeTSS changelog: `CHANGELOG.md` in the package repository and the docs changelog page (`src/pages/changelog.md`, published at <https://purgetss.com/changelog>). It walks through the upgrade-relevant changes from v7.2.6 through v7.17.1, flags breaking changes, and links each section to the reference files that cover the new surface area in depth.
3
+ This guide summarizes the official PurgeTSS changelog: `CHANGELOG.md` in the package repository and the docs changelog page (`src/pages/changelog.md`, published at <https://purgetss.com/changelog>). It walks through the upgrade-relevant changes from v7.2.6 through v7.18.0, flags breaking changes, and links each section to the reference files that cover the new surface area in depth.
4
4
 
5
5
  Changelog source of truth: [CHANGELOG.md](https://github.com/macCesar/purgetss/blob/main/CHANGELOG.md).
6
6
 
@@ -9,6 +9,7 @@ Changelog source of truth: [CHANGELOG.md](https://github.com/macCesar/purgetss/b
9
9
  <!-- TOC-START -->
10
10
  ## Contents
11
11
 
12
+ - [Upgrade to v7.18.0](#upgrade-to-v7180)
12
13
  - [Upgrade to v7.17.x](#upgrade-to-v717x)
13
14
  - [Upgrade to v7.16.x](#upgrade-to-v716x)
14
15
  - [Upgrade to v7.15.0](#upgrade-to-v7150)
@@ -33,6 +34,35 @@ Changelog source of truth: [CHANGELOG.md](https://github.com/macCesar/purgetss/b
33
34
 
34
35
  <!-- TOC-END -->
35
36
 
37
+ ## Upgrade to v7.18.0
38
+
39
+ v7.18.0 fixes the defects an audit of the CLI found, and removes three things that never worked. Full release notes in [`version-history.md`](./version-history.md).
40
+
41
+ ### Removed
42
+
43
+ - **The `(Npx)` check.** `w-(100px)` is valid again and generates `width: '100px'`, explicit pixels. A unitless `w-(100)` still follows `ti.ui.defaultunit`. The pre-validator now catches four patterns. See [`arbitrary-values.md`](./arbitrary-values.md#class-syntax-pre-validation).
44
+ - **`snap-magnet` and `snap-magnet-false`.** The animation module never read `snap.magnet`.
45
+ - **`init --all`.** Declared in 7.0.0, never implemented. The root `purgetss --all` is unaffected.
46
+
47
+ ### Fixed
48
+
49
+ - **Stacked modifiers** such as `ios:tablet:bg-red-500` are generated, with every condition in one bracket. See [`platform-modifiers.md`](./platform-modifiers.md#combining-a-platform-and-a-device).
50
+ - **Icon classes written only with a modifier** (`android:ms-home`) are generated.
51
+ - **`bg-from-(#hex)`** writes a gradient instead of a literal `{value1}`.
52
+ - **Font Awesome Pro/Beta:** `purgetss build` no longer fails with `ENOENT`, and `icon-library --module` / `--styles` build the files instead of printing a placeholder.
53
+ - **`icon-library --vendor`** accepts `materialsymbols`; an unknown value stops the command before it writes anything.
54
+ - **The nine `*-keyboard-type-appearance*` classes are gone.** They assigned an appearance constant to `keyboardType`; use `keyboard-appearance-*`.
55
+ - **`images --width`** accepts 1 to 1024; above 1024 it used to write some densities and then fail at the 4096 px cap.
56
+ - **`images`** detects Alloy from `app/views/`, like every other command.
57
+ - **`swap()`** reads the source view's position from `rect` when it has no `top`/`left`.
58
+
59
+ ### What to review
60
+
61
+ - Replace any `snap-magnet`, `*-keyboard-type-appearance*` or `init --all` in your project or scripts.
62
+ - Anything you rewrote from `(Npx)` to a unitless value to get past the check now uses `dp` instead of pixels; restore the `px` if pixels are what you meant.
63
+
64
+ ---
65
+
36
66
  ## Upgrade to v7.17.x
37
67
 
38
68
  v7.17.0 and v7.17.1 change two things an existing project can trip over: unknown keys in `images:` now abort the run, and the notification icon has a new filename. Full release notes in [`version-history.md`](./version-history.md).
@@ -328,11 +358,11 @@ Five patterns are now caught and reported with file + line + suggested fix:
328
358
  | Whitespace inside parentheses | `wh-( 200 )` | `wh-(200)` |
329
359
  | Redundant `px` unit | `top-(10px)` | `top-(10)` |
330
360
 
331
- All offenders are reported in a single run. Generic unknown classes — typos, vendor utilities not enabled, custom classes not declared yet — continue to flow into `// Unused or unsupported classes`. See [`arbitrary-values.md` → Class syntax pre-validation](./arbitrary-values.md#class-syntax-pre-validation).
361
+ v7.18.0 removed the redundant-`px` pattern (see [Upgrade to v7.18.0](#upgrade-to-v7180)). All offenders are reported in a single run. Generic unknown classes — typos, vendor utilities not enabled, custom classes not declared yet — continue to flow into `// Unused or unsupported classes`. See [`arbitrary-values.md` → Class syntax pre-validation](./arbitrary-values.md#class-syntax-pre-validation).
332
362
 
333
363
  ### Added — `purgetss images --width <n>` (v7.8.0)
334
364
 
335
- Pins Android `mdpi` (= iPhone `@1x`) to `<n>` pixels wide. Larger scales derive as ×1.5, ×2, ×3, ×4 from that base. Range `[1, 8192]`. Most useful for SVG sources from vector editors (Affinity, Illustrator) with disproportionate viewBoxes. CLI-only — width is per-asset, not a project-wide setting. See [`multi-density-images.md`](./multi-density-images.md#pinning-the-output-width-with---width).
365
+ Pins Android `mdpi` (= iPhone `@1x`) to `<n>` pixels wide. Larger scales derive as ×1.5, ×2, ×3, ×4 from that base. Range `[1, 8192]` (v7.18.0 narrowed it to `[1, 1024]`). Most useful for SVG sources from vector editors (Affinity, Illustrator) with disproportionate viewBoxes. CLI-only — width is per-asset, not a project-wide setting. See [`multi-density-images.md`](./multi-density-images.md#pinning-the-output-width-with---width).
336
366
 
337
367
  ### Fixed in v7.8.0
338
368
 
@@ -498,7 +528,7 @@ v7.4.0 is the **Animation module expansion**. Nine new methods bring the Animati
498
528
  ### Added
499
529
 
500
530
  - **New methods**: `transition`, `pulse`, `sequence`, `swap`, `shake`, `snapTo`, `reorder`, `undraggable`, `detectCollisions`.
501
- - **New utility classes**: `snap-back`, `snap-center`, `snap-magnet`, `keep-z-index`.
531
+ - **New utility classes**: `snap-back`, `snap-center`, `snap-magnet`, `keep-z-index` (`snap-magnet` was removed in v7.18.0).
502
532
  - **Delta-based drag for transformed views** — drag math now works correctly when the view already has a 2D transform applied.
503
533
  - **Position normalization** and **property inheritance** from the Animation object — reduces boilerplate when sequencing multiple animations on the same view.
504
534
 
@@ -156,20 +156,20 @@ The pinned width drives the scale for every density:
156
156
 
157
157
  ### Validation
158
158
 
159
- `--width` accepts integers in `[1, 8192]`. Out-of-range values are rejected immediately and the command exits without writing anything:
159
+ `--width` accepts integers in `[1, 1024]` (v7.18.0; earlier versions accepted up to 8192 and then failed on the 4096 px cap). Out-of-range values are rejected immediately and the command exits without writing anything:
160
160
 
161
161
  ```bash
162
162
  purgetss images logo.svg --width 0
163
- # Invalid --width '0'. Must be an integer between 1 and 8192.
163
+ # Invalid --width '0'. Must be an integer between 1 and 1024.
164
164
 
165
165
  purgetss images logo.svg --width 9000
166
- # Invalid --width '9000'. Must be an integer between 1 and 8192.
166
+ # Invalid --width '9000'. Must be an integer between 1 and 1024.
167
167
 
168
168
  purgetss images logo.svg --width abc
169
- # Invalid --width 'NaN'. Must be an integer between 1 and 8192.
169
+ # Invalid --width 'NaN'. Must be an integer between 1 and 1024.
170
170
  ```
171
171
 
172
- Passing validation does not guarantee a run: every output is capped at 4096 px per side, and `xxxhdpi` is 4× the pinned width, so any `--width` above `1024` aborts with `… exceeds the 4096px cap`.
172
+ Passing validation does not guarantee a run: every output is capped at 4096 px per side, width and height, and the height follows the source's aspect ratio. A source taller than it is wide can still abort at `xxxhdpi` with `… exceeds the 4096px cap`.
173
173
 
174
174
  ### The hint message for unflagged SVGs
175
175
 
@@ -531,7 +531,7 @@ Classic projects have no PurgeTSS build step: generate the images, then run `ti
531
531
  | --- | --- |
532
532
  | `--format <ext>` | Convert all outputs to: `webp`, `jpeg`, `png`, `avif`, `gif`, `tiff`. Default: keep source format. |
533
533
  | `--quality <n>` | Quality `0–100` for `webp`, `jpeg`, `avif` and `tiff`. PNG and GIF ignore it. Default `85`. |
534
- | `--width <n>` | (v7.8.0) Pin `mdpi` / `@1x` output width to `n` pixels; validated to `[1, 8192]`, but outputs are capped at 4096 px so values above `1024` abort. Other densities derive from this base (×1.5 / ×2 / ×3 / ×4). Most useful for SVG sources with non-standard viewBoxes. CLI-only — no `config.cjs` equivalent because width is per-asset. |
534
+ | `--width <n>` | (v7.8.0) Pin `mdpi` / `@1x` output width to `n` pixels; validated to `[1, 1024]`, because `xxxhdpi` renders at 4× and outputs are capped at 4096 px. Other densities derive from this base (×1.5 / ×2 / ×3 / ×4). Most useful for SVG sources with non-standard viewBoxes. CLI-only — no `config.cjs` equivalent because width is per-asset. |
535
535
  | `--opacity <n>` | (v7.10.0) Multiply the alpha channel of every generated density by `n/100`. Range `[0, 100]`. Combine with `--format jpeg` and the alpha is flattened on white instead of producing a transparent JPEG. CLI-only. |
536
536
  | `--padding <n>` | (v7.10.0) Shrink the rendered image inside each density canvas by `n%` symmetric borders. Range `[0, 40]`. CLI-only. |
537
537
  | `--output <relpath>` | (v7.10.0) Override the basename and subpath relative to each platform's `images/` root. Lets a source from outside `purgetss/images/` (e.g. `purgetss/brand/`) write into a custom output folder like `images/logos/`. CLI-only. |
@@ -43,6 +43,27 @@ You can set different background colors and font sizes per platform and device,
43
43
  '.tablet:bg-green-500[formFactor=tablet]': { backgroundColor: '#22c55e' }
44
44
  ```
45
45
 
46
+ ## Combining a platform and a device
47
+
48
+ Since v7.18.0, stack one platform modifier and one device modifier, in either order. Both conditions go in a single bracket, because Alloy's styler keeps only the last `[...]` of a selector.
49
+
50
+ ```xml
51
+ <View class="ios:tablet:bg-red-500 tablet:ios:mt-4" />
52
+ ```
53
+
54
+ ```tss
55
+ '.ios:tablet:bg-red-500[platform=ios formFactor=tablet]': { backgroundColor: '#ef4444' }
56
+ '.tablet:ios:mt-4[formFactor=tablet platform=ios]': { top: 16 }
57
+ ```
58
+
59
+ A platform modifier that contradicts a platform-scoped class generates nothing and leaves a comment in `app.tss`:
60
+
61
+ ```tss
62
+ // Conflicting modifiers, class not generated: '.android:status-bar-dark' (platform is already ios)
63
+ ```
64
+
65
+ Before v7.18.0, a stacked class was not generated, and `tablet:` on an iOS-only class produced `[platform=ios][formFactor=tablet]`, which Alloy read as tablet-only on both platforms.
66
+
46
67
  ## Community-Discovered Patterns
47
68
 
48
69
  The following guidance comes from community experience combining platform modifiers with platform-specific Titanium constants.
@@ -169,7 +169,7 @@ The catalog below collects real-world UI patterns verified against Titanium's co
169
169
  ```
170
170
 
171
171
  > **⚠️ Input Padding**
172
- > Padding utilities (`p-`, `px-`, `py-`) set the `padding` property, which the Titanium API defines only on `TextField` and `TextArea` (Android and iOS; `TextArea` honors left and right only) and `Ti.UI.Android.CardView` (apidoc 13_4_1_GA). `utilities.tss` labels the block "Android Only", which is inaccurate for the two text inputs. They are NOT for `Button` (especially iOS/Mac) and NOT on container views (`View`, `Window`, `ScrollView`, `TableView`). Use margins on children to simulate internal spacing on containers.
172
+ > Padding utilities (`p-`, `px-`, `py-`) set the `padding` property, which the Titanium API defines only on `TextField` and `TextArea` (Android and iOS; `TextArea` honors left and right only) and `Ti.UI.Android.CardView` (apidoc 13_4_1_GA). They are NOT for `Button` (especially iOS/Mac) and NOT on container views (`View`, `Window`, `ScrollView`, `TableView`). Use margins on children to simulate internal spacing on containers.
173
173
 
174
174
  ## Buttons
175
175
 
@@ -8,7 +8,12 @@ When in doubt about whether a class, flag, or config key exists in the user's in
8
8
 
9
9
  ---
10
10
 
11
- ## Unreleased (after v7.17.1)
11
+ ## v7.18.0
12
+ - **`(Npx)` is valid again.** The redundant-`px` check is gone: `w-(100px)` generates `width: '100px'`, explicit pixels; unitless values follow `ti.ui.defaultunit`. The pre-validator catches 4 patterns. See [arbitrary-values.md](arbitrary-values.md).
13
+ - Stacked modifiers (`ios:tablet:`, either order) generate one bracket, `[platform=ios formFactor=tablet]`; a contradicting modifier leaves a comment in `app.tss`. See [platform-modifiers.md](platform-modifiers.md).
14
+ - Removed: `snap-magnet` / `snap-magnet-false`, the nine `*-keyboard-type-appearance*` classes, and `init --all`.
15
+ - Fixed: `bg-from-(#hex)`, icon classes written only with a modifier, Font Awesome Pro/Beta in `build` and `icon-library -m/-s`, `icon-library --vendor=materialsymbols` (unknown vendors now abort), `images --width` limited to 1–1024, one `detectProjectType()`, `swap()` falling back to `rect`.
16
+ - The `padding` block in `utilities.tss` is no longer labeled Android-only.
12
17
  - The comment above the opt-in pieces in the generated config now names each consumer instead of claiming both are inert without hand-edited XML. Only `splash_icon` is.
13
18
 
14
19
  ## v7.17.1
@@ -108,7 +113,7 @@ When in doubt about whether a class, flag, or config key exists in the user's in
108
113
 
109
114
  ## v7.8.0
110
115
  - `purgetss images --width <n>` pins Android `mdpi` / iPhone `@1x` to `<n>` pixels for SVG sources with disproportionate viewBoxes (Affinity, Illustrator). CLI-only.
111
- - Class syntax pre-validation emits `Class Syntax Error` blocks for 5 patterns: inverted negative (`top-(-10)` → `-top-(10)`), brackets (`top-[10px]` → `top-(10px)`), empty parens (`wh-()`), whitespace in parens, redundant `px` unit. Generic unknown classes still flow into `// Unused or unsupported classes`.
116
+ - Class syntax pre-validation emits `Class Syntax Error` blocks for 5 patterns: inverted negative (`top-(-10)` → `-top-(10)`), brackets (`top-[10px]` → `top-(10px)`), empty parens (`wh-()`), whitespace in parens, redundant `px` unit (removed in v7.18.0). Generic unknown classes still flow into `// Unused or unsupported classes`.
112
117
 
113
118
  ## v7.7.0
114
119
  - `brand:` config restructured into grouped sections: `brand.logos`, `brand.padding`, `brand.android`, `brand.ios`, `brand.colors`. Old projects keep working; new configs use grouped form. See [app-branding.md](app-branding.md).
@@ -129,7 +134,7 @@ When in doubt about whether a class, flag, or config key exists in the user's in
129
134
 
130
135
  ## v7.5.1
131
136
  - Fix: `dist/purgetss.ui.js` shipped in v7.5.0 without `pulse()`, the latest `transition()` improvements, and delta-based drag for transformed views; rebuilt from the template. Re-run `purgetss module` to get them.
132
- - Fix: `snap-back`, `snap-center`, `snap-magnet`, and `keep-z-index` classes are now generated in `utilities.tss`.
137
+ - Fix: `snap-back`, `snap-center`, `snap-magnet`, and `keep-z-index` classes are now generated in `utilities.tss` (`snap-magnet` was removed in v7.18.0).
133
138
  - Font Awesome updated to 7.2.0.
134
139
 
135
140
  ## v7.5.0
@@ -140,7 +145,7 @@ When in doubt about whether a class, flag, or config key exists in the user's in
140
145
 
141
146
  ## v7.4.0
142
147
  - Animation module: 9 new methods (`transition`, `pulse`, `sequence`, `swap`, `shake`, `snapTo`, `reorder`, `undraggable`, `detectCollisions`). 15 methods total. See [animation-system.md](animation-system.md).
143
- - New utility classes: `snap-back`, `snap-center`, `snap-magnet`, `keep-z-index`.
148
+ - New utility classes: `snap-back`, `snap-center`, `snap-magnet`, `keep-z-index` (`snap-magnet` removed in v7.18.0).
144
149
  - Delta-based drag for transformed views; property inheritance from Animation object.
145
150
 
146
151
  ## v7.3.1
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: ti-admob-unified
3
+ description: "Use when a Titanium app declares ti.admob.unified or its mediation complements, imports require('ti.admob.unified'), or asks to integrate/configure AdMob banners, interstitials, rewarded or app-open ads, UMP/ATT, privacy options, lifecycle, ad frequency or AppLovin, Meta, InMobi, Unity and Liftoff mediation with this module. Applies to Alloy and Classic on Android/iOS."
4
+ ---
5
+
6
+ # ti.admob.unified — ads, privacy and providers
7
+
8
+ Integrate César's unified Titanium module using its official documentation and maintained application library. The local **1.0.0** contract is preparing for its first public release; do not claim a public release or usable production demand from these snapshots. Sources are pinned to **`5b4cbf9347a51c4f959dc262ac1500f82f28b4a0`**, copied 2026-10-11. See `references/source-snapshot.json` for paths/hashes and [references/source-notes.md](references/source-notes.md) for provenance and update checks. Check the installed build and current sources when behavior differs.
9
+
10
+ ## Required workflow
11
+
12
+ Read the relevant references before proposing calls or configuration. Do not infer this API from old `ti.admob`, `ti.android.admob` or raw Google SDK examples.
13
+
14
+ | Task | Read first |
15
+ | --- | --- |
16
+ | Install artifacts, app IDs, platform settings, first test request | [references/getting-started.md](references/getting-started.md) |
17
+ | Ownership, navigation, layout, refresh, Alloy/Classic integration | [references/integration.md](references/integration.md), [references/library.md](references/library.md) |
18
+ | Exact factories/methods/options/events/constants/payloads | [references/api-reference.md](references/api-reference.md) |
19
+ | Consent-first startup, ATT, privacy options, request eligibility | [references/privacy.md](references/privacy.md) |
20
+ | Fixed/adaptive banners, real reserved layout and pause/cleanup | [references/banners.md](references/banners.md) |
21
+ | Interstitial/rewarded/app-open load/show, rewards and cleanup | [references/fullscreen.md](references/fullscreen.md) |
22
+ | Select/install providers, publisher accounts, mappings, diagnostics | [references/mediation.md](references/mediation.md), [references/dependencies.md](references/dependencies.md) |
23
+ | Replace legacy modules or internal builds | [references/migration.md](references/migration.md) |
24
+ | Unsupported formats, extending providers, license/distribution | [references/roadmap.md](references/roadmap.md), [references/contributing.md](references/contributing.md), [references/third-party-notices.md](references/third-party-notices.md) |
25
+ | Game experience and frequency decisions | [references/game-monetization.md](references/game-monetization.md), plus fullscreen/privacy |
26
+
27
+ Cite factual guidance with `[source: references/<file>.md]`. If the relevant source is unavailable, mark the claim `FROM_MEMORY (unverified):` and do not invent a method or provider setting.
28
+
29
+ ## Integration invariants
30
+
31
+ - Inspect `tiapp.xml`, installed artifacts, project type and existing ad owner before adding another boundary. Use `ti-guides`/`ti-howtos`, Alloy or UI skills as applicable.
32
+ - Prefer the official copy-ready `assets/example/lib/ads.js`: copy unchanged to Alloy `app/lib/ads.js` or Classic `Resources/lib/ads.js`. Its documentation imports `require('lib/ads')`; preserve its path and provenance. `assets/example/library-usage.js` and `assets/example/app.js` are official integration evidence, not navigation templates to paste wholesale.
33
+ - Follow the documented UMP → request eligibility → initialization sequence. `canRequestAds()` is the gate, not ATT status or a guessed personalization flag. Resolve requested ATT separately; do not request it without an actual use case. Preserve privacy options and named-listener cleanup.
34
+ - Application IDs and ad-unit IDs are different. Use documented test IDs during development; do not switch to production IDs as an incidental fix.
35
+ - Native activity/app lifecycle and SDK banner refresh belong to the module/Google. The app owns tab/window coverage and reserved layout. Do not add refresh timers or duplicate background handlers for banners.
36
+ - Separate loading from deliberate fullscreen presentation. Do not show from a load callback. Coordinate game clock/audio/inputs and ad ownership; handle no-fill, failed presentation, actual close and destroyed screens without repeated ads or late navigation.
37
+ - Install only selected mediation complements on each target platform. All application calls use `ti.admob.unified`. Configure provider accounts and AdMob mappings; neither a packaged adapter nor `ready` diagnostics nor a Google test ad proves provider delivery. Do not invent placeholder keys, manual provider initializers or an `enableMediation` option.
38
+ - Consult the roadmap before suggesting native ads, rewarded interstitial or a network outside the distributed set. Supporting several formats does not justify enabling all of them in a game.
39
+
40
+ ## Acceptance
41
+
42
+ Report separately: source/contract review, configuration/build/linking, Google test-ad behavior, each selected provider's own test delivery, and physical-device lifecycle/layout/visual acceptance. Use Ad Inspector as documented and re-check current Google/provider setup guidance before live configuration. A reported impression or passing stand-in test does not certify visible creative content or consent propagation. Do not click production ads to test delivery. No account creation, credentials, live ad activation or publishing is implied by ordinary integration work.
43
+
44
+ For games, use `ti-game` for native pause/cleanup and `ti-game-assets` for audiovisual assets. Respect the existing game's presentation policy; defaults and quotas are product choices to measure, not optimal values certified by this module.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Ti AdMob Unified"
3
+ short_description: "Configure ads, privacy and mediation in Titanium"
4
+ default_prompt: "Use $ti-admob-unified to integrate ads and configure the selected mediation providers for my Titanium app."