Demonstrates pyqual's planfile-backed ticket management — auto-creating TODO.md entries and syncing GitHub Issues when quality gates fail.
When on_fail: create_ticket is set in pyqual.yaml, failed quality gates automatically trigger planfile's TODO.md sync. This example shows:
- Automatic ticket creation from gate failures
- Manual TODO.md sync via CLI and Python API
- GitHub Issues sync via planfile's GitHub backend
- Bidirectional sync between TODO.md and external backends
pyqual.yaml— Pipeline config withon_fail: create_ticketsync_tickets.py— Programmatic ticket sync with multiple modes
# Sync TODO.md through planfile
pyqual tickets todo
# Sync GitHub Issues
pyqual tickets github
# Sync both
pyqual tickets all
# Dry-run (preview only)
pyqual tickets todo --dry-runcd examples/ticket_workflow
# Sync TODO.md
python sync_tickets.py
# Sync GitHub Issues
python sync_tickets.py --github
# Create tickets from gate failures
python sync_tickets.py --from-gates
# Preview without writing
python sync_tickets.py --from-gates --dry-run# Run pipeline — failures auto-create TODO.md tickets
pyqual run -c pyqual.yamlpyqual run → stages execute → gates check
│
┌── PASS ─┴── FAIL ──┐
│ │
Done ✅ planfile sync
→ TODO.md updated
→ GitHub Issues synced
- Pipeline runs stages (analyze, lint, test)
- Gates are checked against thresholds
- If any gate fails and
on_fail: create_ticket:- pyqual calls
sync_todo_tickets() - planfile's markdown backend updates
TODO.md - Failed metrics become checklist items
- pyqual calls
- On next run, fixed issues are marked as completed
loop:
on_fail: create_ticket # triggers planfile TODO sync"both"— sync in both directions (default)"from"— pull from external source into TODO.md"to"— push TODO.md items to external source
planfile(included as pyqual dependency).planfile/directory initialized in project root- For GitHub sync:
GITHUB_TOKENenvironment variable
See pyqual.yaml for the complete ticket workflow configuration.