@wix/himalaya-cli 0.1448.0 → 0.1450.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.
package/dist/cli.mjs CHANGED
@@ -8059,7 +8059,6 @@ function buttonVariant(style) {
8059
8059
  var SYSTEM_FONT_FAMILY, TONAL_ELEVATION_ALPHA, BUTTON_MIN_HIT_TARGET, nonNegative, nonEmpty2, own, COLOR_TOKEN_PROPS, TYPOGRAPHY_TOKEN_PROPS, BUTTON_VARIANTS;
8060
8060
  var init_tokens = __esm({
8061
8061
  "../../core/ts/src/tokens.ts"() {
8062
- "use strict";
8063
8062
  SYSTEM_FONT_FAMILY = "$system";
8064
8063
  TONAL_ELEVATION_ALPHA = [0, 0.05, 0.08, 0.11, 0.12, 0.14];
8065
8064
  BUTTON_MIN_HIT_TARGET = 44;
@@ -8115,7 +8114,6 @@ function resolveTranslation(value, catalog3, sourceCatalog) {
8115
8114
  var BINDING_SIGILS, BINDING_SIGIL_RE, TRANSLATION_PREFIX, TRANSLATION_KEY_RE;
8116
8115
  var init_bindings = __esm({
8117
8116
  "../../core/ts/src/bindings.ts"() {
8118
- "use strict";
8119
8117
  BINDING_SIGILS = ["service", "flag", "item", "t"];
8120
8118
  BINDING_SIGIL_RE = new RegExp(
8121
8119
  `^\\$(?:${BINDING_SIGILS.filter((s2) => s2 !== "t").join("|")})\\b|^\\$t:`
@@ -235,12 +235,12 @@ validation, which is what it used to cost.
235
235
  for the standard case; `Fab` for a single floating primary action on a scroll; `Menu` for a set of
236
236
  secondary actions behind one affordance. *One `primary` button per screen.* An **`iconOnly` button still
237
237
  needs a `title`** (`Button.title` is non-optional in the native schema — it doubles as the a11y label).
238
- > **Strict whole-screen decode — supply every required prop.** The native renderer decodes a screen's
239
- > descriptor with strict `Codable`: a single missing non-optional field (e.g. a titleless `Button`)
240
- > makes the **whole screen** fail to decode and fall back to the app's generic *"Couldn't load"* error
241
- > state — you do **not** get a partial render with one broken node. When a screen unexpectedly shows the
242
- > error state, suspect a missing required prop, not a network failure. (The dev-server serves it `200`;
243
- > the strictness is on-device.)
238
+ > **Required fields still matter.** A single missing non-optional field (e.g. a titleless `Button`)
239
+ > can make the **whole screen** fail to decode and fall back to the app's generic *"Couldn't load"*
240
+ > error state. An unknown value in an optional enum field decodes to nil (the field is simply absent; only a required enum with an explicit fallback receives one), and an undecodable child
241
+ > (for example an unknown required discriminator) is replaced by an `unknown` placeholder, so those cases do not discard the rest of the screen. When a
242
+ > screen unexpectedly shows the error state, suspect a missing required prop, not a network failure.
243
+ > (The dev-server serves it `200`; required-field validation is on-device.)
244
244
 
245
245
  **Navigation** — `Tabs` / `SegmentedControl` to switch peer views; `Pager` + `PageControl` for
246
246
  full-width swipe; `StepIndicator` for a wizard's progress; `CollapsingHeader` for a large-title-to-inline
@@ -315,8 +315,8 @@ build/validate/render cycles because the failure looks like a content bug rather
315
315
  "top". A wishlist heart authored as a top-right overlay therefore lands **center-right**. For a
316
316
  true corner overlay use a `ZStack` whose overlay child carries its own padding, rather than
317
317
  looking for an alignment value that does not exist. Authoring one anyway is a hard error —
318
- `validate --strict` rejects an unknown enum value because the native decoders drop the whole
319
- screen rather than degrading the field.
318
+ `validate --strict` still catches unknown enum values for authoring feedback, even though the
319
+ runtime decoders decode an unknown optional-field value to nil (a required discriminator degrades the child to an `unknown` placeholder) rather than discarding the whole screen.
320
320
  - **A `Text` sharing a flex row with a `Spacer` gets truncated or wrapped.** The spacer takes the
321
321
  slack the text needed. Give the text `fillMaxWidth` (or put it in its own row) instead of relying
322
322
  on the spacer to push a sibling; see the "centered separator" idiom above for the same hazard with
@@ -124,7 +124,7 @@ Only **unambiguous** defects, so a green run stays worth trusting:
124
124
  | `nav-target-missing` | **warning** | A `himi.open` whose target is neither a baked screen, nor one of the app's declared `linkableScreens`, nor an instance of one (`course_detail_c1` under the base `course_detail`) — the tap opens nothing. Only judged when the caller supplies the app's exact linkable set; an absent set means no opinion, never a guess. A target still carrying an **unresolved** `$` token is dropped before it becomes an edge and is never judged — but one that RESOLVED to a concrete id is judged, which is the point: `$item.detailScreenId` resolving to `course_detail_c1` against the first row is exactly the case the instance rule exists for. |
125
125
  | `poll-action-missing` | error | A `_poll` directive every host will silently ignore — an action the bundle never declares, a malformed `action`, a missing `id`, or a non-positive `intervalMs`. Each ends the same way: a screen that never refreshes, with nothing saying why. Nothing in the descriptor names the polled action, so no static check can see it. (A merely too-small interval is legal — the host clamps it.) |
126
126
  | `no-request-issued` | **warning** | A worker that uses the Wix transport but never fetches — "the screen loaded with sample data." A warning: a conditional or tap-triggered fetch is legitimate. |
127
- | `native-decode-failed` | error | Under `--native`, the real Swift/Kotlin decoder rejected the baked descriptor bytes (one bad enum blanks the whole screen on device) — or the release's `tokens.json`, reported with `screen: "tokens.json"`: both natives decode it in one strict pass, so a single fractional `typography.*.size` or a `motions.*.duration` written in seconds drops the whole theme. A token finding fails the run but never counts as a failed screen. |
127
+ | `native-decode-failed` | error | Under `--native`, the real Swift/Kotlin decoder rejected the baked descriptor bytes (the oracle decodes strictly, so an unknown enum value or malformed child is reported here even though production decoding degrades it to a fallback or an `unknown` placeholder) — or the release's `tokens.json`, reported with `screen: "tokens.json"`: both natives decode it in one strict pass, so a single fractional `typography.*.size` or a `motions.*.duration` written in seconds drops the whole theme. A token finding fails the run but never counts as a failed screen. |
128
128
  | `token-type-invalid` | error | The package's tokens file holds a value a native `Int` field rejects — `typography.<k>.size` or `.weight`, `motions.<k>.duration` (milliseconds: `0.3` → `300`), or a `spacing` / `radius` entry — in the base document or any `idiom.<overlay>`. Both natives decode tokens.json in one strict pass, so one such value drops the WHOLE theme (iOS "Theme unavailable"; Android default palette and fonts) while the web preview looks right. Reported with `screen: "tokens.json"`, never counted as a failed screen; `himi validate` reports the same finding. |
129
129
  | `capability-undeclared` | error | A `capability.<id>.<verb>` call the screen's gate denied — reported from the gate itself, so it is raised **even when the worker catches the rejection** (which on device leaves a control that silently does nothing). Fix: declare the id on that screen's `logicBundle.declaredCapabilities` and in `config.ts` `capabilities`. One per capability per screen. See [Capabilities](#capabilities). |
130
130
  | `journey-failed` | error | A `himi-test.json` journey named an action the screen lacks, threw, or never rendered its `expectText`. |
@@ -317,9 +317,9 @@ findings appear as accepted-risk entries so the file stays auditable.
317
317
 
318
318
  ### What it cannot tell you
319
319
 
320
- This is the **web renderer's** view. It cannot see native decode strictness (one bad enum field
321
- blanks an entire iOS/Android screen while this tree looks healthy) or components that render
322
- blank on device when bound — so rather than pass those silently it names them:
320
+ This is the **web renderer's** view. It cannot see native-only decode failures (for example, a
321
+ missing required field can still blank an iOS/Android screen while this tree looks healthy) or
322
+ components that render blank on device when bound — so rather than pass those silently it names them:
323
323
 
324
324
  ```
325
325
  ⚠ 2 nodes NOT verifiable headless:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1448.0",
3
+ "version": "0.1450.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": "ceeeb017afff0753eec531692afa7a5e7ca0bf9e38054ebdf2adf95f"
74
+ "falconPackageHash": "9e4b4eed20568576a872a08d2eebfc47562e413465af5dbaa19c3902"
75
75
  }