@bowmark/web 1.1.0 → 1.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.
package/README.md CHANGED
@@ -187,13 +187,20 @@ message.
187
187
 
188
188
  **What it fails CLOSED on, and the two things it must not.** A known unit with an
189
189
  unknown FUNCTION is refused — the table is authoritative about a unit it carries. An
190
- unknown UNIT passes straight through, because a Shopify family MEMBER
191
- (`providers.gymshark`) is absent from every manifest **by design** — `listProviders()`
192
- excludes members and always will — so refusing an unknown unit would refuse the largest
193
- part of the library. A function with no readable argument shape is an EXPLICIT `null` in
194
- the table rather than an absence, and passes through; that distinction is what makes the
190
+ unknown UNIT passes straight through, because a family MEMBER (`providers.gymshark`) is
191
+ absent from the RUNTIME validator table **by design** — `listProviders()` excludes
192
+ members and always will — so refusing an unknown unit would refuse the largest part of
193
+ the library. A function with no readable argument shape is an EXPLICIT `null` in the
194
+ table rather than an absence, and passes through; that distinction is what makes the
195
195
  first rule safe at all.
196
196
 
197
+ Note the deliberate asymmetry with the TYPES: since 2026-08-06 a member IS declared in
198
+ `library.d.ts`, so `providers.gymshark.search(…)` completes and type-checks. The two
199
+ answer different questions. Types are a build-time artifact and can afford one line per
200
+ member; the validator table is loaded into every client process at runtime, where 51,711
201
+ entries would be a cost paid on every call to buy nothing — the family's arguments are
202
+ already checked by the shared interface the compiler saw.
203
+
197
204
  **A parameter may not offer a type the wire cannot carry.** Every argument crosses as
198
205
  JSON on every surface, so `requestedTime?: string | Date` has an arm refused 100% of the
199
206
  time while the library says otherwise. `gate:public-types`' `wire-impossible-param`
@@ -204,10 +211,16 @@ for all 253 typed parameters.
204
211
  ## Regenerating
205
212
 
206
213
  ```bash
207
- pnpm run gen:public-types # writes src/generated/{library.d.ts,validators.ts}
208
- pnpm run gate:public-types # fails if either committed file is stale, or leaks
214
+ pnpm run gen:public-types # writes src/generated/{library.d.ts,validators.ts}
215
+ pnpm run gate:public-types # fails on a leak, a new refusal, a wire-impossible type
216
+ pnpm run gate:public-types:drift # …and on the committed copy being stale
209
217
  ```
210
218
 
219
+ **Only the middle one runs on your PR, and staleness is deliberately not fatal there.**
220
+ The committed copy goes stale every time any unit anywhere lands a function, which is not
221
+ something your branch can keep true — `regen-public-types.yml` repairs it on `main`. See
222
+ `.claude/rules/public-types.md` § The gate is SPLIT.
223
+
211
224
  **`skipLibCheck: false` in this package's `tsconfig.json` is load-bearing**, and the base
212
225
  config sets the opposite. That flag skips type checking of every `.d.ts`, and this
213
226
  package's whole deliverable IS a `.d.ts` — with the inherited default, `pnpm typecheck`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bowmark/web",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "description": "The public client for the Bowmark capability library — real TypeScript for the whole bowmark.* surface, with no Bowmark source on the caller's disk. ZERO runtime dependencies, deliberately and permanently.",
6
6
  "license": "MIT",