ghostrail 0.20.1 → 0.22.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 (118) hide show
  1. package/dist/board/page.d.ts.map +1 -1
  2. package/dist/board/page.js +76 -14
  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 +56 -1
  9. package/dist/cli/commands.d.ts.map +1 -1
  10. package/dist/cli/commands.js +203 -20
  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 +10 -0
  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.map +1 -1
  25. package/dist/dashboard/page.js +226 -9
  26. package/dist/dashboard/page.js.map +1 -1
  27. package/dist/dashboard/review-page.d.ts +5 -0
  28. package/dist/dashboard/review-page.d.ts.map +1 -1
  29. package/dist/dashboard/review-page.js +23 -3
  30. package/dist/dashboard/review-page.js.map +1 -1
  31. package/dist/dashboard/routes.d.ts +17 -0
  32. package/dist/dashboard/routes.d.ts.map +1 -1
  33. package/dist/dashboard/routes.js +25 -0
  34. package/dist/dashboard/routes.js.map +1 -1
  35. package/dist/dashboard/server.d.ts +29 -0
  36. package/dist/dashboard/server.d.ts.map +1 -1
  37. package/dist/dashboard/server.js +91 -2
  38. package/dist/dashboard/server.js.map +1 -1
  39. package/dist/doctor/checks.d.ts +1 -0
  40. package/dist/doctor/checks.d.ts.map +1 -1
  41. package/dist/doctor/checks.js +1 -1
  42. package/dist/doctor/checks.js.map +1 -1
  43. package/dist/doctor/probes.d.ts +19 -3
  44. package/dist/doctor/probes.d.ts.map +1 -1
  45. package/dist/doctor/probes.js +22 -27
  46. package/dist/doctor/probes.js.map +1 -1
  47. package/dist/doctor/run.d.ts.map +1 -1
  48. package/dist/doctor/run.js +17 -3
  49. package/dist/doctor/run.js.map +1 -1
  50. package/dist/factory/build.d.ts +6 -0
  51. package/dist/factory/build.d.ts.map +1 -1
  52. package/dist/factory/build.js +26 -0
  53. package/dist/factory/build.js.map +1 -1
  54. package/dist/loop/next-tick.d.ts +50 -0
  55. package/dist/loop/next-tick.d.ts.map +1 -0
  56. package/dist/loop/next-tick.js +87 -0
  57. package/dist/loop/next-tick.js.map +1 -0
  58. package/dist/loop/schedule.d.ts +11 -2
  59. package/dist/loop/schedule.d.ts.map +1 -1
  60. package/dist/loop/schedule.js +3 -1
  61. package/dist/loop/schedule.js.map +1 -1
  62. package/dist/loop/tick-log.d.ts +13 -0
  63. package/dist/loop/tick-log.d.ts.map +1 -0
  64. package/dist/loop/tick-log.js +64 -0
  65. package/dist/loop/tick-log.js.map +1 -0
  66. package/dist/publish/gh.d.ts +43 -2
  67. package/dist/publish/gh.d.ts.map +1 -1
  68. package/dist/publish/gh.js +80 -2
  69. package/dist/publish/gh.js.map +1 -1
  70. package/dist/publish/githost.d.ts +18 -1
  71. package/dist/publish/githost.d.ts.map +1 -1
  72. package/dist/publish/githost.js +13 -0
  73. package/dist/publish/githost.js.map +1 -1
  74. package/dist/publish/index.d.ts +1 -1
  75. package/dist/publish/index.d.ts.map +1 -1
  76. package/dist/publish/index.js +1 -1
  77. package/dist/publish/index.js.map +1 -1
  78. package/dist/release/index.d.ts +2 -0
  79. package/dist/release/index.d.ts.map +1 -0
  80. package/dist/release/index.js +2 -0
  81. package/dist/release/index.js.map +1 -0
  82. package/dist/release/release.d.ts +67 -0
  83. package/dist/release/release.d.ts.map +1 -0
  84. package/dist/release/release.js +193 -0
  85. package/dist/release/release.js.map +1 -0
  86. package/dist/respond/ci-fix-queue.d.ts +40 -0
  87. package/dist/respond/ci-fix-queue.d.ts.map +1 -0
  88. package/dist/respond/ci-fix-queue.js +74 -0
  89. package/dist/respond/ci-fix-queue.js.map +1 -0
  90. package/dist/respond/index.d.ts +2 -1
  91. package/dist/respond/index.d.ts.map +1 -1
  92. package/dist/respond/index.js +2 -1
  93. package/dist/respond/index.js.map +1 -1
  94. package/dist/respond/merge.d.ts.map +1 -1
  95. package/dist/respond/merge.js +17 -1
  96. package/dist/respond/merge.js.map +1 -1
  97. package/dist/respond/respond.d.ts +33 -1
  98. package/dist/respond/respond.d.ts.map +1 -1
  99. package/dist/respond/respond.js +155 -9
  100. package/dist/respond/respond.js.map +1 -1
  101. package/dist/store/events.d.ts +30 -0
  102. package/dist/store/events.d.ts.map +1 -1
  103. package/dist/store/events.js +38 -0
  104. package/dist/store/events.js.map +1 -1
  105. package/dist/store/index.d.ts +1 -1
  106. package/dist/store/index.d.ts.map +1 -1
  107. package/dist/store/index.js +1 -1
  108. package/dist/store/index.js.map +1 -1
  109. package/dist/triage/engine.d.ts +6 -2
  110. package/dist/triage/engine.d.ts.map +1 -1
  111. package/dist/triage/engine.js +6 -1
  112. package/dist/triage/engine.js.map +1 -1
  113. package/package.json +1 -1
  114. package/skill/ghostrail/SKILL.md +15 -4
  115. package/templates/code/ghostrail.toml +3 -0
  116. package/templates/code/prompts/release.md +40 -0
  117. package/templates/code/prompts/respond.md +2 -1
  118. package/templates/content/prompts/respond.md +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/doctor/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/doctor/run.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { GlobalStore } from "../global/store.js";
