diff --git a/.agents/skills/comment-and-doc-style/references/line-endings.md b/.agents/skills/comment-and-doc-style/references/line-endings.md
index bdf0846a..8337cbcf 100644
--- a/.agents/skills/comment-and-doc-style/references/line-endings.md
+++ b/.agents/skills/comment-and-doc-style/references/line-endings.md
@@ -71,9 +71,10 @@ tool-owned format outside `.bat`/`.cmd`, or a byte-preserve data directory whose
consumer may depend on), still pair a `.gitattributes` pin with a matching `.editorconfig`
override, since the git pin alone is not enough there, `.gitattributes` governs git while the
editor follows `.editorconfig`. For a byte-preserve directory, disable all editor normalization,
-not just EOL: `[
/*]` with `charset = unset`, `end_of_line = unset`, `insert_final_newline =
+not just EOL: `[/**]` with `charset = unset`, `end_of_line = unset`, `insert_final_newline =
false`, `trim_trailing_whitespace = false` (`unset` is EditorConfig's spec-defined special value
-that removes an inherited property).
+that removes an inherited property, and `**` is needed rather than `*` so a nested file under the
+directory is covered too, since `*` excludes `/` and only matches one path component).
## Editing discipline
diff --git a/.agents/skills/dotnet-codestyle/references/conventions.md b/.agents/skills/dotnet-codestyle/references/conventions.md
index 5eb48540..2421ab73 100644
--- a/.agents/skills/dotnet-codestyle/references/conventions.md
+++ b/.agents/skills/dotnet-codestyle/references/conventions.md
@@ -122,5 +122,14 @@ parameters, return values, exceptions, and crefs.
///
/// Thrown when is not a supported value.
///
-public async Task GetQuoteOfTheDayAsync(string category, CancellationToken cancellationToken) {}
+public async Task GetQuoteOfTheDayAsync(string category, CancellationToken cancellationToken)
+{
+ if (category is not ("motivational" or "humor"))
+ {
+ throw new ArgumentException($"Unsupported category: {category}", nameof(category));
+ }
+
+ await Task.Delay(0, cancellationToken);
+ return $"Quote for {category}";
+}
```
diff --git a/.agents/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md b/.agents/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
index 597cd5f1..6d934c0e 100644
--- a/.agents/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
+++ b/.agents/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
@@ -35,7 +35,7 @@ Two traps, both learned the hard way:
`git checkout -b promote/develop-to-main origin/main && git merge origin/develop`, take
`develop`'s side for the EOL-conflicted files (`git checkout --theirs `) **after
confirming each is content-identical modulo EOL, or that `develop` is a strict superset**
- (`diff <(git show :2:f | tr -d '\r') <(git show :3:f | tr -d '\r')`), then open that branch into
+ (`diff <(git show ":2:" | tr -d '\r') <(git show ":3:" | tr -d '\r')`), then open that branch into
`main`. Verify no genuine `main`-only content is dropped (build/test where the repo supports it).
## Why both rulesets omit "Require branches to be up to date before merging"
diff --git a/.agents/skills/resync-a-repo/SKILL.md b/.agents/skills/resync-a-repo/SKILL.md
index e291fb66..18962375 100644
--- a/.agents/skills/resync-a-repo/SKILL.md
+++ b/.agents/skills/resync-a-repo/SKILL.md
@@ -67,8 +67,9 @@ Preserve the evidence RESYNC.md section 2 requires, and do not leave the finding
4. **Interface workflows.** Honor the named contract, required jobs, the ruleset-bound check name,
the artifact-name handoff, rather than copying bytes.
5. **Settings, rulesets, and secrets.** Run
- `repo-config/configure.sh check / release|operational` from the hub at `main`,
- then `apply` for what it reports, never from a carried copy.
+ `repo-config/configure.sh check "/" release` (substitute `operational` for an
+ operational repo) from the hub at `main`, then `apply` for what it reports, never from a
+ carried copy.
6. **Intent files last, and by hand,** since nothing mechanical judges these.
Reconcile the registry entry (`status`, `types`, `releaseTrigger`, `workflowModel`,
diff --git a/.agents/skills/standup-a-repo/SKILL.md b/.agents/skills/standup-a-repo/SKILL.md
index 54c277a5..8269093d 100644
--- a/.agents/skills/standup-a-repo/SKILL.md
+++ b/.agents/skills/standup-a-repo/SKILL.md
@@ -75,8 +75,9 @@ maintainer can supply what section 0A lists.
8. **Settings, rulesets, and secrets.** STANDUP.md section 4: confirm the remote and the GitHub
repository agree before running anything else here, then apply with
- `repo-config/configure.sh apply owner/repo release|operational` from the hub at `main` and check with the same
- command's `check` subcommand, never from a hand-built or carried copy.
+ `repo-config/configure.sh apply owner/repo release` (substitute `operational` for an
+ operational repo) from the hub at `main` and check with the same command's `check` subcommand,
+ never from a hand-built or carried copy.
9. **Verify with the audit.** STANDUP.md section 5: run `AUDIT.md` end to end. The repo is stood
up only when it passes for its type, or its residual deltas are tracked in
diff --git a/.claude-plugin/fleet-skills/.source-digest b/.claude-plugin/fleet-skills/.source-digest
index 97ea0b63..160eee0d 100644
--- a/.claude-plugin/fleet-skills/.source-digest
+++ b/.claude-plugin/fleet-skills/.source-digest
@@ -1 +1 @@
-b945e66c274cb82a
+702692e5f8c8f60e
diff --git a/.claude-plugin/fleet-skills/skills/comment-and-doc-style/references/line-endings.md b/.claude-plugin/fleet-skills/skills/comment-and-doc-style/references/line-endings.md
index bdf0846a..8337cbcf 100644
--- a/.claude-plugin/fleet-skills/skills/comment-and-doc-style/references/line-endings.md
+++ b/.claude-plugin/fleet-skills/skills/comment-and-doc-style/references/line-endings.md
@@ -71,9 +71,10 @@ tool-owned format outside `.bat`/`.cmd`, or a byte-preserve data directory whose
consumer may depend on), still pair a `.gitattributes` pin with a matching `.editorconfig`
override, since the git pin alone is not enough there, `.gitattributes` governs git while the
editor follows `.editorconfig`. For a byte-preserve directory, disable all editor normalization,
-not just EOL: `[/*]` with `charset = unset`, `end_of_line = unset`, `insert_final_newline =
+not just EOL: `[/**]` with `charset = unset`, `end_of_line = unset`, `insert_final_newline =
false`, `trim_trailing_whitespace = false` (`unset` is EditorConfig's spec-defined special value
-that removes an inherited property).
+that removes an inherited property, and `**` is needed rather than `*` so a nested file under the
+directory is covered too, since `*` excludes `/` and only matches one path component).
## Editing discipline
diff --git a/.claude-plugin/fleet-skills/skills/dotnet-codestyle/references/conventions.md b/.claude-plugin/fleet-skills/skills/dotnet-codestyle/references/conventions.md
index 5eb48540..2421ab73 100644
--- a/.claude-plugin/fleet-skills/skills/dotnet-codestyle/references/conventions.md
+++ b/.claude-plugin/fleet-skills/skills/dotnet-codestyle/references/conventions.md
@@ -122,5 +122,14 @@ parameters, return values, exceptions, and crefs.
///
/// Thrown when is not a supported value.
///
-public async Task GetQuoteOfTheDayAsync(string category, CancellationToken cancellationToken) {}
+public async Task GetQuoteOfTheDayAsync(string category, CancellationToken cancellationToken)
+{
+ if (category is not ("motivational" or "humor"))
+ {
+ throw new ArgumentException($"Unsupported category: {category}", nameof(category));
+ }
+
+ await Task.Delay(0, cancellationToken);
+ return $"Quote for {category}";
+}
```
diff --git a/.claude-plugin/fleet-skills/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md b/.claude-plugin/fleet-skills/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
index 597cd5f1..6d934c0e 100644
--- a/.claude-plugin/fleet-skills/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
+++ b/.claude-plugin/fleet-skills/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
@@ -35,7 +35,7 @@ Two traps, both learned the hard way:
`git checkout -b promote/develop-to-main origin/main && git merge origin/develop`, take
`develop`'s side for the EOL-conflicted files (`git checkout --theirs `) **after
confirming each is content-identical modulo EOL, or that `develop` is a strict superset**
- (`diff <(git show :2:f | tr -d '\r') <(git show :3:f | tr -d '\r')`), then open that branch into
+ (`diff <(git show ":2:" | tr -d '\r') <(git show ":3:" | tr -d '\r')`), then open that branch into
`main`. Verify no genuine `main`-only content is dropped (build/test where the repo supports it).
## Why both rulesets omit "Require branches to be up to date before merging"
diff --git a/.claude-plugin/fleet-skills/skills/resync-a-repo/SKILL.md b/.claude-plugin/fleet-skills/skills/resync-a-repo/SKILL.md
index e291fb66..18962375 100644
--- a/.claude-plugin/fleet-skills/skills/resync-a-repo/SKILL.md
+++ b/.claude-plugin/fleet-skills/skills/resync-a-repo/SKILL.md
@@ -67,8 +67,9 @@ Preserve the evidence RESYNC.md section 2 requires, and do not leave the finding
4. **Interface workflows.** Honor the named contract, required jobs, the ruleset-bound check name,
the artifact-name handoff, rather than copying bytes.
5. **Settings, rulesets, and secrets.** Run
- `repo-config/configure.sh check / release|operational` from the hub at `main`,
- then `apply` for what it reports, never from a carried copy.
+ `repo-config/configure.sh check "/" release` (substitute `operational` for an
+ operational repo) from the hub at `main`, then `apply` for what it reports, never from a
+ carried copy.
6. **Intent files last, and by hand,** since nothing mechanical judges these.
Reconcile the registry entry (`status`, `types`, `releaseTrigger`, `workflowModel`,
diff --git a/.claude-plugin/fleet-skills/skills/standup-a-repo/SKILL.md b/.claude-plugin/fleet-skills/skills/standup-a-repo/SKILL.md
index 54c277a5..8269093d 100644
--- a/.claude-plugin/fleet-skills/skills/standup-a-repo/SKILL.md
+++ b/.claude-plugin/fleet-skills/skills/standup-a-repo/SKILL.md
@@ -75,8 +75,9 @@ maintainer can supply what section 0A lists.
8. **Settings, rulesets, and secrets.** STANDUP.md section 4: confirm the remote and the GitHub
repository agree before running anything else here, then apply with
- `repo-config/configure.sh apply owner/repo release|operational` from the hub at `main` and check with the same
- command's `check` subcommand, never from a hand-built or carried copy.
+ `repo-config/configure.sh apply owner/repo release` (substitute `operational` for an
+ operational repo) from the hub at `main` and check with the same command's `check` subcommand,
+ never from a hand-built or carried copy.
9. **Verify with the audit.** STANDUP.md section 5: run `AUDIT.md` end to end. The repo is stood
up only when it passes for its type, or its residual deltas are tracked in
diff --git a/.github/skills/comment-and-doc-style/references/line-endings.md b/.github/skills/comment-and-doc-style/references/line-endings.md
index bdf0846a..8337cbcf 100644
--- a/.github/skills/comment-and-doc-style/references/line-endings.md
+++ b/.github/skills/comment-and-doc-style/references/line-endings.md
@@ -71,9 +71,10 @@ tool-owned format outside `.bat`/`.cmd`, or a byte-preserve data directory whose
consumer may depend on), still pair a `.gitattributes` pin with a matching `.editorconfig`
override, since the git pin alone is not enough there, `.gitattributes` governs git while the
editor follows `.editorconfig`. For a byte-preserve directory, disable all editor normalization,
-not just EOL: `[/*]` with `charset = unset`, `end_of_line = unset`, `insert_final_newline =
+not just EOL: `[/**]` with `charset = unset`, `end_of_line = unset`, `insert_final_newline =
false`, `trim_trailing_whitespace = false` (`unset` is EditorConfig's spec-defined special value
-that removes an inherited property).
+that removes an inherited property, and `**` is needed rather than `*` so a nested file under the
+directory is covered too, since `*` excludes `/` and only matches one path component).
## Editing discipline
diff --git a/.github/skills/dotnet-codestyle/references/conventions.md b/.github/skills/dotnet-codestyle/references/conventions.md
index 5eb48540..2421ab73 100644
--- a/.github/skills/dotnet-codestyle/references/conventions.md
+++ b/.github/skills/dotnet-codestyle/references/conventions.md
@@ -122,5 +122,14 @@ parameters, return values, exceptions, and crefs.
///
/// Thrown when is not a supported value.
///
-public async Task GetQuoteOfTheDayAsync(string category, CancellationToken cancellationToken) {}
+public async Task GetQuoteOfTheDayAsync(string category, CancellationToken cancellationToken)
+{
+ if (category is not ("motivational" or "humor"))
+ {
+ throw new ArgumentException($"Unsupported category: {category}", nameof(category));
+ }
+
+ await Task.Delay(0, cancellationToken);
+ return $"Quote for {category}";
+}
```
diff --git a/.github/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md b/.github/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
index 597cd5f1..6d934c0e 100644
--- a/.github/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
+++ b/.github/skills/operational-vs-release-workflow/references/branch-protection-and-promotion.md
@@ -35,7 +35,7 @@ Two traps, both learned the hard way:
`git checkout -b promote/develop-to-main origin/main && git merge origin/develop`, take
`develop`'s side for the EOL-conflicted files (`git checkout --theirs `) **after
confirming each is content-identical modulo EOL, or that `develop` is a strict superset**
- (`diff <(git show :2:f | tr -d '\r') <(git show :3:f | tr -d '\r')`), then open that branch into
+ (`diff <(git show ":2:" | tr -d '\r') <(git show ":3:" | tr -d '\r')`), then open that branch into
`main`. Verify no genuine `main`-only content is dropped (build/test where the repo supports it).
## Why both rulesets omit "Require branches to be up to date before merging"
diff --git a/.github/skills/resync-a-repo/SKILL.md b/.github/skills/resync-a-repo/SKILL.md
index e291fb66..18962375 100644
--- a/.github/skills/resync-a-repo/SKILL.md
+++ b/.github/skills/resync-a-repo/SKILL.md
@@ -67,8 +67,9 @@ Preserve the evidence RESYNC.md section 2 requires, and do not leave the finding
4. **Interface workflows.** Honor the named contract, required jobs, the ruleset-bound check name,
the artifact-name handoff, rather than copying bytes.
5. **Settings, rulesets, and secrets.** Run
- `repo-config/configure.sh check / release|operational` from the hub at `main`,
- then `apply` for what it reports, never from a carried copy.
+ `repo-config/configure.sh check "/" release` (substitute `operational` for an
+ operational repo) from the hub at `main`, then `apply` for what it reports, never from a
+ carried copy.
6. **Intent files last, and by hand,** since nothing mechanical judges these.
Reconcile the registry entry (`status`, `types`, `releaseTrigger`, `workflowModel`,
diff --git a/.github/skills/standup-a-repo/SKILL.md b/.github/skills/standup-a-repo/SKILL.md
index 54c277a5..8269093d 100644
--- a/.github/skills/standup-a-repo/SKILL.md
+++ b/.github/skills/standup-a-repo/SKILL.md
@@ -75,8 +75,9 @@ maintainer can supply what section 0A lists.
8. **Settings, rulesets, and secrets.** STANDUP.md section 4: confirm the remote and the GitHub
repository agree before running anything else here, then apply with
- `repo-config/configure.sh apply owner/repo release|operational` from the hub at `main` and check with the same
- command's `check` subcommand, never from a hand-built or carried copy.
+ `repo-config/configure.sh apply owner/repo release` (substitute `operational` for an
+ operational repo) from the hub at `main` and check with the same command's `check` subcommand,
+ never from a hand-built or carried copy.
9. **Verify with the audit.** STANDUP.md section 5: run `AUDIT.md` end to end. The repo is stood
up only when it passes for its type, or its residual deltas are tracked in