Skip to content

chore: promote dev → main (v0.8.0) - #256

Closed
mpaulosky wants to merge 6 commits into
mainfrom
dev
Closed

chore: promote dev → main (v0.8.0)#256
mpaulosky wants to merge 6 commits into
mainfrom
dev

Conversation

@mpaulosky

Copy link
Copy Markdown
Owner

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.

mpaulosky and others added 6 commits April 12, 2026 14:50
Sync dev with main: brings in commits b529234 (#246) and 1c3b613 (#247). Establishes clean baseline for dev/main branching model.
* 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>
Adopts dev/main two-branch model across all infrastructure (workflows, dependabot, pre-push, GitVersion, docs, skills). Replaces squad-promote from Node.js to .NET/GitVersion.
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>
Copilot AI review requested due to automatic review settings April 13, 2026 01:20
@mpaulosky

Copy link
Copy Markdown
Owner Author

Closing: merge conflict in playbook file. Will open a clean PR after resolving.

@mpaulosky mpaulosky closed this Apr 13, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Promotes devmain 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 dev and adjust source-branch rules.
  • Update CI/CD automation (promote, preview validation, release workflows, Dependabot, pre-push guard) for the dev/main model.
  • 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 devmain 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.slnx runs all test projects in the solution, including the integration test projects and AppHost.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 by squad-test.yml. Recommend limiting this to the unit-test projects only (or invoking/reusing squad-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` |

Copilot AI Apr 13, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
| **0** | Branch protection | Current branch is `main` |
| **0** | Branch protection | Current branch is `main` or `dev` |

Copilot uses AI. Check for mistakes.
- ❌ **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

Copilot AI Apr 13, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
-**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

Copilot uses AI. Check for mistakes.
> **`.github/prompts/build-repair.prompt.md`**
| Gate | Name | What It Does | Blocks If |
|------|------|-------------|-----------|
| **0** | Branch protection | Checks current branch | Push is to `main` |

Copilot AI Apr 13, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
| **0** | Branch protection | Checks current branch | Push is to `main` |
| **0** | Branch protection | Checks current branch | Push is to `main` or `dev` |

Copilot uses AI. Check for mistakes.
Comment on lines 25 to +53
- 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 }} ==="

Copilot AI Apr 13, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +71 to +83
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

Copilot AI Apr 13, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +34 to +53
**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
```

Copilot AI Apr 13, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
**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.

Copilot uses AI. Check for mistakes.
Comment thread .squad/.ralph-state.json
Comment on lines +2 to +4
"lastHealthCheck": "2026-04-06T13:43:08.065Z",
"agents": [],
"observations": []

Copilot AI Apr 13, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
"lastHealthCheck": "2026-04-06T13:43:08.065Z",
"agents": [],
"observations": []
"lastHealthCheck": "2026-04-06T13:43:08.065Z",
"agents": [],
"observations": []

Copilot uses AI. Check for mistakes.
Comment on lines +7 to +18
## 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

Copilot AI Apr 13, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants