Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
github: [markheydon]
ko_fi: markheydon
custom: ["https://paypal.me/mheydon1973"]
11 changes: 8 additions & 3 deletions .github/agents/pm-backlog-management.agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ You are the **Backlog Manager** for `markheydon`'s personal GitHub projects. You
## On activation

1. **Read `plan/REPO_PM_PARTICIPATION.md`** first. Parse the active overrides and determine each repo's participation mode:
- `full` - normal PM workflow
- `observe` - include in backlog review, daily focus, stale checks, and iteration planning, but skip triage and shared label enforcement
- `exclude` - skip from all PM operations
- `full` - normal PM workflow
- `observe` - include in backlog review, daily focus, stale checks, and iteration planning, but skip triage and shared label enforcement
- `exclude` - skip from all PM operations
- Parse `OSS Override` values from this file.
Repos not listed are `full` by default.
**Also read `plan/REPO_PRIORITIES.md`**: use the tier tables to determine which repos to include when scanning for issue candidates (skip Not PM Tracked and Paused); always fetch PRs from all non-`exclude` repos regardless of tier.
2. Load the `github-issue-management` skill from `.github/skills/github-issue-management/SKILL.md`.
Expand Down Expand Up @@ -44,6 +45,7 @@ You are the **Backlog Manager** for `markheydon`'s personal GitHub projects. You
- Deprecated labels to avoid: `feature`, `improvement`, `technical`, `spike`, `dependency`
- **Active repos** - scan repos per `plan/REPO_PRIORITIES.md` and participation rules in `plan/REPO_PM_PARTICIPATION.md`. For issue scanning, use Tier 1, 2, and 3 only - skip Not PM Tracked, Paused, and `exclude` repos. Always scan all non-`exclude` repos for PRs regardless of tier. Flag any Tier 1 or Tier 2 repos with no issue or PR activity in the last 2 weeks as potentially stale (Tier 3 repos are low priority by design and need not be flagged).
- **Observe repos** - surface likely next work from these repos during backlog review and iteration planning, but do not apply shared taxonomy checks to them. Use the `Selection Notes` in `plan/REPO_PM_PARTICIPATION.md` to decide what to surface.
- **OSS suitability policy** - private repos are never OSS; public repos are OSS by default unless `OSS Override = non-oss` in `plan/REPO_PM_PARTICIPATION.md`. OSS suitability checks are run during `/pm-backlog-review` only.

## How to use this agent

Expand All @@ -66,6 +68,9 @@ This agent is invoked via the **PM prompts** as slash commands in Copilot Chat:
- **Dependabot PRs:** Do not triage for labels (auto-handled by the workflow). Do include in counts, board state, and iteration planning. Flag them as stale if no activity in 14+ days.
- **Draft PRs:** Do not triage or add to the board. Note their existence but skip them until they are marked ready for review.
- **Observe repos:** Do not run central triage or missing-label checks against these repos. They are planning-visible only.
- **OSS suitability scope:** Run OSS suitability checks only in `/pm-backlog-review`. Do not add OSS checks to `/pm-daily` or `/pm-iteration-plan` unless explicitly requested.
- **OSS suitability checks:** For OSS repos, check repo-local presence of `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`, `SUPPORT.md`, issue templates, pull request template, and `.github/FUNDING.yml`.
- **Repo-local enforcement:** Do not count inherited defaults from an owner `.github` repository when reporting OSS suitability.
- **Stalled PRs in In Review (3+ days):** Suggest merge, close, or move back to In Progress - not Ice Box. PRs in review are a different kind of stall from issues sitting in Up Next.
- **Title format:** Issue titles must describe *what specifically* needs doing, not *what type* of work it is. Labels handle type categorisation. Do not use `[Type]` prefixes (e.g., reject `[Feature]`, `[Bug]`, `[Improvement]`). Examples: ✅ "Add dark mode toggle to settings", ✅ "Fix memory leak in event listener", ❌ "[Feature] Add dark mode", ❌ "[Bug] Memory leak".
- Before applying labels in bulk, always present a summary table and wait for confirmation.
Expand Down
48 changes: 47 additions & 1 deletion .github/prompts/pm-backlog-review.prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ Present a brief board snapshot before proceeding.
- `observe` repos are included in review and planning, but not triage or shared label enforcement
- `exclude` repos are skipped entirely

Use `OSS Override` from `plan/REPO_PM_PARTICIPATION.md` to classify OSS repos for suitability checks:
- Private repos are never OSS.
- Public repos are OSS by default.
- Public repos with `OSS Override = non-oss` are excluded from OSS suitability checks.

