@cat-factory/contracts 0.340.0 → 0.342.0

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.
@@ -206,10 +206,28 @@ export declare const bootstrapJobSchema: v.ObjectSchema<{
206
206
  readonly unavailableReason: v.NullableSchema<v.PicklistSchema<["model_unavailable", "repo_unreadable", "budget_exhausted", "analysis_unusable"], undefined>, undefined>;
207
207
  readonly unavailableDetail: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 600, undefined>]>, undefined>;
208
208
  readonly survey: v.ObjectSchema<{
209
- readonly monorepoPaths: v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
210
- readonly templatePaths: v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
211
- readonly unreadablePaths: v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
212
- readonly siblingService: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
209
+ readonly reads: v.NullableSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.ObjectSchema<{
210
+ readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 400, undefined>]>;
211
+ readonly origin: v.PicklistSchema<["seed", "model"], undefined>;
212
+ readonly outcome: v.PicklistSchema<["read", "absent", "unreadable", "refused"], undefined>;
213
+ readonly chars: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
214
+ readonly note: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 600, undefined>]>, undefined>;
215
+ }, undefined>, undefined>, v.MaxLengthAction<{
216
+ path: string;
217
+ origin: "model" | "seed";
218
+ outcome: "absent" | "read" | "refused" | "unreadable";
219
+ chars: number;
220
+ note: string | null;
221
+ }[], 96, undefined>]>, undefined>;
222
+ readonly siblingServices: v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
223
+ readonly exploration: v.ObjectSchema<{
224
+ readonly calls: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
225
+ readonly maxCalls: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
226
+ readonly chars: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
227
+ readonly maxChars: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
228
+ readonly exhausted: v.NullableSchema<v.PicklistSchema<["calls", "chars"], undefined>, undefined>;
229
+ readonly recordsDropped: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
230
+ }, undefined>;
213
231
  }, undefined>;