4
4
  import type { LoopDeps } from "../loop/engine.js";
5
5
  import type { Lock, Logger, Source } from "../loop/ports.js";
6
6
  import { type GhRunner } from "../publish/gh.js";
7
+ import type { ReleaseDeps, ReleaseRunConfig } from "../release/release.js";
7
8
  import type { RespondConfig, RespondDeps } from "../respond/respond.js";
8
9
  import { DEFAULT_FORWARD_ENV } from "../secrets/known.js";
9
10
  import type { TriageDeps } from "../triage/engine.js";
@@ -81,4 +82,9 @@ export declare function buildRespondDeps(config: GhostrailConfig, ctx: BuildCont
81
82
  deps: RespondDeps;
82
83
  config: RespondConfig;
83
84
  };
85
+ /** Assemble the release dependencies + config for `ghostrail release`. */
86
+ export declare function buildReleaseDeps(config: GhostrailConfig, ctx: BuildContext): {
87
+ deps: ReleaseDeps;
88
+ config: ReleaseRunConfig;
89
+ };
84
90
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/factory/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAU,KAAK,QAAQ,EAAiB,MAAM,kBAAkB,CAAC;AAExE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,aAAa,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,iDAAiD;IACjD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAW7D;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAc9E;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,QAAQ,CA0BlF;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU,CAiCtF;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,GAChB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAgC9C"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/factory/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAU,KAAK,QAAQ,EAAiB,MAAM,kBAAkB,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,aAAa,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,iDAAiD;IACjD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAW7D;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAc9E;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,QAAQ,CA0BlF;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU,CAiCtF;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,GAChB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAoC9C;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,GAChB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAmBjD"}
@@ -6,6 +6,7 @@ import { spawnCollect } from "../backend/proc.js";
6
6
  import { CommandGate } from "../gate/gate.js";
7
7
  import { GhHost, parseRepoSlug } from "../publish/gh.js";
8
8
  import { GitHubPublisher } from "../publish/github-publisher.js";
9
+ import { FileCiFixQueueStore } from "../respond/ci-fix-queue.js";
9
10
  import { FileWatermarkStore } from "../respond/store.js";
10
11
  import { DEFAULT_FORWARD_ENV } from "../secrets/known.js";
11
12
  import { LinearSource, createFetchRequester } from "../source/linear.js";