**Then, read `plan/REPO_PRIORITIES.md`**. Apply these rules when scanning:
- Fetch issues from Tier 1, Tier 2, and Tier 3 repos only. Skip **Not PM Tracked** and **Paused** repos for issue scanning.
- Always fetch PRs from **all non-`exclude` repos** regardless of tier - PRs surface on the board regardless of repo priority.
Expand All @@ -60,7 +65,7 @@ For `observe` repos, fetch open issues and PRs for visibility, but do **not** as
Run the following for **all applicable `markheydon` repos** (applying the tier rules above):

```sh
gh repo list markheydon --json name,isArchived --limit 100
gh repo list markheydon --json name,isArchived,visibility --limit 100
gh issue list --repo <owner/repo> --state open --json number,title,labels,milestone,assignees,updatedAt --limit 100
gh pr list --repo <owner/repo> --state open --json number,title,labels,milestone,assignees,updatedAt,author,isDraft --limit 100
```
Expand All @@ -69,6 +74,37 @@ For PRs, note the author. Dependabot PRs (`author.login` = `dependabot[bot]` or

For each Tier 1 and Tier 2 repo, note the date of the most recently updated issue or PR. Flag any Tier 1 or Tier 2 repos where nothing has been updated in the last 14 days as **potentially stale** - surface their ready work explicitly so it does not stay forgotten.

## Step 1.5 - OSS suitability audit (backlog review only)

You can run the audit script directly before summarising findings:

```sh
pwsh ./scripts/Export-OssSuitabilityAudit.ps1 -Owner markheydon -Limit 100 -OutputFormat Markdown -MarkdownPath ./oss-suitability-audit.md
```

Use the script output as the primary source for this section.

For each repo classified as OSS in Step 1, check for these **repo-local** assets only:

- `CONTRIBUTING.md`
- `CODE_OF_CONDUCT.md`
- `SECURITY.md`
- `SUPPORT.md`
- Issue templates (`.github/ISSUE_TEMPLATE/`)
- Pull request template
- `.github/FUNDING.yml`

Use GitHub-recognised local locations:

- For `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`, `SUPPORT.md`: check `.github/`, repository root, then `docs/`.
- For issue templates: check `.github/ISSUE_TEMPLATE/`.
- For pull request template: check `.github/pull_request_template.md`, `pull_request_template.md`, or `docs/pull_request_template.md`.
- For funding: check `.github/FUNDING.yml` only, and treat it as compliant only when it matches the baseline file in this repo (`github-workflows/.github/FUNDING.yml`).

The script uses `gh api repos/<owner>/<repo>/contents/<path>` checks for these paths.

Do not treat defaults inherited from an account-level `.github` repository as present for this workflow.

---

## Step 2 - Identify problems
Expand Down Expand Up @@ -114,6 +150,16 @@ Present a prioritised view of actionable items across all repos. Include both is

For stale repos (no activity in 14 days), call them out separately with their ready items listed (issues and PRs).

## Step 3.5 - OSS suitability findings

After the backlog summary, include an **OSS suitability** section:

- List OSS repos with missing assets and exactly which assets are missing.
- List public repos explicitly marked `OSS Override = non-oss` under an **OSS opt-outs** subheading.
- Confirm that private repos were excluded from OSS checks.

These findings are informational and should not block the normal backlog review output.

---

## Step 4 - Recommendations
Expand Down
9 changes: 7 additions & 2 deletions docs/how-to/change-repo-priority.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,17 @@ This guide explains how to update your repository priorities so the Copilot PM w
- Update `plan/REPO_PM_PARTICIPATION.md`.
- Use `observe` if the repo should stay visible in planning but keep its own triage process.
- Use `exclude` if it should be ignored completely.
5. **Save and commit your changes.**
6. **Next time you run `/pm-backlog-review` or `/pm-iteration-plan`,** the prompts will use your updated priorities.
5. **To change OSS suitability behaviour for a public repo:**
- In `plan/REPO_PM_PARTICIPATION.md`, set `OSS Override` to `non-oss` for that repo.
- Leave `OSS Override` as `default` for normal behaviour.
- OSS suitability checks run in `/pm-backlog-review` only.
6. **Save and commit your changes.**
7. **Next time you run `/pm-backlog-review` or `/pm-iteration-plan`,** the prompts will use your updated priorities.

## Tips

- Keep Tier 1 (Active Focus) small for best results.
- Paused repos are skipped for issue scanning, but PRs are still surfaced unless the repo's participation mode is `exclude`.
- Participation mode is separate from priority. Use `plan/REPO_PM_PARTICIPATION.md` for `full` / `observe` / `exclude`.
- Public repos are treated as OSS by default for backlog-review suitability checks. Private repos are never OSS.
- See [Repository Priorities Reference](../reference/repo-priorities.md) for full details.
5 changes: 3 additions & 2 deletions docs/reference/pm-prompts.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This page documents the main Copilot PM workflow prompts provided in this reposi
| Prompt | Purpose |
|-----------------------|--------------------------------------------------------------|
| `/pm-assistant` | Conversational guide to the PM workflow |
| `/pm-backlog-review` | Review all issues/PRs, flag stale work, surface priorities. Uses [repo priorities](repo-priorities.md) to decide which repos to scan and how to order candidates. |
| `/pm-backlog-review` | Review all issues/PRs, flag stale work, surface priorities, and report OSS suitability gaps for OSS repos. Uses [repo priorities](repo-priorities.md) to decide which repos to scan and how to order candidates. |
| `/pm-iteration-plan` | Curate board for the next few days, resolve stalled items. Uses [repo priorities](repo-priorities.md) to decide which repos to scan and how to order candidates. |
| `/pm-daily` | Daily nudge: what to focus on today |
| `/pm-issue-triage` | Triage and label unlabelled issues/PRs |
Expand All @@ -23,6 +23,7 @@ This page documents the main Copilot PM workflow prompts provided in this reposi

- Both `/pm-backlog-review` and `/pm-iteration-plan` read [plan/REPO_PRIORITIES.md](../../plan/REPO_PRIORITIES.md) to determine which repos to scan for issues and how to order candidates.
- Both prompts also read `plan/REPO_PM_PARTICIPATION.md` to determine whether each repo is `full`, `observe`, or `exclude`.
- `/pm-backlog-review` also uses `plan/REPO_PM_PARTICIPATION.md` to apply OSS overrides for suitability checks. Public repos are treated as OSS by default, private repos are never OSS, and public repos can be explicitly opted out.
- Only Tier 1, 2, and 3 repos are scanned for issues. Not PM Tracked and Paused are skipped for issue scanning, but PRs from all non-`exclude` repos are always included.
- `observe` repos are included in review and planning, but skipped by `/pm-issue-triage` and shared label enforcement.

Expand All @@ -39,7 +40,7 @@ See [Repository Priorities Reference](repo-priorities.md) for details on the fil
## Prompt Details

- **pm-assistant:** Entry point; interviews you about your goal and routes you to the right prompt.
- **pm-backlog-review:** Scans all repos, flags unlabelled or stale items, suggests priorities.
- **pm-backlog-review:** Scans all repos, flags unlabelled or stale items, suggests priorities, and reports missing OSS suitability assets for OSS repos.
- **pm-iteration-plan:** Reads board state, resolves stalled items, curates Up Next.
- **pm-daily:** Summarises board, flags top 3 items to focus on.
- **pm-issue-triage:** Applies labels and ensures board membership.
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/repo-priorities.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ It now works alongside `plan/REPO_PM_PARTICIPATION.md`, which decides whether a

## Related File

- **Repository PM Participation:** `plan/REPO_PM_PARTICIPATION.md` controls whether a repo is `full`, `observe`, or `exclude`.
- **Repository PM Participation:** `plan/REPO_PM_PARTICIPATION.md` controls whether a repo is `full`, `observe`, or `exclude`. It also carries OSS override metadata used by `/pm-backlog-review` for OSS suitability checks.

## Rules

Expand Down
3 changes: 2 additions & 1 deletion plan/OPERATING_MODEL.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Repository participation is controlled centrally in [plan/REPO_PM_PARTICIPATION.
**Typical PM Mode sequence:**

1. **`/pm-backlog-review`** - Scans all repos for open issues **and open PRs**, flags stale ones, surfaces ready work across the ecosystem. Identifies repos that haven't had attention recently so nothing gets forgotten. Non-Dependabot PRs without labels are flagged for triage in `full` repos only.
For OSS repos, it also runs an OSS suitability audit for repo-local community assets (for example `CONTRIBUTING`, `CODE_OF_CONDUCT`, `SECURITY`, templates, and `FUNDING`). Public repos are treated as OSS by default, private repos are never OSS, and exceptional public opt-outs are controlled via `plan/REPO_PM_PARTICIPATION.md`.
2. **`/pm-iteration-plan`** - Reads the current board state first. Surfaces stalled items in Up Next and asks what to do with them before adding anything new. Proposes a curated cross-repo work list (issues and PRs) based on available capacity; ready-to-review PRs are prioritised above new stories. Moves confirmed items to **Up Next** on the project board.

The result: the project board is populated with a realistic, intentional view of what to work on for the next few days - covering both issues and open PRs.
Expand All @@ -35,7 +36,7 @@ The optional **`/pm-daily`** prompt provides a quick board state snapshot and nu

| Prompt | Mode | Purpose |
|--------|------|---------|
| `/pm-backlog-review` | PM Mode | Scan all repos for issues and PRs, surface ready work, flag stale repos, flag unlabelled PRs |
| `/pm-backlog-review` | PM Mode | Scan all repos for issues and PRs, surface ready work, flag stale repos, flag unlabelled PRs, and report OSS suitability gaps for OSS repos |
| `/pm-iteration-plan` | PM Mode | Read board state, resolve stalled items, curate Up Next (issues and PRs), mutate board |
| `/pm-daily` | Work Mode (optional) | Board snapshot: stalled items, stalled PR reviews, top 3 to focus on today |
| `/pm-issue-triage` | As needed | Classify and label unlabelled issues and PRs |
Expand Down
36 changes: 31 additions & 5 deletions plan/REPO_PM_PARTICIPATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ It separates two concerns that were previously conflated:

- **Whether a repo is visible to PM prompts at all**
- **Whether this repo is allowed to manage that repo's labels and triage process**
- **Whether a repo should be treated as OSS for OSS suitability checks**

Repos not listed in the overrides table are treated as **`full`** by default.

Expand All @@ -19,6 +20,25 @@ Repos not listed in the overrides table are treated as **`full`** by default.
| `observe` | Backlog review, daily focus, iteration planning, stale repo checks, board suggestions | `/pm-issue-triage`, shared label enforcement, missing-label checks, missing-board checks based on the shared taxonomy | Repos that should stay visible in planning, but manage their own labels or internal workflow |
| `exclude` | - | All PM prompts and agent operations | Repos that should remain completely out of scope |

## OSS Suitability Rule

OSS suitability checks are run during `/pm-backlog-review` only.

Use this evaluation order:

1. Participation mode decides whether a repo is in scope at all (`exclude` repos are skipped).
2. Repository visibility decides default OSS eligibility:
- Public repo -> treated as OSS by default.
- Private repo -> never treated as OSS.
3. `OSS Override` (table below) can opt a public repo out of OSS checks.

Allowed `OSS Override` values:

- `default` - use visibility-based behaviour.
- `non-oss` - explicit opt-out for an unusual public repo.

For this workflow, OSS suitability is **repo-local only**. Do not count inherited defaults from an owner `.github` repository.

### Key Rule

`observe` repos are **planning-visible but triage-exempt**.
Expand All @@ -29,9 +49,9 @@ When a repo is in `observe` mode, prompts must still surface likely next work, b

## Active Overrides

| Repository | Mode | Selection Notes | Reason | Since |
|------------|------|-----------------|--------|-------|
| `markheydon/solo-dev-board` | `observe` | Surface open non-draft PRs first, then open issues that look like active next-step work. Do not rely on shared labels. | AI-managed experimental repo with its own workflow. Keep it visible in planning without taking over its triage. | 2026-03-05 |
| Repository | Mode | OSS Override | Selection Notes | Reason | Since |
|------------|------|--------------|-----------------|--------|-------|
| `markheydon/solo-dev-board` | `observe` | `default` | Surface open non-draft PRs first, then open issues that look like active next-step work. Do not rely on shared labels. | AI-managed experimental repo with its own workflow. Keep it visible in planning without taking over its triage. | 2026-03-05 |

---

Expand All @@ -42,19 +62,25 @@ When a repo is in `observe` mode, prompts must still surface likely next work, b
- Add a row when a repo needs behaviour other than the default `full` mode.
- Use `observe` when you want a repo to appear in suggestions and iteration planning without centralised triage.
- Use `exclude` only when a repo should be completely ignored by PM prompts.
- Leave `OSS Override` as `default` unless a public repo must be explicitly treated as non-OSS.
- Keep selection notes short and concrete so prompts can understand what to surface for `observe` repos.

### For Agents

1. Read this file before scanning repos.
2. Treat repos not listed here as `full`.
3. Skip `exclude` repos for all PM operations.
4. For `observe` repos:
4. Determine OSS suitability for backlog review checks:
- Private repo -> not OSS.
- Public repo with `OSS Override = non-oss` -> not OSS.
- Public repo otherwise -> OSS.
5. For `observe` repos:
- Include them in backlog review, daily visibility, stale repo checks, and iteration planning.
- Do **not** run triage or shared label enforcement against them.
- Do **not** flag missing `epic` / `story` / `bug` labels as defects.
- Use the `Selection Notes` column to decide what kind of work to surface during planning.
5. Combine this file with `plan/REPO_PRIORITIES.md`:
6. Run OSS suitability checks only in `/pm-backlog-review`, and only against repo-local files.
7. Combine this file with `plan/REPO_PRIORITIES.md`:
- Priority decides **when** a repo's work should be considered.
- Participation decides **how** that repo may be managed.

Expand Down
Loading