ghostrail 0.21.0 → 0.23.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 (105) hide show
  1. package/dist/board/page.d.ts.map +1 -1
  2. package/dist/board/page.js +71 -13
  3. package/dist/board/page.js.map +1 -1
  4. package/dist/board/server.d.ts +10 -0
  5. package/dist/board/server.d.ts.map +1 -1
  6. package/dist/board/server.js +24 -0
  7. package/dist/board/server.js.map +1 -1
  8. package/dist/cli/commands.d.ts +74 -2
  9. package/dist/cli/commands.d.ts.map +1 -1
  10. package/dist/cli/commands.js +183 -18
  11. package/dist/cli/commands.js.map +1 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +3 -1
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/help.d.ts.map +1 -1
  16. package/dist/commands/help.js +11 -2
  17. package/dist/commands/help.js.map +1 -1
  18. package/dist/config/load.d.ts.map +1 -1
  19. package/dist/config/load.js +19 -0
  20. package/dist/config/load.js.map +1 -1
  21. package/dist/config/schema.d.ts +13 -0
  22. package/dist/config/schema.d.ts.map +1 -1
  23. package/dist/config/schema.js.map +1 -1
  24. package/dist/dashboard/page.d.ts +0 -14
  25. package/dist/dashboard/page.d.ts.map +1 -1
  26. package/dist/dashboard/page.js +107 -9
  27. package/dist/dashboard/page.js.map +1 -1
  28. package/dist/dashboard/routes.d.ts +4 -0
  29. package/dist/dashboard/routes.d.ts.map +1 -1
  30. package/dist/dashboard/routes.js +4 -0
  31. package/dist/dashboard/routes.js.map +1 -1
  32. package/dist/dashboard/server.d.ts +29 -0
  33. package/dist/dashboard/server.d.ts.map +1 -1
  34. package/dist/dashboard/server.js +75 -4
  35. package/dist/dashboard/server.js.map +1 -1
  36. package/dist/factory/build.d.ts +6 -0
  37. package/dist/factory/build.d.ts.map +1 -1
  38. package/dist/factory/build.js +23 -0
  39. package/dist/factory/build.js.map +1 -1
  40. package/dist/loop/branch.d.ts +8 -1
  41. package/dist/loop/branch.d.ts.map +1 -1
  42. package/dist/loop/branch.js +14 -2
  43. package/dist/loop/branch.js.map +1 -1
  44. package/dist/loop/engine.d.ts.map +1 -1
  45. package/dist/loop/engine.js +57 -5
  46. package/dist/loop/engine.js.map +1 -1
  47. package/dist/loop/next-tick.d.ts +43 -5
  48. package/dist/loop/next-tick.d.ts.map +1 -1
  49. package/dist/loop/next-tick.js +68 -18
  50. package/dist/loop/next-tick.js.map +1 -1
  51. package/dist/loop/ports.d.ts +4 -1
  52. package/dist/loop/ports.d.ts.map +1 -1
  53. package/dist/loop/recurrence.d.ts +43 -0
  54. package/dist/loop/recurrence.d.ts.map +1 -0
  55. package/dist/loop/recurrence.js +92 -0
  56. package/dist/loop/recurrence.js.map +1 -0
  57. package/dist/loop/schedule.d.ts +11 -2
  58. package/dist/loop/schedule.d.ts.map +1 -1
  59. package/dist/loop/schedule.js +3 -1
  60. package/dist/loop/schedule.js.map +1 -1
  61. package/dist/publish/gh.d.ts +43 -2
  62. package/dist/publish/gh.d.ts.map +1 -1
  63. package/dist/publish/gh.js +80 -2
  64. package/dist/publish/gh.js.map +1 -1
  65. package/dist/publish/githost.d.ts +18 -1
  66. package/dist/publish/githost.d.ts.map +1 -1
  67. package/dist/publish/githost.js +13 -0
  68. package/dist/publish/githost.js.map +1 -1
  69. package/dist/publish/index.d.ts +1 -1
  70. package/dist/publish/index.d.ts.map +1 -1
  71. package/dist/publish/index.js +1 -1
  72. package/dist/publish/index.js.map +1 -1
  73. package/dist/release/index.d.ts +2 -0
  74. package/dist/release/index.d.ts.map +1 -0
  75. package/dist/release/index.js +2 -0
  76. package/dist/release/index.js.map +1 -0
  77. package/dist/release/release.d.ts +67 -0
  78. package/dist/release/release.d.ts.map +1 -0
  79. package/dist/release/release.js +193 -0
  80. package/dist/release/release.js.map +1 -0
  81. package/dist/respond/ci-fix-queue.d.ts +40 -0
  82. package/dist/respond/ci-fix-queue.d.ts.map +1 -0
  83. package/dist/respond/ci-fix-queue.js +74 -0
  84. package/dist/respond/ci-fix-queue.js.map +1 -0
  85. package/dist/respond/index.d.ts +2 -1
  86. package/dist/respond/index.d.ts.map +1 -1
  87. package/dist/respond/index.js +2 -1
  88. package/dist/respond/index.js.map +1 -1
  89. package/dist/respond/merge.d.ts.map +1 -1
  90. package/dist/respond/merge.js +14 -1
  91. package/dist/respond/merge.js.map +1 -1
  92. package/dist/respond/respond.d.ts +26 -1
  93. package/dist/respond/respond.d.ts.map +1 -1
  94. package/dist/respond/respond.js +154 -9
  95. package/dist/respond/respond.js.map +1 -1
  96. package/dist/version.d.ts +6 -0
  97. package/dist/version.d.ts.map +1 -1
  98. package/dist/version.js +6 -0
  99. package/dist/version.js.map +1 -1
  100. package/package.json +1 -1
  101. package/skill/ghostrail/SKILL.md +15 -4
  102. package/templates/code/ghostrail.toml +3 -0
  103. package/templates/code/prompts/release.md +40 -0
  104. package/templates/code/prompts/respond.md +2 -1
  105. package/templates/content/prompts/respond.md +3 -1
