@wix/himalaya-cli 0.1528.0 → 0.1530.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 (126) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/bookings-v2/src/index.d.ts +24 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/ecom/src/extensions.d.ts +144 -0
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/restaurants/src/extensions.d.ts +93 -0
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/iap-checkout.mjs +27 -5
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/iap.mjs +19 -3
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +27 -5
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-ecom.mjs +58 -0
  8. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-restaurants.mjs +23 -0
  9. package/dist/cli.mjs +3110 -1993
  10. package/dist/preview-assets.generated.bin +0 -0
  11. package/fixtures/wix-canned.json +83 -0
  12. package/guides/hhp.md +39 -0
  13. package/guides/himi-json-output.md +22 -1
  14. package/guides/release-notes.md +17 -0
  15. package/guides/templates.md +11 -1
  16. package/guides/tier-5-add-a-screen.md +4 -0
  17. package/package.json +2 -2
  18. package/templates/beauty-salon/config.ts +12 -1
  19. package/templates/beauty-salon/dev/index.ts +1767 -2698
  20. package/templates/beauty-salon/tier5-src/_shared/collection-service.ts +23 -5
  21. package/templates/beauty-salon/tier5-src/_shared/engine-intl.ts +18 -0
  22. package/templates/beauty-salon/tier5-src/_shared/himi-restaurants.ts +12 -5
  23. package/templates/beauty-salon/tier5-src/_shared/member-bookings.ts +50 -7
  24. package/templates/beauty-salon/tier5-src/_shared/restaurant-ordering.ts +201 -0
  25. package/templates/beauty-salon/tier5-src/himi-booking-bookings/index.ts +385 -74
  26. package/templates/beauty-salon/tier5-src/himi-branded-lite-cart/index.ts +6 -0
  27. package/templates/beauty-salon-owner/tier5-src/_shared/collection-service.ts +23 -5
  28. package/templates/beauty-salon-owner/tier5-src/_shared/engine-intl.ts +18 -0
  29. package/templates/branded-lite/config.ts +12 -1
  30. package/templates/branded-lite/dev/index.ts +4955 -4801
  31. package/templates/branded-lite/tier5-src/_shared/collection-service.ts +23 -5
  32. package/templates/branded-lite/tier5-src/_shared/engine-intl.ts +18 -0
  33. package/templates/branded-lite/tier5-src/_shared/himi-restaurants.ts +12 -5
  34. package/templates/branded-lite/tier5-src/_shared/member-bookings.ts +50 -7
  35. package/templates/branded-lite/tier5-src/_shared/restaurant-ordering.ts +201 -0
  36. package/templates/branded-lite/tier5-src/himi-booking-bookings/index.ts +385 -74
  37. package/templates/branded-lite/tier5-src/himi-branded-lite-cart/index.ts +6 -0
  38. package/templates/branded-lite/tier5-src/himi-branded-lite-menu-item/index.ts +144 -77
  39. package/templates/branded-lite/tier5-src/himi-branded-lite-menus/index.ts +16 -5
  40. package/templates/branded-lite/tier5-src/himi-branded-lite-reservations/index.ts +1 -1
  41. package/templates/branded-lite/tier5-src/wix-spaces-food-order-detail/index.ts +76 -14
  42. package/templates/branded-lite/tier5-src/wix-spaces-food-orders/index.ts +807 -55
  43. package/templates/community-club/config.ts +12 -1
  44. package/templates/community-club/tier5-src/_shared/collection-service.ts +23 -5
  45. package/templates/community-club/tier5-src/_shared/engine-intl.ts +18 -0
  46. package/templates/community-club/tier5-src/_shared/himi-restaurants.ts +12 -5
  47. package/templates/community-club/tier5-src/_shared/member-bookings.ts +50 -7
  48. package/templates/community-club-owner/tier5-src/_shared/collection-service.ts +23 -5
  49. package/templates/community-club-owner/tier5-src/_shared/engine-intl.ts +18 -0
  50. package/templates/events-meetups/config.ts +12 -1
  51. package/templates/events-meetups/tier5-src/_shared/collection-service.ts +23 -5
  52. package/templates/events-meetups/tier5-src/_shared/engine-intl.ts +18 -0
  53. package/templates/events-meetups/tier5-src/_shared/himi-restaurants.ts +12 -5
  54. package/templates/events-meetups/tier5-src/_shared/member-bookings.ts +50 -7
  55. package/templates/events-meetups-owner/tier5-src/_shared/collection-service.ts +23 -5
  56. package/templates/events-meetups-owner/tier5-src/_shared/engine-intl.ts +18 -0
  57. package/templates/gym-fitness/config.ts +12 -1
  58. package/templates/gym-fitness/dev/index.ts +1753 -2697
  59. package/templates/gym-fitness/tier5-src/_shared/collection-service.ts +23 -5
  60. package/templates/gym-fitness/tier5-src/_shared/engine-intl.ts +18 -0
  61. package/templates/gym-fitness/tier5-src/_shared/himi-restaurants.ts +12 -5
  62. package/templates/gym-fitness/tier5-src/_shared/member-bookings.ts +50 -7
  63. package/templates/gym-fitness/tier5-src/_shared/restaurant-ordering.ts +201 -0
  64. package/templates/gym-fitness/tier5-src/himi-booking-bookings/index.ts +385 -74
  65. package/templates/gym-fitness/tier5-src/himi-branded-lite-cart/index.ts +6 -0
  66. package/templates/gym-fitness-owner/tier5-src/_shared/collection-service.ts +23 -5
  67. package/templates/gym-fitness-owner/tier5-src/_shared/engine-intl.ts +18 -0
  68. package/templates/nonprofit-cause/config.ts +12 -1
  69. package/templates/nonprofit-cause/tier5-src/_shared/collection-service.ts +23 -5
  70. package/templates/nonprofit-cause/tier5-src/_shared/engine-intl.ts +18 -0
  71. package/templates/nonprofit-cause/tier5-src/_shared/himi-restaurants.ts +12 -5
  72. package/templates/nonprofit-cause/tier5-src/_shared/member-bookings.ts +50 -7
  73. package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-service.ts +23 -5
  74. package/templates/nonprofit-cause-owner/tier5-src/_shared/engine-intl.ts +18 -0
  75. package/templates/owner-lite/tier5-src/_shared/collection-service.ts +23 -5
  76. package/templates/owner-lite/tier5-src/_shared/engine-intl.ts +18 -0
  77. package/templates/podcast-creator/config.ts +12 -1
  78. package/templates/podcast-creator/tier5-src/_shared/collection-service.ts +23 -5
  79. package/templates/podcast-creator/tier5-src/_shared/engine-intl.ts +18 -0
  80. package/templates/podcast-creator/tier5-src/_shared/himi-restaurants.ts +12 -5
  81. package/templates/podcast-creator/tier5-src/_shared/member-bookings.ts +50 -7
  82. package/templates/podcast-creator-owner/tier5-src/_shared/collection-service.ts +23 -5
  83. package/templates/podcast-creator-owner/tier5-src/_shared/engine-intl.ts +18 -0
  84. package/templates/portfolio-creative/config.ts +12 -1
  85. package/templates/portfolio-creative/tier5-src/_shared/collection-service.ts +23 -5
  86. package/templates/portfolio-creative/tier5-src/_shared/engine-intl.ts +18 -0
  87. package/templates/portfolio-creative/tier5-src/_shared/himi-restaurants.ts +12 -5
  88. package/templates/portfolio-creative/tier5-src/_shared/member-bookings.ts +50 -7
  89. package/templates/portfolio-creative/tier5-src/_shared/restaurant-ordering.ts +201 -0
  90. package/templates/portfolio-creative/tier5-src/himi-branded-lite-cart/index.ts +6 -0
  91. package/templates/portfolio-creative-owner/tier5-src/_shared/collection-service.ts +23 -5
  92. package/templates/portfolio-creative-owner/tier5-src/_shared/engine-intl.ts +18 -0
  93. package/templates/restaurant/README.md +1 -1
  94. package/templates/restaurant/config.ts +12 -1
  95. package/templates/restaurant/dev/index.ts +1373 -275
  96. package/templates/restaurant/himalaya.template.json +2 -1
  97. package/templates/restaurant/tier5-src/_shared/collection-service.ts +23 -5
  98. package/templates/restaurant/tier5-src/_shared/engine-intl.ts +18 -0
  99. package/templates/restaurant/tier5-src/_shared/himi-restaurants.ts +12 -5
  100. package/templates/restaurant/tier5-src/_shared/member-bookings.ts +50 -7
  101. package/templates/restaurant/tier5-src/_shared/member-orders.ts +8 -0
  102. package/templates/restaurant/tier5-src/_shared/restaurant-ordering.ts +201 -0
  103. package/templates/restaurant/tier5-src/himi-branded-lite-menu-item/index.ts +144 -77
  104. package/templates/restaurant/tier5-src/himi-branded-lite-menus/index.ts +16 -5
  105. package/templates/restaurant/tier5-src/wix-spaces-food-order-detail/index.ts +76 -14
  106. package/templates/restaurant/tier5-src/wix-spaces-food-orders/index.ts +807 -55
  107. package/templates/restaurant-owner/tier5-src/_shared/collection-service.ts +23 -5
  108. package/templates/restaurant-owner/tier5-src/_shared/engine-intl.ts +18 -0
  109. package/templates/retail-store/config.ts +12 -1
  110. package/templates/retail-store/tier5-src/_shared/collection-service.ts +23 -5
  111. package/templates/retail-store/tier5-src/_shared/engine-intl.ts +18 -0
  112. package/templates/retail-store/tier5-src/_shared/himi-restaurants.ts +12 -5
  113. package/templates/retail-store/tier5-src/_shared/member-bookings.ts +50 -7
  114. package/templates/retail-store/tier5-src/_shared/restaurant-ordering.ts +201 -0
  115. package/templates/retail-store/tier5-src/himi-branded-lite-cart/index.ts +6 -0
  116. package/templates/retail-store-owner/tier5-src/_shared/collection-service.ts +23 -5
  117. package/templates/retail-store-owner/tier5-src/_shared/engine-intl.ts +18 -0
  118. package/templates/yoga-studio/config.ts +12 -1
  119. package/templates/yoga-studio/dev/index.ts +1755 -2699
  120. package/templates/yoga-studio/tier5-src/_shared/collection-service.ts +23 -5
  121. package/templates/yoga-studio/tier5-src/_shared/engine-intl.ts +18 -0
  122. package/templates/yoga-studio/tier5-src/_shared/himi-restaurants.ts +12 -5
  123. package/templates/yoga-studio/tier5-src/_shared/member-bookings.ts +50 -7
  124. package/templates/yoga-studio/tier5-src/himi-booking-bookings/index.ts +385 -74
  125. package/templates/yoga-studio-owner/tier5-src/_shared/collection-service.ts +23 -5
  126. package/templates/yoga-studio-owner/tier5-src/_shared/engine-intl.ts +18 -0
