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

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,498 @@
1
+ ## 6.2.2-dev.80 (2026-09-04)
2
+
3
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
4
+
5
+ ## 6.2.2-dev.79 (2026-09-04)
6
+
7
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
8
+
9
+ ## 6.2.2-dev.78 (2026-09-04)
10
+
11
+ ### 🚀 Features
12
+
13
+ - **bench:** bench:fix gate picks the next VERIFIED task when no id is given ([7c0560964](https://github.com/powerhouse-inc/powerhouse/commit/7c0560964))
14
+ - **bench:** bench-fixer agent and /bench-fix command close a verified finding ([9a2cbfdfe](https://github.com/powerhouse-inc/powerhouse/commit/9a2cbfdfe))
15
+
16
+ ### 🩹 Fixes
17
+
18
+ - **connect:** stop serving stale builds after a deploy ([#2960](https://github.com/powerhouse-inc/powerhouse/pull/2960))
19
+
20
+ ### ❤️ Thank You
21
+
22
+ - Benjamin Jordan
23
+ - Claude Fable 5.1
24
+ - Frank @froid1911
25
+
26
+ ## 6.2.2-dev.77 (2026-09-03)
27
+
28
+ ### 🚀 Features
29
+
30
+ - **connect:** AI chat assistant with settings, feature flag, and markdown ([#2956](https://github.com/powerhouse-inc/powerhouse/pull/2956))
31
+ - **reactor:** pure data layer for a bench records viewer ([d7abdde8e](https://github.com/powerhouse-inc/powerhouse/commit/d7abdde8e))
32
+
33
+ ### ❤️ Thank You
34
+
35
+ - Benjamin Jordan
36
+ - Claude Fable 5.1
37
+ - Frank @froid1911
38
+
39
+ ## 6.2.2-dev.76 (2026-09-03)
40
+
41
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
42
+
43
+ ## 6.2.2-dev.75 (2026-09-03)
44
+
45
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
46
+
47
+ ## 6.2.2-dev.74 (2026-09-02)
48
+
49
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
50
+
51
+ ## 6.2.2-dev.73 (2026-09-02)
52
+
53
+ ### 🚀 Features
54
+
55
+ - **reactor-api:** resolve the caller's identity without enforcing a policy ([#2953](https://github.com/powerhouse-inc/powerhouse/pull/2953))
56
+ - **reactor:** one script runs the benchmarks and records them ([89f958f97](https://github.com/powerhouse-inc/powerhouse/commit/89f958f97))
57
+ - three bench agents and the loop that runs them back to back ([af0e7467f](https://github.com/powerhouse-inc/powerhouse/commit/af0e7467f))
58
+ - **reactor:** add zod schemas for benchmark and task records ([9869572ba](https://github.com/powerhouse-inc/powerhouse/commit/9869572ba))
59
+
60
+ ### 🩹 Fixes
61
+
62
+ - **ci:** emit an empty changed-files list without a trailing space ([366ad4d96](https://github.com/powerhouse-inc/powerhouse/commit/366ad4d96))
63
+
64
+ ### ❤️ Thank You
65
+
66
+ - Benjamin Jordan
67
+ - Claude Opus 5
68
+ - Guillermo Puente Sandoval @gpuente
69
+
70
+ ## 6.2.2-dev.72 (2026-09-02)
71
+
72
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
73
+
74
+ ## 6.2.2-dev.71 (2026-09-01)
75
+
76
+ ### 🚀 Features
77
+
78
+ - agent-managed Vetra with per-project ports ([#2946](https://github.com/powerhouse-inc/powerhouse/pull/2946))
79
+
80
+ ### 🩹 Fixes
81
+
82
+ - **reactor-api:** hold @apollo/subgraph below 2.15 and use its array form ([ec6d19da0](https://github.com/powerhouse-inc/powerhouse/commit/ec6d19da0))
83
+
84
+ ### ❤️ Thank You
85
+
86
+ - Benjamin Jordan
87
+ - Claude Opus 5
88
+ - Frank @froid1911
89
+
90
+ ## 6.2.2-dev.70 (2026-09-01)
91
+
92
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
93
+
94
+ ## 6.2.2-dev.69 (2026-08-31)
95
+
96
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
97
+
98
+ ## 6.2.2-dev.68 (2026-08-31)
99
+
100
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
101
+
102
+ ## 6.2.2-dev.67 (2026-08-31)
103
+
104
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
105
+
106
+ ## 6.2.2-dev.66 (2026-08-30)
107
+
108
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
109
+
110
+ ## 6.2.2-dev.65 (2026-08-29)
111
+
112
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
113
+
114
+ ## 6.2.2-dev.64 (2026-08-28)
115
+
116
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
117
+
118
+ ## 6.2.2-dev.63 (2026-08-27)
119
+
120
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
121
+
122
+ ## 6.2.2-dev.62 (2026-08-27)
123
+
124
+ ### 🩹 Fixes
125
+
126
+ - **ci:** build before typecheck in simulate-ci-workflow ([2ecd03e81](https://github.com/powerhouse-inc/powerhouse/commit/2ecd03e81))
127
+ - **windows:** spawn package managers through cross-spawn ([ff4140072](https://github.com/powerhouse-inc/powerhouse/commit/ff4140072))
128
+ - **windows:** make package scripts runnable under cmd.exe ([987022ed9](https://github.com/powerhouse-inc/powerhouse/commit/987022ed9))
129
+
130
+ ### ❤️ Thank You
131
+
132
+ - Claude Opus 5 (1M context)
133
+ - Wouter Kampmann
134
+
135
+ ## 6.2.2-dev.61 (2026-08-26)
136
+
137
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
138
+
139
+ ## 6.2.2-dev.60 (2026-08-26)
140
+
141
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
142
+
143
+ ## 6.2.2-dev.59 (2026-08-25)
144
+
145
+ ### 🩹 Fixes
146
+
147
+ - **reactor:** stable processor cursor ids behind legacyProcessorIds flag ([ee82e90b4](https://github.com/powerhouse-inc/powerhouse/commit/ee82e90b4))
148
+
149
+ ### ❤️ Thank You
150
+
151
+ - acaldas
152
+
153
+ ## 6.2.2-dev.58 (2026-08-25)
154
+
155
+ ### 🚀 Features
156
+
157
+ - **docker:** per-channel compose files on cr.vetra.io with fixed ports ([7d8f51b57](https://github.com/powerhouse-inc/powerhouse/commit/7d8f51b57))
158
+
159
+ ### 🩹 Fixes
160
+
161
+ - **docker:** connect image HEALTHCHECK uses 127.0.0.1 ([4c80c5759](https://github.com/powerhouse-inc/powerhouse/commit/4c80c5759))
162
+ - **docker:** healthcheck 127.0.0.1 instead of localhost in compose files ([e15bb8c9d](https://github.com/powerhouse-inc/powerhouse/commit/e15bb8c9d))
163
+
164
+ ### ❤️ Thank You
165
+
166
+ - froid1911
167
+
168
+ ## 6.2.2-dev.57 (2026-08-24)
169
+
170
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
171
+
172
+ ## 6.2.2-dev.56 (2026-08-23)
173
+
174
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
175
+
176
+ ## 6.2.2-dev.55 (2026-08-22)
177
+
178
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
179
+
180
+ ## 6.2.2-dev.54 (2026-08-21)
181
+
182
+ ### 🚀 Features
183
+
184
+ - ⚠️ **reactor-api:** type the actions mutateDocument accepts ([1b9adbe2a](https://github.com/powerhouse-inc/powerhouse/commit/1b9adbe2a))
185
+
186
+ ### ⚠️ Breaking Changes
187
+
188
+ - **reactor-api:** type the actions mutateDocument accepts ([1b9adbe2a](https://github.com/powerhouse-inc/powerhouse/commit/1b9adbe2a))
189
+
190
+ ### ❤️ Thank You
191
+
192
+ - Benjamin Jordan
193
+ - Claude Fable 5
194
+
195
+ ## 6.2.2-dev.53 (2026-08-20)
196
+
197
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
198
+
199
+ ## 6.2.2-dev.52 (2026-08-19)
200
+
201
+ ### 🚀 Features
202
+
203
+ - **switchboard:** verify renown credentials against the reactor's own read model ([9e7efe532](https://github.com/powerhouse-inc/powerhouse/commit/9e7efe532))
204
+
205
+ ### 🩹 Fixes
206
+
207
+ - **reactor-api,switchboard:** parse PGlite read-model timestamps as UTC ([e6e25758b](https://github.com/powerhouse-inc/powerhouse/commit/e6e25758b))
208
+
209
+ ### ❤️ Thank You
210
+
211
+ - acaldas
212
+
213
+ ## 6.2.2-dev.51 (2026-08-19)
214
+
215
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
216
+
217
+ ## 6.2.2-dev.50 (2026-08-18)
218
+
219
+ ### 🚀 Features
220
+
221
+ - **switchboard:** read the group and condition enforcement flags ([e3d72b0a8](https://github.com/powerhouse-inc/powerhouse/commit/e3d72b0a8))
222
+
223
+ ### 🩹 Fixes
224
+
225
+ - **ci:** install chromium from the package that owns playwright ([653349ee0](https://github.com/powerhouse-inc/powerhouse/commit/653349ee0))
226
+ - **connect:** stage the CSP rewrite instead of sed -i ([ab5cd1d8f](https://github.com/powerhouse-inc/powerhouse/commit/ab5cd1d8f))
227
+
228
+ ### ❤️ Thank You
229
+
230
+ - Benjamin Jordan
231
+ - Claude Opus 5 (1M context)
232
+
233
+ ## 6.2.2-dev.49 (2026-08-17)
234
+
235
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
236
+
237
+ ## 6.2.2-dev.48 (2026-08-15)
238
+
239
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
240
+
241
+ ## 6.2.2-dev.47 (2026-08-14)
242
+
243
+ ### 🩹 Fixes
244
+
245
+ - **connect:** sync CSP registry origin to runtime packageRegistryUrl ([418652419](https://github.com/powerhouse-inc/powerhouse/commit/418652419))
246
+
247
+ ### ❤️ Thank You
248
+
249
+ - Frank Pfeift
250
+
251
+ ## 6.2.2-dev.46 (2026-08-14)
252
+
253
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
254
+
255
+ ## 6.2.2-dev.45 (2026-08-13)
256
+
257
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
258
+
259
+ ## 6.2.2-dev.44 (2026-08-12)
260
+
261
+ ### 🚀 Features
262
+
263
+ - **reactor-api,codegen:** register upgrade manifests on the switchboard ([85383aa0f](https://github.com/powerhouse-inc/powerhouse/commit/85383aa0f))
264
+ - **reactor-group:** ship the PHGroup document model as @powerhousedao/reactor-group ([d5a323016](https://github.com/powerhouse-inc/powerhouse/commit/d5a323016))
265
+
266
+ ### 🩹 Fixes
267
+
268
+ - **shared:** harden the condition evaluator per review ([eea3fb475](https://github.com/powerhouse-inc/powerhouse/commit/eea3fb475))
269
+
270
+ ### ❤️ Thank You
271
+
272
+ - Benjamin Jordan
273
+ - Claude Fable 5
274
+
275
+ ## 6.2.2-dev.43 (2026-08-11)
276
+
277
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
278
+
279
+ ## 6.2.2-dev.42 (2026-08-10)
280
+
281
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
282
+
283
+ ## 6.2.2-dev.41 (2026-08-09)
284
+
285
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
286
+
287
+ ## 6.2.2-dev.40 (2026-08-08)
288
+
289
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
290
+
291
+ ## 6.2.2-dev.39 (2026-08-07)
292
+
293
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
294
+
295
+ ## 6.2.2-dev.38 (2026-08-06)
296
+
297
+ ### 🚀 Features
298
+
299
+ - added recipe e2e tests to the suite ([88cd1a55c](https://github.com/powerhouse-inc/powerhouse/commit/88cd1a55c))
300
+ - auth phase 4 ([28aa9ad6a](https://github.com/powerhouse-inc/powerhouse/commit/28aa9ad6a))
301
+
302
+ ### 🩹 Fixes
303
+
304
+ - stage llm files from pre-commit hook ([0af2ab705](https://github.com/powerhouse-inc/powerhouse/commit/0af2ab705))
305
+ - **reactor:** point preflight:auth at a real store ([c1315a9f9](https://github.com/powerhouse-inc/powerhouse/commit/c1315a9f9))
306
+ - **reactor:** filter initialState and keep auth in a scoped subscription read ([77fee70b4](https://github.com/powerhouse-inc/powerhouse/commit/77fee70b4))
307
+ - **reactor:** degrade the poll query against a remote on the older schema ([0c3aefe65](https://github.com/powerhouse-inc/powerhouse/commit/0c3aefe65))
308
+ - **shared:** stop a state snapshot from installing or replacing a policy ([f947e562e](https://github.com/powerhouse-inc/powerhouse/commit/f947e562e))
309
+ - **shared:** make auth-administration retention a reachability rule ([3db42daac](https://github.com/powerhouse-inc/powerhouse/commit/3db42daac))
310
+
311
+ ### ❤️ Thank You
312
+
313
+ - Benjamin Jordan
314
+ - Claude Fable 5
315
+
316
+ ## 6.2.2-dev.37 (2026-08-05)
317
+
318
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
319
+
320
+ ## 6.2.2-dev.36 (2026-08-04)
321
+
322
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
323
+
324
+ ## 6.2.2-dev.35 (2026-08-03)
325
+
326
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
327
+
328
+ ## 6.2.2-dev.34 (2026-08-02)
329
+
330
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
331
+
332
+ ## 6.2.2-dev.33 (2026-08-01)
333
+
334
+ ### 🩹 Fixes
335
+
336
+ - **reactor:** fixing a few defects with document scope reshuffle specifics ([7546b9ff2](https://github.com/powerhouse-inc/powerhouse/commit/7546b9ff2))
337
+
338
+ ### ❤️ Thank You
339
+
340
+ - Benjamin Jordan
341
+
342
+ ## 6.2.2-dev.32 (2026-07-31)
343
+
344
+ ### 🚀 Features
345
+
346
+ - **reactor:** feature flag guards and spec updates to make plan for guarded reshuffle edge cases ([20b0fd6be](https://github.com/powerhouse-inc/powerhouse/commit/20b0fd6be))
347
+
348
+ ### 🩹 Fixes
349
+
350
+ - **reactor:** fix convergence in the case we deny an operation that has a skip ([21cbb3ecb](https://github.com/powerhouse-inc/powerhouse/commit/21cbb3ecb))
351
+ - auth-scope spec updates, assert ordered streams, and fix some busted default protocol versions ([97c5a37b5](https://github.com/powerhouse-inc/powerhouse/commit/97c5a37b5))
352
+
353
+ ### ❤️ Thank You
354
+
355
+ - Benjamin Jordan
356
+
357
+ ## 6.2.2-dev.31 (2026-07-31)
358
+
359
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
360
+
361
+ ## 6.2.2-dev.30 (2026-07-31)
362
+
363
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
364
+
365
+ ## 6.2.2-dev.29 (2026-07-31)
366
+
367
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
368
+
369
+ ## 6.2.2-dev.28 (2026-07-30)
370
+
371
+ ### 🚀 Features
372
+
373
+ - **reactor-browser:** add IReactorBrowserClient and a light GraphQL client ([#2893](https://github.com/powerhouse-inc/powerhouse/pull/2893))
374
+ - **reactor:** plugging in the first decision model ([27e9b2772](https://github.com/powerhouse-inc/powerhouse/commit/27e9b2772))
375
+
376
+ ### ❤️ Thank You
377
+
378
+ - Benjamin Jordan
379
+ - Guillermo Puente Sandoval @gpuente
380
+
381
+ ## 6.2.2-dev.27 (2026-07-30)
382
+
383
+ ### 🩹 Fixes
384
+
385
+ - **connect:** pin @privy-io/react-auth to 3.35.0 ([909352ce3](https://github.com/powerhouse-inc/powerhouse/commit/909352ce3))
386
+
387
+ ### ❤️ Thank You
388
+
389
+ - acaldas
390
+
391
+ ## 6.2.2-dev.26 (2026-07-30)
392
+
393
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
394
+
395
+ ## 6.2.2-dev.25 (2026-07-29)
396
+
397
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
398
+
399
+ ## 6.2.2-dev.24 (2026-07-29)
400
+
401
+ ### 🩹 Fixes
402
+
403
+ - **reactor:** fix an issue exacerbated by auth where snapshots were ordered by insertion not revision ([4aa32fe1b](https://github.com/powerhouse-inc/powerhouse/commit/4aa32fe1b))
404
+
405
+ ### ❤️ Thank You
406
+
407
+ - Benjamin Jordan
408
+
409
+ ## 6.2.2-dev.23 (2026-07-28)
410
+
411
+ ### 🩹 Fixes
412
+
413
+ - **deps:** pin qr to 0.5.5 so RainbowKit can render the WalletConnect QR ([5343f9178](https://github.com/powerhouse-inc/powerhouse/commit/5343f9178))
414
+
415
+ ### ❤️ Thank You
416
+
417
+ - acaldas
418
+
419
+ ## 6.2.2-dev.22 (2026-07-28)
420
+
421
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
422
+
423
+ ## 6.2.2-dev.21 (2026-07-27)
424
+
425
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
426
+
427
+ ## 6.2.2-dev.20 (2026-07-27)
428
+
429
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
430
+
431
+ ## 6.2.2-dev.19 (2026-07-27)
432
+
433
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
434
+
435
+ ## 6.2.2-dev.18 (2026-07-27)
436
+
437
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
438
+
439
+ ## 6.2.2-dev.17 (2026-07-26)
440
+
441
+ ### 🚀 Features
442
+
443
+ - **attachments:** S3-compatible storage, direct transfers, and document-derived authorization ([#2884](https://github.com/powerhouse-inc/powerhouse/pull/2884))
444
+
445
+ ### ❤️ Thank You
446
+
447
+ - Guillermo Puente Sandoval @gpuente
448
+
449
+ ## 6.2.2-dev.16 (2026-07-25)
450
+
451
+ ### 🩹 Fixes
452
+
453
+ - code review fixes ([318cbefa9](https://github.com/powerhouse-inc/powerhouse/commit/318cbefa9))
454
+ - version 0 is reserved and only 1 and on is available for setting ([193ac4c56](https://github.com/powerhouse-inc/powerhouse/commit/193ac4c56))
455
+ - resolve a contradiction in group membership ([39845a65c](https://github.com/powerhouse-inc/powerhouse/commit/39845a65c))
456
+ - grant evaluation needs to ignore features that do not exist yet ([0c1d06396](https://github.com/powerhouse-inc/powerhouse/commit/0c1d06396))
457
+
458
+ ### ❤️ Thank You
459
+
460
+ - Benjamin Jordan
461
+
462
+ ## 6.2.2-dev.15 (2026-07-24)
463
+
464
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
465
+
466
+ ## 6.2.2-dev.14 (2026-07-23)
467
+
468
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
469
+
470
+ ## 6.2.2-dev.13 (2026-07-23)
471
+
472
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
473
+
474
+ ## 6.2.2-dev.12 (2026-07-23)
475
+
476
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
477
+
478
+ ## 6.2.2-dev.11 (2026-07-22)
479
+
480
+ ### 🚀 Features
481
+
482
+ - **connect:** dynamic packages can contribute to the PWA configuration ([da867e21d](https://github.com/powerhouse-inc/powerhouse/commit/da867e21d))
483
+
484
+ ### ❤️ Thank You
485
+
486
+ - Yasiel Cabrera @YasielCabrera
487
+
488
+ ## 6.2.2-dev.10 (2026-07-21)
489
+
490
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
491
+
492
+ ## 6.2.2-dev.9 (2026-07-20)
493
+
494
+ This was a version bump only for @powerhousedao/switchboard to align it with other projects, there were no code changes.
495
+
1
496
  ## 6.2.2-dev.8 (2026-07-19)
2
497
 
3
498
  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";