Skip to content

feat(pipelines): unify platform-specific implement pipelines into a single configurable pipeline with skill-based flavoring #241

@nextlevelshit

Description

@nextlevelshit

Problem

Wave currently maintains separate pipelines for each Git hosting platform (GitHub, GitLab, Gitea, Bitbucket) across 7 pipeline families — 25 files total. This leads to:

  • Duplicated pipeline definitions with only minor platform-specific differences
  • Platform-specific API instructions embedded directly in persona prompts (e.g., raw curl commands for Bitbucket REST API)
  • Maintenance burden: every pipeline change must be replicated across all platform variants
  • Copy-paste bugs and inconsistencies accumulating across variants

As a developer, I typically use only one hosting platform, so having all variants is unnecessary.

Affected Pipeline Families

Family Duplicated Files Platform-Agnostic Steps Platform-Specific Steps
implement-epic gh-, gl-, gt-, bb- (4) Most of the DAG CLI commands in fetch/create steps
implement gh-, gl-, gt-, bb- (4) Steps 2-3 (plan, implement) Steps 1, 4 (fetch-assess, create-pr)
scope gh-, gl-, gt-, bb- (4) Step 2 (scope-and-create logic) Steps 1, 3 (fetch-epic, verify-report)
research gh-, gl-, gt-, bb- (4) Steps 2-4 (100% identical) Steps 1, 5 (fetch-issue, post-comment)
rewrite gh-, gl-, gt-, bb- (4) Scoring/enhancement logic CLI commands in both steps
refresh gh-, gl-, gt-, bb- (4) Step 2 (100% identical) Steps 1, 3 (gather-context, apply-update)
pr-review gh- only (1) Steps 1-4 (diff, security, quality, summary) Step 5 only (publish comment)

Total: 25 pipeline files → 7 unified pipelines

Existing Bugs from Duplication

The copy-paste approach has already introduced inconsistencies:

Bug Family Details
Hardcoded test command implement gl/gt hardcode go test -race ./... instead of {{ project.test_command }}
Missing release scanning refresh gt-refresh skips release/tag scanning entirely (sub-step absent)
Missing --repo flag refresh gl-refresh omits --repo in apply-update commands
Contradictory instructions scope bb-scope verify-report says "post a summary comment" then says "Do NOT post comments"
Missing prompt sections implement bb-implement is missing Agent Usage, Tool Usage, and Error Handling sections
GitHub-named schemas for all platforms rewrite All 4 variants reference github-enhancement-plan.schema.json
Different plan structure implement bb-implement plan step has completely different structure (4 steps vs 5, no spec/plan/tasks)

Proposed Solution

Consolidate all platform-specific pipelines into single configurable pipelines that:

  1. Platform configuration in wave.yaml: Add an option to specify the target Git hosting platform (e.g., platform: github)
  2. Skill-based flavoring: Replace inline platform-specific prompts with proper skills (/bitbucket, /github, /gitlab, /gitea) that encapsulate all platform knowledge
  3. Programmatic API interactions: Replace raw curl + jq instructions in prompts with actual Go code that handles API calls — LLMs should not be executing raw REST API commands

Example of what gets eliminated

Platform-specific prompt blocks like:

Step 2: Fetch issues via the Bitbucket REST API.
- Single issue:
  curl -s -H "Authorization: Bearer $BB_TOKEN" \
    "https://api.bitbucket.org/2.0/repositories/WORKSPACE/REPO/issues/NUM" \
    | jq '{id, title, content: .content.raw, kind, url: .links.html.href}'

…would be replaced by a /bitbucket skill that provides the persona with the necessary context and tooling.

Bitbucket as the worst offender

Every bb-* pipeline embeds raw curl + jq REST API calls with $BB_TOKEN referenced directly in prompt text. The other three platforms use dedicated CLIs (gh, glab, tea) which handle authentication internally. This means:

  • Bearer tokens appear in prompt text sent to the LLM
  • Hardcoded API URLs and JSON payload construction in prompts
  • Significantly more verbose and fragile prompts

Acceptance Criteria

  • A single implement-epic pipeline replaces gh-implement-epic, gl-implement-epic, gt-implement-epic, and bb-implement-epic
  • A single implement pipeline replaces gh-implement, gl-implement, gt-implement, and bb-implement
  • A single scope pipeline replaces gh-scope, gl-scope, gt-scope, and bb-scope
  • A single research pipeline replaces gh-research, gl-research, gt-research, and bb-research
  • A single rewrite pipeline replaces gh-rewrite, gl-rewrite, gt-rewrite, and bb-rewrite
  • A single refresh pipeline replaces gh-refresh, gl-refresh, gt-refresh, and bb-refresh
  • pr-review pipeline supports all four platforms (currently GitHub-only)
  • Platform selection is configurable via wave.yaml or pipeline parameter
  • Platform-specific knowledge is encapsulated in skills (e.g., /github, /bitbucket)
  • Raw API call instructions are removed from persona prompts
  • Existing functionality for all four platforms is preserved
  • Tests cover each unified pipeline with each platform flavor
  • Existing duplication bugs (see table above) are fixed during consolidation

Out of Scope

  • Adding support for new hosting platforms (that can follow as separate issues)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions