patchrelay 0.54.0 → 0.54.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.
package/README.md CHANGED
@@ -21,7 +21,7 @@ Common setups:
21
21
  ### What this buys you
22
22
 
23
23
  - **PRs ship tested against the latest `main`.** The queue re-validates on the integrated SHA at admission time, and retries if `main` moves during validation. No more "green yesterday, broken today."
24
- - **Many PR failures have mechanical fixes an agent can handle.** Requested changes like a rename, a missing null check, a new test; rebase on `main`; resolving a conflict surfaced by speculation; rerunning a flaky job. Both services publish structured failure reasons (inline review comments, failing check names, queue incidents) an agent can act on directly.
24
+ - **Many PR failures have mechanical fixes an agent can handle.** Requested changes like a rename, a missing null check, a new test, refreshing against `main`, resolving a conflict surfaced by speculation, or rerunning a flaky job. Both services publish structured failure reasons (inline review comments, failing check names, queue incidents) an agent can act on directly.
25
25
  - **No prerequisites beyond GitHub.** A GitHub App, a webhook, and `npm install -g` per service.
26
26
 
27
27
  ## Use with your own agent
@@ -99,7 +99,7 @@ See the [review-quill package README](./packages/review-quill/README.md) for the
99
99
 
100
100
  ### merge-steward
101
101
 
102
- Serial merge queue with speculative integration. Rebases each approved PR onto the current `main`, runs CI on the integrated SHA, and fast-forwards `main` only when that tested result is green. Evictions produce a durable incident and a GitHub check run — the signal an agent uses to trigger a repair.
102
+ Serial merge queue with speculative integration. Builds a speculative merge branch for each approved PR on top of the current queue base, runs CI on that integrated SHA, and fast-forwards `main` only when the tested result is still valid. Evictions produce a durable incident and a GitHub check run — the signal an agent uses to trigger a repair.
103
103
 