Binary file
@@ -2093,5 +2093,88 @@
2093
2093
  "POST /ecom/v1/checkouts/chk-0001/create-order": {
2094
2094
  "orderId": "order-0001",
2095
2095
  "paymentGatewayOrderId": "payment-0001"
2096
+ },
2097
+ "GET /ecom/v2/carts/current": {},
2098
+ "GET /restaurants-operations/v1/operations": {
2099
+ "operations": [
2100
+ {
2101
+ "id": "op-0001",
2102
+ "name": "Ordering page",
2103
+ "default": true,
2104
+ "onlineOrderingStatus": "ENABLED",
2105
+ "defaultFulfillmentType": "PICKUP",
2106
+ "fulfillmentIds": [
2107
+ "fm-pickup-0001",
2108
+ "fm-delivery-0001"
2109
+ ]
2110
+ }
2111
+ ]
2112
+ },
2113
+ "GET /fulfillment-methods/v1/fulfillment-methods": {
2114
+ "fulfillmentMethods": [
2115
+ {
2116
+ "id": "fm-pickup-0001",
2117
+ "type": "PICKUP",
2118
+ "name": "Pickup",
2119
+ "enabled": true,
2120
+ "minOrderPrice": "0",
2121
+ "pickupOptions": {
2122
+ "address": {
2123
+ "country": "US",
2124
+ "subdivision": "US-CA",
2125
+ "city": "San Francisco",
2126
+ "formattedAddress": "500 Example St, San Francisco, CA"
2127
+ }
2128
+ }
2129
+ },
2130
+ {
2131
+ "id": "fm-delivery-0001",
2132
+ "type": "DELIVERY",
2133
+ "name": "Delivery Area #1",
2134
+ "enabled": true,
2135
+ "fee": "0",
2136
+ "minOrderPrice": "0",
2137
+ "deliveryOptions": {
2138
+ "deliveryTimeInMinutes": 30
2139
+ }
2140
+ }
2141
+ ],
2142
+ "pagingMetadata": {
2143
+ "count": 2,
2144
+ "hasNext": false
2145
+ }
2146
+ },
2147
+ "GET /restaurants-operations/v1/operations/op-0001/first-available-time-slot-per-fulfillment-type": {
2148
+ "timeslotsPerFulfillmentType": [
2149
+ {
2150
+ "fulfilmentType": "DELIVERY",
2151
+ "timeSlot": {
2152
+ "startTime": "2026-10-29T11:18:00Z",
2153
+ "endTime": "2026-10-29T11:18:00Z",
2154
+ "orderSchedulingType": "ASAP"
2155
+ },
2156
+ "fulfillmentInfo": [
2157
+ {
2158
+ "fee": "0",
2159
+ "minOrderPrice": "0",
2160
+ "maxTime": 60
2161
+ }
2162
+ ]
2163
+ },
2164
+ {
2165
+ "fulfilmentType": "PICKUP",
2166
+ "timeSlot": {
2167
+ "startTime": "2026-10-29T10:48:00Z",
2168
+ "endTime": "2026-10-29T10:48:00Z",
2169
+ "orderSchedulingType": "ASAP"
2170
+ },
2171
+ "fulfillmentInfo": [
2172
+ {
2173
+ "minOrderPrice": "0",
2174
+ "maxTime": 30
2175
+ }
2176
+ ]
2177
+ }
2178
+ ]
2096
2179
  }
2097
2180
  }
package/guides/hhp.md CHANGED
@@ -195,6 +195,45 @@ and auth flows retain their existing transports and network-fixture seams.
195
195
  The studio preview adds compact, medium, and expanded presets. Existing worker state,
196
196
  action, and SDK inspection remain available through the dev drawer.
197
197
 
198
+ ## Design fidelity (`himi fidelity`)
199
+
200
+ `himi fidelity` answers one question per screen: does what shipped look like what was designed? It is repo-only for now and advisory. No CI gate reads it. Its readers are the authoring agent, before it calls an app done, and the PR reviewer.
201
+
202
+ Declare the mockup each screen was designed from in `hhp.json`:
203
+
204
+ ```json
205
+ { "version": "hhp/2", "screens": { "schedule": { "html": "screens/schedule.html", "mockup": "mockup/schedule.html" } } }
206
+ ```
207
+
208
+ A screen may also carry `params` (the navigation input a device opens it with, used by native capture, #4935) and `fidelity: { "warn": 80, "fail": 60 }`. Thresholds can also be set app-wide at the top level.
209
+
210
+ ```bash
211
+ himi fidelity --content <dir> [--screen a,b] [--variant light,dark,rtl,tablet] [--no-native] [--json] [--post-pr <n>]
212
+ ```
213
+
214
+ For each screen and variant (`light`, `dark`, `rtl`, `tablet`), the command does four things:
215
+
216
+ 1. **Captures the mockup.** It draws the page in Chromium at the variant's width. Dark mode is drawn by emulating `prefers-color-scheme`. RTL is drawn by setting `dir=rtl` on the page.
217
+ 2. **Captures the web render** from the app's recorded data, as `himi render` does by default. Native frames come through a capture seam. Until #4935 lands, the seam reports iOS and Android as skipped.
218
+ 3. **Scores mockup↔web** with ImageMagick SSIM, globally and per tile. The worst tile says where the screens differ most.
219
+ 4. **Asks a fresh model** two questions, using the repo's fidelity judge prompt. The model never ran in the session that wrote the app.
220
+ - **Design:** does WEB look like the MOCKUP? This judges the port.
221
+ - **Parity:** do IOS and ANDROID look like WEB? This judges the native renderers.
222
+
223
+ Each row gets a status:
224
+
225
+ | Status | When |
226
+ |---|---|
227
+ | **fail** | The judge answers `mismatch` to either question, or the mockup↔web score is below a `fail` threshold you set. |
228
+ | **warn** | `partial`, `cannot_tell`, a skipped surface, a mockup with no styling for the variant (`no_reference`), a missing mockup (`fidelity_mockup_missing`), or a score below `warn`. |
229
+ | **pass** | Anything else. |
230
+
231
+ The command exits 1 if any row fails. Output goes to `.himi/fidelity/<run>/`: `report.json` and one strip PNG per row. `--post-pr <n>` keeps one plain PR comment per app up to date. The comment opens with `<!-- himi-fidelity: app=<app> run=<id> -->`, and only your own comment is ever edited. It is never a review thread.
232
+
233
+ The pixel score has no default threshold, on purpose. On the repo's four HTML-first fixture apps, a blank page scores 87–95 against a mockup, while faithful ports score 69–93. Native chrome also shifts every row, so a native bug and its fix score within a point of each other. The judge is the gate, and the score points at where to look. Set thresholds only for a screen whose port is meant to be pixel-close.
234
+
235
+ Without the `claude` CLI, every verdict is `cannot_tell`, and no row passes. Outside the himalaya repo, the command refuses with `code: "fidelity_outside_repo"`.
236
+
198
237
  ## Qualification
199
238
 
200
239
  Automated tests cover v1
@@ -6,7 +6,7 @@ repurposed when human wording changes. New codes may be added; consumers must
6
6
  handle an unknown code as a failure, without parsing prose.
7
7
 
8
8
  **Rollout:** this contract is enforced for **`himi push`**, including `--only`,
9
- first, for **`himi store iap connect`**, for **`himi site member-app`**, and for the **`himi base44`** entity and function verbs. Other subcommands still have legacy failures without codes and are a
9
+ first, for **`himi store iap connect`**, for **`himi site member-app`**, for **`himi fidelity`**, and for the **`himi base44`** entity and function verbs. Other subcommands still have legacy failures without codes and are a
10
10
  follow-up migration. This is an additive change: existing `error`, `errors`,
11
11
  `message`, `hint`, status, body, and gate-specific fields stay as they were.
12
12
  Some legacy envelopes have no singular `error` or `hint`; consumers must not
@@ -394,6 +394,27 @@ On success (`ok: true`, stdout, exit 0) `capabilities[]` lists the ids the gener
394
394
  `--force` to overwrite it). A skipped file is not a failure. `orphaned[]`, when present, lists
