@clowder-ai/plugin-contract 0.1.0-beta.7 → 0.1.0-beta.8

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.
Files changed (37) hide show
  1. package/dist/conformance/fixtures.d.ts +9 -0
  2. package/dist/conformance/fixtures.d.ts.map +1 -0
  3. package/dist/conformance/fixtures.js +8 -0
  4. package/dist/conformance/fixtures.js.map +1 -0
  5. package/dist/conformance/index.d.ts +2 -0
  6. package/dist/conformance/index.d.ts.map +1 -1
  7. package/dist/conformance/index.js +1 -0
  8. package/dist/conformance/index.js.map +1 -1
  9. package/dist/wire/disposition-fixtures.d.ts +9 -2
  10. package/dist/wire/disposition-fixtures.d.ts.map +1 -1
  11. package/dist/wire/disposition-fixtures.js +450 -3
  12. package/dist/wire/disposition-fixtures.js.map +1 -1
  13. package/dist/wire/disposition.d.ts +10 -8
  14. package/dist/wire/disposition.d.ts.map +1 -1
  15. package/dist/wire/disposition.js +20 -8
  16. package/dist/wire/disposition.js.map +1 -1
  17. package/dist/wire/handshake-byte-bounds.d.ts +69 -0
  18. package/dist/wire/handshake-byte-bounds.d.ts.map +1 -0
  19. package/dist/wire/handshake-byte-bounds.js +173 -0
  20. package/dist/wire/handshake-byte-bounds.js.map +1 -0
  21. package/dist/wire/handshake.d.ts +53 -7
  22. package/dist/wire/handshake.d.ts.map +1 -1
  23. package/dist/wire/handshake.js +129 -10
  24. package/dist/wire/handshake.js.map +1 -1
  25. package/dist/wire/index.d.ts +8 -4
  26. package/dist/wire/index.d.ts.map +1 -1
  27. package/dist/wire/index.js +6 -2
  28. package/dist/wire/index.js.map +1 -1
  29. package/dist/wire/registry.d.ts +170 -6
  30. package/dist/wire/registry.d.ts.map +1 -1
  31. package/dist/wire/registry.js +13 -11
  32. package/dist/wire/registry.js.map +1 -1
  33. package/dist/wire/row-shapes.d.ts +11 -11
  34. package/dist/wire/row-shapes.d.ts.map +1 -1
  35. package/dist/wire/row-shapes.js +2 -2
  36. package/dist/wire/row-shapes.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Public, machine-readable wire-disposition safety vectors.
3
+ *
4
+ * These are contract data for conformance runners. They do not implement
5
+ * Host activation or a handshake codec.
6
+ */
7
+ export { DISPOSITION_FIXTURE_VECTORS, BETA8_HANDSHAKE_VECTOR_IDS, CLOSED_ERROR_ARM_NAMES, RESPONSE_CANDIDATE_CASES, NOTIFICATION_PARTITION_CASES, } from '../wire/disposition-fixtures.js';
8
+ export type { ClosedErrorArmName, RequestSnapshot, InFlightRecord, FixturePreState, DispositionFixtureVector, PartitionCase, } from '../wire/disposition-fixtures.js';
9
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/conformance/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,iCAAiC,CAAC;AAEzC,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,aAAa,GACd,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Public, machine-readable wire-disposition safety vectors.
3
+ *
4
+ * These are contract data for conformance runners. They do not implement
5
+ * Host activation or a handshake codec.
6
+ */
7
+ export { DISPOSITION_FIXTURE_VECTORS, BETA8_HANDSHAKE_VECTOR_IDS, CLOSED_ERROR_ARM_NAMES, RESPONSE_CANDIDATE_CASES, NOTIFICATION_PARTITION_CASES, } from '../wire/disposition-fixtures.js';
8
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/conformance/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,iCAAiC,CAAC"}
@@ -11,6 +11,8 @@ export { isValidDataClassStrategy } from '../types/data-class.js';
11
11
  export { getCapabilityLayer } from '../types/capability.js';
12
12
  export { executeBehaviorCase, type BehaviorAdapter, type BehaviorCaseReport, type BehaviorTarget, type BehaviorVerdict, } from './behavior-executor.js';
13
13
  export { MessagingLoopbackAdapter } from './messaging-loopback-adapter.js';
14
+ export { DISPOSITION_FIXTURE_VECTORS, BETA8_HANDSHAKE_VECTOR_IDS, CLOSED_ERROR_ARM_NAMES, RESPONSE_CANDIDATE_CASES, NOTIFICATION_PARTITION_CASES, } from './fixtures.js';
15
+ export type { ClosedErrorArmName, RequestSnapshot, InFlightRecord, FixturePreState, DispositionFixtureVector, PartitionCase, } from './fixtures.js';
14
16
  export { HarnessChild, HarnessChildExitedError, HarnessCleanupError, HarnessFrameBacklogError, HarnessTimeoutError, MAX_HARNESS_QUEUED_FRAMES, MAX_NDJSON_FRAME_BYTES, MAX_TIMER_MS, NdjsonFrameDecoder, NdjsonFrameError, encodeNdjsonFrame, runDualTransportOracle, runHarnessCase, spawnHarnessChild, type DecodedNdjsonFrame, type DualTransportOracleCase, type DualTransportOracleReport, type HarnessChildExit, type HarnessReceiveOptions, type HarnessWireShape, type JsonObject, type NdjsonFrameErrorCode, type OracleTransport, type RunHarnessCaseOptions, type SpawnHarnessChildOptions, type TransportTranscript, } from './stdio-harness/index.js';
15
17
  export { DATA_CLASS_ALLOWED_STRATEGIES, CAPABILITY_TABLE, L0_CAPABILITIES, L1_CAPABILITIES, L2_CAPABILITIES, } from '../generated/contract.generated.js';
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/conformance/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EACL,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/conformance/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EACL,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,oCAAoC,CAAC"}
@@ -11,6 +11,7 @@ export { isValidDataClassStrategy } from '../types/data-class.js';
11
11
  export { getCapabilityLayer } from '../types/capability.js';
12
12
  export { executeBehaviorCase, } from './behavior-executor.js';
13
13
  export { MessagingLoopbackAdapter } from './messaging-loopback-adapter.js';
14
+ export { DISPOSITION_FIXTURE_VECTORS, BETA8_HANDSHAKE_VECTOR_IDS, CLOSED_ERROR_ARM_NAMES, RESPONSE_CANDIDATE_CASES, NOTIFICATION_PARTITION_CASES, } from './fixtures.js';
14
15
  export { HarnessChild, HarnessChildExitedError, HarnessCleanupError, HarnessFrameBacklogError, HarnessTimeoutError, MAX_HARNESS_QUEUED_FRAMES, MAX_NDJSON_FRAME_BYTES, MAX_TIMER_MS, NdjsonFrameDecoder, NdjsonFrameError, encodeNdjsonFrame, runDualTransportOracle, runHarnessCase, spawnHarnessChild, } from './stdio-harness/index.js';
15
16
  export { DATA_CLASS_ALLOWED_STRATEGIES, CAPABILITY_TABLE, L0_CAPABILITIES, L1_CAPABILITIES, L2_CAPABILITIES, } from '../generated/contract.generated.js';
16
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conformance/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EACL,mBAAmB,GAKpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,GAalB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conformance/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EACL,mBAAmB,GAKpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAWvB,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,GAalB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,oCAAoC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Disposition conformance fixture vectors — machine-readable test data
3
- * for the pre-dispatch disposition table (T-A through T-L).
3
+ * for the pre-dispatch disposition table (T-A through T-M).
4
4
  *
5
5
  * Mechanized VERBATIM from §3.8-1 of the #1165 frozen plan (rev11,
6
6
  * SHA 7e26e5af). Each vector carries:
@@ -19,7 +19,7 @@
19
19
  * - 7 notification-partition sub-cases (NOTIFICATION_PARTITION_CASES)
20
20
  * "your correction #4's five, the idless-envelope fixture,
21
21
  * and the R8 row-10 value-failure fixture"
22
- * - All 12 T-classes have ≥1 vector
22
+ * - All 13 T-classes have ≥1 vector
23
23
  * - Pre-state mutual-exclusivity proof pairs:
24
24
  * ping nonce (T-H-3 / T-L-2), row-9 deliveryId (T-H-9 / T-L-4)
25
25
  *
@@ -30,6 +30,7 @@
30
30
  * Tests verify both existence AND class correctness per key.
31
31
  */
32
32
  import type { DispositionClass, DispositionOutcome } from './disposition.js';
33
+ import type { CandidateHello } from './handshake.js';
33
34
  import type { WireMethodName } from './registry.js';
34
35
  export declare const CLOSED_ERROR_ARM_NAMES: readonly ["ParseErrorEnvelope", "InvalidRequestNullIdEnvelope", "InvalidRequestValidIdEnvelope", "MethodNotFoundEnvelope", "InvalidParamsEnvelope", "InternalErrorEnvelope", "HandshakeRejectedEnvelope", "DeliveryRejectedEnvelope", "DomainErrorEnvelope", "DeadlineExpiredEnvelope", "SnapshotUnavailableEnvelope"];
35
36
  export type ClosedErrorArmName = (typeof CLOSED_ERROR_ARM_NAMES)[number];
@@ -42,6 +43,8 @@ export interface RequestSnapshot {
42
43
  readonly nonce?: string;
43
44
  /** Row 9 deliver: the deliveryId that must match byte-equal in the ack. */
44
45
  readonly deliveryId?: string;
46
+ /** Row 1 hello: the candidate claims that SessionBinding must echo byte-equal. */
47
+ readonly candidateHello?: CandidateHello;
45
48
  }
