arashi 1.32.0 → 1.33.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 CHANGED
@@ -35,13 +35,13 @@ curl -fsSL https://arashi.haphazard.dev/install | ARASHI_VERSION=1.4.0 bash
35
35
  Verify install:
36
36
 
37
37
  ```bash
38
- arashi --version
38
+ aw --version
39
39
  ```
40
40
 
41
- By default, the installer places `arashi` in `~/.arashi/bin`, adds that path to your shell config, and in interactive installs offers to enable shell integration for `arashi switch --cd`.
42
- Supported installations provide both canonical `arashi` and the first-class `aw` shorthand (“Arashi Workspace”). Both run the same implementation; product names, configuration, environment variables, help, and documentation remain canonical `arashi`.
41
+ By default, the installer places `arashi` in `~/.arashi/bin`, adds that path to your shell config, and in interactive installs offers to enable shell integration for `aw switch --cd`.
42
+ Use `aw` for documented workflows. The `arashi` executable remains supported for existing scripts and workflows, and both names run the same implementation. Product names, configuration, environment variables, packages, and native binaries retain their established Arashi names.
43
43
 
44
- The installer transaction verifies identical, non-empty `arashi --version` and `aw --version` output before declaring success.
44
+ The installer transaction verifies that both executable entrypoints report the same non-empty version before declaring success.
45
45
 
46
46
  If curl installation fails, or if the smoke test reports a bad release artifact, use npm installation below or the manual release instructions in [`docs/INSTALLATION.md`](./docs/INSTALLATION.md).
47
47
 
@@ -53,7 +53,7 @@ PowerShell is the canonical Windows installer:
53
53
  powershell -c "irm https://arashi.haphazard.dev/install.ps1 | iex"
54
54
  ```
55
55
 
56
- It verifies and installs one `arashi.bin.exe` plus `arashi`/`aw` wrappers for Git Bash, `arashi.ps1`/`aw.ps1`, and `arashi.bat`/`aw.bat` from the same release. The default directory is `%USERPROFILE%\.arashi\bin`; the installer adds it to the persistent user PATH. It does not create or modify `.bashrc` or another shell profile. Open a new Git Bash window before running `arashi --version` or `aw --version` so it inherits the PATH change.
56
+ It verifies and installs one `arashi.bin.exe` plus `arashi`/`aw` wrappers for Git Bash, `arashi.ps1`/`aw.ps1`, and `arashi.bat`/`aw.bat` from the same release. The default directory is `%USERPROFILE%\.arashi\bin`; the installer adds it to the persistent user PATH. It does not create or modify `.bashrc` or another shell profile. Open a new Git Bash window before verifying the installed version so it inherits the PATH change.
57
57
 
58
58
  ### Option 3: Install with npm
59
59
 
@@ -66,23 +66,23 @@ The npm package is script-free: it does not require package-manager lifecycle sc
66
66
  To preinstall the binary explicitly, run:
67
67
 
68
68
  ```bash
69
- arashi install
69
+ aw install
70
70
  ```
71
71
 
72
72
  To check for package updates or refresh the matching platform binary, run:
73
73
 
74
74
  ```bash
75
- arashi update --check
76
- arashi update --dry-run
77
- arashi update --yes
75
+ aw update --check
76
+ aw update --dry-run
77
+ aw update --yes
78
78
  ```
79
79
 
80
- `arashi update` can update npm-managed installs when it can confidently detect the package manager, including npm, pnpm, Yarn, Bun, and Vite+ (`vp update -g arashi`). For official direct-installer installs, `arashi update --yes` reruns the platform installer against the current binary directory: the POSIX curl installer on macOS/Linux and a deferred PowerShell installer on Windows after the current Arashi process exits.
80
+ `aw update` can update npm-managed installs when it can confidently detect the package manager, including npm, pnpm, Yarn, Bun, and Vite+ (`vp update -g arashi`). For official direct-installer installs, `aw update --yes` reruns the platform installer against the current binary directory: the POSIX curl installer on macOS/Linux and a deferred PowerShell installer on Windows after the current Arashi process exits.
81
81
 
82
82
  Verify install:
83
83
 
84
84
  ```bash
