Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/sync-default-core.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@fission-ai/openspec": minor
---

### New Features

- Include the sync workflow in the default core profile so new installs generate `/opsx:sync` skills and commands by default.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ openspec init

Now tell your AI: `/opsx:propose <what-you-want-to-build>`

If you want the expanded workflow (`/opsx:new`, `/opsx:continue`, `/opsx:ff`, `/opsx:verify`, `/opsx:sync`, `/opsx:bulk-archive`, `/opsx:onboard`), select it with `openspec config profile` and apply with `openspec update`.
If you want the expanded workflow (`/opsx:new`, `/opsx:continue`, `/opsx:ff`, `/opsx:verify`, `/opsx:bulk-archive`, `/opsx:onboard`), select it with `openspec config profile` and apply with `openspec update`.

> [!NOTE]
> Not sure if your tool is supported? [View the full list](docs/supported-tools.md) – we support 25+ tools and growing.
Expand Down
2 changes: 1 addition & 1 deletion docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ These options work with all commands:

Initialize OpenSpec in your project. Creates the folder structure and configures AI tool integrations.

Default behavior uses global config defaults: profile `core`, delivery `both`, workflows `propose, explore, apply, archive`.
Default behavior uses global config defaults: profile `core`, delivery `both`, workflows `propose, explore, apply, sync, archive`.

```
openspec init [path] [options]
Expand Down
2 changes: 1 addition & 1 deletion docs/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ For workflow patterns and when to use each command, see [Workflows](workflows.md
| `/opsx:propose` | Create a change and generate planning artifacts in one step |
| `/opsx:explore` | Think through ideas before committing to a change |
| `/opsx:apply` | Implement tasks from the change |
| `/opsx:sync` | Merge delta specs into main specs |
| `/opsx:archive` | Archive a completed change |

### Expanded Workflow Commands (custom workflow selection)
Expand All @@ -23,7 +24,6 @@ For workflow patterns and when to use each command, see [Workflows](workflows.md
| `/opsx:continue` | Create the next artifact based on dependencies |
| `/opsx:ff` | Fast-forward: create all planning artifacts at once |
| `/opsx:verify` | Validate implementation matches artifacts |
| `/opsx:sync` | Merge delta specs into main specs |
| `/opsx:bulk-archive` | Archive multiple changes at once |
| `/opsx:onboard` | Guided tutorial through the complete workflow |

Expand Down
4 changes: 2 additions & 2 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ OpenSpec helps you and your AI coding assistant agree on what to build before an
**Default quick path (core profile):**

```text
/opsx:propose ──► /opsx:apply ──► /opsx:archive
/opsx:propose ──► /opsx:apply ──► /opsx:sync ──► /opsx:archive
```

**Expanded path (custom workflow selection):**
Expand All @@ -18,7 +18,7 @@ OpenSpec helps you and your AI coding assistant agree on what to build before an
/opsx:new ──► /opsx:ff or /opsx:continue ──► /opsx:apply ──► /opsx:verify ──► /opsx:archive
```

The default global profile is `core`, which includes `propose`, `explore`, `apply`, and `archive`. You can enable the expanded workflow commands with `openspec config profile` and then `openspec update`.
The default global profile is `core`, which includes `propose`, `explore`, `apply`, `sync`, and `archive`. You can enable the expanded workflow commands with `openspec config profile` and then `openspec update`.

## What OpenSpec Creates

Expand Down
5 changes: 3 additions & 2 deletions docs/migration-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ OPSX replaces the old phase-locked workflow with a fluid, action-based approach.

| Aspect | Legacy | OPSX |
|--------|--------|------|
| **Commands** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` | Default: `/opsx:propose`, `/opsx:apply`, `/opsx:archive` (expanded workflow commands optional) |
| **Commands** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` | Default: `/opsx:propose`, `/opsx:apply`, `/opsx:sync`, `/opsx:archive` (expanded workflow commands optional) |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Core command listings are now inconsistent within this doc.

After moving sync into default core, some command lists still reflect the old split (and Line 11 omits explore). Please align all “default core” and “expanded” sections in this file to avoid user confusion.

📝 Suggested doc alignment
-| **Commands** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` | Default: `/opsx:propose`, `/opsx:apply`, `/opsx:sync`, `/opsx:archive` (expanded workflow commands optional) |
+| **Commands** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` | Default: `/opsx:propose`, `/opsx:explore`, `/opsx:apply`, `/opsx:sync`, `/opsx:archive` (expanded workflow commands optional) |
 **Default (`core` profile):**
 | Command | Purpose |
 |---------|---------|
 | `/opsx:propose` | Create a change and generate planning artifacts in one step |
 | `/opsx:explore` | Think through ideas with no structure |
 | `/opsx:apply` | Implement tasks from tasks.md |