214
232
  readonly decisions: v.ArraySchema<v.ObjectSchema<{
215
233
  readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 80, undefined>]>;
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAoC5B,iEAAiE;AACjE,eAAO,MAAM,2BAA2B;;;;;IAKtC,mDAAmD;;IAEnD,8DAA8D;;IAE9D,gFAAgF;;;;aAIhF,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF,6CAA6C;AAC7C,eAAO,MAAM,iCAAiC;;;;;;aAM5C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,iCAAiC;;;;;;aAM5C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,+FAMhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,kDAAkC,CAAA;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;IACxC,kFAAkF;;IAElF;;;OAGG;;aAEH,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF,6FAA6F;AAC7F,eAAO,MAAM,0BAA0B;;;IAGrC,oEAAoE;;IAEpE,mEAAmE;;IAEnE,oFAAoF;;aAEpF,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,+GAQrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;aAAqB,CAAA;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,kDAAkD;AAClD,eAAO,MAAM,kBAAkB;;;IAG7B,8FAA8F;;IAE9F,4HAA4H;;IAE5H,gDAAgD;;IAEhD,wFAAwF;;IAExF,2EAA2E;;IAE3E,kFAAkF;;;IAGlF;;;;;;OAMG;;IAEH;;;;OAIG;;;;;;;;;;IAEH,qFAAqF;;IAErF,gFAAgF;;;;;;;;;;;;;;;;;;;IAEhF;;;;OAIG;;;;QAhFH,oEAAoE;;QAEpE,mEAAmE;;QAEnE,oFAAoF;;;IA8EpF,6EAA6E;;IAE7E,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;IAElF,kEAAkE;;;;;;;;;;;;;;IAElE;;;OAGG;;;;aAIH,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;IAE5B,sFAAsF;;IAEtF;;;OAGG;;IAEH;;;;;OAKG;;QAtIL,kFAAkF;;QAElF;;;WAGG;;;IAmID;;;OAGG;;IAEH,iDAAiD;;IAEjD,mEAAmE;;IAEnE;;;OAGG;;;;;;;;;;;;;oFAON,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAoC5B,iEAAiE;AACjE,eAAO,MAAM,2BAA2B;;;;;IAKtC,mDAAmD;;IAEnD,8DAA8D;;IAE9D,gFAAgF;;;;aAIhF,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF,6CAA6C;AAC7C,eAAO,MAAM,iCAAiC;;;;;;aAM5C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,iCAAiC;;;;;;aAM5C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,+FAMhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,kDAAkC,CAAA;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;IACxC,kFAAkF;;IAElF;;;OAGG;;aAEH,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF,6FAA6F;AAC7F,eAAO,MAAM,0BAA0B;;;IAGrC,oEAAoE;;IAEpE,mEAAmE;;IAEnE,oFAAoF;;aAEpF,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,+GAQrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;aAAqB,CAAA;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,kDAAkD;AAClD,eAAO,MAAM,kBAAkB;;;IAG7B,8FAA8F;;IAE9F,4HAA4H;;IAE5H,gDAAgD;;IAEhD,wFAAwF;;IAExF,2EAA2E;;IAE3E,kFAAkF;;;IAGlF;;;;;;OAMG;;IAEH;;;;OAIG;;;;;;;;;;IAEH,qFAAqF;;IAErF,gFAAgF;;;;;;;;;;;;;;;;;;;IAEhF;;;;OAIG;;;;QAhFH,oEAAoE;;QAEpE,mEAAmE;;QAEnE,oFAAoF;;;IA8EpF,6EAA6E;;IAE7E,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAElF,kEAAkE;;;;;;;;;;;;;;IAElE;;;OAGG;;;;aAIH,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;IAE5B,sFAAsF;;IAEtF;;;OAGG;;IAEH;;;;;OAKG;;QAtIL,kFAAkF;;QAElF;;;WAGG;;;IAmID;;;OAGG;;IAEH,iDAAiD;;IAEjD,mEAAmE;;IAEnE;;;OAGG;;;;;;;;;;;;;oFAON,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import * as v from 'valibot';
2
2
  /**
3
- * One address a provider states will carry traffic for its environment's URL host.
3
+ * One place a provider states traffic for its environment's URL host goes: an ADDRESS the platform
4
+ * dials as written, or a NAME it resolves when it dials.
4
5
  *
5
6
  * The motivating shape is an org running per-PR preview environments whose per-environment DNS
6
7
  * record lives in an internal view while the load balancers fronting it are ordinary names and
@@ -8,16 +9,74 @@ import * as v from 'valibot';
8
9
  * it. The only missing thing is a name-to-address mapping, which is exactly what a hosts-file
9
10
  * entry (or a Kubernetes `hostAliases` entry) is.
10
11
  *
12
+ * **Exactly one of {@link EnvironmentRouteCandidate.address} and
13
+ * {@link EnvironmentRouteCandidate.host} is set, and which one is the PROVIDER'S statement**, never
14
+ * something the platform reads off the spelling. Guessing would rest the security rule on a parse:
15
+ * `isBridgeableAddress` refuses a non-canonical literal precisely so `2130706433` cannot become
16
+ * loopback, and a resolver handed that same string answers loopback happily. A candidate stating
17
+ * neither (or both, which is two claims with no way to tell which was meant) therefore names no
18
+ * target at all and is RECORDED as one, on the same rule as an address no bridge may name.
19
+ *
11
20
  * `label` is for the human reading a diagnostic ("internal ALB", "public ALB"), never for
12
21
  * matching: the platform picks by PROBING, never by name.
13
22
  */
