@condorinst/mobile-bridge 0.21.0 → 0.22.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.
@@ -8,10 +8,11 @@ costs, and how to see what it is doing once it is there.
8
8
 
9
9
  You do not install a bundle on a phone. The app downloads it:
10
10
 
11
- 1. You deliver `bundle.zip`, its `bundleSize` and its `bundleHash` (printed by
12
- `condor-mobile-bridge build`) to your Condor contact.
13
- 2. Condor publishes it for **your company**. There is exactly one current
14
- bundle per company.
11
+ 1. The bundle is published for **your company** — by you, with
12
+ `npx condor-mobile-bridge canvas publish` (below), or by your Condor
13
+ contact. There is exactly one current bundle per company.
14
+ 2. The server checks it on upload (2 MB, `index.html` at the root,
15
+ self-contained) and records its `bundleSize` and `bundleHash`.
15
16
  3. Each copy of the app asks for its company's manifest when the Home opens
16
17
  and every time the app returns to the foreground. If the `bundleHash`
17
18
  changed, it downloads the `.zip`, checks size and hash, and swaps the Home
@@ -26,24 +27,52 @@ Consequences:
26
27
  bundle, or shows its default screen, if the download fails a gate — which is
27
28
  why `validate --strict` must pass before you hand anything over.
28
29
 
29
- ## Development and production are separate worlds
30
+ ## Test on a test company, never on your real one
30
31
 
31
- Condor runs a **development** environment next to production. An app build
32
- talks to exactly one of them, and accounts, devices and bundles do not cross
33
- over:
32
+ You work against production — the store app and the production Condor system.
33
+ Since a publish reaches every user of the company at once, ask Condor for a
34
+ **test company** with:
34
35
 
35
- - a development build of the app sees only development accounts and bundles;
36
- - the store app sees only production.
36
+ - a **manager** user for you, to publish (see below);
37
+ - one or more **test accounts** with devices, to log in to the store app on
38
+ your phone.
37
39
 
38
- So, to test on a phone, ask Condor for three things that match: a **test
39
- account** in a **test company** in the development environment, a
40
- **development build** of the app (Android), and to publish your bundle **to that
41
- test company**. Never iterate on a production company: every publish reaches
42
- real people.
40
+ Each iteration on the device is then: build → `canvas publish` to the test
41
+ company → bring the app to the foreground. Do every iteration you can in the
42
+ harness first, and publish to your real company only what passed there.
43
43
 
44
- Each iteration on the device is therefore: build → validate → hand over →
45
- Condor publishes → bring the app to the foreground. That is slow, so do every
46
- iteration you can in the harness first.
44
+ (Condor also runs a development environment for its own staff; a client does
45
+ not need it.)
46
+
47
+ ## Publishing from the command line
48
+
49
+ ```bash
50
+ npx condor-mobile-bridge canvas publish dist/index.html --version 1.4.0
51
+ ```
52
+
53
+ It does what the Condor web admin does, with the same login:
54
+
55
+ 1. It validates the bundle locally (the same gates as `validate`) and refuses
56
+ anything the app would reject — before sending anything.
57
+ 2. It asks for your **company id** and **user id** — the numbers you type in
58
+ the Condor web login — unless you pass `--company` / `--user` or set
59
+ `CONDOR_CANVAS_COMPANY` / `CONDOR_CANVAS_USER`.
60
+ 3. It shows the company, version, size and hash, warns that the bundle goes
61
+ **live at once for every user of the company**, and asks `y/N`.
62
+ 4. It asks for your **password** without echo — there is no flag or variable
63
+ for it, and it is never stored — and, when your company uses two-factor
64
+ login, for the code sent to your e-mail.
65
+ 5. It publishes and prints the result.
66
+
67
+ Each version can be published once per company: publish a fix as a new
68
+ version. `canvas list` shows the bundles of the company, and
69
+ `canvas revoke <id> --fallback-version <v>` takes one back and serves another;
70
+ revoking the current bundle without a fallback leaves the company on the app's
71
+ default screen.
72
+
73
+ You need a **manager** user of the company. The command needs a terminal (it
74
+ prompts), so it does not run in CI; and an AI agent must not run it on its own
75
+ — it publishes to real people and asks for your password.
47
76
 
