Conversation
* chore: Update MCP server configurations and squad export (#246) * chore: merge release-process skill review decisions, update agent histories, archive aged decisions - Merged three inbox decision entries (Aragorn/Boromir/Frodo) into decisions.md - Updated agent history files with 2026-04-12 team sync learnings - Archived pre-April-1 decisions to decisions-archive.md for operational clarity - Released context by condensing aged decision records Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * .squad: Scribe logs for Frodo release-process legacy stub Session: 2026-04-12T19:57:04Z Tasks completed: 1. Orchestration log: frodo agent release-process deprecation task 2. Session log: release-skill-legacy-stub work summary 3. Decision inbox merged: frodo-release-process-legacy-stub.md → decisions.md 4. Frodo history.md updated: Added legacy stub deprecation entry 5. Inbox file deleted after merge Outputs: - .squad/orchestration-log/2026-04-12T19-57-04Z-frodo.md (new) - .squad/log/2026-04-12T19-57-04Z-release-skill-legacy-stub.md (new) - .squad/decisions.md (appended, 92896 bytes) - .squad/agents/frodo/history.md (updated with team context) No archival needed (92896 bytes < 20KB threshold would trigger archive, but this represents 2026-04 additions; all old decisions within 30d window). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * .squad: History file summarization (aragorn, frodo, legolas, pippin) Task 7: Summarized old entries (>30d) to '## Core Context' section. Files: - aragorn: 29KB → 21KB (kept March 28+ recent entries) - frodo: 16KB → 6KB (kept April 12+ recent entries) - legolas: 14KB → 4KB (consolidated CSS, styling, theme learnings) - pippin: 12KB → 4KB (consolidated Aspire, Playwright, team rule learnings) All summarized files now <12KB threshold except Aragorn (21KB still acceptable with Core Context structure). Maintains full context while improving readability. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update MCP server configurations and squad export - Update .copilot/mcp-config.json with enhanced MCP server definitions - Add .mcp.json for MCP client integration (untracked) - Update squad-export.json with latest team metadata Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: update frodo agent history --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: scribe log and decisions export (#247) * scribe: Log PR flow and merge decisions inbox - Added orchestration log for Boromir PR creation/merge attempt (PR #246) - Added session log for PR workflow (squad/scribe-log-mcp-export) - Merged 3 decision inbox files into decisions.md: * Boromir: Branch strategy (dev/main model) feasibility audit * Boromir: MCP config commit safety assessment * Frodo: Documentation audit for dev/main branch model - Cleared .squad/decisions/inbox/ (all inbox files processed) This completes the spawn manifest processing for Boromir's two-pass PR flow attempt. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * scribe: Add Aragorn adoption decision to decisions.md - Merged Aragorn's comprehensive two-branch strategy assessment - Includes GitVersion.yml configuration recommendations - Provides phased implementation roadmap (Phase 1 infrastructure, Phase 2 docs) - Clearcut approval gate: requires Matthew Paulosky sign-off - All decision inbox files now processed and cleared Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add pre-push and merge playbooks, fix process documentation - New .squad/playbooks/pre-push-process.md (5-gate walkthrough) - New .squad/playbooks/pr-merge-process.md (8-step merge lifecycle) - Fix release-issuetracker.md (NBGV→GitVersion, two-branch model) - Rewrite pre-push-test-gate skill (all 5 gates, 10 test projects) - Flag 3 Squad CLI skills as non-applicable to IssueTrackerApp - Update routing.md with playbook-aware routing - Add playbook cross-references to ceremonies.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"
Set allowPrerelease to false to use stable .NET SDK only.
…255) v3.1.11 and v3 tags only support GitVersion <6.1.0, but 6.x now resolves to 6.7.0 which is out of range. Upgrade all four release workflows to gittools/actions@v4.5.0. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Closing: merge conflict in playbook file. Will open a clean PR after resolving. |
There was a problem hiding this comment.
Pull request overview
Promotes dev → main for the v0.8.0 release while finalizing the repo’s move to a two-branch development model (dev for active development, main for releases), updating versioning/workflows and aligning documentation/playbooks.
Changes:
- Update GitVersion branching config to explicitly support
devand adjust source-branch rules. - Update CI/CD automation (promote, preview validation, release workflows, Dependabot, pre-push guard) for the
dev/mainmodel. - Add/refresh Squad playbooks/skills and documentation to reflect the new workflow and MCP configuration updates.
Reviewed changes
Copilot reviewed 38 out of 39 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| global.json | Adjust .NET SDK roll-forward/prerelease settings and formatting. |
| GitVersion.yml | Add dev branch configuration and update branch source rules. |
| docs/New Work process.md | Update workflow instructions to target dev instead of main. |
| CONTRIBUTING.md | Document two-branch model and update contribution flow to target dev. |
| AGENTS.md | Add branching model note to developer workflow guidance. |
| .squad/skills/release-process/SKILL.md | Add deprecated legacy stub pointing to new resources. |
| .squad/skills/release-process-base/SKILL.md | Add generic, reusable release-process skill documentation. |
| .squad/routing.md | Reformat routing table and switch to playbook-aware routing guidance. |
| .squad/playbooks/release-issuetracker.md | Add IssueTrackerApp-specific release playbook for the dev/main model. |
| .squad/playbooks/pre-push-process.md | Add step-by-step pre-push gate execution playbook. |
| .squad/playbooks/pr-merge-process.md | Add end-to-end PR review/merge lifecycle playbook. |
| .squad/decisions.md | Archive older decisions and append new release/branching decisions. |
| .squad/decisions-archive.md | Expand archived decisions content (moved from decisions.md). |
| .squad/ceremonies.md | Improve markdown formatting and link ceremonies to new playbooks. |
| .squad/agents/pippin/history.md | Condense older entries into “Core Context” summary. |
| .squad/agents/legolas/history.md | Restructure/summarize history and retain key conventions. |
| .squad/agents/frodo/history.md | Restructure/summarize history and record recent audits/decisions. |
| .squad/agents/boromir/history.md | Add detailed release-process and dev/main feasibility notes. |
| .squad/agents/aragorn/history.md | Condense history and add release-process abstraction notes. |
| .squad/.ralph-state.json | Add Ralph state tracking JSON file. |
| .mcp.json | Add MCP client configuration (server definitions + input). |
| .github/workflows/squad-test.yml | Trigger tests on dev pushes in addition to main. |
| .github/workflows/squad-release.yml | Upgrade GitVersion action usage to v4.5.0. |
| .github/workflows/squad-promote.yml | Rework promotion to open PR from dev → main and compute version with GitVersion. |
| .github/workflows/squad-preview.yml | Change preview validation to run on dev and add build/test steps. |
| .github/workflows/squad-milestone-release.yml | Upgrade GitVersion action usage to v4.5.0. |
| .github/workflows/squad-issue-assign.yml | Hardcode agent base branch to dev for coding-agent assignment. |
| .github/workflows/squad-insider-release.yml | Upgrade GitVersion action usage to v4.5.0. |
| .github/workflows/squad-heartbeat.yml | Hardcode agent base branch to dev in heartbeat assignment logic. |
| .github/hooks/pre-push | Gate 0 now blocks direct pushes to both main and dev. |
| .github/dependabot.yml | Target Dependabot PRs to dev and fix nuget/dotnet-sdk directories. |
| .copilot/skills/squad-conventions/SKILL.md | Mark as “Squad CLI Only” (not applicable to IssueTrackerApp). |
| .copilot/skills/release-process/SKILL.md | Mark as “Squad CLI Only” and point to IssueTrackerApp playbook. |
| .copilot/skills/pre-push-test-gate/SKILL.md | Update skill to reflect the 5-gate hook and link playbook. |
| .copilot/skills/merged-pr-guard/SKILL.md | Update guidance to sync to dev (active development branch). |
| .copilot/skills/git-workflow/SKILL.md | Update to two-branch model and .NET-centric local testing guidance. |
| .copilot/skills/ci-validation-gates/SKILL.md | Mark as “Squad CLI Only” and point to IssueTrackerApp sources. |
| .copilot/mcp-config.json | Update MCP server configuration set (remove docker-based GitHub server, add new servers/inputs). |
Comments suppressed due to low confidence (1)
.github/workflows/squad-preview.yml:30
dotnet test IssueTrackerApp.slnxruns all test projects in the solution, including the integration test projects andAppHost.Tests(Docker/Testcontainers/Aspire). This workflow doesn’t set up the needed environment (Docker readiness, required secrets/parameters, etc.) and it duplicates the dev push coverage already provided bysquad-test.yml. Recommend limiting this to the unit-test projects only (or invoking/reusingsquad-test.yml) to avoid flaky/slow failures on every dev push.
- name: Restore
run: dotnet restore IssueTrackerApp.slnx
- name: Build
run: dotnet build IssueTrackerApp.slnx --configuration Release --no-restore -p:TreatWarningsAsErrors=true
- name: Run unit tests
run: dotnet test IssueTrackerApp.slnx --configuration Release --no-build --verbosity normal
|
|
||
| | Gate | What | Blocks Push If | | ||
| | ----- | ---------------------- | ------------------------------------------------------------------------ | | ||
| | **0** | Branch protection | Current branch is `main` | |
There was a problem hiding this comment.
Gate 0 in this table says pushes are blocked only when the current branch is main, but the updated pre-push hook blocks both main and dev. Update the Gate 0 description here to match the actual hook behavior so the playbook doesn’t mislead developers.
| | **0** | Branch protection | Current branch is `main` | | |
| | **0** | Branch protection | Current branch is `main` or `dev` | |
| - ❌ **Running Debug build only** — CI uses Release; Debug hides missing files | ||
| - ❌ **Pushing without Docker** — Gate 4 will block; start Docker first | ||
| - ❌ **Ignoring untracked files** — They're invisible to CI and will cause failures | ||
| - ❌ **Committing to `main` directly** — Gate 0 blocks this; use `squad/{issue}-{slug}` branches |
There was a problem hiding this comment.
The Anti-Patterns section says Gate 0 blocks committing directly to main, but the hook now blocks direct pushes to both main and dev. Update this bullet to include dev so the guidance stays accurate.
| - ❌ **Committing to `main` directly** — Gate 0 blocks this; use `squad/{issue}-{slug}` branches | |
| - ❌ **Pushing directly to `main` or `dev`** — Gate 0 blocks this; use `squad/{issue}-{slug}` branches |
| > **`.github/prompts/build-repair.prompt.md`** | ||
| | Gate | Name | What It Does | Blocks If | | ||
| |------|------|-------------|-----------| | ||
| | **0** | Branch protection | Checks current branch | Push is to `main` | |
There was a problem hiding this comment.
This Gate 0 row still says pushes are blocked only when pushing to main, but the hook was updated to block direct pushes to both main and dev. Update the table to reflect both protected branches.
| | **0** | Branch protection | Checks current branch | Push is to `main` | | |
| | **0** | Branch protection | Checks current branch | Push is to `main` or `dev` | |
| - uses: actions/checkout@v6 | ||
| with: | ||
| fetch-depth: 0 | ||
| ref: dev | ||
| token: ${{ secrets.GITHUB_TOKEN }} | ||
|
|
||
| - name: Configure git | ||
| run: | | ||
| git config user.name "github-actions[bot]" | ||
| git config user.email "github-actions[bot]@users.noreply.github.com" | ||
| - name: Setup .NET | ||
| uses: actions/setup-dotnet@v4 | ||
| with: | ||
| global-json-file: global.json | ||
|
|
||
| - name: Fetch all branches | ||
| run: git fetch --all | ||
| - name: Install GitVersion | ||
| uses: gittools/actions/gitversion/setup@v4.5.0 | ||
| with: | ||
| versionSpec: '6.x' | ||
|
|
||
| - name: Show current state (dry run info) | ||
| - name: Determine version | ||
| id: gitversion | ||
| uses: gittools/actions/gitversion/execute@v4.5.0 | ||
| with: | ||
| useConfigFile: true | ||
|
|
||
| - name: Show current state | ||
| run: | | ||
| echo "=== dev HEAD ===" && git log origin/dev -1 --oneline | ||
| echo "=== preview HEAD ===" && git log origin/preview -1 --oneline | ||
| echo "=== Files that would be stripped ===" | ||
| git diff origin/preview..origin/dev --name-only | grep -E "^(\.(ai-team|squad|ai-team-templates)|team-docs/|docs/proposals/)" || echo "(none)" | ||
| echo "=== main HEAD ===" && git log origin/main -1 --oneline | ||
| echo "=== Commits dev has ahead of main ===" | ||
| git log origin/main..origin/dev --oneline | ||
| echo "=== GitVersion: ${{ steps.gitversion.outputs.semVer }} ===" |
There was a problem hiding this comment.
actions/checkout is pinned to ref: dev, but later steps reference origin/main (e.g., git log origin/main and git rev-list origin/main..origin/dev). With a ref-specific checkout, origin/main may not be fetched, which would cause these commands to fail. Fetch main explicitly (or remove ref: dev and fetch both branches) before running the comparisons.
| VERSION="${{ steps.gitversion.outputs.semVer }}" | ||
|
|
||
| preview-to-main: | ||
| name: Promote preview → main (release) | ||
| needs: dev-to-preview | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| with: | ||
| fetch-depth: 0 | ||
| token: ${{ secrets.GITHUB_TOKEN }} | ||
| # Check if a promote PR already exists | ||
| EXISTING=$(gh pr list --base main --head dev --state open --json number --jq '.[0].number' || true) | ||
| if [ -n "$EXISTING" ]; then | ||
| echo "ℹ️ Promote PR #$EXISTING already exists — updating description" | ||
| gh pr edit "$EXISTING" \ | ||
| --title "chore: promote dev → main (v${VERSION})" \ | ||
| --body "## Release Promotion | ||
|
|
||
| - name: Configure git | ||
| run: | | ||
| git config user.name "github-actions[bot]" | ||
| git config user.email "github-actions[bot]@users.noreply.github.com" | ||
| Merging \`dev\` into \`main\` for release **v${VERSION}**. | ||
|
|
||
| - name: Fetch all branches | ||
| run: git fetch --all | ||
| ### Commits included |
There was a problem hiding this comment.
The workflow uses steps.gitversion.outputs.semVer to label the promotion PR as v${VERSION}. On the dev branch, semVer will typically include the prerelease label (e.g., 0.8.0-alpha.*), but the promoted release on main is expected to be a stable version (as in the PR title v0.8.0). Consider using majorMinorPatch (or another non-prerelease output) for the PR title/body to avoid advertising an alpha version for the mainline release.
| **GitVersion.yml reference** (actual repo config): | ||
|
|
||
| ```yaml | ||
| mode: ContinuousDeployment | ||
| tag-prefix: '[vV]?' | ||
| branches: | ||
| main: | ||
| regex: ^main$ | ||
| tag: '' | ||
| increment: Minor | ||
| develop: | ||
| regex: ^dev$ | ||
| tag: preview | ||
| increment: Minor | ||
| feature: | ||
| regex: ^(feature|squad)[/-] | ||
| tag: alpha.{BranchName} | ||
| increment: Inherit | ||
| ``` | ||
|
|
There was a problem hiding this comment.
This section says it’s an "actual repo config" excerpt of GitVersion.yml, but it doesn’t match the current GitVersion.yml in this PR (e.g., mode, tag-prefix, branch names/labels, and increments). Because it’s presented as authoritative, it’s likely to mislead release operators—please update the snippet to match the real file or remove it and link directly to GitVersion.yml.
| **GitVersion.yml reference** (actual repo config): | |
| ```yaml | |
| mode: ContinuousDeployment | |
| tag-prefix: '[vV]?' | |
| branches: | |
| main: | |
| regex: ^main$ | |
| tag: '' | |
| increment: Minor | |
| develop: | |
| regex: ^dev$ | |
| tag: preview | |
| increment: Minor | |
| feature: | |
| regex: ^(feature|squad)[/-] | |
| tag: alpha.{BranchName} | |
| increment: Inherit | |
| ``` | |
| **GitVersion.yml reference:** Use the repository root `GitVersion.yml` as the | |
| authoritative source of truth for versioning behavior. Do not rely on an | |
| embedded excerpt in this playbook; review the current file directly before | |
| performing release or promotion operations. |
| "lastHealthCheck": "2026-04-06T13:43:08.065Z", | ||
| "agents": [], | ||
| "observations": [] |
There was a problem hiding this comment.
This new JSON file is indented with spaces, but .editorconfig specifies tabs for *.json files. Reformat with tabs to match repository formatting rules and avoid churn in future diffs.
| "lastHealthCheck": "2026-04-06T13:43:08.065Z", | |
| "agents": [], | |
| "observations": [] | |
| "lastHealthCheck": "2026-04-06T13:43:08.065Z", | |
| "agents": [], | |
| "observations": [] |
| ## Decisions | ||
|
|
||
| ### MongoDB Connection String Fallback (2025-03-21) | ||
| ### Process & Planning | ||
| # IssueTrackerApp Decisions | ||
|
|
||
| **Author:** Sam (Backend Developer) | ||
| **Status:** Implemented | ||
| This file records team decisions that affect architecture, scope, and process. | ||
|
|
||
| The Web project crashed at startup with `System.TimeoutException` because the EF Core MongoDB provider reads `MongoDB:ConnectionString` (hardcoded to `mongodb://localhost:27017` in appsettings.Development.json), while the actual Atlas connection string lives in `ConnectionStrings:mongodb` (user secrets / Aspire injection). These two config paths never intersect. | ||
| --- | ||
|
|
||
| **Decision:** Added fallback logic in `AddMongoDbPersistence` that bridges the gap: | ||
| ## Decisions | ||
|
|
||
| 1. Before binding `MongoDbSettings`, check if `MongoDB:ConnectionString` is empty or equals `mongodb://localhost:27017` | ||
| 2. If so, read `ConnectionStrings:mongodb` and overlay it into the MongoDB config section | ||
| 3. Changed `appsettings.Development.json` to use empty string instead of the localhost default | ||
| ### Process & Planning |
There was a problem hiding this comment.
The top of this archive file appears to have duplicated headings/boilerplate (e.g., # IssueTrackerApp Decisions and ## Decisions / ### Process & Planning repeated starting again at line 10). This looks like an accidental paste and makes the document structure confusing; consider removing the duplicate block so the archive has a single, clean header section.
Release Promotion
Version: 0.8.0
Source: dev → main
Changes
82b2595 fix: upgrade gittools/actions to v4.5.0 for GitVersion 6.7.0 compat (#255)
e4a7189 chore: disable prerelease SDK in global.json (#254)
32cfc43 Add pre-push and merge playbooks, fix process documentation (#251)
4587eae chore: Update MCP server configurations and squad export (#246) (#250)
dbe3d11 chore: Sync dev with main (2 missing commits — #246, #247) (#249)
28d5a4f chore: Sync dev with main (2 missing commits) (#248)
After merging, run squad-milestone-release to tag and publish the GitHub Release.