lastlight-workflow-engine 0.2.0 → 0.3.1
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/core/loop-eval.d.ts +18 -1
- package/dist/core/loop-eval.js +32 -4
- package/dist/core/loop-eval.js.map +1 -1
- package/dist/core/phase-executor.d.ts +27 -0
- package/dist/core/phase-executor.js +167 -15
- package/dist/core/phase-executor.js.map +1 -1
- package/dist/core/phase-ref.d.ts +12 -4
- package/dist/core/phase-ref.js +18 -3
- package/dist/core/phase-ref.js.map +1 -1
- package/dist/core/scheduler.js +38 -6
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/schema.d.ts +28 -5
- package/dist/core/schema.js +92 -4
- package/dist/core/schema.js.map +1 -1
- package/dist/core/templated-number.d.ts +78 -0
- package/dist/core/templated-number.js +100 -0
- package/dist/core/templated-number.js.map +1 -0
- package/dist/core/templates.d.ts +11 -0
- package/dist/core/templates.js +29 -21
- package/dist/core/templates.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/test-support/fakes.d.ts +42 -1
- package/dist/test-support/fakes.js +0 -0
- package/dist/test-support/fakes.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A numeric phase budget that may be READ FROM THE RUN'S CONTEXT rather than
|
|
3
|
+
* frozen in the YAML.
|
|
4
|
+
*
|
|
5
|
+
* ## Why this exists
|
|
6
|
+
*
|
|
7
|
+
* `fix.localIterations` and `fix.gateTimeoutSeconds` were parsed, typed,
|
|
8
|
+
* clamped per repository, displayed by the CLI and documented on both doc
|
|
9
|
+
* surfaces — and read by nothing (issue #256). The two numbers that actually
|
|
10
|
+
* governed the fix loop were the literals in `workflows/pr-fix.yaml` and
|
|
11
|
+
* `workflows/dependabot-ci-fix.yaml`, whose comments asked the reader to "keep
|
|
12
|
+
* the two in step by hand". A config key whose only effect is to disagree with
|
|
13
|
+
* the running value is worse than no key: the admin panel, `lastlight repo
|
|
14
|
+
* config show` and a repo's `.lastlight/lastlight.yml` all reported a budget
|
|
15
|
+
* the loop was not running under.
|
|
16
|
+
*
|
|
17
|
+
* ## The shape, and why it is not a bare `{{template}}`
|
|
18
|
+
*
|
|
19
|
+
* ```yaml
|
|
20
|
+
* timeout_seconds: { from: fix.gateTimeoutSeconds, default: 900 }
|
|
21
|
+
* generic_loop:
|
|
22
|
+
* max_iterations: { from: fix.localIterations, default: 2 }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* A bare `"{{fix.gateTimeoutSeconds}}"` would have been shorter and worse.
|
|
26
|
+
* `renderTemplate` resolves an absent key to the EMPTY STRING, so every
|
|
27
|
+
* unresolvable reference would need an invented fallback somewhere in the
|
|
28
|
+
* engine — a made-up number for a phase's kill timeout, chosen far from the
|
|
29
|
+
* workflow that depends on it. Here the fallback is stated by the workflow
|
|
30
|
+
* itself, next to the reference, and it is the packaged value: the YAML still
|
|
31
|
+
* says what this loop does out of the box, and the `from:` says where a
|
|
32
|
+
* deployment or a repository may move it. (It also keeps `{{` out of a field
|
|
33
|
+
* neighbouring `generic_loop.until_bash`, which `validateShellCommand` rejects
|
|
34
|
+
* outright.)
|
|
35
|
+
*
|
|
36
|
+
* ## What resolution guarantees
|
|
37
|
+
*
|
|
38
|
+
* The `from:` path is looked up in the run's template context — the same
|
|
39
|
+
* two-level dot walk `{{a.b}}` uses, so `fix.localIterations` resolves against
|
|
40
|
+
* the EFFECTIVE, already repo-clamped `fix` block seeded on the context by the
|
|
41
|
+
* runner. A repo that lowered its own budget is honoured for free; a repo that
|
|
42
|
+
* tried to raise it was clamped before it ever reached here.
|
|
43
|
+
*
|
|
44
|
+
* Anything else — key absent, non-numeric, zero, negative, `NaN` — falls back
|
|
45
|
+
* to `default` and warns. It never throws and never yields a non-positive
|
|
46
|
+
* number, because both consumers are a kill timeout and a loop bound, where
|
|
47
|
+
* `0` means "never run" and a negative means nothing at all.
|
|
48
|
+
*/
|
|
49
|
+
import { z } from "zod";
|
|
50
|
+
import { lookupContextKey } from "./templates.js";
|
|
51
|
+
/**
|
|
52
|
+
* A phase budget: a literal, or a reference into the run context with the
|
|
53
|
+
* packaged value as its declared fallback.
|
|
54
|
+
*
|
|
55
|
+
* `.strict()` on the object arm so a typo (`form:`, `defaults:`) is a load
|
|
56
|
+
* error naming the workflow, not a silent fall back to a default the author
|
|
57
|
+
* never meant to be operative.
|
|
58
|
+
*/
|
|
59
|
+
export const TemplatedNumberSchema = z.union([
|
|
60
|
+
z.number().int().positive(),
|
|
61
|
+
z
|
|
62
|
+
.object({
|
|
63
|
+
/** Dotted path into the run's template context, e.g. `fix.localIterations`. */
|
|
64
|
+
from: z.string().min(1),
|
|
65
|
+
/** The packaged value — used verbatim when `from` resolves to nothing usable. */
|
|
66
|
+
default: z.number().int().positive(),
|
|
67
|
+
})
|
|
68
|
+
.strict(),
|
|
69
|
+
]);
|
|
70
|
+
/**
|
|
71
|
+
* Resolve a {@link TemplatedNumber} against a run's context.
|
|
72
|
+
*
|
|
73
|
+
* `undefined` in, `undefined` out — the fields this governs are optional and
|
|
74
|
+
* their callers supply their own absent-value behaviour (`?? 30` for a
|
|
75
|
+
* command phase's timeout).
|
|
76
|
+
*
|
|
77
|
+
* A resolved non-integer is rounded UP rather than rejected: the only duration
|
|
78
|
+
* key that reaches here (`fix.gateTimeoutSeconds`) is documented as accepting
|
|
79
|
+
* any positive number, and truncating a test-suite budget downward is the one
|
|
80
|
+
* rounding direction that can turn a passing gate red.
|
|
81
|
+
*/
|
|
82
|
+
export function resolveTemplatedNumber(value, ctx,
|
|
83
|
+
/** Names the phase/field in the warning, e.g. `fix.timeout_seconds`. */
|
|
84
|
+
where) {
|
|
85
|
+
if (value === undefined)
|
|
86
|
+
return undefined;
|
|
87
|
+
if (typeof value === "number")
|
|
88
|
+
return value;
|
|
89
|
+
const raw = lookupContextKey(ctx, value.from);
|
|
90
|
+
const n = typeof raw === "number" ? raw : typeof raw === "string" ? Number(raw) : Number.NaN;
|
|
91
|
+
if (!Number.isFinite(n) || n <= 0) {
|
|
92
|
+
// Not an error: a workflow may legitimately run in a context that carries
|
|
93
|
+
// no `fix` block (a manual trigger, a resumed pre-upgrade run). The warning
|
|
94
|
+
// is what stops a MISSPELLED `from:` from looking identical to that.
|
|
95
|
+
console.warn(`[runner] ${where}: {{${value.from}}} did not resolve to a positive number — using ${value.default}`);
|
|
96
|
+
return value.default;
|
|
97
|
+
}
|
|
98
|
+
return Math.ceil(n);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=templated-number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templated-number.js","sourceRoot":"","sources":["../../src/core/templated-number.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAwB,MAAM,gBAAgB,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3B,CAAC;SACE,MAAM,CAAC;QACN,+EAA+E;QAC/E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,iFAAiF;QACjF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACrC,CAAC;SACD,MAAM,EAAE;CACZ,CAAC,CAAC;AAIH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAkC,EAClC,GAAoB;AACpB,wEAAwE;AACxE,KAAa;IAEb,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5C,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,0EAA0E;QAC1E,4EAA4E;QAC5E,qEAAqE;QACrE,OAAO,CAAC,IAAI,CACV,YAAY,KAAK,OAAO,KAAK,CAAC,IAAI,mDAAmD,KAAK,CAAC,OAAO,EAAE,CACrG,CAAC;QACF,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC"}
|
package/dist/core/templates.d.ts
CHANGED
|
@@ -81,6 +81,17 @@ export interface TemplateContext {
|
|
|
81
81
|
[key: string]: unknown;
|
|
82
82
|
}
|
|
83
83
|
export declare function slugify(text: string): string;
|
|
84
|
+
/**
|
|
85
|
+
* Walk a dotted key like `scratch.socratic.ready` through `ctx`, falling back
|
|
86
|
+
* to `ctx.phaseOutputs` for the first segment. Returns undefined on any
|
|
87
|
+
* missing intermediate.
|
|
88
|
+
*
|
|
89
|
+
* Exported because `{{a.b}}` is no longer the only reader of the context:
|
|
90
|
+
* `resolveTemplatedNumber` (./templated-number.ts) resolves a phase budget's
|
|
91
|
+
* `from:` path, and it must agree with what a prompt would render for the same
|
|
92
|
+
* key — one walk, not two.
|
|
93
|
+
*/
|
|
94
|
+
export declare function lookupContextKey(ctx: TemplateContext, key: string): unknown;
|
|
84
95
|
/**
|
|
85
96
|
* Render a template string with the given context.
|
|
86
97
|
* Processes: {{#if}}, {{slugify}}, {{branchUrl}}, {{varName}}.
|
package/dist/core/templates.js
CHANGED
|
@@ -14,6 +14,34 @@ export function slugify(text) {
|
|
|
14
14
|
.replace(/^-|-$/g, "")
|
|
15
15
|
.slice(0, 40);
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Walk a dotted key like `scratch.socratic.ready` through `ctx`, falling back
|
|
19
|
+
* to `ctx.phaseOutputs` for the first segment. Returns undefined on any
|
|
20
|
+
* missing intermediate.
|
|
21
|
+
*
|
|
22
|
+
* Exported because `{{a.b}}` is no longer the only reader of the context:
|
|
23
|
+
* `resolveTemplatedNumber` (./templated-number.ts) resolves a phase budget's
|
|
24
|
+
* `from:` path, and it must agree with what a prompt would render for the same
|
|
25
|
+
* key — one walk, not two.
|
|
26
|
+
*/
|
|
27
|
+
export function lookupContextKey(ctx, key) {
|
|
28
|
+
const parts = key.split(".");
|
|
29
|
+
if (parts.length === 1) {
|
|
30
|
+
const val = ctx[key];
|
|
31
|
+
if (val !== undefined && val !== null)
|
|
32
|
+
return val;
|
|
33
|
+
return ctx.phaseOutputs?.[key];
|
|
34
|
+
}
|
|
35
|
+
let cur = ctx[parts[0]];
|
|
36
|
+
if (cur === undefined || cur === null)
|
|
37
|
+
cur = ctx.phaseOutputs?.[parts[0]];
|
|
38
|
+
for (let i = 1; i < parts.length; i++) {
|
|
39
|
+
if (cur === null || typeof cur !== "object")
|
|
40
|
+
return undefined;
|
|
41
|
+
cur = cur[parts[i]];
|
|
42
|
+
}
|
|
43
|
+
return cur;
|
|
44
|
+
}
|
|
17
45
|
/**
|
|
18
46
|
* Render a template string with the given context.
|
|
19
47
|
* Processes: {{#if}}, {{slugify}}, {{branchUrl}}, {{varName}}.
|
|
@@ -30,27 +58,7 @@ export function renderTemplate(template, ctx) {
|
|
|
30
58
|
return typeof val === "string" ? val : String(val?.output ?? JSON.stringify(val));
|
|
31
59
|
});
|
|
32
60
|
}
|
|
33
|
-
|
|
34
|
-
// back to ctx.phaseOutputs for the first segment. Returns undefined on
|
|
35
|
-
// any missing intermediate.
|
|
36
|
-
const walkKey = (key) => {
|
|
37
|
-
const parts = key.split(".");
|
|
38
|
-
if (parts.length === 1) {
|
|
39
|
-
const val = ctx[key];
|
|
40
|
-
if (val !== undefined && val !== null)
|
|
41
|
-
return val;
|
|
42
|
-
return ctx.phaseOutputs?.[key];
|
|
43
|
-
}
|
|
44
|
-
let cur = ctx[parts[0]];
|
|
45
|
-
if (cur === undefined || cur === null)
|
|
46
|
-
cur = ctx.phaseOutputs?.[parts[0]];
|
|
47
|
-
for (let i = 1; i < parts.length; i++) {
|
|
48
|
-
if (cur === null || typeof cur !== "object")
|
|
49
|
-
return undefined;
|
|
50
|
-
cur = cur[parts[i]];
|
|
51
|
-
}
|
|
52
|
-
return cur;
|
|
53
|
-
};
|
|
61
|
+
const walkKey = (key) => lookupContextKey(ctx, key);
|
|
54
62
|
// 1. Conditional blocks: {{#if varName}}...{{/if}} (supports dot notation).
|
|
55
63
|
// Key segments allow hyphens so phase/model keys like `pr-fix` resolve
|
|
56
64
|
// (e.g. {{models.pr-fix}}); \w alone would leave them unrendered.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2GH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
export * from "./core/types.js";
|
|
11
11
|
export * from "./core/schema.js";
|
|
12
12
|
export * from "./core/templates.js";
|
|
13
|
+
export * from "./core/templated-number.js";
|
|
13
14
|
export * from "./core/dag.js";
|
|
14
15
|
export * from "./core/verdict.js";
|
|
15
16
|
export * from "./core/phase-ref.js";
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
export * from "./core/types.js";
|
|
12
12
|
export * from "./core/schema.js";
|
|
13
13
|
export * from "./core/templates.js";
|
|
14
|
+
export * from "./core/templated-number.js";
|
|
14
15
|
export * from "./core/dag.js";
|
|
15
16
|
export * from "./core/verdict.js";
|
|
16
17
|
export * from "./core/phase-ref.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mEAAmE;AACnE,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AAEpC,iDAAiD;AACjD,cAAc,kBAAkB,CAAC;AAEjC,8EAA8E;AAC9E,qEAAqE;AACrE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mEAAmE;AACnE,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AAEpC,iDAAiD;AACjD,cAAc,kBAAkB,CAAC;AAEjC,8EAA8E;AAC9E,qEAAqE;AACrE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Engine-pure: imports only the port interfaces + core types.
|
|
8
8
|
*/
|
|
9
|
-
import type { AgentPort, AgentRunOpts, AssetLoader, ExecutionLedger, LivenessPort, ObservabilityPort, PhaseReporter, PhaseResult, RunStore, StepStatus, WorkflowStateStore } from "../ports/ports.js";
|
|
9
|
+
import type { AgentPort, AgentRunOpts, AssetLoader, ExecutionLedger, LivenessPort, ObservabilityPort, PhaseHistoryEntry, PhaseReporter, PhaseResult, RunStore, StepStatus, WorkflowStateStore } from "../ports/ports.js";
|
|
10
10
|
import type { CommandSpec, ExecutionResult, ExecutorConfig } from "../core/types.js";
|
|
11
11
|
export interface RecordedAgentCall {
|
|
12
12
|
kind: "agent" | "command";
|
|
@@ -31,6 +31,31 @@ export declare class FakeAgentPort implements AgentPort {
|
|
|
31
31
|
runAgent(prompt: string, config: ExecutorConfig, opts: AgentRunOpts): Promise<ExecutionResult>;
|
|
32
32
|
runCommand(spec: CommandSpec, config: ExecutorConfig, opts: AgentRunOpts): Promise<ExecutionResult>;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* One row of the in-memory `executions` ledger — the fake's mirror of the
|
|
36
|
+
* production table, kept wide enough to assert the things the real table is
|
|
37
|
+
* read for: is it still open (`finished === false`, i.e. `finished_at IS NULL`),
|
|
38
|
+
* when did it start, and what verdict did it carry (`stopReason`).
|
|
39
|
+
*
|
|
40
|
+
* `startedAt` matters on its own: a long in-sandbox step (the generic loop's
|
|
41
|
+
* `until_bash` exit check) is only visible while it is in flight because it has
|
|
42
|
+
* an OPEN row with a start time — that pair is how every renderer draws "in
|
|
43
|
+
* progress, since N".
|
|
44
|
+
*/
|
|
45
|
+
export interface FakeExecutionRow {
|
|
46
|
+
id: string;
|
|
47
|
+
/** `<workflow>:<phase>` — the ledger dedup key, mirrored to `skill`. */
|
|
48
|
+
dedupKey: string;
|
|
49
|
+
triggerId: string;
|
|
50
|
+
workflowRunId?: string;
|
|
51
|
+
startedAt: string;
|
|
52
|
+
success?: boolean;
|
|
53
|
+
finished: boolean;
|
|
54
|
+
stopReason?: string;
|
|
55
|
+
durationMs?: number;
|
|
56
|
+
error?: string;
|
|
57
|
+
output?: string;
|
|
58
|
+
}
|
|
34
59
|
/**
|
|
35
60
|
* Map-backed {@link WorkflowStateStore} — the resume/dedup ledger + run store,
|
|
36
61
|
* with no better-sqlite3. Reproduces the production resume caveat: a phase whose
|
|
@@ -42,8 +67,24 @@ export declare class InMemoryStateStore implements WorkflowStateStore {
|
|
|
42
67
|
private runsById;
|
|
43
68
|
private ledger;
|
|
44
69
|
private byExecId;
|
|
70
|
+
/** Every row ever started, in insertion order (the ledger Map dedups by key). */
|
|
71
|
+
private readonly rows;
|
|
45
72
|
constructor(runId?: string);
|
|
46
73
|
private ensureRun;
|
|
74
|
+
/**
|
|
75
|
+
* Every `executions` row, oldest first — the ledger Map is keyed by dedup key
|
|
76
|
+
* and so can't be enumerated in start order. Optionally filtered to rows whose
|
|
77
|
+
* dedup key ends in `:<suffix>` (i.e. one phase label).
|
|
78
|
+
*
|
|
79
|
+
* Returns **snapshots**, not the live rows. The whole point of this accessor
|
|
80
|
+
* is observing a row while its step is still in flight (an open `until_bash`
|
|
81
|
+
* check, say); handing back the live object would let the later
|
|
82
|
+
* `recordFinish` rewrite what the test believes it saw, and the assertion
|
|
83
|
+
* would pass or fail on timing rather than on behaviour.
|
|
84
|
+
*/
|
|
85
|
+
executionRows(phaseSuffix?: string): readonly FakeExecutionRow[];
|
|
86
|
+
/** The run's `phase_history`, oldest first. */
|
|
87
|
+
phaseHistory(runId: string): readonly PhaseHistoryEntry[];
|
|
47
88
|
readonly runs: RunStore;
|
|
48
89
|
readonly executions: ExecutionLedger;
|
|
49
90
|
}
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakes.js","sourceRoot":"","sources":["../../src/test-support/fakes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsCH,MAAM,EAAE,GAAoB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AAEnF;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACf,KAAK,GAAwB,EAAE,CAAC;IACjC,KAAK,GAAsB,EAAE,CAAC;IAC9B,QAAQ,CAAkB;IAElC,YAAY,WAA4B,EAAE;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,iDAAiD;IACjD,MAAM,CAAC,GAAG,OAA0B;QAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,IAAI;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,MAAsB,EAAE,IAAkB;QACvE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,SAAS;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAiB,EAAE,MAAsB,EAAE,IAAkB;QAC5E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"fakes.js","sourceRoot":"","sources":["../../src/test-support/fakes.ts"],"names":[],"mappings":"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"}
|