@powerhousedao/switchboard 6.2.2-dev.8 → 6.2.2-dev.81

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/Auth.md CHANGED
@@ -112,7 +112,7 @@ interface VerifiableCredential {
112
112
  1. **Token Decoding**: Extract credential information from JWT
113
113
  2. **Credential Validation**: Verify against W3C standards
114
114
  3. **Issuer Verification**: Check credential issuer authenticity
115
- 4. **Renown API Check**: Validate credential still exists and is valid
115
+ 4. **Credential Existence Check**: Validate credential still exists and is valid — against a remote Renown/Switchboard or this switchboard's own read model (see [Which Renown Instance Is Used](#which-renown-instance-is-used))
116
116
  5. **User Extraction**: Create user object from verified credentials
117
117
 
118
118
  ### 5. **Authorization**
@@ -173,6 +173,32 @@ export AUTH_ENABLED=true
173
173
  export ADMINS="0x111,0x222,0x333"
174
174
  ```
175
175
 
176
+ `AUTH_ENABLED` does two things: it selects the authorization policy
177
+ (`ADMIN_ONLY` instead of `OPEN`) **and** it makes the middleware verify the
178
+ bearer so `ctx.user` is populated. `RESOLVE_CALLER_IDENTITY` separates the
179
+ second from the first:
180
+
181
+ ```bash
182
+ # Read the bearer and populate ctx.user, whatever the policy is
183
+ export RESOLVE_CALLER_IDENTITY=true
184
+ ```
185
+
186
+ | | `AUTH_ENABLED` unset | `AUTH_ENABLED=true` |
187
+ | -------------------------------- | -------------------------- | ------------------------------- |
188
+ | `RESOLVE_CALLER_IDENTITY` unset | no user, `OPEN` | user resolved, `ADMIN_ONLY` |
189
+ | `RESOLVE_CALLER_IDENTITY=true` | **user resolved, `OPEN`** | user resolved, `ADMIN_ONLY` |
190
+
191
+ It defaults to whatever `AUTH_ENABLED` is, so a deployment that never sets it
192
+ behaves exactly as before. The bold cell is the combination `AUTH_ENABLED`
193
+ alone cannot express, and the one a custom subgraph needs when it does its own
194
+ authorization: its resolvers learn who is calling without every non-admin
195
+ being locked out of switchboard.
196
+
197
+ It **resolves** an identity and enforces nothing — a request with no token is
198
+ still admitted, with no user. Verification is otherwise identical to
199
+ `AUTH_ENABLED=true`, Renown credential check included, so an invalid token is
200
+ still a 401.
201
+
176
202
  #### Configuration File Method
177
203
 
178
204
  ```json
@@ -184,6 +210,64 @@ export ADMINS="0x111,0x222,0x333"
184
210
  }
