@nonameolsson/nightjar 0.1.0 → 0.2.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.
Files changed (55) hide show
  1. package/README.md +66 -2
  2. package/dist/account.d.ts +12 -0
  3. package/dist/account.js +57 -0
  4. package/dist/account.js.map +1 -0
  5. package/dist/args.d.ts +2 -1
  6. package/dist/args.js +7 -2
  7. package/dist/args.js.map +1 -1
  8. package/dist/build.d.ts +4 -1
  9. package/dist/build.js +303 -47
  10. package/dist/build.js.map +1 -1
  11. package/dist/checks.d.ts +7 -0
  12. package/dist/checks.js +72 -8
  13. package/dist/checks.js.map +1 -1
  14. package/dist/config.d.ts +21 -0
  15. package/dist/config.js +79 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/doctor.js +5 -0
  18. package/dist/doctor.js.map +1 -1
  19. package/dist/fakes/machine.d.ts +1 -0
  20. package/dist/fakes/machine.js +14 -7
  21. package/dist/fakes/machine.js.map +1 -1
  22. package/dist/init.d.ts +1 -0
  23. package/dist/init.js +10 -2
  24. package/dist/init.js.map +1 -1
  25. package/dist/ledger.d.ts +1 -1
  26. package/dist/ledger.js +1 -1
  27. package/dist/ledger.js.map +1 -1
  28. package/dist/main.js +20 -4
  29. package/dist/main.js.map +1 -1
  30. package/dist/person-config.d.ts +1 -0
  31. package/dist/person-config.js +8 -3
  32. package/dist/person-config.js.map +1 -1
  33. package/dist/prompt.d.ts +63 -0
  34. package/dist/prompt.js +74 -0
  35. package/dist/prompt.js.map +1 -1
  36. package/dist/serve.d.ts +10 -0
  37. package/dist/serve.js +85 -0
  38. package/dist/serve.js.map +1 -0
  39. package/dist/settings.d.ts +7 -1
  40. package/dist/settings.js +12 -3
  41. package/dist/settings.js.map +1 -1
  42. package/dist/skills.d.ts +4 -0
  43. package/dist/skills.js +51 -0
  44. package/dist/skills.js.map +1 -0
  45. package/dist/status-shape.d.ts +1 -1
  46. package/dist/workflow.d.ts +33 -0
  47. package/dist/workflow.js +53 -0
  48. package/dist/workflow.js.map +1 -0
  49. package/dist/worktree.d.ts +16 -0
  50. package/dist/worktree.js +51 -2
  51. package/dist/worktree.js.map +1 -1
  52. package/docs/ticket-contract.md +10 -0
  53. package/package.json +1 -1
  54. package/schema/factory.schema.json +107 -0
  55. package/src/status-shape.ts +2 -2
