@revisium/orchestrator 0.2.0-alpha.3 → 0.2.0-alpha.4

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 (259) hide show
  1. package/README.md +3 -3
  2. package/control-plane/bootstrap.config.json +104 -550
  3. package/control-plane/default-playbook/catalog/pipelines.json +394 -1122
  4. package/control-plane/default-playbook/catalog/run-profiles.json +208 -0
  5. package/control-plane/default-playbook/package.json +1 -1
  6. package/control-plane/default-playbook/playbook.json +2 -1
  7. package/control-plane/default-playbook/prompts/developer.md +6 -6
  8. package/dist/__generated__/client/browser.js +18 -0
  9. package/dist/__generated__/client/browser.js.map +1 -0
  10. package/dist/__generated__/client/client.js +32 -0
  11. package/dist/__generated__/client/client.js.map +1 -0
  12. package/dist/__generated__/client/commonInputTypes.js +11 -0
  13. package/dist/__generated__/client/commonInputTypes.js.map +1 -0
  14. package/dist/__generated__/client/enums.js +19 -0
  15. package/dist/__generated__/client/enums.js.map +1 -0
  16. package/dist/__generated__/client/internal/class.js +53 -0
  17. package/dist/__generated__/client/internal/class.js.map +1 -0
  18. package/dist/__generated__/client/internal/prismaNamespace.js +451 -0
  19. package/dist/__generated__/client/internal/prismaNamespace.js.map +1 -0
  20. package/dist/__generated__/client/internal/prismaNamespaceBrowser.js +422 -0
  21. package/dist/__generated__/client/internal/prismaNamespaceBrowser.js.map +1 -0
  22. package/dist/__generated__/client/models/Branch.js +2 -0
  23. package/dist/__generated__/client/models/Branch.js.map +1 -0
  24. package/dist/__generated__/client/models/CostLedgerEntry.js +2 -0
  25. package/dist/__generated__/client/models/CostLedgerEntry.js.map +1 -0
  26. package/dist/__generated__/client/models/FileBlob.js +2 -0
  27. package/dist/__generated__/client/models/FileBlob.js.map +1 -0
  28. package/dist/__generated__/client/models/InboxItem.js +2 -0
  29. package/dist/__generated__/client/models/InboxItem.js.map +1 -0
  30. package/dist/__generated__/client/models/ProjectFileUsage.js +2 -0
  31. package/dist/__generated__/client/models/ProjectFileUsage.js.map +1 -0
  32. package/dist/__generated__/client/models/Revision.js +2 -0
  33. package/dist/__generated__/client/models/Revision.js.map +1 -0
  34. package/dist/__generated__/client/models/RevoProject.js +2 -0
  35. package/dist/__generated__/client/models/RevoProject.js.map +1 -0
  36. package/dist/__generated__/client/models/Row.js +2 -0
  37. package/dist/__generated__/client/models/Row.js.map +1 -0
  38. package/dist/__generated__/client/models/RunAttempt.js +2 -0
  39. package/dist/__generated__/client/models/RunAttempt.js.map +1 -0
  40. package/dist/__generated__/client/models/RunEvent.js +2 -0
  41. package/dist/__generated__/client/models/RunEvent.js.map +1 -0
  42. package/dist/__generated__/client/models/RunOutput.js +2 -0
  43. package/dist/__generated__/client/models/RunOutput.js.map +1 -0
  44. package/dist/__generated__/client/models/RunTask.js +2 -0
  45. package/dist/__generated__/client/models/RunTask.js.map +1 -0
  46. package/dist/__generated__/client/models/Table.js +2 -0
  47. package/dist/__generated__/client/models/Table.js.map +1 -0
  48. package/dist/__generated__/client/models/TableMigration.js +2 -0
  49. package/dist/__generated__/client/models/TableMigration.js.map +1 -0
  50. package/dist/__generated__/client/models/TaskRun.js +2 -0
  51. package/dist/__generated__/client/models/TaskRun.js.map +1 -0
  52. package/dist/__generated__/client/models.js +2 -0
  53. package/dist/__generated__/client/models.js.map +1 -0
  54. package/dist/api/graphql-api/graphql-ws/pubsub.module.js +2 -1
  55. package/dist/api/graphql-api/graphql-ws/pubsub.module.js.map +1 -1
  56. package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js +110 -28
  57. package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js.map +1 -1
  58. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js +3 -1
  59. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js.map +1 -1
  60. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js +6 -0
  61. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js.map +1 -1
  62. package/dist/api/graphql-api/registerGraphqlEnums.js +2 -0
  63. package/dist/api/graphql-api/registerGraphqlEnums.js.map +1 -1
  64. package/dist/api/graphql-api/runs/inputs/create-run.input.js +17 -0
  65. package/dist/api/graphql-api/runs/inputs/create-run.input.js.map +1 -1
  66. package/dist/api/graphql-api/runs/inputs/execution-profile.input.js +85 -0
  67. package/dist/api/graphql-api/runs/inputs/execution-profile.input.js.map +1 -0
  68. package/dist/api/graphql-api/runs/inputs/simulate-route.input.js +11 -0
  69. package/dist/api/graphql-api/runs/inputs/simulate-route.input.js.map +1 -1
  70. package/dist/api/graphql-api/runs/model/run-workflow.model.js +5 -0
  71. package/dist/api/graphql-api/runs/model/run-workflow.model.js.map +1 -1
  72. package/dist/api/graphql-api/share/model/issue-action.model.js +7 -0
  73. package/dist/api/graphql-api/share/model/issue-action.model.js.map +1 -0
  74. package/dist/cli/commands/doctor-report.js +1 -13
  75. package/dist/cli/commands/doctor-report.js.map +1 -1
  76. package/dist/cli/commands/lifecycle.js +50 -65
  77. package/dist/cli/commands/lifecycle.js.map +1 -1
  78. package/dist/cli/commands/{revisium-helpers.js → process-helpers.js} +1 -24
  79. package/dist/cli/commands/process-helpers.js.map +1 -0
  80. package/dist/config.js +17 -55
  81. package/dist/config.js.map +1 -1
  82. package/dist/control-plane/bootstrap-json-validator.js +65 -0
  83. package/dist/control-plane/bootstrap-json-validator.js.map +1 -0
  84. package/dist/control-plane/bootstrap.js +25 -38
  85. package/dist/control-plane/bootstrap.js.map +1 -1
  86. package/dist/control-plane/change-notifications.js +45 -14
  87. package/dist/control-plane/change-notifications.js.map +1 -1
  88. package/dist/control-plane/data-access.js +1 -106
  89. package/dist/control-plane/data-access.js.map +1 -1
  90. package/dist/control-plane/default-playbook-policy.js +497 -94
  91. package/dist/control-plane/default-playbook-policy.js.map +1 -1
  92. package/dist/control-plane/definitions.js +4 -5
  93. package/dist/control-plane/definitions.js.map +1 -1
  94. package/dist/control-plane/engine-transport.js +381 -0
  95. package/dist/control-plane/engine-transport.js.map +1 -0
  96. package/dist/control-plane/inbox.js +15 -7
  97. package/dist/control-plane/inbox.js.map +1 -1
  98. package/dist/control-plane/index.js +0 -1
  99. package/dist/control-plane/index.js.map +1 -1
  100. package/dist/control-plane/merge-override-audit.js +2 -2
  101. package/dist/control-plane/merge-override-audit.js.map +1 -1
  102. package/dist/control-plane/pipeline-coverage-registry.js +478 -0
  103. package/dist/control-plane/pipeline-coverage-registry.js.map +1 -0
  104. package/dist/control-plane/query-types.js +2 -0
  105. package/dist/control-plane/query-types.js.map +1 -0
  106. package/dist/control-plane/run-profiles.js +89 -0
  107. package/dist/control-plane/run-profiles.js.map +1 -0
  108. package/dist/control-plane/schema-migration.js +0 -35
  109. package/dist/control-plane/schema-migration.js.map +1 -1
  110. package/dist/control-plane/seed-default-playbook.js +2 -31
  111. package/dist/control-plane/seed-default-playbook.js.map +1 -1
  112. package/dist/control-plane/tables.js +8 -0
  113. package/dist/control-plane/tables.js.map +1 -1
  114. package/dist/control-plane/transport.js +16 -0
  115. package/dist/control-plane/transport.js.map +1 -0
  116. package/dist/control-plane/versioned-meaning.js +56 -14
  117. package/dist/control-plane/versioned-meaning.js.map +1 -1
  118. package/dist/e2e/kit/agents.js +60 -6
  119. package/dist/e2e/kit/agents.js.map +1 -1
  120. package/dist/e2e/kit/assertions.js +13 -1
  121. package/dist/e2e/kit/assertions.js.map +1 -1
  122. package/dist/e2e/kit/drive.js +46 -11
  123. package/dist/e2e/kit/drive.js.map +1 -1
  124. package/dist/e2e/kit/env.js +17 -1
  125. package/dist/e2e/kit/env.js.map +1 -1
  126. package/dist/e2e/kit/fake-integrator.js +25 -5
  127. package/dist/e2e/kit/fake-integrator.js.map +1 -1
  128. package/dist/e2e/kit/gh-emulator.js +158 -24
  129. package/dist/e2e/kit/gh-emulator.js.map +1 -1
  130. package/dist/e2e/kit/harness.js +44 -10
  131. package/dist/e2e/kit/harness.js.map +1 -1
  132. package/dist/e2e/kit/index.js +1 -0
  133. package/dist/e2e/kit/index.js.map +1 -1
  134. package/dist/e2e/kit/scenario.js +165 -0
  135. package/dist/e2e/kit/scenario.js.map +1 -0
  136. package/dist/e2e/kit/scenarios.js +12 -18
  137. package/dist/e2e/kit/scenarios.js.map +1 -1
  138. package/dist/engine/dbos.service.js +8 -1
  139. package/dist/engine/dbos.service.js.map +1 -1
  140. package/dist/features/pr/queries/impl/get-pr-readiness.query.js.map +1 -1
  141. package/dist/features/runs/commands/impl/create-run.command.js.map +1 -1
  142. package/dist/host/daemon.js +32 -8
  143. package/dist/host/daemon.js.map +1 -1
  144. package/dist/host/ensure-host.js +3 -3
  145. package/dist/host/ensure-host.js.map +1 -1
  146. package/dist/host/host-runtime.js.map +1 -1
  147. package/dist/host/host.lifecycle.js +3 -16
  148. package/dist/host/host.lifecycle.js.map +1 -1
  149. package/dist/http/graphql-host.js +17 -8
  150. package/dist/http/graphql-host.js.map +1 -1
  151. package/dist/mcp/mcp-capabilities.js +3 -2
  152. package/dist/mcp/mcp-capabilities.js.map +1 -1
  153. package/dist/mcp/mcp-facade.service.js +21 -0
  154. package/dist/mcp/mcp-facade.service.js.map +1 -1
  155. package/dist/mcp/mcp-tools.js +35 -1
  156. package/dist/mcp/mcp-tools.js.map +1 -1
  157. package/dist/pipeline/data-driven-task.workflow.js +276 -57
  158. package/dist/pipeline/data-driven-task.workflow.js.map +1 -1
  159. package/dist/pipeline/pipeline.service.js +27 -5
  160. package/dist/pipeline/pipeline.service.js.map +1 -1
  161. package/dist/pipeline/route-contract.js +123 -3
  162. package/dist/pipeline/route-contract.js.map +1 -1
  163. package/dist/pipeline-core/condition-scopes.js +15 -0
  164. package/dist/pipeline-core/condition-scopes.js.map +1 -0
  165. package/dist/pipeline-core/index.js +2 -0
  166. package/dist/pipeline-core/index.js.map +1 -1
  167. package/dist/pipeline-core/kit/fixtures.js +81 -44
  168. package/dist/pipeline-core/kit/fixtures.js.map +1 -1
  169. package/dist/pipeline-core/materialize.js +221 -0
  170. package/dist/pipeline-core/materialize.js.map +1 -0
  171. package/dist/pipeline-core/types.js +5 -0
  172. package/dist/pipeline-core/types.js.map +1 -1
  173. package/dist/pipeline-core/validate-loops.js +2 -15
  174. package/dist/pipeline-core/validate-loops.js.map +1 -1
  175. package/dist/pipeline-core/validate-resilience.js +257 -0
  176. package/dist/pipeline-core/validate-resilience.js.map +1 -0
  177. package/dist/pipeline-core/validate.js +2 -0
  178. package/dist/pipeline-core/validate.js.map +1 -1
  179. package/dist/playbook/catalog-loader.js +39 -2
  180. package/dist/playbook/catalog-loader.js.map +1 -1
  181. package/dist/playbook/catalog-schema-validator.js +438 -0
  182. package/dist/playbook/catalog-schema-validator.js.map +1 -0
  183. package/dist/playbook/import-mapper.js +41 -0
  184. package/dist/playbook/import-mapper.js.map +1 -1
  185. package/dist/playbook/manifest.js +5 -0
  186. package/dist/playbook/manifest.js.map +1 -1
  187. package/dist/playbook/playbook-installer.js +17 -1
  188. package/dist/playbook/playbook-installer.js.map +1 -1
  189. package/dist/poller/pr-readiness-core.js +257 -93
  190. package/dist/poller/pr-readiness-core.js.map +1 -1
  191. package/dist/poller/pr-readiness.js +2 -2
  192. package/dist/poller/pr-readiness.js.map +1 -1
  193. package/dist/revisium/inbox.service.js +8 -8
  194. package/dist/revisium/inbox.service.js.map +1 -1
  195. package/dist/revisium/playbooks.service.js +116 -21
  196. package/dist/revisium/playbooks.service.js.map +1 -1
  197. package/dist/revisium/revisium.module.js +8 -8
  198. package/dist/revisium/revisium.module.js.map +1 -1
  199. package/dist/revisium/roles.service.js +3 -1
  200. package/dist/revisium/roles.service.js.map +1 -1
  201. package/dist/revisium/run.service.js +9 -8
  202. package/dist/revisium/run.service.js.map +1 -1
  203. package/dist/revisium/tokens.js +0 -1
  204. package/dist/revisium/tokens.js.map +1 -1
  205. package/dist/run/create-run.js +1 -1
  206. package/dist/run/create-run.js.map +1 -1
  207. package/dist/run/inspect-run.js +32 -28
  208. package/dist/run/inspect-run.js.map +1 -1
  209. package/dist/run/issue-ref.js +97 -2
  210. package/dist/run/issue-ref.js.map +1 -1
  211. package/dist/run/prisma-runtime-data-access.js +619 -0
  212. package/dist/run/prisma-runtime-data-access.js.map +1 -0
  213. package/dist/run/run-outputs.js +39 -14
  214. package/dist/run/run-outputs.js.map +1 -1
  215. package/dist/run/terminal-run-status.js.map +1 -1
  216. package/dist/runners/integrator.js +657 -56
  217. package/dist/runners/integrator.js.map +1 -1
  218. package/dist/runners/worktree.service.js +10 -8
  219. package/dist/runners/worktree.service.js.map +1 -1
  220. package/dist/schema/ajv-errors.js +15 -0
  221. package/dist/schema/ajv-errors.js.map +1 -0
  222. package/dist/smoke/isolation.js +7 -16
  223. package/dist/smoke/isolation.js.map +1 -1
  224. package/dist/storage/ensure-storage.js +117 -0
  225. package/dist/storage/ensure-storage.js.map +1 -0
  226. package/dist/storage/revo-database.js +39 -0
  227. package/dist/storage/revo-database.js.map +1 -0
  228. package/dist/storage/revo-prisma.service.js +31 -0
  229. package/dist/storage/revo-prisma.service.js.map +1 -0
  230. package/dist/storage/revo-storage.module.js +18 -0
  231. package/dist/storage/revo-storage.module.js.map +1 -0
  232. package/dist/task-control-plane/pr-readiness.service.js +5 -2
  233. package/dist/task-control-plane/pr-readiness.service.js.map +1 -1
  234. package/dist/task-control-plane/run-watch.service.js +3 -6
  235. package/dist/task-control-plane/run-watch.service.js.map +1 -1
  236. package/dist/task-control-plane/task-control-plane-api.service.js +225 -43
  237. package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
  238. package/dist/testing/runtime-data-access.js +175 -0
  239. package/dist/testing/runtime-data-access.js.map +1 -0
  240. package/dist/worker/build-context.js +178 -2
  241. package/dist/worker/build-context.js.map +1 -1
  242. package/dist/worker/claude-code-runner.js +22 -3
  243. package/dist/worker/claude-code-runner.js.map +1 -1
  244. package/dist/worker/codex-runner.js +6 -1
  245. package/dist/worker/codex-runner.js.map +1 -1
  246. package/package.json +20 -7
  247. package/prisma/migrations/20260707080500_initial_schema/migration.sql +259 -0
  248. package/prisma/migrations/20260707103000_prisma_runtime_tables/migration.sql +235 -0
  249. package/prisma/migrations/migration_lock.toml +3 -0
  250. package/prisma/schema.prisma +339 -0
  251. package/prisma.config.ts +11 -0
  252. package/dist/cli/commands/revisium-helpers.js.map +0 -1
  253. package/dist/control-plane/client-transport.js +0 -168
  254. package/dist/control-plane/client-transport.js.map +0 -1
  255. package/dist/engine/ensure-postgres.js +0 -46
  256. package/dist/engine/ensure-postgres.js.map +0 -1
  257. package/dist/host/ensure-revisium.js +0 -135
  258. package/dist/host/ensure-revisium.js.map +0 -1
  259. package/revisium.config.json +0 -10
