Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .copilot/skills/auth0-token-forwarding/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public sealed class TokenForwardingHandler : DelegatingHandler
return await base.SendAsync(request, cancellationToken);
}
}
```
```text

### Step 2: Register Handler and Attach to HttpClients

Expand All @@ -76,7 +76,7 @@ builder.Services.AddHttpClient<IApiClient, ApiClient>(client =>
client.BaseAddress = new Uri("https+http://api"))
.AddServiceDiscovery()
.AddHttpMessageHandler<TokenForwardingHandler>();
```
```text

Repeat `.AddHttpMessageHandler<TokenForwardingHandler>()` for **all HttpClient registrations** that call protected APIs.

Expand All @@ -92,7 +92,7 @@ builder.Services.AddAuth0WebAppAuthentication(options =>
options.ClientSecret = clientSecret;
options.SaveTokens = true; // CRITICAL: Enables GetTokenAsync("access_token")
});
```
```text

## How It Works

Expand Down Expand Up @@ -165,7 +165,7 @@ public async Task TokenForwardingHandler_AttachesTokenWhenPresent()
request.Headers.Authorization.Scheme.Should().Be("Bearer");
request.Headers.Authorization.Parameter.Should().Be("fake-jwt-token");
}
```
```text

## Common Pitfalls

Expand Down
6 changes: 3 additions & 3 deletions .copilot/skills/cli-wiring/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@
await run<Name>(process.cwd(), options);
return;
}
```
```text

3. **Add help text** in the help section of `cli-entry.ts` (search for `Commands:`):

```ts
console.log(` ${BOLD}<name>${RESET} <description>`);
console.log(` Usage: <name> [flags]`);
```
```text

4. **Verify both exist** — the recurring bug is doing step 1 but missing steps 2-3.

Expand All @@ -40,7 +40,7 @@

```ts
import { BOLD, RESET, DIM, RED, GREEN, YELLOW } from './cli/core/output.js';
```
```text

Use dynamic `await import()` for command modules to keep startup fast (lazy loading).

Expand Down
26 changes: 13 additions & 13 deletions .copilot/skills/git-workflow/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,19 @@ Examples:
git checkout dev
git pull origin dev
git checkout -b squad/{issue-number}-{slug}
```
```text

2. **Mark issue in-progress:**

```bash
gh issue edit {number} --add-label "status:in-progress"
```
```text

3. **Create draft PR targeting dev:**

```bash
gh pr create --base dev --title "{description}" --body "Closes #{issue-number}" --draft
```
```text

4. **Do the work.** Make changes, write tests, commit with issue reference.

Expand All @@ -54,7 +54,7 @@ Examples:
```bash
git push -u origin squad/{issue-number}-{slug}
gh pr ready
```
```text

6. **After merge to dev:**

Expand All @@ -63,7 +63,7 @@ Examples:
git pull origin dev
git branch -d squad/{issue-number}-{slug}
git push origin --delete squad/{issue-number}-{slug}
```
```text

## Parallel Multi-Issue Work (Worktrees)

Expand All @@ -88,7 +88,7 @@ git fetch origin dev
# Create a worktree per issue — siblings to the main clone
git worktree add ../squad-195 -b squad/195-fix-stamp-bug origin/dev
git worktree add ../squad-193 -b squad/193-refactor-loader origin/dev
```
```text

**Naming convention:** `../{repo-name}-{issue-number}` (e.g., `../squad-195`, `../squad-pr-42`).

Expand All @@ -111,7 +111,7 @@ git push -u origin squad/195-fix-stamp-bug

# Create PR targeting dev
gh pr create --base dev --title "fix: stamp bug" --body "Closes #195" --draft
```
```text

All PRs target `dev` independently. Agents never interfere with each other's filesystem.

Expand All @@ -133,7 +133,7 @@ git worktree remove ../squad-195
git worktree prune # clean stale metadata
git branch -d squad/195-fix-stamp-bug
git push origin --delete squad/195-fix-stamp-bug
```
```text

If a worktree was deleted manually (rm -rf), `git worktree prune` recovers the state.

Expand All @@ -147,12 +147,12 @@ When work spans multiple repositories (e.g., squad-cli changes need squad-sdk ch

Clone downstream repos as siblings to the main repo:

```
```text
~/work/
squad-pr/ # main repo
squad-sdk/ # downstream dependency
user-app/ # consumer project
```
```text

Each repo gets its own issue branch following its own naming convention. If the downstream repo also uses Squad conventions, use `squad/{issue-number}-{slug}`.

Expand All @@ -161,11 +161,11 @@ Each repo gets its own issue branch following its own naming convention. If the
- Create PRs in each repo independently
- Link them in PR descriptions:

```
```markdown
Closes #42

**Depends on:** squad-sdk PR #17 (squad-sdk changes required for this feature)
```
```text

- Merge order: dependencies first (e.g., squad-sdk), then dependents (e.g., squad-cli)

Expand All @@ -184,7 +184,7 @@ cd ../squad-pr && npm link squad-sdk

# Python
cd ../squad-sdk && pip install -e .
```
```text

**Important:** Remove local links before committing. `npm link` and `go replace` are dev-only — CI must use published packages or PR-specific refs.

Expand Down
6 changes: 3 additions & 3 deletions .copilot/skills/model-selection/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ After resolving the model and including it in the spawn template, this skill is
"mcmanus": "claude-haiku-4.5"
}
}
```
```text

- `defaultModel` — applies to ALL agents unless overridden by `agentModelOverrides`
- `agentModelOverrides` — per-agent overrides that take priority over `defaultModel`
Expand All @@ -112,11 +112,11 @@ After resolving the model and including it in the spawn template, this skill is
If a model is unavailable (rate limit, plan restriction), retry within the same
tier until the documented chain is exhausted:

```
```text
Premium: claude-opus-4.6 → claude-opus-4.5 → claude-sonnet-4.6 → claude-sonnet-4.5
Standard: claude-sonnet-4.6 → gpt-5.4 → claude-sonnet-4.5 → gpt-5.3-codex → claude-sonnet-4
Fast: claude-haiku-4.5 → gpt-5.4-mini → gpt-4.1 → gpt-5-mini
```
```text

If the user explicitly selects `claude-opus-4.7`, start at the top of the
premium chain with `claude-opus-4.6` as the first fallback.
Expand Down
24 changes: 12 additions & 12 deletions .copilot/skills/mongodb-filter-pattern/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Task<Result<(IReadOnlyList<TDto> Items, long Total)>> GetAllAsync(
string? searchTerm = null,
string? authorName = null,
CancellationToken cancellationToken = default);
```
```text

**Key principles:**

Expand Down Expand Up @@ -68,7 +68,7 @@ var entities = await _collection
.Skip((page - 1) * pageSize)
.Limit(pageSize)
.ToListAsync(cancellationToken);
```
```text

**Key principles:**

Expand All @@ -93,7 +93,7 @@ RuleFor(x => x.AuthorName)
.MaximumLength(200)
.When(x => !string.IsNullOrWhiteSpace(x.AuthorName))
.WithMessage("Author name must not exceed 200 characters.");
```
```text

**Key principles:**

Expand Down Expand Up @@ -122,7 +122,7 @@ group.MapGet("", async (
var result = await handler.Handle(query);
return Results.Ok(result);
})
```
```text

**Key principles:**

Expand All @@ -146,7 +146,7 @@ if (!string.IsNullOrWhiteSpace(authorName))
}

var result = await _httpClient.GetFromJsonAsync<TResponse>(url, cancellationToken);
```
```text

**Key principles:**

Expand All @@ -162,7 +162,7 @@ Update test mocks to match new interface signature:
```csharp
_repository.GetAllAsync(1, 20, null, null, Arg.Any<CancellationToken>())
.Returns(((IReadOnlyList<TDto>)items, total));
```
```text