@@ -0,0 +1,53 @@
1
+ // A Feature's own `**Workflow:**` line, as written; the bold is optional.
2
+ export function workflowLine(body) {
3
+ const match = /^(?:\*\*)?Workflow:(?:\*\*)?[ \t]*([^*\s].*?)\s*$/im.exec(body);
4
+ return match?.[1]?.replace(/^`(.*)`$/, '$1').trim() || undefined;
5
+ }
6
+ export function chooseWorkflow(settings, body) {
7
+ const known = Object.keys(settings.workflows ?? {});
8
+ const asked = workflowLine(body);
9
+ const name = asked === undefined
10
+ ? settings.defaultWorkflow
11
+ : (known.find((n) => n === asked) ??
12
+ known.find((n) => n.toLowerCase() === asked.toLowerCase()));
13
+ if (asked === undefined && name === undefined)
14
+ return { kind: 'none' };
15
+ const workflow = name === undefined ? undefined : settings.workflows?.[name];
16
+ if (name === undefined || workflow === undefined) {
17
+ const list = known.length === 0 ? 'factory.json names none' : known.map((n) => `\`${n}\``).join(', ');
18
+ return {
19
+ kind: 'refused',
20
+ why: `its \`**Workflow:**\` line names \`${asked ?? ''}\`, which is no Workflow. The Workflows known: ${list}.`
21
+ };
22
+ }
23
+ const broken = settings.brokenWorkflows?.[name];
24
+ if (broken !== undefined) {
25
+ return { kind: 'refused', why: `the Workflow \`${name}\` cannot run: ${broken}` };
26
+ }
27
+ return { kind: 'workflow', name, workflow };
28
+ }
29
+ // What a Step is called in a commit trailer, which tells a later run it is done.
30
+ export const stepKey = (workflow, step, ticket) => `${workflow}/${step}${ticket === null ? '' : ` #${ticket}`}`;
31
+ // The skills a Step's prompt names with a slash, such as `/some-skill args`.
32
+ export function skillsNamed(prompt) {
33
+ const names = [
34
+ ...prompt.matchAll(/(?<![\w/.:~-])\/([a-z][a-z0-9_-]*(?::[a-z][a-z0-9_-]*)?)(?![\w/.-])/g)
35
+ ];
36
+ return [...new Set(names.flatMap((m) => (m[1] ? [m[1]] : [])))];
37
+ }
38
+ // The pull request's section on a Workflow, or null when it ran no Step.
39
+ export function workflowSection(name, reports, ref) {
40
+ if (reports.length === 0)
41
+ return null;
42
+ const lines = reports.map((r) => {
43
+ const where = `\`${r.step.name}\`${r.ticket === null ? '' : ` (after ${ref(r.ticket)})`}`;
44
+ if (r.state === 'done')
45
+ return `- ${where}: done`;
46
+ if (r.state === 'undone')
47
+ return `- ${where}: **not done**, ${r.why ?? 'it did not finish'}; its changes were thrown away`;
48
+ const left = r.left.map((l) => `\n - ${l}`).join('');
49
+ return `- ${where}: its condition (${r.step.until ?? ''}) did not hold after ${String(r.rounds ?? 0)} round${r.rounds === 1 ? '' : 's'}. Left:${left || ' (it listed nothing)'}`;
50
+ });
51
+ return `## Workflow \`${name}\`\n\n${lines.join('\n')}`;
52
+ }
53
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAQA,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,qDAAqD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/E,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;AAClE,CAAC;AAeD,MAAM,UAAU,cAAc,CAAC,QAA0B,EAAE,IAAY;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GACT,KAAK,KAAK,SAAS;QAClB,CAAC,CAAC,QAAQ,CAAC,eAAe;QAC1B,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7E,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,GACT,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1F,OAAO;YACN,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,sCAAsC,KAAK,IAAI,EAAE,kDAAkD,IAAI,GAAG;SAC/G,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,IAAI,kBAAkB,MAAM,EAAE,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAE,MAAqB,EAAE,EAAE,CAChF,GAAG,QAAQ,IAAI,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,EAAE,CAAC;AAE9D,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,MAAc;IACzC,MAAM,KAAK,GAAG;QACb,GAAG,MAAM,CAAC,QAAQ,CAAC,sEAAsE,CAAC;KAC1F,CAAC;IACF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAaD,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAC9B,IAAY,EACZ,OAA8B,EAC9B,GAA2B;IAE3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1F,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,KAAK,KAAK,QAAQ,CAAC;QAClD,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ;YACvB,OAAO,KAAK,KAAK,mBAAmB,CAAC,CAAC,GAAG,IAAI,mBAAmB,gCAAgC,CAAC;QAClG,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO,KAAK,KAAK,oBAAoB,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,wBAAwB,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,IAAI,sBAAsB,EAAE,CAAC;IAClL,CAAC,CAAC,CAAC;IACH,OAAO,iBAAiB,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACzD,CAAC"}
@@ -2,6 +2,7 @@ import { type Env } from './git.js';
2
2
  export declare class GitFailure extends Error {
3
3
  }
