Skip to content

Commit 4f1ffc0

Browse files
tylerbutler-release-bot[bot]tylerbutlergithub-actions[bot]
authored
Release v0.12.0 (#233)
## v0.12.0 - 2026-03-27 ### Command: `apply` #### Added ##### Add overlay composition via `extends` and `includes` Overlays can now inherit files from other library overlays using two new `repoverlay.ccl` sections. Multi-level chains are supported with cycle detection. **`extends`** inherits all files from a parent overlay. The child's own files take precedence on conflict, making this ideal for creating specialized variants of a base overlay: ``` extends = overlay = base-config ``` Use case: a `claude-config-strict` overlay that extends `claude-config` and overrides just the `CLAUDE.md` file while inheriting everything else. **`includes`** cherry-picks specific files from other overlays, useful when you only need a few shared files without full inheritance: ``` includes = overlay = shared-dotfiles files = .editorconfig .prettierrc ``` Use case: multiple overlays that each need the same `.editorconfig` from a shared dotfiles overlay, without duplicating the file. Both features are restricted to library overlays. ### Command: `create` #### Fixed ##### Fall back to tracked config files when using `create --yes` When `--yes` is used and no AI config files are found, `create` now falls back to tracked config files (`.envrc`, `.gitignore`, `.vscode/settings.json`, etc.) instead of bailing. The auto-select priority is: AI configs first, tracked configs second, then error with a helpful message. ### Command: `edit` #### Fixed ##### Allow `edit add` without git remote origin `edit add` with a short-form overlay name (e.g., `my-overlay`) no longer requires a git remote origin. Previously, the command called `detect_target_repo()` to resolve `org/repo` for an error message hint, but this is unnecessary for the actual operation. Now uses the same inline name extraction as `edit remove` and `edit --interactive`. ##### Directory exclusions now persist across remove/reapply cycles Directories removed via `edit remove` no longer reappear when the overlay is removed and reapplied. The `ExcludedFile` struct now tracks whether an exclusion is for a file or directory, and directory exclusions match descendant paths. Also fixes trailing-slash handling (`.vscode/` is now treated the same as `.vscode`) and makes external state backup failures a hard error to ensure exclusions are always persisted. --------- Co-authored-by: tylerbutler <19589+tylerbutler@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 5f4fc7b commit 4f1ffc0

8 files changed

Lines changed: 156 additions & 182 deletions

File tree

.changes/unreleased/Added-20260326-120000.yaml

Lines changed: 0 additions & 45 deletions
This file was deleted.

.changes/unreleased/Fixed-20260318-182218.yaml

Lines changed: 0 additions & 10 deletions
This file was deleted.

.changes/unreleased/Fixed-20260318-182219.yaml

Lines changed: 0 additions & 11 deletions
This file was deleted.

.changes/unreleased/Fixed-20260321-191900.yaml

Lines changed: 0 additions & 12 deletions
This file was deleted.

.changes/v0.12.0.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
## v0.12.0 - 2026-03-27
2+
3+
4+
### Command: `apply`
5+
6+
7+
#### Added
8+
9+
##### Add overlay composition via `extends` and `includes`
10+
11+
Overlays can now inherit files from other library overlays using two new `repoverlay.ccl` sections. Multi-level chains are supported with cycle detection.
12+
13+
**`extends`** inherits all files from a parent overlay. The child's own files take precedence on conflict, making this ideal for creating specialized variants of a base overlay:
14+
15+
```
16+
17+
extends =
18+
19+
overlay = base-config
20+
21+
```
22+
23+
Use case: a `claude-config-strict` overlay that extends `claude-config` and overrides just the `CLAUDE.md` file while inheriting everything else.
24+
25+
**`includes`** cherry-picks specific files from other overlays, useful when you only need a few shared files without full inheritance:
26+
27+
```
28+
29+
includes =
30+
31+
overlay = shared-dotfiles
32+
33+
files =
34+
35+
.editorconfig
36+
37+
.prettierrc
38+
39+
```
40+
41+
Use case: multiple overlays that each need the same `.editorconfig` from a shared dotfiles overlay, without duplicating the file.
42+
43+
Both features are restricted to library overlays.
44+
45+
46+
### Command: `create`
47+
48+
49+
#### Fixed
50+
51+
##### Fall back to tracked config files when using `create --yes`
52+
53+
When `--yes` is used and no AI config files are found, `create` now falls back to tracked config files (`.envrc`, `.gitignore`, `.vscode/settings.json`, etc.) instead of bailing. The auto-select priority is: AI configs first, tracked configs second, then error with a helpful message.
54+
55+
56+
### Command: `edit`
57+
58+
59+
#### Fixed
60+
61+
##### Allow `edit add` without git remote origin
62+
63+
`edit add` with a short-form overlay name (e.g., `my-overlay`) no longer requires a git remote origin. Previously, the command called `detect_target_repo()` to resolve `org/repo` for an error message hint, but this is unnecessary for the actual operation. Now uses the same inline name extraction as `edit remove` and `edit --interactive`.
64+
65+
##### Directory exclusions now persist across remove/reapply cycles
66+
67+
Directories removed via `edit remove` no longer reappear when the overlay is removed and reapplied. The `ExcludedFile` struct now tracks whether an exclusion is for a file or directory, and directory exclusions match descendant paths. Also fixes trailing-slash handling (`.vscode/` is now treated the same as `.vscode`) and makes external state backup failures a hard error to ensure exclusions are always persisted.
68+

CHANGELOG.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,75 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## v0.12.0 - 2026-03-27
9+
10+
11+
### Command: `apply`
12+
13+
14+
#### Added
15+
16+
##### Add overlay composition via `extends` and `includes`
17+
18+
Overlays can now inherit files from other library overlays using two new `repoverlay.ccl` sections. Multi-level chains are supported with cycle detection.
19+
20+
**`extends`** inherits all files from a parent overlay. The child's own files take precedence on conflict, making this ideal for creating specialized variants of a base overlay:
21+
22+
```
23+
24+
extends =
25+
26+
overlay = base-config
27+
28+
```
29+
30+
Use case: a `claude-config-strict` overlay that extends `claude-config` and overrides just the `CLAUDE.md` file while inheriting everything else.
31+
32+
**`includes`** cherry-picks specific files from other overlays, useful when you only need a few shared files without full inheritance:
33+
34+
```
35+
36+
includes =
37+
38+
overlay = shared-dotfiles
39+
40+
files =
41+
42+
.editorconfig
43+
44+
.prettierrc
45+
46+
```
47+
48+
Use case: multiple overlays that each need the same `.editorconfig` from a shared dotfiles overlay, without duplicating the file.
49+
50+
Both features are restricted to library overlays.
51+
52+
53+
### Command: `create`
54+
55+
56+
#### Fixed
57+
58+
##### Fall back to tracked config files when using `create --yes`
59+
60+
When `--yes` is used and no AI config files are found, `create` now falls back to tracked config files (`.envrc`, `.gitignore`, `.vscode/settings.json`, etc.) instead of bailing. The auto-select priority is: AI configs first, tracked configs second, then error with a helpful message.
61+
62+
63+
### Command: `edit`
64+
65+
66+
#### Fixed
67+
68+
##### Allow `edit add` without git remote origin
69+
70+
`edit add` with a short-form overlay name (e.g., `my-overlay`) no longer requires a git remote origin. Previously, the command called `detect_target_repo()` to resolve `org/repo` for an error message hint, but this is unnecessary for the actual operation. Now uses the same inline name extraction as `edit remove` and `edit --interactive`.
71+
72+
##### Directory exclusions now persist across remove/reapply cycles
73+
74+
Directories removed via `edit remove` no longer reappear when the overlay is removed and reapplied. The `ExcludedFile` struct now tracks whether an exclusion is for a file or directory, and directory exclusions match descendant paths. Also fixes trailing-slash handling (`.vscode/` is now treated the same as `.vscode`) and makes external state backup failures a hard error to ensure exclusions are always persisted.
75+
76+
877
## v0.11.1 - 2026-03-17
978

1079

0 commit comments

Comments
 (0)