85
- arashi --version
85
+ aw --version
86
86
  ```
87
87
 
88
88
  If npm is unavailable or binary installation fails, use the curl installer command above or the manual release instructions in [`docs/INSTALLATION.md`](./docs/INSTALLATION.md).
@@ -135,58 +135,60 @@ pnpm run build
135
135
 
136
136
  Arashi currently provides these commands:
137
137
 
138
- - `arashi init`
139
- - [`arashi init --zero-config`](docs/standalone.md) for a single repository with `.worktrees/<branch>` paths and no persisted Arashi configuration
140
- - `arashi install`
141
- - `arashi update [--check] [--dry-run] [--yes]`
142
- - `arashi add <git-url>`
143
- - `arashi clone [--all]`
144
- - `arashi create <branch> [--base <branch>] [--tab] [--tmux|--sesh|--herdr]`
145
- - `arashi list`
146
- - `arashi status`
147
- - `arashi remove <branch|path>`
148
- - `arashi prune [--dry-run]` - clean stale Git worktree metadata
149
- - `arashi switch [filter] [--repos|--all] [--tab] [--cd|--launch] [--tmux|--sesh|--herdr] [--ignore-configured-launcher]`
150
- - `arashi completion <bash|zsh|fish>`
151
- - `arashi shell init <bash|zsh|fish>`
152
- - `arashi shell install`
153
- - `arashi pull`
154
- - `arashi push [--set-upstream] [--dry-run] [--only <repo>] [--json]`
155
- - `arashi sync`
156
- - `arashi setup [--only <repo>] [--verbose]`
138
+ - `aw init`
139
+ - [`aw init --zero-config`](docs/standalone.md) for a single repository with `.worktrees/<branch>` paths and no persisted Arashi configuration
140
+ - `aw install`
141
+ - `aw update [--check] [--dry-run] [--yes]`
142
+ - `aw add <git-url>`
143
+ - `aw clone [--all] [--base <branch>] [--repo-base <repository=branch>]`
144
+ - `aw create <branch> [--base <branch>] [--repo-base <repository=branch>] [--tab] [--tmux|--sesh|--herdr]`
145
+ - `aw list`
146
+ - `aw status`
147
+ - `aw remove <branch|path>`
148
+ - `aw prune [--dry-run]` - clean stale Git worktree metadata
149
+ - `aw switch [filter] [--repos|--all] [--tab] [--cd|--launch] [--tmux|--sesh|--herdr] [--ignore-configured-launcher]`
150
+ - `aw completion <bash|zsh|fish>`
151
+ - `aw shell init <bash|zsh|fish>`
152
+ - `aw shell install`
153
+ - `aw pull`
154
+ - `aw push [--set-upstream] [--dry-run] [--only <repo>] [--json]`
155
+ - `aw sync`
156
+ - `aw setup [--only <repo>] [--verbose]`
157
157
 
158
158
  ## Quick Example
159
159
 
160
160
  ```bash
161
- arashi init # repository-local ignore rules (default)
162
- arashi init --ignore-scope tracked # opt in to a shared .gitignore block
163
- arashi add git@github.com:your-org/frontend.git
164
- arashi add git@github.com:your-org/backend.git
165
- arashi create feature-auth-refresh
166
- arashi create feature-auth-refresh --base feature/auth
167
- arashi create feature-auth-refresh --launch
168
- arashi create feature-auth-refresh --tmux
169
- arashi create feature-auth-refresh --herdr
170
- arashi create feature-auth-refresh --tab
171
- arashi create feature-auth-refresh --no-launch
172
- arashi shell install
173
- arashi status
174
- arashi switch feature-auth-refresh # parent repo worktrees
175
- arashi switch --repos feature-auth-refresh # child repo worktrees in current workspace
176
- arashi switch --all feature-auth-refresh # all repos
177
- arashi switch --repos docs # repo-name matching in child repos
178
- arashi switch --cd feature-auth-refresh # parent-shell cd when shell integration is active
179
- arashi switch --launch feature-auth-refresh # force launch while preserving a configured launcher
180
- arashi switch --tmux feature-auth-refresh # force a new plain tmux window
181
- arashi switch --herdr feature-auth-refresh # open or focus a persistent Herdr workspace
182
- arashi switch --tab feature-auth-refresh # request a true tab or managed equivalent
183
- arashi switch --ignore-configured-launcher # bypass configured sesh/Herdr mode once
184
- arashi switch --launch --ignore-configured-launcher # force generic automatic launch
161
+ aw init # repository-local ignore rules (default)
162
+ aw init --ignore-scope tracked # opt in to a shared .gitignore block
163
+ aw add git@github.com:your-org/frontend.git
164
+ aw add git@github.com:your-org/backend.git
165
+ aw create feature-auth-refresh
166
+ aw create feature-auth-refresh --base feature/auth
167
+ aw create feature-auth-refresh --repo-base @meta=develop --repo-base frontend=release/2.x
168
+ aw clone --all --base main --repo-base frontend=release/2.x
169
+ aw create feature-auth-refresh --launch
170
+ aw create feature-auth-refresh --tmux
171
+ aw create feature-auth-refresh --herdr
172
+ aw create feature-auth-refresh --tab
173
+ aw create feature-auth-refresh --no-launch
174
+ aw shell install
175
+ aw status
176
+ aw switch feature-auth-refresh # parent repo worktrees
177
+ aw switch --repos feature-auth-refresh # child repo worktrees in current workspace
178
+ aw switch --all feature-auth-refresh # all repos
179
+ aw switch --repos docs # repo-name matching in child repos
180
+ aw switch --cd feature-auth-refresh # parent-shell cd when shell integration is active
181
+ aw switch --launch feature-auth-refresh # force launch while preserving a configured launcher
182
+ aw switch --tmux feature-auth-refresh # force a new plain tmux window
183
+ aw switch --herdr feature-auth-refresh # open or focus a persistent Herdr workspace
184
+ aw switch --tab feature-auth-refresh # request a true tab or managed equivalent
185
+ aw switch --ignore-configured-launcher # bypass configured sesh/Herdr mode once
186
+ aw switch --launch --ignore-configured-launcher # force generic automatic launch
185
187
  ```
186
188
 
187
189
  ### Add from a linked parent worktree
188
190
 
189
- When `arashi add` runs from an active linked parent worktree, Arashi creates one canonical clone in the parent main checkout and leaves it on the child default branch. It then creates the active child as a linked worktree on the coordinated branch and updates only the active parent configuration. Direct-main and configured-bare adds keep their existing single-placement behavior. See the [add command guide](https://arashi.haphazard.dev/commands/add/) for branch, managed-ignore, JSON, and rollback details.
191
+ When `aw add` runs from an active linked parent worktree, Arashi creates one canonical clone in the parent main checkout and leaves it on the child default branch. It then creates the active child as a linked worktree on the coordinated branch and updates only the active parent configuration. Direct-main and configured-bare adds keep their existing single-placement behavior. See the [add command guide](https://arashi.haphazard.dev/commands/add/) for branch, managed-ignore, JSON, and rollback details.
190
192
 
191
193
  Explicit `--tmux` is a per-invocation launcher override for `create` and `switch`; it is not a persisted configuration mode. It requires an active tmux context whose `TMUX` value is non-empty after trimming, uses the selected worktree path as one argv-safe `tmux new-window -c` argument, and does not fall back to another launcher when the prerequisite or launch fails. On `create`, it implies both launch and switch, while validation failures occur before worktree mutation.
192
194
 
@@ -200,10 +202,10 @@ global excludes rule is honored without duplication. Missing safe repository-rel
200
202
  the common repository's local exclude file by default, including when a command runs in a linked
201
203
  worktree.
202
204
 
203
- Use `arashi init --ignore-scope tracked` when the team wants Arashi-owned rules committed in the
204
- workspace `.gitignore`. Use `arashi init --ignore-scope none` for a fully manual workflow; Arashi
205
+ Use `aw init --ignore-scope tracked` when the team wants Arashi-owned rules committed in the
206
+ workspace `.gitignore`. Use `aw init --ignore-scope none` for a fully manual workflow; Arashi
205
207
  will warn about unignored managed paths but will not edit ignore files. Running
206
- `arashi init --ignore-scope local` resets that clone-local preference without recreating an
208
+ `aw init --ignore-scope local` resets that clone-local preference without recreating an
207
209
  existing workspace. The explicit `tracked` or `none` preference is stored only in local Git config
208
210
  as `arashi.ignoreScope`; Arashi never creates or modifies global Git ignore configuration.
209
211
 
@@ -228,41 +230,41 @@ Use shell integration for parent-shell directory switching and native tab comple
228
230
  The official curl installer can offer this automatically. If you skip it or use npm, install it for the active shell with:
229
231
 
230
232
  ```bash
231
- arashi shell install
233
+ aw shell install
232
234
  ```
233
235
 
234
- `arashi shell install` adds a managed pair to the active shell startup file: the parent-shell wrapper first and completion activation second. Repeating the command is idempotent and upgrades older wrapper-only blocks.
236
+ `aw shell install` adds a managed pair to the active shell startup file: the parent-shell wrapper first and completion activation second. Repeating the command is idempotent and upgrades older wrapper-only blocks.
235
237
 
236
238
  For manual setup, activate the wrapper and completion independently:
237
239
 
238
240
  ```bash
239
241
  # Bash
240
- eval "$(command arashi shell init bash)"
241
- source <(command arashi completion bash)
242
+ eval "$(command aw shell init bash)"
243
+ source <(command aw completion bash)
242
244
 
243
245
  # Zsh
244
- eval "$(command arashi shell init zsh)"
245
- source <(command arashi completion zsh)
246
+ eval "$(command aw shell init zsh)"
247
+ source <(command aw completion zsh)
246
248
 
247
249
  # Fish
248
- command arashi shell init fish | source
249
- command arashi completion fish | source
250
+ command aw shell init fish | source
251
+ command aw completion fish | source
250
252
  ```
251
253
 
252
- `arashi shell init <shell>` remains wrapper-only and defines both parent-shell functions, unless an unrelated `aw` alias or function already owns that shell name. `arashi completion <shell>` registers the same completion model for both executable names and emits only deterministic sourceable shell code, including on npm first use when the platform binary must be installed.
254
+ `aw shell init <shell>` remains wrapper-only and defines both parent-shell functions, unless an unrelated `aw` alias or function already owns that shell name. `aw completion <shell>` registers the same completion model for both executable names and emits only deterministic sourceable shell code, including on npm first use when the platform binary must be installed.
253
255
 
254
256
  Completion covers commands, aliases, options, finite choices, conflicts, and positional boundaries. In an Arashi workspace it also resolves configured repository and group selector segments, switch/remove worktrees and paths, and move source/target references. Dynamic lookup is local and read-only, silent on unavailable or broken metadata, and limited to a 200 ms whole-query budget; it performs no network requests, hooks, prompts, workspace mutations, or child operations. Static completion remains available outside a workspace.
255
257
 
256
- Once installed, you can use `arashi switch --cd <filter>` for one-off parent-shell switching or set `.arashi/config.json` `defaults.switch.mode` to `"cd"` or contextual `"auto"`. The canonical modes are `auto` | `cd` | `launch` | `sesh` | `herdr`.
258
+ Once installed, you can use `aw switch --cd <filter>` for one-off parent-shell switching or set `.arashi/config.json` `defaults.switch.mode` to `"cd"` or contextual `"auto"`. The canonical modes are `auto` | `cd` | `launch` | `sesh` | `herdr`.
257
259
 
258
- If shell integration is inactive, `arashi switch --cd` warns and skips launch fallback for that invocation.
260
+ If shell integration is inactive, `aw switch --cd` warns and skips launch fallback for that invocation.
259
261
 
260
262
  For automated installs, set `ARASHI_SHELL_INTEGRATION=yes` to enable it without prompting or `ARASHI_SHELL_INTEGRATION=no` to skip it.
261
263
 
262
264
  ## Hooks
263
265
 
264
- Arashi can run file-backed or configured inline lifecycle hooks during `arashi create` and
265
- `arashi remove`. Inline workspace values live only at root `hooks.scripts.<lifecycle>`; repository
266
+ Arashi can run file-backed or configured inline lifecycle hooks during `aw create` and
267
+ `aw remove`. Inline workspace values live only at root `hooks.scripts.<lifecycle>`; repository
266
268
  values live only at `repos.<name>.hooks.<lifecycle>`. Use inline config for short reviewable commands
267
269
  and native files for substantial scripts. One inline/file source may own a logical location; a
268
270
  same-location collision fails preflight instead of running both.
@@ -281,61 +283,61 @@ See [`docs/configuration.md`](./docs/configuration.md#inline-lifecycle-hook-conf
281
283
 
282
284
  ## Workflow Shortcuts
283
285
 
284
- Use `arashi list` with `fzf` and optional keybinds to speed up daily navigation.
286
+ Use `aw list` with `fzf` and optional keybinds to speed up daily navigation.
285
287
 
286
288
  ### Jump to a worktree (`cd`)
287
289
 
288
290
  ```bash
