@moltzap/protocol 2026.503.3 → 2026.503.4
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/dist/test-fixtures/seed-data.d.ts.map +1 -1
- package/dist/test-fixtures/seed-data.js +52 -21
- package/dist/test-fixtures/seed-data.js.map +1 -1
- package/dist/testing/agent-registration.d.ts.map +1 -1
- package/dist/testing/agent-registration.js +4 -1
- package/dist/testing/agent-registration.js.map +1 -1
- package/dist/testing/arbitraries/frames.d.ts.map +1 -1
- package/dist/testing/arbitraries/frames.js +2 -1
- package/dist/testing/arbitraries/frames.js.map +1 -1
- package/dist/testing/arbitraries/from-typebox.d.ts.map +1 -1
- package/dist/testing/arbitraries/from-typebox.js +19 -10
- package/dist/testing/arbitraries/from-typebox.js.map +1 -1
- package/dist/testing/arbitraries/rpc.d.ts.map +1 -1
- package/dist/testing/arbitraries/rpc.js +12 -3
- package/dist/testing/arbitraries/rpc.js.map +1 -1
- package/dist/testing/captures.d.ts.map +1 -1
- package/dist/testing/captures.js +4 -3
- package/dist/testing/captures.js.map +1 -1
- package/dist/testing/codec.d.ts.map +1 -1
- package/dist/testing/codec.js +13 -5
- package/dist/testing/codec.js.map +1 -1
- package/dist/testing/conformance/__divergence_proofs__/executable-proof-helpers.d.ts.map +1 -1
- package/dist/testing/conformance/__divergence_proofs__/executable-proof-helpers.js +7 -4
- package/dist/testing/conformance/__divergence_proofs__/executable-proof-helpers.js.map +1 -1
- package/dist/testing/conformance/_helpers.d.ts +6 -1
- package/dist/testing/conformance/_helpers.d.ts.map +1 -1
- package/dist/testing/conformance/_helpers.js +24 -0
- package/dist/testing/conformance/_helpers.js.map +1 -1
- package/dist/testing/conformance/adversity.d.ts.map +1 -1
- package/dist/testing/conformance/adversity.js +76 -66
- package/dist/testing/conformance/adversity.js.map +1 -1
- package/dist/testing/conformance/boundary.d.ts.map +1 -1
- package/dist/testing/conformance/boundary.js +49 -39
- package/dist/testing/conformance/boundary.js.map +1 -1
- package/dist/testing/conformance/client/adversity.d.ts.map +1 -1
- package/dist/testing/conformance/client/adversity.js +20 -15
- package/dist/testing/conformance/client/adversity.js.map +1 -1
- package/dist/testing/conformance/client/boundary.d.ts.map +1 -1
- package/dist/testing/conformance/client/boundary.js +7 -5
- package/dist/testing/conformance/client/boundary.js.map +1 -1
- package/dist/testing/conformance/client/delivery.d.ts.map +1 -1
- package/dist/testing/conformance/client/delivery.js +26 -20
- package/dist/testing/conformance/client/delivery.js.map +1 -1
- package/dist/testing/conformance/client/rpc-semantics.d.ts.map +1 -1
- package/dist/testing/conformance/client/rpc-semantics.js +18 -15
- package/dist/testing/conformance/client/rpc-semantics.js.map +1 -1
- package/dist/testing/conformance/client/runner.d.ts +13 -8
- package/dist/testing/conformance/client/runner.d.ts.map +1 -1
- package/dist/testing/conformance/client/runner.js +17 -24
- package/dist/testing/conformance/client/runner.js.map +1 -1
- package/dist/testing/conformance/client/schema-conformance.d.ts.map +1 -1
- package/dist/testing/conformance/client/schema-conformance.js +11 -9
- package/dist/testing/conformance/client/schema-conformance.js.map +1 -1
- package/dist/testing/conformance/client/suite.d.ts.map +1 -1
- package/dist/testing/conformance/client/suite.js +2 -1
- package/dist/testing/conformance/client/suite.js.map +1 -1
- package/dist/testing/conformance/delivery.d.ts.map +1 -1
- package/dist/testing/conformance/delivery.js +70 -88
- package/dist/testing/conformance/delivery.js.map +1 -1
- package/dist/testing/conformance/env.d.ts +9 -0
- package/dist/testing/conformance/env.d.ts.map +1 -1
- package/dist/testing/conformance/env.js +16 -3
- package/dist/testing/conformance/env.js.map +1 -1
- package/dist/testing/conformance/presence.d.ts.map +1 -1
- package/dist/testing/conformance/presence.js +4 -2
- package/dist/testing/conformance/presence.js.map +1 -1
- package/dist/testing/conformance/registry.d.ts +1 -1
- package/dist/testing/conformance/registry.d.ts.map +1 -1
- package/dist/testing/conformance/registry.js +1 -1
- package/dist/testing/conformance/registry.js.map +1 -1
- package/dist/testing/conformance/rpc-semantics.d.ts.map +1 -1
- package/dist/testing/conformance/rpc-semantics.js +102 -63
- package/dist/testing/conformance/rpc-semantics.js.map +1 -1
- package/dist/testing/conformance/runner.d.ts +2 -2
- package/dist/testing/conformance/runner.d.ts.map +1 -1
- package/dist/testing/conformance/runner.js +5 -10
- package/dist/testing/conformance/runner.js.map +1 -1
- package/dist/testing/conformance/schema-conformance.d.ts.map +1 -1
- package/dist/testing/conformance/schema-conformance.js +113 -67
- package/dist/testing/conformance/schema-conformance.js.map +1 -1
- package/dist/testing/conformance/suite.d.ts +1 -1
- package/dist/testing/conformance/suite.d.ts.map +1 -1
- package/dist/testing/conformance/suite.js +12 -9
- package/dist/testing/conformance/suite.js.map +1 -1
- package/dist/testing/models/dispatch.d.ts.map +1 -1
- package/dist/testing/models/dispatch.js +58 -50
- package/dist/testing/models/dispatch.js.map +1 -1
- package/dist/testing/models/state.d.ts +3 -3
- package/dist/testing/models/state.d.ts.map +1 -1
- package/dist/testing/models/state.js +14 -1
- package/dist/testing/models/state.js.map +1 -1
- package/dist/testing/test-client.d.ts +22 -3
- package/dist/testing/test-client.d.ts.map +1 -1
- package/dist/testing/test-client.js +51 -31
- package/dist/testing/test-client.js.map +1 -1
- package/dist/testing/test-server.d.ts.map +1 -1
- package/dist/testing/test-server.js +7 -11
- package/dist/testing/test-server.js.map +1 -1
- package/dist/testing/toxics/client.d.ts.map +1 -1
- package/dist/testing/toxics/client.js +9 -3
- package/dist/testing/toxics/client.js.map +1 -1
- package/dist/testing/toxics/profile.d.ts.map +1 -1
- package/dist/testing/toxics/profile.js +4 -1
- package/dist/testing/toxics/profile.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -27,6 +27,12 @@ import { registerProperty } from "../registry.js";
|
|
|
27
27
|
import { acquireFixture, collectTagged, invariant, subscribeAll, } from "./_fixtures.js";
|
|
28
28
|
const CATEGORY = "delivery";
|
|
29
29
|
const PROPERTY_BUDGET_MS = 8_000;
|
|
30
|
+
const PROPERTY_FAN_OUT_CARDINALITY_CLIENT = "fan-out-cardinality-client";
|
|
31
|
+
const PROPERTY_PAYLOAD_OPACITY_CLIENT = "payload-opacity-client";
|
|
32
|
+
const PROPERTY_TASK_BOUNDARY_ISOLATION_CLIENT = "task-boundary-isolation-client";
|
|
33
|
+
const PAYLOAD_TOKEN_RADIX = 36;
|
|
34
|
+
const TASK_BOUNDARY_EMISSION_COUNT = 3;
|
|
35
|
+
const LIFECYCLE_OBSERVATION_COUNT = 2;
|
|
30
36
|
function isStringKeyedRecord(value) {
|
|
31
37
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
32
38
|
}
|
|
@@ -48,15 +54,15 @@ function eventDataRecord(data) {
|
|
|
48
54
|
* drops one, or reorders the sequence fails.
|
|
49
55
|
*/
|
|
50
56
|
export function registerFanOutCardinalityClient(ctx) {
|
|
51
|
-
registerProperty(ctx, CATEGORY,
|
|
52
|
-
const fx = yield* acquireFixture(ctx, CATEGORY,
|
|
57
|
+
registerProperty(ctx, CATEGORY, PROPERTY_FAN_OUT_CARDINALITY_CLIENT, "N fan-out events surface on real client in emission order, no drops, no dups", Effect.scoped(Effect.gen(function* () {
|
|
58
|
+
const fx = yield* acquireFixture(ctx, CATEGORY, PROPERTY_FAN_OUT_CARDINALITY_CLIENT);
|
|
53
59
|
yield* subscribeAll(fx.handle);
|
|
54
60
|
const base = fc.sample(arbitraryEventFrame(), {
|
|
55
61
|
numRuns: 1,
|
|
56
62
|
seed: ctx.seed,
|
|
57
63
|
})[0];
|
|
58
64
|
if (base === undefined) {
|
|
59
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
65
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_FAN_OUT_CARDINALITY_CLIENT, "sample failed"));
|
|
60
66
|
}
|
|
61
67
|
const N = 5;
|
|
62
68
|
const campaign = yield* fx.window.freshEmissionTag;
|
|
@@ -74,13 +80,13 @@ export function registerFanOutCardinalityClient(ctx) {
|
|
|
74
80
|
}
|
|
75
81
|
const observed = yield* collectTagged(fx.handle, (t) => t === campaign, { expected: N, budgetMs: PROPERTY_BUDGET_MS });
|
|
76
82
|
if (observed.length !== N) {
|
|
77
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
83
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_FAN_OUT_CARDINALITY_CLIENT, `expected ${N} observations, got ${observed.length}`));
|
|
78
84
|
}
|
|
79
85
|
const indices = observed.map((o) => o.data?.positionIndex);
|
|
80
86
|
// Strict ordering check against `[0..N)`.
|
|
81
87
|
for (let i = 0; i < N; i++) {
|
|
82
88
|
if (indices[i] !== i) {
|
|
83
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
89
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_FAN_OUT_CARDINALITY_CLIENT, `order mismatch at slot ${i}: got ${String(indices[i])}`));
|
|
84
90
|
}
|
|
85
91
|
}
|
|
86
92
|
})));
|
|
@@ -97,10 +103,10 @@ export function registerFanOutCardinalityClient(ctx) {
|
|
|
97
103
|
* stringify) fails.
|
|
98
104
|
*/
|
|
99
105
|
export function registerPayloadOpacityClient(ctx) {
|
|
100
|
-
registerProperty(ctx, CATEGORY,
|
|
101
|
-
const fx = yield* acquireFixture(ctx, CATEGORY,
|
|
106
|
+
registerProperty(ctx, CATEGORY, PROPERTY_PAYLOAD_OPACITY_CLIENT, "opaque payload token round-trips byte-identical through the real client", Effect.scoped(Effect.gen(function* () {
|
|
107
|
+
const fx = yield* acquireFixture(ctx, CATEGORY, PROPERTY_PAYLOAD_OPACITY_CLIENT);
|
|
102
108
|
yield* subscribeAll(fx.handle);
|
|
103
|
-
const token = `opq-${ctx.seed.toString(
|
|
109
|
+
const token = `opq-${ctx.seed.toString(PAYLOAD_TOKEN_RADIX)}-${Date.now().toString(PAYLOAD_TOKEN_RADIX)}`;
|
|
104
110
|
const base = {
|
|
105
111
|
jsonrpc: "2.0",
|
|
106
112
|
type: "event",
|
|
@@ -118,12 +124,12 @@ export function registerPayloadOpacityClient(ctx) {
|
|
|
118
124
|
budgetMs: PROPERTY_BUDGET_MS,
|
|
119
125
|
});
|
|
120
126
|
if (observed.length === 0) {
|
|
121
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
127
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_PAYLOAD_OPACITY_CLIENT, `token ${token} emission not surfaced by real client`));
|
|
122
128
|
}
|
|
123
129
|
const surfaced = observed[0];
|
|
124
130
|
const surfacedStr = new TextDecoder().decode(surfaced.raw);
|
|
125
131
|
if (!surfacedStr.includes(token)) {
|
|
126
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
132
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_PAYLOAD_OPACITY_CLIENT, `token ${token} not present byte-for-byte in surfaced raw frame`));
|
|
127
133
|
}
|
|
128
134
|
})));
|
|
129
135
|
}
|
|
@@ -136,15 +142,15 @@ export function registerPayloadOpacityClient(ctx) {
|
|
|
136
142
|
* Predicate: `observedCampaignB.length === 0`.
|
|
137
143
|
*/
|
|
138
144
|
export function registerTaskBoundaryIsolationClient(ctx) {
|
|
139
|
-
registerProperty(ctx, CATEGORY,
|
|
140
|
-
const fx = yield* acquireFixture(ctx, CATEGORY,
|
|
145
|
+
registerProperty(ctx, CATEGORY, PROPERTY_TASK_BOUNDARY_ISOLATION_CLIENT, "task-A subscriber does not surface task-B events — no leakage", Effect.scoped(Effect.gen(function* () {
|
|
146
|
+
const fx = yield* acquireFixture(ctx, CATEGORY, PROPERTY_TASK_BOUNDARY_ISOLATION_CLIENT);
|
|
141
147
|
yield* subscribeAll(fx.handle);
|
|
142
148
|
const baseEvent = fc.sample(arbitraryEventFrame(), {
|
|
143
149
|
numRuns: 1,
|
|
144
150
|
seed: ctx.seed,
|
|
145
151
|
})[0];
|
|
146
152
|
if (baseEvent === undefined) {
|
|
147
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
153
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_TASK_BOUNDARY_ISOLATION_CLIENT, "sample failed"));
|
|
148
154
|
}
|
|
149
155
|
const campaignA = yield* fx.window.freshEmissionTag;
|
|
150
156
|
const campaignB = yield* fx.window.freshEmissionTag;
|
|
@@ -152,7 +158,7 @@ export function registerTaskBoundaryIsolationClient(ctx) {
|
|
|
152
158
|
const taskB = `task-b-${ctx.seed}`;
|
|
153
159
|
const baseEventData = eventDataRecord(baseEvent.data);
|
|
154
160
|
// Emit task-A frames.
|
|
155
|
-
for (let i = 0; i <
|
|
161
|
+
for (let i = 0; i < TASK_BOUNDARY_EMISSION_COUNT; i++) {
|
|
156
162
|
yield* fx.window.emitTaggedEvent({
|
|
157
163
|
connection: fx.connection,
|
|
158
164
|
base: {
|
|
@@ -164,7 +170,7 @@ export function registerTaskBoundaryIsolationClient(ctx) {
|
|
|
164
170
|
}
|
|
165
171
|
// Emit task-B frames that must be filtered out by the client's
|
|
166
172
|
// subscription (via conversationId filter).
|
|
167
|
-
for (let i = 0; i <
|
|
173
|
+
for (let i = 0; i < TASK_BOUNDARY_EMISSION_COUNT; i++) {
|
|
168
174
|
yield* fx.window.emitTaggedEvent({
|
|
169
175
|
connection: fx.connection,
|
|
170
176
|
base: {
|
|
@@ -194,7 +200,7 @@ export function registerTaskBoundaryIsolationClient(ctx) {
|
|
|
194
200
|
const cid = obs.data
|
|
195
201
|
?.conversationId;
|
|
196
202
|
if (cid !== taskA) {
|
|
197
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
203
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_TASK_BOUNDARY_ISOLATION_CLIENT, `task-A emission surfaced with conversationId ${String(cid)}`));
|
|
198
204
|
}
|
|
199
205
|
}
|
|
200
206
|
const taggedB = yield* collectTagged(fx.handle, (t) => t === campaignB, { expected: 0, budgetMs: 0 });
|
|
@@ -202,7 +208,7 @@ export function registerTaskBoundaryIsolationClient(ctx) {
|
|
|
202
208
|
const cid = obs.data
|
|
203
209
|
?.conversationId;
|
|
204
210
|
if (cid !== taskB) {
|
|
205
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
211
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_TASK_BOUNDARY_ISOLATION_CLIENT, `task-B emission surfaced with conversationId ${String(cid)} (cross-wiring)`));
|
|
206
212
|
}
|
|
207
213
|
}
|
|
208
214
|
})));
|
|
@@ -237,11 +243,11 @@ export function registerArchiveLifecycleClient(ctx) {
|
|
|
237
243
|
emissionTag: tag,
|
|
238
244
|
});
|
|
239
245
|
const observed = yield* collectTagged(fx.handle, (t) => t === tag, {
|
|
240
|
-
expected:
|
|
246
|
+
expected: LIFECYCLE_OBSERVATION_COUNT,
|
|
241
247
|
budgetMs: PROPERTY_BUDGET_MS,
|
|
242
248
|
});
|
|
243
|
-
if (observed.length !==
|
|
244
|
-
return yield* Effect.fail(invariant(CATEGORY, name, `expected
|
|
249
|
+
if (observed.length !== LIFECYCLE_OBSERVATION_COUNT) {
|
|
250
|
+
return yield* Effect.fail(invariant(CATEGORY, name, `expected ${LIFECYCLE_OBSERVATION_COUNT} lifecycle observations, got ${observed.length}`));
|
|
245
251
|
}
|
|
246
252
|
if (observed[0]?.eventName !== EventNames.ConversationArchived ||
|
|
247
253
|
observed[1]?.eventName !== EventNames.ConversationUnarchived) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../../src/testing/conformance/client/delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,aAAa,EACb,SAAS,EACT,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,MAAM,QAAQ,GAAG,UAAmB,CAAC;AACrC,MAAM,kBAAkB,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../../src/testing/conformance/client/delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-semantics.d.ts","sourceRoot":"","sources":["../../../../src/testing/conformance/client/rpc-semantics.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc-semantics.d.ts","sourceRoot":"","sources":["../../../../src/testing/conformance/client/rpc-semantics.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAW/D;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,2BAA2B,GAC/B,IAAI,CAgFN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,2BAA2B,GAC/B,IAAI,CAqGN"}
|
|
@@ -16,8 +16,11 @@
|
|
|
16
16
|
import { Effect } from "effect";
|
|
17
17
|
import { registerProperty } from "../registry.js";
|
|
18
18
|
import { acquireFixture, invariant } from "./_fixtures.js";
|
|
19
|
+
import { AgentsList } from "../../../schema/methods/auth.js";
|
|
19
20
|
const CATEGORY = "rpc-semantics";
|
|
20
21
|
const CALL_BUDGET_MS = 5_000;
|
|
22
|
+
const PROPERTY_MODEL_EQUIVALENCE_CLIENT = "model-equivalence-client";
|
|
23
|
+
const PROPERTY_REQUEST_ID_UNIQUENESS_CLIENT = "request-id-uniqueness-client";
|
|
21
24
|
/**
|
|
22
25
|
* B1 client half — property issues `realClient.call("agents/list", {})`;
|
|
23
26
|
* TestServer captures the inbound request id and emits a well-shaped
|
|
@@ -28,8 +31,8 @@ const CALL_BUDGET_MS = 5_000;
|
|
|
28
31
|
* never resolve within the budget.
|
|
29
32
|
*/
|
|
30
33
|
export function registerModelEquivalenceClient(ctx) {
|
|
31
|
-
registerProperty(ctx, CATEGORY,
|
|
32
|
-
const fx = yield* acquireFixture(ctx, CATEGORY,
|
|
34
|
+
registerProperty(ctx, CATEGORY, PROPERTY_MODEL_EQUIVALENCE_CLIENT, "scripted response to sampled RPC resolves the real client's pending call", Effect.scoped(Effect.gen(function* () {
|
|
35
|
+
const fx = yield* acquireFixture(ctx, CATEGORY, PROPERTY_MODEL_EQUIVALENCE_CLIENT);
|
|
33
36
|
// Fork a background responder that watches inbound requests and
|
|
34
37
|
// replies with an empty-agents-list result as soon as the sampled
|
|
35
38
|
// call lands.
|
|
@@ -42,7 +45,7 @@ export function registerModelEquivalenceClient(ctx) {
|
|
|
42
45
|
if (entry.kind === "inbound" &&
|
|
43
46
|
entry.frame !== null &&
|
|
44
47
|
entry.frame.type === "request" &&
|
|
45
|
-
entry.frame.method ===
|
|
48
|
+
entry.frame.method === AgentsList.name) {
|
|
46
49
|
const response = {
|
|
47
50
|
jsonrpc: "2.0",
|
|
48
51
|
type: "response",
|
|
@@ -61,14 +64,14 @@ export function registerModelEquivalenceClient(ctx) {
|
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
66
|
}));
|
|
64
|
-
const result = yield* fx.handle.call.call(
|
|
67
|
+
const result = yield* fx.handle.call.call(AgentsList.name, {}).pipe(Effect.timeoutFail({
|
|
65
68
|
duration: `${CALL_BUDGET_MS} millis`,
|
|
66
|
-
onTimeout: () => invariant(CATEGORY,
|
|
69
|
+
onTimeout: () => invariant(CATEGORY, PROPERTY_MODEL_EQUIVALENCE_CLIENT, `agents/list call did not resolve within ${CALL_BUDGET_MS}ms`),
|
|
67
70
|
}), Effect.mapError((e) => "_tag" in e && e._tag === "RealClientRpcError"
|
|
68
|
-
? invariant(CATEGORY,
|
|
71
|
+
? invariant(CATEGORY, PROPERTY_MODEL_EQUIVALENCE_CLIENT, `agents/list rejected: ${e.kind} (${e.documentedErrorTag ?? "null"})`)
|
|
69
72
|
: e));
|
|
70
73
|
if (result.type !== "response") {
|
|
71
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
74
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_MODEL_EQUIVALENCE_CLIENT, "real client surfaced non-response frame"));
|
|
72
75
|
}
|
|
73
76
|
})));
|
|
74
77
|
}
|
|
@@ -86,8 +89,8 @@ export function registerModelEquivalenceClient(ctx) {
|
|
|
86
89
|
* response frame regardless of id mis-routes.
|
|
87
90
|
*/
|
|
88
91
|
export function registerRequestIdUniquenessClient(ctx) {
|
|
89
|
-
registerProperty(ctx, CATEGORY,
|
|
90
|
-
const fx = yield* acquireFixture(ctx, CATEGORY,
|
|
92
|
+
registerProperty(ctx, CATEGORY, PROPERTY_REQUEST_ID_UNIQUENESS_CLIENT, "spurious response ids don't resolve pending calls; matching ids do", Effect.scoped(Effect.gen(function* () {
|
|
93
|
+
const fx = yield* acquireFixture(ctx, CATEGORY, PROPERTY_REQUEST_ID_UNIQUENESS_CLIENT);
|
|
91
94
|
// Emit a spurious response with an id the client never sent.
|
|
92
95
|
const spuriousId = "spurious-id-that-was-never-requested";
|
|
93
96
|
yield* fx.connection
|
|
@@ -109,7 +112,7 @@ export function registerRequestIdUniquenessClient(ctx) {
|
|
|
109
112
|
if (entry.kind === "inbound" &&
|
|
110
113
|
entry.frame !== null &&
|
|
111
114
|
entry.frame.type === "request" &&
|
|
112
|
-
entry.frame.method ===
|
|
115
|
+
entry.frame.method === AgentsList.name) {
|
|
113
116
|
yield* fx.connection
|
|
114
117
|
.emitResponse({
|
|
115
118
|
jsonrpc: "2.0",
|
|
@@ -126,21 +129,21 @@ export function registerRequestIdUniquenessClient(ctx) {
|
|
|
126
129
|
}
|
|
127
130
|
}));
|
|
128
131
|
// Issue the RPC: must resolve via the matching id, not the spurious one.
|
|
129
|
-
const result = yield* fx.handle.call.call(
|
|
132
|
+
const result = yield* fx.handle.call.call(AgentsList.name, {}).pipe(Effect.timeoutFail({
|
|
130
133
|
duration: `${CALL_BUDGET_MS} millis`,
|
|
131
|
-
onTimeout: () => invariant(CATEGORY,
|
|
134
|
+
onTimeout: () => invariant(CATEGORY, PROPERTY_REQUEST_ID_UNIQUENESS_CLIENT, `agents/list did not resolve within ${CALL_BUDGET_MS}ms despite matching response`),
|
|
132
135
|
}), Effect.mapError((e) => "_tag" in e && e._tag === "RealClientRpcError"
|
|
133
|
-
? invariant(CATEGORY,
|
|
136
|
+
? invariant(CATEGORY, PROPERTY_REQUEST_ID_UNIQUENESS_CLIENT, `agents/list rejected: ${e.kind}`)
|
|
134
137
|
: e));
|
|
135
138
|
if (result.id !== undefined) {
|
|
136
139
|
// Inspect: the resolved id must appear in the outboundIdFeed —
|
|
137
140
|
// any resolution via the spurious id is a cross-wiring bug.
|
|
138
141
|
const outbound = yield* fx.handle.call.outboundIdFeed;
|
|
139
142
|
if (!outbound.includes(result.id)) {
|
|
140
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
143
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_REQUEST_ID_UNIQUENESS_CLIENT, `resolved id ${result.id} absent from outboundIdFeed (cross-wire)`));
|
|
141
144
|
}
|
|
142
145
|
if (result.id === spuriousId) {
|
|
143
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
146
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_REQUEST_ID_UNIQUENESS_CLIENT, "pending call resolved via spurious id"));
|
|
144
147
|
}
|
|
145
148
|
}
|
|
146
149
|
})));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-semantics.js","sourceRoot":"","sources":["../../../../src/testing/conformance/client/rpc-semantics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,QAAQ,GAAG,eAAwB,CAAC;AAC1C,MAAM,cAAc,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc-semantics.js","sourceRoot":"","sources":["../../../../src/testing/conformance/client/rpc-semantics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,MAAM,QAAQ,GAAG,eAAwB,CAAC;AAC1C,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,iCAAiC,GAAG,0BAA0B,CAAC;AACrE,MAAM,qCAAqC,GAAG,8BAA8B,CAAC;AAE7E;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAC5C,GAAgC;IAEhC,gBAAgB,CACd,GAAG,EACH,QAAQ,EACR,iCAAiC,EACjC,0EAA0E,EAC1E,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,cAAc,CAC9B,GAAG,EACH,QAAQ,EACR,iCAAiC,CAClC,CAAC;QACF,gEAAgE;QAChE,kEAAkE;QAClE,cAAc;QACd,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClB,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACnD,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;oBACzB,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;wBACxB,KAAK,CAAC,KAAK,KAAK,IAAI;wBACpB,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;wBAC9B,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,EACtC,CAAC;wBACD,MAAM,QAAQ,GAAkB;4BAC9B,OAAO,EAAE,KAAK;4BACd,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,KAAK;4BAChB,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;4BAClB,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;yBACvB,CAAC;wBACF,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC;4BAClC,UAAU,EAAE,EAAE,CAAC,UAAU;4BACzB,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;yBAC5B,CAAC,CAAC;wBACH,SAAS,GAAG,IAAI,CAAC;wBACjB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,WAAW,CAAC;YACjB,QAAQ,EAAE,GAAG,cAAc,SAAS;YACpC,SAAS,EAAE,GAAG,EAAE,CACd,SAAS,CACP,QAAQ,EACR,iCAAiC,EACjC,2CAA2C,cAAc,IAAI,CAC9D;SACJ,CAAC,EACF,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACpB,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB;YAC5C,CAAC,CAAC,SAAS,CACP,QAAQ,EACR,iCAAiC,EACjC,yBAAyB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,kBAAkB,IAAI,MAAM,GAAG,CACtE;YACH,CAAC,CAAC,CAAC,CACN,CACF,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,SAAS,CACP,QAAQ,EACR,iCAAiC,EACjC,yCAAyC,CAC1C,CACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iCAAiC,CAC/C,GAAgC;IAEhC,gBAAgB,CACd,GAAG,EACH,QAAQ,EACR,qCAAqC,EACrC,oEAAoE,EACpE,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,cAAc,CAC9B,GAAG,EACH,QAAQ,EACR,qCAAqC,CACtC,CAAC;QACF,6DAA6D;QAC7D,MAAM,UAAU,GAAG,sCAAsC,CAAC;QAC1D,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU;aACjB,YAAY,CAAC;YACZ,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,KAAK;YAChB,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;SACvB,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/C,gEAAgE;QAChE,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClB,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACnD,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;oBACzB,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;wBACxB,KAAK,CAAC,KAAK,KAAK,IAAI;wBACpB,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;wBAC9B,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,EACtC,CAAC;wBACD,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU;6BACjB,YAAY,CAAC;4BACZ,OAAO,EAAE,KAAK;4BACd,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,KAAK;4BAChB,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;4BAClB,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;yBACvB,CAAC;6BACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC/C,SAAS,GAAG,IAAI,CAAC;wBACjB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,yEAAyE;QACzE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,WAAW,CAAC;YACjB,QAAQ,EAAE,GAAG,cAAc,SAAS;YACpC,SAAS,EAAE,GAAG,EAAE,CACd,SAAS,CACP,QAAQ,EACR,qCAAqC,EACrC,sCAAsC,cAAc,8BAA8B,CACnF;SACJ,CAAC,EACF,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACpB,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB;YAC5C,CAAC,CAAC,SAAS,CACP,QAAQ,EACR,qCAAqC,EACrC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAClC;YACH,CAAC,CAAC,CAAC,CACN,CACF,CAAC;QACF,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC5B,+DAA+D;YAC/D,4DAA4D;YAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,SAAS,CACP,QAAQ,EACR,qCAAqC,EACrC,eAAe,MAAM,CAAC,EAAE,0CAA0C,CACnE,CACF,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,SAAS,CACP,QAAQ,EACR,qCAAqC,EACrC,uCAAuC,CACxC,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -119,23 +119,27 @@ export interface RealClientRpcCaller {
|
|
|
119
119
|
/** Stream of outbound request IDs the real client has minted. */
|
|
120
120
|
readonly outboundIdFeed: Effect.Effect<ReadonlyArray<string>>;
|
|
121
121
|
}
|
|
122
|
+
declare const RealClientLifecycleError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
123
|
+
readonly _tag: "RealClientLifecycleError";
|
|
124
|
+
} & Readonly<A>;
|
|
122
125
|
/**
|
|
123
126
|
* Real-client lifecycle error tag. All three cover the Principle 3 error
|
|
124
127
|
* channel; no raw throws escape the factory's Scope.
|
|
125
128
|
*/
|
|
126
|
-
export declare class RealClientLifecycleError {
|
|
129
|
+
export declare class RealClientLifecycleError extends RealClientLifecycleError_base<{
|
|
127
130
|
readonly cause: unknown;
|
|
128
|
-
|
|
129
|
-
constructor(cause: unknown);
|
|
131
|
+
}> {
|
|
130
132
|
}
|
|
133
|
+
declare const RealClientRpcError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
134
|
+
readonly _tag: "RealClientRpcError";
|
|
135
|
+
} & Readonly<A>;
|
|
131
136
|
/** Typed error surface for real-client RPC calls (D5 predicate target). */
|
|
132
|
-
export declare class RealClientRpcError {
|
|
137
|
+
export declare class RealClientRpcError extends RealClientRpcError_base<{
|
|
138
|
+
readonly cause: unknown;
|
|
139
|
+
readonly documentedErrorTag: string | null;
|
|
133
140
|
readonly kind: "timeout" | "server-error" | "malformed-response" | "disconnected";
|
|
134
141
|
readonly method: string;
|
|
135
|
-
|
|
136
|
-
readonly cause: unknown;
|
|
137
|
-
readonly _tag = "RealClientRpcError";
|
|
138
|
-
constructor(kind: "timeout" | "server-error" | "malformed-response" | "disconnected", method: string, documentedErrorTag: string | null, cause: unknown);
|
|
142
|
+
}> {
|
|
139
143
|
}
|
|
140
144
|
/** Close-event shape surfaced by `RealClientHandle.closeSignal`. */
|
|
141
145
|
export interface RealClientCloseEvent {
|
|
@@ -255,4 +259,5 @@ export declare function freshTag(window: ClientHandshakeWindow): Effect.Effect<s
|
|
|
255
259
|
* indefinitely.
|
|
256
260
|
*/
|
|
257
261
|
export declare function awaitConnection(testServer: TestServer, timeoutMs?: number): Effect.Effect<TestServerConnection, TransportIoError>;
|
|
262
|
+
export {};
|
|
258
263
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/testing/conformance/client/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/testing/conformance/client/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,36 +16,27 @@
|
|
|
16
16
|
* export (see §4 O5 resolution in the design doc) that returns the same
|
|
17
17
|
* factory shape.
|
|
18
18
|
*/
|
|
19
|
-
import { Context, Effect, Ref } from "effect";
|
|
19
|
+
import { Config, ConfigProvider, Context, Data, Effect, Ref, } from "effect";
|
|
20
20
|
import { makeTestServer, } from "../../test-server.js";
|
|
21
21
|
import { makeToxiproxyClient, } from "../../toxics/client.js";
|
|
22
22
|
import { RealServerAcquireError, TransportIoError, } from "../../errors.js";
|
|
23
23
|
import { conformanceNumRunsFromEnv } from "../env.js";
|
|
24
24
|
import { PROTOCOL_VERSION } from "../../../version.js";
|
|
25
|
+
import { Connect } from "../../../schema/methods/auth.js";
|
|
26
|
+
const DEFAULT_ACCEPT_TIMEOUT_MS = 5_000;
|
|
27
|
+
const RANDOM_TAG_RADIX = 36;
|
|
28
|
+
const RANDOM_TAG_SLICE_END = 10;
|
|
29
|
+
const RANDOM_TAG_SLICE_START = 2;
|
|
30
|
+
const REPLAY_SEED_MASK = 0x7fffffff;
|
|
31
|
+
const loadFastCheckSeed = Config.integer("FC_SEED").pipe(Effect.withConfigProvider(ConfigProvider.fromEnv()), Effect.orElseSucceed(() => Date.now() & REPLAY_SEED_MASK));
|
|
25
32
|
/**
|
|
26
33
|
* Real-client lifecycle error tag. All three cover the Principle 3 error
|
|
27
34
|
* channel; no raw throws escape the factory's Scope.
|
|
28
35
|
*/
|
|
29
|
-
export class RealClientLifecycleError {
|
|
30
|
-
cause;
|
|
31
|
-
_tag = "RealClientLifecycleError";
|
|
32
|
-
constructor(cause) {
|
|
33
|
-
this.cause = cause;
|
|
34
|
-
}
|
|
36
|
+
export class RealClientLifecycleError extends Data.TaggedError("RealClientLifecycleError") {
|
|
35
37
|
}
|
|
36
38
|
/** Typed error surface for real-client RPC calls (D5 predicate target). */
|
|
37
|
-
export class RealClientRpcError {
|
|
38
|
-
kind;
|
|
39
|
-
method;
|
|
40
|
-
documentedErrorTag;
|
|
41
|
-
cause;
|
|
42
|
-
_tag = "RealClientRpcError";
|
|
43
|
-
constructor(kind, method, documentedErrorTag, cause) {
|
|
44
|
-
this.kind = kind;
|
|
45
|
-
this.method = method;
|
|
46
|
-
this.documentedErrorTag = documentedErrorTag;
|
|
47
|
-
this.cause = cause;
|
|
48
|
-
}
|
|
39
|
+
export class RealClientRpcError extends Data.TaggedError("RealClientRpcError") {
|
|
49
40
|
}
|
|
50
41
|
export const ClientHandshakeWindow = Context.GenericTag("@moltzap/protocol/testing/ClientHandshakeWindow");
|
|
51
42
|
/**
|
|
@@ -65,8 +56,7 @@ export function acquireClientRunContext(opts) {
|
|
|
65
56
|
...opts,
|
|
66
57
|
numRuns: opts.numRuns ?? conformanceNumRunsFromEnv(),
|
|
67
58
|
};
|
|
68
|
-
const seed = effectiveOpts.replaySeed ??
|
|
69
|
-
Number(process.env.FC_SEED ?? Date.now() & 0x7fffffff);
|
|
59
|
+
const seed = effectiveOpts.replaySeed ?? (yield* loadFastCheckSeed);
|
|
70
60
|
const artifacts = yield* Ref.make([]);
|
|
71
61
|
// Bind the TestServer under the ambient Scope. Server-close on teardown.
|
|
72
62
|
const testServer = yield* makeTestServer({
|
|
@@ -92,7 +82,9 @@ export function acquireClientRunContext(opts) {
|
|
|
92
82
|
// The context carries the initial no-op shape so type-system contracts
|
|
93
83
|
// hold; each property body still binds a per-handle window.
|
|
94
84
|
const handshakeWindow = {
|
|
95
|
-
freshEmissionTag: Effect.sync(() => `tag-${Math.random()
|
|
85
|
+
freshEmissionTag: Effect.sync(() => `tag-${Math.random()
|
|
86
|
+
.toString(RANDOM_TAG_RADIX)
|
|
87
|
+
.slice(RANDOM_TAG_SLICE_START, RANDOM_TAG_SLICE_END)}`),
|
|
96
88
|
emitTaggedEvent: ({ connection, base, emissionTag }) => emitTaggedEventDefault(connection, base, emissionTag),
|
|
97
89
|
emitTaggedResponse: ({ connection, base, emissionTag }) => emitTaggedResponseDefault(connection, base, emissionTag),
|
|
98
90
|
awaitHandshakeComplete: Effect.void,
|
|
@@ -130,6 +122,7 @@ function isStringKeyedRecord(value) {
|
|
|
130
122
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
131
123
|
}
|
|
132
124
|
function emitTaggedResponseDefault(connection, base, _emissionTag) {
|
|
125
|
+
void _emissionTag;
|
|
133
126
|
// Response frames don't carry a free-form `data` field; responses are
|
|
134
127
|
// correlated by `id` instead — the response's `id` IS its emission tag
|
|
135
128
|
// from the property's perspective (see B1 / B4 / D5 predicates).
|
|
@@ -173,7 +166,7 @@ export function runAutoHandshakeResponder(connection, agentId) {
|
|
|
173
166
|
if (entry.kind === "inbound" &&
|
|
174
167
|
entry.frame !== null &&
|
|
175
168
|
entry.frame.type === "request" &&
|
|
176
|
-
entry.frame.method ===
|
|
169
|
+
entry.frame.method === Connect.name) {
|
|
177
170
|
const helloOk = {
|
|
178
171
|
protocolVersion: PROTOCOL_VERSION,
|
|
179
172
|
agentId,
|
|
@@ -220,7 +213,7 @@ export function freshTag(window) {
|
|
|
220
213
|
* never-connecting real client doesn't block the property body
|
|
221
214
|
* indefinitely.
|
|
222
215
|
*/
|
|
223
|
-
export function awaitConnection(testServer, timeoutMs =
|
|
216
|
+
export function awaitConnection(testServer, timeoutMs = DEFAULT_ACCEPT_TIMEOUT_MS) {
|
|
224
217
|
return testServer.accept.pipe(Effect.timeoutFail({
|
|
225
218
|
duration: `${timeoutMs} millis`,
|
|
226
219
|
onTimeout: () => new TransportIoError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/testing/conformance/client/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/testing/conformance/client/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-conformance.d.ts","sourceRoot":"","sources":["../../../../src/testing/conformance/client/schema-conformance.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-conformance.d.ts","sourceRoot":"","sources":["../../../../src/testing/conformance/client/schema-conformance.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAe/D;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,2BAA2B,GAC/B,IAAI,CAiEN;AAED;;;;;;;;GAQG;AACH,wBAAgB,oCAAoC,CAClD,GAAG,EAAE,2BAA2B,GAC/B,IAAI,CA0DN"}
|
|
@@ -27,6 +27,8 @@ import * as fc from "fast-check";
|
|
|
27
27
|
import { registerProperty } from "../registry.js";
|
|
28
28
|
import { acquireFixture, collectTagged, invariant, subscribeAll, } from "./_fixtures.js";
|
|
29
29
|
const CATEGORY = "schema-conformance";
|
|
30
|
+
const PROPERTY_EVENT_WELL_FORMEDNESS_CLIENT = "event-well-formedness-client";
|
|
31
|
+
const PROPERTY_MALFORMED_FRAME_HANDLING_CLIENT = "malformed-frame-handling-client";
|
|
30
32
|
const PROPERTY_BUDGET_MS = 8_000;
|
|
31
33
|
/**
|
|
32
34
|
* A2 client-side — TestServer emits a property-sampled valid
|
|
@@ -41,15 +43,15 @@ const PROPERTY_BUDGET_MS = 8_000;
|
|
|
41
43
|
* fields when surfacing events fails.
|
|
42
44
|
*/
|
|
43
45
|
export function registerEventWellFormednessClient(ctx) {
|
|
44
|
-
registerProperty(ctx, CATEGORY,
|
|
45
|
-
const fx = yield* acquireFixture(ctx, CATEGORY,
|
|
46
|
+
registerProperty(ctx, CATEGORY, PROPERTY_EVENT_WELL_FORMEDNESS_CLIENT, "valid EventFrame emitted by TestServer surfaces schema-clean on real client", Effect.scoped(Effect.gen(function* () {
|
|
47
|
+
const fx = yield* acquireFixture(ctx, CATEGORY, PROPERTY_EVENT_WELL_FORMEDNESS_CLIENT);
|
|
46
48
|
yield* subscribeAll(fx.handle);
|
|
47
49
|
const sampled = fc.sample(arbitraryEventFrame(), {
|
|
48
50
|
numRuns: 1,
|
|
49
51
|
seed: ctx.seed,
|
|
50
52
|
})[0];
|
|
51
53
|
if (sampled === undefined) {
|
|
52
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
54
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_EVENT_WELL_FORMEDNESS_CLIENT, "failed to sample EventFrame"));
|
|
53
55
|
}
|
|
54
56
|
const tag = yield* fx.window.freshEmissionTag;
|
|
55
57
|
yield* fx.window.emitTaggedEvent({
|
|
@@ -62,7 +64,7 @@ export function registerEventWellFormednessClient(ctx) {
|
|
|
62
64
|
budgetMs: PROPERTY_BUDGET_MS,
|
|
63
65
|
});
|
|
64
66
|
if (observed.length === 0) {
|
|
65
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
67
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_EVENT_WELL_FORMEDNESS_CLIENT, `tagged event ${tag} not surfaced within ${PROPERTY_BUDGET_MS}ms`));
|
|
66
68
|
}
|
|
67
69
|
// Reconstruct the expected event shape and re-check schema.
|
|
68
70
|
const reconstructed = {
|
|
@@ -72,7 +74,7 @@ export function registerEventWellFormednessClient(ctx) {
|
|
|
72
74
|
data: observed[0].data,
|
|
73
75
|
};
|
|
74
76
|
if (!Value.Check(EventFrameSchema, reconstructed)) {
|
|
75
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
77
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_EVENT_WELL_FORMEDNESS_CLIENT, "real client surfaced event that fails EventFrameSchema"));
|
|
76
78
|
}
|
|
77
79
|
})));
|
|
78
80
|
}
|
|
@@ -86,15 +88,15 @@ export function registerEventWellFormednessClient(ctx) {
|
|
|
86
88
|
* Predicate: liveness — next tagged event surfaces within deadline.
|
|
87
89
|
*/
|
|
88
90
|
export function registerMalformedFrameHandlingClient(ctx) {
|
|
89
|
-
registerProperty(ctx, CATEGORY,
|
|
90
|
-
const fx = yield* acquireFixture(ctx, CATEGORY,
|
|
91
|
+
registerProperty(ctx, CATEGORY, PROPERTY_MALFORMED_FRAME_HANDLING_CLIENT, "malformed TestServer emission absorbed silently; liveness intact", Effect.scoped(Effect.gen(function* () {
|
|
92
|
+
const fx = yield* acquireFixture(ctx, CATEGORY, PROPERTY_MALFORMED_FRAME_HANDLING_CLIENT);
|
|
91
93
|
yield* subscribeAll(fx.handle);
|
|
92
94
|
const baseEvent = fc.sample(arbitraryEventFrame(), {
|
|
93
95
|
numRuns: 1,
|
|
94
96
|
seed: ctx.seed,
|
|
95
97
|
})[0];
|
|
96
98
|
if (baseEvent === undefined) {
|
|
97
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
99
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_MALFORMED_FRAME_HANDLING_CLIENT, "failed to sample base EventFrame"));
|
|
98
100
|
}
|
|
99
101
|
// Emit a malformed frame — the real client must absorb it.
|
|
100
102
|
yield* fx.connection
|
|
@@ -116,7 +118,7 @@ export function registerMalformedFrameHandlingClient(ctx) {
|
|
|
116
118
|
budgetMs: PROPERTY_BUDGET_MS,
|
|
117
119
|
});
|
|
118
120
|
if (observed.length === 0) {
|
|
119
|
-
return yield* Effect.fail(invariant(CATEGORY,
|
|
121
|
+
return yield* Effect.fail(invariant(CATEGORY, PROPERTY_MALFORMED_FRAME_HANDLING_CLIENT, "liveness failed: no tagged event after malformed emission"));
|
|
120
122
|
}
|
|
121
123
|
})));
|
|
122
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-conformance.js","sourceRoot":"","sources":["../../../../src/testing/conformance/client/schema-conformance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,aAAa,EACb,SAAS,EACT,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,MAAM,QAAQ,GAAG,oBAA6B,CAAC;AAC/C,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iCAAiC,CAC/C,GAAgC;IAEhC,gBAAgB,CACd,GAAG,EACH,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"schema-conformance.js","sourceRoot":"","sources":["../../../../src/testing/conformance/client/schema-conformance.ts"],"names":[],"mappings":"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"}
|