48
77
  ## Seeing what the bundle does on the phone
49
78
 
@@ -74,11 +103,12 @@ logging and crash reporting (rate limited: 20 per 10 s, 4 KB per field). Those
74
103
  are Condor's tools: when you need the errors of a test session, ask your Condor
75
104
  contact, with the test account and the time window.
76
105
 
77
- ## Before you ask for a publish
106
+ ## Before you publish
78
107
 
79
108
  - [ ] `npx condor-mobile-bridge validate -i dist/bundle.zip --strict` exits 0.
80
109
  - [ ] Every harness scenario passes (`default`, `cold-start`, `no-devices`,
81
110
  `shared-serial`, `offline`).
82
- - [ ] You know which environment and which company the bundle is for.
83
- - [ ] You sent `bundleSize` and `bundleHash` with the `.zip`, so the published
84
- bundle can be checked against what you built.
111
+ - [ ] It is going to the **test company** first, with a version number not
112
+ used before in that company.
113
+ - [ ] After publishing, the `bundleHash` that `canvas publish` prints matches
114
+ the one `build` printed.
@@ -31,7 +31,7 @@ renders inside the app, talking to the device through the Condor bridge.
31
31
  ```bash
32
32
  npm install @condorinst/mobile-bridge
33
33
  ```
34
- Pin `"@condorinst/mobile-bridge": "^0.21.0"` (beta; auto-updates patches).
34
+ Pin `"@condorinst/mobile-bridge": "^0.22.0"` (beta; auto-updates patches).
35
35
 
36
36
  ### 2. Start from the example
37
37
  Copy [`examples/minimal-home`](../examples/minimal-home) — it already wires the
@@ -76,11 +76,15 @@ sandbox and the CSP block at runtime. **A non-zero exit means do not deliver.**
76
76
  Errors are outright rejections by the app; warnings install fine and then
77
77
  misbehave on the device, which is harder to diagnose.
78
78
 
79
- ### 6. Deliver
80
- Send `dist/bundle.zip`, with the `bundleSize` and `bundleHash` printed by
81
- `build`, through the channel Condor gave you. We publish it to your company —
82
- first to a **development test company**, because a publish reaches every user
83
- of the company.
79
+ ### 6. Publish
80
+ With a manager user of your company:
81
+ ```bash
82
+ npx condor-mobile-bridge canvas publish dist/index.html --version 1.0.0
83
+ ```
84
+ It validates, shows what goes where, asks for confirmation and your password,
85
+ and publishes. Publish to your **test company** first: a publish reaches every
86
+ user of the company at once. (Without a manager user, send `dist/bundle.zip`
87
+ with its `bundleSize` and `bundleHash` to your Condor contact.)
84
88
 
85
89
  ### 7. Verify on a device
86
90
  Condor publishes → the app downloads, validates and renders your Home the next
@@ -14,7 +14,7 @@
14
14
  "node": ">=18"
15
15
  },
16
16
  "dependencies": {
17
- "@condorinst/mobile-bridge": "^0.21.0"
17
+ "@condorinst/mobile-bridge": "^0.22.0"
18
18
  },