289
291
  # One-off jump
290
- cd "$(arashi list | fzf)"
292
+ cd "$(aw list | fzf)"
291
293
  ```
292
294
 
293
295
  ```bash
294
296
  # Bash keybind (Ctrl+G)
295
- bind '"\C-g":"cd \$(arashi list | fzf)\n"'
297
+ bind '"\C-g":"cd \$(aw list | fzf)\n"'
296
298
  ```
297
299
 
298
300
  ```zsh
299
301
  # Zsh keybind (Ctrl+G)
300
- bindkey -s '^g' 'cd $(arashi list | fzf)\n'
302
+ bindkey -s '^g' 'cd $(aw list | fzf)\n'
301
303
  ```
302
304
 
303
305
  ### Open or switch tmux sessions with `sesh`
304
306
 
305
307
  ```bash
306
308
  # One-off session connect
307
- sesh connect "$(arashi list | fzf)"
309
+ sesh connect "$(aw list | fzf)"
308
310
  ```
309
311
 
310
312
  ```bash
311
313
  # Bash keybind (Ctrl+S)
312
- bind '"\C-s":"sesh connect \$(arashi list | fzf)\n"'
314
+ bind '"\C-s":"sesh connect \$(aw list | fzf)\n"'
313
315
  ```
314
316
 
315
317
  ```zsh
316
318
  # Zsh keybind (Ctrl+S)