185
211
  ```
186
212
 
213
+ #### Which Renown Instance Is Used
214
+
215
+ Step 4 of the verification process re-checks that the signer's Renown credential
216
+ still exists. `auth.renown` says which instance answers that question:
217
+
218
+ ```json
219
+ {
220
+ "auth": {
221
+ "enabled": true,
222
+ "admins": ["0x111"],
223
+ "renown": {
224
+ "source": "remote",
225
+ "url": "https://renown.acme.io",
226
+ "switchboardUrl": "https://sb.acme.io/graphql"
227
+ }
228
+ }
229
+ }
230
+ ```
231
+
232
+ | Field | Env override | Meaning |
233
+ | --- | --- | --- |
234
+ | `source` | `RENOWN_SOURCE` | `remote` (default) queries another instance; `self` reads this switchboard's own `renown-read-model` subgraph in-process. |
235
+ | `url` | `RENOWN_URL` | Renown base URL, used for discovery and the REST fallback. Defaults to `https://www.renown.id`. |
236
+ | `switchboardUrl` | `SWITCHBOARD_URL` | A switchboard's GraphQL endpoint to read credentials from directly, skipping discovery. |
237
+
238
+ Env vars win over the config file field by field; a blank value counts as unset.
239
+ With `source: "remote"` the order is `switchboardUrl`, then discovery via `url`,
240
+ then the Renown REST API at `url`. With `source: "self"` both URLs are ignored
241
+ for verification — but `url` still applies to this switchboard's own identity
242
+ (below).
243
+
244
+ Either way the credential's EIP-712 proof is re-verified and expiry and
245
+ delegation binding are re-checked, so a locally stored credential is held to the
246
+ same standard as a remote one. Successful checks are cached per identity for
247
+ `CREDENTIAL_VERIFICATION_CACHE_TTL_MS` (60s default) in both modes, so
248
+ revocation still lags by up to that TTL.
249
+
250
+ `self` requires a loaded package that provides the `renown-read-model` subgraph
251
+ (`@powerhousedao/renown-package`). Startup fails if none does, rather than booting
252
+ a switchboard that rejects every authenticated request.
253
+
254
+ Where the pieces live: `@renown/sdk` owns the read-model contract
255
+ (`RENOWN_READ_MODEL_SUBGRAPH`, `createLocalCredentialVerifier`), this app wires
256
+ it to the running reactor after the API is up, and `reactor-api` only supplies
257
+ the generic `GraphQLManager.executeSubgraphQuery` plus an injectable
258
+ `verifyCredential` — core has no knowledge of the renown package. A host that
259
+ sets `source: "self"` without injecting a verifier is refused at boot rather
260
+ than silently verified against a remote Renown.
261
+
262
+ #### The Switchboard's Own Identity
263
+
264
+ Separately from verifying incoming credentials, a switchboard has its own
265
+ identity — the `ph login` keypair it uses to authenticate *outbound* to remote
266
+ drives and services. It authenticates against `auth.renown.url` too, so one
267
+ setting covers both directions. Pass `identity.baseUrl` when starting the server
268
+ to point it somewhere else; unset everywhere, it falls back to
269
+ `https://www.renown.id`.
270
+
187
271
  ### 2. **Frontend Integration**
188
272
 
189
273
  #### Using the useAuth Hook
