@wireai/activation 0.9.0 → 0.9.1

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/CHANGELOG.md CHANGED
@@ -3,6 +3,45 @@
3
3
  All notable changes to `@wireai/activation` (formerly `wireai-onboarding`).
4
4
  Historical entries below the rename keep the old package name on purpose.
5
5
 
6
+ ## [0.9.1] — 2026-07-17
7
+
8
+ ### Fixed: the review-decision wire is now documented as it actually is
9
+
10
+ No API change — `fetchReviewDecision` and `FetchReviewDecisionOptions` are byte-compatible
11
+ with 0.9.0. What changes is that the kit stops asserting things about the server that are not
12
+ true, and pins the wire with tests.
13
+
14
+ - **The "prod 422s without `session_id`" comment was stale and is corrected.** The server
15
+ relaxed `session_id` to optional on 2026-07-16 and the relaxation **is deployed**: the live
16
+ route declares `session_id` as `required: false`, and an unauthenticated call carrying no
17
+ params at all answers `401`, not `422` — query validation runs before the handler's auth
18
+ check, so a required param would have 422'd first. A session-less review gate reaches the
19
+ firing brain today.
20
+ - **`FetchReviewDecisionOptions` stays closed at `sessionId` / `deviceKey` — deliberately.**
21
+ The deployed `GET /v1/reviews/decision` declares exactly those two query params plus the
22
+ `Authorization` header. Hosts that hand-rolled this fetch invented `user_id` and
23
+ `session_count` params on the belief that "the server ignores what it doesn't read, so
24
+ passing it is always safe". They are no-ops: the route declares neither, and `session_count`
25
+ appears nowhere in the deployed API. Adding them to the kit would have made the call site
26
+ read as though identity and a session counter reach the firing brain when neither does.
27
+ Identity goes in `deviceKey`; a client-side session floor is `ReviewConfig.minSessions`.
28
+ - **`arm` is documented as load-bearing.** `fetchReviewDecision` already returns
29
+ `ReviewDecisionResponse` (`{fire, reason, arm}`). Narrowing it to `{fire, reason}` on the way
30
+ to the gate silently kills per-arm attribution across a reweighting; the docs now say so and
31
+ a regression test pins it.
32
+ - **`timeoutFallbackMs` is surfaced where the race actually happens.** It already exists on
33
+ `ReviewConfig` and is fully implemented in `useReviewGate` (local rules stay parked until the
34
+ decision lands or the window expires). The transport docs now point at it, because a host
35
+ running its own dwell timer in parallel with the fetch builds a race a slow server loses — an
36
+ in-flight `{fire:false}` arrives after the local timer already showed the prompt.
37
+
38
+ ### Added
39
+
40
+ - `src/reviews/transport.test.ts` — the transport had **no test file at all**. 11 tests pin the
41
+ wire contract (only `session_id` + `device_key` are sent; a session-less call is legal), the
42
+ incident semantics (`{fire:false}` survives, never collapsed to null; `arm` survives), and
43
+ "no opinion is the only null" (non-2xx / non-boolean `fire` / unreachable → `null`).
44
+
6
45
  ## [0.1.0] — 2026-07-12
7
46
 
8
47
  ### Renamed: `wireai-onboarding` is now `@wireai/activation`
@@ -1,4 +1,4 @@
1
- export { R as ReportAppEventOptions, r as reportAppEvent } from '../transport-f5VVB5hH.mjs';
1
+ export { R as ReportAppEventOptions, r as reportAppEvent } from '../transport-Bzb-bcB2.mjs';
2
2
  import { W as WireUserContext, E as EventQueueOptions } from '../currentSession-Bs2JfTJ8.mjs';
3
3
  export { A as AnalyticsEvent, C as ClientEvent, a as ClientEventTarget, b as ClientEventType, c as ContextEnvelope, d as ContextEnvelopeInput, e as EnvelopeSource, f as EventQueue, g as WIRE_ONBOARDING_EVENTS, h as WireOnboardingEventName, i as buildContextEnvelope, j as createEventQueue, k as getCurrentSessionId, m as makeSessionId, r as reportClientEvent, l as reportClientEvents, n as resetCurrentSessionId, s as setCurrentSessionId, t as toAnalyticsEvent } from '../currentSession-Bs2JfTJ8.mjs';
4
4
  import '../types-CNUqMK0D.mjs';
@@ -1,4 +1,4 @@
1
- export { R as ReportAppEventOptions, r as reportAppEvent } from '../transport-DzU-TqZz.js';
1
+ export { R as ReportAppEventOptions, r as reportAppEvent } from '../transport-B31G0Cib.js';
2
2
  import { W as WireUserContext, E as EventQueueOptions } from '../currentSession-61dcm3V-.js';
3
3
  export { A as AnalyticsEvent, C as ClientEvent, a as ClientEventTarget, b as ClientEventType, c as ContextEnvelope, d as ContextEnvelopeInput, e as EnvelopeSource, f as EventQueue, g as WIRE_ONBOARDING_EVENTS, h as WireOnboardingEventName, i as buildContextEnvelope, j as createEventQueue, k as getCurrentSessionId, m as makeSessionId, r as reportClientEvent, l as reportClientEvents, n as resetCurrentSessionId, s as setCurrentSessionId, t as toAnalyticsEvent } from '../currentSession-61dcm3V-.js';
4
4
  import '../types-Buj9Lw9t.js';