PR Author Agent
The PR Author Agent transforms Observability Diff Plans (from Scout Agent) into complete Pull Requests containing instrumentation code, configuration, tests, and documentation.
Core Responsibilities
- •Template Selection: Choose archetype-specific templates based on Diff Plan
- •Code Generation: Generate OTel interceptors, correlation headers, configs
- •Lineage Spec Creation: Create YAML specs defining input/output mappings
- •Contract Stub Generation: Create data contract definitions with SLOs
- •Test Scaffolding: Generate telemetry validation tests
- •Runbook Generation: Create operational runbooks from templates
- •PR Creation: Create GitHub/GitLab PR with all artifacts
Workflow
Step 1: Parse Diff Plan
Read the Observability Diff Plan JSON:
- •Extract
archetypes,tech_stack,gaps,patch_plan - •Validate plan schema
- •Check confidence threshold (default >= 0.7)
Step 2: Select Templates
For each gap in the plan:
- •Match
gap.templateto template library - •Load template files from
references/templates/ - •Prepare variable context for interpolation
Step 3: Generate Artifacts
For each template, generate:
- •Code files: Interceptors, wrappers, middleware
- •Config files: application.yaml, go.mod additions
- •Spec files: lineage/.yaml, contracts/.yaml
- •Test files: *_test.java, *_test.py, *_test.go
- •Docs: RUNBOOK.md
Step 4: Create Pull Request
Using GitHub/GitLab API:
- •Create branch:
autopilot/observability-{repo}-{timestamp} - •Commit all generated files
- •Create PR with description from template
- •Apply labels:
autopilot,observability - •Request reviewers based on CODEOWNERS
Template Library
Templates organized by archetype and language:
code
references/templates/
├── java/
│ ├── kafka-consumer-otel/
│ ├── kafka-producer-otel/
│ ├── kafka-producer-headers/
│ └── spring-boot-otel/
├── python/
│ ├── kafka-otel/
│ ├── airflow-openlineage/
│ └── spark-openlineage/
├── go/
│ ├── kafka-sarama-otel/
│ ├── gin-otel/
│ ├── echo-otel/
│ └── grpc-otel/
└── common/
├── lineage-spec/
├── contract-stub/
└── runbook/
Variable Interpolation
Templates use ${VAR} syntax:
| Variable | Source | Example |
|---|---|---|
${SERVICE_NAME} | Diff Plan repo name | orders-enricher |
${SERVICE_URN} | Computed from repo | urn:svc:prod:commerce:orders-enricher |
${INPUT_TOPIC} | Detected from code | orders_raw |
${OUTPUT_TOPIC} | Detected from code | orders_enriched |
${OWNER_TEAM} | CODEOWNERS or default | orders-team |
${CONSUMER_GROUP} | Detected from config | orders-enricher-cg |
PR Description Template
markdown
## 🤖 Autopilot: Observability Instrumentation
This PR was generated by the Instrumentation Autopilot to add observability
instrumentation to this repository.
### Changes
${CHANGES_LIST}
### Gaps Addressed
${GAPS_LIST}
### Verification
- [ ] Code review approved
- [ ] Tests passing
- [ ] Lineage spec reviewed
- [ ] Contract SLOs appropriate
### Next Steps
After merge, the Telemetry Validator will verify signals in staging.
---
*Generated by Instrumentation Autopilot v1.0*
*Confidence: ${CONFIDENCE}*
*Diff Plan: ${DIFF_PLAN_ID}*
Scripts
- •
scripts/generate_pr.py: Main PR generation orchestrator - •
scripts/template_engine.py: Template interpolation engine - •
scripts/github_client.py: GitHub API wrapper - •
scripts/gitlab_client.py: GitLab API wrapper
References
- •
references/templates/: Archetype-specific code templates - •
references/pr-template.md: PR description template - •
references/variable-mapping.md: Variable interpolation rules
OpenSpec Workflows
For Windsurf development:
- •
assets/windsurf/workflows/pr-author-generate.md: Generate PR workflow - •
assets/windsurf/workflows/pr-author-template.md: Create template workflow - •
assets/windsurf/workflows/pr-author-test.md: Test generation workflow
Integration Points
| System | Integration | Purpose |
|---|---|---|
| Scout Agent | Event bus subscriber | Receive Diff Plans |
| GitHub | REST API | Create PRs, branches, commits |
| GitLab | REST API | Alternative VCS support |
| Schema Registry | REST API | Validate schema compatibility |
| Template Store | File system / S3 | Load templates |
Configuration
yaml
pr_author:
enabled: true
auto_create_pr: true
require_human_review: true
templates_path: "/opt/autopilot/templates"
default_branch: "main"
pr_labels: ["autopilot", "observability"]
confidence_threshold: 0.7
github:
app_id: 12345
installation_id: 67890