package/CHANGELOG.md CHANGED
@@ -1,3 +1,509 @@
1
+ ## 6.2.2-dev.81 (2026-09-05)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **reactor:** a FIXED task must cite a benchmark measured at the fix commit ([c091953ad](https://github.com/powerhouse-inc/powerhouse/commit/c091953ad))
6
+
7
+ ### ❤️ Thank You
8
+
9
+ - Benjamin Jordan
10
+ - Claude Opus 5
11
+
12
+ ## 6.2.2-dev.80 (2026-09-04)
13
+
14
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
15
+
16
+ ## 6.2.2-dev.79 (2026-09-04)
17
+
18
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
19
+
20
+ ## 6.2.2-dev.78 (2026-09-04)
21
+
22
+ ### 🚀 Features
23
+
24
+ - **bench:** bench:fix gate picks the next VERIFIED task when no id is given ([7c0560964](https://github.com/powerhouse-inc/powerhouse/commit/7c0560964))
25
+ - **bench:** bench-fixer agent and /bench-fix command close a verified finding ([9a2cbfdfe](https://github.com/powerhouse-inc/powerhouse/commit/9a2cbfdfe))
26
+
27
+ ### 🩹 Fixes
28
+
29
+ - **connect:** stop serving stale builds after a deploy ([#2960](https://github.com/powerhouse-inc/powerhouse/pull/2960))
30
+
31
+ ### ❤️ Thank You
32
+
33
+ - Benjamin Jordan
34
+ - Claude Fable 5.1
35
+ - Frank @froid1911
36
+
37
+ ## 6.2.2-dev.77 (2026-09-03)
38
+
39
+ ### 🚀 Features
40
+
41
+ - **connect:** AI chat assistant with settings, feature flag, and markdown ([#2956](https://github.com/powerhouse-inc/powerhouse/pull/2956))
42
+ - **reactor:** pure data layer for a bench records viewer ([d7abdde8e](https://github.com/powerhouse-inc/powerhouse/commit/d7abdde8e))
43
+
44
+ ### ❤️ Thank You
45
+
46
+ - Benjamin Jordan
47
+ - Claude Fable 5.1
48
+ - Frank @froid1911
49
+
50
+ ## 6.2.2-dev.76 (2026-09-03)
51
+
52
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
53
+
54
+ ## 6.2.2-dev.75 (2026-09-03)
55
+
56
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
57
+
58
+ ## 6.2.2-dev.74 (2026-09-02)
59
+
60
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
61
+
62
+ ## 6.2.2-dev.73 (2026-09-02)
63
+
64
+ ### 🚀 Features
65
+
66
+ - **reactor-api:** resolve the caller's identity without enforcing a policy ([#2953](https://github.com/powerhouse-inc/powerhouse/pull/2953))
67
+ - **reactor:** one script runs the benchmarks and records them ([89f958f97](https://github.com/powerhouse-inc/powerhouse/commit/89f958f97))
68
+ - three bench agents and the loop that runs them back to back ([af0e7467f](https://github.com/powerhouse-inc/powerhouse/commit/af0e7467f))
69
+ - **reactor:** add zod schemas for benchmark and task records ([9869572ba](https://github.com/powerhouse-inc/powerhouse/commit/9869572ba))
70
+
71
+ ### 🩹 Fixes
72
+
73
+ - **ci:** emit an empty changed-files list without a trailing space ([366ad4d96](https://github.com/powerhouse-inc/powerhouse/commit/366ad4d96))
74
+
75
+ ### ❤️ Thank You
76
+
77
+ - Benjamin Jordan
78
+ - Claude Opus 5
79
+ - Guillermo Puente Sandoval @gpuente
80
+
81
+ ## 6.2.2-dev.72 (2026-09-02)
82
+
83
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
84
+
85
+ ## 6.2.2-dev.71 (2026-09-01)
86
+
87
+ ### 🚀 Features
88
+
89
+ - agent-managed Vetra with per-project ports ([#2946](https://github.com/powerhouse-inc/powerhouse/pull/2946))
90
+
91
+ ### 🩹 Fixes
92
+
93
+ - **reactor-api:** hold @apollo/subgraph below 2.15 and use its array form ([ec6d19da0](https://github.com/powerhouse-inc/powerhouse/commit/ec6d19da0))
94
+
95
+ ### ❤️ Thank You
96
+
97
+ - Benjamin Jordan
98
+ - Claude Opus 5
99
+ - Frank @froid1911
100
+
101
+ ## 6.2.2-dev.70 (2026-09-01)
102
+
103
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
104
+
105
+ ## 6.2.2-dev.69 (2026-08-31)
106
+
107
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
108
+
109
+ ## 6.2.2-dev.68 (2026-08-31)
110
+
111
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
112
+
113
+ ## 6.2.2-dev.67 (2026-08-31)
114
+
115
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
116
+
117
+ ## 6.2.2-dev.66 (2026-08-30)
118
+
119
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
120
+
121
+ ## 6.2.2-dev.65 (2026-08-29)
122
+
123
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
124
+
125
+ ## 6.2.2-dev.64 (2026-08-28)
126
+
127
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
128
+
129
+ ## 6.2.2-dev.63 (2026-08-27)
130
+
131
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
132
+
133
+ ## 6.2.2-dev.62 (2026-08-27)
134
+
135
+ ### 🩹 Fixes
136
+
137
+ - **ci:** build before typecheck in simulate-ci-workflow ([2ecd03e81](https://github.com/powerhouse-inc/powerhouse/commit/2ecd03e81))
138
+ - **windows:** spawn package managers through cross-spawn ([ff4140072](https://github.com/powerhouse-inc/powerhouse/commit/ff4140072))
139
+ - **windows:** make package scripts runnable under cmd.exe ([987022ed9](https://github.com/powerhouse-inc/powerhouse/commit/987022ed9))
140
+
141
+ ### ❤️ Thank You
142
+
143
+ - Claude Opus 5 (1M context)
144
+ - Wouter Kampmann
145
+
146
+ ## 6.2.2-dev.61 (2026-08-26)
147
+
148
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
149
+
150
+ ## 6.2.2-dev.60 (2026-08-26)
151
+
152
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
153
+
154
+ ## 6.2.2-dev.59 (2026-08-25)
155
+
156
+ ### 🩹 Fixes
157
+
158
+ - **reactor:** stable processor cursor ids behind legacyProcessorIds flag ([ee82e90b4](https://github.com/powerhouse-inc/powerhouse/commit/ee82e90b4))
159
+
160
+ ### ❤️ Thank You
161
+
162
+ - acaldas
163
+
164
+ ## 6.2.2-dev.58 (2026-08-25)
165
+
166
+ ### 🚀 Features
167
+
168
+ - **docker:** per-channel compose files on cr.vetra.io with fixed ports ([7d8f51b57](https://github.com/powerhouse-inc/powerhouse/commit/7d8f51b57))
169
+
170
+ ### 🩹 Fixes
171
+
172
+ - **docker:** connect image HEALTHCHECK uses 127.0.0.1 ([4c80c5759](https://github.com/powerhouse-inc/powerhouse/commit/4c80c5759))
173
+ - **docker:** healthcheck 127.0.0.1 instead of localhost in compose files ([e15bb8c9d](https://github.com/powerhouse-inc/powerhouse/commit/e15bb8c9d))
174
+
175
+ ### ❤️ Thank You
176
+
177
+ - froid1911
178
+
179
+ ## 6.2.2-dev.57 (2026-08-24)
180
+
181
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
182
+
183
+ ## 6.2.2-dev.56 (2026-08-23)
184
+
185
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
186
+
187
+ ## 6.2.2-dev.55 (2026-08-22)
188
+
189
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
190
+
191
+ ## 6.2.2-dev.54 (2026-08-21)
192
+
193
+ ### 🚀 Features
194
+
195
+ - ⚠️ **reactor-api:** type the actions mutateDocument accepts ([1b9adbe2a](https://github.com/powerhouse-inc/powerhouse/commit/1b9adbe2a))
196
+
197
+ ### ⚠️ Breaking Changes
198
+
199
+ - **reactor-api:** type the actions mutateDocument accepts ([1b9adbe2a](https://github.com/powerhouse-inc/powerhouse/commit/1b9adbe2a))
200
+
201
+ ### ❤️ Thank You
202
+
203
+ - Benjamin Jordan
204
+ - Claude Fable 5
205
+
206
+ ## 6.2.2-dev.53 (2026-08-20)
207
+
208
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
209
+
210
+ ## 6.2.2-dev.52 (2026-08-19)
211
+
212
+ ### 🚀 Features
213
+
214
+ - **switchboard:** verify renown credentials against the reactor's own read model ([9e7efe532](https://github.com/powerhouse-inc/powerhouse/commit/9e7efe532))
215
+
216
+ ### 🩹 Fixes
217
+
218
+ - **reactor-api,switchboard:** parse PGlite read-model timestamps as UTC ([e6e25758b](https://github.com/powerhouse-inc/powerhouse/commit/e6e25758b))
219
+
220
+ ### ❤️ Thank You
221
+
222
+ - acaldas
223
+
224
+ ## 6.2.2-dev.51 (2026-08-19)
225
+
226
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
227
+
228
+ ## 6.2.2-dev.50 (2026-08-18)
229
+
230
+ ### 🚀 Features
231
+
232
+ - **switchboard:** read the group and condition enforcement flags ([e3d72b0a8](https://github.com/powerhouse-inc/powerhouse/commit/e3d72b0a8))
233
+
234
+ ### 🩹 Fixes
235
+
236
+ - **ci:** install chromium from the package that owns playwright ([653349ee0](https://github.com/powerhouse-inc/powerhouse/commit/653349ee0))
237
+ - **connect:** stage the CSP rewrite instead of sed -i ([ab5cd1d8f](https://github.com/powerhouse-inc/powerhouse/commit/ab5cd1d8f))
238
+
239
+ ### ❤️ Thank You
240
+
241
+ - Benjamin Jordan
242
+ - Claude Opus 5 (1M context)
243
+
244
+ ## 6.2.2-dev.49 (2026-08-17)
245
+
246
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
247
+
248
+ ## 6.2.2-dev.48 (2026-08-15)
249
+
250
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
251
+
252
+ ## 6.2.2-dev.47 (2026-08-14)
253
+
254
+ ### 🩹 Fixes
255
+
256
+ - **connect:** sync CSP registry origin to runtime packageRegistryUrl ([418652419](https://github.com/powerhouse-inc/powerhouse/commit/418652419))
257
+
258
+ ### ❤️ Thank You
259
+
260
+ - Frank Pfeift
261
+
262
+ ## 6.2.2-dev.46 (2026-08-14)
263
+
264
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
265
+
266
+ ## 6.2.2-dev.45 (2026-08-13)
267
+
268
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
269
+
270
+ ## 6.2.2-dev.44 (2026-08-12)
271
+
272
+ ### 🚀 Features
273
+
274
+ - **reactor-api,codegen:** register upgrade manifests on the switchboard ([85383aa0f](https://github.com/powerhouse-inc/powerhouse/commit/85383aa0f))
275
+ - **reactor-group:** ship the PHGroup document model as @powerhousedao/reactor-group ([d5a323016](https://github.com/powerhouse-inc/powerhouse/commit/d5a323016))
276
+
277
+ ### 🩹 Fixes
278
+
279
+ - **shared:** harden the condition evaluator per review ([eea3fb475](https://github.com/powerhouse-inc/powerhouse/commit/eea3fb475))
280
+
281
+ ### ❤️ Thank You
282
+
283
+ - Benjamin Jordan
284
+ - Claude Fable 5
285
+
286
+ ## 6.2.2-dev.43 (2026-08-11)
287
+
288
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
289
+
290
+ ## 6.2.2-dev.42 (2026-08-10)
291
+
292
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
293
+
294
+ ## 6.2.2-dev.41 (2026-08-09)
295
+
296
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
297
+
298
+ ## 6.2.2-dev.40 (2026-08-08)
299
+
300
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
301
+
302
+ ## 6.2.2-dev.39 (2026-08-07)
303
+
304
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
305
+
306
+ ## 6.2.2-dev.38 (2026-08-06)
307
+
308
+ ### 🚀 Features
309
+
310
+ - added recipe e2e tests to the suite ([88cd1a55c](https://github.com/powerhouse-inc/powerhouse/commit/88cd1a55c))
311
+ - auth phase 4 ([28aa9ad6a](https://github.com/powerhouse-inc/powerhouse/commit/28aa9ad6a))
312
+
313
+ ### 🩹 Fixes
314
+
315
+ - stage llm files from pre-commit hook ([0af2ab705](https://github.com/powerhouse-inc/powerhouse/commit/0af2ab705))
316
+ - **reactor:** point preflight:auth at a real store ([c1315a9f9](https://github.com/powerhouse-inc/powerhouse/commit/c1315a9f9))
317
+ - **reactor:** filter initialState and keep auth in a scoped subscription read ([77fee70b4](https://github.com/powerhouse-inc/powerhouse/commit/77fee70b4))
318
+ - **reactor:** degrade the poll query against a remote on the older schema ([0c3aefe65](https://github.com/powerhouse-inc/powerhouse/commit/0c3aefe65))
319
+ - **shared:** stop a state snapshot from installing or replacing a policy ([f947e562e](https://github.com/powerhouse-inc/powerhouse/commit/f947e562e))
320
+ - **shared:** make auth-administration retention a reachability rule ([3db42daac](https://github.com/powerhouse-inc/powerhouse/commit/3db42daac))
321
+
322
+ ### ❤️ Thank You
323
+
324
+ - Benjamin Jordan
325
+ - Claude Fable 5
326
+
327
+ ## 6.2.2-dev.37 (2026-08-05)
328
+
329
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
330
+
331
+ ## 6.2.2-dev.36 (2026-08-04)
332
+
333
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
334
+
335
+ ## 6.2.2-dev.35 (2026-08-03)
336
+
337
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
338
+
339
+ ## 6.2.2-dev.34 (2026-08-02)
340
+
341
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
342
+
343
+ ## 6.2.2-dev.33 (2026-08-01)
344
+
345
+ ### 🩹 Fixes
346
+
347
+ - **reactor:** fixing a few defects with document scope reshuffle specifics ([7546b9ff2](https://github.com/powerhouse-inc/powerhouse/commit/7546b9ff2))
348
+
349
+ ### ❤️ Thank You
350
+
351
+ - Benjamin Jordan
352
+
353
+ ## 6.2.2-dev.32 (2026-07-31)
354
+
355
+ ### 🚀 Features
356
+
357
+ - **reactor:** feature flag guards and spec updates to make plan for guarded reshuffle edge cases ([20b0fd6be](https://github.com/powerhouse-inc/powerhouse/commit/20b0fd6be))
358
+
359
+ ### 🩹 Fixes
360
+
361
+ - **reactor:** fix convergence in the case we deny an operation that has a skip ([21cbb3ecb](https://github.com/powerhouse-inc/powerhouse/commit/21cbb3ecb))
362
+ - auth-scope spec updates, assert ordered streams, and fix some busted default protocol versions ([97c5a37b5](https://github.com/powerhouse-inc/powerhouse/commit/97c5a37b5))
363
+
364
+ ### ❤️ Thank You
365
+
366
+ - Benjamin Jordan
367
+
368
+ ## 6.2.2-dev.31 (2026-07-31)
369
+
370
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
371
+
372
+ ## 6.2.2-dev.30 (2026-07-31)
373
+
374
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
375
+
376
+ ## 6.2.2-dev.29 (2026-07-31)
377
+
378
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
379
+
380
+ ## 6.2.2-dev.28 (2026-07-30)
381
+
382
+ ### 🚀 Features
383
+
384
+ - **reactor-browser:** add IReactorBrowserClient and a light GraphQL client ([#2893](https://github.com/powerhouse-inc/powerhouse/pull/2893))
385
+ - **reactor:** plugging in the first decision model ([27e9b2772](https://github.com/powerhouse-inc/powerhouse/commit/27e9b2772))
386
+
387
+ ### ❤️ Thank You
388
+
389
+ - Benjamin Jordan
390
+ - Guillermo Puente Sandoval @gpuente
391
+
392
+ ## 6.2.2-dev.27 (2026-07-30)
393
+
394
+ ### 🩹 Fixes
395
+
396
+ - **connect:** pin @privy-io/react-auth to 3.35.0 ([909352ce3](https://github.com/powerhouse-inc/powerhouse/commit/909352ce3))
397
+
398
+ ### ❤️ Thank You
399
+
400
+ - acaldas
401
+
402
+ ## 6.2.2-dev.26 (2026-07-30)
403
+
404
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
405
+
406
+ ## 6.2.2-dev.25 (2026-07-29)
407
+
408
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
409
+
410
+ ## 6.2.2-dev.24 (2026-07-29)
411
+
412
+ ### 🩹 Fixes
413
+
414
+ - **reactor:** fix an issue exacerbated by auth where snapshots were ordered by insertion not revision ([4aa32fe1b](https://github.com/powerhouse-inc/powerhouse/commit/4aa32fe1b))
415
+
416
+ ### ❤️ Thank You
417
+
418
+ - Benjamin Jordan
419
+
420
+ ## 6.2.2-dev.23 (2026-07-28)
421
+
422
+ ### 🩹 Fixes
423
+
424
+ - **deps:** pin qr to 0.5.5 so RainbowKit can render the WalletConnect QR ([5343f9178](https://github.com/powerhouse-inc/powerhouse/commit/5343f9178))
425
+
426
+ ### ❤️ Thank You
427
+
428
+ - acaldas
429
+
430
+ ## 6.2.2-dev.22 (2026-07-28)
431
+
432
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
433
+
434
+ ## 6.2.2-dev.21 (2026-07-27)
435
+
436
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
437
+
438
+ ## 6.2.2-dev.20 (2026-07-27)
439
+
440
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
441
+
442
+ ## 6.2.2-dev.19 (2026-07-27)
443
+
444
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
445
+
446
+ ## 6.2.2-dev.18 (2026-07-27)
447
+
448
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
449
+
450
+ ## 6.2.2-dev.17 (2026-07-26)
451
+
452
+ ### 🚀 Features
453
+
454
+ - **attachments:** S3-compatible storage, direct transfers, and document-derived authorization ([#2884](https://github.com/powerhouse-inc/powerhouse/pull/2884))
455
+
456
+ ### ❤️ Thank You
457
+
458
+ - Guillermo Puente Sandoval @gpuente
459
+
460
+ ## 6.2.2-dev.16 (2026-07-25)
461
+
462
+ ### 🩹 Fixes
463
+
464
+ - code review fixes ([318cbefa9](https://github.com/powerhouse-inc/powerhouse/commit/318cbefa9))
465
+ - version 0 is reserved and only 1 and on is available for setting ([193ac4c56](https://github.com/powerhouse-inc/powerhouse/commit/193ac4c56))
466
+ - resolve a contradiction in group membership ([39845a65c](https://github.com/powerhouse-inc/powerhouse/commit/39845a65c))
467
+ - grant evaluation needs to ignore features that do not exist yet ([0c1d06396](https://github.com/powerhouse-inc/powerhouse/commit/0c1d06396))
468
+
469
+ ### ❤️ Thank You
470
+
471
+ - Benjamin Jordan
472
+
473
+ ## 6.2.2-dev.15 (2026-07-24)
474
+
475
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
476
+
477
+ ## 6.2.2-dev.14 (2026-07-23)
478
+
479
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
480
+
481
+ ## 6.2.2-dev.13 (2026-07-23)
482
+
483
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
484
+
485
+ ## 6.2.2-dev.12 (2026-07-23)
486
+
487
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
488
+
489
+ ## 6.2.2-dev.11 (2026-07-22)
490
+
491
+ ### 🚀 Features
492
+
493
+ - **connect:** dynamic packages can contribute to the PWA configuration ([da867e21d](https://github.com/powerhouse-inc/powerhouse/commit/da867e21d))
494
+
495
+ ### ❤️ Thank You
496
+
497
+ - Yasiel Cabrera @YasielCabrera
498
+
499
+ ## 6.2.2-dev.10 (2026-07-21)
500
+
501
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
502
+
503
+ ## 6.2.2-dev.9 (2026-07-20)
504
+
505
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
506
+
1
507
  ## 6.2.2-dev.8 (2026-07-19)
2
508
 
3
509
  This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
package/README.md CHANGED
@@ -156,6 +156,43 @@ The same settings are available programmatically via
156
156
  `startSwitchboard({ workerPool: { numWorkers, dbPoolSizePerWorker, acquireTimeoutMs } })`,
157
157
  which takes precedence over the environment variables.
158
158
 
159
+ ### Reactor Enforcement Flags
160
+
161
+ | Variable | Description | Default |
162
+ | ------------------------------ | ------------------------------------------------------------------ | ------- |
163
+ | `REACTOR_DOCUMENT_DECISIONS` | Decide writes from the document stream, not the meta cache | `false` |
164
+ | `REACTOR_AUTH_ENFORCEMENT` | Enforce the auth scope's policy at admission, replay and read | `false` |
165
+ | `REACTOR_AUTH_GROUPS` | Let `{ group }` principals match against group-document rosters | `false` |
166
+ | `REACTOR_AUTH_CONDITIONS` | Evaluate `where` / `match` conditions on grants | `false` |
167
+
168
+ Set each to the literal `true` to enable. Each flag requires the one above it,
169
+ and switchboard refuses to start on a set that skips one — a partially enforcing
170
+ reactor would apply less than the operator asked for.
171
+
172
+ These change replay outcomes, which are consensus outcomes, so **a flag flips
173
+ for a whole document-sharing fleet, never per node**. Two nodes that share
174
+ documents and disagree on the flags diverge, exactly as two nodes on
175
+ incompatible versions would. Connect carries the same flags in
176
+ `connect.reactor.featureFlags` (see `apps/connect/RUNTIME-CONFIG.md`); a fleet
177
+ that includes browser replicas has to set them there too.
178
+
179
+ Sweep the store before enabling either auth flag — neither unsafe condition is
180
+ repairable after the fact, because the auth stream is never reshuffled:
181
+
182
+ ```bash
183
+ cd packages/reactor && pnpm preflight:auth --pg <connection-string>
184
+ ```
185
+
186
+ Exit `0` is clean for both; `1` means streams unsafe for `authEnforcement`, `2`
187
+ means documents unsafe for `authConditions`, `3` both, and `68` means the run
188
+ died having checked nothing. Gate on the whole code, not on a bit.
189
+
190
+ One expectation worth stating: turning enforcement on protects nothing that
191
+ already exists. The host's permission tables still own sync serving and the
192
+ GraphQL boundary, and every document that predates the auth scope carries an
193
+ uninitialized policy, which allows everything. Enforcement bites only on
194
+ documents that have emitted `INITIALIZE_AUTH`.
195
+
159
196
  ### Authentication Configuration
160
197
 
161
198
  ```typescript
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5a65c537-fadb-5705-95c0-4cec44d7b4d2")}catch(e){}}();
4
- import { a as parseForcePgVersion, r as startSwitchboard } from "./server-Cgud_ONM.mjs";
4
+ import { a as parseForcePgVersion, r as startSwitchboard } from "./server-CQKVIxsA.mjs";
5
5
  import "./utils-Baw7rThP.mjs";
6
6
  import { metrics } from "@opentelemetry/api";
7
7
  import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";