+| `/opsx:sync` | Preview/spec-merge without archiving |
 | `/opsx:archive` | Finalize and archive the change |

 **Expanded workflow (custom selection):**
 ...
-| `/opsx:sync` | Preview/spec-merge without archiving |

Also applies to: 87-87

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/migration-guide.md` at line 11, Update the command listings so the
“default core” and “expanded workflow” sections are consistent: ensure the
default core includes /opsx:propose, /opsx:apply, /opsx:sync, /opsx:archive and
also include /opsx:explore (which was omitted), and make the expanded/optional
list reflect only additional commands beyond those core ones; search for
occurrences of /openspec:proposal, /openspec:apply, /openspec:archive and
/opsx:propose, /opsx:apply, /opsx:sync, /opsx:archive, /opsx:explore (including
the other occurrence mentioned in the comment) and replace or reconcile them so
every command table and sentence consistently shows sync in core and explore
included where appropriate.

| **Workflow** | Create all artifacts at once | Create incrementally or all at once—your choice |
| **Going back** | Awkward phase gates | Natural—update any artifact anytime |
| **Customization** | Fixed structure | Schema-driven, fully hackable |
Expand Down Expand Up @@ -84,7 +84,7 @@ Don't worry about getting it perfect. We're still learning what works best here,

Both `openspec init` and `openspec update` detect legacy files and guide you through the same cleanup process. Use whichever fits your situation:

- New installs default to profile `core` (`propose`, `explore`, `apply`, `archive`).
- New installs default to profile `core` (`propose`, `explore`, `apply`, `sync`, `archive`).
- Migrated installs preserve your previously installed workflows by writing a `custom` profile when needed.

### Using `openspec init`
Expand Down Expand Up @@ -561,6 +561,7 @@ project/
│ ├── openspec-propose/ # default core profile
│ ├── openspec-explore/
│ ├── openspec-apply-change/
│ ├── openspec-sync-specs/
│ └── ... # expanded profile adds new/continue/ff/etc.
├── CLAUDE.md # OpenSpec markers removed, your content preserved
└── AGENTS.md # OpenSpec markers removed, your content preserved
Expand Down
6 changes: 3 additions & 3 deletions docs/opsx.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ openspec init

This creates skills in `.claude/skills/` (or equivalent) that AI coding assistants auto-detect.

By default, OpenSpec uses the `core` workflow profile (`propose`, `explore`, `apply`, `archive`). If you want the expanded workflow commands (`new`, `continue`, `ff`, `verify`, `sync`, `bulk-archive`, `onboard`), configure them with `openspec config profile` and apply with `openspec update`.
By default, OpenSpec uses the `core` workflow profile (`propose`, `explore`, `apply`, `sync`, `archive`). If you want the expanded workflow commands (`new`, `continue`, `ff`, `verify`, `bulk-archive`, `onboard`), configure them with `openspec config profile` and apply with `openspec update`.

During setup, you'll be prompted to create a **project config** (`openspec/config.yaml`). This is optional but recommended.

Expand Down Expand Up @@ -164,7 +164,7 @@ rules:
| `/opsx:ff` | Fast-forward planning artifacts (expanded workflow) |
| `/opsx:apply` | Implement tasks, updating artifacts as needed |
| `/opsx:verify` | Validate implementation against artifacts (expanded workflow) |
| `/opsx:sync` | Sync delta specs to main (expanded workflow, optional) |
| `/opsx:sync` | Sync delta specs to main (default workflow, optional) |
| `/opsx:archive` | Archive when done |
| `/opsx:bulk-archive` | Archive multiple completed changes (expanded workflow) |
| `/opsx:onboard` | Guided walkthrough of an end-to-end change (expanded workflow) |
Expand Down Expand Up @@ -313,7 +313,7 @@ Think of it like git branches:
## Architecture Deep Dive

This section explains how OPSX works under the hood and how it compares to the legacy workflow.
Examples in this section use the expanded command set (`new`, `continue`, etc.); default `core` users can map the same flow to `propose → apply → archive`.
Examples in this section use the expanded command set (`new`, `continue`, etc.); default `core` users can map the same flow to `propose → apply → sync → archive`.

### Philosophy: Phases vs Actions

Expand Down
5 changes: 3 additions & 2 deletions docs/supported-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ By default, OpenSpec uses the `core` profile, which includes:
- `propose`
- `explore`
- `apply`
- `sync`
- `archive`

You can enable expanded workflows (`new`, `continue`, `ff`, `verify`, `sync`, `bulk-archive`, `onboard`) via `openspec config profile`, then run `openspec update`.
You can enable expanded workflows (`new`, `continue`, `ff`, `verify`, `bulk-archive`, `onboard`) via `openspec config profile`, then run `openspec update`.

## Tool Directory Reference

Expand Down Expand Up @@ -79,7 +80,7 @@ openspec init --profile core

OpenSpec installs workflow artifacts based on selected workflows:

- **Core profile (default):** `propose`, `explore`, `apply`, `archive`
- **Core profile (default):** `propose`, `explore`, `apply`, `sync`, `archive`
- **Custom selection:** any subset of all workflow IDs:
`propose`, `explore`, `new`, `continue`, `apply`, `ff`, `sync`, `archive`, `bulk-archive`, `verify`, `onboard`

Expand Down
5 changes: 3 additions & 2 deletions docs/workflows.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,18 @@ New installs default to `core`, which provides:
- `/opsx:propose`
- `/opsx:explore`
- `/opsx:apply`
- `/opsx:sync`
- `/opsx:archive`

Typical flow:

```text
/opsx:propose ──► /opsx:apply ──► /opsx:archive
/opsx:propose ──► /opsx:apply ──► /opsx:sync ──► /opsx:archive
```

### Expanded/Full Workflow (custom selection)

If you want explicit scaffold-and-build commands (`/opsx:new`, `/opsx:continue`, `/opsx:ff`, `/opsx:verify`, `/opsx:sync`, `/opsx:bulk-archive`, `/opsx:onboard`), enable them with:
If you want explicit scaffold-and-build commands (`/opsx:new`, `/opsx:continue`, `/opsx:ff`, `/opsx:verify`, `/opsx:bulk-archive`, `/opsx:onboard`), enable them with:

```bash
openspec config profile
Expand Down
2 changes: 1 addition & 1 deletion src/core/profiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import type { Profile } from './global-config.js';
* Core workflows included in the 'core' profile.
* These provide the streamlined experience for new users.
*/
export const CORE_WORKFLOWS = ['propose', 'explore', 'apply', 'archive'] as const;
export const CORE_WORKFLOWS = ['propose', 'explore', 'apply', 'sync', 'archive'] as const;

