From 6c2b0c6a422a18bb7a8fb1ce9bc57567a9d1473e Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 29 Jan 2026 21:21:17 +0000
Subject: [PATCH 1/3] Initial plan


From 0a5135e9369838cc6e9e9e8f43d01cc12b4d4d2b Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 29 Jan 2026 21:25:26 +0000
Subject: [PATCH 2/3] Initial plan for removing RESEARCH PROTOTYPE text

Co-authored-by: eaftan <4733401+eaftan@users.noreply.github.com>
---
 .github/workflows/dependabot-burner.lock.yml  | 117 +++++++++++++++++-
 .../workflows/notion-issue-summary.lock.yml   |  31 ++++-
 pkg/cli/templates/github-agentic-workflows.md |  55 ++++++++
 3 files changed, 198 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml
index bbc146abf45..ea5def05571 100644
--- a/.github/workflows/dependabot-burner.lock.yml
+++ b/.github/workflows/dependabot-burner.lock.yml
@@ -796,7 +796,118 @@ jobs:
           </system>
           PROMPT_EOF
           cat << 'PROMPT_EOF' >> "$GH_AW_PROMPT"
+          # Campaign Orchestrator Core Rules
           
+          These are generic orchestrator rules intended to be included via `{{#runtime-import ...}}`.
+          
+          ## Operating Model
+          
+          - The orchestrator coordinates a single campaign: discover state, decide deterministically, apply minimal writes, and report.
+          - Delegate repo/code changes (PRs, commits) to worker workflows unless the campaign explicitly grants direct repo authority.
+          - The GitHub Project board (when used) is the authoritative campaign state; do not invent state.
+          
+          ## Non-Negotiables
+          
+          - Separate **reads** and **writes**. Do all discovery first, then perform all writes.
+          - Be deterministic and idempotent: safe to re-run with the same inputs.
+          - Minimize API calls; enforce strict pagination budgets.
+          - Prefer incremental discovery over full rescans.
+          - If throttled (HTTP 429 / rate-limit 403), back off and end the run after reporting what remains.
+          
+          ## Budgets & Pacing
+          
+          - Enforce page and item budgets strictly; stop early and defer remaining work to the next run.
+          - Use stable ordering in discovery (e.g., `updatedAt` with a deterministic tiebreak like ID/number).
+          - Never “catch up” by expanding scope or blowing budgets.
+          
+          ## Repo-Memory Cursor & Metrics
+          
+          If this campaign uses repo-memory:
+          
+          - **Cursor file path**: `/tmp/gh-aw/repo-memory/campaigns/<campaign_id>/cursor.json`
+            - If it exists: read first and continue from its boundary.
+            - If it does not exist: create it by end of run.
+            - Always write the updated cursor back to the same path.
+          
+          - **Metrics snapshots path**: `/tmp/gh-aw/repo-memory/campaigns/<campaign_id>/metrics/*.json`
+            - Write **one new** append-only JSON snapshot per run (do not rewrite history).
+            - Use UTC date in the filename (example: `metrics/<YYYY-MM-DD>.json`).
+          
+          ## Correlation & Status Mapping
+          
+          - Correlation must be explicit and stable (e.g., tracker-id plus labels); avoid fuzzy matching.
+          - Determine status only from explicit GitHub state:
+            - Open → active backlog state (e.g., `Todo`)
+            - Closed (issue/discussion) → `Done`
+            - Merged (PR) → `Done`
+          
+          ## Execution Phases (Required Order)
+          
+          1. Read state (discovery) — NO WRITES
+          2. Decide (planning) — NO WRITES
+          3. Apply updates (write phase) — WRITES
+          4. Dispatch workers (optional)
+          5. Report
+          
+          ## Writes (Safe-Outputs Only)
+          
+          - Use only allowlisted safe outputs.
+          - Keep writes deterministic and minimal.
+          - Do not interleave reads and writes.
+          
+          ## Reporting
+          
+          Always report:
+          
+          - Discovered counts (by type)
+          - Processed counts (by action: add/status_update/backfill/noop/failed)
+          - Deferred counts (due to budgets)
+          - Failures (with reasons)
+          - Whether cursor was advanced and where the next run should resume
+          
+          ## No-Work Default
+          
+          If discovery finds **no** work items to process:
+          
+          - If the campaign uses a GitHub Project, post exactly one `create_project_status_update` with status `INACTIVE`.
+          - Then call `noop` with a short message and end the run.
+          
+          ## Project Status Updates (Default)
+          
+          If the campaign uses a GitHub Project, post exactly **one** `create_project_status_update` per run.
+          
+          - `status`: use `INACTIVE` when no work was found; otherwise prefer `ON_TRACK` (or `AT_RISK` if partial failures).
+          - `start_date`: today (YYYY-MM-DD)
+          - `body`: include the discovery query, counts (found / updated / created), and next steps
+          
+          ## Authority
+          
+          - If any campaign instructions conflict with Project update instructions, Project update instructions win for project writes.
+          
+          ## Project Field Defaults (When Using GitHub Projects)
+          
+          If the campaign uses a GitHub Project to track state, use these as **defaults** for `update_project` writes.
+          
+          Notes:
+          - These are defaults. A specific workflow may override them.
+          - Only set fields that exist in the target Project schema; omit unknown fields.
+          
+          Defaults (recommended field keys):
+          
+          - `campaign_id`: derive from the workflow's **Campaign ID** in its Config section.
+          - `target_repo`: derive from the workflow's **Target repo** in its Config section.
+          - `worker_workflow`: set to the discovery source (e.g. the orchestrator/workflow name or the system that surfaced the item).
+          
+          Status defaults:
+          
+          - If the workflow is tracking **open** work items, set `status` to an active backlog state (commonly `"Todo"`).
+          - If tracking **completed** work items (merged PRs / closed issues), set `status` to a done state (commonly `"Done"`).
+          
+          Optional, best-effort fields (only if the Project has them):
+          
+          - `priority`: High/Medium/Low
+          - `size`: Small/Medium/Large
+          - `start_date`: YYYY-MM-DD
           
           # Dependabot Burner
           
