Skip to content

chore(board): harden board automation reliability\n\nCloses #215\n\nC… - #217

Merged
mpaulosky merged 1 commit into
devfrom
squad/215-board-automation-reliability
Apr 30, 2026
Merged

chore(board): harden board automation reliability\n\nCloses #215\n\nC…#217
mpaulosky merged 1 commit into
devfrom
squad/215-board-automation-reliability

Conversation

@mpaulosky

Copy link
Copy Markdown
Owner

…o-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Summary

Closes #

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ Feature (non-breaking change that adds functionality)
  • ♻️ Refactor (no behavior change, code cleanup/restructure)
  • 🧪 Tests (new or updated tests only)
  • 📝 Docs (README, XML docs, comments)
  • ⚙️ Infra/CI (GitHub Actions, Aspire, NuGet, deployment)
  • 🔒 Security (auth, permissions, secrets, headers)
  • 💥 Breaking change (existing behavior changes)

Domain Affected

  • 🏗️ Architecture / domain logic / CQRS → Aragorn required
  • 🔧 Backend (handlers, repositories, API endpoints, MediatR) → Sam required
  • ⚛️ Frontend (Blazor components, Razor pages, CSS, JS) → Legolas required
  • 🧪 Unit / bUnit / integration tests → Gimli required
  • 🧪 E2E / Playwright / Aspire integration tests → Pippin required
  • ⚙️ CI/CD / GitHub Actions / NuGet / Aspire AppHost → Boromir required
  • 🔒 Auth0 / authorization / security-relevant changes → Gandalf required
  • 📝 Docs / README / XML docs → Frodo required

Self-Review Checklist

Code Quality

  • I ran dotnet build MyBlog.slnx --configuration Release — 0 errors, 0 warnings
  • I ran dotnet test MyBlog.slnx --configuration Release --no-build — all pass
  • No TODO/FIXME left unless tracked in a follow-up issue (link it)
  • No secrets, API keys, or credentials committed

Architecture

  • New handlers follow the Command/Query/Handler/Validator naming conventions
  • New handlers are sealed
  • Domain layer has no references to Web or Persistence.* projects
  • Result<T> / ResultErrorCode used for expected failures (no exception-driven control flow)
  • DTOs are records in Domain.DTOs; Models are in Domain.Models
  • No DTO types embedded in Model classes

Tests

  • New code has corresponding unit tests
  • Integration tests use domain-specific collections ([Collection("XxxIntegration")])
  • No test compares two IssueDto.Empty / CommentDto.Empty instances directly

Security (check if security-relevant)

  • New endpoints have appropriate RequireAuthorization / policy applied
  • No MarkupString used with user-supplied content
  • No user input reflected in MongoDB queries without sanitization

Merge Readiness

  • Branch is up to date with main (no merge conflicts)
  • CI checks are green (do not request review while checks are pending/failing)
  • PR description is complete — reviewers should not have to ask what this does

Screenshots / Evidence

Notes for Reviewers

…o-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 30, 2026 21:52
@github-actions

Copy link
Copy Markdown
Contributor

🏗️ PR Added to Squad Triage Queue

This PR has been labeled with squad and added to the triage queue.

Next steps:

  • The squad Lead will review and assign to an appropriate team member
  • A squad:member label will be added after triage

If you know which squad member should handle this, you can add the appropriate squad:member label yourself.

@github-actions github-actions Bot added the squad Squad triage inbox — Lead will assign to a member label Apr 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Test Results Summary

273 tests  ±0   273 ✅ ±0   16s ⏱️ -1s
  6 suites ±0     0 💤 ±0 
  6 files   ±0     0 ❌ ±0 

Results for commit 3be3544. ± Comparison against base commit 02cf370.

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

This PR hardens the GitHub Project (board) automation by expanding PR lifecycle handling, tightening which issues get auto-added to the delivery board, and adding an audit workflow to detect drift.

Changes:

  • Expand board automation to react to more PR state transitions (draft ↔ ready, reopen, close-without-merge) and to promote DoneReleased on devmain release merges.
  • Add a scheduled/manual “Project Board Audit” workflow to flag status drift and PR cards on an issue-centric board.
  • Update sprint planning docs to reflect new automation behavior; prevent duplicate Ralph milestone review issues; remove the workflow that added PR cards to the project.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
.squad/playbooks/sprint-planning.md Updates sprint ceremony guidance to match the new automation (auto-add issues, PR-driven transitions, release promotion).
.github/workflows/project-board-automation.yml Broadens PR event coverage and centralizes logic for moving linked issues and promoting DoneReleased on release PR merge.
.github/workflows/project-board-audit.yml Adds a scheduled/manual audit to detect board drift and PR cards on the delivery board.
.github/workflows/milestone-blog.yml Avoids creating duplicate Ralph “milestone review” issues by checking for an existing one first.
.github/workflows/add-prs-to-project.yml Removes PR-card auto-add workflow (aligns with issue-centric delivery board).
.github/workflows/add-issues-to-project.yml Narrows auto-add to sprint-stamped delivery issues (title prefix + milestone present).

if: contains(github.event.issue.labels.*.name, 'squad')
# Only add sprint-stamped delivery issues.
if: >
contains(github.event.issue.labels.*.name, 'squad') &&

Copilot AI Apr 30, 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 only checks for an exact squad label (contains(..., 'squad')). Issues that are created/reopened with a member label like squad:sam (the repo’s common convention) won’t be added to the project even if they’re sprint-stamped. Consider updating the condition to treat squad OR any label that starts with squad: as eligible.

Suggested change
contains(github.event.issue.labels.*.name, 'squad') &&
(
contains(github.event.issue.labels.*.name, 'squad') ||
contains(join(github.event.issue.labels.*.name, ','), 'squad:')
) &&

Copilot uses AI. Check for mistakes.
Comment on lines 91 to +96
}
}
}
`, { nodeId: issueNodeId });
`, { nodeId: issue.node_id });

const projectItem = projectQuery.node?.projectItems?.nodes?.find(
return projectQuery.node?.projectItems?.nodes?.find(

Copilot AI Apr 30, 2026

Copy link

Choose a reason for hiding this comment

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

This query only requests projectItems(first: 20), which can miss the MyBlog project item if an issue is associated with many projects. That would incorrectly treat the issue as “not on the board” and skip the status update. Consider increasing the page size and/or adding pagination for projectItems to make the automation more reliable.

Copilot uses AI. Check for mistakes.
@mpaulosky
mpaulosky merged commit cf0f16b into dev Apr 30, 2026
39 checks passed
@mpaulosky
mpaulosky deleted the squad/215-board-automation-reliability branch April 30, 2026 22:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

squad Squad triage inbox — Lead will assign to a member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants