Maintainers create GitHub Issues to define contribution opportunities for the Symphony community.
Symphony issues are standard GitHub issues with the runmaestro.ai label. The issue body contains paths to Auto Run documents that define the work to be done. When a contributor starts working on an issue, a draft PR is automatically created to claim it.
- Label: Add the
runmaestro.ailabel to the issue - Title: Clear description of the contribution (e.g., "Add unit tests for user module")
- Body: List the Auto Run document paths (one per line)
Simply list the paths to your Auto Run documents:
.maestro/autorun/add-user-tests.md
.maestro/autorun/add-user-tests-2.md
That's it! No special formatting required. The system will:
- Parse the
.mdfile paths from the issue body - Clone your repository when a contributor starts
- Run each document in sequence via Auto Run
- Create a PR with all changes
The following formats are recognized:
# Bare paths (recommended)
.maestro/autorun/task-1.md
.maestro/autorun/task-2.md
# Markdown list items
- .maestro/autorun/task-1.md
- `.maestro/autorun/task-2.md`
# Numbered lists
1. .maestro/autorun/task-1.md
2. .maestro/autorun/task-2.mdTitle: Add comprehensive tests for the authentication module
Labels: runmaestro.ai
Body:
Add test coverage for the authentication module.
Documents to process:
.maestro/autorun/auth-unit-tests.md
.maestro/autorun/auth-integration-tests.md
.maestro/autorun/auth-e2e-tests.md
## Context
The `src/auth/` module currently has low test coverage. These documents will guide the AI to add comprehensive tests following our existing patterns.
## Expected Outcome
- Unit tests for all public functions
- Integration tests for auth flow
- E2E tests for login/logout
Estimated time: ~45 minutes of AI agent time.Each .md file should be a complete Auto Run document:
# Task: Add Unit Tests for Auth Module
## Context
The authentication module at `src/auth/` needs test coverage.
## Objectives
- [ ] Create `src/__tests__/auth.test.ts`
- [ ] Add tests for `login()` function
- [ ] Add tests for `logout()` function
- [ ] Add tests for `refreshToken()` function
- [ ] Ensure `npm test` passes
- [ ] Verify coverage > 80%
## Constraints
- Use Jest testing framework
- Follow existing test patterns in the codebase
- Do not modify production code- Small, focused tasks: Each document should be ~30-60 minutes of AI time
- Clear objectives: Use checkboxes (
- [ ]) for verification steps - Provide context: Include file paths, existing patterns, constraints
- Verification steps: Include test commands, linting checks
- Independence: Each document should be self-contained
Add the blocking label to any issue that has unmet prerequisites. Blocked issues are visible to contributors but grayed out and cannot be started. This lets maintainers create dependency trees across issues.
How it works:
- Add the
blockinglabel to an issue that depends on other work being completed first - Contributors see the issue in a separate "Blocked" section, grayed out with a lock icon
- When the prerequisite is met, remove the
blockinglabel to make the issue available
Example workflow:
Issue #1: Set up database schema → available (no blocking label)
Issue #2: Add API endpoints (needs #1) → blocking label applied
Issue #3: Add frontend (needs #2) → blocking label applied
When #1 is completed, remove blocking from #2. When #2 is completed, remove blocking from #3.
An issue is available for contribution when:
- It has the
runmaestro.ailabel - It is open (not closed)
- It does not have the
blockinglabel - There is no open PR with "Closes #N" in the body
When a contributor starts working on an issue, a draft PR is immediately created with "Closes #N" in the body. This claims the issue and prevents duplicate work.
1. Contributor clicks "Start Symphony" on an issue
2. Repository is cloned locally
3. A new branch is created (symphony/issue-{number}-{timestamp})
4. An empty commit is made
5. The branch is pushed to origin
6. A draft PR is created with "Closes #{issue}" in the body
7. Auto Run begins processing documents
8. When complete, contributor clicks "Finalize PR"
9. Draft PR is converted to "Ready for Review"
- ✅ Break large tasks into multiple smaller issues
- ✅ Include all necessary context in the documents
- ✅ Provide clear acceptance criteria
- ✅ Estimate the expected time/complexity
- ✅ Link to relevant documentation or examples
- ❌ Create issues that require human judgment calls
- ❌ Include tasks that need external credentials/access
- ❌ Bundle unrelated tasks in a single issue
- ❌ Assume contributors know your codebase intimately
- ❌ Create documents with ambiguous requirements
For complex tasks, organize your documents like this:
.maestro/autorun/
├── feature-1-setup.md # First: Set up files/structure
├── feature-1-implement.md # Second: Implement the feature
├── feature-1-tests.md # Third: Add tests
└── feature-1-docs.md # Fourth: Update documentation
Each document builds on the previous one, and contributors can see the full scope in the issue body.
As a maintainer:
- You'll receive a GitHub notification when a draft PR is created
- Watch the PR for progress as the contributor works
- Review and provide feedback once the PR is ready
- Merge when satisfied
- See SYMPHONY_REGISTRY.md for registry information
- Check the Maestro documentation for Auto Run guides
- Open an issue on the Maestro repository for support