@qontinui/shared-types 2.4.0 → 2.5.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.
- package/dist/scheduler.d.cts +74 -1
- package/dist/scheduler.d.ts +74 -1
- package/package.json +1 -1
- package/src/generated/ChangeTimeline.d.ts +484 -0
- package/src/generated/CriterionVerification.d.ts +11 -0
- package/src/generated/DetectedAnimation.d.ts +32 -0
- package/src/generated/EarsPattern.d.ts +20 -0
- package/src/generated/EdgeTiming.d.ts +156 -0
- package/src/generated/ExternalRef.d.ts +22 -0
- package/src/generated/InterfaceMappingFrontmatter.d.ts +21 -0
- package/src/generated/JourneyArrivalDoubt.d.ts +26 -0
- package/src/generated/JourneyCoverage.d.ts +91 -0
- package/src/generated/JourneyDeadEnds.d.ts +109 -0
- package/src/generated/JourneyEdgeObservation.d.ts +3 -2
- package/src/generated/JourneyEdgeTimingAnswer.d.ts +88 -0
- package/src/generated/JourneyFilter.d.ts +35 -0
- package/src/generated/JourneyFrontier.d.ts +51 -0
- package/src/generated/JourneyGraph.d.ts +165 -0
- package/src/generated/JourneyGraphEdge.d.ts +45 -0
- package/src/generated/JourneyPriorKnowledge.d.ts +112 -0
- package/src/generated/JourneyReachable.d.ts +64 -0
- package/src/generated/JourneySearchFrontier.d.ts +59 -0
- package/src/generated/JourneySearchFrontierNode.d.ts +37 -0
- package/src/generated/JourneySteps.d.ts +65 -0
- package/src/generated/JourneyUnmeasuredDepartures.d.ts +84 -0
- package/src/generated/MappingRow.d.ts +23 -0
- package/src/generated/MetricDistribution.d.ts +54 -0
- package/src/generated/RequestFrontmatter.d.ts +30 -0
- package/src/generated/RequirementFrontmatter.d.ts +31 -0
- package/src/generated/ScheduledTask.d.ts +52 -0
- package/src/generated/ScheduledTaskType.d.ts +22 -1
- package/src/generated/SourceCitation.d.ts +25 -0
- package/src/generated/SourceCitationKind.d.ts +12 -0
- package/src/generated/SpecAcceptanceCriterion.d.ts +28 -0
- package/src/generated/SpecFrontmatter.d.ts +36 -0
- package/src/generated/SpecLanguage.d.ts +11 -0
- package/src/generated/StoryFrontmatter.d.ts +26 -0
- package/src/generated/TemplateRef.d.ts +17 -0
- package/src/generated/UnknownCode.d.ts +8 -1
- package/src/generated/index.ts +32 -3
- package/src/generated/CapabilityState.d.ts +0 -25
- package/src/generated/CliProfile.d.ts +0 -492
- package/src/generated/SessionFailure.d.ts +0 -129
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* How an acceptance criterion is verified.
|
|
10
|
+
*/
|
|
11
|
+
export type CriterionVerification = "command" | "ui_bridge" | "test" | "manual";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* One CSS animation or transition, as the SDK's idle signals and the
|
|
10
|
+
* timeline report it (`idle/detected-animation.ts`).
|
|
11
|
+
*/
|
|
12
|
+
export interface DetectedAnimation {
|
|
13
|
+
/**
|
|
14
|
+
* Duration (ms) when known — the elapsed time at end, or the effect's
|
|
15
|
+
* timing.
|
|
16
|
+
*/
|
|
17
|
+
durationMs?: number | null;
|
|
18
|
+
/**
|
|
19
|
+
* Whether the animation repeats forever.
|
|
20
|
+
*/
|
|
21
|
+
isInfinite: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* `animationName`, or `transition:<property>` for a CSS transition.
|
|
24
|
+
*/
|
|
25
|
+
name: string;
|
|
26
|
+
/**
|
|
27
|
+
* `ElementFingerprintData.hash` of the animated element, when it could
|
|
28
|
+
* be computed.
|
|
29
|
+
*/
|
|
30
|
+
targetElement?: string | null;
|
|
31
|
+
[k: string]: unknown;
|
|
32
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* EARS requirement pattern (Easy Approach to Requirements Syntax).
|
|
10
|
+
* Categorizes criteria by their trigger/condition pattern for better
|
|
11
|
+
* verification step generation.
|
|
12
|
+
*/
|
|
13
|
+
export type EarsPattern =
|
|
14
|
+
| "ubiquitous"
|
|
15
|
+
| "event_driven"
|
|
16
|
+
| "state_driven"
|
|
17
|
+
| "optional"
|
|
18
|
+
| "complex"
|
|
19
|
+
| "unwanted_behavior"
|
|
20
|
+
| "not_applicable";
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { CacheProvenance } from "./CacheProvenance";
|
|
9
|
+
import type { MetricDistribution } from "./MetricDistribution";
|
|
10
|
+
import type { Observation } from "./Observation";
|
|
11
|
+
import type { ObservationCoverage } from "./ObservationCoverage";
|
|
12
|
+
import type { Producer } from "./Producer";
|
|
13
|
+
import type { Provenance } from "./Provenance";
|
|
14
|
+
import type { UnknownCode } from "./UnknownCode";
|
|
15
|
+
import type { UnknownInfo } from "./UnknownInfo";
|
|
16
|
+
import type { UnmeasuredDimension } from "./UnmeasuredDimension";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* One UI Bridge observation: `measured` (with `value`), `absent` (the
|
|
20
|
+
* producer considered at least one item, measured all of it, and found
|
|
21
|
+
* nothing), or `unknown` (the producer could not answer; `unknown.code` says
|
|
22
|
+
* why). `provenance` is always present and every one of its keys is always
|
|
23
|
+
* present.
|
|
24
|
+
*
|
|
25
|
+
* This type describes the wire SHAPE only; it is not a validator. It
|
|
26
|
+
* accepts envelopes the canonical parser refuses: `absent` carrying `value`
|
|
27
|
+
* or `unknown`, a present `"unknown": null`, and `absent` over non-empty
|
|
28
|
+
* `provenance.coverage.unmeasured` or over `provenance.coverage.considered`
|
|
29
|
+
* of 0. Parse an envelope you did not build with
|
|
30
|
+
* `qontinui_vision_core::Observation` (Rust) or a parser enforcing the same
|
|
31
|
+
* rules.
|
|
32
|
+
*/
|
|
33
|
+
export type Observation2 =
|
|
34
|
+
| {
|
|
35
|
+
provenance: Provenance;
|
|
36
|
+
status: "measured";
|
|
37
|
+
value: number;
|
|
38
|
+
[k: string]: unknown;
|
|
39
|
+
}
|
|
40
|
+
| {
|
|
41
|
+
provenance: Provenance;
|
|
42
|
+
status: "absent";
|
|
43
|
+
[k: string]: unknown;
|
|
44
|
+
}
|
|
45
|
+
| {
|
|
46
|
+
provenance: Provenance;
|
|
47
|
+
status: "unknown";
|
|
48
|
+
unknown: UnknownInfo;
|
|
49
|
+
[k: string]: unknown;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The answer of [`edge_timing`].
|
|
54
|
+
*/
|
|
55
|
+
export interface EdgeTiming {
|
|
56
|
+
/**
|
|
57
|
+
* Distinct reported app versions, sorted, `null` (= not reported) first.
|
|
58
|
+
*/
|
|
59
|
+
appVersions: (string | null)[];
|
|
60
|
+
/**
|
|
61
|
+
* `summary.firstResponseMs`.
|
|
62
|
+
*/
|
|
63
|
+
firstResponseMs: MetricDistribution;
|
|
64
|
+
/**
|
|
65
|
+
* `summary.layoutShiftAfterFirstResponseMs`.
|
|
66
|
+
*/
|
|
67
|
+
layoutShiftAfterFirstResponseMs: MetricDistribution;
|
|
68
|
+
/**
|
|
69
|
+
* `summary.layoutShiftCount`.
|
|
70
|
+
*/
|
|
71
|
+
layoutShiftCount: MetricDistribution;
|
|
72
|
+
/**
|
|
73
|
+
* `summary.layoutShiftTotal`.
|
|
74
|
+
*/
|
|
75
|
+
layoutShiftTotal: MetricDistribution;
|
|
76
|
+
/**
|
|
77
|
+
* `summary.longTaskTotalMs`.
|
|
78
|
+
*/
|
|
79
|
+
longTaskTotalMs: MetricDistribution;
|
|
80
|
+
/**
|
|
81
|
+
* Samples (ledger rows) the answer is over.
|
|
82
|
+
*/
|
|
83
|
+
n: number;
|
|
84
|
+
/**
|
|
85
|
+
* Latest `observedAt`; `null` when `n` is 0.
|
|
86
|
+
*/
|
|
87
|
+
newestObservedAt?: string | null;
|
|
88
|
+
/**
|
|
89
|
+
* Every observation's raw values, ordered by `(observedAt,
|
|
90
|
+
* observationId)`, ties broken by the serialized `(appVersion,
|
|
91
|
+
* timeline)`.
|
|
92
|
+
*/
|
|
93
|
+
observations: EdgeTimingRow[];
|
|
94
|
+
/**
|
|
95
|
+
* Earliest `observedAt`; `null` when `n` is 0.
|
|
96
|
+
*/
|
|
97
|
+
oldestObservedAt?: string | null;
|
|
98
|
+
/**
|
|
99
|
+
* `summary.settleMs`.
|
|
100
|
+
*/
|
|
101
|
+
settleMs: MetricDistribution;
|
|
102
|
+
/**
|
|
103
|
+
* Of those, rows with no timeline.
|
|
104
|
+
*/
|
|
105
|
+
withoutTimeline: number;
|
|
106
|
+
[k: string]: unknown;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* One observation's values as its timeline summary stated them,
|
|
110
|
+
* ledger-projected (status, value, coverage and unknown code kept; unknown
|
|
111
|
+
* detail replaced by its code; source and cache keys redacted). `null` (for
|
|
112
|
+
* every metric) = the row has no timeline.
|
|
113
|
+
*/
|
|
114
|
+
export interface EdgeTimingRow {
|
|
115
|
+
/**
|
|
116
|
+
* `null` = not reported.
|
|
117
|
+
*/
|
|
118
|
+
appVersion?: string | null;
|
|
119
|
+
/**
|
|
120
|
+
* `summary.firstResponseMs`.
|
|
121
|
+
*/
|
|
122
|
+
firstResponseMs?: Observation | null;
|
|
123
|
+
/**
|
|
124
|
+
* Whether the row carried a timeline.
|
|
125
|
+
*/
|
|
126
|
+
hasTimeline: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* `summary.layoutShiftAfterFirstResponseMs`.
|
|
129
|
+
*/
|
|
130
|
+
layoutShiftAfterFirstResponseMs?: Observation | null;
|
|
131
|
+
/**
|
|
132
|
+
* `summary.layoutShiftCount`.
|
|
133
|
+
*/
|
|
134
|
+
layoutShiftCount?: Observation2 | null;
|
|
135
|
+
/**
|
|
136
|
+
* `summary.layoutShiftTotal`.
|
|
137
|
+
*/
|
|
138
|
+
layoutShiftTotal?: Observation | null;
|
|
139
|
+
/**
|
|
140
|
+
* `summary.longTaskTotalMs`.
|
|
141
|
+
*/
|
|
142
|
+
longTaskTotalMs?: Observation | null;
|
|
143
|
+
/**
|
|
144
|
+
* The ledger row id — a `/vision/assert` `timeline_ref`.
|
|
145
|
+
*/
|
|
146
|
+
observationId: string;
|
|
147
|
+
/**
|
|
148
|
+
* RFC 3339 UTC.
|
|
149
|
+
*/
|
|
150
|
+
observedAt: string;
|
|
151
|
+
/**
|
|
152
|
+
* `summary.settleMs`.
|
|
153
|
+
*/
|
|
154
|
+
settleMs?: Observation | null;
|
|
155
|
+
[k: string]: unknown;
|
|
156
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The same item in an external system (a Jira issue, say).
|
|
10
|
+
*/
|
|
11
|
+
export interface ExternalRef {
|
|
12
|
+
/**
|
|
13
|
+
* The item's key in that system, e.g. `PAY-123`.
|
|
14
|
+
*/
|
|
15
|
+
key: string;
|
|
16
|
+
/**
|
|
17
|
+
* The external system, e.g. `jira`.
|
|
18
|
+
*/
|
|
19
|
+
system: string;
|
|
20
|
+
url?: string | null;
|
|
21
|
+
[k: string]: unknown;
|
|
22
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { MappingRow } from "./MappingRow";
|
|
9
|
+
import type { TemplateRef } from "./TemplateRef";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A field-level mapping between two systems.
|
|
13
|
+
*/
|
|
14
|
+
export interface InterfaceMappingFrontmatter {
|
|
15
|
+
id: string;
|
|
16
|
+
rows?: MappingRow[];
|
|
17
|
+
source_system: string;
|
|
18
|
+
target_system: string;
|
|
19
|
+
template?: TemplateRef | null;
|
|
20
|
+
[k: string]: unknown;
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Trusted affordance or `pop` rows, excluded from the graph, that ARRIVE at
|
|
10
|
+
* a node from a different node with outcome `changed`. Any of them may be a
|
|
11
|
+
* way in that the user did not need a URL for, so
|
|
12
|
+
* [`requires_prior_knowledge`] cannot list the node as settled. An excluded
|
|
13
|
+
* row that closed `error` or `settle_timeout` (or has no `toNode`) is not
|
|
14
|
+
* here: its recorded destination may be an intermediate state, so it routes
|
|
15
|
+
* to the graph-wide [`JourneyGraph::unknown_destination_arrivals`].
|
|
16
|
+
*/
|
|
17
|
+
export interface JourneyArrivalDoubt {
|
|
18
|
+
/**
|
|
19
|
+
* Arrivals the request's filter excluded.
|
|
20
|
+
*/
|
|
21
|
+
filtered: number;
|
|
22
|
+
/**
|
|
23
|
+
* Withdrawn arrivals.
|
|
24
|
+
*/
|
|
25
|
+
withdrawn: number;
|
|
26
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { JourneyLedgerHealth } from "./JourneyLedgerHealth";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* What a graph was built over — the resolution and freshness of every answer
|
|
12
|
+
* read from it. Rides inside the runner's `provenance.coverage`.
|
|
13
|
+
*/
|
|
14
|
+
export interface JourneyCoverage {
|
|
15
|
+
/**
|
|
16
|
+
* Distinct `appVersion`s among the edges observed, sorted, `null`
|
|
17
|
+
* (= not reported) first.
|
|
18
|
+
*/
|
|
19
|
+
appVersions: (string | null)[];
|
|
20
|
+
/**
|
|
21
|
+
* Valid, live edge rows the filter excluded.
|
|
22
|
+
*/
|
|
23
|
+
edgesFilteredOut: number;
|
|
24
|
+
/**
|
|
25
|
+
* Withdrawn edge rows (`invalidatedAt` set), excluded.
|
|
26
|
+
*/
|
|
27
|
+
edgesInvalidated: number;
|
|
28
|
+
/**
|
|
29
|
+
* Edge rows the graph was built from (after exclusions), INCLUDING
|
|
30
|
+
* `to_node_unobserved` rows.
|
|
31
|
+
*/
|
|
32
|
+
edgesObserved: number;
|
|
33
|
+
/**
|
|
34
|
+
* How many of `edgesObserved` closed as `to_node_unobserved`.
|
|
35
|
+
*/
|
|
36
|
+
edgesToNodeUnobserved: number;
|
|
37
|
+
/**
|
|
38
|
+
* Edges observed that reported no `runId`.
|
|
39
|
+
*/
|
|
40
|
+
edgesWithoutRunId: number;
|
|
41
|
+
/**
|
|
42
|
+
* Open frontier entries per reason — every reason present, zeros
|
|
43
|
+
* included.
|
|
44
|
+
*/
|
|
45
|
+
frontierByReason: {
|
|
46
|
+
[k: string]: number;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Nodes with at least one open frontier entry.
|
|
50
|
+
*/
|
|
51
|
+
frontierNodes: number;
|
|
52
|
+
/**
|
|
53
|
+
* Open frontier entries across the graph.
|
|
54
|
+
*/
|
|
55
|
+
frontierOpen: number;
|
|
56
|
+
/**
|
|
57
|
+
* Whether the ledger these rows were read from is being written — the
|
|
58
|
+
* runner's `/journey/health` block, repeated here so a graph that
|
|
59
|
+
* stopped growing (`schemaAbsent` / `writeFailing`) can never read as a
|
|
60
|
+
* finished one in any query response.
|
|
61
|
+
*/
|
|
62
|
+
ledger: JourneyLedgerHealth;
|
|
63
|
+
/**
|
|
64
|
+
* Latest `observedAt` among the edges observed; `null` = no edges.
|
|
65
|
+
*/
|
|
66
|
+
newestEdgeAt?: string | null;
|
|
67
|
+
/**
|
|
68
|
+
* Distinct nodes (by key) seen as an edge endpoint, as the from-node of
|
|
69
|
+
* an unobserved departure, or as a frontier node.
|
|
70
|
+
*/
|
|
71
|
+
nodesObserved: number;
|
|
72
|
+
/**
|
|
73
|
+
* How many of those are unmodelled (`modelled: false`) — the graph's
|
|
74
|
+
* resolution, as a number.
|
|
75
|
+
*/
|
|
76
|
+
nodesUnmodelled: number;
|
|
77
|
+
/**
|
|
78
|
+
* Earliest `observedAt` among the edges observed; `null` = no edges.
|
|
79
|
+
*/
|
|
80
|
+
oldestEdgeAt?: string | null;
|
|
81
|
+
/**
|
|
82
|
+
* ENTRIES in [`JourneyGraph::rejected`] — one per `(kind, row,
|
|
83
|
+
* reason)`. The sum of their `rows` gives the number of distinct
|
|
84
|
+
* rejected rows (by full content).
|
|
85
|
+
*/
|
|
86
|
+
rowsRejected: number;
|
|
87
|
+
/**
|
|
88
|
+
* Distinct reported `runId`s among the edges observed.
|
|
89
|
+
*/
|
|
90
|
+
runs: number;
|
|
91
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { FrontierEntry } from "./FrontierEntry";
|
|
9
|
+
import type { JourneyCoverage } from "./JourneyCoverage";
|
|
10
|
+
import type { JourneyFilter } from "./JourneyFilter";
|
|
11
|
+
import type { JourneyLedgerHealth } from "./JourneyLedgerHealth";
|
|
12
|
+
import type { JourneyNode } from "./JourneyNode";
|
|
13
|
+
import type { JourneySearchFrontier } from "./JourneySearchFrontier";
|
|
14
|
+
import type { JourneySearchFrontierNode } from "./JourneySearchFrontierNode";
|
|
15
|
+
import type { JourneyUnmeasuredDepartures } from "./JourneyUnmeasuredDepartures";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The answer of [`dead_ends`].
|
|
19
|
+
*/
|
|
20
|
+
export interface JourneyDeadEnds {
|
|
21
|
+
/**
|
|
22
|
+
* The graph's coverage.
|
|
23
|
+
*/
|
|
24
|
+
coverage: JourneyCoverage;
|
|
25
|
+
/**
|
|
26
|
+
* Nodes with no navigation edge to a DIFFERENT node, an empty frontier,
|
|
27
|
+
* no unobserved departure and no unmeasured NAVIGATION departure (an
|
|
28
|
+
* excluded back arrival only makes `backOnly` unknown), sorted by key.
|
|
29
|
+
*/
|
|
30
|
+
deadEnds: JourneyDeadEnd[];
|
|
31
|
+
/**
|
|
32
|
+
* The graph's filter.
|
|
33
|
+
*/
|
|
34
|
+
filterEcho: JourneyFilter;
|
|
35
|
+
/**
|
|
36
|
+
* What the whole graph did not look at.
|
|
37
|
+
*/
|
|
38
|
+
frontier: JourneySearchFrontier;
|
|
39
|
+
/**
|
|
40
|
+
* Nodes with no navigation edge to a different node that still have an
|
|
41
|
+
* open frontier, an unobserved departure or an unmeasured navigation
|
|
42
|
+
* departure — or whose arrival is unconfirmed (`unconfirmedDestination`:
|
|
43
|
+
* no arrival from another node closed `changed` / `no_change`, so it may
|
|
44
|
+
* be an intermediate state), or that the graph as a whole cannot settle
|
|
45
|
+
* (`unsettledByGraph`) — never dead ends. Sorted.
|
|
46
|
+
*/
|
|
47
|
+
unexplored: JourneyUnexploredNode[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A node a user cannot leave by any affordance.
|
|
51
|
+
*/
|
|
52
|
+
export interface JourneyDeadEnd {
|
|
53
|
+
/**
|
|
54
|
+
* `true` when a kept `pop` edge with outcome `changed` leaves this node
|
|
55
|
+
* for a different node — the only way out is the browser's back button,
|
|
56
|
+
* a journey finding rather than an exit. `null` = unknown: no such edge
|
|
57
|
+
* was kept, but a `pop` row from this node was filtered or withdrawn, a
|
|
58
|
+
* kept `pop` edge to another node ended `error` / `settle_timeout`, or a
|
|
59
|
+
* kept `pop` self-loop ended `settle_timeout`
|
|
60
|
+
* (`unmeasuredDepartures.excludedBackArrivals > 0`). `false` otherwise.
|
|
61
|
+
* (A rejected `pop`-claiming row is untrusted and counts in
|
|
62
|
+
* `JourneyGraph::unplaced_rejected_rows`, which lists no node as a dead
|
|
63
|
+
* end at all.)
|
|
64
|
+
*/
|
|
65
|
+
backOnly?: boolean | null;
|
|
66
|
+
/**
|
|
67
|
+
* The node.
|
|
68
|
+
*/
|
|
69
|
+
nodeKey: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A node with no observed affordance exit that was NOT fully looked at, so
|
|
73
|
+
* it cannot be called a dead end.
|
|
74
|
+
*/
|
|
75
|
+
export interface JourneyUnexploredNode {
|
|
76
|
+
/**
|
|
77
|
+
* The node.
|
|
78
|
+
*/
|
|
79
|
+
nodeKey: string;
|
|
80
|
+
/**
|
|
81
|
+
* Its open frontier entries per reason (only reasons present).
|
|
82
|
+
*/
|
|
83
|
+
openByReason: {
|
|
84
|
+
[k: string]: number;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* `true` when no observed arrival at the node closed `changed` or
|
|
88
|
+
* `no_change` (they were all `settle_timeout` / `error`), so nothing
|
|
89
|
+
* confirms it is a real destination rather than an intermediate state
|
|
90
|
+
* ([`JourneyGraphNode::unconfirmed_destination`]).
|
|
91
|
+
*/
|
|
92
|
+
unconfirmedDestination: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Departures from it the navigation edge set left out (filtered,
|
|
95
|
+
* withdrawn, `settle_timeout` / `error` to another node, `settle_timeout`
|
|
96
|
+
* self-loops, rejected frontier rows with a valid node).
|
|
97
|
+
*/
|
|
98
|
+
unmeasuredDepartures: JourneyUnmeasuredDepartures;
|
|
99
|
+
/**
|
|
100
|
+
* Departures from it whose destination was never observed.
|
|
101
|
+
*/
|
|
102
|
+
unobservedDepartures: number;
|
|
103
|
+
/**
|
|
104
|
+
* `true` when the node itself was fully explored but the GRAPH cannot
|
|
105
|
+
* support a dead-end verdict: an unplaced untrusted row (edge or
|
|
106
|
+
* frontier) may belong to it, or the ledger is not `writing`.
|
|
107
|
+
*/
|
|
108
|
+
unsettledByGraph: boolean;
|
|
109
|
+
}
|
|
@@ -17,8 +17,9 @@ import type { JourneyTrigger } from "./JourneyTrigger";
|
|
|
17
17
|
* [`EdgeOutcome::ToNodeUnobserved`]; `no_change` joins nodes with equal
|
|
18
18
|
* keys (a `changed` edge may also join equal keys).
|
|
19
19
|
*
|
|
20
|
-
* The ledger's `timeline` column is
|
|
21
|
-
*
|
|
20
|
+
* The ledger's `timeline` column is not a field here: it holds a
|
|
21
|
+
* `qontinui-vision-core` `ChangeTimeline::for_ledger()` projection (see the
|
|
22
|
+
* module's PRIVACY note); readers select explicit columns rather than `*`.
|
|
22
23
|
*/
|
|
23
24
|
export interface JourneyEdgeObservation {
|
|
24
25
|
/**
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { CacheProvenance } from "./CacheProvenance";
|
|
9
|
+
import type { EdgeTiming } from "./EdgeTiming";
|
|
10
|
+
import type { JourneyFilter } from "./JourneyFilter";
|
|
11
|
+
import type { JourneyLedgerHealth } from "./JourneyLedgerHealth";
|
|
12
|
+
import type { MetricDistribution } from "./MetricDistribution";
|
|
13
|
+
import type { Observation } from "./Observation";
|
|
14
|
+
import type { ObservationCoverage } from "./ObservationCoverage";
|
|
15
|
+
import type { Producer } from "./Producer";
|
|
16
|
+
import type { Provenance } from "./Provenance";
|
|
17
|
+
import type { UnknownCode } from "./UnknownCode";
|
|
18
|
+
import type { UnknownInfo } from "./UnknownInfo";
|
|
19
|
+
import type { UnmeasuredDimension } from "./UnmeasuredDimension";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The answer value of `GET /apps/{app_id}/journey/edge-timing`.
|
|
23
|
+
*
|
|
24
|
+
* **Samples POOL every trigger and outcome of the `(from, to)` pair**:
|
|
25
|
+
* affordance clicks and typed URLs alike, and `changed`, `settle_timeout`
|
|
26
|
+
* and `error` closes alike. Keeping only `affordance` + `changed` would drop
|
|
27
|
+
* exactly the slow and failing interactions (a `settle_timeout` close is the
|
|
28
|
+
* slowest sample there is) and bias every percentile fast. The pooled
|
|
29
|
+
* composition is reported in `samplesByOutcome` / `samplesByTrigger`, so a
|
|
30
|
+
* reader who wants one slice can see whether the pool is dominated by
|
|
31
|
+
* another.
|
|
32
|
+
*/
|
|
33
|
+
export interface JourneyEdgeTimingAnswer {
|
|
34
|
+
/**
|
|
35
|
+
* Live (not withdrawn) observations of this edge the filter removed.
|
|
36
|
+
*/
|
|
37
|
+
edgesFilteredOut: number;
|
|
38
|
+
/**
|
|
39
|
+
* Withdrawn observations of this edge, excluded.
|
|
40
|
+
*/
|
|
41
|
+
edgesInvalidated: number;
|
|
42
|
+
/**
|
|
43
|
+
* The filter the observations were narrowed by.
|
|
44
|
+
*/
|
|
45
|
+
filterEcho: JourneyFilter;
|
|
46
|
+
/**
|
|
47
|
+
* The from-node key asked about.
|
|
48
|
+
*/
|
|
49
|
+
fromKey: string;
|
|
50
|
+
/**
|
|
51
|
+
* The ledger the rows were read from.
|
|
52
|
+
*/
|
|
53
|
+
ledger: JourneyLedgerHealth;
|
|
54
|
+
/**
|
|
55
|
+
* Untrusted EDGE rows anywhere in the read (an edge row that fails
|
|
56
|
+
* `validate()` or whose `observedAt` is not RFC 3339) — the edge rows
|
|
57
|
+
* the graph routes list as `rejected` (that list also holds frontier
|
|
58
|
+
* rows; this count does not). Their node keys cannot be trusted, so none is matched
|
|
59
|
+
* to this edge, and any of them may be one of its observations; never
|
|
60
|
+
* samples, never "filtered out".
|
|
61
|
+
*/
|
|
62
|
+
rowsRejected: number;
|
|
63
|
+
/**
|
|
64
|
+
* Samples per edge outcome (wire string), pooled into `timing`.
|
|
65
|
+
*/
|
|
66
|
+
samplesByOutcome: {
|
|
67
|
+
[k: string]: number;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Samples per navigation trigger (wire string), pooled into `timing`.
|
|
71
|
+
*/
|
|
72
|
+
samplesByTrigger: {
|
|
73
|
+
[k: string]: number;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Observations whose stored timeline did not parse (counted in `timing`
|
|
77
|
+
* as without a timeline).
|
|
78
|
+
*/
|
|
79
|
+
timelinesUnparseable: number;
|
|
80
|
+
/**
|
|
81
|
+
* The distribution, with its sample size.
|
|
82
|
+
*/
|
|
83
|
+
timing: EdgeTiming;
|
|
84
|
+
/**
|
|
85
|
+
* The to-node key asked about.
|
|
86
|
+
*/
|
|
87
|
+
toKey: string;
|
|
88
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Narrows the EDGE set a graph is built from. Staleness is a filter, not a
|
|
10
|
+
* verdict: the caller decides what window to ask about, and every result
|
|
11
|
+
* echoes the filter it was computed under (`filterEcho`).
|
|
12
|
+
*
|
|
13
|
+
* The frontier is never filtered: an open frontier entry is current state,
|
|
14
|
+
* and hiding one behind an edge filter would turn "not looked at" into
|
|
15
|
+
* "nothing there".
|
|
16
|
+
*
|
|
17
|
+
* `since` is a `chrono::DateTime<Utc>` (serialized RFC 3339), an exception
|
|
18
|
+
* to the crate's string-timestamp convention for the same reason as
|
|
19
|
+
* `page::KeysetPosition`: it is compared, not merely carried.
|
|
20
|
+
*/
|
|
21
|
+
export interface JourneyFilter {
|
|
22
|
+
/**
|
|
23
|
+
* Keep edges whose `appVersion` equals this; `None` = every version.
|
|
24
|
+
* An edge that reported no version never matches a set filter.
|
|
25
|
+
*/
|
|
26
|
+
appVersion: string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Keep edges of this run kind; `None` = every kind.
|
|
29
|
+
*/
|
|
30
|
+
runKind: ("agent_action" | "explorer" | "passive_session") | null;
|
|
31
|
+
/**
|
|
32
|
+
* Keep edges with `observedAt >= since`; `None` = no lower bound.
|
|
33
|
+
*/
|
|
34
|
+
since: string | null;
|
|
35
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* This file was automatically generated.
|
|
4
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with
|
|
5
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { FrontierEntry } from "./FrontierEntry";
|
|
9
|
+
import type { JourneyCoverage } from "./JourneyCoverage";
|
|
10
|
+
import type { JourneyFilter } from "./JourneyFilter";
|
|
11
|
+
import type { JourneyLedgerHealth } from "./JourneyLedgerHealth";
|
|
12
|
+
import type { JourneyNode } from "./JourneyNode";
|
|
13
|
+
import type { JourneySearchFrontier } from "./JourneySearchFrontier";
|
|
14
|
+
import type { JourneySearchFrontierNode } from "./JourneySearchFrontierNode";
|
|
15
|
+
import type { JourneyUnmeasuredDepartures } from "./JourneyUnmeasuredDepartures";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The answer of [`frontier`] — the open frontier of one node, or of the
|
|
19
|
+
* whole graph.
|
|
20
|
+
*/
|
|
21
|
+
export interface JourneyFrontier {
|
|
22
|
+
/**
|
|
23
|
+
* The graph's coverage.
|
|
24
|
+
*/
|
|
25
|
+
coverage: JourneyCoverage;
|
|
26
|
+
/**
|
|
27
|
+
* The open, listable frontier entries, sorted by `(nodeKey,
|
|
28
|
+
* affordanceFingerprint)`.
|
|
29
|
+
*/
|
|
30
|
+
entries: FrontierEntry[];
|
|
31
|
+
/**
|
|
32
|
+
* The graph's filter.
|
|
33
|
+
*/
|
|
34
|
+
filterEcho: JourneyFilter;
|
|
35
|
+
/**
|
|
36
|
+
* Everything not looked at in the part asked about — including rows
|
|
37
|
+
* that could not be listed (`rejected_frontier`). An EMPTY `entries` is
|
|
38
|
+
* a real "nothing left to explore" only when this is settled and
|
|
39
|
+
* [`JourneySearchFrontier::unsettled_because`] returns `None`.
|
|
40
|
+
*/
|
|
41
|
+
frontier: JourneySearchFrontier;
|
|
42
|
+
/**
|
|
43
|
+
* The node asked about; `null` = the whole graph.
|
|
44
|
+
*/
|
|
45
|
+
nodeKey?: string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Whether that node was observed (always `true` for the whole graph).
|
|
48
|
+
* `false` means "never seen", never "nothing open there".
|
|
49
|
+
*/
|
|
50
|
+
nodeObserved: boolean;
|
|
51
|
+
}
|