Skip to content

feat: bidirectional upstream sync + auto-propagation for tiered squads #357

Closed as not planned

Description

@tamirdresher

Problem

The current squad upstream command is one-way pull-only with no auto-sync. This creates two gaps for tiered squad deployments:

1. No bidirectional flow (child → parent)

A child squad that discovers something useful (a skill, a decision, a governance improvement) has no way to propose it back to the parent squad. The only flow is parent → child via squad upstream sync.

2. No automatic propagation (parent → child)

When the parent squad changes (new governance rules, updated templates, new skills), child squads see nothing until someone manually runs squad upstream sync. There's no webhook, no watcher, no GitHub Action that triggers child updates.

Current State

squad upstream today supports:

  • �dd — register a parent squad (git URL, local path, or export JSON)

emove — unregister

  • list — show configured upstreams
  • sync [name] — pull latest from parent (git pull or validate local path)

All operations are read-only from the parent. The child caches the parent in .squad/_upstream_repos/.

Proposed Enhancements

Phase 1: Auto-sync (parent → child)

  • squad upstream watch — poll parent repo for changes on an interval (like Ralph's watch)
  • GitHub Action — squad-upstream-sync.yml that runs on a cron and syncs from parent, opening a PR if there are changes
  • Selective merge — config to specify which parent files to adopt vs override locally (e.g., adopt templates but keep local routing)

Phase 2: Bidirectional (child → parent)

  • squad upstream propose — packages a child's changes (new skills, decisions, governance tweaks) and creates a PR on the parent repo
  • Scope control — config to specify what the child is allowed to propose (skills only, decisions only, everything)
  • Conflict resolution — when parent and child both changed the same file, present a merge UI or default to parent-wins

Phase 3: Event-driven sync

  • Webhook-based — parent repo sends a webhook on push, child auto-syncs (no polling needed)
  • GitHub Actions integration — parent's CI triggers child repo dispatch event via
    epository_dispatch

Related

Activity

  1. tamirdresher commented on Mar 12, 2026

    @tamirdresher
    CollaboratorAuthor

    Related issues:

    This issue is scoped specifically to the \squad upstream\ command and its gaps. Not a duplicate of #242 — it's an implementation plan for one capability within that vision.

  2. github-actions commented on Mar 13, 2026

    @github-actions
    Contributor

    🏗️ Squad Triage — Flight (Lead)

    Issue: #357 — feat: bidirectional upstream sync + auto-propagation for tiered squads
    Assigned to: FIDO (Quality Owner)
    Reason: Issue relates to testing/quality work

    @copilot evaluation: 🔴 Not suitable — issue involves work outside the coding agent's capability profile.

    Team roster:

    • Flight (Lead) → label: squad:flight
    • Procedures (Prompt Engineer) → label: squad:procedures
    • EECOM (Core Dev) → label: squad:eecom
    • FIDO (Quality Owner) → label: squad:fido
    • PAO (DevRel) → label: squad:pao
    • CAPCOM (SDK Expert) → label: squad:capcom
    • CONTROL (TypeScript Engineer) → label: squad:control
    • Surgeon (Release Manager) → label: squad:surgeon
    • Booster (CI/CD Engineer) → label: squad:booster
    • GNC (Node.js Runtime) → label: squad:gnc
    • Network (Distribution) → label: squad:network
    • RETRO (Security) → label: squad:retro
    • INCO (CLI UX & Visual Design) → label: squad:inco
    • GUIDO (VS Code Extension) → label: squad:guido
    • Telemetry (Aspire & Observability) → label: squad:telemetry
    • VOX (REPL & Interactive Shell) → label: squad:vox
    • DSKY (TUI Engineer) → label: squad:dsky
    • Sims (E2E Test Engineer) → label: squad:sims
    • Handbook (SDK Usability) → label: squad:handbook
    • Ralph (Work Monitor) → label: squad:ralph
    • @copilot (Coding Agent) → label: squad:copilot

    To reassign, remove the current squad:* label and add the correct one.

  3. github-actions commented on Mar 13, 2026

    @github-actions
    Contributor

    📋 Assigned to Flight (Lead)

    Issue: #357 — feat: bidirectional upstream sync + auto-propagation for tiered squads

    Flight will pick this up in the next Copilot session.

    For Copilot coding agent: If enabled, this issue will be worked automatically.
    Otherwise, start a Copilot session and say:
    Flight, work on issue #357

  4. 16 remaining items

  5. github-actions commented on Sep 10, 2026

    @github-actions
    Contributor

    🔄 Ralph — Auto-Triage

    Assigned to: Booster
    Reason: Matched routing keyword(s): CI, ci, GitHub Actions
    Source: routing-rule

    Ralph auto-triaged this issue using routing rules.
    To reassign, swap the squad:* label.

  6. github-actions commented on Sep 11, 2026

    @github-actions
    Contributor

    🔄 Ralph — Auto-Triage

    Assigned to: Booster
    Reason: Matched routing keyword(s): CI, ci, GitHub Actions
    Source: routing-rule

    Ralph auto-triaged this issue using routing rules.
    To reassign, swap the squad:* label.

  7. github-actions commented on Sep 11, 2026

    @github-actions
    Contributor

    🔄 Ralph — Auto-Triage

    Assigned to: Booster
    Reason: Matched routing keyword(s): CI, ci, GitHub Actions
    Source: routing-rule

    Ralph auto-triaged this issue using routing rules.
    To reassign, swap the squad:* label.

  8. github-actions commented on Sep 11, 2026

    @github-actions
    Contributor

    🔄 Ralph — Auto-Triage

    Assigned to: Booster
    Reason: Matched routing keyword(s): CI, ci, GitHub Actions
    Source: routing-rule

    Ralph auto-triaged this issue using routing rules.
    To reassign, swap the squad:* label.

  9. github-actions commented on Sep 11, 2026

    @github-actions
    Contributor

    🔄 Ralph — Auto-Triage

    Assigned to: Booster
    Reason: Matched routing keyword(s): CI, ci, GitHub Actions
    Source: routing-rule

    Ralph auto-triaged this issue using routing rules.
    To reassign, swap the squad:* label.

  10. github-actions commented on Sep 13, 2026

    @github-actions
    Contributor

    🔄 Ralph — Auto-Triage

    Assigned to: architect
    Reason: No module, routing, or role keyword match — routed to Lead/Architect
    Source: lead-fallback

    Ralph auto-triaged this issue using routing rules.
    To reassign, swap the squad:* label.

  11. bradygaster commented on Sep 24, 2026

    @bradygaster
    Collaborator

    Closing per your own comment above ("should we close?") — this was explicitly shelved alongside A2A (#332–#336) since bidirectional sync depends on multi-squad patterns that never landed. No activity in 5+ months since you asked the question. Reopen when A2A is unblocked and this becomes relevant again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    go:needs-researchNeeds investigationpriority:p2Next sprintshelvedParked — revisit when conditions changesquadSquad triage inbox — Lead will assign to a membersquad:architectAssigned to architect (Lead Architect)triagedIssue has been triagedtype:featureNew capabilitywave:3-laterWave 3 — backlog, future

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions