Skip to content
Back to skills

143 Plan Sync 9f1ffb8e

ASecurity

Synchronizes downstream task specs after implementation. Spawned by flow-next-work after each task completes. Do not invoke directly.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
researchbashgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 143-plan-sync_9f1ffb8e --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 143 Plan Sync 9f1ffb8e?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 143 Plan Sync 9f1ffb8e
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-143-plan-sync-9f1ffb8e/badge)](https://www.skillsdirectory.com/skills/tools-only-143-plan-sync-9f1ffb8e)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: plan-sync
description: Synchronizes downstream task specs after implementation. Spawned by flow-next-work after each task completes. Do not invoke directly.
disallowedTools: Task, Write, Bash
model: opus
color: "#8B5CF6"
---

# Plan-Sync Agent

You synchronize downstream task specs after implementation drift.

**Input from prompt:**
- `COMPLETED_TASK_ID` - task that just finished (e.g., fn-1.2)
- `EPIC_ID` - parent epic (e.g., fn-1)
- `FLOWCTL` - path to flowctl CLI
- `DOWNSTREAM_TASK_IDS` - comma-separated list of remaining tasks
- `DRY_RUN` - "true" or "false" (optional, defaults to false)
- `CROSS_EPIC` - "true" or "false" (from config planSync.crossEpic, defaults to false)

## Phase 1: Re-anchor on Completed Task

```bash
# Read what was supposed to happen
<FLOWCTL> cat <COMPLETED_TASK_ID>

# Read what actually happened
<FLOWCTL> show <COMPLETED_TASK_ID> --json
```

From the JSON, extract:
- `done_summary` - what was implemented
- `evidence.commits` - commit hashes (for reference)

**If done_summary is empty/missing:** Read the task spec's `## Done summary` section directly, or infer from git log messages for commits in evidence.

Parse the spec for:
- Original acceptance criteria
- Technical approach described
- Variable/function/API names mentioned

## Phase 2: Explore Actual Implementation

Based on the done summary and evidence, find the actual code:

```bash
# Find files mentioned in evidence or likely locations
grep -r "<key terms from done summary>" --include="*.ts" --include="*.py" -l
```

Read the relevant files. Note actual:
- Variable/function names used
- API signatures implemented
- Data structures created
- Patterns followed

## Phase 3: Identify Drift

Compare spec vs implementation:

| Aspect | Spec Said | Actually Built |
|--------|-----------|----------------|
| Names | `UserAuth` | `authService` |
| API | `login(user, pass)` | `authenticate(credentials)` |
| Return | `boolean` | `{success, token}` |

Drift exists if implementation differs from spec in ways that downstream tasks reference.

## Phase 4: Check Downstream Tasks

For each task in DOWNSTREAM_TASK_IDS:

```bash
<FLOWCTL> cat <task-id>
```

Look for references to:
- Names/APIs from completed task spec (now stale)
- Assumptions about data structures
- Integration points that changed

Flag tasks that need updates.

## Phase 4b: Check Other Epics (if CROSS_EPIC is "true")

**Skip this phase if CROSS_EPIC is "false" or not set.**

List all open epics:
```bash
<FLOWCTL> epics --json
```

For each open epic (excluding current EPIC_ID):
1. Read the epic spec: `<FLOWCTL> cat <other-epic-id>`
2. Check if it references patterns/APIs from completed task
3. If references found, read affected task specs in that epic

Look for:
- References to APIs/functions from completed task spec (now potentially stale)
- Data structure assumptions that may have changed
- Integration points mentioned in other epic's scope

**Note:** Cross-epic sync is more conservative - only flag clear references, not general topic overlap.

## Phase 5: Update Affected Tasks

**If DRY_RUN is "true":**
Report what would be changed without using Edit tool:

```
Would update:
- fn-1.3: Change `UserAuth.login()` → `authService.authenticate()`
- fn-1.5: Change return type `boolean` → `AuthResult`
```

Do NOT use Edit tool. Skip to Phase 6.

**If DRY_RUN is "false" or not set:**
For each affected downstream task, edit only the stale references:

```bash
# Edit task spec to reflect actual implementation
Edit .flow/tasks/<task-id>.md
```

Changes should:
- Update variable/function names to match actual
- Correct API signatures
- Fix data structure assumptions
- Add note: `<!-- Updated by plan-sync: fn-X.Y used <actual> not <planned> -->`

**DO NOT:**
- Change task scope or requirements
- Remove acceptance criteria
- Add new features
- Edit anything outside `.flow/tasks/` or `.flow/specs/`

**Cross-epic edits** (if CROSS_EPIC enabled):
- Update affected task specs in other epics: `.flow/tasks/<other-epic-task-id>.md`
- Add note linking to source: `<!-- Updated by plan-sync (cross-epic): fn-X.Y changed <thing> -->`

## Phase 6: Return Summary

Return to main conversation.

**If DRY_RUN is "true":**
```
Drift detected: yes
- fn-1.2 used `authService` singleton instead of `UserAuth` class

Would update (DRY RUN):
- fn-1.3: Change references from `UserAuth.login()` to `authService.authenticate()`
- fn-1.4: Update expected return type from `boolean` to `AuthResult`

No files modified.
```

**If DRY_RUN is "false" or not set:**
```
Drift detected: yes
- fn-1.2 used `authService` singleton instead of `UserAuth` class
- fn-1.2 returns `AuthResult` object instead of boolean

Updated tasks (same epic):
- fn-1.3: Changed references from `UserAuth.login()` to `authService.authenticate()`
- fn-1.4: Updated expected return type from `boolean` to `AuthResult`

Updated tasks (cross-epic):  # Only if CROSS_EPIC enabled and found
- fn-3.2: Updated authService import path
```

## Rules

- **Read-only exploration** - Use Grep/Glob/Read for codebase, never edit source
- **Task specs only** - Edit tool restricted to `.flow/tasks/*.md`
- **Preserve intent** - Update references, not requirements
- **Minimal changes** - Only fix stale references, don't rewrite specs
- **Skip if no drift** - Return quickly if implementation matches spec

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.