@@ -43,7 +43,10 @@ export interface Source {
43
43
  listComments(item: WorkItem): Promise<Comment[]>;
44
44
  /** Hand the item back to a human (reassign) when a decision is needed. */
45
45
  reassignToHuman(item: WorkItem): Promise<void>;
46
- /** Return the item to the eligible pool (e.g. after a failure). */
46
+ /**
47
+ * Return the item to the eligible pool (e.g. after a failure, or after a
48
+ * recurring item's `done` outcome so it can run again on its schedule).
49
+ */
47
50
  reset(item: WorkItem): Promise<void>;
48
51
  }
49
52
  /** A sub-issue to create under a parent during triage. */
@@ -1 +1 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/loop/ports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/loop/ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Comment, WorkItem } from "./ports.js";
2
+ /** A parsed recurrence: how often a recurring item should be re-run. */
3
+ export interface Recurrence {
4
+ /** Human-readable label for logs and tracker comments, e.g. "weekly" or "every-3d". */
5
+ label: string;
6
+ intervalMs: number;
7
+ }
8
+ /** The title and description text a recurrence tag is looked for in. */
9
+ export declare function issueText(item: Pick<WorkItem, "title" | "description">): string;
10
+ /**
11
+ * Find a recurrence hashtag anywhere in `text` and parse it into an interval.
12
+ * Returns undefined when no recurrence tag is present, or an `every-<n><unit>`
13
+ * tag whose amount is not a positive integer.
14
+ */
15
+ export declare function parseRecurrence(text: string): Recurrence | undefined;
16
+ /**
17
+ * The branch tag for the cycle a recurring item is currently in, derived from
18
+ * the "next eligible" timestamp that made it due, as `YYYYMMDD-HHMM`.
19
+ *
20
+ * A new timestamp is only recorded on a `done` outcome, so this is stable for
21
+ * a whole cycle: every attempt at that cycle, retries included, builds the
22
+ * same branch and keeps the publisher's force-push recovery. The next cycle
23
+ * carries a later timestamp and so gets a branch of its own, which is what
24
+ * stops it colliding with the PR the previous cycle left open (TJ-1689).
25
+ *
26
+ * Minute resolution is enough to keep two cycles apart: the shortest interval
27
+ * a tag can ask for is an hour.
28
+ */
29
+ export declare function cycleTag(scheduledAt: Date): string;
30
+ /** The timestamp a recurring item next becomes eligible, `interval` after `from`. */
31
+ export declare function nextDueAt(recurrence: Recurrence, from: Date): Date;
32
+ /** Whether an item scheduled for `scheduledAt` is due to run as of `now`. Undefined means "never scheduled", i.e. due. */
33
+ export declare function isDue(scheduledAt: Date | undefined, now: Date): boolean;
34
+ /** The hidden marker embedding a recurring item's next-eligible timestamp in a comment. */
35
+ export declare function recurrenceMarker(scheduledAt: Date): string;
36
+ /** The tracker comment body recording that a recurring item ran and when it is next due. */
37
+ export declare function recurrenceComment(recurrence: Recurrence, scheduledAt: Date): string;
38
+ /**
39
+ * The most recent "next eligible" timestamp recorded across `comments`, or
40
+ * undefined if none carry the marker (or none parse as a valid date).
41
+ */
42
+ export declare function lastScheduledAt(comments: readonly Comment[]): Date | undefined;
43
+ //# sourceMappingURL=recurrence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence.d.ts","sourceRoot":"","sources":["../../src/loop/recurrence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEpD,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAkBD,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,CAAC,GAAG,MAAM,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAapE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,CAGlD;AAED,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAElE;AAED,0HAA0H;AAC1H,wBAAgB,KAAK,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAEvE;AAID,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,CAE1D;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,GAAG,MAAM,CAEnF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAY9E"}
@@ -0,0 +1,92 @@
1
+ const CANNED_INTERVALS_MS = {
2
+ daily: 24 * 3_600_000,
3
+ weekly: 7 * 24 * 3_600_000,
4
+ monthly: 30 * 24 * 3_600_000,
5
+ };
6
+ const UNIT_MS = {
7
+ h: 3_600_000,
8
+ d: 24 * 3_600_000,
9
+ w: 7 * 24 * 3_600_000,
10
+ };
11
+ // #daily, #weekly, #monthly, or #every-<n><h|d|w> (e.g. #every-3d), case
12
+ // insensitive. The trailing \b keeps "#dailymeeting" from matching "#daily".
13
+ const RECURRENCE_TAG = /#(daily|weekly|monthly|every-(\d+)(h|d|w))\b/i;
14
+ /** The title and description text a recurrence tag is looked for in. */
15
+ export function issueText(item) {
16
+ return `${item.title}\n${item.description ?? ""}`;
17
+ }
18
+ /**
19
+ * Find a recurrence hashtag anywhere in `text` and parse it into an interval.
20
+ * Returns undefined when no recurrence tag is present, or an `every-<n><unit>`
21
+ * tag whose amount is not a positive integer.
22
+ */
23
+ export function parseRecurrence(text) {
24
+ const match = RECURRENCE_TAG.exec(text);
25
+ if (match === null)
26
+ return undefined;
27
+ const canned = match[1]?.toLowerCase();
28
+ if (canned !== undefined && canned in CANNED_INTERVALS_MS) {
29
+ return { label: canned, intervalMs: CANNED_INTERVALS_MS[canned] };
30
+ }
31
+ const amount = Number(match[2]);
32
+ const unit = match[3]?.toLowerCase();
33
+ if (!Number.isSafeInteger(amount) || amount <= 0 || unit === undefined)
34
+ return undefined;
35
+ return { label: `every-${amount}${unit}`, intervalMs: amount * UNIT_MS[unit] };
36
+ }
37
+ /**
38
+ * The branch tag for the cycle a recurring item is currently in, derived from
39
+ * the "next eligible" timestamp that made it due, as `YYYYMMDD-HHMM`.
40
+ *
41
+ * A new timestamp is only recorded on a `done` outcome, so this is stable for
42
+ * a whole cycle: every attempt at that cycle, retries included, builds the
43
+ * same branch and keeps the publisher's force-push recovery. The next cycle
44
+ * carries a later timestamp and so gets a branch of its own, which is what
45
+ * stops it colliding with the PR the previous cycle left open (TJ-1689).
46
+ *
47
+ * Minute resolution is enough to keep two cycles apart: the shortest interval
48
+ * a tag can ask for is an hour.
49
+ */
50
+ export function cycleTag(scheduledAt) {
51
+ const iso = scheduledAt.toISOString();
52
+ return `${iso.slice(0, 10).replace(/-/g, "")}-${iso.slice(11, 16).replace(":", "")}`;
53
+ }
54
+ /** The timestamp a recurring item next becomes eligible, `interval` after `from`. */
55
+ export function nextDueAt(recurrence, from) {
56
+ return new Date(from.getTime() + recurrence.intervalMs);
57
+ }
58
+ /** Whether an item scheduled for `scheduledAt` is due to run as of `now`. Undefined means "never scheduled", i.e. due. */
59
+ export function isDue(scheduledAt, now) {
60
+ return scheduledAt === undefined || now.getTime() >= scheduledAt.getTime();
61
+ }
62
+ const RECUR_MARKER_RE = /<!-- ghostrail:recur next=([^ >]+) -->/;
63
+ /** The hidden marker embedding a recurring item's next-eligible timestamp in a comment. */
64
+ export function recurrenceMarker(scheduledAt) {
65
+ return `<!-- ghostrail:recur next=${scheduledAt.toISOString()} -->`;
66
+ }
67
+ /** The tracker comment body recording that a recurring item ran and when it is next due. */
68
+ export function recurrenceComment(recurrence, scheduledAt) {
69
+ return `Recurring item (${recurrence.label}): done for now, next eligible around ${scheduledAt.toISOString()}.\n\n${recurrenceMarker(scheduledAt)}`;
70
+ }
71
+ /**
72
+ * The most recent "next eligible" timestamp recorded across `comments`, or
73
+ * undefined if none carry the marker (or none parse as a valid date).
74
+ */
75
+ export function lastScheduledAt(comments) {
76
+ let latest;
77
+ for (const comment of comments) {
78
+ const match = RECUR_MARKER_RE.exec(comment.body);
79
+ if (match === null)
80
+ continue;
81
+ const iso = match[1];
82
+ if (iso === undefined)
83
+ continue;
84
+ const parsed = new Date(iso);
85
+ if (Number.isNaN(parsed.getTime()))
86
+ continue;
87
+ if (latest === undefined || parsed.getTime() > latest.getTime())
88
+ latest = parsed;
89
+ }
90
+ return latest;
91
+ }
92
+ //# sourceMappingURL=recurrence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence.js","sourceRoot":"","sources":["../../src/loop/recurrence.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,21 @@
3
3
  * without a clock, a tracker, or a daemon. See specs/watch-all-passes.spec.md.