19
19
  "devDependencies": {
20
20
  "@types/node": "^22.0.0",
package/llms-full.txt CHANGED
@@ -1,4 +1,4 @@
1
- # @condorinst/mobile-bridge 0.21.0 — full documentation
1
+ # @condorinst/mobile-bridge 0.22.0 — full documentation
2
2
 
3
3
  Generated from the files listed below, in reading order. Payload types are
4
4
  canonical in dist/index.d.ts; the machine-readable contract is
@@ -71,7 +71,7 @@ command (denied by policy).
71
71
  ## The golden path
72
72
 
73
73
  ```bash
74
- npm install @condorinst/mobile-bridge@^0.21.0
74
+ npm install @condorinst/mobile-bridge@^0.22.0
75
75
  ```
76
76
 
77
77
  ```ts
@@ -155,6 +155,15 @@ answered and dropped. The **◀ OS back** button at the top presses the OS back
155
155
  button. `--native-version null` (or `0.15.0`, …) makes the handshake report that
156
156
  version, to test your capability branches.
157
157
 
158
+ ## Publishing — ask the human, never run it yourself
159
+
160
+ `npx condor-mobile-bridge canvas publish` puts the bundle live at once for every
161
+ user of a company, and asks for the person's password. **Do not run it.** When
162
+ the bundle is ready, tell the human the exact command — for example
163
+ `npx condor-mobile-bridge canvas publish dist/index.html --version 1.0.1` — and
164
+ recommend publishing to their **test company** first. See
165
+ `docs/device-testing.md`.
166
+
158
167
  ## The validation loop — run this before you call the work done
159
168
 
160
169
  ```bash
@@ -225,17 +234,17 @@ Copy it first, then install, so its `package.json` is the one you keep:
225
234
 
226
235
  ```bash
227
236
  mkdir my-home && cd my-home
228
- npm pack @condorinst/mobile-bridge@^0.21.0 && tar -xzf condorinst-mobile-bridge-*.tgz
237
+ npm pack @condorinst/mobile-bridge@^0.22.0 && tar -xzf condorinst-mobile-bridge-*.tgz
229
238
  cp -r package/examples/minimal-home/. . && rm -rf package condorinst-mobile-bridge-*.tgz
230
239
  npm install
231
240
  ```
232
241
 
233
- Or, in a project you already have: `npm install @condorinst/mobile-bridge@^0.21.0`
242
+ Or, in a project you already have: `npm install @condorinst/mobile-bridge@^0.22.0`
234
243
  and copy only `src/main.ts`, `build.mjs` and `index.html` from
235
244
  `node_modules/@condorinst/mobile-bridge/examples/minimal-home/`.
236
245
 
237
246
  Pin the SDK to the minor you are building against. Below `1.0.0`, a minor can
238
- change the contract — `^0.21.0` gives you patches only, which is what you want.
247
+ change the contract — `^0.22.0` gives you patches only, which is what you want.
239
248
 
240
249
  **Run it in the harness**, not in a bare browser tab:
241
250
 
@@ -502,7 +511,7 @@ Four numbers coexist. Only one tells you what the device can do.
502
511
  | `nativeVersion` | `0.17.0` | **The capability signal.** The bridge schema the app on this device implements. |
503
512
  | `shellVersion` | `0.6.0` | The Condor shell wrapping your iframe. |
504
513
  | client protocol | `0.5.0` | The postMessage protocol `BridgeClient` speaks. |
505
- | package | `0.21.0` | The npm version you compiled against. |
514
+ | package | `0.22.0` | The npm version you compiled against. |
506
515
 
507
516
  ```ts
508
517
  const ack = await BridgeClient.handshake({ clientVersion: '1.0.0' });
@@ -1077,10 +1086,11 @@ costs, and how to see what it is doing once it is there.
1077
1086
 
1078
1087
  You do not install a bundle on a phone. The app downloads it:
1079
1088
 
1080
- 1. You deliver `bundle.zip`, its `bundleSize` and its `bundleHash` (printed by
1081
- `condor-mobile-bridge build`) to your Condor contact.
1082
- 2. Condor publishes it for **your company**. There is exactly one current
1083
- bundle per company.
1089
+ 1. The bundle is published for **your company** — by you, with
1090
+ `npx condor-mobile-bridge canvas publish` (below), or by your Condor
1091
+ contact. There is exactly one current bundle per company.
1092
+ 2. The server checks it on upload (2 MB, `index.html` at the root,
1093
+ self-contained) and records its `bundleSize` and `bundleHash`.
1084
1094
  3. Each copy of the app asks for its company's manifest when the Home opens
1085
1095
  and every time the app returns to the foreground. If the `bundleHash`
1086
1096
  changed, it downloads the `.zip`, checks size and hash, and swaps the Home
@@ -1095,24 +1105,52 @@ Consequences:
1095
1105
  bundle, or shows its default screen, if the download fails a gate — which is
1096
1106
  why `validate --strict` must pass before you hand anything over.
1097
1107
 
1098
- ## Development and production are separate worlds
1108
+ ## Test on a test company, never on your real one
1109
+
1110
+ You work against production — the store app and the production Condor system.
1111
+ Since a publish reaches every user of the company at once, ask Condor for a
1112
+ **test company** with:
1113
+
1114
+ - a **manager** user for you, to publish (see below);
1115
+ - one or more **test accounts** with devices, to log in to the store app on
1116
+ your phone.
1099
1117
 
1100
- Condor runs a **development** environment next to production. An app build
1101
- talks to exactly one of them, and accounts, devices and bundles do not cross
1102
- over:
1118
+ Each iteration on the device is then: build → `canvas publish` to the test
1119
+ company → bring the app to the foreground. Do every iteration you can in the
1120
+ harness first, and publish to your real company only what passed there.
1103
1121
 
1104
- - a development build of the app sees only development accounts and bundles;
1105
- - the store app sees only production.
1122
+ (Condor also runs a development environment for its own staff; a client does
1123
+ not need it.)
1106
1124
 
1107
- So, to test on a phone, ask Condor for three things that match: a **test
1108
- account** in a **test company** in the development environment, a
1109
- **development build** of the app (Android), and to publish your bundle **to that
1110
- test company**. Never iterate on a production company: every publish reaches
1111
- real people.
1125
+ ## Publishing from the command line
1112
1126
 
1113
- Each iteration on the device is therefore: build → validate → hand over →
1114
- Condor publishes → bring the app to the foreground. That is slow, so do every
1115
- iteration you can in the harness first.
1127
+ ```bash
1128
+ npx condor-mobile-bridge canvas publish dist/index.html --version 1.4.0
1129
+ ```
1130
+
1131
+ It does what the Condor web admin does, with the same login:
1132
+
1133
+ 1. It validates the bundle locally (the same gates as `validate`) and refuses
1134
+ anything the app would reject — before sending anything.
1135
+ 2. It asks for your **company id** and **user id** — the numbers you type in
1136
+ the Condor web login — unless you pass `--company` / `--user` or set
1137
+ `CONDOR_CANVAS_COMPANY` / `CONDOR_CANVAS_USER`.
1138
+ 3. It shows the company, version, size and hash, warns that the bundle goes
1139
+ **live at once for every user of the company**, and asks `y/N`.
1140
+ 4. It asks for your **password** without echo — there is no flag or variable
1141
+ for it, and it is never stored — and, when your company uses two-factor
1142
+ login, for the code sent to your e-mail.
1143
+ 5. It publishes and prints the result.
1144
+
1145
+ Each version can be published once per company: publish a fix as a new
1146
+ version. `canvas list` shows the bundles of the company, and
1147
+ `canvas revoke <id> --fallback-version <v>` takes one back and serves another;
1148
+ revoking the current bundle without a fallback leaves the company on the app's
1149
+ default screen.
1150
+
1151
+ You need a **manager** user of the company. The command needs a terminal (it
1152
+ prompts), so it does not run in CI; and an AI agent must not run it on its own
1153
+ — it publishes to real people and asks for your password.
1116
1154
 
1117
1155
  ## Seeing what the bundle does on the phone
1118
1156
 
@@ -1143,14 +1181,15 @@ logging and crash reporting (rate limited: 20 per 10 s, 4 KB per field). Those
1143
1181
  are Condor's tools: when you need the errors of a test session, ask your Condor
1144
1182
  contact, with the test account and the time window.
1145
1183
 
1146
- ## Before you ask for a publish
1184
+ ## Before you publish
1147
1185
 
1148
1186
  - [ ] `npx condor-mobile-bridge validate -i dist/bundle.zip --strict` exits 0.
1149
1187
  - [ ] Every harness scenario passes (`default`, `cold-start`, `no-devices`,
1150
1188
  `shared-serial`, `offline`).
1151
- - [ ] You know which environment and which company the bundle is for.
1152
- - [ ] You sent `bundleSize` and `bundleHash` with the `.zip`, so the published
1153
- bundle can be checked against what you built.
1189
+ - [ ] It is going to the **test company** first, with a version number not
1190
+ used before in that company.
1191
+ - [ ] After publishing, the `bundleHash` that `canvas publish` prints matches
1192
+ the one `build` printed.
1154
1193
 
1155
1194
  <!-- ===== docs/limits.md ===== -->
1156
1195
 
@@ -1340,13 +1379,13 @@ Pin the version with a caret:
1340
1379
  ```jsonc
1341
1380
  // package.json
1342
1381
  "dependencies": {
1343
- "@condorinst/mobile-bridge": "^0.21.0"
1382
+ "@condorinst/mobile-bridge": "^0.22.0"
1344
1383
  }
1345
1384
  ```
1346
1385
 
1347
- **Updates.** The SDK is on `0.x` during the pilot. With `^0.21.0`, running
1348
- `npm install` (or your CI) auto-picks **patch** releases (`0.21.x`) — bug fixes,
1349
- no action needed. A `0.22.0` (a larger change during beta) is an intentional
1386
+ **Updates.** The SDK is on `0.x` during the pilot. With `^0.22.0`, running
1387
+ `npm install` (or your CI) auto-picks **patch** releases (`0.22.x`) — bug fixes,
1388
+ no action needed. A `0.23.0` (a larger change during beta) is an intentional
1350
1389
  opt-in: you bump the range when you're ready. `1.0.0` will mark the
1351
1390
  production-stable contract.
1352
1391
 
@@ -1648,7 +1687,9 @@ bundles and falls back to a default screen, so keep under the limit.
1648
1687
 
1649
1688
  ## 7. Deliver
1650
1689
 
1651
- Send the resulting `dist/bundle.zip` through the publication channel Condor
1690
+ Publish it yourself with a manager user of your company —
1691
+ `npx condor-mobile-bridge canvas publish dist/index.html --version 1.0.0` — or
1692
+ send the resulting `dist/bundle.zip` through the publication channel Condor
1652
1693
  gave you (the admin upload). The backend validates structure, self-containment,
1653
1694
  and size on upload, and records the `bundleSize`/`bundleHash`. Once published,
1654
1695
  the app downloads, verifies, and renders your Home — for **every user of your
@@ -1711,7 +1752,7 @@ renders inside the app, talking to the device through the Condor bridge.
1711
1752
  ```bash
1712
1753
  npm install @condorinst/mobile-bridge
1713
1754
  ```
1714
- Pin `"@condorinst/mobile-bridge": "^0.21.0"` (beta; auto-updates patches).
1755
+ Pin `"@condorinst/mobile-bridge": "^0.22.0"` (beta; auto-updates patches).
1715
1756
 
1716
1757
  ### 2. Start from the example
1717
1758
  Copy [`examples/minimal-home`](../examples/minimal-home) — it already wires the
@@ -1756,11 +1797,15 @@ sandbox and the CSP block at runtime. **A non-zero exit means do not deliver.**
1756
1797
  Errors are outright rejections by the app; warnings install fine and then
1757
1798
  misbehave on the device, which is harder to diagnose.
1758
1799
 
1759
- ### 6. Deliver
1760
- Send `dist/bundle.zip`, with the `bundleSize` and `bundleHash` printed by
1761
- `build`, through the channel Condor gave you. We publish it to your company —
1762
- first to a **development test company**, because a publish reaches every user
1763
- of the company.
1800
+ ### 6. Publish
1801
+ With a manager user of your company:
1802
+ ```bash
1803
+ npx condor-mobile-bridge canvas publish dist/index.html --version 1.0.0
1804
+ ```
1805
+ It validates, shows what goes where, asks for confirmation and your password,
1806
+ and publishes. Publish to your **test company** first: a publish reaches every
1807
+ user of the company at once. (Without a manager user, send `dist/bundle.zip`
1808
+ with its `bundleSize` and `bundleHash` to your Condor contact.)
1764
1809
 
1765
1810
  ### 7. Verify on a device
1766
1811
  Condor publishes → the app downloads, validates and renders your Home the next
package/llms.txt CHANGED
@@ -7,7 +7,7 @@
7
7
  > pagination, permissions, system status and language.
8
8
 
9
9
  Every URL below is plain text over HTTPS, pinned to a released version, and
10
- needs no authentication. Replace `0.21.0` with the version you depend on; the
10
+ needs no authentication. Replace `0.22.0` with the version you depend on; the
11
11
  contract changes between minors while the package is below 1.0.0.
12
12
 
13
13
  The same files ship inside the npm tarball, so if you have run
@@ -16,29 +16,29 @@ The same files ship inside the npm tarball, so if you have run
16
16
 
17
17
  ## Start here
18
18
 
19
- - [AGENTS.md](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/AGENTS.md): The contract in one screen — hard rules, the golden-path boot sequence, the browser harness and the validation loop. Read before writing code.
20
- - [llms-full.txt](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/llms-full.txt): AGENTS.md and every document under docs/ concatenated into one file, for a single fetch.
21
- - [Agent guide](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/docs/agent-guide.md): Step-by-step construction of a client Home, with the checks to run at each stage.
19
+ - [AGENTS.md](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/AGENTS.md): The contract in one screen — hard rules, the golden-path boot sequence, the browser harness and the validation loop. Read before writing code.
20
+ - [llms-full.txt](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/llms-full.txt): AGENTS.md and every document under docs/ concatenated into one file, for a single fetch.
21
+ - [Agent guide](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/docs/agent-guide.md): Step-by-step construction of a client Home, with the checks to run at each stage.
22
22
 
23
23
  ## Reference
24
24
 
25
- - [Bridge contract](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/docs/bridge-contract.md): Every observable key, every command, the three error shapes, and the capability matrix by native version.
26
- - [Machine-readable contract](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/contract/bridge-contract.json): The same contract as JSON. Also importable as `@condorinst/mobile-bridge/contract`.
27
- - [Limits](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/docs/limits.md): Every hard limit — payload size, rate limits, bundle size, timeouts — with what happens when you cross it.
28
- - [Troubleshooting](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/docs/troubleshooting.md): Why a command did nothing, and why the device list never came. Silence is the platform's dominant failure mode.
29
- - [Testing on a device](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/docs/device-testing.md): How a bundle reaches the phone, development vs production, inspecting the WebView, and where errors go.
30
- - [TypeScript declarations](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/dist/index.d.ts): Authoritative payload shapes, with documentation on every member.
25
+ - [Bridge contract](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/docs/bridge-contract.md): Every observable key, every command, the three error shapes, and the capability matrix by native version.
26
+ - [Machine-readable contract](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/contract/bridge-contract.json): The same contract as JSON. Also importable as `@condorinst/mobile-bridge/contract`.
27
+ - [Limits](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/docs/limits.md): Every hard limit — payload size, rate limits, bundle size, timeouts — with what happens when you cross it.
28
+ - [Troubleshooting](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/docs/troubleshooting.md): Why a command did nothing, and why the device list never came. Silence is the platform's dominant failure mode.
29
+ - [Testing on a device](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/docs/device-testing.md): How a bundle reaches the phone, development vs production, inspecting the WebView, and where errors go.
30
+ - [TypeScript declarations](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/dist/index.d.ts): Authoritative payload shapes, with documentation on every member.
31
31
 
32
32
  ## Guides
33
33
 
34
- - [Client guide](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/docs/client-guide.md): Narrative walkthrough for a developer building the Home by hand.
35
- - [Pilot onboarding](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/docs/pilot-onboarding.md): Checklist from zero to a bundle delivered to Condor.
36
- - [README](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/README.md): Package overview, install, quickstart.
37
- - [CHANGELOG](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/CHANGELOG.md): When each capability was introduced. The most precise record of what a given native version supports.
34
+ - [Client guide](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/docs/client-guide.md): Narrative walkthrough for a developer building the Home by hand.
35
+ - [Pilot onboarding](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/docs/pilot-onboarding.md): Checklist from zero to a bundle delivered to Condor.
36
+ - [README](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/README.md): Package overview, install, quickstart.
37
+ - [CHANGELOG](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/CHANGELOG.md): When each capability was introduced. The most precise record of what a given native version supports.
38
38
 
39
39
  ## Examples
40
40
 
41
- - [Minimal home](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.21.0/examples/minimal-home/src/main.ts): A complete, working client with the reference boot sequence. Copy this as your starting point, and run it with `npx condor-mobile-bridge dev`.
41
+ - [Minimal home](https://cdn.jsdelivr.net/npm/@condorinst/mobile-bridge@0.22.0/examples/minimal-home/src/main.ts): A complete, working client with the reference boot sequence. Copy this as your starting point, and run it with `npx condor-mobile-bridge dev`.
42
42
 
43
43
  ## Optional
44
44
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@condorinst/mobile-bridge",
3
- "version": "0.21.0",
3
+ "version": "0.22.0",
4
4
  "description": "TypeScript SDK for the JS↔Native bridge of the Condor white-label mobile app.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "private": false,