317
- bindkey -s '^s' 'sesh connect $(arashi list | fzf)\n'
319
+ bindkey -s '^s' 'sesh connect $(aw list | fzf)\n'
318
320
  ```
319
321
 
320
- You can also use `arashi switch --sesh` directly inside tmux to open the selected worktree in a new tmux window.
322
+ You can also use `aw switch --sesh` directly inside tmux to open the selected worktree in a new tmux window.
321
323
 
322
- `arashi switch` checks managed contexts in this order: tmux → Herdr → cmux → integrated IDE → Kitty. Managed Kitty selection applies when any one of `KITTY_PID`, `KITTY_WINDOW_ID`, or `TERM=xterm-kitty` is present after normalization.
324
+ `aw switch` checks managed contexts in this order: tmux → Herdr → cmux → integrated IDE → Kitty. Managed Kitty selection applies when any one of `KITTY_PID`, `KITTY_WINDOW_ID`, or `TERM=xterm-kitty` is present after normalization.
323
325
 
324
326
  Managed Kitty requires Kitty 0.43 or newer plus working `kitten @` remote control. Arashi reuses only its exact worktree marker and focuses that tab before launching a new session-backed tab. Once managed Kitty is selected, missing or unsupported tooling, denied remote control, duplicate markers, and validation failures are reported directly instead of falling back to another launcher.
325
327
 
326
- `arashi create --launch` and `defaults.create.launch: "auto"` use the same managed Kitty behavior. If that post-create launch fails, Arashi exits nonzero but preserves the successfully created worktree and reports the launch as partial success. Fix the launcher problem and use `arashi switch`; do not retry creation for the same branch.
328
+ `aw create --launch` and `defaults.create.launch: "auto"` use the same managed Kitty behavior. If that post-create launch fails, Arashi exits nonzero but preserves the successfully created worktree and reports the launch as partial success. Fix the launcher problem and use `aw switch`; do not retry creation for the same branch.
327
329
 
328
330
  ### Fast remove selection
329
331
 
330
332
  ```bash
331
333
  # Select and remove a worktree quickly
332
- arashi remove -f "$(arashi list | fzf)"
334
+ aw remove -f "$(aw list | fzf)"
333
335
  ```
334
336
 
335
337
  If you prefer the term `delete`, create a shell alias:
336
338
 
337
339
  ```bash
