@mark1russell7/harness 0.14.0 → 0.14.2

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/README.md CHANGED
@@ -27,6 +27,7 @@ A **cell** (`cell.ts`) is all that one measurement needs, as data:
27
27
  - Each hop of the topology, on the network of each of its sides.
28
28
  - An injector sidecar in the namespace of the target, with NET_ADMIN. Thus the image of the target stays stock.
29
29
  - The manifest of each environment gives the HZ of its kernel, from /proc/config.gz. A host without that file (a hosted runner) gets HZ from two readings of /proc/timer_list, one second apart: its jiffies against the time of the kernel (`hzOf`). `hzFrom` tells which.
30
+ - The manifest of each environment holds a `substrate` block (`substrate.ts`). It gives the layer, the cloud, the vendor, the kernel, HZ, KVM and the image of the runner. GitHub can schedule one image on Azure or on AWS. Thus the cloud comes from the DMI vendor, not from the name of the kernel. No statistic pools two substrates (`comparable`). A record from before the block reads through `substrateOf`, and nothing rewrites it.
30
31
  - The prober ([`@mark1russell7/prober`](https://www.npmjs.com/package/@mark1russell7/prober)): a privileged container that loads the kernel program. It watches the namespace of the client, of the target and of each hop. Each run keeps its records from its start to its end. A run whose records the prober lost is void.
31
32
 
32
33
  Each command is an argv array.
@@ -429,6 +429,9 @@ interface StageBand {
429
429
  * - `errors` are the errors that the client must meet on the way, each with the band of its
430
430
  * first occurrence. An example is the error of the offline queue when it gives up.
431
431
  * - `quiet` are the stages that must not occur after the fault. Each one that a run shows is a finding.
432
+ * - `lost` is the band of the count of accepted writes that the group did not keep, in each run. A
433
+ * count outside it is a finding. A measurement-only cell with this band gets its decision from
434
+ * the findings of its runs, thus the law of the count judges the cell.
432
435
  */
433
436
  interface GroupPrediction {
434
437
  readonly lands: "new" | "same";
@@ -441,6 +444,10 @@ interface GroupPrediction {
441
444
  readonly high: Quantity;
442
445
  }>;
443
446
  readonly quiet?: readonly Stage[];
447
+ readonly lost?: {
448
+ readonly low: number;
449
+ readonly high: number;
450
+ };
444
451
  }
445
452
  /**
446
453
  * A middlebox expectation tells what the router of a topology does with the flow in the window of
@@ -1163,4 +1170,4 @@ interface RunTopology {
1163
1170
  }
1164
1171
  //#endregion
1165
1172
  export { StageBand as $, PinnedImage as A, Replies as B, Jitter as C, MiddleboxExpectation as D, MiddleboxEvent as E, Reconnects as F, RunGroup as G, RouterHop as H, Recovers as I, SentinelEvent as J, RunPart as K, Reference as L, ProbeEvent as M, ProxyHop as N, MiddleboxForm as O, ProxyTime as P, Stage as Q, ReplicaSet as R, ImageSource as S, LineMatch as T, RttRange as U, RequestPrediction as V, Run as W, Shipped as X, SentinelStage as Y, ShippedImage as Z, HopEvent as _, Cluster as a, isHopPlace as at, HopWrite as b, DriverBand as c, FaultPlace as d, Subject as et, Group as f, Hop as g, GroupRole as h, ClientImage as i, WsProbe as it, Prediction as j, Observer as k, DriverStep as l, GroupPrediction as m, Cell as n, Topology as nt, ClusterClientAt as o, latestEndOf as ot, GroupPlace as p, RunTopology as q, Client as r, Toxic as rt, ClusterStage as s, BuildImage as t, Target as tt, Fault as u, HopPlace as v, KernelRecord as w, HttpProbe as x, HopSignal as y, ReplicaSetStage as z };
1166
- //# sourceMappingURL=cell-D2QNOxE8.d.ts.map
1173
+ //# sourceMappingURL=cell-BccWKiXh.d.ts.map
package/build/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as StageBand, A as PinnedImage, B as Replies, C as Jitter, D as MiddleboxExpectation, E as MiddleboxEvent, F as Reconnects, G as RunGroup, H as RouterHop, I as Recovers, J as SentinelEvent, K as RunPart, L as Reference, M as ProbeEvent, N as ProxyHop, O as MiddleboxForm, P as ProxyTime, Q as Stage, R as ReplicaSet, S as ImageSource, T as LineMatch, U as RttRange, V as RequestPrediction, W as Run, X as Shipped, Y as SentinelStage, Z as ShippedImage, _ as HopEvent, a as Cluster, at as isHopPlace, b as HopWrite, c as DriverBand, d as FaultPlace, et as Subject, f as Group, g as Hop, h as GroupRole, i as ClientImage, it as WsProbe, j as Prediction, k as Observer, l as DriverStep, m as GroupPrediction, n as Cell, nt as Topology, o as ClusterClientAt, ot as latestEndOf, p as GroupPlace, q as RunTopology, r as Client, rt as Toxic, s as ClusterStage, t as BuildImage, tt as Target, u as Fault, v as HopPlace, w as KernelRecord, x as HttpProbe, y as HopSignal, z as ReplicaSetStage } from "./cell-D2QNOxE8.js";
1
+ import { $ as StageBand, A as PinnedImage, B as Replies, C as Jitter, D as MiddleboxExpectation, E as MiddleboxEvent, F as Reconnects, G as RunGroup, H as RouterHop, I as Recovers, J as SentinelEvent, K as RunPart, L as Reference, M as ProbeEvent, N as ProxyHop, O as MiddleboxForm, P as ProxyTime, Q as Stage, R as ReplicaSet, S as ImageSource, T as LineMatch, U as RttRange, V as RequestPrediction, W as Run, X as Shipped, Y as SentinelStage, Z as ShippedImage, _ as HopEvent, a as Cluster, at as isHopPlace, b as HopWrite, c as DriverBand, d as FaultPlace, et as Subject, f as Group, g as Hop, h as GroupRole, i as ClientImage, it as WsProbe, j as Prediction, k as Observer, l as DriverStep, m as GroupPrediction, n as Cell, nt as Topology, o as ClusterClientAt, ot as latestEndOf, p as GroupPlace, q as RunTopology, r as Client, rt as Toxic, s as ClusterStage, t as BuildImage, tt as Target, u as Fault, v as HopPlace, w as KernelRecord, x as HttpProbe, y as HopSignal, z as ReplicaSetStage } from "./cell-BccWKiXh.js";
2
2
  import { Quantity } from "@mark1russell7/quantity";
3
3
  import "testcontainers";
4
4
  //#region src/application.d.ts
@@ -761,6 +761,76 @@ export declare const jitterOf: (cell: Cell, run: Run) => Jitter;
761
761
  */
762
762
  export declare const requestOf: (events: readonly ProbeEvent[]) => RequestReading | null;
763
763
  //#endregion
764
+ //#region src/substrate.d.ts
765
+ /**
766
+ * A layer is a rung of the laboratory (`docs/S7.md`). E1 is containers on one kernel, and E2 is a
767
+ * cluster of containers on one kernel. The other layers do not have a runner at this time.
768
+ */
769
+ type Layer = "E0" | "E1" | "E2" | "E3" | "E4" | "E5" | "E6";
770
+ /** A cloud is where the runner operates. GitHub can schedule a standard Linux job on Azure or on AWS. */
771
+ type Cloud = "azure" | "aws" | "unknown";
772
+ /** A host is what a process reads about its own machine. */
773
+ interface Host {
774
+ /** This text is the kernel release. */
775
+ readonly kernel: string | null;
776
+ /** This number is `CONFIG_HZ` from the configuration of the kernel, or null without that file. */
777
+ readonly hz: number | null;
778
+ /** This text is the DMI system vendor, for example `Microsoft Corporation`, or null without that file. */
779
+ readonly vendor: string | null;
780
+ /** This value tells if `/dev/kvm` exists. A later VM layer needs it. */
781
+ readonly kvm: boolean;
782
+ /** This text is `$ImageOS $ImageVersion` of a hosted runner, or null elsewhere. */
783
+ readonly image: string | null;
784
+ }
785
+ /**
786
+ * A substrate tells where a record comes from. The rules of comparison in `docs/S7.md` read it: no
787
+ * statistic pools two layers, two kernels or two clouds. The digest of each image stays in the
788
+ * manifest. A value is null in a record from before this block.
789
+ */
790
+ interface Substrate {
791
+ readonly layer: Layer;
792
+ readonly cloud: Cloud;
793
+ readonly vendor: string | null;
794
+ readonly kernel: string | null;
795
+ readonly hz: number | null;
796
+ readonly kvm: boolean | null;
797
+ readonly image: string | null;
798
+ }
799
+ /** GitHub announced Linux jobs on AWS on this date. Each earlier hosted job ran on Azure. */
800
+ export declare const AWS_FROM = "2026-10-28";
801
+ /** This function gives the cloud of a DMI vendor. A kernel name does not tell: one image can start on each cloud. */
802
+ export declare const cloudOf: (vendor: string | null) => Cloud;
803
+ /** This function reads the host. `root` and `env` are for tests. */
804
+ export declare const readHost: (root?: string, env?: Readonly<Record<string, string | undefined>>, kernel?: string) => Host;
805
+ /** This function gives the substrate of a layer on a host. */
806
+ export declare const substrateOn: (layer: Layer, host?: Host) => Substrate;
807
+ /** A part of a record that can hold a substrate: a manifest of the harness, or the fields of a kind manifest. */
808
+ interface SubstrateSource {
809
+ readonly substrate?: Substrate;
810
+ readonly kernel?: string;
811
+ readonly hz?: string | null;
812
+ }
813
+ /**
814
+ * This function reads the substrate of a record, the upgrade of a record from before this block.
815
+ * Nothing rewrites such a record. It reads as the given layer. Its cloud is Azure if the record is
816
+ * from before `AWS_FROM`, and unknown after that date, because its runner did not record the cloud.
817
+ */
818
+ export declare const substrateOf: (source: SubstrateSource, at: string, layer?: Layer) => Substrate;
819
+ /**
820
+ * This function tells if a statistic can pool two substrates. They must have one layer, one kernel
821
+ * and one cloud. An unknown value does not refuse a pair, because an old record cannot tell. The
822
+ * reader of such a pair says so with `substrateKey`.
823
+ */
824
+ export declare const comparable: (a: Substrate, b: Substrate) => boolean;
825
+ /** This function gives the one-line name of a substrate, for a summary. */
826
+ export declare const substrateKey: (substrate: Substrate) => string;
827
+ /**
828
+ * This function gives the first two substrates that a statistic cannot pool, or undefined. It
829
+ * examines each pair. An unknown value matches Azure and AWS, thus one comparison with the first
830
+ * substrate can miss a pair.
831
+ */
832
+ export declare const unpoolable: (substrates: readonly Substrate[]) => readonly [Substrate, Substrate] | undefined;
833
+ //#endregion
764
834
  //#region src/lab.d.ts
765
835
  /**
766
836
  * This time is the interval of the listing of a router, when its hop does not set one. A listing
@@ -829,6 +899,8 @@ interface Manifest {
829
899
  readonly hzFrom?: "config" | "measured";
830
900
  readonly boot_id: string;
831
901
  readonly docker: string;
902
+ /** This block tells the layer, the cloud and the kernel of the record. A record from before it reads through `substrateOf`. */
903
+ readonly substrate?: Substrate;
832
904
  /** This record is the target, and its settings as it read them back. */
833
905
  readonly target: {
834
906
  readonly image: string;
@@ -1715,5 +1787,5 @@ export declare const spread: (runs: number, environments: number) => number[];
1715
1787
  */
1716
1788
  export declare const runCell: (cell: Cell, say?: (line: string) => void) => Promise<CellResult>;
1717
1789
  //#endregion
1718
- export { type Agent, type BuildImage, type CallReading, type Cell, type CellResult, type Client, type ClientImage, type Cluster, type ClusterClientAt, type ClusterLab, type ClusterStage, type Crossings, type Cut, type Decision, type DriverBand, type DriverSocket, type DriverStep, type DriverStepTime, type ErrorOnTheWay, type Fault, type FaultPlace, type FaultSide, type Group, type GroupClient, type GroupLab, type GroupMeasured, type GroupNetworkFault, type GroupPlace, type GroupPrediction, type GroupReading, type GroupRole, type GroupVerdict, type GroupView, type Hop, type HopEvent, type HopPlace, type HopSignal, type HopWrite, type HttpProbe, type ImagePlan, type ImageSource, type Interval, type Jitter, type KernelRecord, type Lab, type LineMatch, type Manifest, type ManifestHop, type Measured, type MemberLine, type MiddleboxEvent, type MiddleboxExpectation, type MiddleboxForm, type NetworkFault, type NodeLine, type Observer, type Outcome, type Pairing, type PinnedImage, type Prediction, type Probe, type ProbeEvent, type ProgramEvent, type ProxyHop, type ProxyTime, type ReconnectReading, type ReconnectVerdict, type Reconnects, type Recovers, type Reference, type Reordering, type ReplicaSet, type ReplicaSetLab, type ReplicaSetStage, type Replies, type RequestPrediction, type RequestReading, type RouterHop, type RttRange, type Run, type RunGroup, type RunPart, type RunTopology, type SentinelEvent, type SentinelStage, type Shipped, type ShippedImage, type SocketPlace, type Spread, type Stage, type StageBand, type StageVerdict, type Stamp, type Status, type StatusRow, type Subject, type Target, type Topology, type Toxic, type Verdict, type WallStamp, type Writes, type WsProbe, isHopPlace, latestEndOf };
1790
+ export { type Agent, type BuildImage, type CallReading, type Cell, type CellResult, type Client, type ClientImage, type Cloud, type Cluster, type ClusterClientAt, type ClusterLab, type ClusterStage, type Crossings, type Cut, type Decision, type DriverBand, type DriverSocket, type DriverStep, type DriverStepTime, type ErrorOnTheWay, type Fault, type FaultPlace, type FaultSide, type Group, type GroupClient, type GroupLab, type GroupMeasured, type GroupNetworkFault, type GroupPlace, type GroupPrediction, type GroupReading, type GroupRole, type GroupVerdict, type GroupView, type Hop, type HopEvent, type HopPlace, type HopSignal, type HopWrite, type Host, type HttpProbe, type ImagePlan, type ImageSource, type Interval, type Jitter, type KernelRecord, type Lab, type Layer, type LineMatch, type Manifest, type ManifestHop, type Measured, type MemberLine, type MiddleboxEvent, type MiddleboxExpectation, type MiddleboxForm, type NetworkFault, type NodeLine, type Observer, type Outcome, type Pairing, type PinnedImage, type Prediction, type Probe, type ProbeEvent, type ProgramEvent, type ProxyHop, type ProxyTime, type ReconnectReading, type ReconnectVerdict, type Reconnects, type Recovers, type Reference, type Reordering, type ReplicaSet, type ReplicaSetLab, type ReplicaSetStage, type Replies, type RequestPrediction, type RequestReading, type RouterHop, type RttRange, type Run, type RunGroup, type RunPart, type RunTopology, type SentinelEvent, type SentinelStage, type Shipped, type ShippedImage, type SocketPlace, type Spread, type Stage, type StageBand, type StageVerdict, type Stamp, type Status, type StatusRow, type Subject, type Substrate, type SubstrateSource, type Target, type Topology, type Toxic, type Verdict, type WallStamp, type Writes, type WsProbe, isHopPlace, latestEndOf };
1719
1791
  //# sourceMappingURL=index.d.ts.map
package/build/index.js CHANGED
@@ -2,6 +2,9 @@ import { C as targetImageOf, E as unpinnedBases, S as subjectProblems, T as unlo
2
2
  import { quantity, valueIn } from "@mark1russell7/quantity";
3
3
  import { median, medianInterval as medianInterval$1, quantileSorted } from "@mark1russell7/rigor-statistics";
4
4
  import { createHash } from "node:crypto";
5
+ import { existsSync, readFileSync } from "node:fs";
6
+ import { release } from "node:os";
7
+ import { join } from "node:path";
5
8
  //#region src/cell.ts
6
9
  /** This function tells if a fault place is a hop of a topology. */
7
10
  const isHopPlace = (place) => typeof place === "object" && "hop" in place;
@@ -358,6 +361,18 @@ const verdictOfBand = (prediction, runs, delta = NOISE) => {
358
361
  }
359
362
  const outcomes = [...kinds].map(([kind, n]) => `${n} ${kind}`).join(", ");
360
363
  const timed = times.length === 0 ? "no time" : `median ${s(median(times)).value} s from ${prediction.from}, range [${s(times[0]).value}, ${s(times.at(-1)).value}] s`;
364
+ const counts = prediction.group?.lost;
365
+ if (counts !== void 0) {
366
+ const off = new Set(outside.map((each) => each.run)).size;
367
+ return {
368
+ ...empty,
369
+ decision: off === 0 ? "holds" : "fails",
370
+ band: null,
371
+ outside,
372
+ median: times.length === 0 ? null : s(median(times)),
373
+ why: `${counted.length - off} of ${counted.length} runs inside the band of lost writes [${counts.low}, ${counts.high}]; ${outcomes}; ${timed}. ${prediction.why}`
374
+ };
375
+ }
361
376
  const missed = outside.filter((each) => counted.some((run) => name(run) === each.run && run.reconnect !== void 0));
362
377
  const late = missed.length === 0 ? "" : ` ${missed.length} runs had a wait of the reconnect outside its band.`;
363
378
  return {
@@ -1520,6 +1535,12 @@ const measureGroup = (cell, run) => {
1520
1535
  if (met === void 0) findings.push(`the client never met ${error.name}`);
1521
1536
  else if (met.first.value < valueIn(error.low, "s") - noise || met.first.value > valueIn(error.high, "s") + noise) findings.push(`the client met ${error.name} ${met.first.value} s after the fault, outside [${valueIn(error.low, "s")}, ${valueIn(error.high, "s")}] s`);
1522
1537
  }
1538
+ if (expected?.lost !== void 0) {
1539
+ const { low, high } = expected.lost;
1540
+ const lost = group.writes.lost;
1541
+ if (lost === null) findings.push("the group did not converge, thus the count of its lost writes is not known");
1542
+ else if (lost.length < low || lost.length > high) findings.push(`the group lost ${lost.length} accepted writes, outside [${low}, ${high}]`);
1543
+ }
1523
1544
  if (accepted === void 0) {
1524
1545
  if (prediction.detects !== null) findings.push(lands === "new" ? "the client never wrote to a new primary in the window" : "the client never wrote again in the window");
1525
1546
  return {
@@ -2148,6 +2169,78 @@ const measureSocket = (cell, run) => {
2148
2169
  };
2149
2170
  };
2150
2171
  //#endregion
2172
+ //#region src/substrate.ts
2173
+ /** GitHub announced Linux jobs on AWS on this date. Each earlier hosted job ran on Azure. */
2174
+ const AWS_FROM = "2026-10-28";
2175
+ /** This function gives the cloud of a DMI vendor. A kernel name does not tell: one image can start on each cloud. */
2176
+ const cloudOf = (vendor) => {
2177
+ if (vendor === null) return "unknown";
2178
+ if (/microsoft/i.test(vendor)) return "azure";
2179
+ if (/amazon/i.test(vendor)) return "aws";
2180
+ return "unknown";
2181
+ };
2182
+ const textOf = (path) => {
2183
+ try {
2184
+ return readFileSync(path, "utf8").trim();
2185
+ } catch {
2186
+ return null;
2187
+ }
2188
+ };
2189
+ /** This function reads the host. `root` and `env` are for tests. */
2190
+ const readHost = (root = "/", env = process.env, kernel = release()) => {
2191
+ const config = textOf(join(root, "boot", `config-${kernel}`));
2192
+ const hz = config === null ? void 0 : /^CONFIG_HZ=(\d+)$/m.exec(config)?.[1];
2193
+ const os = env["ImageOS"];
2194
+ const version = env["ImageVersion"];
2195
+ return {
2196
+ kernel,
2197
+ hz: hz === void 0 ? null : Number(hz),
2198
+ vendor: textOf(join(root, "sys", "class", "dmi", "id", "sys_vendor")),
2199
+ kvm: existsSync(join(root, "dev", "kvm")),
2200
+ image: os === void 0 || version === void 0 ? null : `${os} ${version}`
2201
+ };
2202
+ };
2203
+ /** This function gives the substrate of a layer on a host. */
2204
+ const substrateOn = (layer, host = readHost()) => ({
2205
+ layer,
2206
+ cloud: cloudOf(host.vendor),
2207
+ ...host
2208
+ });
2209
+ /**
2210
+ * This function reads the substrate of a record, the upgrade of a record from before this block.
2211
+ * Nothing rewrites such a record. It reads as the given layer. Its cloud is Azure if the record is
2212
+ * from before `AWS_FROM`, and unknown after that date, because its runner did not record the cloud.
2213
+ */
2214
+ const substrateOf = (source, at, layer = "E1") => source.substrate ?? {
2215
+ layer,
2216
+ cloud: at.slice(0, 10) < "2026-10-28" ? "azure" : "unknown",
2217
+ vendor: null,
2218
+ kernel: source.kernel ?? null,
2219
+ hz: source.hz === void 0 || source.hz === null ? null : Number(source.hz),
2220
+ kvm: null,
2221
+ image: null
2222
+ };
2223
+ const differ = (a, b, unknown) => a !== null && b !== null && a !== unknown && b !== unknown && a !== b;
2224
+ /**
2225
+ * This function tells if a statistic can pool two substrates. They must have one layer, one kernel
2226
+ * and one cloud. An unknown value does not refuse a pair, because an old record cannot tell. The
2227
+ * reader of such a pair says so with `substrateKey`.
2228
+ */
2229
+ const comparable = (a, b) => a.layer === b.layer && !differ(a.kernel, b.kernel) && !differ(a.cloud, b.cloud, "unknown");
2230
+ /** This function gives the one-line name of a substrate, for a summary. */
2231
+ const substrateKey = (substrate) => `${substrate.layer} ${substrate.cloud} ${substrate.kernel ?? "unknown"}`;
2232
+ /**
2233
+ * This function gives the first two substrates that a statistic cannot pool, or undefined. It
2234
+ * examines each pair. An unknown value matches Azure and AWS, thus one comparison with the first
2235
+ * substrate can miss a pair.
2236
+ */
2237
+ const unpoolable = (substrates) => {
2238
+ for (const [index, a] of substrates.entries()) {
2239
+ const b = substrates.slice(index + 1).find((other) => !comparable(a, other));
2240
+ if (b !== void 0) return [a, b];
2241
+ }
2242
+ };
2243
+ //#endregion
2151
2244
  //#region src/lab.ts
2152
2245
  /** This function loads Testcontainers when a lab first opens. Code that only measures and judges does not load it. */
2153
2246
  const containers = () => import("testcontainers");
@@ -3053,6 +3146,7 @@ const openLab = async (target, kind = "tcp", topology) => {
3053
3146
  })(),
3054
3147
  boot_id: await output(client, ["cat", "/proc/sys/kernel/random/boot_id"]),
3055
3148
  docker: `${runtime.info.containerRuntime.serverVersion} on ${runtime.info.containerRuntime.operatingSystem}`,
3149
+ substrate: substrateOn("E1"),
3056
3150
  target: {
3057
3151
  image: targetImage,
3058
3152
  ...target.subject === void 0 ? {} : {
@@ -4197,6 +4291,7 @@ const openReplicaSetLab = async (set) => {
4197
4291
  architecture: await output(holder, ["uname", "-m"]),
4198
4292
  hz: /^CONFIG_HZ=(\d+)$/m.exec(config)?.[1] ?? null,
4199
4293
  boot_id: await output(holder, ["cat", "/proc/sys/kernel/random/boot_id"]),
4294
+ substrate: substrateOn("E1"),
4200
4295
  docker: `${runtime.info.containerRuntime.serverVersion} on ${runtime.info.containerRuntime.operatingSystem}`,
4201
4296
  target: {
4202
4297
  image: set.image,
@@ -4884,6 +4979,7 @@ const openClusterLab = async (cluster) => {
4884
4979
  architecture: await output(holder, ["uname", "-m"]),
4885
4980
  hz: /^CONFIG_HZ=(\d+)$/m.exec(config)?.[1] ?? null,
4886
4981
  boot_id: await output(holder, ["cat", "/proc/sys/kernel/random/boot_id"]),
4982
+ substrate: substrateOn("E1"),
4887
4983
  docker: `${runtime.info.containerRuntime.serverVersion} on ${runtime.info.containerRuntime.operatingSystem}`,
4888
4984
  target: {
4889
4985
  image: cluster.image,
@@ -5805,6 +5901,6 @@ const runCell = async (cell, say = () => {}) => {
5805
5901
  }
5806
5902
  };
5807
5903
  //#endregion
5808
- export { CLIENT_NAMES, CLUSTER_STAGES, CONVERGE_MS, DROP_HANDLING, GIVES_AWAY, INJECT, KEPT, LINGER_MS, LISTING, MEMBER_MARKS, MONITOR_DOWN, NODE_MARKS, NOISE, PINNED, PUMP, PUMP_SLACK, QUIET_MS, RELATIVE, REPLICA_SET_STAGES, REPOSITORY, SHIPPED_CLIENTS, SHIPPED_NAMES, STAGES, STATUS_SCRIPT, STEPS, STEP_DOWN, amqpClientImage, callOf, clockOffsetOf, closeOrExit, clusterArgs, clusterConf, clusterCutOf, clusterHostsOf, clusterOnce, clusterStagesOf, clusterViewOf, crossingsOf, cutOf, deadlineOf, delayVoids, deviceOf, dropFinding, dropOf, endpointAfter, errorsOf, exitOf, fieldOf, fieldsOf, firstUnanswered, goHttpImage, groupOnce, groupVerdictOf, grpcClientImage, harnessImage, hikariClientImage, hzOf, imageOf, imageProblems, inContext, infoOf, initiateScript, isHopPlace, jitterOf, jitterOfLines, judge, lagsOf, latestEndOf, leftAfter, logNameOf, matches, measure, measureDriver, measureGroup, medianInterval, memberCommand, memberConfig, memberLineOf, mongoClientImage, monotonicOf, nodeClientImage, nodeCommand, nodeHttpImage, nodeLineOf, nodeNameOf, nodesOnMonotonic, noiseOf, onMonotonic, openClusterLab, openGroupLab, openLab, openReplicaSetLab, pairingOf, pairingsOf, peersOf, pgClientImage, pingsOf, plainOf, planOf, programLines, programOf, quantileOf, reconnectFinding, reconnectOf, referenceOf, reorderingOf, replicaSetArgs, replicaSetOnce, replicaSetStagesOf, requestOf, requestWords, restamped, routerImage, routesOf, runCell, sentinelConfig, socketAt, socketOf, socketsOf, spread, spreadOf, stagesOf, statusViewOf, subjectClient, subjectProblems, subscriptionsOf, targetImageOf, targetSourceOf, templated, toolJsonOf, toxicBody, unlockedManifests, unpinnedBases, verdictOf, viewOf, writesOf };
5904
+ export { AWS_FROM, CLIENT_NAMES, CLUSTER_STAGES, CONVERGE_MS, DROP_HANDLING, GIVES_AWAY, INJECT, KEPT, LINGER_MS, LISTING, MEMBER_MARKS, MONITOR_DOWN, NODE_MARKS, NOISE, PINNED, PUMP, PUMP_SLACK, QUIET_MS, RELATIVE, REPLICA_SET_STAGES, REPOSITORY, SHIPPED_CLIENTS, SHIPPED_NAMES, STAGES, STATUS_SCRIPT, STEPS, STEP_DOWN, amqpClientImage, callOf, clockOffsetOf, closeOrExit, cloudOf, clusterArgs, clusterConf, clusterCutOf, clusterHostsOf, clusterOnce, clusterStagesOf, clusterViewOf, comparable, crossingsOf, cutOf, deadlineOf, delayVoids, deviceOf, dropFinding, dropOf, endpointAfter, errorsOf, exitOf, fieldOf, fieldsOf, firstUnanswered, goHttpImage, groupOnce, groupVerdictOf, grpcClientImage, harnessImage, hikariClientImage, hzOf, imageOf, imageProblems, inContext, infoOf, initiateScript, isHopPlace, jitterOf, jitterOfLines, judge, lagsOf, latestEndOf, leftAfter, logNameOf, matches, measure, measureDriver, measureGroup, medianInterval, memberCommand, memberConfig, memberLineOf, mongoClientImage, monotonicOf, nodeClientImage, nodeCommand, nodeHttpImage, nodeLineOf, nodeNameOf, nodesOnMonotonic, noiseOf, onMonotonic, openClusterLab, openGroupLab, openLab, openReplicaSetLab, pairingOf, pairingsOf, peersOf, pgClientImage, pingsOf, plainOf, planOf, programLines, programOf, quantileOf, readHost, reconnectFinding, reconnectOf, referenceOf, reorderingOf, replicaSetArgs, replicaSetOnce, replicaSetStagesOf, requestOf, requestWords, restamped, routerImage, routesOf, runCell, sentinelConfig, socketAt, socketOf, socketsOf, spread, spreadOf, stagesOf, statusViewOf, subjectClient, subjectProblems, subscriptionsOf, substrateKey, substrateOf, substrateOn, targetImageOf, targetSourceOf, templated, toolJsonOf, toxicBody, unlockedManifests, unpinnedBases, unpoolable, verdictOf, viewOf, writesOf };
5809
5905
 
5810
5906
  //# sourceMappingURL=index.js.map