46
49
  /**
47
50
  * A single in-flight request record for pre-state correlation.
@@ -71,6 +74,8 @@ export interface DispositionFixtureVector {
71
74
  readonly expectedErrorArm: ClosedErrorArmName | null;
72
75
  readonly expectedErrorCode: number | null;
73
76
  readonly expectedResponseFrame: string | null;
77
+ /** This vector must not allocate state, enqueue work, or activate. */
78
+ readonly zeroSideEffects?: true;
74
79
  readonly description: string;
75
80
  }
76
81
  /**
@@ -96,4 +101,6 @@ export declare const RESPONSE_CANDIDATE_CASES: Readonly<Record<string, Partition
96
101
  */
97
102
  export declare const NOTIFICATION_PARTITION_CASES: Readonly<Record<string, PartitionCase>>;
98
103
  export declare const DISPOSITION_FIXTURE_VECTORS: readonly DispositionFixtureVector[];
104
+ /** Complete beta.8 handshake safety surface exported for downstream runners. */
105
+ export declare const BETA8_HANDSHAKE_VECTOR_IDS: readonly ["T-C-2", "T-M-1", "T-M-2", "T-M-3", "T-M-4", "T-M-5", "T-M-6", "T-M-7", "T-M-8", "T-G-2", "T-G-3", "T-G-4", "T-G-5", "T-G-6", "T-G-7", "T-G-8", "T-G-9", "T-G-10", "T-G-11", "T-G-12", "T-G-13", "T-G-14", "T-H-10", "T-H-11", "T-L-5", "T-L-6"];
99
106
  //# sourceMappingURL=disposition-fixtures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"disposition-fixtures.d.ts","sourceRoot":"","sources":["../../src/wire/disposition-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAmBpD,eAAO,MAAM,sBAAsB,wTAYzB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkDzE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;CAC5C;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,cAAc,EAAE,CAAC;CACtD;AAMD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAUD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAmB5E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAehF,CAAC;AAMF,eAAO,MAAM,2BAA2B,EAAE,SAAS,wBAAwB,EA2hB1E,CAAC"}