@@ -1,16 +1,41 @@
1
1
  import assert from 'node:assert/strict';
2
- // Poll at 500ms: tighter intervals can observe a run as terminal before its DBOS workflow status /
3
- // step-status cascade settle, flaking `workflowStatus`/`no ready steps` assertions on slower CI.
4
- // A real run settles in a few seconds — if a wait needs >10s the run is stuck (a bug), so fail fast.
5
- const POLL_MS = 500;
6
- const WAIT_TIMEOUT_MS = 10_000;
2
+ // A fast poll can observe a run as terminal before it has settled: completeRun/failRun patch the
3
+ // run row INSIDE the workflow's final step, so the row turns terminal while the DBOS workflow
4
+ // status still reads PENDING (and the last step's events/attempts are mid-commit). Rather than
5
+ // polling slowly to make that window unlikely (the old 500ms interval), poll fast and return only
6
+ // SETTLED states — a wait state nothing about which can still change:
7
+ // - pending_gate / question: the inbox row to resolve is already visible;
8
+ // - cancelled: settled by run row alone — cancelRun deliberately does not signal DBOS, the parked
9
+ // workflow outlives the row (pinned by gates.e2e H-CancelGate);
10
+ // - completed / failed / blocked: the DBOS workflow status is terminal too, which implies every
11
+ // step write the workflow performs has committed.
12
+ // The timeout stays a deliberate stuck-detector: the heaviest runs (crash-recovery, seeded
13
+ // plan→merge) need ~10s+ on a loaded CI runner, so 30s; an unsettled state at the deadline is
14
+ // returned as-is and the caller's assertion fails loud.
15
+ const POLL_MS = 25;
16
+ const WAIT_TIMEOUT_MS = 30_000;
17
+ const TERMINAL_WORKFLOW_STATUSES = new Set(['SUCCESS', 'ERROR', 'CANCELLED']);
18
+ function settled(state) {
19
+ if (state.state === 'pending_gate' || state.state === 'question')
20
+ return true;
21
+ if (state.state === 'cancelled')
22
+ return true;
23
+ return TERMINAL_WORKFLOW_STATUSES.has(state.workflowStatus);
24
+ }
7
25
  /** Poll until the run settles (terminal or parked at a gate). Returns the wait state. */