14
- export declare const environmentAddressSchema: v.ObjectSchema<{
15
- /** An IP literal. Never a name: a name would just be the lookup that already failed. */
16
- readonly address: v.StringSchema<undefined>;
17
- /** What this address IS, for the diagnostic. Never load-bearing. */
23
+ export declare const environmentRouteCandidateSchema: v.ObjectSchema<{
24
+ /** An IP literal, dialled as written. Never a name: see {@link EnvironmentRouteCandidate.host}. */
25
+ readonly address: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
26
+ /**
27
+ * A NAME the platform RESOLVES at proof time, expanding it in place into the addresses it
28
+ * answers with.
29
+ *
30
+ * For the provider whose stable identity IS a name, which is the ordinary shape of a managed
31
+ * load balancer: an ALB's addresses change as it scales or gains a zone, and its DNS name is
32
+ * what the vendor documents a client should use. A provider stating the resolved literals
33
+ * instead re-pins a snapshot of that set on every poll, and owes bounded resolution, stable
34
+ * ordering and partial-failure handling of its own.
35
+ *
36
+ * Deliberately NOT the URL's own host, which is the lookup that already failed. This is a
37
+ * DIFFERENT name in a different zone, and its whole point is resolving when that one does not.
38
+ * Nothing downstream ever sees it: every address it resolves to is graded by
39
+ * `isBridgeableAddress` exactly as a stated address is, and the proof publishes the ADDRESS that
40
+ * carried with the name it came from beside it, so a bridge is still built from a literal the
41
+ * platform itself proved.
42
+ */
43
+ readonly host: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
44
+ /** What this candidate IS, for the diagnostic. Never load-bearing. */
18
45
  readonly label: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
19
46
  }, undefined>;
20
- export type EnvironmentAddress = v.InferOutput<typeof environmentAddressSchema>;
47
+ export type EnvironmentRouteCandidate = v.InferOutput<typeof environmentRouteCandidateSchema>;
48
+ /**
49
+ * What one candidate actually names, or that it names nothing usable.
50
+ *
51
+ * A discriminated result rather than two optional reads at every site, because the three cases
52
+ * want three different reactions and the third is the one a nullable read renders as absent. Read
53
+ * through this rather than off the fields, so "which kind is this" is answered once.
54
+ */
55
+ export type StatedRouteTarget = {
56
+ kind: 'address';
57
+ address: string;
58
+ } | {
59
+ kind: 'host';
60
+ host: string;
61
+ } | {
62
+ kind: 'unusable';
63
+ };
64
+ /**
65
+ * Read a stated candidate as the one thing it names.
66
+ *
67
+ * A host is lower-cased because DNS is case-insensitive and this value is both a map key and a
68
+ * comparison target: two spellings of one balancer name must not resolve twice, nor invalidate a
69
+ * proof by failing to match themselves.
70
+ */
71
+ export declare function statedRouteTarget(candidate: EnvironmentRouteCandidate): StatedRouteTarget;
72
+ /**
73
+ * One candidate as a reader sees it: its value, its label, and a NAME marked as one.
74
+ *
75
+ * ONE renderer, because three surfaces print this list (the environment investigation's route
76
+ * section, its timeline entry and the diagnostics bundle) and a name printed into a sentence about
77
+ * "the addresses the provider stated" reads as an address somebody typed wrong.
78
+ */
79
+ export declare function describeRouteCandidate(candidate: EnvironmentRouteCandidate): string;
21
80
  /**
22
81
  * Why a `ready` environment could not be reached, at the layer the platform can observe.
23
82
  *
@@ -29,20 +88,33 @@ export type EnvironmentAddress = v.InferOutput<typeof environmentAddressSchema>;
29
88
  *
30
89
  * - `no_candidate` the environment carries no URL, or one with no host to probe. There
31
90
  * was nothing to try, which is not the same as trying and failing.
32
- * - `name_unresolved` the URL's host resolved nowhere, and no stated address carried either.
91
+ * - `name_unresolved` a name resolved nowhere: the URL's own host, with no stated candidate
92
+ * carrying either, or one stated NAME whose own lookup answered nothing.
33
93
  * - `no_route` something resolved and the connect never completed (timeout,
34
94
  * host/network unreachable). The expensive failure: a lookup that
35
95
  * worked followed by a connect that hangs.
36
96
  * - `connection_refused` the route carries and nothing is listening on the port.
37
- * - `address_refused` the provider stated an address the platform will not dial: loopback,
38
- * link-local/vendor metadata, or a non-canonical literal. Recorded as an
39
- * attempt rather than dropped, because a refused input is an omission the
40
- * operator has to be able to see.
97
+ * - `address_refused` the provider stated a target the platform will not dial: a loopback,
98
+ * link-local/vendor-metadata or non-canonical address (whether stated or
99
+ * resolved from a stated name), or a candidate naming no single target at
100
+ * all. Recorded as an attempt rather than dropped, because a refused input
101
+ * is an omission the operator has to be able to see.
102
+ * - `resolver_unavailable` the provider stated a NAME and nothing in this deployment can turn one
103
+ * into an address. An admission about the PLATFORM, never a verdict about
104
+ * the environment, so it leaves the route unruled-out exactly as
105
+ * `probe_failed` does.
106
+ * - `not_attempted` the platform stopped short of the list its provider stated: it looks up
107
+ * a bounded number of names and dials a bounded number of addresses, so a
108
+ * longer list is a PREFIX. Recorded ONCE, naming how many were passed
109
+ * over, because a reader who assumes a prefix concludes the tail was
110
+ * never stated. Another admission about the PLATFORM: a candidate nothing
111
+ * looked at cannot be part of a verdict that nothing reaches the
112
+ * environment.
41
113
  * - `probe_failed` the probe itself errored in a way it could not classify. Kept apart
42
114
  * from the three above so "we could not tell" never renders as a
43
115
  * verdict about the environment.
44
116
  */
45
- export declare const environmentUnreachableReasonSchema: v.PicklistSchema<["no_candidate", "name_unresolved", "no_route", "connection_refused", "address_refused", "probe_failed"], undefined>;
117
+ export declare const environmentUnreachableReasonSchema: v.PicklistSchema<["no_candidate", "name_unresolved", "no_route", "connection_refused", "address_refused", "resolver_unavailable", "not_attempted", "probe_failed"], undefined>;
46
118
  export type EnvironmentUnreachableReason = v.InferOutput<typeof environmentUnreachableReasonSchema>;
47
119
  /** One target the proof tried, in the order it was tried, and what came back. */
48
120
  export declare const environmentRouteAttemptSchema: v.ObjectSchema<{
@@ -93,6 +165,21 @@ export declare const environmentRouteProofSchema: v.ObjectSchema<{
93
165
  * then points further from the cause than no bridge at all did.
94
166
  */
95
167
  readonly via: v.NullableSchema<v.StringSchema<undefined>, undefined>;
168
+ /**
169
+ * The stated NAME {@link via} was resolved from, when the candidate that carried was a host
170
+ * rather than an address. Absent when `via` is itself a stated address, when the URL's own name
171
+ * carried, and when nothing carried.
172
+ *
173
+ * Recorded because the fold decides a `reached` proof's survival on whether the target it names
174
+ * is still on offer, and for a resolved name that target is the NAME. The address is a snapshot
175
+ * of a set that rotates (a balancer scaling or gaining a zone changes it, and tells the platform
176
+ * nothing about whether the proved route still carries), so matching `via` against the candidate
177
+ * list would drop a good proof on every such event and pay a fresh probe sequence for it.
178
+ *
179
+ * Optional so a proof written before this existed still parses, where its absence reads as the
180
+ * address case, which is what it was.
181
+ */
182
+ readonly viaHost: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
96
183
  /**
97
184
  * The {@link EnvironmentUnreachableReason} when `state` is `not_reached` or `inconclusive`,
98
185
  * else null. An open string on the wire so a stored proof written by an older build never fails
@@ -130,11 +217,32 @@ export type EnvironmentRouteProof = v.InferOutput<typeof environmentRouteProofSc
130
217
  * offered as well as which were reached, and a re-probe on a later poll re-reads the same claim.
131
218
  */
132
219
  export declare const environmentReachabilitySchema: v.ObjectSchema<{
133
- /** Addresses the provider states carry traffic for the URL's host, in ITS preference order. */
220
+ /**
221
+ * The addresses and names the provider states carry traffic for the URL's host, in ITS
222
+ * preference order.
223
+ */
134
224
  readonly candidates: v.ArraySchema<v.ObjectSchema<{
135
- /** An IP literal. Never a name: a name would just be the lookup that already failed. */
136
- readonly address: v.StringSchema<undefined>;
137
- /** What this address IS, for the diagnostic. Never load-bearing. */
225
+ /** An IP literal, dialled as written. Never a name: see {@link EnvironmentRouteCandidate.host}. */
226
+ readonly address: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
227
+ /**
228
+ * A NAME the platform RESOLVES at proof time, expanding it in place into the addresses it
229
+ * answers with.
230
+ *
231
+ * For the provider whose stable identity IS a name, which is the ordinary shape of a managed
232
+ * load balancer: an ALB's addresses change as it scales or gains a zone, and its DNS name is
233
+ * what the vendor documents a client should use. A provider stating the resolved literals
234
+ * instead re-pins a snapshot of that set on every poll, and owes bounded resolution, stable
235
+ * ordering and partial-failure handling of its own.
236
+ *
237
+ * Deliberately NOT the URL's own host, which is the lookup that already failed. This is a
238
+ * DIFFERENT name in a different zone, and its whole point is resolving when that one does not.
239
+ * Nothing downstream ever sees it: every address it resolves to is graded by
240
+ * `isBridgeableAddress` exactly as a stated address is, and the proof publishes the ADDRESS that
241
+ * carried with the name it came from beside it, so a bridge is still built from a literal the
242
+ * platform itself proved.
243
+ */
244
+ readonly host: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
245
+ /** What this candidate IS, for the diagnostic. Never load-bearing. */
138
246
  readonly label: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
139
247
  }, undefined>, undefined>;
140
248
  /** What proving found, or null when nothing has probed this environment yet. */
@@ -150,6 +258,21 @@ export declare const environmentReachabilitySchema: v.ObjectSchema<{
150
258
  * then points further from the cause than no bridge at all did.
151
259
  */
152
260
  readonly via: v.NullableSchema<v.StringSchema<undefined>, undefined>;
261
+ /**
262
+ * The stated NAME {@link via} was resolved from, when the candidate that carried was a host
263
+ * rather than an address. Absent when `via` is itself a stated address, when the URL's own name
264
+ * carried, and when nothing carried.
265
+ *
266
+ * Recorded because the fold decides a `reached` proof's survival on whether the target it names
267
+ * is still on offer, and for a resolved name that target is the NAME. The address is a snapshot
268
+ * of a set that rotates (a balancer scaling or gaining a zone changes it, and tells the platform
269
+ * nothing about whether the proved route still carries), so matching `via` against the candidate
270
+ * list would drop a good proof on every such event and pay a fresh probe sequence for it.
271
+ *
272
+ * Optional so a proof written before this existed still parses, where its absence reads as the
273
+ * address case, which is what it was.
274
+ */
275
+ readonly viaHost: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
153
276
  /**
154
277
  * The {@link EnvironmentUnreachableReason} when `state` is `not_reached` or `inconclusive`,
155
278
  * else null. An open string on the wire so a stored proof written by an older build never fails
@@ -1 +1 @@
1
- {"version":3,"file":"environment-reachability.d.ts","sourceRoot":"","sources":["../src/environment-reachability.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;IACnC,wFAAwF;;IAExF,oEAAoE;;aAEpE,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,kCAAkC,uIAO7C,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAEnG,iFAAiF;AACjF,eAAO,MAAM,6BAA6B;IACxC,iFAAiF;;IAEjF,mFAAmF;;IAEnF;;;;;;;;OAQG;;aAEH,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,2BAA2B;;IAEtC;;;;;;;;OAQG;;IAEH;;;;OAIG;;IAEH,yEAAyE;;QAtDzE,iFAAiF;;QAEjF,mFAAmF;;QAEnF;;;;;;;;WAQG;;;IA4CH,qCAAqC;;aAErC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;IACxC,+FAA+F;;QAlH/F,wFAAwF;;QAExF,oEAAoE;;;IAkHpE,gFAAgF;;;QAnChF;;;;;;;;WAQG;;QAEH;;;;WAIG;;QAEH,yEAAyE;;YAtDzE,iFAAiF;;YAEjF,mFAAmF;;YAEnF;;;;;;;;eAQG;;;QA4CH,qCAAqC;;;IAmBrC;;;;;;;;;;;;;;OAcG;;aAEH,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF;;;;;;;;GAQG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAA;IAC1D,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GACvD,2BAA2B,GAAG,SAAS,CAUzC;AAED,wFAAwF;AACxF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,2FAA2F;IAC3F,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAA;CACf;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,sBAAsB,GAAG,IAAI,CAW/B"}
1
+ {"version":3,"file":"environment-reachability.d.ts","sourceRoot":"","sources":["../src/environment-reachability.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,8 @@
18
18
  // in that vocabulary.
19
19
  import * as v from 'valibot';
20
20
  /**
21
- * One address a provider states will carry traffic for its environment's URL host.
21
+ * One place a provider states traffic for its environment's URL host goes: an ADDRESS the platform
22
+ * dials as written, or a NAME it resolves when it dials.
22
23
  *
23
24
  * The motivating shape is an org running per-PR preview environments whose per-environment DNS
24
25
  * record lives in an internal view while the load balancers fronting it are ordinary names and
@@ -26,15 +27,77 @@ import * as v from 'valibot';
26
27
  * it. The only missing thing is a name-to-address mapping, which is exactly what a hosts-file
27
28
  * entry (or a Kubernetes `hostAliases` entry) is.
28
29
  *
30
+ * **Exactly one of {@link EnvironmentRouteCandidate.address} and
31
+ * {@link EnvironmentRouteCandidate.host} is set, and which one is the PROVIDER'S statement**, never
32
+ * something the platform reads off the spelling. Guessing would rest the security rule on a parse:
33
+ * `isBridgeableAddress` refuses a non-canonical literal precisely so `2130706433` cannot become
34
+ * loopback, and a resolver handed that same string answers loopback happily. A candidate stating
35
+ * neither (or both, which is two claims with no way to tell which was meant) therefore names no
36
+ * target at all and is RECORDED as one, on the same rule as an address no bridge may name.
37
+ *
29
38
  * `label` is for the human reading a diagnostic ("internal ALB", "public ALB"), never for
30
39
  * matching: the platform picks by PROBING, never by name.
31
40
  */
32
- export const environmentAddressSchema = v.object({
33
- /** An IP literal. Never a name: a name would just be the lookup that already failed. */
34
- address: v.string(),
35
- /** What this address IS, for the diagnostic. Never load-bearing. */
41
+ export const environmentRouteCandidateSchema = v.object({
42
+ /** An IP literal, dialled as written. Never a name: see {@link EnvironmentRouteCandidate.host}. */
43
+ address: v.optional(v.string()),
44
+ /**
45
+ * A NAME the platform RESOLVES at proof time, expanding it in place into the addresses it
46
+ * answers with.
47
+ *
48
+ * For the provider whose stable identity IS a name, which is the ordinary shape of a managed
49
+ * load balancer: an ALB's addresses change as it scales or gains a zone, and its DNS name is
50
+ * what the vendor documents a client should use. A provider stating the resolved literals
51
+ * instead re-pins a snapshot of that set on every poll, and owes bounded resolution, stable
52
+ * ordering and partial-failure handling of its own.
53
+ *
54
+ * Deliberately NOT the URL's own host, which is the lookup that already failed. This is a
55
+ * DIFFERENT name in a different zone, and its whole point is resolving when that one does not.
56
+ * Nothing downstream ever sees it: every address it resolves to is graded by
57
+ * `isBridgeableAddress` exactly as a stated address is, and the proof publishes the ADDRESS that
58
+ * carried with the name it came from beside it, so a bridge is still built from a literal the
59
+ * platform itself proved.
60
+ */
61
+ host: v.optional(v.string()),
62
+ /** What this candidate IS, for the diagnostic. Never load-bearing. */
36
63
  label: v.optional(v.string()),
37
64
  });
65
+ /**
66
+ * Read a stated candidate as the one thing it names.
67
+ *
68
+ * A host is lower-cased because DNS is case-insensitive and this value is both a map key and a
69
+ * comparison target: two spellings of one balancer name must not resolve twice, nor invalidate a
70
+ * proof by failing to match themselves.
71
+ */
72
+ export function statedRouteTarget(candidate) {
73
+ const address = candidate.address?.trim() ?? '';
74
+ const host = candidate.host?.trim().toLowerCase() ?? '';
75
+ if (address && host)
76
+ return { kind: 'unusable' };
77
+ if (address)
78
+ return { kind: 'address', address };
79
+ if (host)
80
+ return { kind: 'host', host };
81
+ return { kind: 'unusable' };
82
+ }
83
+ /**
84
+ * One candidate as a reader sees it: its value, its label, and a NAME marked as one.
85
+ *
86
+ * ONE renderer, because three surfaces print this list (the environment investigation's route
87
+ * section, its timeline entry and the diagnostics bundle) and a name printed into a sentence about
88
+ * "the addresses the provider stated" reads as an address somebody typed wrong.
89
+ */
90
+ export function describeRouteCandidate(candidate) {
91
+ const stated = statedRouteTarget(candidate);
92
+ const label = candidate.label?.trim();
93
+ if (stated.kind === 'address')
94
+ return label ? `${stated.address} (${label})` : stated.address;
95
+ if (stated.kind === 'host')
96
+ return `${stated.host} (name${label ? `, ${label}` : ''})`;
97
+ return label
98
+ ? `an entry stating no usable target (${label})`
99
+ : 'an entry stating no usable target';
100
+ }
38
101
  /**
39
102
  * Why a `ready` environment could not be reached, at the layer the platform can observe.
40
103
  *
@@ -46,15 +109,28 @@ export const environmentAddressSchema = v.object({
46
109
  *
47
110
  * - `no_candidate` the environment carries no URL, or one with no host to probe. There
48
111
  * was nothing to try, which is not the same as trying and failing.
49
- * - `name_unresolved` the URL's host resolved nowhere, and no stated address carried either.
112
+ * - `name_unresolved` a name resolved nowhere: the URL's own host, with no stated candidate
113
+ * carrying either, or one stated NAME whose own lookup answered nothing.
50
114
  * - `no_route` something resolved and the connect never completed (timeout,
51
115
  * host/network unreachable). The expensive failure: a lookup that
52
116
  * worked followed by a connect that hangs.
53
117
  * - `connection_refused` the route carries and nothing is listening on the port.
54
- * - `address_refused` the provider stated an address the platform will not dial: loopback,
55
- * link-local/vendor metadata, or a non-canonical literal. Recorded as an
56
- * attempt rather than dropped, because a refused input is an omission the
57
- * operator has to be able to see.
118
+ * - `address_refused` the provider stated a target the platform will not dial: a loopback,
119
+ * link-local/vendor-metadata or non-canonical address (whether stated or
120
+ * resolved from a stated name), or a candidate naming no single target at
121
+ * all. Recorded as an attempt rather than dropped, because a refused input
122
+ * is an omission the operator has to be able to see.
123
+ * - `resolver_unavailable` the provider stated a NAME and nothing in this deployment can turn one
124
+ * into an address. An admission about the PLATFORM, never a verdict about
125
+ * the environment, so it leaves the route unruled-out exactly as
126
+ * `probe_failed` does.
127
+ * - `not_attempted` the platform stopped short of the list its provider stated: it looks up
128
+ * a bounded number of names and dials a bounded number of addresses, so a
129
+ * longer list is a PREFIX. Recorded ONCE, naming how many were passed
130
+ * over, because a reader who assumes a prefix concludes the tail was
131
+ * never stated. Another admission about the PLATFORM: a candidate nothing
132
+ * looked at cannot be part of a verdict that nothing reaches the
133
+ * environment.
58
134
  * - `probe_failed` the probe itself errored in a way it could not classify. Kept apart
59
135
  * from the three above so "we could not tell" never renders as a
60
136
  * verdict about the environment.
@@ -65,6 +141,8 @@ export const environmentUnreachableReasonSchema = v.picklist([
65
141
  'no_route',
66
142
  'connection_refused',
67
143
  'address_refused',
144
+ 'resolver_unavailable',
145
+ 'not_attempted',
68
146
  'probe_failed',
69
147
  ]);
70
148
  /** One target the proof tried, in the order it was tried, and what came back. */
@@ -115,6 +193,21 @@ export const environmentRouteProofSchema = v.object({
115
193
  * then points further from the cause than no bridge at all did.
116
194
  */
117
195
  via: v.nullable(v.string()),
196
+ /**
197
+ * The stated NAME {@link via} was resolved from, when the candidate that carried was a host
198
+ * rather than an address. Absent when `via` is itself a stated address, when the URL's own name
199
+ * carried, and when nothing carried.
200
+ *
201
+ * Recorded because the fold decides a `reached` proof's survival on whether the target it names
202
+ * is still on offer, and for a resolved name that target is the NAME. The address is a snapshot
203
+ * of a set that rotates (a balancer scaling or gaining a zone changes it, and tells the platform
204
+ * nothing about whether the proved route still carries), so matching `via` against the candidate
205
+ * list would drop a good proof on every such event and pay a fresh probe sequence for it.
206
+ *
207
+ * Optional so a proof written before this existed still parses, where its absence reads as the
208
+ * address case, which is what it was.
209
+ */
210
+ viaHost: v.optional(v.string()),
118
211
  /**
119
212
  * The {@link EnvironmentUnreachableReason} when `state` is `not_reached` or `inconclusive`,
120
213
  * else null. An open string on the wire so a stored proof written by an older build never fails
@@ -136,8 +229,11 @@ export const environmentRouteProofSchema = v.object({
136
229
  * offered as well as which were reached, and a re-probe on a later poll re-reads the same claim.
137
230
  */
138
231
  export const environmentReachabilitySchema = v.object({
139
- /** Addresses the provider states carry traffic for the URL's host, in ITS preference order. */
140
- candidates: v.array(environmentAddressSchema),
232
+ /**
233
+ * The addresses and names the provider states carry traffic for the URL's host, in ITS
234
+ * preference order.
235
+ */
236
+ candidates: v.array(environmentRouteCandidateSchema),
141
237
  /** What proving found, or null when nothing has probed this environment yet. */
142
238
  proof: v.nullable(environmentRouteProofSchema),
143
239
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"environment-reachability.js","sourceRoot":"","sources":["../src/environment-reachability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-reachability.js","sourceRoot":"","sources":["../src/environment-reachability.ts"],"names":[],"mappings":"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"}