If this is your first time in the repo, run bootstrap:
PowerShell:
pwsh -File scripts/bootstrap.ps1bash/zsh:
sh scripts/bootstrap.sh| Command | Scope | Use when |
|---|---|---|
dotnet build Turbo.Main/Turbo.Main.csproj |
Core emulator only | Default contributor build |
dotnet build Turbo.Cloud.sln |
Full integrated solution build (includes sample plugin project if present in solution) | One-window core+plugin workflow |
dotnet build ../turbo-sample-plugin/TurboSamplePlugin/TurboSamplePlugin.csproj |
Sample plugin only | Plugin iteration |
The repo's default quality/build contract is project-scoped to Turbo.Main/Turbo.Main.csproj.
dotnet build Turbo.Main/Turbo.Main.csproj -t:TurboCloudFastCheckThis is the default local commit gate and should stay fast.
dotnet build Turbo.Main/Turbo.Main.csproj -t:TurboCloudQualityGateThis includes formatting/style/analyzer enforcement plus build and is required before pushing.
Policy phase controls:
- Current default:
TurboAIPolicyPhase=1(warn-first rollout). - Preview strict phase locally:
dotnet build Turbo.Main/Turbo.Main.csproj -t:TurboCloudQualityGate -p:TurboAIPolicyPhase=2Canonical integrated workflow is documented in ../turbo-sample-plugin/README.md.
Run from turbo-cloud root:
- PowerShell:
pwsh -File ../turbo-sample-plugin/scripts/dev-integrated.ps1 - bash/zsh:
sh ../turbo-sample-plugin/scripts/dev-integrated.sh
Toolchain versions are pinned for consistent local and CI behavior:
- .NET SDK pin:
global.json - Local tools pin:
.config/dotnet-tools.json
When updating these, include the version bump and a passing TurboCloudQualityGate run in the same change.
Repository-managed hooks are in .githooks:
pre-commit->TurboCloudFastCheckpre-push->TurboCloudQualityGate
Enable them if needed:
git config --local core.hooksPath .githooksCanonical instructions for all AI tools:
AGENTS.md(coding constraints, review expectations, and validation contract)CONTEXT.md(architecture and dependency boundaries)docs/patterns/(golden sample implementations)
Copilot-specific adapter:
.github/copilot-instructions.md
- Include exact file paths being changed.
- Attach
AGENTS.mdandCONTEXT.md. - Reference one matching file in
docs/patterns/. - Require failure-mode handling and explicit verification commands.
Use this structure for all AI requests:
- Goal
- Target files
- Required context files
- Invariants to preserve
- Forbidden changes
- Validation commands
- Expected output format (diff summary + risk notes + command results)
Task-specific recipes are maintained in AGENTS.md:
- Add packet handler
- Change grain behavior
- Add message/composer mapping
- Refactor lookup/cache logic
- Author must disclose AI usage in the PR template.
- Author must explain complex generated logic in their own words.
- Reviewer must verify at least one edge-case or failure-path test/update.
- If architecture flow changes, update
CONTEXT.mdin the same PR. - If a recurring task pattern emerges, add/update a task recipe in
AGENTS.md. - Keep plugin mirror rules concise and aligned with core source-of-truth docs.
- Remove conflicting or duplicated guidance when contract files diverge.
appsettings.Development.json is local-only and must not be committed.
Recommended flow:
- Keep shared defaults in
appsettings.json. - Copy to
appsettings.Development.jsonif missing. - Put machine-specific settings in
appsettings.Development.json.
PowerShell:
$env:DOTNET_ENVIRONMENT="Development"; dotnet run --project Turbo.Main/Turbo.Main.csprojbash/zsh:
DOTNET_ENVIRONMENT=Development dotnet run --project Turbo.Main/Turbo.Main.csprojIf you get Unable to connect to any of the specified MySQL hosts:
- Verify
Turbo:Database:ConnectionStringinappsettings.Development.json. - Verify MySQL is listening on that host and port.
- Verify no
TURBO__...environment variable overrides the connection string.
If dotnet build Turbo.Cloud.sln fails due to plugin state but core work is unaffected, fall back to:
dotnet build Turbo.Main/Turbo.Main.csprojFor grain mental model, snapshots guidance, and session/presence cleanup test checklist, see docs/orleans.md.