8
- export function waitState(api, runId, timeoutMs = WAIT_TIMEOUT_MS) {
9
- return api.waitForRun({ runId, timeoutMs, intervalMs: POLL_MS });
26
+ export async function waitState(api, runId, timeoutMs = WAIT_TIMEOUT_MS) {
27
+ const deadline = Date.now() + timeoutMs;
28
+ for (;;) {
29
+ const remaining = Math.max(1, deadline - Date.now());
30
+ const state = await api.waitForRun({ runId, timeoutMs: remaining, intervalMs: POLL_MS });
31
+ if (settled(state) || Date.now() >= deadline)
32
+ return state;
33
+ await new Promise((resolve) => setTimeout(resolve, POLL_MS));
34
+ }
10
35
  }
11
36
  /** Wait until the run parks at a gate; assert it is a gate (optionally a specific topic). */
12
37
  export async function waitForGate(api, runId, expectedTopic) {
13
- const state = await api.waitForRun({ runId, timeoutMs: WAIT_TIMEOUT_MS, intervalMs: POLL_MS });
38
+ const state = await waitState(api, runId);
14
39
  assert.equal(state.state, 'pending_gate', `expected pending_gate, got ${state.state}`);
15
40
  const inbox = state.inbox;
16
41
  assert.ok(inbox, 'pending_gate must include the inbox item to resolve');
@@ -20,7 +45,7 @@ export async function waitForGate(api, runId, expectedTopic) {
20
45
  assert.equal(typeof topic, 'string');
21
46
  if (expectedTopic)
22
47
  assert.equal(topic, expectedTopic, `expected ${expectedTopic} gate, got ${String(topic)}`);
23
- return { inboxId: inbox.id, topic: topic };
48
+ return { inboxId: inbox.id, topic: topic, context: context };
24
49
  }
25
50
  /**
26
51
  * Drive a gated run to a terminal state by approving each gate as it opens.
@@ -29,7 +54,7 @@ export async function waitForGate(api, runId, expectedTopic) {
29
54
  export async function approveUntilTerminal(api, runId) {
30
55
  const approvedTopics = [];
31
56
  for (;;) {
32
- const state = await api.waitForRun({ runId, timeoutMs: WAIT_TIMEOUT_MS, intervalMs: POLL_MS });
57
+ const state = await waitState(api, runId);
33
58
  if (state.state !== 'pending_gate')
34
59
  return { state: state.state, approvedTopics };
35
60
  const inbox = state.inbox;
@@ -39,7 +64,17 @@ export async function approveUntilTerminal(api, runId) {
39
64
  const topic = context['topic'];
40
65
  assert.equal(typeof topic, 'string');
41
66
  approvedTopics.push(topic);
42
- await api.resolveGate({ inboxId: inbox.id, outcome: 'approved', resolvedBy: 'e2e' });
67
+ const summary = context.summary;
68
+ const outcomes = Array.isArray(summary?.outcomes)
69
+ ? summary.outcomes.filter((outcome) => typeof outcome === 'string')
70
+ : [];
71
+ const outcome = outcomes.find((candidate) => candidate === 'approved')
72
+ ?? outcomes.find((candidate) => candidate === 'approve_anyway')
73
+ ?? outcomes.find((candidate) => candidate === 'cancel')
74
+ ?? outcomes.find((candidate) => candidate === 'abort')
75
+ ?? outcomes[0]
76
+ ?? 'approved';
77
+ await api.resolveGate({ inboxId: inbox.id, outcome, resolvedBy: 'e2e' });
43
78
  }
44
79
  }
45
80
  //# sourceMappingURL=drive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drive.js","sourceRoot":"","sources":["../../../src/e2e/kit/drive.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAGxC,mGAAmG;AACnG,iGAAiG;AACjG,qGAAqG;AACrG,MAAM,OAAO,GAAG,GAAG,CAAC;AACpB,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,yFAAyF;AACzF,MAAM,UAAU,SAAS,CAAC,GAA+B,EAAE,KAAa,EAAE,SAAS,GAAG,eAAe;IACnG,OAAO,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAA+B,EAC/B,KAAa,EACb,aAAgC;IAEhC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/F,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,8BAA8B,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACtF,MAAM,KAAK,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrC,IAAI,aAAa;QAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,aAAa,cAAc,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9G,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAe,EAAE,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAA+B,EAC/B,KAAa;IAEb,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/F,IAAI,KAAK,CAAC,KAAK,KAAK,cAAc;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC;QAClF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACtF,MAAM,KAAK,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,cAAc,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QACrC,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"drive.js","sourceRoot":"","sources":["../../../src/e2e/kit/drive.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,23 @@
1
- import { dirname, resolve } from 'node:path';
1
+ import { basename, dirname, resolve } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  /** Real e2e gate: only run against real DBOS/Revisium when explicitly enabled. */
4
4
  export const RUN_REAL_E2E = process.env['REVO_E2E_REAL'] === '1';
5
+ /** Per-file DBOS system database name (a valid SQL identifier for REVO_DBOS_DB). */
6
+ export function dbosDbNameForFile(filePath) {
7
+ const base = basename(filePath)
8
+ .replace(/\.e2e\.test\.ts$/, '')
9
+ .replace(/\.(m|c)?ts$/, '')
10
+ .replace(/[^a-zA-Z0-9]/g, '_');
11
+ return `dbos_e2e_${base}`;
12
+ }
13
+ // Each e2e file runs in its own process against the shared embedded Postgres. Giving every file its
14
+ // own DBOS system db (host boot CREATEs it on demand) isolates queues and workflows between files —
15
+ // no cross-file recovery, no shared dev-tasks slots — which is what makes the files safe to run in
16
+ // parallel. Set only when absent: crash-recovery child processes inherit the parent file's env and
17
+ // MUST target the parent's db (the parent's next boot proves recovery of the child's workflows).
18
+ if (RUN_REAL_E2E && !process.env['REVO_DBOS_DB'] && process.argv[1]) {
19
+ process.env['REVO_DBOS_DB'] = dbosDbNameForFile(process.argv[1]);
20
+ }
5
21
  /** `node:test` skip option — a hint string unless REVO_E2E_REAL=1 (then `false` = run). */
6
22
  export const e2eSkip = RUN_REAL_E2E
7
23
  ? false
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/e2e/kit/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC;AAEjE,2FAA2F;AAC3F,MAAM,CAAC,MAAM,OAAO,GAAmB,YAAY;IACjD,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,yDAAyD,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/e2e/kit/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC;AAEjE,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;SAC5B,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,YAAY,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,oGAAoG;AACpG,oGAAoG;AACpG,mGAAmG;AACnG,mGAAmG;AACnG,iGAAiG;AACjG,IAAI,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,OAAO,GAAmB,YAAY;IACjD,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,yDAAyD,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { integrate, confirmMerge, preflightLive, pollPr, respondThreads, captureProducedChange, asTriage, stubIntegrate, } from '../../runners/integrator.js';
1
+ import { integrate, confirmMerge, preflightLive, pollPr, overrideMerge, respondThreads, captureProducedChange, triageForRespondThreads, stubIntegrate, } from '../../runners/integrator.js';
2
2
  import { execGit } from './git-target-repo.js';
3
3
  /**
4
4
  * Build an `IntegratorService`-shaped object wired to the real `integrate`/`preflightLive`/
@@ -33,19 +33,37 @@ export function createFakeIntegrator(runs, execGh) {
33
33
  ciFailures: [],
34
34
  reviewThreads: [],
35
35
  }),
36
- runRespondThreads: (input) => respondThreads(asTriage(input.triage), deps),
36
+ runOverrideMerge: (input) => overrideMerge(input, deps),
37
+ runOverrideStub: (_input) => ({
38
+ prNumber: null,
39
+ headSha: 'stub',
40
+ evidence: ['stub overrideMerge readiness: clean'],
41
+ verdict: 'clean',
42
+ ciFailures: [],
43
+ reviewThreads: [],
44
+ override: {
45
+ accepted: true,
46
+ actor: 'stub',
47
+ note: 'stub override',
48
+ source: { gate: 'mergeGate', inboxId: '' },
49
+ facts: [],
50
+ replied: 0,
51
+ resolved: 0,
52
+ },
53
+ }),
54
+ runRespondThreads: (input) => respondThreads(triageForRespondThreads(input), deps),
37
55
  runRespondStub: (_input) => ({ replied: 0, resolved: 0 }),
38
56
  };
39
57
  }
40
58
  /**
41
- * Wrap a base IntegratorService so runs whose taskId is registered in `outcomes` get a mocked
59
+ * Wrap a base IntegratorService so runs whose runId is registered in `runCases` get a mocked
42
60
  * integrate result (needsHuman or throw); all others delegate to `base` (real integrate/preflight).
43
61
  * Mirrors the per-run gh/agent routers — the external boundary is mocked, the workflow is real.
44
62
  */
45
- export function routedIntegrator(outcomes, base) {
63
+ export function routedIntegrator(runCases, base) {
46
64
  return {
47
65
  runIntegrate: (input) => {
48
- const outcome = outcomes.get(input.taskId);
66
+ const outcome = runCases.get(input.runId)?.integrator;
49
67
  if (outcome?.kind === 'throw')
50
68
  return Promise.reject(new Error(outcome.message));
51
69
  if (outcome?.kind === 'needsHuman')
@@ -59,6 +77,8 @@ export function routedIntegrator(outcomes, base) {
59
77
  runCaptureProducedChange: base.runCaptureProducedChange,
60
78
  runPollPr: base.runPollPr,
61
79
  runPollStub: base.runPollStub,
80
+ runOverrideMerge: base.runOverrideMerge,
81
+ runOverrideStub: base.runOverrideStub,
62
82
  runRespondThreads: base.runRespondThreads,
63
83
  runRespondStub: base.runRespondStub,
64
84
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fake-integrator.js","sourceRoot":"","sources":["../../../src/e2e/kit/fake-integrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fake-integrator.js","sourceRoot":"","sources":["../../../src/e2e/kit/fake-integrator.ts"],"names":[],"mappings":"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"}
@@ -35,10 +35,21 @@ function newGhState() {
35
35
  createdBranches: new Set(),
36
36
  repushedBranches: new Set(),
37
37
  unresolvedThreads: new Map(),
38
+ readyCount: 0,
39
+ forceAdvisoryThreadVisible: false,
40
+ forceAdvisoryThreadSeeded: false,
38
41
  };
39
42
  }
43
+ function isExternallyTerminal(scenario) {
44
+ return scenario === 'merged-externally' || scenario === 'closed-externally';
45
+ }
46
+ function externalTerminalState(scenario) {
47
+ return scenario === 'merged-externally' ? 'MERGED' : 'CLOSED';
48
+ }
40
49
  /** True once the integrator created (or the scenario pre-seeds) a PR for `branch`. */
41
50
  function hasOpenPr(scenario, st, branch) {
51
+ if (isExternallyTerminal(scenario) && st.createdBranches.has(branch))
52
+ return false;
42
53
  return scenario === 'pr-already-exists' || st.createdBranches.has(branch);
43
54
  }
44
55
  /** Review threads for a branch, lazily seeded from the scenario (review-comment → one unresolved). */
@@ -48,6 +59,10 @@ function threadsFor(scenario, st, branch) {
48
59
  set = new Set(scenario === 'review-comment' ? ['PRRT_T1'] : []);
49
60
  st.unresolvedThreads.set(branch, set);
50
61
  }
62
+ if (scenario === 'force-advisory-thread' && st.forceAdvisoryThreadVisible && !st.forceAdvisoryThreadSeeded) {
63
+ set.add('PRRT_T1');
64
+ st.forceAdvisoryThreadSeeded = true;
65
+ }
51
66
  return set;
52
67
  }
53
68
  function ghBehavior(scenario, args, st) {
@@ -60,6 +75,8 @@ function ghBehavior(scenario, args, st) {
60
75
  // ── plan 0018 — GraphQL review-thread query + reply/resolve mutations (gh api graphql) ──
61
76
  if (args[0] === 'api' && args[1] === 'graphql') {
62
77
  const query = gqlQuery(args);
78
+ if (scenario === 'empty-graphql-data')
79
+ return JSON.stringify({ data: {} });
63
80
  if (query.includes('reviewThreads')) {
64
81
  // collectPrReadiness reads reviewThreads by owner/name/number.
65
82
  const branch = onlyBranch(st);
@@ -69,6 +86,7 @@ function ghBehavior(scenario, args, st) {
69
86
  repository: {
70
87
  pullRequest: {
71
88
  reviewThreads: {
89
+ pageInfo: { hasNextPage: false },
72
90
  nodes: ids.map((id) => ({
73
91
  id,
74
92
  isResolved: false,
@@ -92,6 +110,23 @@ function ghBehavior(scenario, args, st) {
92
110
  if (query.includes('addPullRequestReviewThreadReply')) {
93
111
  return JSON.stringify({ data: { addPullRequestReviewThreadReply: { clientMutationId: null } } });
94
112
  }
113
+ if (query.includes('statusCheckRollup')) {
114
+ return JSON.stringify({
115
+ data: {
116
+ repository: {
117
+ pullRequest: {
118
+ statusCheckRollup: {
119
+ contexts: {
120
+ nodes: scenario === 'no-checks-registered'
121
+ ? []
122
+ : [{ __typename: 'CheckRun', name: 'build', isRequired: true }],
123
+ },
124
+ },
125
+ },
126
+ },
127
+ },
128
+ });
129
+ }
95
130
  throw new Error(`unexpected gh api graphql call: ${args.join(' ')}`);
96
131
  }
97
132
  if (args[0] === 'pr' && args[1] === 'list') {
@@ -102,6 +137,20 @@ function ghBehavior(scenario, args, st) {
102
137
  ]);
103
138
  }
104
139
  const head = flagValue(args, '--head');
140
+ const requestedState = flagValue(args, '--state') || 'open';
141
+ if (isExternallyTerminal(scenario) && st.createdBranches.has(head) && requestedState !== 'open') {
142
+ return JSON.stringify([
143
+ {
144
+ number: 7,
145
+ url: PR_URL,
146
+ baseRefName: BASE,
147
+ state: externalTerminalState(scenario),
148
+ headRefOid: 'deadbeefcafe',
149
+ title: 'Externally terminal PR',
150
+ body: '',
151
+ },
152
+ ]);
153
+ }
105
154
  if (hasOpenPr(scenario, st, head)) {
106
155
  return JSON.stringify([{ number: 7, url: PR_URL, baseRefName: BASE, state: 'OPEN' }]);
107
156
  }
@@ -112,8 +161,8 @@ function ghBehavior(scenario, args, st) {
112
161
  return `${PR_URL}\n`;
113
162
  }
114
163
  if (args[0] === 'pr' && args[1] === 'ready') {
115
- // confirmMerge marks the draft ready before merging.
116
164
  st.readyBranches.add(branchArg(args));
165
+ st.readyCount++;
117
166
  return '';
118
167
  }
119
168
  if (args[0] === 'pr' && args[1] === 'merge') {
@@ -121,6 +170,12 @@ function ghBehavior(scenario, args, st) {
121
170
  if (!st.readyBranches.has(branchArg(args))) {
122
171
  throw new Error('gh: Pull Request is still a draft (mergePullRequest)');
123
172
  }
173
+ if (scenario === 'head-moved-after-approve') {
174
+ const expected = flagValue(args, '--match-head-commit');
175
+ if (expected && expected !== 'feedfacecafe') {
176
+ throw new Error(`gh: Head commit moved from ${expected} to feedfacecafe`);
177
+ }
178
+ }
124
179
  // confirmMerge: record the merge so the verifying re-view reports MERGED.
125
180
  st.mergedBranches.add(branchArg(args));
126
181
  return '';
@@ -131,14 +186,77 @@ function ghBehavior(scenario, args, st) {
131
186
  const branch = branchArg(args);
132
187
  const wantsRollup = args.some((a) => a.includes('statusCheckRollup'));
133
188
  if (wantsRollup) {
189
+ if (scenario === 'merged-externally') {
190
+ return JSON.stringify({
191
+ number: 7,
192
+ url: PR_URL,
193
+ state: 'MERGED',
194
+ isDraft: false,
195
+ baseRefName: BASE,
196
+ headRefName: branch,
197
+ headRefOid: 'deadbeefcafe',
198
+ mergeStateStatus: 'CLEAN',
199
+ reviewDecision: '',
200
+ mergeable: 'MERGEABLE',
201
+ statusCheckRollup: [{ __typename: 'CheckRun', name: 'build', status: 'COMPLETED', conclusion: 'SUCCESS' }],
202
+ });
203
+ }
204
+ if (scenario === 'closed-externally') {
205
+ return JSON.stringify({
206
+ number: 7,
207
+ url: PR_URL,
208
+ state: 'CLOSED',
209
+ isDraft: false,
210
+ baseRefName: BASE,
211
+ headRefName: branch,
212
+ headRefOid: 'deadbeefcafe',
213
+ mergeStateStatus: 'CLEAN',
214
+ reviewDecision: '',
215
+ mergeable: 'MERGEABLE',
216
+ statusCheckRollup: [],
217
+ });
218
+ }
134
219
  // pollPr's collectPrReadiness view: report the CI rollup + draft/state. ci-red-then-green starts
135
220
  // FAILING and flips to SUCCESS once a developer re-pushed (repushedBranches). A re-push is modelled
136
221
  // by the second `pr create` (idempotent integrator) NOT firing — so we flip on the integrator's push
137
222
  // recorded as a re-list; here we approximate: red until the branch is re-pushed at least once.
138
- const ciRed = scenario === 'ci-red-then-green' && !st.repushedBranches.has(branch);
139
- // record that pollPr saw the branch; the NEXT integrate re-push will flip it green
223
+ const ciRed = (scenario === 'ci-red-then-green' && !st.repushedBranches.has(branch)) || scenario === 'always-ci-red';
140
224
  if (scenario === 'ci-red-then-green' && ciRed)
141
225
  st.repushedBranches.add(branch);
226
+ const mergeConflict = scenario === 'merge-conflict';
227
+ // Compute merge state for node-boundary flip scenarios.
228
+ // readyCount is post-increment: `pr ready` fires BEFORE the grace views, so grace views (which
229
+ // determine the verdict) see the updated count. Both new scenarios keep CI green so pr ready
230
+ // always fires and the count advances on every node entry.
231
+ let mergeStateStatus = mergeConflict ? 'DIRTY' : 'CLEAN';
232
+ let mergeable = mergeConflict ? 'CONFLICTING' : 'MERGEABLE';
233
+ if (scenario === 'checks-never-settle') {
234
+ mergeStateStatus = 'UNKNOWN';
235
+ mergeable = 'UNKNOWN';
236
+ }
237
+ else if (scenario === 'nonsense-poll-state') {
238
+ mergeStateStatus = 'ALIEN';
239
+ mergeable = 'BANANA';
240
+ }
241
+ else if (scenario === 'merge-unknown-then-clean') {
242
+ // readyCount < 2: first pollPr node fires pr-ready (→1); grace views see readyCount=1 → UNKNOWN.
243
+ // Second pollPr (after prRouter recheck self-loop) fires pr-ready (→2); grace views see
244
+ // readyCount=2 → CLEAN. Exactly one prRouter recheck; converges to merge gate.
245
+ if (st.readyCount < 2) {
246
+ mergeStateStatus = 'UNKNOWN';
247
+ mergeable = 'UNKNOWN';
248
+ }
249
+ }
250
+ else if (scenario === 'merge-stale-at-reverify') {
251
+ // readyCount < 3: pollPr (→1) and mergeReadiness (→2) both CLEAN (2 pre-gate nodes).
252
+ // mergeApproveReverify fires pr-ready (→3); grace views see readyCount=3 → DIRTY →
253
+ // mergeSignal blocked → {needsHuman} → catch → classifyRecovery → recoveryGate.
254
+ if (st.readyCount >= 3) {
255
+ mergeStateStatus = 'DIRTY';
256
+ mergeable = 'CONFLICTING';
257
+ }
258
+ }
259
+ const headRefOid = scenario === 'head-moved-after-approve' && st.readyCount >= 3 ? 'feedfacecafe' : 'deadbeefcafe';
142
260
  return JSON.stringify({
143
261
  number: 7,
144
262
  url: PR_URL,
@@ -146,13 +264,19 @@ function ghBehavior(scenario, args, st) {
146
264
  isDraft: false,
147
265
  baseRefName: BASE,
148
266
  headRefName: branch,
149
- headRefOid: 'deadbeefcafe',
150
- mergeStateStatus: 'CLEAN',
267
+ headRefOid,
268
+ mergeStateStatus,
151
269
  reviewDecision: '',
152
- mergeable: 'MERGEABLE',
153
- statusCheckRollup: ciRed
154
- ? [{ __typename: 'CheckRun', name: 'build', status: 'COMPLETED', conclusion: 'FAILURE' }]
155
- : [{ __typename: 'CheckRun', name: 'build', status: 'COMPLETED', conclusion: 'SUCCESS' }],
270
+ mergeable,
271
+ statusCheckRollup: scenario === 'no-checks-registered'
272
+ ? []
273
+ : scenario === 'checks-never-settle'
274
+ ? [{ __typename: 'CheckRun', name: 'build', status: 'IN_PROGRESS', conclusion: null }]
275
+ : scenario === 'nonsense-poll-state'
276
+ ? [{ __typename: 'MysteryCheck', name: '???', state: 'WAT' }]
277
+ : ciRed
278
+ ? [{ __typename: 'CheckRun', name: 'build', status: 'COMPLETED', conclusion: 'FAILURE' }]
279
+ : [{ __typename: 'CheckRun', name: 'build', status: 'COMPLETED', conclusion: 'SUCCESS' }],
156
280
  });
157
281
  }
158
282
  // Mirror REAL gh: there is NO `merged` JSON field — `state` (OPEN|MERGED|CLOSED) is the truth.
@@ -160,7 +284,11 @@ function ghBehavior(scenario, args, st) {
160
284
  return JSON.stringify({
161
285
  url: PR_URL,
162
286
  number: 1,
163
- state: st.mergedBranches.has(branch) ? 'MERGED' : 'OPEN',
287
+ state: scenario === 'merged-externally' || st.mergedBranches.has(branch)
288
+ ? 'MERGED'
289
+ : scenario === 'closed-externally'
290
+ ? 'CLOSED'
291
+ : 'OPEN',
164
292
  isDraft: !st.readyBranches.has(branch),
165
293
  mergeStateStatus: scenario === 'merge-not-clean' ? 'BLOCKED' : 'CLEAN',
166
294
  });
@@ -181,29 +309,35 @@ export function createGhEmulator(calls, scenario = 'happy') {
181
309
  }
182
310
  /**
183
311
  * Per-run fake `gh`: routes to a scenario by the feature branch (`feat/<taskId>-…`) present in the
184
- * gh argv, so one shared harness can drive many runs with different gh outcomes. Register a run's
185
- * scenario in `scenarios` (keyed by taskId) before starting it; unregistered runs get `happy`.
312
+ * gh argv, so one shared harness can drive many runs with different gh outcomes. Register a run case
313
+ * keyed by runId before starting it; unregistered runs get `happy`.
186
314
  *
187
- * Each taskId gets its OWN {@link GhState} so per-branch CI/thread/merge state never bleeds across runs.
315
+ * Each run gets its OWN {@link GhState} so per-branch CI/thread/merge state never bleeds across runs.
188
316
  */
189
- export function routedGhEmulator(scenarios, calls) {
190
- const stByTask = new Map();
317
+ export function routedGhEmulator(runCases, calls) {
318
+ const stByRun = new Map();
191
319
  const fallback = newGhState();
192
320
  // GraphQL review-thread calls carry owner/name/number, NOT the feature branch — they cannot be routed
193
321
  // by branch. collectPrReadiness always issues a branch-carrying `pr list`/`pr view` immediately BEFORE
194
322
  // its reviewThreads query within one poll, so the last branch-routed taskId is the right owner for it.
195
- let lastTaskId;
323
+ let lastRunId;
196
324
  return (args) => {
197
325
  calls.push(args);
198
- const branchTaskId = [...scenarios.keys()].find((id) => args.some((a) => a.includes(taskBranchPrefix(id))));
199
- if (branchTaskId !== undefined)
200
- lastTaskId = branchTaskId;
201
- const taskId = branchTaskId ?? lastTaskId;
202
- const scenario = (taskId !== undefined ? scenarios.get(taskId) : undefined) ?? 'happy';
326
+ const hasFeatureBranch = args.some((arg) => arg.includes('feat/'));
327
+ const branchRun = [...runCases.values()].find((runCase) => args.some((a) => a.includes(taskBranchPrefix(runCase.taskId))));
328
+ if (branchRun !== undefined) {
329
+ lastRunId = branchRun.runId;
330
+ }
331
+ else if (hasFeatureBranch) {
332
+ lastRunId = undefined;
333
+ }
334
+ const runCase = branchRun ?? (!hasFeatureBranch && lastRunId !== undefined ? runCases.get(lastRunId) : undefined);
335
+ const scenario = runCase?.gh ?? 'happy';
203
336
  let st = fallback;
204
- if (taskId !== undefined) {
205
- st = stByTask.get(taskId) ?? newGhState();
206
- stByTask.set(taskId, st);
337
+ if (runCase !== undefined) {
338
+ st = stByRun.get(runCase.runId) ?? newGhState();
339
+ stByRun.set(runCase.runId, st);
340
+ st.forceAdvisoryThreadVisible = runCase.forceAdvisoryThreadVisible === true;
207
341
  }
208
342
  return ghBehavior(scenario, args, st);
209
343
  };
@@ -1 +1 @@
1
- {"version":3,"file":"gh-emulator.js","sourceRoot":"","sources":["../../../src/e2e/kit/gh-emulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gh-emulator.js","sourceRoot":"","sources":["../../../src/e2e/kit/gh-emulator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAG7E,MAAM,MAAM,GAAG,oCAAoC,CAAC;AACpD,MAAM,QAAQ,GAAG,oCAAoC,CAAC;AACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,+CAA+C;AA8BtE,6GAA6G;AAC7G,SAAS,SAAS,CAAC,IAAc;IAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,+DAA+D;AAC/D,SAAS,SAAS,CAAC,IAAc,EAAE,IAAY;IAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,6FAA6F;AAC7F,SAAS,MAAM,CAAC,IAAc,EAAE,GAAW;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gEAAgE;AAChE,SAAS,QAAQ,CAAC,IAAc;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AA6BD,SAAS,UAAU;IACjB,OAAO;QACL,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,eAAe,EAAE,IAAI,GAAG,EAAE;QAC1B,gBAAgB,EAAE,IAAI,GAAG,EAAE;QAC3B,iBAAiB,EAAE,IAAI,GAAG,EAAE;QAC5B,UAAU,EAAE,CAAC;QACb,0BAA0B,EAAE,KAAK;QACjC,yBAAyB,EAAE,KAAK;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAoB;IAChD,OAAO,QAAQ,KAAK,mBAAmB,IAAI,QAAQ,KAAK,mBAAmB,CAAC;AAC9E,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAoB;IACjD,OAAO,QAAQ,KAAK,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChE,CAAC;AAED,sFAAsF;AACtF,SAAS,SAAS,CAAC,QAAoB,EAAE,EAAW,EAAE,MAAc;IAClE,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACnF,OAAO,QAAQ,KAAK,mBAAmB,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,sGAAsG;AACtG,SAAS,UAAU,CAAC,QAAoB,EAAE,EAAW,EAAE,MAAc;IACnE,IAAI,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,QAAQ,KAAK,uBAAuB,IAAI,EAAE,CAAC,0BAA0B,IAAI,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC;QAC3G,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,EAAE,CAAC,yBAAyB,GAAG,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,QAAoB,EAAE,IAAc,EAAE,EAAW;IACnE,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACnG,CAAC;IAED,2FAA2F;IAC3F,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,QAAQ,KAAK,oBAAoB;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,+DAA+D;YAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,IAAI,EAAE;oBACJ,UAAU,EAAE;wBACV,WAAW,EAAE;4BACX,aAAa,EAAE;gCACb,QAAQ,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;gCAChC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oCACtB,EAAE;oCACF,UAAU,EAAE,KAAK;oCACjB,UAAU,EAAE,KAAK;oCACjB,IAAI,EAAE,YAAY;oCAClB,IAAI,EAAE,CAAC;oCACP,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,oCAAoC,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE;iCACjI,CAAC,CAAC;6BACJ;yBACF;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE;gBAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,+BAA+B,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,IAAI,EAAE;oBACJ,UAAU,EAAE;wBACV,WAAW,EAAE;4BACX,iBAAiB,EAAE;gCACjB,QAAQ,EAAE;oCACR,KAAK,EAAE,QAAQ,KAAK,sBAAsB;wCACxC,CAAC,CAAC,EAAE;wCACJ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;iCAClE;6BACF;yBACF;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC3C,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;gBAC5D,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;aAC/D,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC;QAC5D,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YAChG,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB;oBACE,MAAM,EAAE,CAAC;oBACT,GAAG,EAAE,MAAM;oBACX,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE,qBAAqB,CAAC,QAAQ,CAAC;oBACtC,UAAU,EAAE,cAAc;oBAC1B,KAAK,EAAE,wBAAwB;oBAC/B,IAAI,EAAE,EAAE;iBACT;aACF,CAAC,CAAC;QACL,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7C,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClD,OAAO,GAAG,MAAM,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAC5C,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,EAAE,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QAC5C,mFAAmF;QACnF,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,QAAQ,KAAK,0BAA0B,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;YACxD,IAAI,QAAQ,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,kBAAkB,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,0EAA0E;QAC1E,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC3C,IAAI,QAAQ,KAAK,kBAAkB;YAAE,OAAO,sBAAsB,CAAC;QACnE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACtE,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,MAAM,EAAE,CAAC;oBACT,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE,QAAQ;oBACf,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,IAAI;oBACjB,WAAW,EAAE,MAAM;oBACnB,UAAU,EAAE,cAAc;oBAC1B,gBAAgB,EAAE,OAAO;oBACzB,cAAc,EAAE,EAAE;oBAClB,SAAS,EAAE,WAAW;oBACtB,iBAAiB,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;iBAC3G,CAAC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,MAAM,EAAE,CAAC;oBACT,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE,QAAQ;oBACf,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,IAAI;oBACjB,WAAW,EAAE,MAAM;oBACnB,UAAU,EAAE,cAAc;oBAC1B,gBAAgB,EAAE,OAAO;oBACzB,cAAc,EAAE,EAAE;oBAClB,SAAS,EAAE,WAAW;oBACtB,iBAAiB,EAAE,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC;YACD,iGAAiG;YACjG,oGAAoG;YACpG,qGAAqG;YACrG,+FAA+F;YAC/F,MAAM,KAAK,GAAG,CAAC,QAAQ,KAAK,mBAAmB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,KAAK,eAAe,CAAC;YACrH,IAAI,QAAQ,KAAK,mBAAmB,IAAI,KAAK;gBAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/E,MAAM,aAAa,GAAG,QAAQ,KAAK,gBAAgB,CAAC;YACpD,wDAAwD;YACxD,+FAA+F;YAC/F,6FAA6F;YAC7F,2DAA2D;YAC3D,IAAI,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACzD,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;YAC5D,IAAI,QAAQ,KAAK,qBAAqB,EAAE,CAAC;gBACvC,gBAAgB,GAAG,SAAS,CAAC;gBAC7B,SAAS,GAAG,SAAS,CAAC;YACxB,CAAC;iBAAM,IAAI,QAAQ,KAAK,qBAAqB,EAAE,CAAC;gBAC9C,gBAAgB,GAAG,OAAO,CAAC;gBAC3B,SAAS,GAAG,QAAQ,CAAC;YACvB,CAAC;iBAAM,IAAI,QAAQ,KAAK,0BAA0B,EAAE,CAAC;gBACnD,iGAAiG;gBACjG,wFAAwF;gBACxF,+EAA+E;gBAC/E,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;oBAAC,gBAAgB,GAAG,SAAS,CAAC;oBAAC,SAAS,GAAG,SAAS,CAAC;gBAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,QAAQ,KAAK,yBAAyB,EAAE,CAAC;gBAClD,qFAAqF;gBACrF,mFAAmF;gBACnF,gFAAgF;gBAChF,IAAI,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;oBAAC,gBAAgB,GAAG,OAAO,CAAC;oBAAC,SAAS,GAAG,aAAa,CAAC;gBAAC,CAAC;YACpF,CAAC;YACD,MAAM,UAAU,GAAG,QAAQ,KAAK,0BAA0B,IAAI,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC;YACnH,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,MAAM,EAAE,CAAC;gBACT,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,MAAM;gBACnB,UAAU;gBACV,gBAAgB;gBAChB,cAAc,EAAE,EAAE;gBAClB,SAAS;gBACT,iBAAiB,EAAE,QAAQ,KAAK,sBAAsB;oBACpD,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,QAAQ,KAAK,qBAAqB;wBACpC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;wBACtF,CAAC,CAAC,QAAQ,KAAK,qBAAqB;4BACpC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;4BAC7D,CAAC,CAAC,KAAK;gCACP,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;gCACzF,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;aAC5F,CAAC,CAAC;QACL,CAAC;QACD,+FAA+F;QAC/F,oGAAoG;QACpG,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,QAAQ,KAAK,mBAAmB,IAAI,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;gBACtE,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,QAAQ,KAAK,mBAAmB;oBAClC,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,MAAM;YACV,OAAO,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YACtC,gBAAgB,EAAE,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;SACvE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,kGAAkG;AAClG,SAAS,UAAU,CAAC,EAAW;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,gBAAgB,CAAC,KAAiB,EAAE,WAAuB,OAAO;IAChF,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,OAAO,CAAC,IAAc,EAAU,EAAE;QAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA8B,EAAE,KAAiB;IAChF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,sGAAsG;IACtG,uGAAuG;IACvG,uGAAuG;IACvG,IAAI,SAA6B,CAAC;IAClC,OAAO,CAAC,IAAc,EAAU,EAAE;QAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3H,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,CAAC;aAAM,IAAI,gBAAgB,EAAE,CAAC;YAC5B,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;QACD,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,CAAC,gBAAgB,IAAI,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClH,MAAM,QAAQ,GAAG,OAAO,EAAE,EAAE,IAAI,OAAO,CAAC;QACxC,IAAI,EAAE,GAAG,QAAQ,CAAC;QAClB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,EAAE,CAAC,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,KAAK,IAAI,CAAC;QAC9E,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC"}