395
395
  generated files for entities no longer declared. They are never deleted.
396
396
 
397
+ ## `himi fidelity` codes
398
+
399
+ `himi fidelity` failures print `ok: false` and `code`:
400
+
401
+ - `fidelity_rows_failed`: the run completed and at least one screen × variant row failed (a judge
402
+ `mismatch`, or a score below a threshold `hhp.json` sets). The report follows in the same
403
+ envelope. Exit 1.
404
+ - `fidelity_outside_repo`: the content directory is not inside a himalaya repo checkout, which
405
+ carries the fidelity judge; the command is repo-only for now. Exit 2.
406
+ - `fidelity_not_hhp`: the content directory has no `hhp.json`. Exit 2.
407
+ - `fidelity_unknown_screen`: `--screen` names a screen `hhp.json` does not declare. Exit 2.
408
+ - `fidelity_bad_flag`: a flag value is invalid (a missing content directory, an unknown
409
+ `--variant`, or a `--post-pr` that is not a PR number). Exit 2.
410
+ - `fidelity_post_failed`: `--post-pr` could not create or edit the PR comment. Exit 1.
411
+ - `fidelity_error`: any other failure before a report existed, such as an unreadable `hhp.json`.
412
+ Exit 1.
413
+
414
+ A row's own failure is not a command failure. A missing mockup gives that row
415
+ `error.code: "fidelity_mockup_missing"`, and a capture, score or strip that throws gives it
416
+ `error.code: "fidelity_row_failed"`. Both rows warn, and the other rows still run.
417
+
397
418
  ## Follow-ups
