@joshuafolkken/kit 1.1229.0 → 1.1240.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 (67) hide show
  1. package/.claude/skills/workflow-commands/backlogrun-lanes.md +1 -1
  2. package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
  3. package/.claude/skills/workflow-commands/followup.md +5 -0
  4. package/.claude/skills/workflow-commands/kickoff.md +1 -0
  5. package/.claude/skills/workflow-commands/latest-gate.md +1 -1
  6. package/.github/workflows/publish.yml +2 -0
  7. package/README.md +30 -31
  8. package/dist/hooks/batch-guard.js +4 -4
  9. package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TZVB44A.js} +8 -8
  10. package/dist/hooks/{chunk-RNWHN5BP.js → chunk-F3ELQ2AF.js} +3 -3
  11. package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GPTFMK5E.js} +1 -1
  12. package/dist/hooks/{chunk-FIVDHQGT.js → chunk-KHGB5S3Y.js} +1 -1
  13. package/dist/hooks/{chunk-NV2JRZZO.js → chunk-KHX4U3BG.js} +17 -2
  14. package/dist/hooks/{chunk-F56MFS4B.js → chunk-KRBERBBI.js} +3 -3
  15. package/dist/hooks/{chunk-TQNPDZNH.js → chunk-QVSWU24O.js} +4 -4
  16. package/dist/hooks/{chunk-55HHG5PX.js → chunk-WK2XSHSI.js} +284 -63
  17. package/dist/hooks/{chunk-5VMKCCC4.js → chunk-XZYKEM6J.js} +2 -2
  18. package/dist/hooks/{chunk-6HJJXRBX.js → chunk-ZQGD4GBY.js} +1 -1
  19. package/dist/hooks/codex-hook-adapter.js +10 -10
  20. package/dist/hooks/duplicate-read-guard.js +5 -5
  21. package/dist/hooks/format-edited.js +2 -2
  22. package/dist/hooks/inputs.json +172 -170
  23. package/dist/hooks/investigation-guard.js +5 -5
  24. package/dist/hooks/pretool-guard.js +9 -9
  25. package/dist/hooks/stop-guard.js +3 -17
  26. package/dist/josh.js +279 -63
  27. package/package.json +1 -1
  28. package/prompts/collaboration-workflow/issue-template.md +1 -0
  29. package/scripts/gate/core-admission.ts +162 -0
  30. package/scripts/gate/core-budget.ts +121 -67
  31. package/scripts/gate/gate-plan.ts +35 -2
  32. package/scripts/gate/gate-report.ts +28 -9
  33. package/scripts/gate/machine-capacity.ts +175 -0
  34. package/scripts/gate/verification-gate.ts +7 -2
  35. package/scripts/init/init.ts +5 -1
  36. package/scripts/init/package-manager-pin.ts +35 -0
  37. package/scripts/issue/issue-auto-ok.ts +31 -6
  38. package/scripts/issue/issue-file-cli.ts +31 -8
  39. package/scripts/issue/issue-file.ts +5 -0
  40. package/scripts/issue/issue-labels.ts +13 -0
  41. package/scripts/issue/issue-release-cli.ts +155 -0
  42. package/scripts/issue/issue-release.ts +58 -0
  43. package/scripts/josh/josh-command-types.ts +3 -0
  44. package/scripts/josh/josh-commands-development.ts +8 -0
  45. package/scripts/josh/josh-commands-issue.ts +8 -1
  46. package/scripts/josh/josh-commands-lane.ts +2 -1
  47. package/scripts/josh/josh-commands-maintenance.ts +2 -2
  48. package/scripts/josh/josh-logic.ts +4 -3
  49. package/scripts/lane/lane-cli.ts +9 -1
  50. package/scripts/lane/lane-leftover.ts +43 -29
  51. package/scripts/lane/lane-open.ts +5 -5
  52. package/scripts/lane/lane-paths.ts +13 -0
  53. package/scripts/lane/lane-registry.ts +11 -0
  54. package/scripts/lane/lane-stray.ts +140 -0
  55. package/scripts/release/github-release-environment.ts +1 -0
  56. package/scripts/release/github-release-runs.ts +115 -0
  57. package/scripts/release/github-release.ts +13 -67
  58. package/scripts/run/cut/run-cut-cli.ts +16 -3
  59. package/scripts/run/event/run-event-render.ts +1 -0
  60. package/scripts/run/event/run-event-stream.ts +4 -0
  61. package/scripts/run/run-step.ts +5 -2
  62. package/scripts/run/wake/run-wake-cli.ts +2 -3
  63. package/scripts/run/wake/run-wake-describe.ts +56 -5
  64. package/scripts/run/wake/run-wake-loop.ts +5 -13
  65. package/scripts/run/wake/run-wake.ts +15 -64
  66. package/scripts/version/latest-corepack.ts +109 -78
  67. package/templates/workflows/github-release.yml +4 -0
@@ -117,7 +117,7 @@ In the **primary checkout**, in this order, and never again per lane:
117
117
  1. `git switch main && git pull` — every lane branches from this ref.
118
118
  2. `pnpm josh latest:scope`, and the update on `required` — `backlogrun-child.md` → "`josh latest`
119
119
  runs once per session, not once per child".
120
- 3. `pnpm josh lane:prune` — closes the lanes an interruption left registered without a work tree.
120
+ 3. `pnpm josh lane:prune` — closes lanes left without a work tree, sweeps unregistered leftovers.
121
121
  4. `pnpm josh run:tidy` — sweeps merged lanes and stashes (as `run:hold` does).
122
122
 
123
123
  **`pnpm josh latest` is never run inside a lane, whatever `latest:scope` answers there** — the command
@@ -218,8 +218,8 @@ ever.
218
218
  - **Every in-flight lane records a path** — **record the cut and hand the session off.** `backlogrun`
219
219
  declares a budget — `--max`, `--idle` and the 8-hour bound — so the cut is an execution detail: count
220
220
  everything the session has, then run `pnpm josh run:carry --cut --owner "$PPID"`. **Unless it answers
221
- `capped`** (below), `pnpm josh run:wake` then starts the next session, which polls the still-running
222
- lanes from `lane:list`. Post the progress comment naming **every lane in flight and the path each
221
+ `capped`** (below), the `pnpm josh run:wake` driver starts at its next poll even while this session
222
+ lives on, and polls the still-running lanes from `lane:list`. Post the progress comment naming **every lane in flight and the path each
223
223
  records**, name `pnpm josh run:event --watch` for a pane, and end the turn — nothing is relayed (#2492).
224
224
  `backlogrun-steps.md` → "The session cut is inside the invocation" is the single source of the
225
225
  carry; this reading is only where the cut is *taken*.
@@ -155,3 +155,8 @@ the tag → publish → `production` chain — outward-facing and effectively ir
155
155
  Typing `fullrun` authorizes this Issue's merge and nothing past it; a person types the release in the
156
156
  primary checkout, on the default branch, with a clean tree. `release:scope` counts nothing of its own —
157
157
  it reads the same fetch-then-count `followup` uses for the Telegram line, so the two cannot disagree.
158
+
159
+ **On `required`, the release request cites the open release Issue** — the one `issue:file --release` / `issue:release <N>` links blockers to — with a number-link
160
+ (`prompts/collaboration-workflow/issue-citation.md`). List it with
161
+ `gh api 'repos/{owner}/{repo}/issues?labels=release&state=open' --jq '.[].number'`; when none is
162
+ open, the request names `pnpm josh release` alone.
@@ -86,3 +86,4 @@ split is found.
86
86
  `backlogrun #<E> --only`. (5) **Stop** — do not implement.
87
87
 
88
88
  `pnpm josh issue:file` lints the body and applies the classification labels it declares, following `prompts/collaboration-workflow/issue-template.md` for classification (`docs/josh-commands-backlog.md` → `josh issue:file`).
89
+ An Issue a consumer can use only once it is published is filed with `--release` (`kickoff new`), or linked with `pnpm josh issue:release <N>` (`kickoff #N`) — either makes it a blocker of the repository's `release` Issue, which never gets `auto-ok` on its own.
@@ -1,6 +1,6 @@
1
1
  # The dependency update — when `josh latest` runs
2
2
 
3
- `josh latest` updates corepack, every dependency, the published ranges and `pnpm audit`, in that
3
+ `josh latest` updates every dependency, the published ranges, `pnpm audit` and pnpm, in that
4
4
  order and over the network. Until joshuafolkken/kit#1215 every entry point put it at the head of
5
5
  every run and called it **mandatory, never skip** — so a standalone `fullrun` paid 60–120 seconds
6
6
  for it before touching the issue, and a batch that ran ten children paid it ten times unless the
@@ -183,3 +183,5 @@ jobs:
183
183
  RELEASE_START_TAG: v1.887.0
184
184
  RELEASE_WORKFLOW: publish.yml
185
185
  RELEASE_JOBS: pack,publish-github,publish-npm,update-production
186
+ # This run creates its tag's release, so a lower tag whose run finished without one is lost.
187
+ RELEASE_RUN_WORKFLOW: publish.yml
package/README.md CHANGED
@@ -5,9 +5,9 @@
5
5
  [![npm version](https://img.shields.io/npm/v/@joshuafolkken/kit)](https://www.npmjs.com/package/@joshuafolkken/kit)
6
6
  [![License](https://img.shields.io/github/license/joshuafolkken/kit)](./LICENSE)
7
7
 
8
- [![Node.js](https://img.shields.io/node/v/@joshuafolkken/kit?logo=nodedotjs)](https://nodejs.org/)
8
+ [![Node.js](https://img.shields.io/badge/dynamic/regex?url=https%3A%2F%2Fraw.githubusercontent.com%2Fjoshuafolkken%2Fkit%2Fmain%2Fpackage.json&search=%22node%22%3A%20%22%5C%5E%28%5B0-9%5D%2B%5C.%5B0-9%5D%2B%29%5B0-9.%5D%2A%20%5C%7C%5C%7C%20%5C%5E%28%5B0-9%5D%2B%29%5B0-9.%5D%2A%20%5C%7C%5C%7C%20%3E%3D%28%5B0-9%5D%2B%29&replace=%5E%241%20%7C%20%5E%242%20%7C%20%3E%3D%243&logo=nodedotjs&label=Node.js)](https://nodejs.org/)
9
9
  [![TypeScript](https://img.shields.io/npm/dependency-version/@joshuafolkken/kit/peer/typescript?logo=typescript)](https://www.typescriptlang.org/)
10
- [![pnpm](https://img.shields.io/github/package-json/packageManager/joshuafolkken/kit?logo=pnpm&label=pnpm)](https://pnpm.io/)
10
+ [![pnpm](https://img.shields.io/badge/dynamic/regex?url=https%3A%2F%2Fraw.githubusercontent.com%2Fjoshuafolkken%2Fkit%2Fmain%2Fpackage.json&search=pnpm%40%28%5B0-9.%5D%2B%29&replace=%241&logo=pnpm&label=pnpm)](https://pnpm.io/)
11
11
 
12
12
  [![CI](https://github.com/joshuafolkken/kit/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/joshuafolkken/kit/actions/workflows/ci.yml)
13
13
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=joshuafolkken_kit&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=joshuafolkken_kit)
@@ -16,41 +16,46 @@
16
16
 
17
17
  kit gives Claude Code or Codex your project's rules and checks. With the workflow, the agent takes each change from Issue to merged PR.
18
18
 
19
- **Only want the AI assistant, without the GitHub workflow?** Set it up here: [Node projects](./docs/setup/full.md#2-install-and-initialize-with-josh-init) · [Other projects](./docs/setup/basic.md)
20
-
21
19
  ## Sound familiar?
22
20
 
23
21
  Each pain links to how it is solved — or read [the whole story](./docs/why.md).
24
22
 
25
- kit solves these in every project — and so do [app-kit] and [game-kit], which build on it:
23
+ ### Working with an AI agent
26
24
 
27
- - [Done doesn't mean done](./docs/why.md#done-doesnt-mean-done)
28
- - [Quality slips with every change](./docs/why.md#quality-slips-with-every-change)
29
25
  - [I keep repeating the same instructions](./docs/why.md#i-keep-repeating-the-same-instructions)
30
26
  - [The agent does things I never asked for](./docs/why.md#the-agent-does-things-i-never-asked-for)
31
27
  - [Reviewing every change is a chore](./docs/why.md#reviewing-every-change-is-a-chore)
32
- - [Some changes need a human eye](./docs/why.md#some-changes-need-a-human-eye)
33
- - [I spend all day talking to the agent](./docs/why.md#i-spend-all-day-talking-to-the-agent)
34
- - [Big requests come back sloppy](./docs/why.md#big-requests-come-back-sloppy)
35
- - [I want many Issues solved at once](./docs/why.md#i-want-many-issues-solved-at-once)
28
+ - [I can't tell if the agent is stuck or done](./docs/why.md#i-cant-tell-if-the-agent-is-stuck-or-done)
36
29
  - [AI costs keep climbing](./docs/why.md#ai-costs-keep-climbing)
37
- - [Writing Issues is a chore](./docs/why.md#writing-issues-is-a-chore)
30
+
31
+ ### Working on GitHub
32
+
38
33
  - [Wiring AI up to GitHub is a chore](./docs/why.md#wiring-ai-up-to-github-is-a-chore)
39
- - [I can't tell if the agent is stuck or done](./docs/why.md#i-cant-tell-if-the-agent-is-stuck-or-done)
34
+ - [Writing Issues is a chore](./docs/why.md#writing-issues-is-a-chore)
35
+ - [Big requests come back sloppy](./docs/why.md#big-requests-come-back-sloppy)
36
+ - [I spend all day talking to the agent](./docs/why.md#i-spend-all-day-talking-to-the-agent)
37
+ - [I want many Issues solved at once](./docs/why.md#i-want-many-issues-solved-at-once)
38
+ - [Some changes need a human eye](./docs/why.md#some-changes-need-a-human-eye)
40
39
  - [One task overwrote another's work](./docs/why.md#one-task-overwrote-anothers-work)
41
40
  - [A session cut off and I lost track](./docs/why.md#a-session-cut-off-and-i-lost-track)
42
41
  - [The backlog fills with duplicate Issues](./docs/why.md#the-backlog-fills-with-duplicate-issues)
43
42
 
44
- The app and game kits add:
43
+ ### Writing TypeScript
44
+
45
+ - [Done doesn't mean done](./docs/why.md#done-doesnt-mean-done)
46
+ - [Quality slips with every change](./docs/why.md#quality-slips-with-every-change)
47
+ - [Updating dependencies keeps breaking things](./docs/why.md#updating-dependencies-keeps-breaking-things)
48
+
49
+ ### The app and game kits add
45
50
 
46
- | Your pain | kit | [app-kit] | [game-kit] |
47
- | -------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :--------: |
48
- | [Setting up SvelteKit on Cloudflare takes a day](https://github.com/joshuafolkken/app-kit/blob/main/docs/setup/install.md) | — | ✅ | ✅ |
49
- | [I'm not sure the app is secure](https://github.com/joshuafolkken/app-kit/blob/main/docs/security-headers.md) | — | ✅ | ✅ |
50
- | [Nobody looked at the screen](https://github.com/joshuafolkken/app-kit/blob/main/docs/shot.md) | — | ✅ | ✅ |
51
- | [Starting a 3D game means building it all first](https://github.com/joshuafolkken/game-kit/blob/main/docs/install.md) | — | — | ✅ |
51
+ | Your pain | [app-kit] | [game-kit] |
52
+ | -------------------------------------------------------------------------------------------------------------------------- | :-------: | :--------: |
53
+ | [Setting up SvelteKit on Cloudflare takes a day](https://github.com/joshuafolkken/app-kit/blob/main/docs/setup/install.md) | ✅ | ✅ |
54
+ | [I'm not sure the app is secure](https://github.com/joshuafolkken/app-kit/blob/main/docs/security-headers.md) | ✅ | ✅ |
55
+ | [Nobody looked at the screen](https://github.com/joshuafolkken/app-kit/blob/main/docs/shot.md) | ✅ | ✅ |
56
+ | [Starting a 3D game means building it all first](https://github.com/joshuafolkken/game-kit/blob/main/docs/install.md) | — | ✅ |
52
57
 
53
- Each kit includes the one to its left: app-kit builds on kit, game-kit builds on app-kit.
58
+ app-kit builds on kit and game-kit builds on app-kit, so each includes everything in the kits beneath it.
54
59
 
55
60
  [app-kit]: https://github.com/joshuafolkken/app-kit
56
61
  [game-kit]: https://github.com/joshuafolkken/game-kit
@@ -67,27 +72,21 @@ Each kit includes the one to its left: app-kit builds on kit, game-kit builds on
67
72
 
68
73
  Each keyword in full: [Run Issues with the workflow keywords](./docs/how-to/run-issues.md). When a run needs you, it [notifies you on Telegram](./docs/how-to/set-up-notifications.md).
69
74
 
70
- ## Why you can trust "done"
71
-
72
- - **Checks are commands.** Lint, types, spelling and tests run as one gate — "it should pass" doesn't count.
73
- - **No test, no commit.** kit decides from the changed files whether a test is required.
74
-
75
75
  ## Quick start
76
76
 
77
- Requires Node.js, pnpm (kit is installed and run with pnpm only) and the gh CLI — [how to install them](./docs/setup/prerequisites.md). Sign in once with `gh auth login` before `josh start`.
77
+ Requires Node.js, pnpm and the gh CLI — [how to install them](./docs/setup/prerequisites.md).
78
78
 
79
79
  ```bash
80
+ gh auth login # once, before josh start
80
81
  pnpm add -D --allow-build=esbuild --allow-build=unrs-resolver @joshuafolkken/kit
81
82
  pnpm exec josh start
82
83
  ```
83
84
 
84
- `josh start` picks the project's profile, writes kit's rules and checks, and creates the GitHub repository and workflow labels when they are missing. On a repository that already has history it opens a setup pull request instead of committing to `main` — merge it before your first run ([what it does](./docs/init.md#josh-init-or-josh-start)).
85
-
86
- Add the two Telegram credentials to `.env` so a run that needs you can reach you, or `JOSH_NOTIFY=off` to go without — [Set up notifications](./docs/how-to/set-up-notifications.md).
85
+ `josh start` sets kit up and creates the GitHub repository when it is missing. A repository with history gets a setup pull request instead — merge it before your first run ([what it does](./docs/init.md#josh-init-or-josh-start)).
87
86
 
88
87
  Then open your agent and follow the [tutorial](./docs/tutorial.md).
89
88
 
90
- AI assistant only, no GitHub workflow? [Node projects](./docs/setup/full.md#2-install-and-initialize-with-josh-init) · [Other projects](./docs/setup/basic.md)
89
+ **Only want the AI assistant, without the GitHub workflow?** [TypeScript projects](./docs/setup/full.md#2-install-and-initialize-with-josh-init) · [Other projects](./docs/setup/basic.md) — other projects get short AI rules and formatting only ([what each profile gets](./docs/init.md#project-profiles)).
91
90
 
92
91
  ## Docs
93
92
 
@@ -9,10 +9,10 @@ import {
9
9
  load_environment_file,
10
10
  notice_refusal_path,
11
11
  refusal_path
12
- } from "./chunk-RNWHN5BP.js";
13
- import "./chunk-VC3PZPZO.js";
14
- import "./chunk-6HJJXRBX.js";
15
- import "./chunk-55HHG5PX.js";
12
+ } from "./chunk-F3ELQ2AF.js";
13
+ import "./chunk-GPTFMK5E.js";
14
+ import "./chunk-ZQGD4GBY.js";
15
+ import "./chunk-WK2XSHSI.js";
16
16
  import "./chunk-WPALEIRX.js";
17
17
  import "./chunk-RKUAD3I6.js";
18
18
  import "./chunk-ELCN5LCH.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  duplicate_read_outcome
3
- } from "./chunk-TQNPDZNH.js";
3
+ } from "./chunk-QVSWU24O.js";
4
4
  import {
5
5
  ALREADY_DONE_LABEL,
6
6
  CONTEXT_CUT_THRESHOLD,
@@ -36,7 +36,7 @@ import {
36
36
  run_tail_rule,
37
37
  shell_segments,
38
38
  tail_commands
39
- } from "./chunk-NV2JRZZO.js";
39
+ } from "./chunk-KHX4U3BG.js";
40
40
  import {
41
41
  ancestor_directories,
42
42
  find_local_bin_upwards
@@ -46,21 +46,21 @@ import {
46
46
  } from "./chunk-CDY4NFQG.js";
47
47
  import {
48
48
  batch_outcome
49
- } from "./chunk-RNWHN5BP.js";
49
+ } from "./chunk-F3ELQ2AF.js";
50
50
  import {
51
51
  investigation_refusal
52
- } from "./chunk-F56MFS4B.js";
52
+ } from "./chunk-KRBERBBI.js";
53
53
  import {
54
54
  investigation_reads
55
- } from "./chunk-5VMKCCC4.js";
55
+ } from "./chunk-XZYKEM6J.js";
56
56
  import {
57
57
  lane_guard_policy
58
- } from "./chunk-VC3PZPZO.js";
58
+ } from "./chunk-GPTFMK5E.js";
59
59
  import {
60
60
  hook_decision,
61
61
  lane_child_marker,
62
62
  run_issue_number
63
- } from "./chunk-6HJJXRBX.js";
63
+ } from "./chunk-ZQGD4GBY.js";
64
64
  import {
65
65
  cost_attribute,
66
66
  cost_blocks,
@@ -73,7 +73,7 @@ import {
73
73
  time_batch_guard,
74
74
  time_density_hook,
75
75
  time_shell
76
- } from "./chunk-55HHG5PX.js";
76
+ } from "./chunk-WK2XSHSI.js";
77
77
  import {
78
78
  PLATFORM_TEMP_ROOT,
79
79
  PROBE_TIMEOUT_MS,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  lane_guard_policy
3
- } from "./chunk-VC3PZPZO.js";
3
+ } from "./chunk-GPTFMK5E.js";
4
4
  import {
5
5
  hook_decision
6
- } from "./chunk-6HJJXRBX.js";
6
+ } from "./chunk-ZQGD4GBY.js";
7
7
  import {
8
8
  time_batch_guard
9
- } from "./chunk-55HHG5PX.js";
9
+ } from "./chunk-WK2XSHSI.js";
10
10
 
11
11
  // scripts/hooks/batch-guard.ts
12
12
  import { text } from "node:stream/consumers";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  lane_child_marker
3
- } from "./chunk-6HJJXRBX.js";
3
+ } from "./chunk-ZQGD4GBY.js";
4
4
 
5
5
  // scripts/lane/lane-guard-policy.ts
6
6
  var DEFAULT_MODE = "refuse";
@@ -6,7 +6,7 @@ import {
6
6
  ESLINT_EDIT_CACHE_FLAGS,
7
7
  file_reader,
8
8
  time_density_hook
9
- } from "./chunk-55HHG5PX.js";
9
+ } from "./chunk-WK2XSHSI.js";
10
10
  import {
11
11
  HOOK_PROCESS_TIMEOUT_MS
12
12
  } from "./chunk-ELCN5LCH.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  lane_child_marker,
6
6
  run_issue_number
7
- } from "./chunk-6HJJXRBX.js";
7
+ } from "./chunk-ZQGD4GBY.js";
8
8
  import {
9
9
  CHECK_STATUS_FAIL,
10
10
  CHECK_STATUS_PENDING,
@@ -30,7 +30,7 @@ import {
30
30
  time_density_hook,
31
31
  time_shell,
32
32
  time_transcript_line
33
- } from "./chunk-55HHG5PX.js";
33
+ } from "./chunk-WK2XSHSI.js";
34
34
  import {
35
35
  ENV_FILE_NAME,
36
36
  LANE_SEAT_KEY,
@@ -3062,6 +3062,10 @@ var EVENT_KIND = {
3062
3062
  SPLIT: "split",
3063
3063
  OUTAGE: "outage",
3064
3064
  CUT: "cut",
3065
+ // A fresh session adopted an implementation cut — `run:cut --resume` answered `resume-impl`
3066
+ // (joshuafolkken/kit#3375). The resume clears the cut record, so without this the `cut` stayed the
3067
+ // newest position and `run:step` kept answering the resume command it had just run.
3068
+ RESUME: "resume",
3065
3069
  // The backlog emptied while nothing of the run's own was in flight — the drain
3066
3070
  // (joshuafolkken/kit#2335). It marks the position at which the end-of-run retrospective is owed,
3067
3071
  // *before* the idle watch opens, so `run:step` fires the retrospective at the drain rather than after
@@ -3585,6 +3589,7 @@ var RUN_LANE_LABEL = "run:lane";
3585
3589
  var PRIORITY_HIGH_LABEL = "priority:high";
3586
3590
  var NEEDS_HUMAN_REVIEW_LABEL = "needs-human-review";
3587
3591
  var ALREADY_DONE_LABEL = "already-done";
3592
+ var RELEASE_LABEL = "release";
3588
3593
  var INTERRUPT_ROUTE_LABEL = "route:interrupt";
3589
3594
  var REVIEW_CAP_ROUTE_LABEL = "route:review-cap";
3590
3595
  var SPLIT_ROUTE_LABEL = "route:split";
@@ -3658,6 +3663,11 @@ var WORKFLOW_LABELS = [
3658
3663
  color: "e99695",
3659
3664
  description: "Offered first in a backlogrun; only a person removes it"
3660
3665
  },
3666
+ {
3667
+ name: RELEASE_LABEL,
3668
+ color: "fef2c0",
3669
+ description: "Tracks the next release; its blockers are the merged work it publishes"
3670
+ },
3661
3671
  ...FILING_ROUTE_LABELS,
3662
3672
  ...DEPTH_LABELS
3663
3673
  ];
@@ -4418,6 +4428,10 @@ async function list_lanes() {
4418
4428
  const lanes = blocks.map((block) => parse_block(block, root)).filter(is_lane);
4419
4429
  return lanes.toSorted((left, right) => Number(left.issue) - Number(right.issue));
4420
4430
  }
4431
+ async function registered_directories() {
4432
+ const blocks = await worktree_blocks();
4433
+ return blocks.flatMap((block) => line_value(block.split("\n"), WORKTREE_PREFIX) ?? []);
4434
+ }
4421
4435
  async function has_lanes_in_flight() {
4422
4436
  const lanes = await list_lanes();
4423
4437
  return lanes.some((lane) => !lane.is_stranded);
@@ -4442,6 +4456,7 @@ var lane_registry = {
4442
4456
  main_repository_root,
4443
4457
  parse_block,
4444
4458
  read_environment,
4459
+ registered_directories,
4445
4460
  unreadable_lanes,
4446
4461
  used_seats
4447
4462
  };
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  investigation_reads
3
- } from "./chunk-5VMKCCC4.js";
3
+ } from "./chunk-XZYKEM6J.js";
4
4
  import {
5
5
  lane_guard_policy
6
- } from "./chunk-VC3PZPZO.js";
6
+ } from "./chunk-GPTFMK5E.js";
7
7
  import {
8
8
  hook_decision
9
- } from "./chunk-6HJJXRBX.js";
9
+ } from "./chunk-ZQGD4GBY.js";
10
10
 
11
11
  // scripts/delegation/investigation-guard.ts
12
12
  import { text } from "node:stream/consumers";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  investigation_reads
3
- } from "./chunk-5VMKCCC4.js";
3
+ } from "./chunk-XZYKEM6J.js";
4
4
  import {
5
5
  lane_guard_policy
6
- } from "./chunk-VC3PZPZO.js";
6
+ } from "./chunk-GPTFMK5E.js";
7
7
  import {
8
8
  hook_decision
9
- } from "./chunk-6HJJXRBX.js";
9
+ } from "./chunk-ZQGD4GBY.js";
10
10
  import {
11
11
  json_value,
12
12
  time_spans
13
- } from "./chunk-55HHG5PX.js";
13
+ } from "./chunk-WK2XSHSI.js";
14
14
 
15
15
  // scripts/delegation/duplicate-read-guard.ts
16
16
  import { statSync } from "node:fs";