338
- alias arashi-delete='arashi remove -f'
340
+ alias arashi-delete='aw remove -f'
339
341
  ```
340
342
 
341
343
  ## Configuration Schema
@@ -384,7 +386,7 @@ Explicit launcher flags take precedence over `--cd` / `--launch`, which take pre
384
386
 
385
387
  Legacy switch-only `launchMode` and `launch_mode` fields remain readable for a bounded compatibility window. Arashi warns with the exact replacement `defaults.switch.mode` on stderr; migrate promptly. Ambiguous `cd` plus an explicit legacy launcher and conflicting legacy aliases are rejected.
386
388
 
387
- Use `defaults.create` for terminal `arashi create` behavior. Use `defaults.editors.<host>.create` for editor-specific overrides such as VS Code extension create flows. Supported hosts are `vscode`, `cursor`, and `kiro`. Each scope has one canonical `launch` choice: `none` | `auto` | `sesh` | `herdr`. `switch` stays independent, while any enabled launch implies switch handling for the newly created primary worktree.
389
+ Use `defaults.create` for terminal `aw create` behavior. Use `defaults.editors.<host>.create` for editor-specific overrides such as VS Code extension create flows. Supported hosts are `vscode`, `cursor`, and `kiro`. Each scope has one canonical `launch` choice: `none` | `auto` | `sesh` | `herdr`. `switch` stays independent, while any enabled launch implies switch handling for the newly created primary worktree.
388
390
 
389
391
  Create precedence is: reject `--sesh` plus `--herdr`; then explicit `--sesh` / `--herdr`; `--tab` or `--launch`; `--no-launch`; the matching configured scope; and built-in `none`. `--tab` bypasses the matching configured scope unless an explicit launcher selector is present. An editor-hosted invocation does not fall back to terminal or another editor scope.
390
392
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arashi",
3
- "version": "1.32.0",
3
+ "version": "1.33.0",
4
4
  "description": "Git worktree manager for meta-repositories - The eye of the storm for your development workflow",
5
5
  "keywords": [
6
6
  "cli",
@@ -19,12 +19,18 @@
19
19
  },
20
20
  "Config": {
21
21
  "additionalProperties": false,
22
- "description": "Root configuration object for Arashi",
22
+ "description": "Root configuration object for Arashi.",
23
23
  "properties": {
24
24
  "$schema": {
25
25
  "description": "JSON Schema URL for editor validation/autocomplete",
26
26
  "type": "string"
27
27
  },
28
+ "baseBranch": {
29
+ "description": "Workspace base branch shared by configured base-aware commands",
30
+ "minLength": 1,
31
+ "pattern": "^(?!HEAD$)(?!origin/(?:HEAD$|-))(?![-/.])(?!.*(?:/\\.|//|\\.\\.|@\\{))(?!.*\\.lock(?:/|$))(?!.*[/.]$)[^\\u0000-\\u0020\\u007F~^:?*\\[\\\\]+$",
32
+ "type": "string"
33
+ },
28
34
  "defaults": {
29
35
  "$ref": "#/definitions/CommandDefaultsConfig",
30
36
  "description": "Optional command-scoped defaults for create and switch"
@@ -47,6 +53,10 @@
47
53
  },
48
54
  "type": "object"
49
55
  },
56
+ "meta": {
57
+ "$ref": "#/definitions/MetaRepositoryConfig",
58
+ "description": "Optional meta-repository-specific policy"
59
+ },
50
60
  "repos": {
51
61
  "additionalProperties": {
52
62
  "$ref": "#/definitions/RepoConfig"
@@ -88,12 +98,6 @@
88
98
  "CreateCommandDefaults": {
89
99
  "additionalProperties": false,
90
100
  "properties": {
91
- "baseBranch": {
92
- "description": "Default base branch for configured create invocations",
93
- "minLength": 1,
94
- "pattern": "^(?!HEAD$)(?!origin/(?:HEAD$|-))(?![-/.])(?!.*(?:/\\.|//|\\.\\.|@\\{))(?!.*\\.lock(?:/|$))(?!.*[/.]$)[^\\u0000-\\u0020\\u007F~^:?*\\[\\\\]+$",
95
- "type": "string"
96
- },
97
101
  "launch": {
98
102
  "$ref": "#/definitions/CreateLaunchMode",
99
103
  "description": "Post-create launch choice; omitted preserves built-in no-launch behavior"
@@ -208,10 +212,29 @@
208
212
  ],
209
213
  "description": "Bash shorthand or interpreter-specific alternatives for one inline hook."
210
214
  },
215
+ "MetaRepositoryConfig": {
216
+ "additionalProperties": false,
217
+ "description": "Meta-repository-specific configuration.",
218
+ "properties": {
219
+ "baseBranch": {
220
+ "description": "Meta-repository-specific base branch for configured base-aware commands",
221
+ "minLength": 1,
222
+ "pattern": "^(?!HEAD$)(?!origin/(?:HEAD$|-))(?![-/.])(?!.*(?:/\\.|//|\\.\\.|@\\{))(?!.*\\.lock(?:/|$))(?!.*[/.]$)[^\\u0000-\\u0020\\u007F~^:?*\\[\\\\]+$",
223
+ "type": "string"
224
+ }
225
+ },
226
+ "type": "object"
227
+ },
211
228
  "RepoConfig": {
212
229
  "additionalProperties": false,
213
230
  "description": "Configuration for a single repository",
214
231
  "properties": {
232
+ "baseBranch": {
233
+ "description": "Repository-specific base branch for configured base-aware commands",
234
+ "minLength": 1,
235
+ "pattern": "^(?!HEAD$)(?!origin/(?:HEAD$|-))(?![-/.])(?!.*(?:/\\.|//|\\.\\.|@\\{))(?!.*\\.lock(?:/|$))(?!.*[/.]$)[^\\u0000-\\u0020\\u007F~^:?*\\[\\\\]+$",
236
+ "type": "string"
237
+ },
215
238
  "copy": {
216
239
  "description": "Repository-relative paths copied into new worktrees in declaration order",
217
240
  "items": {