1
+ {"version":3,"file":"disposition-fixtures.d.ts","sourceRoot":"","sources":["../../src/wire/disposition-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAK7E,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAqBpD,eAAO,MAAM,sBAAsB,wTAYzB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkHzE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;CAC5C;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,cAAc,EAAE,CAAC;CACtD;AAMD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,sEAAsE;IACtE,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAUD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAmB5E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAehF,CAAC;AAMF,eAAO,MAAM,2BAA2B,EAAE,SAAS,wBAAwB,EAy5B1E,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,4PAO7B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Disposition conformance fixture vectors — machine-readable test data
3
- * for the pre-dispatch disposition table (T-A through T-L).
3
+ * for the pre-dispatch disposition table (T-A through T-M).
4
4
  *
5
5
  * Mechanized VERBATIM from §3.8-1 of the #1165 frozen plan (rev11,
6
6
  * SHA 7e26e5af). Each vector carries:
@@ -19,7 +19,7 @@
19
19
  * - 7 notification-partition sub-cases (NOTIFICATION_PARTITION_CASES)
20
20
  * "your correction #4's five, the idless-envelope fixture,
21
21
  * and the R8 row-10 value-failure fixture"
22
- * - All 12 T-classes have ≥1 vector
22
+ * - All 13 T-classes have ≥1 vector
23
23
  * - Pre-state mutual-exclusivity proof pairs:
24
24
  * ping nonce (T-H-3 / T-L-2), row-9 deliveryId (T-H-9 / T-L-4)
25
25
  *
@@ -29,7 +29,8 @@
29
29
  * Partition records carry {vectorId, expectedClass} per case (FC-70-4).
30
30
  * Tests verify both existence AND class correctness per key.
31
31
  */
32
- import { PARSE_ERROR_CODE, PARSE_ERROR_MESSAGE, INVALID_REQUEST_CODE, INVALID_REQUEST_MESSAGE, METHOD_NOT_FOUND_CODE, METHOD_NOT_FOUND_MESSAGE, INVALID_PARAMS_CODE, INVALID_PARAMS_MESSAGE, } from './errors.js';
32
+ import { BINDING_NONCE_MAX_LENGTH, PLUGIN_ID_MAX_LENGTH, } from './handshake.js';
33
+ import { PARSE_ERROR_CODE, PARSE_ERROR_MESSAGE, INVALID_REQUEST_CODE, INVALID_REQUEST_MESSAGE, METHOD_NOT_FOUND_CODE, METHOD_NOT_FOUND_MESSAGE, INVALID_PARAMS_CODE, INVALID_PARAMS_MESSAGE, HANDSHAKE_REJECTED_CODE, HANDSHAKE_REJECTED_MESSAGE, } from './errors.js';
33
34
  // ---------------------------------------------------------------------------
34
35
  // Closed error arm names — the 11 concrete envelope types from envelope.ts
35
36
  // ---------------------------------------------------------------------------
@@ -74,6 +75,62 @@ const RESPONSE_INVALID_PARAMS_A = {
74
75
  id: 'a',
75
76
  error: { code: INVALID_PARAMS_CODE, message: INVALID_PARAMS_MESSAGE },
76
77
  };
78
+ const RESPONSE_HANDSHAKE_REJECTED_AUTHORITY_A = {
79
+ jsonrpc: '2.0',
80
+ id: 'a',
81
+ error: {
82
+ code: HANDSHAKE_REJECTED_CODE,
83
+ message: HANDSHAKE_REJECTED_MESSAGE,
84
+ data: { reason: 'AUTHORITY_VIOLATION' },
85
+ },
86
+ };
87
+ const BETA8_HELLO = {
88
+ pluginId: 'example.loopback',
89
+ packageDigest: `sha512-${'A'.repeat(86)}==`,
90
+ contractVersion: '0.1.0-beta.8',
91
+ wireVersion: '0.1.0',
92
+ };
93
+ const RAW_UTF8_BOUNDARY_CODE_POINTS = {
94
+ ascii: 'a',
95
+ multibyte: '😀',
96
+ escaping: '\u0000',
97
+ };
98
+ const BETA8_BINDING = {
99
+ ...BETA8_HELLO,
100
+ pluginInstanceId: 'instance-1',
101
+ brokerSessionId: 'session-1',
102
+ grantRevision: 0,
103
+ effectiveGrants: [],
104
+ bindingNonce: 'nonce-1',
105
+ };
106
+ const RESPONSE_HANDSHAKE_REJECTED_HELLO = {
107
+ jsonrpc: '2.0',
108
+ id: 'hello-error',
109
+ error: {
110
+ code: HANDSHAKE_REJECTED_CODE,
111
+ message: HANDSHAKE_REJECTED_MESSAGE,
112
+ data: { reason: 'PACKAGE_MISMATCH' },
113
+ },
114
+ };
115
+ function helloRequestFrame(id, input) {
116
+ return JSON.stringify({
117
+ jsonrpc: '2.0',
118
+ id,
119
+ method: 'broker.hello',
120
+ params: { meta: { deadlineUnixMs: 1 }, input },
121
+ });
122
+ }
123
+ function readyRequestFrame(id, input) {
124
+ return JSON.stringify({
125
+ jsonrpc: '2.0',
126
+ id,
127
+ method: 'broker.ready',
128
+ params: { meta: { deadlineUnixMs: 1 }, input },
129
+ });
130
+ }
131
+ function helloResultFrame(id, result) {
132
+ return JSON.stringify({ jsonrpc: '2.0', id, result });
133
+ }
77
134
  /**
78
135
  * 9 response-candidate sub-cases per §3.8-1:
79
136
  * "your R9 correction #5's five required cases plus four controls"
@@ -166,6 +223,22 @@ export const DISPOSITION_FIXTURE_VECTORS = [
166
223
  expectedResponseFrame: null,
167
224
  description: 'frame-canonicality failure: whitespace in compact JSON',
168
225
  },
226
+ {
227
+ id: 'T-C-2',
228
+ rawFrame: helloResultFrame('hello-h7-negative', {
229
+ ...BETA8_BINDING,
230
+ grantRevision: -1,
231
+ }),
232
+ rawFrameEncoding: 'utf8',
233
+ preState: { inFlightRequests: [{ id: 'hello-h7-negative', method: 'broker.hello', requestSnapshot: { candidateHello: BETA8_HELLO } }] },
234
+ expectedClass: 'T-C',
235
+ expectedOutcome: 'close',
236
+ expectedErrorArm: null,
237
+ expectedErrorCode: null,
238
+ expectedResponseFrame: null,
239
+ zeroSideEffects: true,
240
+ description: '[beta.8 H7 raw token] negative SessionBinding grantRevision is rejected at canonicality before correlation',
241
+ },
169
242
  // ═════════════════════════════════════════════════════════════════════════
170
243
  // T-D: canonical idless NON-response-candidate, NOT a valid Request
171
244
  // object (missing/non-string jsonrpc/method)
@@ -619,5 +692,379 @@ export const DISPOSITION_FIXTURE_VECTORS = [
619
692
  expectedResponseFrame: null,
620
693
  description: '[R47 pair] row-9 ack with correct deliveryId: byte-equality passes → T-L (see T-H-9)',
621
694
  },
695
+ // ── T-M: legal Request on a ready row ─────────────────────────────────
696
+ {
697
+ id: 'T-M-1',
698
+ rawFrame: '{"jsonrpc":"2.0","id":"hello-1","method":"broker.hello","params":{"meta":{"deadlineUnixMs":1},"input":{"pluginId":"example.loopback","packageDigest":"sha512-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==","contractVersion":"0.1.0-beta.8","wireVersion":"0.1.0"}}}',
699
+ rawFrameEncoding: 'utf8',
700
+ preState: { inFlightRequests: [] },
701
+ expectedClass: 'T-M',
702
+ expectedOutcome: 'accept',
703
+ expectedErrorArm: null,
704
+ expectedErrorCode: null,
705
+ expectedResponseFrame: null,
706
+ zeroSideEffects: true,
707
+ description: 'legal broker.hello Request after beta.8 closes and readies row 1',
708
+ },
709
+ {
710
+ id: 'T-M-2',
711
+ rawFrame: '{"jsonrpc":"2.0","id":"ready-1","method":"broker.ready","params":{"meta":{"deadlineUnixMs":1},"input":{"bindingNonce":"nonce-1"}}}',
712
+ rawFrameEncoding: 'utf8',
713
+ preState: { inFlightRequests: [] },
714
+ expectedClass: 'T-M',
715
+ expectedOutcome: 'accept',
716
+ expectedErrorArm: null,
717
+ expectedErrorCode: null,
718
+ expectedResponseFrame: null,
719
+ zeroSideEffects: true,
720
+ description: 'legal broker.ready activation request reaches dispatch but does not activate during classification',
721
+ },
722
+ {
723
+ id: 'T-G-2',
724
+ rawFrame: '{"jsonrpc":"2.0","id":"a","method":"broker.hello","params":{"meta":{"deadlineUnixMs":1},"input":{"pluginId":"example.loopback","packageDigest":"sha512-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==","contractVersion":"0.1.0-beta.8","wireVersion":"0.1.0","pluginInstanceId":"caller-injected"}}}',
725
+ rawFrameEncoding: 'utf8',
726
+ preState: { inFlightRequests: [] },
727
+ expectedClass: 'T-G',
728
+ expectedOutcome: 'respond',
729
+ expectedErrorArm: 'HandshakeRejectedEnvelope',
730
+ expectedErrorCode: HANDSHAKE_REJECTED_CODE,
731
+ expectedResponseFrame: JSON.stringify(RESPONSE_HANDSHAKE_REJECTED_AUTHORITY_A),
732
+ zeroSideEffects: true,
733
+ description: 'broker.hello authority injection is rejected before dispatch with zero side effects',
734
+ },
735
+ {
736
+ id: 'T-M-3',
737
+ rawFrame: helloRequestFrame('a', {
738
+ ...BETA8_HELLO,
739
+ pluginId: RAW_UTF8_BOUNDARY_CODE_POINTS.ascii.repeat(PLUGIN_ID_MAX_LENGTH),
740
+ }),
741
+ rawFrameEncoding: 'utf8',
742
+ preState: { inFlightRequests: [] },
743
+ expectedClass: 'T-M',
744
+ expectedOutcome: 'accept',
745
+ expectedErrorArm: null,
746
+ expectedErrorCode: null,
747
+ expectedResponseFrame: null,
748
+ zeroSideEffects: true,
749
+ description: '[beta.8 H1 raw-byte N] maximum pluginId request is legal before dispatch',
750
+ },
751
+ {
752
+ id: 'T-G-3',
753
+ rawFrame: helloRequestFrame('a', { ...BETA8_HELLO, pluginId: '' }),
754
+ rawFrameEncoding: 'utf8',
755
+ preState: { inFlightRequests: [] },
756
+ expectedClass: 'T-G',
757
+ expectedOutcome: 'respond',
758
+ expectedErrorArm: 'InvalidParamsEnvelope',
759
+ expectedErrorCode: INVALID_PARAMS_CODE,
760
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
761
+ zeroSideEffects: true,
762
+ description: '[beta.8 H1] empty pluginId is rejected before dispatch',
763
+ },
764
+ {
765
+ id: 'T-G-4',
766
+ rawFrame: helloRequestFrame('a', { ...BETA8_HELLO, packageDigest: 'sha512-invalid==' }),
767
+ rawFrameEncoding: 'utf8',
768
+ preState: { inFlightRequests: [] },
769
+ expectedClass: 'T-G',
770
+ expectedOutcome: 'respond',
771
+ expectedErrorArm: 'InvalidParamsEnvelope',
772
+ expectedErrorCode: INVALID_PARAMS_CODE,
773
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
774
+ zeroSideEffects: true,
775
+ description: '[beta.8 H2] malformed package digest is rejected before dispatch',
776
+ },
777
+ {
778
+ id: 'T-G-5',
779
+ rawFrame: helloRequestFrame('a', { ...BETA8_HELLO, contractVersion: 'beta.8' }),
780
+ rawFrameEncoding: 'utf8',
781
+ preState: { inFlightRequests: [] },
782
+ expectedClass: 'T-G',
783
+ expectedOutcome: 'respond',
784
+ expectedErrorArm: 'InvalidParamsEnvelope',
785
+ expectedErrorCode: INVALID_PARAMS_CODE,
786
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
787
+ zeroSideEffects: true,
788
+ description: '[beta.8 H3] non-SemVer contractVersion is rejected before dispatch',
789
+ },
790
+ {
791
+ id: 'T-G-6',
792
+ rawFrame: helloRequestFrame('a', { ...BETA8_HELLO, wireVersion: 'wire-v1' }),
793
+ rawFrameEncoding: 'utf8',
794
+ preState: { inFlightRequests: [] },
795
+ expectedClass: 'T-G',
796
+ expectedOutcome: 'respond',
797
+ expectedErrorArm: 'InvalidParamsEnvelope',
798
+ expectedErrorCode: INVALID_PARAMS_CODE,
799
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
800
+ zeroSideEffects: true,
801
+ description: '[beta.8 H4] non-SemVer wireVersion is rejected before dispatch',
802
+ },
803
+ {
804
+ id: 'T-G-7',
805
+ rawFrame: helloRequestFrame('a', {
806
+ ...BETA8_HELLO,
807
+ pluginId: RAW_UTF8_BOUNDARY_CODE_POINTS.ascii.repeat(PLUGIN_ID_MAX_LENGTH + 1),
808
+ }),
809
+ rawFrameEncoding: 'utf8',
810
+ preState: { inFlightRequests: [] },
811
+ expectedClass: 'T-G',
812
+ expectedOutcome: 'respond',
813
+ expectedErrorArm: 'InvalidParamsEnvelope',
814
+ expectedErrorCode: INVALID_PARAMS_CODE,
815
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
816
+ zeroSideEffects: true,
817
+ description: '[beta.8 H1 raw-byte N+1] oversize pluginId is rejected before dispatch',
818
+ },
819
+ {
820
+ id: 'T-M-4',
821
+ rawFrame: helloRequestFrame('a', {
822
+ ...BETA8_HELLO,
823
+ pluginId: RAW_UTF8_BOUNDARY_CODE_POINTS.multibyte.repeat(PLUGIN_ID_MAX_LENGTH),
824
+ }),
825
+ rawFrameEncoding: 'utf8',
826
+ preState: { inFlightRequests: [] },
827
+ expectedClass: 'T-M',
828
+ expectedOutcome: 'accept',
829
+ expectedErrorArm: null,
830
+ expectedErrorCode: null,
831
+ expectedResponseFrame: null,
832
+ zeroSideEffects: true,
833
+ description: '[beta.8 H1 multibyte N] maximum pluginId request is legal before dispatch',
834
+ },
835
+ {
836
+ id: 'T-G-11',
837
+ rawFrame: helloRequestFrame('a', {
838
+ ...BETA8_HELLO,
839
+ pluginId: RAW_UTF8_BOUNDARY_CODE_POINTS.multibyte.repeat(PLUGIN_ID_MAX_LENGTH + 1),
840
+ }),
841
+ rawFrameEncoding: 'utf8',
842
+ preState: { inFlightRequests: [] },
843
+ expectedClass: 'T-G',
844
+ expectedOutcome: 'respond',
845
+ expectedErrorArm: 'InvalidParamsEnvelope',
846
+ expectedErrorCode: INVALID_PARAMS_CODE,
847
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
848
+ zeroSideEffects: true,
849
+ description: '[beta.8 H1 multibyte N+1] oversize pluginId is rejected before dispatch',
850
+ },
851
+ {
852
+ id: 'T-M-5',
853
+ rawFrame: helloRequestFrame('a', {
854
+ ...BETA8_HELLO,
855
+ pluginId: RAW_UTF8_BOUNDARY_CODE_POINTS.escaping.repeat(PLUGIN_ID_MAX_LENGTH),
856
+ }),
857
+ rawFrameEncoding: 'utf8',
858
+ preState: { inFlightRequests: [] },
859
+ expectedClass: 'T-M',
860
+ expectedOutcome: 'accept',
861
+ expectedErrorArm: null,
862
+ expectedErrorCode: null,
863
+ expectedResponseFrame: null,
864
+ zeroSideEffects: true,
865
+ description: '[beta.8 H1 JSON-escaping N] maximum pluginId request is legal before dispatch',
866
+ },
867
+ {
868
+ id: 'T-G-12',
869
+ rawFrame: helloRequestFrame('a', {
870
+ ...BETA8_HELLO,
871
+ pluginId: RAW_UTF8_BOUNDARY_CODE_POINTS.escaping.repeat(PLUGIN_ID_MAX_LENGTH + 1),
872
+ }),
873
+ rawFrameEncoding: 'utf8',
874
+ preState: { inFlightRequests: [] },
875
+ expectedClass: 'T-G',
876
+ expectedOutcome: 'respond',
877
+ expectedErrorArm: 'InvalidParamsEnvelope',
878
+ expectedErrorCode: INVALID_PARAMS_CODE,
879
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
880
+ zeroSideEffects: true,
881
+ description: '[beta.8 H1 JSON-escaping N+1] oversize pluginId is rejected before dispatch',
882
+ },
883
+ {
884
+ id: 'T-G-8',
885
+ rawFrame: readyRequestFrame('a', { bindingNonce: 1 }),
886
+ rawFrameEncoding: 'utf8',
887
+ preState: { inFlightRequests: [] },
888
+ expectedClass: 'T-G',
889
+ expectedOutcome: 'respond',
890
+ expectedErrorArm: 'InvalidParamsEnvelope',
891
+ expectedErrorCode: INVALID_PARAMS_CODE,
892
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
893
+ zeroSideEffects: true,
894
+ description: '[beta.8 H9] broker.ready wrong-type bindingNonce is rejected before activation',
895
+ },
896
+ {
897
+ id: 'T-G-9',
898
+ rawFrame: readyRequestFrame('a', {
899
+ bindingNonce: RAW_UTF8_BOUNDARY_CODE_POINTS.ascii.repeat(BINDING_NONCE_MAX_LENGTH + 1),
900
+ }),
901
+ rawFrameEncoding: 'utf8',
902
+ preState: { inFlightRequests: [] },
903
+ expectedClass: 'T-G',
904
+ expectedOutcome: 'respond',
905
+ expectedErrorArm: 'InvalidParamsEnvelope',
906
+ expectedErrorCode: INVALID_PARAMS_CODE,
907
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
908
+ zeroSideEffects: true,
909
+ description: '[beta.8 H9 code-point N+1] oversize broker.ready bindingNonce is rejected before activation',
910
+ },
911
+ {
912
+ id: 'T-M-6',
913
+ rawFrame: readyRequestFrame('a', {
914
+ bindingNonce: RAW_UTF8_BOUNDARY_CODE_POINTS.ascii.repeat(BINDING_NONCE_MAX_LENGTH),
915
+ }),
916
+ rawFrameEncoding: 'utf8',
917
+ preState: { inFlightRequests: [] },
918
+ expectedClass: 'T-M',
919
+ expectedOutcome: 'accept',
920
+ expectedErrorArm: null,
921
+ expectedErrorCode: null,
922
+ expectedResponseFrame: null,
923
+ zeroSideEffects: true,
924
+ description: '[beta.8 H9 ASCII N] maximum broker.ready bindingNonce is legal before activation',
925
+ },
926
+ {
927
+ id: 'T-M-7',
928
+ rawFrame: readyRequestFrame('a', {
929
+ bindingNonce: RAW_UTF8_BOUNDARY_CODE_POINTS.multibyte.repeat(BINDING_NONCE_MAX_LENGTH),
930
+ }),
931
+ rawFrameEncoding: 'utf8',
932
+ preState: { inFlightRequests: [] },
933
+ expectedClass: 'T-M',
934
+ expectedOutcome: 'accept',
935
+ expectedErrorArm: null,
936
+ expectedErrorCode: null,
937
+ expectedResponseFrame: null,
938
+ zeroSideEffects: true,
939
+ description: '[beta.8 H9 multibyte N] maximum broker.ready bindingNonce is legal before activation',
940
+ },
941
+ {
942
+ id: 'T-G-13',
943
+ rawFrame: readyRequestFrame('a', {
944
+ bindingNonce: RAW_UTF8_BOUNDARY_CODE_POINTS.multibyte.repeat(BINDING_NONCE_MAX_LENGTH + 1),
945
+ }),
946
+ rawFrameEncoding: 'utf8',
947
+ preState: { inFlightRequests: [] },
948
+ expectedClass: 'T-G',
949
+ expectedOutcome: 'respond',
950
+ expectedErrorArm: 'InvalidParamsEnvelope',
951
+ expectedErrorCode: INVALID_PARAMS_CODE,
952
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
953
+ zeroSideEffects: true,
954
+ description: '[beta.8 H9 multibyte N+1] oversize broker.ready bindingNonce is rejected before activation',
955
+ },
956
+ {
957
+ id: 'T-M-8',
958
+ rawFrame: readyRequestFrame('a', {
959
+ bindingNonce: RAW_UTF8_BOUNDARY_CODE_POINTS.escaping.repeat(BINDING_NONCE_MAX_LENGTH),
960
+ }),
961
+ rawFrameEncoding: 'utf8',
962
+ preState: { inFlightRequests: [] },
963
+ expectedClass: 'T-M',
964
+ expectedOutcome: 'accept',
965
+ expectedErrorArm: null,
966
+ expectedErrorCode: null,
967
+ expectedResponseFrame: null,
968
+ zeroSideEffects: true,
969
+ description: '[beta.8 H9 JSON-escaping N] maximum broker.ready bindingNonce is legal before activation',
970
+ },
971
+ {
972
+ id: 'T-G-14',
973
+ rawFrame: readyRequestFrame('a', {
974
+ bindingNonce: RAW_UTF8_BOUNDARY_CODE_POINTS.escaping.repeat(BINDING_NONCE_MAX_LENGTH + 1),
975
+ }),
976
+ rawFrameEncoding: 'utf8',
977
+ preState: { inFlightRequests: [] },
978
+ expectedClass: 'T-G',
979
+ expectedOutcome: 'respond',
980
+ expectedErrorArm: 'InvalidParamsEnvelope',
981
+ expectedErrorCode: INVALID_PARAMS_CODE,
982
+ expectedResponseFrame: JSON.stringify(RESPONSE_INVALID_PARAMS_A),
983
+ zeroSideEffects: true,
984
+ description: '[beta.8 H9 JSON-escaping N+1] oversize broker.ready bindingNonce is rejected before activation',
985
+ },
986
+ {
987
+ id: 'T-G-10',
988
+ rawFrame: readyRequestFrame('a', {
989
+ bindingNonce: 'nonce-1',
990
+ pluginInstanceId: 'caller-injected',
991
+ }),
992
+ rawFrameEncoding: 'utf8',
993
+ preState: { inFlightRequests: [] },
994
+ expectedClass: 'T-G',
995
+ expectedOutcome: 'respond',
996
+ expectedErrorArm: 'HandshakeRejectedEnvelope',
997
+ expectedErrorCode: HANDSHAKE_REJECTED_CODE,
998
+ expectedResponseFrame: JSON.stringify(RESPONSE_HANDSHAKE_REJECTED_AUTHORITY_A),
999
+ zeroSideEffects: true,
1000
+ description: '[beta.8 authority] broker.ready Host instance injection is rejected before activation',
1001
+ },
1002
+ {
1003
+ id: 'T-H-10',
1004
+ rawFrame: helloResultFrame('hello-h5-n-plus-1', {
1005
+ ...BETA8_BINDING,
1006
+ pluginInstanceId: 'a'.repeat(513),
1007
+ }),
1008
+ rawFrameEncoding: 'utf8',
1009
+ preState: { inFlightRequests: [{ id: 'hello-h5-n-plus-1', method: 'broker.hello', requestSnapshot: { candidateHello: BETA8_HELLO } }] },
1010
+ expectedClass: 'T-H',
1011
+ expectedOutcome: 'close',
1012
+ expectedErrorArm: null,
1013
+ expectedErrorCode: null,
1014
+ expectedResponseFrame: null,
1015
+ zeroSideEffects: true,
1016
+ description: '[beta.8 H5 raw-byte N+1] oversize Host instance id is rejected with a correlated hello snapshot',
1017
+ },
1018
+ {
1019
+ id: 'T-H-11',
1020
+ rawFrame: helloResultFrame('hello-h6-n-plus-1', {
1021
+ ...BETA8_BINDING,
1022
+ brokerSessionId: 'a'.repeat(513),
1023
+ }),
1024
+ rawFrameEncoding: 'utf8',
1025
+ preState: { inFlightRequests: [{ id: 'hello-h6-n-plus-1', method: 'broker.hello', requestSnapshot: { candidateHello: BETA8_HELLO } }] },
1026
+ expectedClass: 'T-H',
1027
+ expectedOutcome: 'close',
1028
+ expectedErrorArm: null,
1029
+ expectedErrorCode: null,
1030
+ expectedResponseFrame: null,
1031
+ zeroSideEffects: true,
1032
+ description: '[beta.8 H6 raw-byte N+1] oversize Host session id is rejected with a correlated hello snapshot',
1033
+ },
1034
+ {
1035
+ id: 'T-L-5',
1036
+ rawFrame: helloResultFrame('hello-binding', BETA8_BINDING),
1037
+ rawFrameEncoding: 'utf8',
1038
+ preState: { inFlightRequests: [{ id: 'hello-binding', method: 'broker.hello', requestSnapshot: { candidateHello: BETA8_HELLO } }] },
1039
+ expectedClass: 'T-L',
1040
+ expectedOutcome: 'accept',
1041
+ expectedErrorArm: null,
1042
+ expectedErrorCode: null,
1043
+ expectedResponseFrame: null,
1044
+ zeroSideEffects: true,
1045
+ description: '[beta.8 result] SessionBinding settles only with the correlated CandidateHello echo',
1046
+ },
1047
+ {
1048
+ id: 'T-L-6',
1049
+ rawFrame: JSON.stringify(RESPONSE_HANDSHAKE_REJECTED_HELLO),
1050
+ rawFrameEncoding: 'utf8',
1051
+ preState: { inFlightRequests: [{ id: 'hello-error', method: 'broker.hello', requestSnapshot: { candidateHello: BETA8_HELLO } }] },
1052
+ expectedClass: 'T-L',
1053
+ expectedOutcome: 'accept',
1054
+ expectedErrorArm: null,
1055
+ expectedErrorCode: null,
1056
+ expectedResponseFrame: null,
1057
+ zeroSideEffects: true,
1058
+ description: '[beta.8 error] closed HANDSHAKE_REJECTED error settles the correlated hello',
1059
+ },
1060
+ ];
1061
+ /** Complete beta.8 handshake safety surface exported for downstream runners. */
1062
+ export const BETA8_HANDSHAKE_VECTOR_IDS = [
1063
+ 'T-C-2',
1064
+ 'T-M-1', 'T-M-2', 'T-M-3', 'T-M-4', 'T-M-5', 'T-M-6', 'T-M-7', 'T-M-8',
1065
+ 'T-G-2', 'T-G-3', 'T-G-4', 'T-G-5', 'T-G-6', 'T-G-7', 'T-G-8', 'T-G-9', 'T-G-10',
1066
+ 'T-G-11', 'T-G-12', 'T-G-13', 'T-G-14',
1067
+ 'T-H-10', 'T-H-11',
1068
+ 'T-L-5', 'T-L-6',
622
1069
  ];
623
1070
  //# sourceMappingURL=disposition-fixtures.js.map