/**
* All available workflows in the system.
Expand Down
27 changes: 26 additions & 1 deletion src/core/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import {
type LegacyDetectionResult,
} from './legacy-cleanup.js';
import { isInteractive } from '../utils/interactive.js';
import { getGlobalConfig, type Delivery } from './global-config.js';
import { getGlobalConfig, type Delivery, type Profile } from './global-config.js';
import { getProfileWorkflows, ALL_WORKFLOWS } from './profiles.js';
import { getAvailableTools } from './available-tools.js';
import {
Expand All @@ -50,6 +50,7 @@ import {

const require = createRequire(import.meta.url);
const { version: OPENSPEC_VERSION } = require('../../package.json');
const OLD_CORE_WORKFLOWS = ['propose', 'explore', 'apply', 'archive'] as const;

/**
* Options for the update command.
Expand Down Expand Up @@ -155,6 +156,7 @@ export class UpdateCommand {
// Still check for new tool directories and extra workflows
this.detectNewTools(resolvedProjectPath, configuredTools);
this.displayExtraWorkflowsNote(resolvedProjectPath, configuredTools, desiredWorkflows);
this.displayOldCoreCustomProfileNote(profile, globalConfig.workflows);
return;
}

Expand Down Expand Up @@ -282,6 +284,7 @@ export class UpdateCommand {

// 14. Display note about extra workflows not in profile
this.displayExtraWorkflowsNote(resolvedProjectPath, configuredAndNewTools, desiredWorkflows);
this.displayOldCoreCustomProfileNote(profile, globalConfig.workflows);

// 15. List affected tools
if (updatedTools.length > 0) {
Expand Down Expand Up @@ -369,6 +372,28 @@ export class UpdateCommand {
}
}

/**
* Suggest opting back into core when a custom profile still matches the old
* pre-sync core set. Keep custom profiles user-owned; do not mutate them.
*/
private displayOldCoreCustomProfileNote(profile: Profile, workflows?: readonly string[]): void {
if (profile !== 'custom' || !workflows) {
return;
}

const workflowSet = new Set(workflows);
const matchesOldCore =
workflowSet.size === OLD_CORE_WORKFLOWS.length &&
OLD_CORE_WORKFLOWS.every((workflow) => workflowSet.has(workflow));

if (!matchesOldCore) {
return;
}

console.log(chalk.dim('Note: The core profile now includes sync. Your custom profile is preserving the old core workflow set.'));
console.log(chalk.dim('Run `openspec config profile core` and then `openspec update` to add sync.'));
}

/**
* Removes skill directories for workflows when delivery changed to commands-only.
* Returns the number of directories removed.
Expand Down
Loading
Loading