104
104
  ```bash
105
105
  merge-steward init https://queue.example.com
@@ -119,7 +119,7 @@ See the [merge-steward package README](./packages/merge-steward/README.md) for t
119
119
  - [Prompting](./docs/prompting.md) — how workflow files and the built-in scaffold compose
120
120
  - [Secrets](./docs/secrets.md) — systemd credentials, resolution order
121
121
  - [review-quill reference](./docs/review-quill.md) · [merge-steward reference](./docs/merge-steward.md)
122
- - [Product specs](./docs/product-specs/index.md) · [Design docs](./docs/design-docs/index.md) · [Core beliefs](./docs/design-docs/core-beliefs.md)
122
+ - [Product brief](./docs/product-specs/patchrelay.md) · [Dashboard guidance](./docs/dashboard-guidance.md) · [Design docs](./docs/design-docs/index.md)
123
123
  - [Contributing](./CONTRIBUTING.md) · [Security policy](./SECURITY.md)
124
124
 
125
125
  ## Status
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "service": "patchrelay",
3
- "version": "0.54.0",
4
- "commit": "336c0047e088",
5
- "builtAt": "2026-04-24T17:54:51.255Z"
3
+ "version": "0.54.2",
4
+ "commit": "28fde578da2e",
5
+ "builtAt": "2026-04-28T22:47:00.733Z"
6
6
  }
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useReducer } from "react";
3
3
  import { Box, Text, useStdout } from "ink";
4
4
  import { IssueRow } from "./IssueRow.js";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from "ink";
3
3
  import { issueTokenFor, prTokenFor } from "./issue-token.js";
4
4
  import { formatIssueAge, truncate } from "./format-utils.js";
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from "ink";
3
3
  import { planStepSymbol, planStepColor } from "./plan-helpers.js";
4
4
  // ─── Formatting helpers ──────────────────────────────────────────
@@ -18,10 +18,10 @@ export async function runProjectHook(repoPath, hookName, options) {
18
18
  stderr: result.stderr,
19
19
  };
20
20
  }
21
- // Patchrelay runs as a service with NODE_ENV=production, which makes `npm ci`
22
- // in a project hook silently omit devDependencies. The subject project's install
23
- // surface is a separate concern from patchrelay's own runtime, so scrub the
24
- // variables that would leak patchrelay's production posture into the hook.
21
+ // PatchRelay runs as a service with NODE_ENV=production, which can make package
22
+ // manager installs in project hooks silently omit devDependencies. The subject
23
+ // project's install surface is separate from PatchRelay's own runtime, so scrub
24
+ // variables that would leak PatchRelay's production posture into the hook.
25
25
  const STRIPPED_PARENT_ENV_VARS = [
26
26
  "NODE_ENV",
27
27
  "NPM_CONFIG_PRODUCTION",
@@ -75,7 +75,7 @@ export function readBundledAsset(relativePath) {
75
75
  export function getBuiltCliEntryPath() {
76
76
  const entryPath = getBundledAssetPath("dist/index.js");
77
77
  if (!existsSync(entryPath)) {
78
- throw new Error(`Built PatchRelay entrypoint not found: ${entryPath}. Run npm run build before installing the service.`);
78
+ throw new Error(`Built PatchRelay entrypoint not found: ${entryPath}. Run pnpm build before installing the service.`);
79
79
  }
80
80
  return entryPath;
81
81
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "patchrelay",
3
- "version": "0.54.0",
3
+ "version": "0.54.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "repository": {
@@ -28,35 +28,32 @@
28
28
  "packages/merge-steward",
29
29
  "packages/review-quill"
30
30
  ],
31
- "scripts": {
32
- "dev": "node --watch --experimental-transform-types src/index.ts",
33
- "build": "rm -rf dist && tsc -p tsconfig.json && chmod +x dist/index.js && node scripts/write-build-info.mjs",
34
- "prepack": "npm run build",
35
- "start": "node dist/index.js serve",
36
- "doctor": "node dist/index.js doctor",
37
- "restart": "node dist/index.js service restart",
38
- "deploy": "npm run build && npm install -g . && node dist/index.js service restart",
39
- "lint": "eslint .",
40
- "typecheck": "tsc -p tsconfig.json --noEmit",
41
- "check": "npm run typecheck",
42
- "test": "node --experimental-transform-types --test 'test/**/*.test.ts'",
43
- "ci": "npm run lint && npm run check && npm test && npm run build"
44
- },
45
31
  "dependencies": {
46
- "fastify": "^5.8.2",
32
+ "fastify": "^5.8.5",
47
33
  "fastify-raw-body": "^5.0.0",
48
- "ink": "^6.8.0",
34
+ "ink": "^7.0.1",
49
35
  "pino": "^10.3.1",
50
- "pino-logfmt": "^1.1.3",
51
- "react": "^19.2.4",
36
+ "pino-logfmt": "^1.1.4",
37
+ "react": "^19.2.5",
52
38
  "zod": "^4.3.6"
53
39
  },
54
40
  "devDependencies": {
55
- "@eslint/js": "^10.0.1",
56
- "@types/node": "^25.5.0",
41
+ "@types/node": "^25.6.0",
57
42
  "@types/react": "^19.2.14",
58
- "eslint": "^10.0.3",
59
- "typescript": "^5.8.3",
60
- "typescript-eslint": "^8.58.0"
43
+ "@typescript/native-preview": "7.0.0-dev.20260427.1",
44
+ "oxlint": "^1.62.0"
45
+ },
46
+ "scripts": {
47
+ "dev": "node --watch --experimental-transform-types src/index.ts",
48
+ "build": "rm -rf dist && tsgo -p tsconfig.json && chmod +x dist/index.js && node scripts/write-build-info.mjs",
49
+ "start": "node dist/index.js serve",
50
+ "doctor": "node dist/index.js doctor",
51
+ "restart": "node dist/index.js service restart",
52
+ "deploy": "pnpm build && pnpm add -g . && node dist/index.js service restart",
53
+ "lint": "oxlint --ignore-path .gitignore .",
54
+ "typecheck": "tsgo -p tsconfig.json --noEmit",
55
+ "check": "pnpm typecheck",
56
+ "test": "node --experimental-transform-types --test 'test/**/*.test.ts'",
57
+ "ci": "pnpm lint && pnpm check && pnpm test && pnpm build"
61
58
  }
62
- }
59
+ }