@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.
- package/.claude/skills/workflow-commands/backlogrun-lanes.md +1 -1
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
- package/.claude/skills/workflow-commands/followup.md +5 -0
- package/.claude/skills/workflow-commands/kickoff.md +1 -0
- package/.claude/skills/workflow-commands/latest-gate.md +1 -1
- package/.github/workflows/publish.yml +2 -0
- package/README.md +30 -31
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-JUDKDCDP.js → chunk-4TZVB44A.js} +8 -8
- package/dist/hooks/{chunk-RNWHN5BP.js → chunk-F3ELQ2AF.js} +3 -3
- package/dist/hooks/{chunk-VC3PZPZO.js → chunk-GPTFMK5E.js} +1 -1
- package/dist/hooks/{chunk-FIVDHQGT.js → chunk-KHGB5S3Y.js} +1 -1
- package/dist/hooks/{chunk-NV2JRZZO.js → chunk-KHX4U3BG.js} +17 -2
- package/dist/hooks/{chunk-F56MFS4B.js → chunk-KRBERBBI.js} +3 -3
- package/dist/hooks/{chunk-TQNPDZNH.js → chunk-QVSWU24O.js} +4 -4
- package/dist/hooks/{chunk-55HHG5PX.js → chunk-WK2XSHSI.js} +284 -63
- package/dist/hooks/{chunk-5VMKCCC4.js → chunk-XZYKEM6J.js} +2 -2
- package/dist/hooks/{chunk-6HJJXRBX.js → chunk-ZQGD4GBY.js} +1 -1
- package/dist/hooks/codex-hook-adapter.js +10 -10
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +2 -2
- package/dist/hooks/inputs.json +172 -170
- package/dist/hooks/investigation-guard.js +5 -5
- package/dist/hooks/pretool-guard.js +9 -9
- package/dist/hooks/stop-guard.js +3 -17
- package/dist/josh.js +279 -63
- package/package.json +1 -1
- package/prompts/collaboration-workflow/issue-template.md +1 -0
- package/scripts/gate/core-admission.ts +162 -0
- package/scripts/gate/core-budget.ts +121 -67
- package/scripts/gate/gate-plan.ts +35 -2
- package/scripts/gate/gate-report.ts +28 -9
- package/scripts/gate/machine-capacity.ts +175 -0
- package/scripts/gate/verification-gate.ts +7 -2
- package/scripts/init/init.ts +5 -1
- package/scripts/init/package-manager-pin.ts +35 -0
- package/scripts/issue/issue-auto-ok.ts +31 -6
- package/scripts/issue/issue-file-cli.ts +31 -8
- package/scripts/issue/issue-file.ts +5 -0
- package/scripts/issue/issue-labels.ts +13 -0
- package/scripts/issue/issue-release-cli.ts +155 -0
- package/scripts/issue/issue-release.ts +58 -0
- package/scripts/josh/josh-command-types.ts +3 -0
- package/scripts/josh/josh-commands-development.ts +8 -0
- package/scripts/josh/josh-commands-issue.ts +8 -1
- package/scripts/josh/josh-commands-lane.ts +2 -1
- package/scripts/josh/josh-commands-maintenance.ts +2 -2
- package/scripts/josh/josh-logic.ts +4 -3
- package/scripts/lane/lane-cli.ts +9 -1
- package/scripts/lane/lane-leftover.ts +43 -29
- package/scripts/lane/lane-open.ts +5 -5
- package/scripts/lane/lane-paths.ts +13 -0
- package/scripts/lane/lane-registry.ts +11 -0
- package/scripts/lane/lane-stray.ts +140 -0
- package/scripts/release/github-release-environment.ts +1 -0
- package/scripts/release/github-release-runs.ts +115 -0
- package/scripts/release/github-release.ts +13 -67
- package/scripts/run/cut/run-cut-cli.ts +16 -3
- package/scripts/run/event/run-event-render.ts +1 -0
- package/scripts/run/event/run-event-stream.ts +4 -0
- package/scripts/run/run-step.ts +5 -2
- package/scripts/run/wake/run-wake-cli.ts +2 -3
- package/scripts/run/wake/run-wake-describe.ts +56 -5
- package/scripts/run/wake/run-wake-loop.ts +5 -13
- package/scripts/run/wake/run-wake.ts +15 -64
- package/scripts/version/latest-corepack.ts +109 -78
- 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
|
|
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`
|
|
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
|
|
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
|
[](https://www.npmjs.com/package/@joshuafolkken/kit)
|
|
6
6
|
[](./LICENSE)
|
|
7
7
|
|
|
8
|
-
[](https://nodejs.org/)
|
|
9
9
|
[](https://www.typescriptlang.org/)
|
|
10
|
-
[](https://pnpm.io/)
|
|
11
11
|
|
|
12
12
|
[](https://github.com/joshuafolkken/kit/actions/workflows/ci.yml)
|
|
13
13
|
[](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
|
-
|
|
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
|
-
- [
|
|
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
|
-
|
|
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
|
-
- [
|
|
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
|
-
|
|
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 |
|
|
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
|
-
|
|
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
|
|
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`
|
|
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
|
|
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-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
49
|
+
} from "./chunk-F3ELQ2AF.js";
|
|
50
50
|
import {
|
|
51
51
|
investigation_refusal
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-KRBERBBI.js";
|
|
53
53
|
import {
|
|
54
54
|
investigation_reads
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-XZYKEM6J.js";
|
|
56
56
|
import {
|
|
57
57
|
lane_guard_policy
|
|
58
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
3
|
+
} from "./chunk-GPTFMK5E.js";
|
|
4
4
|
import {
|
|
5
5
|
hook_decision
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ZQGD4GBY.js";
|
|
7
7
|
import {
|
|
8
8
|
time_batch_guard
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WK2XSHSI.js";
|
|
10
10
|
|
|
11
11
|
// scripts/hooks/batch-guard.ts
|
|
12
12
|
import { text } from "node:stream/consumers";
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
lane_child_marker,
|
|
6
6
|
run_issue_number
|
|
7
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
3
|
+
} from "./chunk-XZYKEM6J.js";
|
|
4
4
|
import {
|
|
5
5
|
lane_guard_policy
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GPTFMK5E.js";
|
|
7
7
|
import {
|
|
8
8
|
hook_decision
|
|
9
|
-
} from "./chunk-
|
|
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-
|
|
3
|
+
} from "./chunk-XZYKEM6J.js";
|
|
4
4
|
import {
|
|
5
5
|
lane_guard_policy
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GPTFMK5E.js";
|
|
7
7
|
import {
|
|
8
8
|
hook_decision
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-ZQGD4GBY.js";
|
|
10
10
|
import {
|
|
11
11
|
json_value,
|
|
12
12
|
time_spans
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WK2XSHSI.js";
|
|
14
14
|
|
|
15
15
|
// scripts/delegation/duplicate-read-guard.ts
|
|
16
16
|
import { statSync } from "node:fs";
|