4
4
  export declare const TICKET_TRAILER = "Factory-Ticket";
5
+ export declare const STEP_TRAILER = "Factory-Step";
5
6
  export declare function branchFor(id: string, title: string): string;
6
7
  export declare function worktreesFor(home: string, root: string): string;
7
8
  export interface FeatureBranch {
@@ -21,6 +22,21 @@ export declare class Worktree {
21
22
  ahead: () => Promise<number>;
22
23
  built(): Promise<Set<string>>;
23
24
  commitTicket(id: string, title: string, summary: string, session: string): Promise<boolean>;
25
+ notes(): Promise<string>;
26
+ stepsDone(): Promise<Set<string>>;
27
+ diff(limit: number): Promise<{
28
+ text: string;
29
+ truncated: boolean;
30
+ }>;
31
+ commitStep(o: {
32
+ workflow: string;
33
+ step: string;
34
+ key: string;
35
+ after: string | null;
36
+ summary: string;
37
+ session: string;
38
+ }): Promise<boolean>;
39
+ revert(before: string): Promise<void>;
24
40
  discard(before: string, ticket: string): Promise<string | null>;
25
41
  }
26
42
  export declare function openWorktree(root: string, worktrees: string, branch: string, baseBranch: string, env: Env): Promise<Worktree>;
package/dist/worktree.js CHANGED
@@ -1,13 +1,17 @@
1
1
  // Only Nightjar commits in the worktree or saves a failed attempt; the Code host pushes.
2
2
  import { createHash } from 'node:crypto';
3
- import { existsSync, writeFileSync } from 'node:fs';
4
- import { basename, join, resolve } from 'node:path';
3
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { basename, dirname, join, resolve } from 'node:path';
5
5
  import { firstLine, run } from './git.js';
6
6
  // A git command Nightjar cannot go on without.
7
7
  export class GitFailure extends Error {
8
8
  }
9
9
  // Names the Ticket a commit built, so a later run on the branch knows what is done.
10
10
  export const TICKET_TRAILER = 'Factory-Ticket';
11
+ // Names the Workflow Step a commit holds, so a later run knows it is done.
12
+ export const STEP_TRAILER = 'Factory-Step';
13
+ // The notes the Steps of a run share, in the worktree and never committed.
14
+ const NOTES = '.factory/notes';
11
15
  const BRANCH_PREFIX = 'factory/';
12
16
  // An item id as a piece of a branch name: whatever a ref may not hold becomes a dash.
13
17
  const refPart = (id) => id.replace(/[^A-Za-z0-9_-]+/g, '-');
@@ -68,6 +72,51 @@ export class Worktree {
68
72
  await this.git(['commit', '-q', '-m', message]);
69
73
  return true;
70
74
  }
75
+ // The folder the Steps share, made, and kept out of every `git add` and `git clean` by the checkout's exclude file.
76
+ async notes() {
77
+ const folder = join(this.at.folder, NOTES);
78
+ mkdirSync(folder, { recursive: true });
79
+ const path = (await this.git(['rev-parse', '--git-path', 'info/exclude'])).trim();
80
+ const exclude = resolve(this.at.folder, path);
81
+ const line = `/${NOTES}/`;
82
+ const text = existsSync(exclude) ? readFileSync(exclude, 'utf8') : '';
83
+ if (!text.split('\n').includes(line)) {
84
+ mkdirSync(dirname(exclude), { recursive: true });
85
+ appendFileSync(exclude, `${text === '' || text.endsWith('\n') ? '' : '\n'}${line}\n`);
86
+ }
87
+ return folder;
88
+ }
89
+ // The Steps the branch's own commits hold, as their trailers name them.
90
+ async stepsDone() {
91
+ const out = await this.git([
92
+ 'log',
93
+ `--format=%(trailers:key=${STEP_TRAILER},valueonly)`,
94
+ `${this.at.base}..HEAD`
95
+ ]);
96
+ return new Set(out.split('\n').flatMap((l) => (l.trim() === '' ? [] : [l.trim()])));
97
+ }
98
+ // The Feature's diff against its base, cut at `limit` characters.
99
+ async diff(limit) {
100
+ const text = await this.git(['diff', `${this.at.base}...HEAD`]);
101
+ return text.length > limit
102
+ ? { text: text.slice(0, limit), truncated: true }
103
+ : { text, truncated: false };
104
+ }
105
+ // One commit of what a Step left, naming the Workflow and the Step; false when it changed no file.
106
+ async commitStep(o) {
107
+ await this.git(['add', '-A']);
108
+ if ((await this.git(['diff', '--cached', '--name-only'])).trim() === '')
109
+ return false;
110
+ const subject = `${o.workflow}: ${o.step}${o.after === null ? '' : ` (after #${o.after})`}`;
111
+ const message = `${subject}\n\n${o.summary.trim()}\n\n${STEP_TRAILER}: ${o.key}\nFactory-Session: ${o.session}`;
112
+ await this.git(['commit', '-q', '-m', message]);
113
+ return true;
114
+ }
115
+ // Throws away what a Step left, keeping nothing: the Step is listed as not done.
116
+ async revert(before) {
117
+ await this.git(['reset', '-q', '--hard', before]);
118
+ await this.git(['clean', '-q', '-fd']);
119
+ }
71
120
  // Keeps what the session left on a side branch, which it names; null when it left nothing.
72
121
  async discard(before, ticket) {
73
122
  await this.git(['add', '-A']);
@@ -1 +1 @@
1
- {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,16 @@ A Ticket is one child of a Feature, built as one commit. It holds:
27
27
 
28
28
  A Ticket is built only while it carries the ready Signal (`ready-for-agent` by default). Its Feature carries no Signal until a person assigns it to themselves and gives it the Go (`factory-go` by default).
29
29
 
30
+ ## A Feature's Workflow
31
+
32
+ A Feature may carry a **`**Workflow:**`** line anywhere in its body, on a line of its own, to add the Steps of a Workflow from `factory.json` to its build:
33
+
34
+ ```markdown
35
+ **Workflow:** design-review
36
+ ```
37
+
38
+ The rest of the line is the Workflow's name. Without the line the Feature gets the repo's `defaultWorkflow`, if it has one; a name no Workflow has marks the Feature as needing info. See the README's Workflows section.
39
+
30
40
  ## The Feature file
31
41
 
32
42
  `nightjar create FILE` makes a Feature and its Tickets on the Tracker `factory.json` names, from one Markdown file:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nonameolsson/nightjar",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Builds a repo's Features from its Tracker with nobody at the keyboard, one draft pull request per Feature.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -279,6 +279,113 @@
279
279
  },
280
280
  "additionalProperties": false
281
281
  },
282
+ "workflows": {
283
+ "description": "Work a repo adds to the build loop, by name. A Feature picks one with a **Workflow:** line; Nightjar still keeps the branch, the commits, the Signals and the pull request.",
284
+ "type": "object",
285
+ "propertyNames": {
286
+ "type": "string",
287
+ "pattern": "^[^\\r\\n]*\\S[^\\r\\n]*$"
288
+ },
289
+ "additionalProperties": {
290
+ "type": "object",
291
+ "properties": {
292
+ "steps": {
293
+ "minItems": 1,
294
+ "type": "array",
295
+ "items": {
296
+ "type": "object",
297
+ "properties": {
298
+ "name": {
299
+ "type": "string",
300
+ "pattern": "^[^\\r\\n]*\\S[^\\r\\n]*$",
301
+ "description": "The name of the Step; its commit and the pull request body name it"
302
+ },
303
+ "prompt": {
304
+ "type": "string",
305
+ "pattern": "\\S",
306
+ "description": "What the agent is told to do, such as \"/some-skill critique\"; it may name any skill. Nightjar adds the rule that nobody is at the keyboard."
307
+ },
308
+ "point": {
309
+ "type": "string",
310
+ "enum": [
311
+ "afterEachTicket",
312
+ "afterAllTickets"
313
+ ],
314
+ "description": "afterEachTicket runs after each Ticket is built; afterAllTickets runs once, after every Ticket, before the review"
315
+ },
316
+ "model": {
317
+ "description": "The Step's own model; else the default model",
318
+ "type": "string",
319
+ "pattern": "\\S"
320
+ },
321
+ "effort": {
322
+ "description": "The Step's own effort; else the default effort",
323
+ "type": "string",
324
+ "pattern": "\\S"
325
+ },
326
+ "budgetUsd": {
327
+ "description": "The most one run of the Step may cost in dollars; else a Ticket's budget",
328
+ "type": "number",
329
+ "exclusiveMinimum": 0
330
+ },
331
+ "until": {
332
+ "description": "A condition in plain words. After each round the agent reports whether it holds, and Nightjar runs the Step again until it does or maxRounds is reached",
333
+ "type": "string",
334
+ "pattern": "\\S"
335
+ },
336
+ "maxRounds": {
337
+ "description": "The most rounds of a Step with an until; 3 when left out",
338
+ "type": "integer",
339
+ "minimum": 1,
340
+ "maximum": 10
341
+ }
342
+ },
343
+ "required": [
344
+ "name",
345
+ "prompt",
346
+ "point"
347
+ ],
348
+ "additionalProperties": false
349
+ }
350
+ },
351
+ "serve": {
352
+ "description": "A command started in the background in the worktree before the Workflow's Steps and stopped after them, such as a dev server. It reads its port from the variables of ports.env, so it needs ports.",
353
+ "type": "string",
354
+ "pattern": "\\S"
355
+ },
356
+ "allowedCommands": {
357
+ "description": "Commands the Workflow's Steps may run besides the top-level allowedCommands, as Bash permission patterns without Bash( )",
358
+ "type": "array",
359
+ "items": {
360
+ "type": "string",
361
+ "pattern": "\\S"
362
+ }
363
+ },
364
+ "allowedTools": {
365
+ "description": "Tools the Workflow's Steps may use besides the usual ones, as Claude Code permission rules. Committing, pushing, switching branches, the outside network and gh stay denied.",
366
+ "type": "array",
367
+ "items": {
368
+ "type": "string",
369
+ "pattern": "\\S"
370
+ }
371
+ },
372
+ "localNetwork": {
373
+ "description": "true lets the Workflow's Steps reach localhost, and nothing else on the network",
374
+ "type": "boolean"
375
+ }
376
+ },
377
+ "required": [
378
+ "steps"
379
+ ],
380
+ "additionalProperties": false,
381
+ "description": "A named list of Steps that a Feature picks with a **Workflow:** line"
382
+ }
383
+ },
384
+ "defaultWorkflow": {
385
+ "description": "The Workflow of a Feature without a **Workflow:** line; none when left out",
386
+ "type": "string",
387
+ "pattern": "\\S"
388
+ },
282
389
  "trusted": {
283
390
  "description": "The logins whose comments reach the agent (on Azure DevOps, sign-in names such as ann@contoso.com). When set, it replaces the Tracker default (GitHub: write access; Azure DevOps: the project's Contributors group); leave it out to keep the default.",
284
391
  "type": "array",
@@ -5,9 +5,9 @@ export type Doing =
5
5
  | {
6
6
  readonly kind: 'building';
7
7
  readonly feature: string;
8
- // null while the Feature is set up and while it is reviewed
8
+ // null while the Feature is set up and reviewed, and during a Step that runs after all Tickets
9
9
  readonly ticket: string | null;
10
- readonly step: 'setup' | 'build' | 'fix' | 'review';
10
+ readonly step: 'setup' | 'build' | 'fix' | 'review' | 'step';
11
11
  // a build's question round or a fix round, of how many there may be
12
12
  readonly round: number | null;
13
13
  readonly rounds: number | null;