**Key principles:**

Expand All @@ -187,13 +187,13 @@ Combine flags: `"im"` for case-insensitive multi-line

```csharp
filterBuilder.Eq(x => x.Status, "Active")
```
```text

### Text search (case-insensitive)

```csharp
filterBuilder.Regex(x => x.Title, new BsonRegularExpression(searchTerm, "i"))
```
```text

### Multi-field search (OR)

Expand All @@ -202,13 +202,13 @@ filterBuilder.Or(
filterBuilder.Regex(x => x.Title, new BsonRegularExpression(term, "i")),
filterBuilder.Regex(x => x.Description, new BsonRegularExpression(term, "i"))
)
```
```text

### Nested field search

```csharp
filterBuilder.Regex(x => x.Author.Name, new BsonRegularExpression(name, "i"))
```
```text

### Date range

Expand All @@ -217,13 +217,13 @@ filterBuilder.And(
filterBuilder.Gte(x => x.CreatedAt, startDate),
filterBuilder.Lte(x => x.CreatedAt, endDate)
)
```
```text

### Array contains

```csharp
filterBuilder.AnyEq(x => x.Tags, tagValue)
```
```text

## Gotchas

Expand Down
6 changes: 3 additions & 3 deletions .copilot/skills/personal-squad/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ A personal squad is a user-level collection of AI agents that travel with you ac

## Directory Structure

```
```text
~/.config/squad/personal-squad/ # Linux/macOS
%APPDATA%/squad/personal-squad/ # Windows
├── agents/
Expand All @@ -15,7 +15,7 @@ A personal squad is a user-level collection of AI agents that travel with you ac
│ │ └── history.md
│ └── ...
└── config.json # Optional: personal squad config
```
```text

## How It Works

Expand Down Expand Up @@ -51,7 +51,7 @@ Optional `config.json` in the personal squad directory:
"ghostProtocol": true,
"agents": {}
}
```
```text

## Environment Variables

Expand Down
10 changes: 5 additions & 5 deletions .copilot/skills/pre-push-test-gate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ The pre-push hook (`.github/hooks/pre-push`) enforces **5 gates** that mirror CI

### Gate 3 — Unit Test Projects (2 total)

```
```text
tests/Architecture.Tests/Architecture.Tests.csproj
tests/Unit.Tests/Unit.Tests.csproj
```
```text

### Gate 4 — Integration Test Projects (1 total, Docker required)

```
```text
tests/Integration.Tests/Integration.Tests.csproj
```
```text

These use Testcontainers (MongoDb) and Aspire DCP. Docker daemon MUST be running.

Expand All @@ -53,7 +53,7 @@ The hook source is committed at `.github/hooks/pre-push`. Install once per clone
```bash
cp .github/hooks/pre-push .git/hooks/pre-push
chmod +x .git/hooks/pre-push
```
```text

> ⚠️ Do NOT create inline hook scripts. Always copy from `.github/hooks/pre-push` to get the full 5-gate version.

Expand Down
Loading
Loading