patchrelay 0.23.0 → 0.23.2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "service": "patchrelay",
3
- "version": "0.23.0",
4
- "commit": "e63d5a3915cf",
5
- "builtAt": "2026-03-26T11:50:11.923Z"
3
+ "version": "0.23.2",
4
+ "commit": "c701bbd6fa48",
5
+ "builtAt": "2026-03-26T12:54:15.295Z"
6
6
  }
@@ -19,14 +19,14 @@ const STATE_SHORT = {
19
19
  preparing: "prep",
20
20
  implementing: "impl",
21
21
  pr_open: "pr open",
22
- changes_requested: "changes",
22
+ changes_requested: "review fix",
23
23
  repairing_ci: "ci fix",
24
24
  awaiting_queue: "merging",
25
25
  repairing_queue: "merge fix",
26
26
  done: "done",
27
27
  failed: "failed",
28
28
  escalated: "escalated",
29
- awaiting_input: "input",
29
+ awaiting_input: "paused",
30
30
  };
31
31
  const RUN_SHORT = {
32
32
  implementation: "impl",
@@ -83,19 +83,17 @@ function truncate(text, max) {
83
83
  return "";
84
84
  return text.length > max ? `${text.slice(0, max - 1)}\u2026` : text;
85
85
  }
86
+ const TERMINAL_STATES = new Set(["done", "failed", "escalated", "awaiting_input"]);
86
87
  function formatStatus(issue) {
87
88
  const state = STATE_SHORT[issue.factoryState] ?? issue.factoryState;
88
- const run = issue.activeRunType ?? issue.latestRunType;
89
- const runLabel = run ? (RUN_SHORT[run] ?? run) : "";
89
+ // Terminal states: just the label, no run symbol
90
+ if (TERMINAL_STATES.has(issue.factoryState))
91
+ return state;
92
+ // Active/in-progress: show run status symbol
90
93
  const status = issue.activeRunType ? "running" : issue.latestRunStatus;
91
94
  const statusSym = status ? (STATUS_SHORT[status] ?? "") : "";
92
- // If run type matches state, just show state + status symbol
93
- if (runLabel && state === (STATE_SHORT[issue.factoryState] ?? issue.factoryState)) {
94
- if (issue.activeRunType)
95
- return `${state} ${statusSym}`;
96
- if (status)
97
- return `${state} ${statusSym}`;
98
- }
95
+ if (statusSym)
96
+ return `${state} ${statusSym}`;
99
97
  return state;
100
98
  }
101
99
  export function IssueRow({ issue, selected, titleWidth }) {
@@ -611,11 +611,15 @@ export class RunOrchestrator {
611
611
  // ─── Internal helpers ─────────────────────────────────────────────
612
612
  escalate(issue, runType, reason) {
613
613
  this.logger.warn({ issueKey: issue.issueKey, runType, reason }, "Escalating to human");
614
+ if (issue.activeRunId) {
615
+ this.db.finishRun(issue.activeRunId, { status: "released" });
616
+ }
614
617
  this.db.upsertIssue({
615
618
  projectId: issue.projectId,
616
619
  linearIssueId: issue.linearIssueId,
617
620
  pendingRunType: null,
618
621
  pendingRunContextJson: null,
622
+ activeRunId: null,
619
623
  factoryState: "escalated",
620
624
  });
621
625
  this.feed?.publish({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "patchrelay",
3
- "version": "0.23.0",
3
+ "version": "0.23.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {