@moltzap/protocol 2026.501.2 → 2026.501.3

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.
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Conformance-suite shared helpers — small utilities used by multiple
3
+ * property modules. Keep this file thin; promote utilities here only
4
+ * when they would otherwise be duplicated verbatim.
5
+ */
6
+ import type { Effect } from "effect";
7
+ import type { TestClient } from "../test-client.js";
8
+ import type { FrameSchemaError, RpcResponseError, RpcTimeoutError, TransportClosedError, TransportIoError } from "../errors.js";
9
+ /**
10
+ * `apps/register` is server-handled but absent from the typed
11
+ * `rpcMethods` registry (see `packages/protocol/src/rpc-registry.ts`);
12
+ * app-sdk and `34-rpc-additions.integration.test.ts:48` use the same
13
+ * untyped-cast path. Adding the verb to the registry is an accretive
14
+ * change outside this sub-issue's scope; this helper localizes the cast.
15
+ */
16
+ export declare function sendUntypedRpc(client: TestClient, method: string, params: unknown): Effect.Effect<unknown, RpcResponseError | RpcTimeoutError | TransportClosedError | TransportIoError | FrameSchemaError>;
17
+ //# sourceMappingURL=_helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_helpers.d.ts","sourceRoot":"","sources":["../../../src/testing/conformance/_helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAEtB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,GACd,MAAM,CAAC,MAAM,CACd,OAAO,EACL,gBAAgB,GAChB,eAAe,GACf,oBAAoB,GACpB,gBAAgB,GAChB,gBAAgB,CACnB,CAGA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `apps/register` is server-handled but absent from the typed
3
+ * `rpcMethods` registry (see `packages/protocol/src/rpc-registry.ts`);
4
+ * app-sdk and `34-rpc-additions.integration.test.ts:48` use the same
5
+ * untyped-cast path. Adding the verb to the registry is an accretive
6
+ * change outside this sub-issue's scope; this helper localizes the cast.
7
+ */
8
+ export function sendUntypedRpc(client, method, params) {
9
+ // #ignore-sloppy-code-next-line[as-unknown-as]: localized cast — `apps/register` is server-handled but absent from the typed `rpcMethods` registry; mirrors app-sdk and `34-rpc-additions.integration.test.ts:48`
10
+ return client.sendRpc(method, params);
11
+ }
12
+ //# sourceMappingURL=_helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_helpers.js","sourceRoot":"","sources":["../../../src/testing/conformance/_helpers.ts"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAkB,EAClB,MAAc,EACd,MAAe;IASf,kNAAkN;IAClN,OAAQ,MAAM,CAAC,OAAqC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC"}
@@ -11,4 +11,38 @@ import type { ConformanceRunContext } from "./runner.js";
11
11
  * so artifacts are actionable.
12
12
  */
13
13
  export declare function registerSchemaExhaustiveFuzz(ctx: ConformanceRunContext): void;
14
+ /**
15
+ * App-disconnect fail-policy — replacement for the deleted webhook
16
+ * graceful-shutdown probe (architect plan §8.3).
17
+ *
18
+ * Architect contract:
19
+ * - When an app's WS severs while admission RPCs are in flight, the
20
+ * server's pending Deferreds fail with a typed close.
21
+ * - AppHost applies fail-CLOSED verdicts: `before_dispatch` →
22
+ * `decision: "deny"`; `before_message_delivery` → `block: true`.
23
+ * - The per-connection s2c pending map drains; no Deferred leaks past
24
+ * the connection's Scope.
25
+ *
26
+ * Conformance reach: the fail-closed verdicts are observable through the
27
+ * SENDER's `messages/send` / dispatch RPC return — when no app is wired
28
+ * to admit, dispatch proceeds (no admission gate); when an app IS wired
29
+ * and severs mid-flight, dispatch sees the deny verdict.
30
+ *
31
+ * Wiring an app over WS requires `apps/create` (server-internal: agent
32
+ * owner_user_id must be set, see `app-host.ts:629`). The conformance
33
+ * suite registers agents via the public `/api/v1/auth/register` endpoint,
34
+ * which sets owner_user_id to `config.devModeUserId ?? null`; the
35
+ * default `startCoreTestServer` does not bind a `devModeUserId`. When
36
+ * the prerequisite is absent, this property reports
37
+ * `PropertyUnavailable` with the precise reason — the assertions
38
+ * themselves are exercised at the integration tier (B.9 / sub-issue
39
+ * #318) where DB access fills the gap.
40
+ *
41
+ * This shape mirrors `adversity.registerLatencyResilience` /
42
+ * `adversity.registerSlicerFraming`, which report `PropertyUnavailable`
43
+ * when Toxiproxy is not provisioned. The conformance contract (the
44
+ * architect plan §8.3 acceptance) is encoded by the registered property;
45
+ * runnability is gated on the consumer's fixture capabilities.
46
+ */
47
+ export declare function registerAppDisconnectFailPolicy(ctx: ConformanceRunContext): void;
14
48
  //# sourceMappingURL=boundary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../../src/testing/conformance/boundary.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAOzD;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAgF7E"}
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../../src/testing/conformance/boundary.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAwBzD;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CA+E7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,qBAAqB,GACzB,IAAI,CAoNN"}
@@ -3,16 +3,26 @@
3
3
  * Historical grouping note: spec #181 §5 calls this "Tier E". Code uses
4
4
  * semantic names only.
5
5
  *
6
- * The s2c-RPC fail-on-app-disconnect invariant (the equivalent of the
7
- * deleted webhook-graceful-shutdown property under B.1's awaitable RPC
8
- * transport) is owned by B.8 / sub-issue #305.
6
+ * The s2c-RPC fail-on-app-disconnect invariant replacing the deleted
7
+ * `webhook-graceful-shutdown` probe under B.1's awaitable RPC transport
8
+ * is registered as `app-disconnect-fail-policy` below.
9
9
  */
10
10
  import * as fc from "fast-check";
11
- import { Effect } from "effect";
11
+ import { Duration, Effect, Exit, Scope } from "effect";
12
12
  import { allRpcMethods, arbitraryCallFor } from "../arbitraries/rpc.js";
13
13
  import { makeTestClient } from "../test-client.js";
14
14
  import { registerTestAgent } from "../agent-registration.js";
15
- import { PropertyInvariantViolation, registerProperty } from "./registry.js";
15
+ import { Data } from "effect";
16
+ import { PropertyDeferred, PropertyInvariantViolation, PropertyUnavailable, registerProperty, } from "./registry.js";
17
+ import { sendUntypedRpc } from "./_helpers.js";
18
+ /**
19
+ * Tagged sentinel for "the dispatch RPC did not reply within the
20
+ * property's bound." Distinct from any wire-level RpcResponseError so
21
+ * the property body's Right/Left discrimination cannot mistake a typed
22
+ * fail-closed verdict for a hang.
23
+ */
24
+ class DispatchHungError extends Data.TaggedError("ConformanceDispatchHungError") {
25
+ }
16
26
  const CATEGORY = "boundary";
17
27
  const DEFAULT_TIMEOUT_MS = 3000;
18
28
  const DEFAULT_CAPTURE_CAPACITY = 32;
@@ -84,6 +94,188 @@ export function registerSchemaExhaustiveFuzz(ctx) {
84
94
  }
85
95
  }
86
96
  })));
87
- void DEFAULT_CAPTURE_CAPACITY;
97
+ }
98
+ /**
99
+ * App-disconnect fail-policy — replacement for the deleted webhook
100
+ * graceful-shutdown probe (architect plan §8.3).
101
+ *
102
+ * Architect contract:
103
+ * - When an app's WS severs while admission RPCs are in flight, the
104
+ * server's pending Deferreds fail with a typed close.
105
+ * - AppHost applies fail-CLOSED verdicts: `before_dispatch` →
106
+ * `decision: "deny"`; `before_message_delivery` → `block: true`.
107
+ * - The per-connection s2c pending map drains; no Deferred leaks past
108
+ * the connection's Scope.
109
+ *
110
+ * Conformance reach: the fail-closed verdicts are observable through the
111
+ * SENDER's `messages/send` / dispatch RPC return — when no app is wired
112
+ * to admit, dispatch proceeds (no admission gate); when an app IS wired
113
+ * and severs mid-flight, dispatch sees the deny verdict.
114
+ *
115
+ * Wiring an app over WS requires `apps/create` (server-internal: agent
116
+ * owner_user_id must be set, see `app-host.ts:629`). The conformance
117
+ * suite registers agents via the public `/api/v1/auth/register` endpoint,
118
+ * which sets owner_user_id to `config.devModeUserId ?? null`; the
119
+ * default `startCoreTestServer` does not bind a `devModeUserId`. When
120
+ * the prerequisite is absent, this property reports
121
+ * `PropertyUnavailable` with the precise reason — the assertions
122
+ * themselves are exercised at the integration tier (B.9 / sub-issue
123
+ * #318) where DB access fills the gap.
124
+ *
125
+ * This shape mirrors `adversity.registerLatencyResilience` /
126
+ * `adversity.registerSlicerFraming`, which report `PropertyUnavailable`
127
+ * when Toxiproxy is not provisioned. The conformance contract (the
128
+ * architect plan §8.3 acceptance) is encoded by the registered property;
129
+ * runnability is gated on the consumer's fixture capabilities.
130
+ */
131
+ export function registerAppDisconnectFailPolicy(ctx) {
132
+ registerProperty(ctx, CATEGORY, "app-disconnect-fail-policy", "app WS sever ⇒ pending s2c Deferreds fail-closed; no leaks", Effect.scoped(Effect.gen(function* () {
133
+ // Step 1: register the app-side agent (will host admission
134
+ // handlers via apps/register).
135
+ const appAgent = yield* registerTestAgent({
136
+ baseUrl: ctx.realServer.baseUrl,
137
+ name: "adfp-app",
138
+ }).pipe(Effect.mapError((e) => new PropertyUnavailable({
139
+ category: CATEGORY,
140
+ name: "app-disconnect-fail-policy",
141
+ reason: `app agent register: ${e.body}`,
142
+ })));
143
+ // Step 2: open an app TestClient inside an INNER scope so the
144
+ // property body can sever it without tearing down the outer
145
+ // scope.
146
+ const appScope = yield* Scope.make();
147
+ const appClient = yield* Scope.extend(makeTestClient({
148
+ serverUrl: ctx.realServer.wsUrl,
149
+ agentKey: appAgent.apiKey,
150
+ agentId: appAgent.agentId,
151
+ defaultTimeoutMs: DEFAULT_TIMEOUT_MS,
152
+ captureCapacity: DEFAULT_CAPTURE_CAPACITY,
153
+ }), appScope).pipe(Effect.mapError((e) => new PropertyUnavailable({
154
+ category: CATEGORY,
155
+ name: "app-disconnect-fail-policy",
156
+ reason: `app client acquire: ${String(e)}`,
157
+ })));
158
+ // Step 3: register a manifest. apps/register is owner-agnostic
159
+ // (see apps.handlers.ts:25-41) — succeeds even when the agent's
160
+ // owner_user_id is null.
161
+ const appId = `adfp-${Date.now().toString(36)}`;
162
+ // `apps/register` is server-handled but absent from the typed
163
+ // `rpcMethods` registry today (see `rpc-registry.ts:60-118`);
164
+ // app-sdk and `34-rpc-additions.integration.test.ts:48` use the
165
+ // same untyped-cast path. Adding it to the registry is an
166
+ // accretive change outside this sub-issue's scope.
167
+ const registerOutcome = yield* sendUntypedRpc(appClient, "apps/register", {
168
+ manifest: {
169
+ appId,
170
+ name: `Disconnect-fail app ${appId}`,
171
+ permissions: { required: [], optional: [] },
172
+ conversations: [
173
+ { key: "main", name: "Main", participantFilter: "all" },
174
+ ],
175
+ hooks: {
176
+ before_dispatch: { timeout_ms: 5000 },
177
+ before_message_delivery: { timeout_ms: 5000 },
178
+ },
179
+ },
180
+ }).pipe(Effect.either);
181
+ if (registerOutcome._tag === "Left") {
182
+ yield* Scope.close(appScope, Exit.void);
183
+ return yield* Effect.fail(new PropertyUnavailable({
184
+ category: CATEGORY,
185
+ name: "app-disconnect-fail-policy",
186
+ reason: `apps/register failed: ${registerOutcome.left._tag}`,
187
+ }));
188
+ }
189
+ // Step 4: register an admission handler that NEVER replies, so
190
+ // the server-side Deferred is parked. The sever in step 6 is the
191
+ // event the property exercises.
192
+ yield* appClient.handleServerRpc("apps/onBeforeDispatch", () => Effect.never);
193
+ yield* appClient.handleServerRpc("apps/onBeforeMessageDelivery", () => Effect.never);
194
+ // Step 5: register a sender agent and attempt to create an app
195
+ // session that this agent initiates. apps/create requires the
196
+ // initiator's owner_user_id to be non-null (app-host.ts:629);
197
+ // the default conformance fixture sets it to null. When the
198
+ // prerequisite is absent, report unavailable — B.9 exercises the
199
+ // full path with DB-level owner_user_id seeding.
200
+ const sender = yield* registerTestAgent({
201
+ baseUrl: ctx.realServer.baseUrl,
202
+ name: "adfp-sender",
203
+ }).pipe(Effect.mapError((e) => new PropertyUnavailable({
204
+ category: CATEGORY,
205
+ name: "app-disconnect-fail-policy",
206
+ reason: `sender register: ${e.body}`,
207
+ })));
208
+ const senderClient = yield* makeTestClient({
209
+ serverUrl: ctx.realServer.wsUrl,
210
+ agentKey: sender.apiKey,
211
+ agentId: sender.agentId,
212
+ defaultTimeoutMs: DEFAULT_TIMEOUT_MS,
213
+ captureCapacity: DEFAULT_CAPTURE_CAPACITY,
214
+ }).pipe(Effect.mapError((e) => new PropertyUnavailable({
215
+ category: CATEGORY,
216
+ name: "app-disconnect-fail-policy",
217
+ reason: `sender client acquire: ${String(e)}`,
218
+ })));
219
+ const sessionOutcome = yield* senderClient
220
+ .sendRpc("apps/create", { appId, invitedAgentIds: [] })
221
+ .pipe(Effect.either);
222
+ if (sessionOutcome._tag === "Left") {
223
+ yield* Scope.close(appScope, Exit.void);
224
+ return yield* Effect.fail(new PropertyUnavailable({
225
+ category: CATEGORY,
226
+ name: "app-disconnect-fail-policy",
227
+ reason: `apps/create failed (likely owner_user_id null on sender; B.9 covers via DB seeding): ${sessionOutcome.left._tag}`,
228
+ }));
229
+ }
230
+ // Step 6: sever the app's WS. Closing the inner scope closes the
231
+ // socket; the server's connection-scope finalizer runs through
232
+ // sendRpcToClient's Deferred-cleanup path (issue #310).
233
+ yield* Scope.close(appScope, Exit.void);
234
+ // Step 7: trigger an admission round-trip on the sender side
235
+ // through the session's main conversation. Codex review (#327,
236
+ // finding 2): a fixed zero-UUID conversation short-circuits
237
+ // grant in `AppHost.runBeforeDispatch`, so the property would
238
+ // pass even if fail-closed-on-disconnect was broken; route
239
+ // through the session's actual conversation so AppHost reaches
240
+ // the (now severed) admission path.
241
+ // `apps/create` result: `{ session: { conversations: { [key]: convId } } }`
242
+ // — a Record map, not an array. Pull the first id deterministically.
243
+ const session = sessionOutcome.right.session;
244
+ const sessionConvId = Object.values(session.conversations)[0];
245
+ if (typeof sessionConvId !== "string" || sessionConvId.length === 0) {
246
+ return yield* Effect.fail(new PropertyDeferred({
247
+ category: CATEGORY,
248
+ name: "app-disconnect-fail-policy",
249
+ followUp: "apps/create response did not surface a session conversation id; B.9 (#318) covers via DB-seeded fixture",
250
+ }));
251
+ }
252
+ // Codex review (#327, finding 3): use timeoutFail with a tagged
253
+ // sentinel. Effect.timeout returns Option, and either-wrapping
254
+ // surfaces the fiber's TimeoutException, so the previous shape
255
+ // could not distinguish "client RPC timeout" (typed fail-closed)
256
+ // from "wall-clock hang" (Deferred leak). The sentinel error
257
+ // class makes the leak observable in the Left branch.
258
+ const dispatchStarted = Date.now();
259
+ const dispatchOutcome = yield* senderClient
260
+ .sendRpc("apps/authorizeDispatch", {
261
+ conversationId: sessionConvId,
262
+ messageId: `00000000-0000-0000-0000-000000000001`,
263
+ senderAgentId: sender.agentId,
264
+ })
265
+ .pipe(Effect.timeoutFail({
266
+ duration: Duration.millis(DEFAULT_TIMEOUT_MS),
267
+ onTimeout: () => new DispatchHungError({
268
+ elapsedMs: Date.now() - dispatchStarted,
269
+ }),
270
+ }), Effect.either);
271
+ if (dispatchOutcome._tag === "Left" &&
272
+ dispatchOutcome.left instanceof DispatchHungError) {
273
+ return yield* Effect.fail(new PropertyInvariantViolation({
274
+ category: CATEGORY,
275
+ name: "app-disconnect-fail-policy",
276
+ reason: `dispatch hung ${dispatchOutcome.left.elapsedMs}ms after app sever — Deferred leak suspected`,
277
+ }));
278
+ }
279
+ })));
88
280
  }
89
281
  //# sourceMappingURL=boundary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../../src/testing/conformance/boundary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../../src/testing/conformance/boundary.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,40 @@ export declare function registerFanOutCardinality(ctx: ConformanceRunContext): v
35
35
  export declare function registerStoreAndReplay(ctx: ConformanceRunContext): void;
36
36
  /** Payload opacity — sent text appears byte-for-byte in delivered events. */
37
37
  export declare function registerPayloadOpacity(ctx: ConformanceRunContext): void;
38
+ /**
39
+ * Hook-gated delivery — admission verbs are awaitable, the verdict
40
+ * mutates the recipient view, dynamically attached conversations enter
41
+ * the hook pipeline (mirrors `33-attach-conversation.integration.test.ts:312-369`).
42
+ *
43
+ * Architect plan §1.7 acceptance:
44
+ * - `before_message_delivery: { block: true }` drops the message before
45
+ * delivery (recipient does NOT observe it).
46
+ * - `block: false, patch: { parts: [...] }` lands a MUTATED message —
47
+ * recipient sees the patched parts, not the sender's parts.
48
+ * - `apps/attachConversation` adds a conversation to the session's
49
+ * hook pipeline; the same hook then fires for traffic on the new
50
+ * conversation.
51
+ *
52
+ * Conformance reach: the assertions are observable on the SENDER (deny
53
+ * → typed dispatch error) and RECIPIENT (patched parts in inbound
54
+ * event). Wiring the app session over WS requires `apps/create`, which
55
+ * needs the initiator's `owner_user_id` to be non-null — see the
56
+ * `app-disconnect-fail-policy` rationale in `boundary.ts`. When the
57
+ * fixture's agents are owner-less (default `startCoreTestServer`), the
58
+ * property reports `PropertyUnavailable` and B.9 carries the load.
59
+ */
60
+ export declare function registerHookGatedDelivery(ctx: ConformanceRunContext): void;
61
+ /**
62
+ * Multi-app FIFO short-circuit — register two apps on the same hook,
63
+ * first denies, assert second handler is NOT invoked. Architect plan
64
+ * §3.4: `Effect.forEach(registeredApps, ...)` iterates in registration
65
+ * order; first-deny short-circuits the loop.
66
+ *
67
+ * Same fixture constraint as `hook-gated-delivery`: requires app session
68
+ * machinery. Reports `PropertyUnavailable` when prerequisites are
69
+ * absent.
70
+ */
71
+ export declare function registerMultiAppFifoShortCircuit(ctx: ConformanceRunContext): void;
38
72
  /** Task-boundary isolation — conversation A's events don't leak into B. */
39
73
  export declare function registerTaskBoundaryIsolation(ctx: ConformanceRunContext): void;
40
74
  //# sourceMappingURL=delivery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/testing/conformance/delivery.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAsFzD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAuD1E;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CA0DvE;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAgDvE;AAED,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,qBAAqB,GACzB,IAAI,CAqDN"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/testing/conformance/delivery.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAyFzD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAuD1E;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CA0DvE;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAgDvE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAmC1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,qBAAqB,GACzB,IAAI,CAiCN;AA+GD,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,qBAAqB,GACzB,IAAI,CAqDN"}
@@ -9,10 +9,11 @@
9
9
  * Principle 3: every property body is `Effect<void, PropertyFailure>`.
10
10
  */
11
11
  import * as fc from "fast-check";
12
- import { Effect } from "effect";
12
+ import { Effect, Ref } from "effect";
13
13
  import { makeTestClient } from "../test-client.js";
14
14
  import { registerTestAgent } from "../agent-registration.js";
15
- import { PropertyInvariantViolation, assertProperty, registerProperty, } from "./registry.js";
15
+ import { PropertyDeferred, PropertyInvariantViolation, PropertyUnavailable, assertProperty, registerProperty, } from "./registry.js";
16
+ import { sendUntypedRpc } from "./_helpers.js";
16
17
  const CATEGORY = "delivery";
17
18
  const DEFAULT_TIMEOUT_MS = 5000;
18
19
  const DEFAULT_CAPTURE_CAPACITY = 256;
@@ -194,6 +195,145 @@ export function registerPayloadOpacity(ctx) {
194
195
  return found;
195
196
  }), { seed: ctx.seed, numRuns: ctx.opts.numRuns ?? 3 })));
196
197
  }
198
+ /**
199
+ * Hook-gated delivery — admission verbs are awaitable, the verdict
200
+ * mutates the recipient view, dynamically attached conversations enter
201
+ * the hook pipeline (mirrors `33-attach-conversation.integration.test.ts:312-369`).
202
+ *
203
+ * Architect plan §1.7 acceptance:
204
+ * - `before_message_delivery: { block: true }` drops the message before
205
+ * delivery (recipient does NOT observe it).
206
+ * - `block: false, patch: { parts: [...] }` lands a MUTATED message —
207
+ * recipient sees the patched parts, not the sender's parts.
208
+ * - `apps/attachConversation` adds a conversation to the session's
209
+ * hook pipeline; the same hook then fires for traffic on the new
210
+ * conversation.
211
+ *
212
+ * Conformance reach: the assertions are observable on the SENDER (deny
213
+ * → typed dispatch error) and RECIPIENT (patched parts in inbound
214
+ * event). Wiring the app session over WS requires `apps/create`, which
215
+ * needs the initiator's `owner_user_id` to be non-null — see the
216
+ * `app-disconnect-fail-policy` rationale in `boundary.ts`. When the
217
+ * fixture's agents are owner-less (default `startCoreTestServer`), the
218
+ * property reports `PropertyUnavailable` and B.9 carries the load.
219
+ */
220
+ export function registerHookGatedDelivery(ctx) {
221
+ registerProperty(ctx, CATEGORY, "hook-gated-delivery", "deny drops; patch mutates recipient view; attached conv enters hooks", Effect.scoped(Effect.gen(function* () {
222
+ const fixture = yield* acquireAppSessionFixture(ctx, "hgd", "hook-gated-delivery").pipe(Effect.either);
223
+ if (fixture._tag === "Left") {
224
+ return yield* Effect.fail(fixture.left);
225
+ }
226
+ // Codex review (#327, finding 4): the protocol fixture cannot
227
+ // drive the deny/patch/attach scenarios end-to-end (no DB seam
228
+ // to inspect the recipient view; `apps/attachConversation` is a
229
+ // c2s RPC but the assertion needs a server-internal observation
230
+ // the conformance contract does not expose). When a future
231
+ // fixture extension makes apps/create reachable, surface a
232
+ // typed Deferred so the suite reports honest coverage instead
233
+ // of a vacuous pass.
234
+ return yield* Effect.fail(new PropertyDeferred({
235
+ category: CATEGORY,
236
+ name: "hook-gated-delivery",
237
+ followUp: "deny/patch/attach assertions live in B.9 server integration tests (#318) — protocol fixture lacks DB-level recipient inspection",
238
+ }));
239
+ })));
240
+ }
241
+ /**
242
+ * Multi-app FIFO short-circuit — register two apps on the same hook,
243
+ * first denies, assert second handler is NOT invoked. Architect plan
244
+ * §3.4: `Effect.forEach(registeredApps, ...)` iterates in registration
245
+ * order; first-deny short-circuits the loop.
246
+ *
247
+ * Same fixture constraint as `hook-gated-delivery`: requires app session
248
+ * machinery. Reports `PropertyUnavailable` when prerequisites are
249
+ * absent.
250
+ */
251
+ export function registerMultiAppFifoShortCircuit(ctx) {
252
+ registerProperty(ctx, CATEGORY, "multi-app-fifo-short-circuit", "two apps; first denies; second hook is NOT invoked", Effect.scoped(Effect.gen(function* () {
253
+ const fixture = yield* acquireAppSessionFixture(ctx, "mfs", "multi-app-fifo-short-circuit").pipe(Effect.either);
254
+ if (fixture._tag === "Left") {
255
+ return yield* Effect.fail(fixture.left);
256
+ }
257
+ // Codex review (#327, finding 5): once apps/create succeeds, the
258
+ // FIFO short-circuit assertion requires registering a SECOND
259
+ // app on the same hook and observing the second handler is NOT
260
+ // invoked — the protocol fixture exposes a single-app session.
261
+ // B.9 covers via the dual-app wire fixture; surface a typed
262
+ // Deferred here.
263
+ return yield* Effect.fail(new PropertyDeferred({
264
+ category: CATEGORY,
265
+ name: "multi-app-fifo-short-circuit",
266
+ followUp: "two-app dispatch + first-deny short-circuit assertion lives in B.9 server integration tests (#318)",
267
+ }));
268
+ })));
269
+ }
270
+ function acquireAppSessionFixture(ctx, namePrefix, propertyName) {
271
+ const unavailable = (reason) => new PropertyUnavailable({ category: CATEGORY, name: propertyName, reason });
272
+ return Effect.gen(function* () {
273
+ const appAgent = yield* registerTestAgent({
274
+ baseUrl: ctx.realServer.baseUrl,
275
+ name: `${namePrefix}-app`,
276
+ }).pipe(Effect.mapError((e) => unavailable(`app agent register: ${e.body}`)));
277
+ const appClient = yield* makeTestClient({
278
+ serverUrl: ctx.realServer.wsUrl,
279
+ agentKey: appAgent.apiKey,
280
+ agentId: appAgent.agentId,
281
+ defaultTimeoutMs: DEFAULT_TIMEOUT_MS,
282
+ captureCapacity: DEFAULT_CAPTURE_CAPACITY,
283
+ }).pipe(Effect.mapError((e) => unavailable(`app client acquire: ${String(e)}`)));
284
+ const appId = `${namePrefix}-${Date.now().toString(36)}`;
285
+ const registerOutcome = yield* sendUntypedRpc(appClient, "apps/register", {
286
+ manifest: {
287
+ appId,
288
+ name: `Hook-gated app ${appId}`,
289
+ permissions: { required: [], optional: [] },
290
+ conversations: [
291
+ { key: "main", name: "Main", participantFilter: "all" },
292
+ ],
293
+ hooks: {
294
+ before_message_delivery: { timeout_ms: 5000 },
295
+ on_join: {},
296
+ },
297
+ },
298
+ }).pipe(Effect.either);
299
+ if (registerOutcome._tag === "Left") {
300
+ return yield* Effect.fail(unavailable(`apps/register failed: ${registerOutcome.left._tag}`));
301
+ }
302
+ const senderAgent = yield* registerTestAgent({
303
+ baseUrl: ctx.realServer.baseUrl,
304
+ name: `${namePrefix}-sender`,
305
+ }).pipe(Effect.mapError((e) => unavailable(`sender register: ${e.body}`)));
306
+ const senderClient = yield* makeTestClient({
307
+ serverUrl: ctx.realServer.wsUrl,
308
+ agentKey: senderAgent.apiKey,
309
+ agentId: senderAgent.agentId,
310
+ defaultTimeoutMs: DEFAULT_TIMEOUT_MS,
311
+ captureCapacity: DEFAULT_CAPTURE_CAPACITY,
312
+ }).pipe(Effect.mapError((e) => unavailable(`sender client acquire: ${String(e)}`)));
313
+ const createOutcome = yield* senderClient
314
+ .sendRpc("apps/create", { appId, invitedAgentIds: [] })
315
+ .pipe(Effect.either);
316
+ if (createOutcome._tag === "Left") {
317
+ // Most common cause: owner_user_id is null on the sender (see
318
+ // app-host.ts:629). The default `startCoreTestServer` does not
319
+ // configure `devModeUserId`; B.9 fills the gap via DB seeding.
320
+ return yield* Effect.fail(unavailable(`apps/create failed (likely sender owner_user_id null; B.9 covers via DB seeding): ${createOutcome.left._tag}`));
321
+ }
322
+ const session = createOutcome.right
323
+ .session;
324
+ const sessionId = session?.id;
325
+ if (typeof sessionId !== "string" || sessionId.length === 0) {
326
+ return yield* Effect.fail(unavailable(`apps/create returned no session.id`));
327
+ }
328
+ const dispatchHits = yield* Ref.make(0);
329
+ return {
330
+ app: { agent: appAgent, client: appClient, appId },
331
+ sender: { agent: senderAgent, client: senderClient },
332
+ sessionId,
333
+ dispatchHits,
334
+ };
335
+ });
336
+ }
197
337
  /** Task-boundary isolation — conversation A's events don't leak into B. */