@@ -1363,11 +1474,11 @@ jobs:
         uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
         env:
           GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }}
-          GH_AW_SAFE_OUTPUTS_PROJECT_HANDLER_CONFIG: "{\"create_project_status_update\":{\"github-token\":\"${{ secrets.GH_AW_PROJECT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}\",\"max\":1},\"update_project\":{\"github-token\":\"${{ secrets.GH_AW_PROJECT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}\",\"max\":100}}"
+          GH_AW_SAFE_OUTPUTS_PROJECT_HANDLER_CONFIG: "{\"create_project_status_update\":{\"max\":1},\"update_project\":{\"max\":100}}"
           GH_AW_ASSIGN_COPILOT: "true"
-          GH_AW_PROJECT_GITHUB_TOKEN: ${{ secrets.GH_AW_PROJECT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
+          GH_AW_PROJECT_GITHUB_TOKEN: ${{ secrets.GH_AW_PROJECT_GITHUB_TOKEN }}
         with:
-          github-token: ${{ secrets.GH_AW_PROJECT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
+          github-token: ${{ secrets.GH_AW_PROJECT_GITHUB_TOKEN }}
           script: |
             const { setupGlobals } = require('/opt/gh-aw/actions/setup_globals.cjs');
             setupGlobals(core, github, context, exec, io);
diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml
index 762cd6ece05..a047ced7470 100644
--- a/.github/workflows/notion-issue-summary.lock.yml
+++ b/.github/workflows/notion-issue-summary.lock.yml
@@ -163,7 +163,7 @@ jobs:
           mkdir -p /tmp/gh-aw/safeoutputs
           mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
           cat > /opt/gh-aw/safeoutputs/config.json << 'EOF'
-          {"missing_tool":{},"noop":{"max":1},"notion-add-comment":{"description":"Add a comment to a Notion page","inputs":{"comment":{"default":null,"description":"The comment text to add","required":true,"type":"string"}},"output":"Comment added to Notion successfully!"}}
+          {"missing_data":{},"missing_tool":{},"noop":{"max":1},"notion-add-comment":{"description":"Add a comment to a Notion page","inputs":{"comment":{"default":null,"description":"The comment text to add","required":true,"type":"string"}},"output":"Comment added to Notion successfully!"}}
           EOF
           cat > /opt/gh-aw/safeoutputs/tools.json << 'EOF'
           [
@@ -209,6 +209,33 @@ jobs:
               },
               "name": "noop"
             },
+            {
+              "description": "Report that data or information needed to complete the task is not available. Use this when you cannot accomplish what was requested because required data, context, or information is missing.",
+              "inputSchema": {
+                "additionalProperties": false,
+                "properties": {
+                  "alternatives": {
+                    "description": "Any workarounds, manual steps, or alternative approaches the user could take (max 256 characters).",
+                    "type": "string"
+                  },
+                  "context": {
+                    "description": "Additional context about the missing data or where it should come from (max 256 characters).",
+                    "type": "string"
+                  },
+                  "data_type": {
+                    "description": "Type or description of the missing data or information (max 128 characters). Be specific about what data is needed.",
+                    "type": "string"
+                  },
+                  "reason": {
+                    "description": "Explanation of why this data is needed to complete the task (max 256 characters).",
+                    "type": "string"
+                  }
+                },
+                "required": [],
+                "type": "object"
+              },
+              "name": "missing_data"
+            },
             {
               "description": "Add a comment to a Notion page",
               "inputSchema": {
@@ -1127,7 +1154,7 @@ jobs:
         uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
         env:
           GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }}
-          GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"missing_tool\":{},\"noop\":{\"max\":1}}"
+          GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1}}"
         with:
           github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
           script: |
diff --git a/pkg/cli/templates/github-agentic-workflows.md b/pkg/cli/templates/github-agentic-workflows.md
index 70a786b5530..e4cbd22064b 100644
--- a/pkg/cli/templates/github-agentic-workflows.md
+++ b/pkg/cli/templates/github-agentic-workflows.md
@@ -482,6 +482,17 @@ The YAML frontmatter supports these fields:
         target-repo: "owner/repo"           # Optional: cross-repository
     ```
     When using `safe-outputs.close-pull-request`, the main job does **not** need `pull-requests: write` permission since PR closing is handled by a separate job with appropriate permissions.
+  - `mark-pull-request-as-ready-for-review:` - Mark draft PRs as ready for review
+    ```yaml
+    safe-outputs:
+      mark-pull-request-as-ready-for-review:
+        max: 1                              # Optional: max operations (default: 1)
+        target: "*"                         # Optional: "triggering" (default), "*", or number
+        required-labels: [automated]        # Optional: only mark PRs with these labels
+        required-title-prefix: "[bot]"      # Optional: only mark PRs with this prefix
+        target-repo: "owner/repo"           # Optional: cross-repository
+    ```
+    When using `safe-outputs.mark-pull-request-as-ready-for-review`, the main job does **not** need `pull-requests: write` permission since marking as ready is handled by a separate job with appropriate permissions.
   - `add-labels:` - Safe label addition to issues or PRs
     ```yaml
     safe-outputs:
@@ -532,6 +543,26 @@ The YAML frontmatter supports these fields:
         target-repo: "owner/repo"          # Optional: cross-repository
     ```
     Links issues as sub-issues using GitHub's parent-child relationships. Agent output includes `parent_issue_number` and `sub_issue_number`. Use with `create-issue` temporary IDs or existing issue numbers.
+  - `create-project:` - Create GitHub Projects V2
+    ```yaml
+    safe-outputs:
+      create-project:
+        max: 1                          # Optional: max projects (default: 1)
+        github-token: ${{ secrets.PROJECTS_PAT }}  # Optional: token with projects:write
+        target-owner: "org-or-user"     # Optional: owner for created projects
+        title-prefix: "[ai] "           # Optional: prefix for project titles
+    ```
+    Not supported for cross-repository operations.
+  - `copy-project:` - Copy GitHub Projects V2
+    ```yaml
+    safe-outputs:
+      copy-project:
+        max: 1                          # Optional: max copies (default: 1)
+        github-token: ${{ secrets.PROJECTS_PAT }}  # Optional: token with projects:write
+        source-project: "https://github.com/orgs/myorg/projects/42"  # Optional: source project URL
+        target-owner: "org-or-user"     # Optional: owner for copied project
+    ```
+    Not supported for cross-repository operations.
   - `update-project:` - Manage GitHub Projects boards
     ```yaml
     safe-outputs:
@@ -551,6 +582,14 @@ The YAML frontmatter supports these fields:
     {"type": "update_project", "project": "https://github.com/orgs/myorg/projects/42", "content_type": "draft_issue", "draft_title": "Task title", "draft_body": "Task description", "fields": {"Status": "Todo"}}
     ```
 
+    Not supported for cross-repository operations.
+  - `create-project-status-update:` - Create GitHub project status updates
+    ```yaml
+    safe-outputs:
+      create-project-status-update:
+        max: 10                         # Optional: max status updates (default: 10)
+        github-token: ${{ secrets.PROJECTS_PAT }}  # Optional: token with projects:write
+    ```
     Not supported for cross-repository operations.
   - `push-to-pull-request-branch:` - Push changes to PR branch
     ```yaml
@@ -610,6 +649,13 @@ The YAML frontmatter supports these fields:
         max: 50                         # Optional: max findings (default: unlimited)
     ```
     Severity levels: error, warning, info, note.
+  - `autofix-code-scanning-alert:` - Add autofixes to code scanning alerts
+    ```yaml
+    safe-outputs:
+      autofix-code-scanning-alert:
+        max: 10                         # Optional: max autofixes (default: 10)
+    ```
+    Provides automated fixes for code scanning alerts.
   - `create-agent-session:` - Create GitHub Copilot agent sessions
     ```yaml
     safe-outputs:
@@ -663,6 +709,15 @@ The YAML frontmatter supports these fields:
       missing-tool:
     ```
     The missing-tool safe-output allows agents to report when they need tools or functionality not currently available. This is automatically enabled by default and helps track feature requests from agents.
+  - `missing-data:` - Report missing data required to complete tasks (auto-enabled)
+    ```yaml
+    safe-outputs:
+      missing-data:
+        create-issue: true              # Optional: create issues for missing data (default: true)
+        title-prefix: "[missing data]"  # Optional: prefix for issue titles
+        labels: [data-request]          # Optional: labels for created issues
+    ```
+    The missing-data safe-output allows agents to report when required data or information is unavailable. This is automatically enabled by default. When `create-issue` is true, missing data reports create or update GitHub issues for tracking.
 
   **Global Safe Output Configuration:**
   - `github-token:` - Custom GitHub token for all safe output jobs

From eeb365c1ebd37af111ec70a8102bb8320b129d30 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 29 Jan 2026 21:32:02 +0000
Subject: [PATCH 3/3] Remove RESEARCH PROTOTYPE badge and unused CSS from docs
 homepage

Co-authored-by: eaftan <4733401+eaftan@users.noreply.github.com>
---
 docs/src/content/docs/index.mdx | 27 +--------------------------
 1 file changed, 1 insertion(+), 26 deletions(-)

diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx
index dc4d5be7d28..f147b0a2f78 100644
--- a/docs/src/content/docs/index.mdx
+++ b/docs/src/content/docs/index.mdx
@@ -4,11 +4,7 @@ description: Exploring AI-powered repository automation running safely on GitHub
 template: splash
 tableOfContents: true
 hero:
-  title: |
-    <div class="experimental-badge-container">
-      <span class="experimental-badge">RESEARCH PROTOTYPE</span>
-    </div>
-    GitHub Agentic Workflows
+  title: GitHub Agentic Workflows
   tagline: <strong>Automate GitHub tasks safely using AI agents—write workflows in plain English, no YAML required.</strong><br>AI agents execute complex GitHub operations like issue triage, PR reviews, and repository maintenance automatically.
   actions:
     - text: Getting Started
@@ -21,27 +17,6 @@ import { Card, CardGrid } from '@astrojs/starlight/components';
 import FeatureCard from '../../components/FeatureCard.astro';
 import FeatureGrid from '../../components/FeatureGrid.astro';
 
-<style>{`
-  .experimental-badge-container {
-    display: flex;
-    justify-content: flex-start;
-    margin-bottom: 1.25rem;
-  }
-
-  .experimental-badge {
-    display: inline-block;
-    padding: 0.375rem 0.875rem;
-    border: 1px solid rgba(240, 246, 252, 0.15);
-    border-radius: 2rem;
-    font-size: 0.6875rem;
-    font-weight: 600;
-    letter-spacing: 0.08em;
-    color: rgba(240, 246, 252, 0.65);
-    text-transform: uppercase;
-    background: rgba(240, 246, 252, 0.05);
-  }
-`}</style>
-
 ## What are GitHub Agentic Workflows?
 
 GitHub Agentic Workflows allow you to write repository-level AI agent descriptions in plain markdown and run automatically in GitHub Actions. Describe your repository automation goals and execute safely with built-in security controls, having AI make intelligent decisions based on context.