398
419
 
399
420
  - Migrate failure envelopes in subcommands other than `push`, keeping this contract.
@@ -14,6 +14,23 @@ areas, always in the same order, so you can skim for the one you care about.
14
14
 
15
15
  ---
16
16
 
17
+ ## 2026-11-01
18
+
19
+ ### Getting started & the CLI
20
+
21
+ - `himi template screens`, `himi template inspect` and `himi template sweep` now work on a
22
+ template whose `dev/index.ts` is written by hand, not only on the generated `SCREENS` layout.
23
+ Before, all three refused every showcase and starter template (`banking-wallet`, `tip-calc`,
24
+ `weather`, …). `screens` and `inspect` read such a file by loading it the way `himi validate`
25
+ does, and their output says `"layout": "evaluated"`. `screens --show/--write/--add` and
26
+ `himi template trim` still need the generated layout. (#4985)
27
+ - `himi template publish` now turns an app's own URL scheme (`himalaya-<app>`, in
28
+ `navigation.scheme` and in an auth `redirectUri`) into the scaffold's, so `himi init <name>
29
+ --template <t>` answers `himalaya-<name>` for a template published from a regular app too, as
30
+ it already did for the generated templates. The showcase and starter templates gave every
31
+ scaffold their own `himalaya-<t>` before. Apps scaffolded earlier keep the old value in
32
+ `config.ts` `navigation.scheme`. (#4985)
33
+
17
34
  ## 2026-10-22
18
35
 
19
36
  ### Getting started & the CLI
@@ -112,7 +112,7 @@ on the safe side ("may request"). The commands behind it:
112
112
  ```sh
113
113
  himi template recommend --text "a salon where clients book and buy products" # rank the catalog (or --verticals / --book)
114
114
  himi template inspect # recompute the inventory after edits (--dry-run writes nothing)
115
- himi template screens # list dev/index.ts screens without reading the file
115
+ himi template screens # list the screens and their workers (a hand-written dev/index.ts is evaluated)
116
116
  himi template screens --show himi_saved > saved.txt # ONE screen's entry
117
117
  himi template screens --write himi_saved --from saved.txt # put it back — re-parsed, refused if it breaks the file
118
118
  himi template screens --add himi_sellers --from sellers.txt --parent himi_branded_home # a NEW screen, registered as linkable
@@ -127,6 +127,16 @@ descriptor it is an Icon id). A one-word literal elsewhere — a service name, a
127
127
  action id, a URL — is wiring, and is never rewritten. Every changed file is syntax-checked before
128
128
  anything is written.
129
129
 
130
+ **Hand-written templates.** `inspect`, `screens` (the list) and `sweep` work on every template. A
131
+ generated template's `dev/index.ts` is one `SCREENS` map, read without running anything. A
132
+ hand-written one — the showcase apps, the starters, most apps published as templates — has no such
133
+ map, so `inspect` and `screens` load `dev/index.ts` the way `himi validate` does, which runs its
134
+ code, and build each screen to read its workers; the output says `"layout": "evaluated"`. `himi init`
135
+ never does that, because a `--remote` template is its publisher's code: its adopt block is skipped
136
+ for these, and `himi template inspect` is the next step. `screens --show/--write/--add` and `trim`
137
+ rewrite the map's source text, so they still need the generated layout; edit a hand-written
138
+ `dev/index.ts` directly.
139
+
130
140
  **Point a `branded-lite` (or vertical overlay) scaffold at your site.** Set
131
141
  `WIX_CLIENT_ID` (Headless OAuth client on that site) and `WIX_SITE_URL` before build /
132
142
  preview — the `clientId` **is** the site binding (no separate MSID field). Placeholders
@@ -779,6 +779,10 @@ target is another tab's root screen does not select that tab — it pushes the s
779
779
  - An id the app is not showing right now — unknown, hidden by the nav worker, or any id when
780
780
  the app has no tab bar or sidebar rail (`single` / `drawer` navigation) — is ignored and
781
781
  logged as `nav_verb_dropped`. The user stays where they are.
782
+ - A push identical to the one the router applied less than 500 ms before (same screen, same
783
+ params) is one push, logged as `nav_push_coalesced`: a worker that answers late answers every
784
+ tap it was given, and three taps on a busy main thread would otherwise land three screens
785
+ deep. Any other verb in between starts over, so push, back and the same push again all apply.
782
786
  - Asking for the tab the user is already on does nothing. It does **not** pop that tab to its
783
787
  root the way a second tap on the tab bar does — unless you ask for it with `reset: true`.
784
788
  - `reset: true` pops the selected tab to its root, even when it is the current tab. This is
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1528.0",
3
+ "version": "0.1530.0",
4
4
  "type": "module",
5
5
  "description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
6
6
  "keywords": [
@@ -71,5 +71,5 @@
71
71
  "artifactId": "himalaya-cli"
72
72
  }
73
73
  },
74
- "falconPackageHash": "977ce0e45046b28615366bb368c7ceb90d7a1f9404024a58bee20404"
74
+ "falconPackageHash": "f0490b6c81aec1fb5f5ecf75b8397ad986b6ccfe13b57fc83e2441ec"
75
75
  }
@@ -424,7 +424,7 @@ export default defineApp({
424
424
  // Your on-device database. It must declare every entity a worker reads or writes,
425
425
  // or those calls fail closed — keep it in step with `local_database` above.
426
426
  dataSchema: {
427
- "version": 1,
427
+ "version": 2,
428
428
  "entities": [
429
429
  {
430
430
  "name": "products",
@@ -549,6 +549,17 @@ export default defineApp({
549
549
  }
550
550
  ]
551
551
  },
552
+ {
553
+ "name": "food_orders",
554
+ "encrypted": true,
555
+ "fields": [
556
+ {
557
+ "name": "id",
558
+ "type": "string",
559
+ "required": true
560
+ }
561
+ ]
562
+ },
552
563
  {
553
564
  "name": "member_bookings",
554
565
  "encrypted": true,