@@ -137,7 +138,11 @@ export function buildRespondDeps(config, ctx) {
137
138
  backend,
138
139
  agent: new ClaudeCodeAgent(ctx.claudeProfileDir, ctx.promptSourceDir),
139
140
  watermarks: new FileWatermarkStore(join(ctx.stateDir, "watermarks.json")),
141
+ ciFixQueue: new FileCiFixQueueStore(join(ctx.stateDir, "ci-fix-queue.json")),
140
142
  baseBranch: config.factory.baseBranch,
143
+ // The same image the fix loop runs in. Omitted, the container backend uses
144
+ // its own default, which carries no git and no agent (TJ-1680).
145
+ ...(config.backend.image === undefined ? {} : { image: config.backend.image }),
141
146
  // Fold in tracker (Linear) comments too, not just PR comments.
142
147
  source: buildSource(config, ctx),
143
148
  // One store, read and written: the sink records the pass, and the lookup
@@ -159,4 +164,25 @@ export function buildRespondDeps(config, ctx) {
159
164
  };
160
165
  return { deps, config: respondConfig };
161
166
  }
167
+ /** Assemble the release dependencies + config for `ghostrail release`. */
168
+ export function buildReleaseDeps(config, ctx) {
169
+ if (config.release === undefined) {
170
+ throw new Error("release requires a [release] config section");
171
+ }
172
+ const deps = {
173
+ repoPath: ctx.workRepoPath ?? ctx.repoPath,
174
+ backend: buildBackend(config),
175
+ agent: new ClaudeCodeAgent(ctx.claudeProfileDir, ctx.promptSourceDir),
176
+ baseBranch: config.factory.baseBranch,
177
+ events: new FileStore(ctx.stateDir),
178
+ stateDir: ctx.stateDir,
179
+ ...(ctx.claudeProfileDir === undefined ? {} : { claudeProfileDir: ctx.claudeProfileDir }),
180
+ ...(ctx.logger === undefined ? {} : { logger: ctx.logger }),
181
+ };
182
+ const releaseConfig = {
183
+ agent: { ...config.agent, prompt: config.release.prompt },
184
+ guardrails: config.guardrails,
185
+ };
186
+ return { deps, config: releaseConfig };
187
+ }
162
188
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/factory/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/factory/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,OAAO,EAAE,MAAM,EAAiB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;AA+C/B,2DAA2D;AAC3D,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,KAAK,gBAAgB;YACnB,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,WAAW;YACd,OAAO,IAAI,gBAAgB,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACnE;YACE,MAAM,IAAI,KAAK,CACb,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,qEAAqE,CACrG,CAAC;IACN,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,MAAuB,EAAE,GAAiB;IACpE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,IAAI,+CAA+C,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;IAC5F,OAAO,IAAI,YAAY,CAAC,SAAS,EAAE;QACjC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;QAChC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,cAAc;KAC3C,CAAC,CAAC;AACL,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,UAAU,CAAC;IAClD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAC,MAAuB,EAAE,GAAiB;IACtE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE;QACnD,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU;QACrC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;QAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KACrC,CAAC,CAAC;IACH,wEAAwE;IACxE,2EAA2E;IAC3E,kCAAkC;IAClC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,QAAQ;QAC1C,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC;QAChC,OAAO;QACP,KAAK,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,eAAe,CAAC;QACrE,IAAI,EAAE,IAAI,WAAW,EAAE;QACvB,SAAS;QACT,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK;QACd,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzF,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,eAAe,CAAC,MAAuB,EAAE,GAAiB;IACxE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,kBAAkB,MAAM,CAAC,MAAM,CAAC,IAAI,+CAA+C,CACpF,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE;QACzC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClF,+EAA+E;QAC/E,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;QAChC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,cAAc;KAC3C,CAAC,CAAC;IACH,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,QAAQ;QAC1C,MAAM;QACN,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,eAAe,CAAC;QACrE,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,sEAAsE;QACtE,wDAAwD;QACxD,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzF,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAC9B,MAAuB,EACvB,GAAiB;IAEjB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,IAAI,GAAgB;QACxB,QAAQ,EAAE,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,QAAQ;QAC1C,IAAI;QACJ,OAAO;QACP,KAAK,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,eAAe,CAAC;QACrE,UAAU,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACzE,UAAU,EAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAC5E,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU;QACrC,2EAA2E;QAC3E,gEAAgE;QAChE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC9E,+DAA+D;QAC/D,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC;QAChC,yEAAyE;QACzE,yEAAyE;QACzE,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE,YAAY;QAClB,GAAG,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzF,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;KAC5D,CAAC;IACF,MAAM,aAAa,GAAkB;QACnC,KAAK,EAAE,WAAW;QAClB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE;QAChC,0EAA0E;QAC1E,gFAAgF;QAChF,KAAK,EACH,MAAM,CAAC,OAAO,KAAK,SAAS;YAC1B,CAAC,CAAC,MAAM,CAAC,KAAK;YACd,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QACxD,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACzC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAC9B,MAAuB,EACvB,GAAiB;IAEjB,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,IAAI,GAAgB;QACxB,QAAQ,EAAE,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,QAAQ;QAC1C,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;QAC7B,KAAK,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,eAAe,CAAC;QACrE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU;QACrC,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,GAAG,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzF,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;KAC5D,CAAC;IACF,MAAM,aAAa,GAAqB;QACtC,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QACzD,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,50 @@
1
+ /** The next-tick file's path inside a store directory (this repo's state dir). */
2
+ export declare function nextTickPath(dir: string): string;
3
+ export interface TickState {
4
+ /**
5
+ * Epoch millis of the next scheduled tick, absent for a ghostrail that has
6
+ * never ticked under `watch` or was last run under plain `ghostrail run`.
7
+ */
8
+ nextTickAt?: number;
9
+ /**
10
+ * Epoch millis of when the tick currently running started, absent when no
11
+ * tick is in flight. A tick that outlasts the interval is the ordinary case
12
+ * for an agent-backed repo, and without this the countdown reaches zero and
13
+ * sits at "due now" for the rest of the run with nothing to say (TJ-1683).
14
+ */
15
+ tickStartedAt?: number;
16
+ }
17
+ /**
18
+ * The loop's cycle state, or an empty record when the file is absent,
19
+ * unreadable, or holds anything other than the numbers it should. Each field
20
+ * is read independently, so a half-written file still yields whatever part of
21
+ * it does parse rather than nothing at all.
22
+ */
23
+ export declare function readTickState(dir: string): Promise<TickState>;
24
+ /**
25
+ * Epoch millis of the next scheduled tick, or `undefined` when there is none
26
+ * to read. Kept alongside {@link readTickState} for callers that want only
27
+ * this one field.
28
+ */
29
+ export declare function readNextTickAt(dir: string): Promise<number | undefined>;
30
+ /** Write the whole cycle state, overwriting whatever was there. */
31
+ export declare function writeTickState(dir: string, state: TickState): Promise<void>;
32
+ /**
33
+ * Record when the next tick is expected, and that no tick is running. Written
34
+ * at the end of a tick: the one that just finished is over, and the next is
35
+ * `intervalMs` away.
36
+ */
37
+ export declare function writeNextTickAt(dir: string, at: number): Promise<void>;
38
+ /**
39
+ * Record that a tick has started, keeping whatever `nextTickAt` was already
40
+ * there. Preserved rather than cleared so a reader still knows when this tick
41
+ * was originally due, which is what makes "running late" visible at all.
42
+ */
43
+ export declare function markTickStarted(dir: string, at: number): Promise<void>;
44
+ /**
45
+ * Clear any tick-in-flight marker, keeping `nextTickAt`. Called once when
46
+ * `watch` starts, so a process killed mid-tick cannot leave the dashboard
47
+ * reading "ticking now" forever.
48
+ */
49
+ export declare function clearTickStarted(dir: string): Promise<void>;
50
+ //# sourceMappingURL=next-tick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-tick.d.ts","sourceRoot":"","sources":["../../src/loop/next-tick.ts"],"names":[],"mappings":"AAYA,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AASD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAanE;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7E;AAED,mEAAmE;AACnE,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjF;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjE"}
@@ -0,0 +1,87 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Where a ghostrail's watch loop is in its cycle, so the dashboard can say so
5
+ * without a live connection to the daemon: when the next base tick is due, and
6
+ * whether one is running right now. A display convenience only: nothing in the
7
+ * loop reads any of this back to decide when to actually tick.
8
+ */
9
+ const NEXT_TICK_FILE = "next-tick.json";
10
+ /** The next-tick file's path inside a store directory (this repo's state dir). */
11
+ export function nextTickPath(dir) {
12
+ return join(dir, NEXT_TICK_FILE);
13
+ }
14
+ /** One finite number off an unknown record, or undefined for anything else. */
15
+ function finiteAt(parsed, key) {
16
+ if (typeof parsed !== "object" || parsed === null || !(key in parsed))
17
+ return undefined;
18
+ const value = parsed[key];
19
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
20
+ }
21
+ /**
22
+ * The loop's cycle state, or an empty record when the file is absent,
23
+ * unreadable, or holds anything other than the numbers it should. Each field
24
+ * is read independently, so a half-written file still yields whatever part of
25
+ * it does parse rather than nothing at all.
26
+ */
27
+ export async function readTickState(dir) {
28
+ let parsed;
29
+ try {
30
+ parsed = JSON.parse(await readFile(nextTickPath(dir), "utf8"));
31
+ }
32
+ catch {
33
+ return {};
34
+ }
35
+ const nextTickAt = finiteAt(parsed, "nextTickAt");
36
+ const tickStartedAt = finiteAt(parsed, "tickStartedAt");
37
+ return {
38
+ ...(nextTickAt === undefined ? {} : { nextTickAt }),
39
+ ...(tickStartedAt === undefined ? {} : { tickStartedAt }),
40
+ };
41
+ }
42
+ /**
43
+ * Epoch millis of the next scheduled tick, or `undefined` when there is none
44
+ * to read. Kept alongside {@link readTickState} for callers that want only
45
+ * this one field.
46
+ */
47
+ export async function readNextTickAt(dir) {
48
+ return (await readTickState(dir)).nextTickAt;
49
+ }
50
+ /** Write the whole cycle state, overwriting whatever was there. */
51
+ export async function writeTickState(dir, state) {
52
+ await mkdir(dir, { recursive: true });
53
+ await writeFile(nextTickPath(dir), `${JSON.stringify(state)}\n`, "utf8");
54
+ }
55
+ /**
56
+ * Record when the next tick is expected, and that no tick is running. Written
57
+ * at the end of a tick: the one that just finished is over, and the next is
58
+ * `intervalMs` away.
59
+ */
60
+ export async function writeNextTickAt(dir, at) {
61
+ await writeTickState(dir, { nextTickAt: at });
62
+ }
63
+ /**
64
+ * Record that a tick has started, keeping whatever `nextTickAt` was already
65
+ * there. Preserved rather than cleared so a reader still knows when this tick
66
+ * was originally due, which is what makes "running late" visible at all.
67
+ */
68
+ export async function markTickStarted(dir, at) {
69
+ const existing = await readTickState(dir);
70
+ await writeTickState(dir, { ...existing, tickStartedAt: at });
71
+ }
72
+ /**
73
+ * Clear any tick-in-flight marker, keeping `nextTickAt`. Called once when
74
+ * `watch` starts, so a process killed mid-tick cannot leave the dashboard
75
+ * reading "ticking now" forever.
76
+ */
77
+ export async function clearTickStarted(dir) {
78
+ const { nextTickAt, tickStartedAt } = await readTickState(dir);
79
+ // Nothing to clear: return before writing, so this never creates a file for a
80
+ // ghostrail that has never ticked. Keyed on the marker and not on
81
+ // `nextTickAt`, because a loop killed mid-tick before it ever recorded a
82
+ // schedule is precisely the case this exists for.
83
+ if (tickStartedAt === undefined)
84
+ return;
85
+ await writeTickState(dir, nextTickAt === undefined ? {} : { nextTickAt });
86
+ }
87
+ //# sourceMappingURL=next-tick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-tick.js","sourceRoot":"","sources":["../../src/loop/next-tick.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"}
@@ -0,0 +1,13 @@
1
+ /** The log file's path inside a store directory (this repo's state dir). */
2
+ export declare function logPath(dir: string): string;
3
+ /** Append one line, timestamped, trimming the file first if it has grown large. */
4
+ export declare function appendLog(dir: string, message: string, now?: number): Promise<void>;
5
+ export interface LogPage {
6
+ /** Up to `limit` most recent lines, oldest first. */
7
+ lines: string[];
8
+ /** How many lines are currently on disk (after the last trim). */
9
+ total: number;
10
+ }
11
+ /** The most recent `limit` lines, oldest first, or all of them when there are fewer. */
12
+ export declare function readLog(dir: string, limit: number): Promise<LogPage>;
13
+ //# sourceMappingURL=tick-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick-log.d.ts","sourceRoot":"","sources":["../../src/loop/tick-log.ts"],"names":[],"mappings":"AAmBA,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,mFAAmF;AACnF,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F;AAqBD,MAAM,WAAW,OAAO;IACtB,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wFAAwF;AACxF,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1E"}
@@ -0,0 +1,64 @@
1
+ import { appendFile, mkdir, readFile, stat, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ /**
4
+ * A rolling, capped log of what a ghostrail's watch loop has logged, so the
5
+ * dashboard can show recent activity without shelling out to `journalctl`.
6
+ * Not a substitute for a real log: it caps at {@link MAX_LOG_LINES} and drops
7
+ * the oldest lines once it does.
8
+ */
9
+ const LOG_FILE = "watch.log";
10
+ /** Once appending pushes the file past this many lines, it's trimmed. */
11
+ const MAX_LOG_LINES = 5000;
12
+ /** What a trim keeps: the most recent lines, oldest of them dropped first. */
13
+ const TRIM_TO_LINES = 2000;
14
+ // Trimming reads and rewrites the whole file, so it only runs once the file is
15
+ // comfortably past its cap; the common append is a plain O(1) appendFile.
16
+ const TRIM_CHECK_BYTES = 512 * 1024;
17
+ /** The log file's path inside a store directory (this repo's state dir). */
18
+ export function logPath(dir) {
19
+ return join(dir, LOG_FILE);
20
+ }
21
+ /** Append one line, timestamped, trimming the file first if it has grown large. */
22
+ export async function appendLog(dir, message, now = Date.now()) {
23
+ await mkdir(dir, { recursive: true });
24
+ const path = logPath(dir);
25
+ const line = `${new Date(now).toISOString()} ${message.replace(/\r?\n/g, " ")}\n`;
26
+ await appendFile(path, line, "utf8");
27
+ await trimIfLarge(path);
28
+ }
29
+ async function trimIfLarge(path) {
30
+ let size;
31
+ try {
32
+ size = (await stat(path)).size;
33
+ }
34
+ catch {
35
+ return;
36
+ }
37
+ if (size < TRIM_CHECK_BYTES)
38
+ return;
39
+ let raw;
40
+ try {
41
+ raw = await readFile(path, "utf8");
42
+ }
43
+ catch {
44
+ return;
45
+ }
46
+ const lines = raw.split("\n").filter((line) => line.length > 0);
47
+ if (lines.length <= MAX_LOG_LINES)
48
+ return;
49
+ await writeFile(path, `${lines.slice(-TRIM_TO_LINES).join("\n")}\n`, "utf8");
50
+ }
51
+ /** The most recent `limit` lines, oldest first, or all of them when there are fewer. */
52
+ export async function readLog(dir, limit) {
53
+ let raw;
54
+ try {
55
+ raw = await readFile(logPath(dir), "utf8");
56
+ }
57
+ catch {
58
+ return { lines: [], total: 0 };
59
+ }
60
+ const lines = raw.split("\n").filter((line) => line.length > 0);
61
+ const bounded = Math.max(0, limit);
62
+ return { lines: lines.slice(Math.max(0, lines.length - bounded)), total: lines.length };
63
+ }
64
+ //# sourceMappingURL=tick-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick-log.js","sourceRoot":"","sources":["../../src/loop/tick-log.ts"],"names":[],"mappings":"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"}
@@ -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":"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;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAExC,kFAAkF;AAClF,MAAM,WAAW,MAAM;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAclD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAE1E;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;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC;;;;;;;;OAQG;gBAED,GAAG,EAAE,QAAQ,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,GAAE;QAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAQrE,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,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxE;;;;;;;;;OASG;YACW,WAAW;YAsBX,IAAI;CAUnB"}
@@ -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);