@telora/daemon 0.22.293 → 0.22.306

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/build-info.json +2 -2
  2. package/dist/completion/review-exit/review-census-record.d.ts.map +1 -1
  3. package/dist/completion/review-exit/review-census-record.js +1 -0
  4. package/dist/completion/review-exit/review-census-record.js.map +1 -1
  5. package/dist/completion/review-exit/review-exit-deps.d.ts +1 -0
  6. package/dist/completion/review-exit/review-exit-deps.d.ts.map +1 -1
  7. package/dist/completion/review-exit/review-exit-phase.js +7 -4
  8. package/dist/completion/review-exit/review-exit-phase.js.map +1 -1
  9. package/dist/completion/review-exit-holds/review-exit-verdict-gate.d.ts +17 -1
  10. package/dist/completion/review-exit-holds/review-exit-verdict-gate.d.ts.map +1 -1
  11. package/dist/completion/review-exit-holds/review-exit-verdict-gate.js +21 -0
  12. package/dist/completion/review-exit-holds/review-exit-verdict-gate.js.map +1 -1
  13. package/dist/completion/state-cascade/standing-approval-convergence.d.ts +7 -2
  14. package/dist/completion/state-cascade/standing-approval-convergence.d.ts.map +1 -1
  15. package/dist/completion/state-cascade/standing-approval-convergence.js +56 -31
  16. package/dist/completion/state-cascade/standing-approval-convergence.js.map +1 -1
  17. package/dist/completion/state-cascade/standing-approval-stranded.d.ts +39 -0
  18. package/dist/completion/state-cascade/standing-approval-stranded.d.ts.map +1 -0
  19. package/dist/completion/state-cascade/standing-approval-stranded.js +142 -0
  20. package/dist/completion/state-cascade/standing-approval-stranded.js.map +1 -0
  21. package/dist/composition/commit-gate-context.d.ts.map +1 -1
  22. package/dist/composition/commit-gate-context.js +2 -1
  23. package/dist/composition/commit-gate-context.js.map +1 -1
  24. package/dist/composition/standing-approval-context.d.ts.map +1 -1
  25. package/dist/composition/standing-approval-context.js +2 -0
  26. package/dist/composition/standing-approval-context.js.map +1 -1
  27. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  28. package/dist/prompt-sections/persona-sections.js +3 -0
  29. package/dist/prompt-sections/persona-sections.js.map +1 -1
  30. package/dist/prompt-sections/routing-decider-sections.d.ts.map +1 -1
  31. package/dist/prompt-sections/routing-decider-sections.js +2 -0
  32. package/dist/prompt-sections/routing-decider-sections.js.map +1 -1
  33. package/dist/queries/api-client/shared.js +1 -1
  34. package/dist/queries/escalations/cause-key.d.ts +11 -0
  35. package/dist/queries/escalations/cause-key.d.ts.map +1 -1
  36. package/dist/queries/escalations/cause-key.js +15 -0
  37. package/dist/queries/escalations/cause-key.js.map +1 -1
  38. package/dist/queries/escalations/escalation-consumption.d.ts.map +1 -1
  39. package/dist/queries/escalations/escalation-consumption.js +1 -0
  40. package/dist/queries/escalations/escalation-consumption.js.map +1 -1
  41. package/dist/queries/escalations/filing-observation.d.ts.map +1 -1
  42. package/dist/queries/escalations/filing-observation.js +1 -0
  43. package/dist/queries/escalations/filing-observation.js.map +1 -1
  44. package/dist/supervision/agent-resolvable-promotion.d.ts +14 -2
  45. package/dist/supervision/agent-resolvable-promotion.d.ts.map +1 -1
  46. package/dist/supervision/agent-resolvable-promotion.js +24 -3
  47. package/dist/supervision/agent-resolvable-promotion.js.map +1 -1
  48. package/dist/supervision/escalation-filing.js +1 -1
  49. package/dist/supervision/escalation-suppression.js +1 -1
  50. package/dist/supervision/focus-delivery-aggregate-phase.d.ts.map +1 -1
  51. package/dist/supervision/focus-delivery-aggregate-phase.js +1 -0
  52. package/dist/supervision/focus-delivery-aggregate-phase.js.map +1 -1
  53. package/dist/supervision/stop-registry.d.ts +1 -0
  54. package/dist/supervision/stop-registry.d.ts.map +1 -1
  55. package/dist/supervision/stop-rows-delivery.d.ts +6 -0
  56. package/dist/supervision/stop-rows-delivery.d.ts.map +1 -1
  57. package/dist/supervision/stop-rows-delivery.js +20 -0
  58. package/dist/supervision/stop-rows-delivery.js.map +1 -1
  59. package/dist/testing/fixtures/api-client.js +1 -1
  60. package/dist/testing/fixtures/index.js +1 -1
  61. package/dist/types/index.js +1 -1
  62. package/dist/verify/gate-config/commit-gate-configured.d.ts +2 -0
  63. package/dist/verify/gate-config/commit-gate-configured.d.ts.map +1 -1
  64. package/dist/verify/gate-config/commit-gate-configured.js.map +1 -1
  65. package/dist/verify/shortfalls/each-table.d.ts +45 -0
  66. package/dist/verify/shortfalls/each-table.d.ts.map +1 -0
  67. package/dist/verify/shortfalls/each-table.js +219 -0
  68. package/dist/verify/shortfalls/each-table.js.map +1 -0
  69. package/dist/verify/shortfalls/each-title-render.d.ts +67 -0
  70. package/dist/verify/shortfalls/each-title-render.d.ts.map +1 -0
  71. package/dist/verify/shortfalls/each-title-render.js +473 -0
  72. package/dist/verify/shortfalls/each-title-render.js.map +1 -0
  73. package/dist/verify/shortfalls/generated-test-titles.d.ts +18 -0
  74. package/dist/verify/shortfalls/generated-test-titles.d.ts.map +1 -0
  75. package/dist/verify/shortfalls/generated-test-titles.js +232 -0
  76. package/dist/verify/shortfalls/generated-test-titles.js.map +1 -0
  77. package/dist/verify/shortfalls/ruling-evidence-resolution.d.ts.map +1 -1
  78. package/dist/verify/shortfalls/ruling-evidence-resolution.js +6 -2
  79. package/dist/verify/shortfalls/ruling-evidence-resolution.js.map +1 -1
  80. package/package.json +1 -1
@@ -0,0 +1,219 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/verify/shortfalls/each-title-render.test.ts,
3
+ // packages/daemon/src/verify/shortfalls/generated-test-titles.test.ts
4
+ // PINNED-BY-END
5
+ /**
6
+ * The rows of a `.each` table the source writes out LITERALLY, and the text a
7
+ * title placeholder renders each row value as.
8
+ *
9
+ * verify/shortfalls/generated-test-titles.ts expands an each-style title against
10
+ * its table so a cited name resolves only when a row the table really holds
11
+ * produces it: `it.each(['a', 'b'])('case %s')` generates `case a` and `case b`,
12
+ * never `case z`. This module reads the table: an array literal (`[...]`,
13
+ * optionally `as const`) of string / number / boolean / null / undefined values,
14
+ * arrays and plain objects, or a tagged-template table whose cells are each one
15
+ * `${literal}`. Anything else a table holds -- an identifier, a call, an arrow, a
16
+ * spread, a template with a substitution -- is UNKNOWN: a row value the title
17
+ * never renders costs nothing, and a placeholder that WOULD render one produces
18
+ * no pattern for that row (fail closed). A table that is not a literal at all
19
+ * (`it.each(CASES)`) yields no rows.
20
+ * Rendering a row into a title is verify/shortfalls/each-title-render.ts.
21
+ * Pure; nothing is evaluated.
22
+ *
23
+ * @module verify/shortfalls/each-table
24
+ */
25
+ /** A value that is not a literal the table spells out. */
26
+ export const UNKNOWN = Symbol('unknown-each-value');
27
+ const CLOSERS = new Set([',', ']', '}', ')']);
28
+ /** Skip whitespace and comments from `i`. */
29
+ function skipSpace(s, i) {
30
+ for (;;) {
31
+ while (i < s.length && /\s/.test(s[i] ?? ''))
32
+ i++;
33
+ if (s.startsWith('//', i)) {
34
+ const nl = s.indexOf('\n', i);
35
+ i = nl === -1 ? s.length : nl + 1;
36
+ continue;
37
+ }
38
+ if (s.startsWith('/*', i)) {
39
+ const close = s.indexOf('*/', i + 2);
40
+ i = close === -1 ? s.length : close + 2;
41
+ continue;
42
+ }
43
+ return i;
44
+ }
45
+ }
46
+ /** The index just past a quoted or template string opening at `i` (substitutions included). */
47
+ function skipString(s, i) {
48
+ const quote = s[i];
49
+ let j = i + 1;
50
+ while (j < s.length && s[j] !== quote) {
51
+ if (s[j] === '\\') {
52
+ j += 2;
53
+ continue;
54
+ }
55
+ if (quote === '`' && s[j] === '$' && s[j + 1] === '{') {
56
+ j = skipBalanced(s, j + 1);
57
+ continue;
58
+ }
59
+ j++;
60
+ }
61
+ return j + 1;
62
+ }
63
+ /** The index just past the bracket group opening at `i`. */
64
+ function skipBalanced(s, i) {
65
+ let depth = 0;
66
+ let j = i;
67
+ while (j < s.length) {
68
+ const c = s[j] ?? '';
69
+ if (c === '"' || c === "'" || c === '`') {
70
+ j = skipString(s, j);
71
+ continue;
72
+ }
73
+ if (c === '(' || c === '[' || c === '{')
74
+ depth++;
75
+ else if (c === ')' || c === ']' || c === '}') {
76
+ depth--;
77
+ if (depth === 0)
78
+ return j + 1;
79
+ }
80
+ j++;
81
+ }
82
+ return s.length;
83
+ }
84
+ /** The index of the next top-level `,` / closer from `i`: an expression this reader does not evaluate. */
85
+ function skipExpression(s, i) {
86
+ let j = i;
87
+ while (j < s.length && !CLOSERS.has(s[j] ?? '')) {
88
+ const c = s[j] ?? '';
89
+ if (c === '"' || c === "'" || c === '`') {
90
+ j = skipString(s, j);
91
+ continue;
92
+ }
93
+ if (c === '(' || c === '[' || c === '{') {
94
+ j = skipBalanced(s, j);
95
+ continue;
96
+ }
97
+ j++;
98
+ }
99
+ return j;
100
+ }
101
+ const ESCAPES = { n: '\n', t: '\t', r: '\r', b: '\b', f: '\f', v: '\v', 0: '\0' };
102
+ /** A string literal's value; null when it is a template with a substitution. */
103
+ function stringValue(raw, quote) {
104
+ if (quote === '`' && /(^|[^\\])\$\{/.test(raw))
105
+ return null;
106
+ return raw.replace(/\\(.)/gs, (_m, c) => ESCAPES[c] ?? c);
107
+ }
108
+ /** A comma-separated group closing on `close`, each item read by `item`. Null when malformed. */
109
+ function parseGroup(s, i, close, item) {
110
+ let j = skipSpace(s, i);
111
+ while (s[j] !== close) {
112
+ if (j >= s.length)
113
+ return null;
114
+ const after = item(j);
115
+ if (after === null)
116
+ return null;
117
+ j = skipSpace(s, after);
118
+ if (s[j] === ',')
119
+ j = skipSpace(s, j + 1);
120
+ else if (s[j] !== close)
121
+ return null;
122
+ }
123
+ return j + 1;
124
+ }
125
+ function parseArray(s, i) {
126
+ const out = [];
127
+ const next = parseGroup(s, i + 1, ']', (at) => { const v = parseValue(s, at); out.push(v.value); return v.next; });
128
+ return next === null ? { value: UNKNOWN, next: skipBalanced(s, i) } : { value: out, next };
129
+ }
130
+ function parseObject(s, i) {
131
+ const out = {};
132
+ const next = parseGroup(s, i + 1, '}', (at) => {
133
+ const key = /^(?:([A-Za-z_$][\w$]*)|'((?:\\.|[^'\\])*)'|"((?:\\.|[^"\\])*)"|(\d+))\s*:/.exec(s.slice(at));
134
+ if (key === null)
135
+ return null; // a spread, a shorthand or a method: the row's keys are not all spelled out
136
+ const v = parseValue(s, at + key[0].length);
137
+ out[key[1] ?? key[2] ?? key[3] ?? key[4] ?? ''] = v.value;
138
+ return v.next;
139
+ });
140
+ return next === null ? { value: UNKNOWN, next: skipBalanced(s, i) } : { value: out, next };
141
+ }
142
+ /** One value from `i`; an expression that is not a plain literal reads as UNKNOWN, consumed to its end. */
143
+ export function parseValue(s, i) {
144
+ const at = skipSpace(s, i);
145
+ const c = s[at] ?? '';
146
+ let parsed = null;
147
+ if (c === '[')
148
+ parsed = parseArray(s, at);
149
+ else if (c === '{')
150
+ parsed = parseObject(s, at);
151
+ else if (c === '"' || c === "'" || c === '`') {
152
+ const end = skipString(s, at);
153
+ const value = stringValue(s.slice(at + 1, end - 1), c);
154
+ parsed = { value: value ?? UNKNOWN, next: end };
155
+ }
156
+ else {
157
+ const word = /^(?:-?(?:\d[\d_]*(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?|true|false|null|undefined)(?![\w$.])/i.exec(s.slice(at));
158
+ if (word !== null) {
159
+ const w = word[0];
160
+ const value = w === 'true' ? true : w === 'false' ? false : w === 'null' ? null : w === 'undefined' ? undefined : Number(w.replace(/_/g, ''));
161
+ parsed = { value, next: at + w.length };
162
+ }
163
+ }
164
+ if (parsed === null)
165
+ return { value: UNKNOWN, next: skipExpression(s, at) };
166
+ const after = skipSpace(s, parsed.next);
167
+ if (after < s.length && !CLOSERS.has(s[after] ?? ''))
168
+ return { value: UNKNOWN, next: skipExpression(s, after) };
169
+ return { ...parsed, next: after };
170
+ }
171
+ /**
172
+ * The elements of an array-literal table (the text between `.each(` and its `)`),
173
+ * as written -- each runner turns them into rows its own way; null when it is not one.
174
+ */
175
+ export function parseArrayTableItems(text) {
176
+ const trimmed = text.replace(/\s+as\s+const\s*,?\s*$/, '').replace(/,\s*$/, '');
177
+ const at = skipSpace(trimmed, 0);
178
+ if (trimmed[at] !== '[')
179
+ return null;
180
+ const table = parseArray(trimmed, at);
181
+ if (!Array.isArray(table.value) || skipSpace(trimmed, table.next) < trimmed.length)
182
+ return null;
183
+ return table.value;
184
+ }
185
+ /** The rows of an array-literal table, one per element (an element that is not an array is one argument); null when it is not one. */
186
+ export function parseArrayTable(text) {
187
+ return parseArrayTableItems(text)?.map((row) => (Array.isArray(row) ? row : [row])) ?? null;
188
+ }
189
+ /** The rows of a tagged-template table (its raw body); null unless every cell is one `${literal}`. */
190
+ export function parseTemplateTable(body) {
191
+ const lines = body.split('\n').map((l) => l.trim()).filter((l) => l.length > 0);
192
+ const header = lines.shift()?.split('|').map((h) => h.trim()) ?? [];
193
+ if (header.length === 0 || header.some((h) => !/^[A-Za-z_$][\w$]*$/.test(h)))
194
+ return null;
195
+ const rows = [];
196
+ for (const line of lines) {
197
+ const cells = [];
198
+ let i = 0;
199
+ while (i < line.length) {
200
+ i = skipSpace(line, i);
201
+ if (!line.startsWith('${', i))
202
+ return null;
203
+ const end = skipBalanced(line, i + 1);
204
+ const inner = line.slice(i + 2, end - 1);
205
+ const v = parseValue(inner, 0);
206
+ cells.push(skipSpace(inner, v.next) < inner.length ? UNKNOWN : v.value);
207
+ i = skipSpace(line, end);
208
+ if (line[i] === '|')
209
+ i++;
210
+ else if (i < line.length)
211
+ return null;
212
+ }
213
+ if (cells.length !== header.length)
214
+ return null;
215
+ rows.push([Object.fromEntries(header.map((h, k) => [h, cells[k]]))]);
216
+ }
217
+ return rows;
218
+ }
219
+ //# sourceMappingURL=each-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"each-table.js","sourceRoot":"","sources":["../../../src/verify/shortfalls/each-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * The titles a test runner gives the rows of a `.each` table: the exact text of
3
+ * each, or null for a row this reader cannot reproduce.
4
+ *
5
+ * verify/shortfalls/generated-test-titles.ts resolves a cited test name only when
6
+ * it IS a title the source generates, so each row's title must be the one the
7
+ * runner prints. Each runner's title algorithm is PORTED here from its source and
8
+ * replayed on the table's literal values (property walks, Number / parseInt run
9
+ * natively on those values); only the value printers are reproduced by hand:
10
+ *
11
+ * jest-each 30 (its table array, template and interpolation modules): an array
12
+ * table whose title has no `%[#Odfijops]` once `%%` is protected, whose
13
+ * elements are all objects and not all arrays, interpolates `$key` (keys
14
+ * longest-first, getPath, `$#` the index); every other array table formats
15
+ * row by row -- `%#` / `%$` first, then per argument `%p` (pretty-format min,
16
+ * depth 1), `%j` (JSON) or Node util.format (whose `%s` of an object is
17
+ * util.inspect at depth 0, compact 3). A tagged-template row interpolates
18
+ * `$key` only.
19
+ * vitest 4 (@vitest/runner formatTitle): `%#` / `%$` first, then printf over the
20
+ * row (format from @vitest/utils) and `$key` via objectAttr + objDisplay.
21
+ *
22
+ * The printers reproduced: pretty-format min; Node util.inspect of literal
23
+ * values that fit one line (depth 0, compact 3, breakLength 80, strEscape
24
+ * quoting); loupe's single-line inspect (vitest `%s` of an object, an array's own
25
+ * toString) and objDisplay below its truncation (40). What they would print
26
+ * otherwise -- a multi-line inspect, a truncated objDisplay, a value the source
27
+ * does not spell out (UNKNOWN), `%o` / `%O` -- makes that row null: no pattern,
28
+ * fail closed. `unknown` (a file naming neither runner) keeps a row only when
29
+ * both runners give it the identical title.
30
+ *
31
+ * A template-literal title's `${...}` parts carry scope values this reader cannot
32
+ * see; they are assumed to hold no placeholder and match any text.
33
+ *
34
+ * Pinned by titles the real runners printed (each-title-render.test.ts). Pure.
35
+ *
36
+ * @module verify/shortfalls/each-title-render
37
+ */
38
+ import { type EachValue } from './each-table.js';
39
+ /** The runner that generates the file's titles (eachRunnerOf). */
40
+ export type EachRunner = 'vitest' | 'jest' | 'unknown';
41
+ /** One run of a title: literal text, or a `${...}` substitution whose value lives in scope. */
42
+ export interface TitlePart {
43
+ text: string;
44
+ wildcard: boolean;
45
+ }
46
+ /** A `.each` table as the source wrote it: an array literal's elements, or a tagged template's rows. */
47
+ export type EachTableInput = {
48
+ kind: 'array';
49
+ items: readonly EachValue[];
50
+ } | {
51
+ kind: 'template';
52
+ rows: readonly {
53
+ [key: string]: EachValue;
54
+ }[];
55
+ };
56
+ /** The runner a test file's own imports / globals name, or unknown when they name neither or both. */
57
+ export declare function eachRunnerOf(source: string): EachRunner;
58
+ /** pretty-format `{ min: true, maxDepth: 1 }`: strings double-quoted (only `"` and `\` escaped), keys sorted. */
59
+ export declare function prettyMin(v: unknown, depth?: number): string;
60
+ /**
61
+ * Each row's title exactly as `runner` names the test, as the literal segments
62
+ * between the title's `${...}` parts (one segment when it has none), or null for
63
+ * a row not reproduced. An unknown runner keeps a row only when vitest and jest
64
+ * give it the identical title.
65
+ */
66
+ export declare function renderTableTitles(parts: readonly TitlePart[], table: EachTableInput, runner: EachRunner): (string[] | null)[];
67
+ //# sourceMappingURL=each-title-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"each-title-render.d.ts","sourceRoot":"","sources":["../../../src/verify/shortfalls/each-title-render.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE1D,kEAAkE;AAClE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvD,+FAA+F;AAC/F,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE;AAE9D,wGAAwG;AACxG,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC;AAExE,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAIvD;AAwBD,iHAAiH;AACjH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,CAWvD;AAsUD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAa7H"}