4
4
  */
5
5
  /** The passes `watch` can run, in the order a tick runs them. */
6
- export declare const PASS_ORDER: readonly ["fix", "respond", "triage"];
6
+ export declare const PASS_ORDER: readonly ["fix", "respond", "triage", "release"];
7
7
  export type PassName = (typeof PASS_ORDER)[number];
8
- /** A schedulable pass's interval, in ms. Absent means the pass is not scheduled. */
8
+ /**
9
+ * A schedulable pass's interval, in ms. Absent means the pass is not scheduled.
10
+ *
11
+ * `release` has no interval of its own: it is `true` when wired up (a
12
+ * `[release]` section is configured) and, unlike `respond`/`triage`, runs on
13
+ * every tick once wired, since it only ever does real work in response to an
14
+ * explicit request and checking for one costs nothing on the ticks that have
15
+ * none.
16
+ */
9
17
  export interface PassIntervals {
10
18
  respond?: number;
11
19
  triage?: number;
20
+ release?: true;
12
21
  }
13
22
  /** When each pass last finished, in epoch millis. Absent means it has never run. */
14
23
  export interface PassLastRun {
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,eAAO,MAAM,UAAU,uCAAwC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,EAAE,CAS3D"}
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,eAAO,MAAM,UAAU,kDAAmD,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,EAAE,CAU3D"}
@@ -3,7 +3,7 @@
3
3
  * without a clock, a tracker, or a daemon. See specs/watch-all-passes.spec.md.
4
4
  */
5
5
  /** The passes `watch` can run, in the order a tick runs them. */
6
- export const PASS_ORDER = ["fix", "respond", "triage"];
6
+ export const PASS_ORDER = ["fix", "respond", "triage", "release"];
7
7
  /**
8
8
  * The passes due on this tick, in `PASS_ORDER`.
9
9
  *
@@ -23,6 +23,8 @@ export function duePasses(input) {
23
23
  if (last === undefined || input.now - last >= interval)
24
24
  due.push(pass);
25
25
  }
26
+ if (input.intervals.release === true)
27
+ due.push("release");
26
28
  return due;
27
29
  }
28
30
  //# sourceMappingURL=schedule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAqBhE;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,GAAG,GAAe,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AA8B3E;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,GAAG,GAAe,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,KAAK,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -32,6 +32,29 @@ export declare function ghCreateLabelArgs(label: string): string[];
32
32
  * the head branch, rather than rewriting either branch's history).
33
33
  */
34
34
  export declare function ghMergePrArgs(prNumber: number): string[];
35
+ /**
36
+ * How long to wait for GitHub to report the head we just pushed, and how often
37
+ * to ask. GitHub recomputes a PR's mergeability asynchronously; until it does,
38
+ * it answers with whatever it worked out for the previous head, which for the
39
+ * resolve-conflicts flow is the conflicted state that flow just fixed
40
+ * (TJ-1684). Seconds in practice, so the cap is generous rather than tuned.
41
+ */
42
+ export declare const MERGE_HEAD_TIMEOUT_MS = 60000;
43
+ export declare const MERGE_HEAD_POLL_MS = 2000;
44
+ /** What `gh pr view --json headRefOid,mergeable` reports, as far as we use it. */
45
+ export interface PrHead {
46
+ headRefOid?: string;
47
+ mergeable?: string;
48
+ }
49
+ /** Parse `gh pr view --json headRefOid,mergeable`, tolerating anything unexpected. */
50
+ export declare function parsePrHead(stdout: string): PrHead;
51
+ /**
52
+ * Whether the forge has caught up with `expectedHeadSha`: it reports that exact
53
+ * commit as the PR's head, and has finished working out what merging it would
54
+ * do. `UNKNOWN` is GitHub still computing, which is a different answer from
55
+ * "conflicting" and must not be mistaken for one.
56
+ */
57
+ export declare function hasCaughtUp(head: PrHead, expectedHeadSha: string): boolean;
35
58
  /** Build `gh pr create` args from a PR spec (one `--label` per label, in order). */
36
59
  export declare function ghOpenPrArgs(spec: PrSpec): string[];
37
60
  /** Parse `gh pr list --json number,url,headRefName` output into open PRs. */
@@ -44,14 +67,21 @@ export declare function parsePrStatus(stdout: string): PrStatus;
44
67
  export declare class GhHost implements GitHost {
45
68
  private readonly run;
46
69
  private readonly repoSlug?;
70
+ private readonly sleep;
71
+ private readonly now;
47
72
  /**
48
73
  * @param run The `gh` runner.
49
74
  * @param repoSlug Optional `owner/repo`. When set, every `gh` invocation is
50
75
  * scoped to it with `--repo`, so commands resolve the target repo from the
51
76
  * GitHub API rather than a local checkout. Required for the fully-ephemeral
52
77
  * flow, where the host has no clone.
78
+ * @param clock Injected only so the merge wait (TJ-1684) can be tested
79
+ * without real time passing.
53
80
  */
54
- constructor(run: GhRunner, repoSlug?: string);
81
+ constructor(run: GhRunner, repoSlug?: string, clock?: {
82
+ sleep?: (ms: number) => Promise<void>;
83
+ now?: () => number;
84
+ });
55
85
  openPr(spec: PrSpec): Promise<PrRef>;
56
86
  /**
57
87
  * Create `label` when the repo does not have it yet.
@@ -81,7 +111,18 @@ export declare class GhHost implements GitHost {
81
111
  listComments(prNumber: number): Promise<PrComment[]>;
82
112
  postComment(prNumber: number, body: string): Promise<void>;
83
113
  getPrStatus(prNumber: number): Promise<PrStatus>;
84
- mergePr(prNumber: number): Promise<void>;
114
+ mergePr(prNumber: number, expectedHeadSha?: string): Promise<void>;
115
+ /**
116
+ * Block until GitHub reports `expectedHeadSha` as the PR's head with a
117
+ * settled mergeability, or the timeout runs out.
118
+ *
119
+ * A timeout does not throw. Everything this guards against is GitHub being
120
+ * slow, and the merge that follows reports its own failure perfectly well;
121
+ * refusing to even attempt it would turn a slow answer into a worse outcome
122
+ * than the bug this fixes. A read that fails is treated the same way: keep
123
+ * waiting, then merge and let the merge speak.
124
+ */
125
+ private waitForHead;
85
126
  private exec;
86
127
  }
87
128
  //# sourceMappingURL=gh.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../../src/publish/gh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGlG,2EAA2E;AAC3E,MAAM,MAAM,QAAQ,GAAG,CACrB,IAAI,EAAE,SAAS,MAAM,EAAE,KACpB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhE;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAC9C,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAE7E,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAUzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBnD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAYxD;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAqB5D;AAqCD,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CActD;AAWD,sEAAsE;AACtE,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IAEnC;;;;;;OAMG;gBACS,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM;IAKtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAM1C;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,WAAW;IAMnB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAc7C,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAcnE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKpD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAWhD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhC,IAAI;CAUnB"}
1
+ {"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../../src/publish/gh.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,42 @@ export function ghCreateLabelArgs(label) {
51
51
  export function ghMergePrArgs(prNumber) {
52
52
  return ["pr", "merge", String(prNumber), "--merge"];
53
53
  }
54
+ /**
55
+ * How long to wait for GitHub to report the head we just pushed, and how often
56
+ * to ask. GitHub recomputes a PR's mergeability asynchronously; until it does,
57
+ * it answers with whatever it worked out for the previous head, which for the
58
+ * resolve-conflicts flow is the conflicted state that flow just fixed
59
+ * (TJ-1684). Seconds in practice, so the cap is generous rather than tuned.
60
+ */
61
+ export const MERGE_HEAD_TIMEOUT_MS = 60_000;
62
+ export const MERGE_HEAD_POLL_MS = 2_000;
63
+ /** Parse `gh pr view --json headRefOid,mergeable`, tolerating anything unexpected. */
64
+ export function parsePrHead(stdout) {
65
+ try {
66
+ const parsed = JSON.parse(stdout);
67
+ if (typeof parsed !== "object" || parsed === null)
68
+ return {};
69
+ const record = parsed;
70
+ const headRefOid = record.headRefOid;
71
+ const mergeable = record.mergeable;
72
+ return {
73
+ ...(typeof headRefOid === "string" ? { headRefOid } : {}),
74
+ ...(typeof mergeable === "string" ? { mergeable } : {}),
75
+ };
76
+ }
77
+ catch {
78
+ return {};
79
+ }
80
+ }
81
+ /**
82
+ * Whether the forge has caught up with `expectedHeadSha`: it reports that exact
83
+ * commit as the PR's head, and has finished working out what merging it would
84
+ * do. `UNKNOWN` is GitHub still computing, which is a different answer from
85
+ * "conflicting" and must not be mistaken for one.
86
+ */
87
+ export function hasCaughtUp(head, expectedHeadSha) {
88
+ return head.headRefOid === expectedHeadSha && head.mergeable !== "UNKNOWN";
89
+ }
54
90
  /** Build `gh pr create` args from a PR spec (one `--label` per label, in order). */
55
91
  export function ghOpenPrArgs(spec) {
56
92
  const args = [
@@ -172,16 +208,22 @@ function safeJsonArray(text) {
172
208
  export class GhHost {
173
209
  run;
174
210
  repoSlug;
211
+ sleep;
212
+ now;
175
213
  /**
176
214
  * @param run The `gh` runner.
177
215
  * @param repoSlug Optional `owner/repo`. When set, every `gh` invocation is
178
216
  * scoped to it with `--repo`, so commands resolve the target repo from the
179
217
  * GitHub API rather than a local checkout. Required for the fully-ephemeral
180
218
  * flow, where the host has no clone.
219
+ * @param clock Injected only so the merge wait (TJ-1684) can be tested
220
+ * without real time passing.
181
221
  */
182
- constructor(run, repoSlug) {
222
+ constructor(run, repoSlug, clock = {}) {
183
223
  this.run = run;
184
224
  this.repoSlug = repoSlug;
225
+ this.sleep = clock.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
226
+ this.now = clock.now ?? (() => Date.now());
185
227
  }
186
228
  async openPr(spec) {
187
229
  for (const label of spec.labels)
@@ -259,9 +301,45 @@ export class GhHost {
259
301
  ]);
260
302
  return parsePrStatus(result.stdout);
261
303
  }
262
- async mergePr(prNumber) {
304
+ async mergePr(prNumber, expectedHeadSha) {
305
+ if (expectedHeadSha !== undefined)
306
+ await this.waitForHead(prNumber, expectedHeadSha);
263
307
  await this.exec(ghMergePrArgs(prNumber));
264
308
  }
309
+ /**
310
+ * Block until GitHub reports `expectedHeadSha` as the PR's head with a
311
+ * settled mergeability, or the timeout runs out.
312
+ *
313
+ * A timeout does not throw. Everything this guards against is GitHub being
314
+ * slow, and the merge that follows reports its own failure perfectly well;
315
+ * refusing to even attempt it would turn a slow answer into a worse outcome
316
+ * than the bug this fixes. A read that fails is treated the same way: keep
317
+ * waiting, then merge and let the merge speak.
318
+ */
319
+ async waitForHead(prNumber, expectedHeadSha) {
320
+ const deadline = this.now() + MERGE_HEAD_TIMEOUT_MS;
321
+ for (;;) {
322
+ let head = {};
323
+ try {
324
+ const result = await this.exec([
325
+ "pr",
326
+ "view",
327
+ String(prNumber),
328
+ "--json",
329
+ "headRefOid,mergeable",
330
+ ]);
331
+ head = parsePrHead(result.stdout);
332
+ }
333
+ catch {
334
+ // A failed read is not an answer. Fall through to the deadline check.
335
+ }
336
+ if (hasCaughtUp(head, expectedHeadSha))
337
+ return;
338
+ if (this.now() >= deadline)
339
+ return;
340
+ await this.sleep(MERGE_HEAD_POLL_MS);
341
+ }
342
+ }
265
343
  async exec(args) {
266
344
  const scoped = this.repoSlug === undefined ? args : [...args, "--repo", this.repoSlug];
267
345
  const result = await this.run(scoped);
@@ -1 +1 @@
1
- {"version":3,"file":"gh.js","sourceRoot":"","sources":["../../src/publish/gh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gh.js","sourceRoot":"","sources":["../../src/publish/gh.ts"],"names":[],"mappings":"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"}
@@ -77,6 +77,17 @@ export interface PrStatus {
77
77
  url: string;
78
78
  checks: CheckRun[];
79
79
  }
80
+ /**
81
+ * True when at least one check has concluded and did not succeed.
82
+ *
83
+ * The one shared definition of "CI failed": a check still queued or in
84
+ * progress (no `conclusion` yet) never counts on its own. The board and
85
+ * dashboard pages restate this as a one-line inline check (they cannot import
86
+ * a server module into their inline `<script>`), but every other caller —
87
+ * including the respond pass deciding whether a queued fix request still needs
88
+ * an attempt — uses this.
89
+ */
90
+ export declare function hasFailingCheck(checks: readonly CheckRun[]): boolean;
80
91
  /** A code-hosting provider (GitHub today), abstracted so the flows are testable. */
81
92
  export interface GitHost {
82
93
  openPr(spec: PrSpec): Promise<PrRef>;
@@ -93,8 +104,14 @@ export interface GitHost {
93
104
  * (the resolve-conflicts-and-merge flow gets it there first); this is the
94
105
  * one place ghostrail merges anything, and it only runs because a human
95
106
  * asked for that specific PR.
107
+ *
108
+ * `expectedHeadSha`, when given, is the commit the caller just pushed. The
109
+ * host waits until the forge reports that commit as the PR's head before
110
+ * merging: mergeability is computed asynchronously, and asking too soon gets
111
+ * the answer for the *previous* head, which is the state the caller has just
112
+ * finished fixing (TJ-1684).
96
113
  */
97
- mergePr(prNumber: number): Promise<void>;
114
+ mergePr(prNumber: number, expectedHeadSha?: string): Promise<void>;
98
115
  }
99
116
  /**
100
117
  * Extract the PR number and URL from `gh pr create` output, which prints the PR
@@ -1 +1 @@
1
- {"version":3,"file":"githost.d.ts","sourceRoot":"","sources":["../../src/publish/githost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"githost.d.ts","sourceRoot":"","sources":["../../src/publish/githost.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,19 @@ export function isNonFastForward(output) {
42
42
  /fetch first/i.test(output) ||
43
43
  /updates were rejected/i.test(output));
44
44
  }
45
+ /**
46
+ * True when at least one check has concluded and did not succeed.
47
+ *
48
+ * The one shared definition of "CI failed": a check still queued or in
49
+ * progress (no `conclusion` yet) never counts on its own. The board and
50
+ * dashboard pages restate this as a one-line inline check (they cannot import
51
+ * a server module into their inline `<script>`), but every other caller —
52
+ * including the respond pass deciding whether a queued fix request still needs
53
+ * an attempt — uses this.
54
+ */
55
+ export function hasFailingCheck(checks) {
56
+ return checks.some((check) => check.conclusion !== undefined && check.conclusion !== "success");
57
+ }
45
58
  /**
46
59
  * Extract the PR number and URL from `gh pr create` output, which prints the PR
47
60
  * URL (e.g. `https://github.com/owner/repo/pull/42`) on its own line. Throws if
@@ -1 +1 @@
1
- {"version":3,"file":"githost.js","sourceRoot":"","sources":["../../src/publish/githost.ts"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AAExC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QACxB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,CACL,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CACtC,CAAC;AACJ,CAAC;AAwED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU,EAAE,KAAa,EAAE,IAAI,GAAG,KAAK;IACnE,OAAO,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,GAAG,CAAC;AACrC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CAAC,IAAc,EAAE,OAAe,EAAE,QAAiB;IACvE,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtD,2EAA2E;IAC3E,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,yEAAyE;IACzE,kEAAkE;IAClE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,mBAAmB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"githost.js","sourceRoot":"","sources":["../../src/publish/githost.ts"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AAExC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QACxB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,CACL,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CACtC,CAAC;AACJ,CAAC;AAoDD;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,MAA2B;IACzD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;AAClG,CAAC;AA4BD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU,EAAE,KAAa,EAAE,IAAI,GAAG,KAAK;IACnE,OAAO,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,GAAG,CAAC;AACrC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CAAC,IAAc,EAAE,OAAe,EAAE,QAAiB;IACvE,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtD,2EAA2E;IAC3E,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,yEAAyE;IACzE,kEAAkE;IAClE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,mBAAmB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { GhHost, type GhRunner, ghMergePrArgs, ghOpenPrArgs, parseCommentList, parseOpenPrList, parsePrStatus, } from "./gh.js";
2
- export { type CheckRun, type GitHost, GHOSTRAIL_MARKER, commitMessage, type OpenPr, type PrComment, type PrRef, type PrSpec, type PrStatus, parsePrUrl, prBody, } from "./githost.js";
2
+ export { type CheckRun, type GitHost, GHOSTRAIL_MARKER, commitMessage, hasFailingCheck, type OpenPr, type PrComment, type PrRef, type PrSpec, type PrStatus, parsePrUrl, prBody, } from "./githost.js";
3
3
  export { GitHubPublisher, type PublisherOptions } from "./github-publisher.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,QAAQ,EACb,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,gBAAgB,EAChB,aAAa,EACb,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,UAAU,EACV,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,QAAQ,EACb,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,UAAU,EACV,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { GhHost, ghMergePrArgs, ghOpenPrArgs, parseCommentList, parseOpenPrList, parsePrStatus, } from "./gh.js";
2
- export { GHOSTRAIL_MARKER, commitMessage, parsePrUrl, prBody, } from "./githost.js";
2
+ export { GHOSTRAIL_MARKER, commitMessage, hasFailingCheck, parsePrUrl, prBody, } from "./githost.js";
3
3
  export { GitHubPublisher } from "./github-publisher.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAGL,gBAAgB,EAChB,aAAa,EAMb,UAAU,EACV,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAyB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAGL,gBAAgB,EAChB,aAAa,EACb,eAAe,EAMf,UAAU,EACV,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAyB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { RELEASE_REQUEST_FILE, clearReleaseRequest, readReleaseRequest, releaseNow, releaseTick, requestRelease, writeReleaseRequest, type ReleaseDeps, type ReleaseRequest, type ReleaseResult, type ReleaseRunConfig, type ReleaseState, } from "./release.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/release/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { RELEASE_REQUEST_FILE, clearReleaseRequest, readReleaseRequest, releaseNow, releaseTick, requestRelease, writeReleaseRequest, } from "./release.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/release/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,GAMpB,MAAM,cAAc,CAAC"}