eng
PostSharp/Metalama engineering workflows. Use for git operations (commit, branch, PR, merge, release), TeamCity CI/CD, build diagnostics, and development utilities.
What this skill does
# PostSharp Engineering Workflows
Git workflow conventions and commands for PostSharp/Metalama repositories.
## Updating This Skill
To make permanent changes, edit the source files under `X:\src\PostSharp.Engineering.AISkills\plugins\`, then run `/eng:update-cache` to update the local cache.
## Repository Info
- **Organization**: `metalama` (GitHub) / `postsharp` (legacy)
- **Default branch**: Usually `release/YYYY.N` (e.g., `release/2025.1`)
- **Development branches**: `develop/YYYY.N` (e.g., `develop/2026.0`)
- **Development project ID**: `PVT_kwDOC7gkgc4A030b`
- **Status field ID**: `PVTSSF_lADOC7gkgc4A030bzgqb1vQ`
- **Status options**: Backlog (`f75ad846`), Planned (`08afe404`), In progress (`47fc9ee4`), In review (`4cc61d42`), Merged (`9d4ab054`), Done (`98236657`)
## Commands to use
Use the following commands or read their instructions on demand:
- `/eng:create-pr`: create (prepare) a pull request
- `/eng:fix-binlog-warnings`: analyze warnings from binlog output of `Build.ps1 build`
- `/eng:prepare-release`: on demand, when user asks to prepare release, github release, release notes. typically done after deployment
- `/eng:reflect`: self-improvement after a difficult task. you should do it automatically after a problem has been solved and you did mistakes before
- `/eng:tc-build`: schedule a teamcity (TC, CI) build
- `/eng:tc-check-build`: check the status of the last TC build
- `/eng:update-cache`: update the local plugin cache from source
## Branch Strategy
Each major version has two long-lived branches:
- `release/YYYY.N` - Updated only during deployment (GitHub default branch per version line)
- `develop/YYYY.N` - Continuous CI/CD development branch
**Workflow:**
1. `topic/YYYY.N/XXX-description` → `develop/YYYY.N` (PR)
2. `develop/YYYY.N` → `release/YYYY.N` (after successful deployment)
## Branch Naming
Pattern: `topic/YYYY.N/XXXX-short-description`
- `YYYY.N` - Version/milestone (e.g., 2026.0)
- `XXXX` - Issue number (required). If no issue, use date: `YY-MM-DD`
- `short-description` - Brief, hyphenated description
- If branch exists, add numeric suffix: `-2`
## Merge Target
For `topic/YYYY.N/*`, merge target is ALWAYS `develop/YYYY.N`. **Never use the release branch directly.**
## Commit Messages
1. Keep short (50-72 chars)
2. Include issue number: `(#XXXX)`
3. **Never sign commits** (no "Generated with Claude Code")
4. Use imperative mood: "Fix bug" not "Fixed bug"
Examples:
- `Fix cache invalidation on timeout (#1234)`
- `Add retry logic for API calls (#5678)`
## Committing Changes
**IMPORTANT RULE**: Unless the user explicitly asks you to commit, you MUST:
1. Ask the user to review the changes (they will review in their IDE)
2. Wait for explicit approval before committing
3. **Never commit autonomously** without user approval
This ensures the user maintains control over what gets committed to the repository.
## Milestone Format
Always use `YYYY.N.B-suffix` format (e.g., `2026.0.8-rc`), never `YYYY.N` alone.
Suffix conventions:
- `-preview` - Early preview releases
- `-rc` - Release candidates
- (no suffix) - Stable releases
Never assign anything to a closed milestone.
Never reopen a closed milestone.
Propose the user to create a new milestone with incremented version number.
## Build System (Build.ps1)
PostSharp.Engineering is the build orchestration SDK. Each repo is a **product** made of multiple **solutions**.
### Key Concepts
- **Product**: A repo, configured in `eng/src/Program.cs`
- **Solution**: First-level directories (e.g., `Metalama.Framework`, `Metalama.Patterns`)
- **Build.ps1**: PowerShell front-end to `eng/src`, self-generated via `Build.ps1 generate-scripts`
### Reference Types
| Scope | Reference Type | Notes |
|-------|---------------|-------|
| Within solution | `ProjectReference` | Standard .NET references |
| Between solutions | `PackageReference` | Requires `Build.ps1 build` to update packages |
| Cross-repo | `PackageReference` | Uses TeamCity artifacts by default |
### Common Commands
```powershell
# Full build - creates unique package versions, slow (~10-30 min)
Build.ps1 build
# Kill locked processes after failed build
Build.ps1 tools kill
# List cross-repo dependencies
Build.ps1 dependencies list
# Use local repo instead of TeamCity artifacts
Build.ps1 dependencies set local <product>
# Revert to TeamCity artifacts
Build.ps1 dependencies reset --all
```
### When to Use Build.ps1
- **Cross-solution changes**: When modifying code in one solution that's consumed by another
- **After pulling updates**: To ensure all inter-solution packages are current
- **Before creating PR**: To verify full build succeeds
**IMPORTANT**: `Build.ps1 build` is slow. Always ask the user before running it. For single-solution changes, prefer `dotnet build` / `dotnet test`.
### Building Quick Reference
| Scenario | Command |
|----------|---------|
| Single solution changes | `dotnet build` / `dotnet test` |
| Cross-solution changes | Ask user to run `Build.ps1 build` |
| Kill locked processes | `Build.ps1 tools kill` |
### Build Notes
- When adding package references, also add `PackageVersion` to `Directory.Packages.props`
- Two `Build.ps1 build` runs cannot run in parallel
- Don't build full solution just to run a single test - ask user first
- After `Build.ps1 build`, MSBuild binlogs are under `artifacts/logs`
### Local Dependencies
By default, cross-repo `PackageReference` dependencies resolve from TeamCity (last successful build). To use local changes:
```powershell
# In consuming repo, point to local dependency
Build.ps1 dependencies set local Metalama.Premium
# Now PackageReference resolves from local repo's Build.ps1 build output
# Requires Build.ps1 build in the dependency repo first
```
## API Notes
### Getting Node IDs
```bash
# PR node ID
gh api graphql -f query='{ repository(owner: "metalama", name: "Metalama") { pullRequest(number: 1228) { id } } }' --jq '.data.repository.pullRequest.id'
# Issue node ID
gh api graphql -f query='{ repository(owner: "metalama", name: "Metalama") { issue(number: 1226) { id } } }' --jq '.data.repository.issue.id'
```
## Breaking Changes
- **Breaking changes**: Add comment to issue describing the change, add `breaking` label
- **Not breaking**: Adding members to interfaces marked with `[InternalImplement]` (including inherited) is NOT a breaking change
## Working on GitHub Issues
When starting work on a GitHub issue:
1. **Read issue details**: Fetch full issue content from GitHub
2. **Check documentation**: Look for related conceptual docs
3. **Create branch**: `topic/YYYY.N/XXXX-short-description`
4. **Assign issue**: Assign the issue to the user in GitHub
5. **Set milestone**: Assign to the latest open milestone for the current YYYY.N version (e.g., `YYYY.N.B-maturity`)
6. **Set issue status**: Mark as "In Progress" in the Development project
7. **Track progress**: Create `<issue-number>-TODO.md` file (don't commit it)
8. **Discover bugs**: Create issues promptly when finding bugs during development
## Critical Rules
- **NEVER** run `Build.ps1 build` yourself - ask the user to run it (timeout too low, causes retries)
- **NEVER** run `Build.ps1 prepare` - it deletes all built artifacts and requires a subsequent `Build.ps1 build`
- **NEVER** clear global NuGet packages - it's never needed
- **Never sign commits** with "Generated with Claude Code" - only sign PRs, issues, and comments modestly with "— Claude for <user>"
- **Prefer `pwsh`** (PowerShell 7), never use old `cmd`
- **No hardcoded delays in tests** - use barriers, TaskCompletionSource, sync points
- **Never await without cancellation token**
- **Don't fix cosmetic warnings** (redundant usings, etc.) until finalizing stage
- **Focus on green tests first** before addressing warnings
## Writing Documentation
- Use `<see>` tags for type/member references
- Maintain consistent lexicon within class families (same suffix)
- Keep code examples short
- Cross-reference conceptualRelated in Cloud & DevOps
appbuilder-action-scaffolder
IncludedCreate, implement, deploy, and debug Adobe Runtime actions with consistent layout, validation, and error handling. Use this skill whenever the user needs to add actions to an App Builder project, understand action structure (params, response format, web/raw actions), configure actions in the manifest, use App Builder SDKs (State, Files, Events, database), deploy and invoke actions via CLI, debug action issues, or implement patterns such as webhook receivers, custom event providers, journaling consumers, large payload redirects, action sequence pipelines, and Asset Compute workers. Also trigger when users mention serverless functions in Adobe context, action logging, IMS authentication for actions, or cron-style scheduled actions.
orchestrating-datacloud
IncludedSalesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. Use this skill when the user needs a multi-step Data Cloud pipeline, cross-phase troubleshooting, or data space and data kit management. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase sf data360 workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching phase-specific skill), the task is STDM/session tracing/parquet telemetry (use observing-agentforce), standard CRM SOQL (use querying-soql), or Apex implementation (use generating-apex).
github-project-automation
IncludedAutomate GitHub repository setup with CI/CD workflows, issue templates, Dependabot, and CodeQL security scanning. Includes 12 production-tested workflows and prevents 18 errors: YAML syntax, action pinning, and configuration. Use when: setting up GitHub Actions CI/CD, creating issue/PR templates, enabling Dependabot or CodeQL scanning, deploying to Cloudflare Workers, implementing matrix testing, or troubleshooting YAML indentation, action version pinning, secrets syntax, runner versions, or CodeQL configuration. Keywords: github actions, github workflow, ci/cd, issue templates, pull request templates, dependabot, codeql, security scanning, yaml syntax, github automation, repository setup, workflow templates, github actions matrix, secrets management, branch protection, codeowners, github projects, continuous integration, continuous deployment, workflow syntax error, action version pinning, runner version, github context, yaml indentation error
sf-datacloud
IncludedSalesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase `sf data360` workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching sf-datacloud-* skill), the task is STDM/session tracing/parquet telemetry (use sf-ai-agentforce-observability), standard CRM SOQL (use sf-soql), or Apex implementation (use sf-apex).
fabric-cli
IncludedUse this skill for Fabric.so CLI workflows with the `fabric` terminal command: diagnose/install/login, search or browse a Fabric library, save notes/links/files, create folders, ask the Fabric AI assistant, manage tasks/workspaces, generate shell completion, check subscription usage, produce JSON output, and use Fabric as persistent agent memory. Do not use for Microsoft Fabric/Azure/Power BI `fab`, Daniel Miessler's Fabric framework, Python Fabric SSH, Fabric.js, or textile/fashion fabric.
lark
IncludedLark/Feishu CLI skills: lark-cli operations for docs, markdown, sheets, base, calendar, im, mail, task, okr, drive, wiki, slides, whiteboard, apps, approval, attendance, contact, vc, minutes, event. Use when the user needs to operate Lark/Feishu resources via lark-cli, send messages, manage documents, spreadsheets, calendars, tasks, OKRs, deploy web pages, or any Feishu/Lark workspace operations.