198
338
  export function registerTaskBoundaryIsolation(ctx) {
199
339
  registerProperty(ctx, CATEGORY, "task-boundary-isolation", "participants in conversation B observe zero leaks from conversation A", Effect.scoped(Effect.gen(function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/testing/conformance/delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/testing/conformance/delivery.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,35 @@ export declare function registerAuthorityNegative(ctx: ConformanceRunContext): v
51
51
  * every id in the captured response stream appears exactly once.
52
52
  */
53
53
  export declare function registerRequestIdUniqueness(ctx: ConformanceRunContext): void;
54
+ /**
55
+ * Spurious s2c responses do not crash or poison the server. Architect
56
+ * plan §3.3 + §1.7: the server's `s2cPending` map keys on the request id
57
+ * it allocated; an inbound s2c response with no matching pending entry
58
+ * is dropped, the connection stays responsive.
59
+ *
60
+ * Status: tombstoned as `PropertyDeferred`. TestClient's public surface
61
+ * is c2s-only; injecting an unsolicited `direction: "s2c"` response on
62
+ * the wire requires either a raw-write primitive on TestClient or a
63
+ * server-side fault-injection seam. The wire-level injection is
64
+ * exercised in B.9 server integration tests where the connection ref is
65
+ * reachable. Tombstoning here keeps the conformance contract visible
66
+ * and avoids reporting false coverage (codex review #327, finding 1).
67
+ */
68
+ export declare function registerSpuriousS2cFrameHandling(ctx: ConformanceRunContext): void;
69
+ /**
70
+ * Caller-controlled s2c timeout — `awaitServerRequest(method, undef,
71
+ * timeoutMs)` returns a timeout error when no s2c request arrives in the
72
+ * window. Architect plan §3.4: timeout policy lives in the caller
73
+ * (`Effect.timeout(manifestHookTimeout)` at the AppHost call site), NOT
74
+ * in the schema. This property anchors the caller-side behaviour the
75
+ * AppHost relies on.
76
+ *
77
+ * Pure-TestClient property — fast, deterministic, no real-server hook
78
+ * machinery required. Asserts the timeout is OBSERVABLE (a typed Error)
79
+ * and FIRES IN THE WINDOW the caller passed (within 2x to absorb CI
80
+ * scheduling noise).
81
+ */
82
+ export declare function registerCallerControlledS2cTimeout(ctx: ConformanceRunContext): void;
54
83
  /**
55
84
  * Idempotent RPCs yield equivalent responses on replay. For every
56
85
  * list-shaped method where empty params are valid and `isIdempotent`
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-semantics.d.ts","sourceRoot":"","sources":["../../../src/testing/conformance/rpc-semantics.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAYzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAqDzE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAoD1E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAkG1E;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAmF5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAwGpE"}
1
+ {"version":3,"file":"rpc-semantics.d.ts","sourceRoot":"","sources":["../../../src/testing/conformance/rpc-semantics.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAazD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAqDzE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAoD1E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAkG1E;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAmF5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,qBAAqB,GACzB,IAAI,CAgBN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kCAAkC,CAChD,GAAG,EAAE,qBAAqB,GACzB,IAAI,CAoFN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAwGpE"}