From 9604caafc3f48a8f2f3ba6422aff5b983d9c9123 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 27 Sep 2026 03:59:42 +0000 Subject: [PATCH] Add backlog-drip archetype for the All You Can Eat scheduling pattern Mined from githubnext/agentics workflows/issue-monster.md (skip-if-match on open PR/issue, every-30m schedule, one item served at a time) and github/gh-aw .github/aw/workflow-patterns.md, which documents this as the named "All You Can Eat Pattern" with a full recommended shape and a learn-from-the-closed-output guidance section. The existing library had no archetype for this recurring shape: a schedule-triggered workflow that self-throttles to at most one open, unconsumed item and reads closed-item feedback to avoid re-proposing rejected ideas. It is distinct from community-digest (periodic report tied to a time window) and from the generic skip-if-match tip already present elsewhere in the library. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/copilot-instructions.md | 4 +-- patterns/archetypes/backlog-drip.json | 36 +++++++++++++++++++++++++++ patterns/manifest.json | 3 ++- patterns/workflow-generation.json | 26 +++++++++++++++++++ test/copilot-instructions.test.js | 2 +- 5 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 patterns/archetypes/backlog-drip.json diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index ffcdc09..e9af011 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -4,7 +4,7 @@ You are an expert GitHub Agentic Workflow generator. You help users create produ ## Your Knowledge -Use the committed pattern library as the source of truth: `patterns/manifest.json` plus `patterns/archetypes/*.json` generated on 2026-08-31 from 223 source repos, 175 active workflows, and 671 total workflows scanned. The current wizard manifest lists 30 user-facing archetypes; the `custom` archetype exists as a supporting pattern file and is intentionally not exposed as a HOW-step archetype. +Use the committed pattern library as the source of truth: `patterns/manifest.json` plus `patterns/archetypes/*.json` generated on 2026-08-31 from 223 source repos, 175 active workflows, and 671 total workflows scanned. The current wizard manifest lists 31 user-facing archetypes; the `custom` archetype exists as a supporting pattern file and is intentionally not exposed as a HOW-step archetype. ### Key Data Points @@ -23,7 +23,7 @@ Use the committed pattern library as the source of truth: `patterns/manifest.jso - `custom` is hidden from the wizard archetype cards but retained for matching and profile data. Best observed custom profiles are schedule + create-pull-request + noop at 95.2% (n=21), schedule + create-issue + noop + threat-detection at 83.9%, and schedule + create-issue + noop at 80.0%. **Curated archetypes without empirical runs yet (`count: 0`):** -- accessibility-expert, agent-cost-tracker, batched-ci-doctor, ci-failure-triage, code-health-auditor, community-digest, contribution-guidelines-checker, issue-hierarchy-manager, link-checker, linter-applier, linter-miner, linter-refiner, linter-workflows, nitpick-reviewer, performance-nut, pr-fix-assistant, pr-iteration-loop, repo-qa-assistant, security-scanner, skill-pr-reviewer, user-simulator. +- accessibility-expert, agent-cost-tracker, backlog-drip, batched-ci-doctor, ci-failure-triage, code-health-auditor, community-digest, contribution-guidelines-checker, issue-hierarchy-manager, link-checker, linter-applier, linter-miner, linter-refiner, linter-workflows, nitpick-reviewer, performance-nut, pr-fix-assistant, pr-iteration-loop, repo-qa-assistant, security-scanner, skill-pr-reviewer, user-simulator. - Keep these archetypes available. They are newer curated patterns and should not be removed simply because they have no measured success rate. **Trigger combo risk:** diff --git a/patterns/archetypes/backlog-drip.json b/patterns/archetypes/backlog-drip.json new file mode 100644 index 0000000..0c4bb04 --- /dev/null +++ b/patterns/archetypes/backlog-drip.json @@ -0,0 +1,36 @@ +{ + "id": "backlog-drip", + "label": "Backlog Drip", + "description": "Serve one open-ended backlog item at a time, activating again only after the previous item is closed", + "success_rate": null, + "count": 0, + "recommended_triggers": [ + { + "type": "schedule", + "config": {} + } + ], + "recommended_safe_outputs": [ + "issues" + ], + "recommended_tools": [ + "create-issue" + ], + "timeout_minutes": 15, + "prompt_style": "role-steps", + "size_range_bytes": [ + 2000, + 6000 + ], + "top_repos": [], + "tips": [ + "Wake up frequently (e.g. every 30 minutes) but cap the safe output at max: 1 and set skip-if-match to a query that matches the workflow's own still-open item, so a new one is never produced while the last is unconsumed", + "Match on a stable identity marker (the hidden gh-aw-workflow-id footer, or a consistent title-prefix) rather than free text, since humans rename titles", + "Set expires on the created issue or pull request so an abandoned, never-closed item eventually unblocks the schedule instead of stalling it forever", + "Before proposing a new item, search the last few closed items from this workflow and read the close reason and any review feedback \u2014 treat 'not planned' or a rejecting comment as a negative signal and avoid re-proposing the same idea", + "Persist a compact accept/reject history across runs in cache-memory (or repo-memory if it must survive cache eviction) so the backlog improves over time instead of repeating rejected proposals", + "Use this pattern for open-ended, non-event-driven backlogs (improvement ideas, maintenance chores, research notes) \u2014 prefer the community-digest archetype instead when the output is a periodic report tied to a time window", + "Call noop when nothing in the backlog clears the quality bar left by past rejections" + ], + "anti_patterns": [] +} diff --git a/patterns/manifest.json b/patterns/manifest.json index 5b784d9..0684dcb 100644 --- a/patterns/manifest.json +++ b/patterns/manifest.json @@ -35,7 +35,8 @@ "link-checker", "repo-qa-assistant", "nitpick-reviewer", - "pr-fix-assistant" + "pr-fix-assistant", + "backlog-drip" ], "workflow_generation": "workflow-generation.json", "anti_patterns": [ diff --git a/patterns/workflow-generation.json b/patterns/workflow-generation.json index b1e04b4..a9faea6 100644 --- a/patterns/workflow-generation.json +++ b/patterns/workflow-generation.json @@ -1251,6 +1251,32 @@ "- **DO NOT** post more than one comment per invocation.", "- **DO NOT** assert claims you could not verify from the repository or trusted sources." ] + }, + "backlog-drip": { + "icon": "checklist", + "capabilities": { + "github_toolsets": true + }, + "body": [ + "# {{label}}", + "", + "You are a **backlog drip** agent for this repository, serving one open-ended backlog item at a time so the next one only appears after the previous item is closed.", + "", + "## Process", + "", + "1. Load the accept/reject history from cache-memory", + "2. Search the last few closed items produced by this workflow (same marker or title prefix), newest first", + "3. Read each closing reason, closing comment, labels, and any review feedback; treat 'not planned' or a rejecting comment as a negative signal, and completed/merged as a positive signal for similar work", + "4. Identify the next backlog candidate that clears the quality bar set by that history", + "5. Create the item, or call `noop` when nothing clears the bar", + "6. Update the accept/reject history in cache-memory before finishing", + "", + "## Constraints", + "", + "- **DO NOT** create a new item while a previous item from this workflow is still open — the schedule guard already enforces this, but never bypass it.", + "- **DO NOT** re-propose an idea already recorded as rejected in cache-memory without new evidence.", + "- **DO NOT** produce more than one item per run." + ] } } } diff --git a/test/copilot-instructions.test.js b/test/copilot-instructions.test.js index d574e38..6d4ee0c 100644 --- a/test/copilot-instructions.test.js +++ b/test/copilot-instructions.test.js @@ -28,7 +28,7 @@ describe('copilot instructions pattern guidance', () => { } expect(empirical).toHaveLength(9); - expect(curated).toHaveLength(21); + expect(curated).toHaveLength(22); for (const id of empirical) expect(instructions).toContain(`\`${id}\``); for (const id of curated) expect(instructions).toContain(id); expect(instructions).toContain('`custom` is hidden from the wizard archetype cards');