@valescoagency/runway 0.4.0 → 0.6.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.
- package/README.md +87 -6
- package/dist/commands/doctor.js +67 -631
- package/dist/commands/init.js +2 -311
- package/dist/commands/run.js +39 -12
- package/dist/commands/upgrade-repo.js +2 -251
- package/dist/config.js +53 -67
- package/dist/diagnostics/base-branch.js +45 -0
- package/dist/diagnostics/claude-auth-mode.js +51 -0
- package/dist/diagnostics/docker-image.js +119 -0
- package/dist/diagnostics/docker.js +40 -0
- package/dist/diagnostics/gh.js +51 -0
- package/dist/diagnostics/git-state.js +73 -0
- package/dist/diagnostics/git.js +9 -0
- package/dist/diagnostics/index.js +180 -0
- package/dist/diagnostics/linear-api-key.js +14 -0
- package/dist/diagnostics/linear-config.js +133 -0
- package/dist/diagnostics/linear-scope.js +25 -0
- package/dist/diagnostics/node.js +18 -0
- package/dist/diagnostics/op-token.js +14 -0
- package/dist/diagnostics/op.js +9 -0
- package/dist/diagnostics/policy.js +35 -0
- package/dist/diagnostics/render.js +69 -0
- package/dist/diagnostics/runway-scaffold.js +31 -0
- package/dist/diagnostics/varlock.js +9 -0
- package/dist/finalize.js +35 -0
- package/dist/git.js +121 -29
- package/dist/github.js +136 -21
- package/dist/hitl.js +104 -0
- package/dist/implement.js +149 -0
- package/dist/linear.js +257 -65
- package/dist/orchestrator.js +111 -364
- package/dist/policy.js +0 -11
- package/dist/prompts.js +54 -55
- package/dist/repo-upgrade.js +268 -0
- package/dist/review.js +82 -0
- package/dist/sandcastle.js +60 -0
- package/dist/scaffolder-dockerfile.js +27 -0
- package/dist/scaffolder-image.js +26 -0
- package/dist/scaffolder-preflight.js +66 -0
- package/dist/scaffolder-varlock.js +67 -0
- package/dist/scaffolder-verify.js +102 -0
- package/dist/scaffolder.js +54 -0
- package/dist/subprocess.js +40 -0
- package/dist/telemetry.js +31 -0
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -44,14 +44,23 @@ Linear (Todo, team=VA)
|
|
|
44
44
|
runway (this CLI, on your Mac, run from inside the target repo)
|
|
45
45
|
↓ for each issue
|
|
46
46
|
│ sandcastle.run({ agent: claudeCode, sandbox: docker, cwd: process.cwd(), ... })
|
|
47
|
+
│ iter 1 → IMPL: DONE | IMPL: BLOCKED — <reason> | IMPL: CONTINUE
|
|
48
|
+
│ iter 2 → same, with previous iteration's summary injected
|
|
49
|
+
│ …
|
|
47
50
|
│ → branch agent/<issue-id>, commits, tests
|
|
48
51
|
│
|
|
49
|
-
│
|
|
50
|
-
│
|
|
52
|
+
│ if BLOCKED → HITL (skip review)
|
|
53
|
+
│ else:
|
|
54
|
+
│ sandcastle.run({ ..., prompt: review template })
|
|
55
|
+
│ → REVIEW: APPROVED | REVIEW: REJECTED — <reason>
|
|
51
56
|
│
|
|
52
57
|
├── approved → git push → gh pr create → Linear "In Review"
|
|
53
|
-
└── rejected → Linear
|
|
58
|
+
└── rejected → Linear comment with reason, then `ready-for-human` label
|
|
54
59
|
↓ next issue
|
|
60
|
+
|
|
61
|
+
[runway] per-issue outcomes:
|
|
62
|
+
VA-312 APPROVED → PR opened https://github.com/.../pull/42
|
|
63
|
+
VA-313 HITL Sub-agent review rejected: TOCTOU race in …
|
|
55
64
|
```
|
|
56
65
|
|
|
57
66
|
## Prerequisites
|
|
@@ -237,8 +246,11 @@ invocation — re-run runway after fixing the underlying config to retry
|
|
|
237
246
|
it.
|
|
238
247
|
|
|
239
248
|
The CLI exits with 0 even if some issues hit HITL or errored — those
|
|
240
|
-
are normal outcomes.
|
|
241
|
-
|
|
249
|
+
are normal outcomes. Every run prints a per-issue verdict trail on
|
|
250
|
+
exit (`APPROVED → PR opened <url>` / `HITL <reason>` /
|
|
251
|
+
`REVERTED → Todo <reason>` / `INFRA_ERROR <reason>`) so you can scan
|
|
252
|
+
results without opening Linear; the same content also lives on the
|
|
253
|
+
issue as a Linear comment.
|
|
242
254
|
|
|
243
255
|
## Linear conventions
|
|
244
256
|
|
|
@@ -262,6 +274,48 @@ These names are configurable per env var; the queries match by name so
|
|
|
262
274
|
your Linear workspace's actual state names need to line up with what
|
|
263
275
|
you set.
|
|
264
276
|
|
|
277
|
+
## Write-path policy
|
|
278
|
+
|
|
279
|
+
Runway tells the impl agent which paths it must **not** write to. By
|
|
280
|
+
default the denylist is:
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
.github/workflows/** .env* *.pem *.key pnpm-lock.yaml .sandcastle/**
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
When an issue's acceptance criteria require modifying a forbidden path,
|
|
287
|
+
the agent is instructed to emit `IMPL: BLOCKED — issue requires
|
|
288
|
+
modifying <path>, which working-style policy forbids` rather than
|
|
289
|
+
silently skipping the work. Runway routes those to HITL with the
|
|
290
|
+
reason attached.
|
|
291
|
+
|
|
292
|
+
Two layers of override:
|
|
293
|
+
|
|
294
|
+
**Per repo** — drop a `.runway/policy.yml` in the target repo root:
|
|
295
|
+
|
|
296
|
+
```yaml
|
|
297
|
+
# Grants write access to specific paths from the default denylist.
|
|
298
|
+
allowedPaths:
|
|
299
|
+
- .github/workflows/**
|
|
300
|
+
|
|
301
|
+
# Or replace the denylist entirely (use with care).
|
|
302
|
+
# forbiddenPaths:
|
|
303
|
+
# - .env*
|
|
304
|
+
# - "*.pem"
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**Per invocation** — comma-separated globs, removed from the effective
|
|
308
|
+
denylist for one `runway run`:
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
runway run --allow-paths='.github/workflows/**'
|
|
312
|
+
runway run --allow-paths='.github/workflows/**,scripts/ci/*.sh'
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
`runway doctor` surfaces the active policy under Environment so you
|
|
316
|
+
can see what an agent run can and can't touch (e.g. `impl policy:
|
|
317
|
+
.runway/policy.yml + --allow-paths (5 forbidden paths)`).
|
|
318
|
+
|
|
265
319
|
## Base branch
|
|
266
320
|
|
|
267
321
|
Runway auto-detects the repo's default branch at the start of every
|
|
@@ -277,6 +331,30 @@ when `origin/HEAD` isn't set and you don't want to run
|
|
|
277
331
|
resolved base branch (detected or overridden) in its Environment
|
|
278
332
|
section.
|
|
279
333
|
|
|
334
|
+
## Implementation pass
|
|
335
|
+
|
|
336
|
+
The impl agent runs in a Sandcastle container with
|
|
337
|
+
[`prompts/implement.md`](prompts/implement.md). It iterates up to
|
|
338
|
+
`RUNWAY_MAX_ITERATIONS` times (default 5) and must end every iteration
|
|
339
|
+
with one of:
|
|
340
|
+
|
|
341
|
+
```
|
|
342
|
+
IMPL: DONE
|
|
343
|
+
IMPL: BLOCKED — <one-line reason>
|
|
344
|
+
IMPL: CONTINUE
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
- `DONE` → runway stops the loop and runs the sub-agent reviewer.
|
|
348
|
+
- `BLOCKED — <reason>` → runway routes the issue to HITL with the
|
|
349
|
+
reason attached; the reviewer pass does **not** run.
|
|
350
|
+
- `CONTINUE` → runway runs another iteration (up to `maxIterations`).
|
|
351
|
+
|
|
352
|
+
Between iterations, runway prepends a `## Previous iterations` block
|
|
353
|
+
to the next prompt — running commit log + tail of the last iteration's
|
|
354
|
+
final message — so the agent doesn't re-explore the repository from
|
|
355
|
+
scratch every time. Converged issues typically exit after 1–2
|
|
356
|
+
iterations.
|
|
357
|
+
|
|
280
358
|
## Sub-agent review
|
|
281
359
|
|
|
282
360
|
Every implementation run is followed by a fresh Sandcastle run with
|
|
@@ -306,4 +384,7 @@ These are tractable, just not v1.
|
|
|
306
384
|
|
|
307
385
|
## Status
|
|
308
386
|
|
|
309
|
-
|
|
387
|
+
0.6.0 — production-shaped and dogfooded against live Linear queues.
|
|
388
|
+
The end-to-end pipeline (init → run → review → PR) is stable; surface
|
|
389
|
+
may still shift as the orchestrator's policy and iteration mechanics
|
|
390
|
+
mature. See [CHANGELOG.md](./CHANGELOG.md) for per-release detail.
|