relay-cc 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +428 -0
- package/agents/relay-codebase-mapper.md +761 -0
- package/agents/relay-debugger.md +1203 -0
- package/agents/relay-estimator.md +257 -0
- package/agents/relay-executor.md +823 -0
- package/agents/relay-plan-checker.md +812 -0
- package/agents/relay-planner.md +1418 -0
- package/agents/relay-reviewer.md +279 -0
- package/agents/relay-ticket-researcher.md +287 -0
- package/agents/relay-verifier.md +778 -0
- package/bin/install.js +1667 -0
- package/commands/relay/add-todo.md +193 -0
- package/commands/relay/check-todos.md +200 -0
- package/commands/relay/debug.md +169 -0
- package/commands/relay/estimate.md +182 -0
- package/commands/relay/help.md +328 -0
- package/commands/relay/history.md +203 -0
- package/commands/relay/map-codebase.md +71 -0
- package/commands/relay/pause-work.md +128 -0
- package/commands/relay/pr.md +223 -0
- package/commands/relay/quick.md +307 -0
- package/commands/relay/resume-work.md +40 -0
- package/commands/relay/resume.md +181 -0
- package/commands/relay/review.md +322 -0
- package/commands/relay/rollback.md +248 -0
- package/commands/relay/set-profile.md +116 -0
- package/commands/relay/settings.md +165 -0
- package/commands/relay/setup.md +247 -0
- package/commands/relay/status.md +131 -0
- package/commands/relay/tickets.md +106 -0
- package/commands/relay/update.md +200 -0
- package/commands/relay/work.md +398 -0
- package/hooks/dist/relay-check-update.js +61 -0
- package/hooks/dist/relay-statusline.js +91 -0
- package/package.json +47 -0
- package/relay/references/checkpoints.md +1078 -0
- package/relay/references/continuation-format.md +249 -0
- package/relay/references/git-integration.md +209 -0
- package/relay/references/model-profiles.md +57 -0
- package/relay/references/planning-config.md +189 -0
- package/relay/references/questioning.md +141 -0
- package/relay/references/tdd.md +263 -0
- package/relay/references/ui-brand.md +162 -0
- package/relay/references/verification-patterns.md +612 -0
- package/relay/templates/DEBUG.md +159 -0
- package/relay/templates/UAT.md +247 -0
- package/relay/templates/analysis.md +101 -0
- package/relay/templates/codebase/architecture.md +255 -0
- package/relay/templates/codebase/concerns.md +310 -0
- package/relay/templates/codebase/conventions.md +307 -0
- package/relay/templates/codebase/integrations.md +280 -0
- package/relay/templates/codebase/stack.md +186 -0
- package/relay/templates/codebase/structure.md +285 -0
- package/relay/templates/codebase/testing.md +480 -0
- package/relay/templates/config.json +40 -0
- package/relay/templates/context.md +283 -0
- package/relay/templates/continue-here.md +78 -0
- package/relay/templates/debug-subagent-prompt.md +91 -0
- package/relay/templates/estimate.md +108 -0
- package/relay/templates/phase-prompt.md +567 -0
- package/relay/templates/planner-subagent-prompt.md +117 -0
- package/relay/templates/research.md +552 -0
- package/relay/templates/state.md +127 -0
- package/relay/templates/summary.md +246 -0
- package/relay/templates/verification-report.md +322 -0
- package/relay/workflows/analyze-ticket.md +42 -0
- package/relay/workflows/diagnose-issues.md +231 -0
- package/relay/workflows/execute-phase.md +700 -0
- package/relay/workflows/execute-plan.md +1851 -0
- package/relay/workflows/map-codebase.md +357 -0
- package/relay/workflows/resume-project.md +307 -0
- package/relay/workflows/sync-ticket.md +58 -0
- package/relay/workflows/verify-phase.md +628 -0
- package/relay/workflows/verify-ticket.md +596 -0
- package/scripts/build-hooks.js +42 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: relay:map-codebase
|
|
3
|
+
description: Analyze codebase with parallel mapper agents to produce .relay/codebase/ documents
|
|
4
|
+
argument-hint: "[optional: specific area to map, e.g., 'api' or 'auth']"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Bash
|
|
8
|
+
- Glob
|
|
9
|
+
- Grep
|
|
10
|
+
- Write
|
|
11
|
+
- Task
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<objective>
|
|
15
|
+
Analyze existing codebase using parallel relay-codebase-mapper agents to produce structured codebase documents.
|
|
16
|
+
|
|
17
|
+
Each mapper agent explores a focus area and **writes documents directly** to `.relay/codebase/`. The orchestrator only receives confirmations, keeping context usage minimal.
|
|
18
|
+
|
|
19
|
+
Output: .relay/codebase/ folder with 7 structured documents about the codebase state.
|
|
20
|
+
</objective>
|
|
21
|
+
|
|
22
|
+
<execution_context>
|
|
23
|
+
@~/.claude/relay/workflows/map-codebase.md
|
|
24
|
+
</execution_context>
|
|
25
|
+
|
|
26
|
+
<context>
|
|
27
|
+
Focus area: $ARGUMENTS (optional - if provided, tells agents to focus on specific subsystem)
|
|
28
|
+
|
|
29
|
+
**Load project state if exists:**
|
|
30
|
+
Check for .relay/STATE.md - loads context if project already initialized
|
|
31
|
+
|
|
32
|
+
**This command can run:**
|
|
33
|
+
- Before /relay:new-project (brownfield codebases) - creates codebase map first
|
|
34
|
+
- After /relay:new-project (greenfield codebases) - updates codebase map as code evolves
|
|
35
|
+
- Anytime to refresh codebase understanding
|
|
36
|
+
</context>
|
|
37
|
+
|
|
38
|
+
<when_to_use>
|
|
39
|
+
**Use map-codebase for:**
|
|
40
|
+
- Brownfield projects before initialization (understand existing code first)
|
|
41
|
+
- Refreshing codebase map after significant changes
|
|
42
|
+
- Onboarding to an unfamiliar codebase
|
|
43
|
+
- Before major refactoring (understand current state)
|
|
44
|
+
- When STATE.md references outdated codebase info
|
|
45
|
+
|
|
46
|
+
**Skip map-codebase for:**
|
|
47
|
+
- Greenfield projects with no code yet (nothing to map)
|
|
48
|
+
- Trivial codebases (<5 files)
|
|
49
|
+
</when_to_use>
|
|
50
|
+
|
|
51
|
+
<process>
|
|
52
|
+
1. Check if .relay/codebase/ already exists (offer to refresh or skip)
|
|
53
|
+
2. Create .relay/codebase/ directory structure
|
|
54
|
+
3. Spawn 4 parallel relay-codebase-mapper agents:
|
|
55
|
+
- Agent 1: tech focus → writes STACK.md, INTEGRATIONS.md
|
|
56
|
+
- Agent 2: arch focus → writes ARCHITECTURE.md, STRUCTURE.md
|
|
57
|
+
- Agent 3: quality focus → writes CONVENTIONS.md, TESTING.md
|
|
58
|
+
- Agent 4: concerns focus → writes CONCERNS.md
|
|
59
|
+
4. Wait for agents to complete, collect confirmations (NOT document contents)
|
|
60
|
+
5. Verify all 7 documents exist with line counts
|
|
61
|
+
6. Commit codebase map
|
|
62
|
+
7. Offer next steps (typically: /relay:new-project or /relay:plan-phase)
|
|
63
|
+
</process>
|
|
64
|
+
|
|
65
|
+
<success_criteria>
|
|
66
|
+
- [ ] .relay/codebase/ directory created
|
|
67
|
+
- [ ] All 7 codebase documents written by mapper agents
|
|
68
|
+
- [ ] Documents follow template structure
|
|
69
|
+
- [ ] Parallel agents completed without errors
|
|
70
|
+
- [ ] User knows next steps
|
|
71
|
+
</success_criteria>
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: relay:pause-work
|
|
3
|
+
description: Create context handoff when pausing work on a ticket
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- Bash
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<objective>
|
|
11
|
+
Create `.continue-here.md` handoff file to preserve complete work state across sessions.
|
|
12
|
+
|
|
13
|
+
Enables seamless resumption in fresh session with full context restoration.
|
|
14
|
+
</objective>
|
|
15
|
+
|
|
16
|
+
<context>
|
|
17
|
+
@.relay/STATE.md
|
|
18
|
+
</context>
|
|
19
|
+
|
|
20
|
+
<process>
|
|
21
|
+
|
|
22
|
+
<step name="detect">
|
|
23
|
+
**Find active ticket from STATE.md.**
|
|
24
|
+
|
|
25
|
+
Read STATE.md and extract active ticket ID. If no active ticket, report:
|
|
26
|
+
```
|
|
27
|
+
No active ticket found. Nothing to pause.
|
|
28
|
+
```
|
|
29
|
+
STOP.
|
|
30
|
+
</step>
|
|
31
|
+
|
|
32
|
+
<step name="gather">
|
|
33
|
+
**Collect complete state for handoff:**
|
|
34
|
+
|
|
35
|
+
1. **Current position**: Which ticket, which stage, which task
|
|
36
|
+
2. **Work completed**: What got done this session
|
|
37
|
+
3. **Work remaining**: What's left in current plan
|
|
38
|
+
4. **Decisions made**: Key decisions and rationale
|
|
39
|
+
5. **Blockers/issues**: Anything stuck
|
|
40
|
+
6. **Mental context**: The approach, next steps
|
|
41
|
+
7. **Files modified**: What's changed but not committed
|
|
42
|
+
|
|
43
|
+
Ask user for clarifications if needed.
|
|
44
|
+
</step>
|
|
45
|
+
|
|
46
|
+
<step name="write">
|
|
47
|
+
**Write handoff to `.relay/tickets/${TICKET_ID}/.continue-here.md`:**
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
---
|
|
51
|
+
ticket: ${TICKET_ID}
|
|
52
|
+
stage: ${CURRENT_STAGE}
|
|
53
|
+
status: paused
|
|
54
|
+
last_updated: [timestamp]
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
<current_state>
|
|
58
|
+
[Where exactly are we? Immediate context]
|
|
59
|
+
</current_state>
|
|
60
|
+
|
|
61
|
+
<completed_work>
|
|
62
|
+
- [What was accomplished]
|
|
63
|
+
</completed_work>
|
|
64
|
+
|
|
65
|
+
<remaining_work>
|
|
66
|
+
- [What's left to do]
|
|
67
|
+
</remaining_work>
|
|
68
|
+
|
|
69
|
+
<decisions_made>
|
|
70
|
+
- [Key decisions and rationale]
|
|
71
|
+
</decisions_made>
|
|
72
|
+
|
|
73
|
+
<blockers>
|
|
74
|
+
- [Any blockers or issues]
|
|
75
|
+
</blockers>
|
|
76
|
+
|
|
77
|
+
<context>
|
|
78
|
+
[Mental state, the plan, approach being taken]
|
|
79
|
+
</context>
|
|
80
|
+
|
|
81
|
+
<next_action>
|
|
82
|
+
Start with: [specific first action when resuming]
|
|
83
|
+
</next_action>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Be specific enough for a fresh Claude to understand immediately.
|
|
87
|
+
</step>
|
|
88
|
+
|
|
89
|
+
<step name="commit">
|
|
90
|
+
**Check planning config:**
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
COMMIT_PLANNING_DOCS=$(cat .relay/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
94
|
+
git check-ignore -q .relay 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
98
|
+
|
|
99
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
git add .relay/tickets/${TICKET_ID}/.continue-here.md
|
|
103
|
+
git commit -m "wip(${TICKET_ID}): paused work"
|
|
104
|
+
```
|
|
105
|
+
</step>
|
|
106
|
+
|
|
107
|
+
<step name="confirm">
|
|
108
|
+
```
|
|
109
|
+
Handoff created: .relay/tickets/${TICKET_ID}/.continue-here.md
|
|
110
|
+
|
|
111
|
+
Current state:
|
|
112
|
+
- Ticket: ${TICKET_ID}
|
|
113
|
+
- Stage: ${CURRENT_STAGE}
|
|
114
|
+
- Status: paused
|
|
115
|
+
|
|
116
|
+
To resume: /relay:resume-work
|
|
117
|
+
```
|
|
118
|
+
</step>
|
|
119
|
+
|
|
120
|
+
</process>
|
|
121
|
+
|
|
122
|
+
<success_criteria>
|
|
123
|
+
- [ ] Active ticket identified from STATE.md
|
|
124
|
+
- [ ] .continue-here.md created in ticket directory
|
|
125
|
+
- [ ] All sections filled with specific content
|
|
126
|
+
- [ ] Committed as WIP
|
|
127
|
+
- [ ] User knows how to resume
|
|
128
|
+
</success_criteria>
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: relay:pr
|
|
3
|
+
description: Create a pull request from completed ticket work
|
|
4
|
+
argument-hint: [ticket-id]
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- AskUserQuestion
|
|
12
|
+
- mcp__jira__add_comment
|
|
13
|
+
- mcp__github__create_comment
|
|
14
|
+
- mcp__azure_devops__update_work_item
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Create a pull request from completed ticket work with auto-generated title and description based on ticket artifacts (ANALYSIS.md, SUMMARY.md, VERIFICATION.md).
|
|
19
|
+
|
|
20
|
+
No agents spawned — orchestration only.
|
|
21
|
+
</objective>
|
|
22
|
+
|
|
23
|
+
<context>
|
|
24
|
+
@.relay/config.json
|
|
25
|
+
@.relay/STATE.md
|
|
26
|
+
Ticket ID: $ARGUMENTS
|
|
27
|
+
</context>
|
|
28
|
+
|
|
29
|
+
<process>
|
|
30
|
+
|
|
31
|
+
## 0. Pre-flight
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
test -f .relay/config.json && echo "config exists" || echo "no config"
|
|
35
|
+
command -v gh >/dev/null 2>&1 && echo "gh available" || echo "gh missing"
|
|
36
|
+
gh auth status 2>&1 | head -1
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If no config: suggest `/relay:setup` and STOP.
|
|
40
|
+
If `gh` CLI not available or not authenticated: report requirement and STOP.
|
|
41
|
+
|
|
42
|
+
## 1. Resolve Ticket ID
|
|
43
|
+
|
|
44
|
+
**If $ARGUMENTS provided:** Use as ticket ID.
|
|
45
|
+
|
|
46
|
+
**If no arguments:** Try to detect from STATE.md active ticket or current branch:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Try active ticket from STATE.md
|
|
50
|
+
grep -oE 'Active.*: [A-Z]+-[0-9]+' .relay/STATE.md 2>/dev/null | grep -oE '[A-Z]+-[0-9]+' | head -1
|
|
51
|
+
|
|
52
|
+
# Try current branch name
|
|
53
|
+
git branch --show-current | grep -oE '[A-Z]+-[0-9]+' | head -1
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
If no ticket ID resolved:
|
|
57
|
+
```
|
|
58
|
+
AskUserQuestion(
|
|
59
|
+
header: "Ticket",
|
|
60
|
+
question: "Which ticket's work should this PR cover?",
|
|
61
|
+
options: [
|
|
62
|
+
{ label: "Enter ID", description: "Type a ticket ID (e.g., PROJ-123)" },
|
|
63
|
+
{ label: "Browse tickets", description: "See tickets with existing work" }
|
|
64
|
+
]
|
|
65
|
+
)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 2. Gather Context
|
|
69
|
+
|
|
70
|
+
Read ticket artifacts:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
test -f .relay/tickets/${TICKET_ID}/ANALYSIS.md && echo "analysis exists"
|
|
74
|
+
test -f .relay/tickets/${TICKET_ID}/SUMMARY.md && echo "summary exists"
|
|
75
|
+
test -f .relay/tickets/${TICKET_ID}/VERIFICATION.md && echo "verification exists"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Read available artifacts and extract:
|
|
79
|
+
- **From ANALYSIS.md:** Ticket title, type, acceptance criteria
|
|
80
|
+
- **From SUMMARY.md:** What was implemented, key decisions
|
|
81
|
+
- **From VERIFICATION.md:** Pass/fail status, coverage
|
|
82
|
+
|
|
83
|
+
Get git context:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Diff stat against main/master
|
|
87
|
+
BASE_BRANCH=$(git remote show origin 2>/dev/null | grep 'HEAD branch' | sed 's/.*: //')
|
|
88
|
+
BASE_BRANCH=${BASE_BRANCH:-main}
|
|
89
|
+
|
|
90
|
+
git diff ${BASE_BRANCH}...HEAD --stat
|
|
91
|
+
git log ${BASE_BRANCH}...HEAD --oneline
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 3. Generate PR Content
|
|
95
|
+
|
|
96
|
+
**Title format:** `${TICKET_ID}: ${ticket_title}`
|
|
97
|
+
|
|
98
|
+
**Body format:**
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
## Summary
|
|
102
|
+
|
|
103
|
+
{2-3 bullet points from SUMMARY.md describing what was done}
|
|
104
|
+
|
|
105
|
+
## Changes
|
|
106
|
+
|
|
107
|
+
{diff stat summary — files changed, insertions, deletions}
|
|
108
|
+
|
|
109
|
+
## Verification
|
|
110
|
+
|
|
111
|
+
{pass/fail status from VERIFICATION.md}
|
|
112
|
+
{list acceptance criteria with check marks}
|
|
113
|
+
|
|
114
|
+
## Commits
|
|
115
|
+
|
|
116
|
+
{list of commits from git log}
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
Ticket: ${TICKET_ID}
|
|
121
|
+
Generated by [Relay](https://github.com/ibnyusrat/relay)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 4. Preview and Confirm
|
|
125
|
+
|
|
126
|
+
Display the generated PR:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
130
|
+
Relay ► PR PREVIEW — ${TICKET_ID}
|
|
131
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
132
|
+
|
|
133
|
+
Title: ${PR_TITLE}
|
|
134
|
+
|
|
135
|
+
${PR_BODY}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
AskUserQuestion(
|
|
140
|
+
header: "Create PR",
|
|
141
|
+
question: "How would you like to proceed?",
|
|
142
|
+
options: [
|
|
143
|
+
{ label: "Create PR", description: "Push branch and create pull request" },
|
|
144
|
+
{ label: "Edit title", description: "Modify the PR title before creating" },
|
|
145
|
+
{ label: "Edit body", description: "Modify the PR description before creating" },
|
|
146
|
+
{ label: "Cancel", description: "Don't create a PR" }
|
|
147
|
+
]
|
|
148
|
+
)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
If "Edit title": ask for new title, then re-preview.
|
|
152
|
+
If "Edit body": ask for changes, then re-preview.
|
|
153
|
+
If "Cancel": STOP.
|
|
154
|
+
|
|
155
|
+
## 5. Push and Create PR
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# Push branch
|
|
159
|
+
CURRENT_BRANCH=$(git branch --show-current)
|
|
160
|
+
git push -u origin "${CURRENT_BRANCH}"
|
|
161
|
+
|
|
162
|
+
# Create PR
|
|
163
|
+
gh pr create --title "${PR_TITLE}" --body "${PR_BODY}" --base "${BASE_BRANCH}"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Capture PR URL from output.
|
|
167
|
+
|
|
168
|
+
## 6. Update State
|
|
169
|
+
|
|
170
|
+
Update STATE.md with PR link:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# Add PR reference to ticket's section in STATE.md
|
|
174
|
+
PR_URL=$(gh pr view --json url --jq '.url')
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## 7. Optional: Post PR Link to Ticket System
|
|
178
|
+
|
|
179
|
+
If integration is configured:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
AskUserQuestion(
|
|
183
|
+
header: "Sync",
|
|
184
|
+
question: "Post PR link back to ${TICKET_ID}?",
|
|
185
|
+
options: [
|
|
186
|
+
{ label: "Post link", description: "Add PR URL as comment on the ticket" },
|
|
187
|
+
{ label: "Skip", description: "Don't update the external ticket" }
|
|
188
|
+
]
|
|
189
|
+
)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
If "Post link": use appropriate MCP tool to add comment with PR URL.
|
|
193
|
+
|
|
194
|
+
## 8. Completion
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
198
|
+
Relay ► PR CREATED — ${TICKET_ID}
|
|
199
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
200
|
+
|
|
201
|
+
PR: ${PR_URL}
|
|
202
|
+
Title: ${PR_TITLE}
|
|
203
|
+
Branch: ${CURRENT_BRANCH} → ${BASE_BRANCH}
|
|
204
|
+
|
|
205
|
+
## Next Steps
|
|
206
|
+
|
|
207
|
+
- Review the PR at ${PR_URL}
|
|
208
|
+
- `/relay:tickets` — pick another ticket
|
|
209
|
+
- `/relay:work <id>` — start next ticket
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
</process>
|
|
213
|
+
|
|
214
|
+
<success_criteria>
|
|
215
|
+
- [ ] Ticket ID resolved (from argument, STATE.md, or branch)
|
|
216
|
+
- [ ] Ticket artifacts read for context
|
|
217
|
+
- [ ] PR title and body generated from artifacts
|
|
218
|
+
- [ ] User previewed and approved content
|
|
219
|
+
- [ ] Branch pushed to remote
|
|
220
|
+
- [ ] PR created via `gh pr create`
|
|
221
|
+
- [ ] STATE.md updated with PR link
|
|
222
|
+
- [ ] Optionally synced PR link to ticket system
|
|
223
|
+
</success_criteria>
|