@codewalla_india/openspec 1.3.5 โ†’ 1.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,272 +1,271 @@
1
- <p align="center">
2
- <a href="https://github.com/codewalla-engineering/openspec-upstream-sync">
3
- <picture>
4
- <source srcset="assets/codewalla_logo.png" media="(prefers-color-scheme: dark)">
5
- <source srcset="assets/codewalla_bg.png" media="(prefers-color-scheme: light)">
6
- <img src="assets/codewalla_logo.png" alt="OpenSpec logo" height="64">
7
- </picture>
8
- </a>
9
-
10
- </p>
11
- <p align="center">Spec-driven development for AI coding assistants.</p>
12
- <p align="center">
13
- <a href="https://github.com/codewalla-engineering/openspec-upstream-sync/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/codewalla-engineering/openspec-upstream-sync/actions/workflows/ci.yml/badge.svg" /></a>
14
- <a href="https://www.npmjs.com/package/@codewalla_india/openspec"><img alt="npm version" src="https://img.shields.io/npm/v/@codewalla_india/openspec?style=flat-square" /></a>
15
- <a href="https://nodejs.org/"><img alt="node version" src="https://img.shields.io/node/v/@codewalla_india/openspec?style=flat-square" /></a>
16
- <a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" /></a>
17
- <a href="https://conventionalcommits.org"><img alt="Conventional Commits" src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=flat-square" /></a>
18
- <a href="https://discord.gg/YctCnvvshC"><img alt="Discord" src="https://img.shields.io/badge/Discord-Join%20the%20community-5865F2?logo=discord&logoColor=white&style=flat-square" /></a>
19
- </p>
20
-
21
- <p align="center">
22
- <img src="assets/codewalla_bg.png" alt="OpenSpec dashboard preview" width="90%">
23
- </p>
24
-
25
- <p align="center">
26
- Follow <a href="https://x.com/0xTab">@0xTab on X</a> for updates ยท Join the <a href="https://discord.gg/YctCnvvshC">OpenSpec Discord</a> for help and questions.
27
- </p>
28
-
29
- <p align="center">
30
- <sub>๐Ÿš€ <strong>New:</strong> <a href="docs/opsx.md">OPSX Workflow</a> โ€” schema-driven, hackable, fluid. Iterate on workflows without code changes.</sub>
31
- </p>
32
-
33
- # OpenSpec
34
-
35
- OpenSpec aligns humans and AI coding assistants with spec-driven development so you agree on what to build before any code is written. **No API keys required.**
36
-
37
- ## ๐ŸŽฏ Why OpenSpec?
38
-
39
- AI coding assistants are powerful but unpredictable when requirements live in chat history. OpenSpec adds a lightweight specification workflow that locks intent before implementation, giving you deterministic, reviewable outputs.
40
-
41
- Key outcomes:
42
- - Human and AI stakeholders agree on specs before work begins
43
- - Structured change folders (proposals, tasks, and spec updates) keep scope explicit and auditable
44
- - Shared visibility into what's proposed, active, or archived
45
- - Works with the AI tools you already use: custom slash commands where supported, context rules everywhere else
46
-
47
- ## ๐ŸŒŸ What's New in v1.8.0
48
-
49
- ### ๐Ÿš€ OPSX Workflow - The New Standard
50
-
51
- **OPSX is now the default workflow for OpenSpec.** It's a fluid, iterative approach that replaces rigid phases with flexible actions you can take anytime.
52
-
53
- **Key improvements:**
54
- - **Schema-driven**: Edit `schema.yaml` and `templates/*.md` to customize workflows without code changes
55
- - **Fluid actions**: Create, implement, update, archive โ€” do any of them anytime
56
- - **Hackable**: Experiment with instructions, test granularly, customize workflows
57
- - **Team-ready**: Create workflows that match how your team actually works
58
-
59
- ```bash
60
- # Quick start with OPSX
61
- openspec init
62
- # Then in your AI chat:
63
- /opsx:explore # Think through ideas
64
- /opsx:propose # Create change with planning artifacts
65
- /opsx:apply # Implement tasks
66
- /opsx:archive # Archive when done
67
- ```
68
-
69
- ### ๐Ÿ†• New AI Tool Integrations
70
-
71
- - **Atlassian Rovo Dev CLI** support (`--tools rovodev`)
72
- - **MiniMax Code** as a global skills-only tool target
73
- - **Enhanced GitHub Copilot** integration with opt-in cloud coding agent files
74
- - **Improved Codex skills** now use the shared `.agents` directory
75
-
76
- ### ๏ฟฝ New Plan Artifact
77
-
78
- - **Mandatory planning artifact** with implementation guidance
79
- - **Code maps** showing files to create, modify, and delete
80
- - **Implementation order** with sequenced steps
81
- - **Test plans** covering unit, integration, and manual testing
82
- - **Risk assessment** with mitigation strategies
83
- - **Dependency chain**: specs โ†’ design โ†’ plan โ†’ tasks
84
-
85
- ### ๐Ÿ”ง Enhanced Features
86
-
87
- - **OPSX Modify Command** (experimental): `/opsx:modify` for revising planning artifacts before implementation
88
- - **Dependency propagation**: Automatic updates to dependent artifacts when modifying
89
- - **Conflict detection**: Identifies conflicts with manual edits before modification
90
- - **Modification history**: Tracks all artifact changes with timestamps
91
-
92
- ### ๏ฟฝ๐Ÿ”ง Enhanced Features
93
-
94
- - **Capability retirement**: Automatically retire capabilities when changes remove their last requirements
95
- - **Multi-language validation**: `openspec validate` now treats English `SHALL`/`MUST` as guidance in normal mode
96
- - **Better task progress**: Counts indented sub-tasks and provides more accurate progress tracking
97
- - **Improved archive guidance**: Better error messages and flag suggestions for non-interactive environments
98
-
99
- ## ๐Ÿ“š How It Works
100
-
101
- ```
102
- โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
103
- โ”‚ Draft Change โ”‚
104
- โ”‚ Proposal โ”‚
105
- โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
106
- โ”‚ share intent with your AI
107
- โ–ผ
108
- โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
109
- โ”‚ Review & Align โ”‚
110
- โ”‚ (edit specs/tasks) โ”‚โ—€โ”€โ”€โ”€โ”€ feedback loop โ”€โ”€โ”€โ”€โ”€โ”€โ”
111
- โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
112
- โ”‚ approved plan โ”‚
113
- โ–ผ โ”‚
114
- โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
115
- โ”‚ Implement Tasks โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
116
- โ”‚ (AI writes code) โ”‚
117
- โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
118
- โ”‚ ship the change
119
- โ–ผ
120
- โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
121
- โ”‚ Archive & Update โ”‚
122
- โ”‚ Specs (source) โ”‚
123
- โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
124
-
125
- 1. Draft a change proposal that captures the spec updates you want
126
- 2. Review the proposal with your AI assistant until everyone agrees
127
- 3. Implement tasks that reference the agreed specs
128
- 4. Archive the change to merge the approved updates back into the source-of-truth specs
129
- ```
130
-
131
- ## ๐Ÿš€ Getting Started
132
-
133
- ### Prerequisites
134
- - **Node.js >= 20.19.0** - Check your version with `node --version`
135
-
136
- ### Step 1: Install the CLI globally
137
-
138
- **Option A: Using npm**
139
- ```bash
140
- npm install -g @codewalla_india/openspec@latest
141
- ```
142
-
143
- Verify installation:
144
- ```bash
145
- openspec --version
146
- ```
147
-
148
- **Option B: Using Nix (NixOS and Nix package manager)**
149
- ```bash
150
- nix run github:codewalla-engineering/openspec-upstream-sync -- init
151
- ```
152
-
153
- Or install to your profile:
154
- ```bash
155
- nix profile install github:codewalla-engineering/openspec-upstream-sync
156
- ```
157
-
158
- ### Step 2: Initialize OpenSpec in your project
159
-
160
- ```bash
161
- cd your-project
162
- openspec init
163
- ```
164
-
165
- This creates:
166
- - `openspec/` directory for your specs and changes
167
- - AI tool integration files (slash commands or skills)
168
- - Optional project configuration (`openspec/config.yaml`)
169
-
170
- ### Step 3: Start using OpenSpec
171
-
172
- **In your AI assistant's chat:**
173
-
174
- ```bash
175
- # Explore an idea (recommended first step)
176
- /opsx:explore
177
-
178
- # Create a new change
179
- /opsx:propose add-dark-mode
180
-
181
- # Implement the tasks
182
- /opsx:apply
183
-
184
- # Archive when complete
185
- /opsx:archive
186
- ```
187
-
188
- ## ๐Ÿ› ๏ธ Supported AI Tools
189
-
190
- OpenSpec integrates with 30+ AI coding assistants. Here are the most popular:
191
-
192
- ### Native Slash Commands
193
- These tools have built-in OpenSpec commands:
194
-
195
- | Tool | Commands |
196
- |------|----------|
197
- | **Claude Code** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` |
198
- | **Cursor** | `/openspec-proposal`, `/openspec-apply`, `/openspec:archive` |
199
- | **GitHub Copilot** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` |
200
- | **Windsurf** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` |
201
- | **Continue** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` |
202
- | **Cline** | Workflows in `.clinerules/workflows/` directory |
203
- | **Codex** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (auto-installed) |
204
-
205
- ### AGENTS.md Compatible
206
- These tools automatically read workflow instructions from `openspec/AGENTS.md`:
207
-
208
- | Tools |
209
- |-------|
210
- | Amp โ€ข Jules โ€ข Others |
211
-
212
- For the complete list of supported tools, see [Supported Tools](docs/supported-tools.md).
213
-
214
- ## ๐Ÿ“– Documentation
215
-
216
- ### Start Here
217
- - [Getting Started](docs/getting-started.md) - Install, initialize, and run your first change
218
- - [OPSX Workflow](docs/opsx.md) - The new fluid, schema-driven workflow
219
- - [How Commands Work](docs/how-commands-work.md) - Where to type slash commands vs terminal commands
220
-
221
- ### Core Concepts
222
- - [Core Concepts at a Glance](docs/overview.md) - The mental model on one page
223
- - [Concepts](docs/concepts.md) - In-depth explanation of specs, changes, artifacts
224
- - [Glossary](docs/glossary.md) - Every term defined in one place
225
-
226
- ### Day-to-Day Usage
227
- - [Workflows](docs/workflows.md) - Common patterns and when to reach for each command
228
- - [Examples & Recipes](docs/examples.md) - Full walkthroughs of real changes
229
- - [Writing Good Specs](docs/writing-specs.md) - What strong requirements look like
230
- - [Reviewing Changes](docs/reviewing-changes.md) - The two-minute review pass
231
- - [Commands Reference](docs/commands.md) - Complete reference for all OPSX commands including `/opsx:modify`
232
-
233
- ### Advanced
234
- - [Customization](docs/customization.md) - Project config, custom schemas, shared context
235
- - [Multi-Language](docs/multi-language.md) - Generate artifacts in other languages
236
- - [Stores (beta)](docs/stores-beta/user-guide.md) - Plan across repos and teams
237
-
238
- ### Help
239
- - [FAQ](docs/faq.md) - Quick answers to common questions
240
- - [Troubleshooting](docs/troubleshooting.md) - Concrete fixes for concrete failures
241
- - [Migration Guide](docs/migration-guide.md) - Moving from legacy workflow to OPSX
242
-
243
- ## ๐Ÿ”„ Migration from Legacy Workflow
244
-
245
- If you're using the old OpenSpec workflow, the [Migration Guide](docs/migration-guide.md) explains what changed and how to transition. Your existing work is safe โ€” the migration is non-destructive.
246
-
247
- ## ๐Ÿค Contributing
248
-
249
- We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. The most valuable contributions are:
250
-
251
- - Documentation improvements
252
- - Bug fixes
253
- - New AI tool integrations
254
- - Workflow enhancements
255
-
256
- ## ๐Ÿ“„ License
257
-
258
- MIT License - see [LICENSE](LICENSE) file for details
259
-
260
- ## ๐Ÿ†˜ Support
261
-
262
- - **Discord:** [discord.gg/YctCnvvshC](https://discord.gg/YctCnvvshC) for questions, ideas, and help
263
- - **GitHub Issues:** [github.com/codewalla-engineering/openspec-upstream-sync/issues](https://github.com/codewalla-engineering/openspec-upstream-sync/issues) for bugs and feature requests
264
- - **Feedback:** Run `openspec feedback "your message"` to send feedback directly from your terminal
265
-
266
- ## ๐ŸŒŸ Acknowledgments
267
-
268
- Built with โค๏ธ for the AI-assisted development community. Special thanks to all contributors who make OpenSpec better every day.
269
-
270
- ---
271
-
1
+ <p align="center">
2
+ <a href="https://github.com/codewalla-engineering/openspec-upstream-sync">
3
+ <picture>
4
+ <source srcset="assets/codewalla_bg.png" media="(prefers-color-scheme: dark)">
5
+ <source srcset="assets/codewalla_bg.png" media="(prefers-color-scheme: light)">
6
+ <img src="assets/codewalla_bg.png" alt="OpenSpec logo" height="64">
7
+ </picture>
8
+ </a>
9
+
10
+ </p>
11
+ <p align="center">Spec-driven development for AI coding assistants.</p>
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/@codewalla_india/openspec"><img alt="npm version" src="https://img.shields.io/npm/v/@codewalla_india/openspec?style=flat-square" /></a>
14
+ <a href="https://nodejs.org/"><img alt="node version" src="https://img.shields.io/node/v/@codewalla_india/openspec?style=flat-square" /></a>
15
+ <a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" /></a>
16
+ <a href="https://conventionalcommits.org"><img alt="Conventional Commits" src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=flat-square" /></a>
17
+ <a href="https://discord.gg/YctCnvvshC"><img alt="Discord" src="https://img.shields.io/badge/Discord-Join%20the%20community-5865F2?logo=discord&logoColor=white&style=flat-square" /></a>
18
+ </p>
19
+
20
+ <p align="center">
21
+ <img src="assets/codewalla_bg.png" alt="OpenSpec dashboard preview" width="90%">
22
+ </p>
23
+
24
+ <p align="center">
25
+ Follow <a href="https://x.com/0xTab">@0xTab on X</a> for updates ยท Join the <a href="https://discord.gg/YctCnvvshC">OpenSpec Discord</a> for help and questions.
26
+ </p>
27
+
28
+ <p align="center">
29
+ <sub>๐Ÿš€ <strong>New:</strong> <a href="docs/opsx.md">OPSX Workflow</a> โ€” schema-driven, hackable, fluid. Iterate on workflows without code changes.</sub>
30
+ </p>
31
+
32
+ # OpenSpec
33
+
34
+ OpenSpec aligns humans and AI coding assistants with spec-driven development so you agree on what to build before any code is written. **No API keys required.**
35
+
36
+ ## ๐ŸŽฏ Why OpenSpec?
37
+
38
+ AI coding assistants are powerful but unpredictable when requirements live in chat history. OpenSpec adds a lightweight specification workflow that locks intent before implementation, giving you deterministic, reviewable outputs.
39
+
40
+ Key outcomes:
41
+ - Human and AI stakeholders agree on specs before work begins
42
+ - Structured change folders (proposals, tasks, and spec updates) keep scope explicit and auditable
43
+ - Shared visibility into what's proposed, active, or archived
44
+ - Works with the AI tools you already use: custom slash commands where supported, context rules everywhere else
45
+
46
+ ## ๐ŸŒŸ What's New in v1.8.0
47
+
48
+ ### ๐Ÿš€ OPSX Workflow - The New Standard
49
+
50
+ **OPSX is now the default workflow for OpenSpec.** It's a fluid, iterative approach that replaces rigid phases with flexible actions you can take anytime.
51
+
52
+ **Key improvements:**
53
+ - **Schema-driven**: Edit `schema.yaml` and `templates/*.md` to customize workflows without code changes
54
+ - **Fluid actions**: Create, implement, update, archive โ€” do any of them anytime
55
+ - **Hackable**: Experiment with instructions, test granularly, customize workflows
56
+ - **Team-ready**: Create workflows that match how your team actually works
57
+
58
+ ```bash
59
+ # Quick start with OPSX
60
+ openspec init
61
+ # Then in your AI chat:
62
+ /opsx:explore # Think through ideas
63
+ /opsx:propose # Create change with planning artifacts
64
+ /opsx:apply # Implement tasks
65
+ /opsx:archive # Archive when done
66
+ ```
67
+
68
+ ### ๐Ÿ†• New AI Tool Integrations
69
+
70
+ - **Atlassian Rovo Dev CLI** support (`--tools rovodev`)
71
+ - **MiniMax Code** as a global skills-only tool target
72
+ - **Enhanced GitHub Copilot** integration with opt-in cloud coding agent files
73
+ - **Improved Codex skills** now use the shared `.agents` directory
74
+
75
+ ### ๏ฟฝ New Plan Artifact
76
+
77
+ - **Mandatory planning artifact** with implementation guidance
78
+ - **Code maps** showing files to create, modify, and delete
79
+ - **Implementation order** with sequenced steps
80
+ - **Test plans** covering unit, integration, and manual testing
81
+ - **Risk assessment** with mitigation strategies
82
+ - **Dependency chain**: specs โ†’ design โ†’ plan โ†’ tasks
83
+
84
+ ### ๐Ÿ”ง Enhanced Features
85
+
86
+ - **OPSX Modify Command** (experimental): `/opsx:modify` for revising planning artifacts before implementation
87
+ - **Dependency propagation**: Automatic updates to dependent artifacts when modifying
88
+ - **Conflict detection**: Identifies conflicts with manual edits before modification
89
+ - **Modification history**: Tracks all artifact changes with timestamps
90
+
91
+ ### ๏ฟฝ๐Ÿ”ง Enhanced Features
92
+
93
+ - **Capability retirement**: Automatically retire capabilities when changes remove their last requirements
94
+ - **Multi-language validation**: `openspec validate` now treats English `SHALL`/`MUST` as guidance in normal mode
95
+ - **Better task progress**: Counts indented sub-tasks and provides more accurate progress tracking
96
+ - **Improved archive guidance**: Better error messages and flag suggestions for non-interactive environments
97
+
98
+ ## ๐Ÿ“š How It Works
99
+
100
+ ```
101
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
102
+ โ”‚ Draft Change โ”‚
103
+ โ”‚ Proposal โ”‚
104
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
105
+ โ”‚ share intent with your AI
106
+ โ–ผ
107
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
108
+ โ”‚ Review & Align โ”‚
109
+ โ”‚ (edit specs/tasks) โ”‚โ—€โ”€โ”€โ”€โ”€ feedback loop โ”€โ”€โ”€โ”€โ”€โ”€โ”
110
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
111
+ โ”‚ approved plan โ”‚
112
+ โ–ผ โ”‚
113
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
114
+ โ”‚ Implement Tasks โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
115
+ โ”‚ (AI writes code) โ”‚
116
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
117
+ โ”‚ ship the change
118
+ โ–ผ
119
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
120
+ โ”‚ Archive & Update โ”‚
121
+ โ”‚ Specs (source) โ”‚
122
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
123
+
124
+ 1. Draft a change proposal that captures the spec updates you want
125
+ 2. Review the proposal with your AI assistant until everyone agrees
126
+ 3. Implement tasks that reference the agreed specs
127
+ 4. Archive the change to merge the approved updates back into the source-of-truth specs
128
+ ```
129
+
130
+ ## ๐Ÿš€ Getting Started
131
+
132
+ ### Prerequisites
133
+ - **Node.js >= 20.19.0** - Check your version with `node --version`
134
+
135
+ ### Step 1: Install the CLI globally
136
+
137
+ **Option A: Using npm**
138
+ ```bash
139
+ npm install -g @codewalla_india/openspec@latest
140
+ ```
141
+
142
+ Verify installation:
143
+ ```bash
144
+ openspec --version
145
+ ```
146
+
147
+ **Option B: Using Nix (NixOS and Nix package manager)**
148
+ ```bash
149
+ nix run github:codewalla-engineering/openspec-upstream-sync -- init
150
+ ```
151
+
152
+ Or install to your profile:
153
+ ```bash
154
+ nix profile install github:codewalla-engineering/openspec-upstream-sync
155
+ ```
156
+
157
+ ### Step 2: Initialize OpenSpec in your project
158
+
159
+ ```bash
160
+ cd your-project
161
+ openspec init
162
+ ```
163
+
164
+ This creates:
165
+ - `openspec/` directory for your specs and changes
166
+ - AI tool integration files (slash commands or skills)
167
+ - Optional project configuration (`openspec/config.yaml`)
168
+
169
+ ### Step 3: Start using OpenSpec
170
+
171
+ **In your AI assistant's chat:**
172
+
173
+ ```bash
174
+ # Explore an idea (recommended first step)
175
+ /opsx:explore
176
+
177
+ # Create a new change
178
+ /opsx:propose add-dark-mode
179
+
180
+ # Implement the tasks
181
+ /opsx:apply
182
+
183
+ # Archive when complete
184
+ /opsx:archive
185
+ ```
186
+
187
+ ## ๐Ÿ› ๏ธ Supported AI Tools
188
+
189
+ OpenSpec integrates with 30+ AI coding assistants. Here are the most popular:
190
+
191
+ ### Native Slash Commands
192
+ These tools have built-in OpenSpec commands:
193
+
194
+ | Tool | Commands |
195
+ |------|----------|
196
+ | **Claude Code** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` |
197
+ | **Cursor** | `/openspec-proposal`, `/openspec-apply`, `/openspec:archive` |
198
+ | **GitHub Copilot** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` |
199
+ | **Windsurf** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` |
200
+ | **Continue** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` |
201
+ | **Cline** | Workflows in `.clinerules/workflows/` directory |
202
+ | **Codex** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (auto-installed) |
203
+
204
+ ### AGENTS.md Compatible
205
+ These tools automatically read workflow instructions from `openspec/AGENTS.md`:
206
+
207
+ | Tools |
208
+ |-------|
209
+ | Amp โ€ข Jules โ€ข Others |
210
+
211
+ For the complete list of supported tools, see [Supported Tools](docs/supported-tools.md).
212
+
213
+ ## ๐Ÿ“– Documentation
214
+
215
+ ### Start Here
216
+ - [Getting Started](docs/getting-started.md) - Install, initialize, and run your first change
217
+ - [OPSX Workflow](docs/opsx.md) - The new fluid, schema-driven workflow
218
+ - [How Commands Work](docs/how-commands-work.md) - Where to type slash commands vs terminal commands
219
+
220
+ ### Core Concepts
221
+ - [Core Concepts at a Glance](docs/overview.md) - The mental model on one page
222
+ - [Concepts](docs/concepts.md) - In-depth explanation of specs, changes, artifacts
223
+ - [Glossary](docs/glossary.md) - Every term defined in one place
224
+
225
+ ### Day-to-Day Usage
226
+ - [Workflows](docs/workflows.md) - Common patterns and when to reach for each command
227
+ - [Examples & Recipes](docs/examples.md) - Full walkthroughs of real changes
228
+ - [Writing Good Specs](docs/writing-specs.md) - What strong requirements look like
229
+ - [Reviewing Changes](docs/reviewing-changes.md) - The two-minute review pass
230
+ - [Commands Reference](docs/commands.md) - Complete reference for all OPSX commands including `/opsx:modify`
231
+
232
+ ### Advanced
233
+ - [Customization](docs/customization.md) - Project config, custom schemas, shared context
234
+ - [Multi-Language](docs/multi-language.md) - Generate artifacts in other languages
235
+ - [Stores (beta)](docs/stores-beta/user-guide.md) - Plan across repos and teams
236
+
237
+ ### Help
238
+ - [FAQ](docs/faq.md) - Quick answers to common questions
239
+ - [Troubleshooting](docs/troubleshooting.md) - Concrete fixes for concrete failures
240
+ - [Migration Guide](docs/migration-guide.md) - Moving from legacy workflow to OPSX
241
+
242
+ ## ๐Ÿ”„ Migration from Legacy Workflow
243
+
244
+ If you're using the old OpenSpec workflow, the [Migration Guide](docs/migration-guide.md) explains what changed and how to transition. Your existing work is safe โ€” the migration is non-destructive.
245
+
246
+ ## ๐Ÿค Contributing
247
+
248
+ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. The most valuable contributions are:
249
+
250
+ - Documentation improvements
251
+ - Bug fixes
252
+ - New AI tool integrations
253
+ - Workflow enhancements
254
+
255
+ ## ๐Ÿ“„ License
256
+
257
+ MIT License - see [LICENSE](LICENSE) file for details
258
+
259
+ ## ๐Ÿ†˜ Support
260
+
261
+ - **Discord:** [discord.gg/YctCnvvshC](https://discord.gg/YctCnvvshC) for questions, ideas, and help
262
+ - **GitHub Issues:** [github.com/codewalla-engineering/openspec-upstream-sync/issues](https://github.com/codewalla-engineering/openspec-upstream-sync/issues) for bugs and feature requests
263
+ - **Feedback:** Run `openspec feedback "your message"` to send feedback directly from your terminal
264
+
265
+ ## ๐ŸŒŸ Acknowledgments
266
+
267
+ Built with โค๏ธ for the AI-assisted development community. Special thanks to all contributors who make OpenSpec better every day.
268
+
269
+ ---
270
+
272
271
  **โšก Powered by OPSX Workflow โ€” the future of spec-driven development**
package/dist/cli/index.js CHANGED
@@ -643,6 +643,8 @@ newCmd
643
643
  process.exit(1);
644
644
  }
645
645
  });
646
+ // Top-level modify command
647
+ program.addCommand(createModifyCommand());
646
648
  export { program };
647
649
  export function runCli(argv = process.argv) {
648
650
  program.parse(argv);
@@ -7,7 +7,7 @@ import { ConflictDetector } from '../core/modify/conflict-detector.js';
7
7
  import { HistoryTracker } from '../core/modify/history-tracker.js';
8
8
  import { resolveCurrentPlanningHomeSync } from '../core/planning-home.js';
9
9
  import { resolveArtifactOutputPath } from '../core/artifact-graph/outputs.js';
10
- import { trackArtifactModifyRequested, trackArtifactRevisionRequested, trackChangeProposalReady } from '../telemetry/index.js';
10
+ import { trackArtifactModifyRequested, trackArtifactRevisionRequested, trackArtifactContentChanged, trackChangeProposalReady } from '../telemetry/index.js';
11
11
  /**
12
12
  * Creates the modify command.
13
13
  */
@@ -17,6 +17,7 @@ export function createModifyCommand() {
17
17
  .option('--artifact <id>', 'Artifact ID to modify')
18
18
  .option('--workflow-input <path>', 'Workflow input file')
19
19
  .option('--editor', 'Open in editor after modification')
20
+ .option('--change <id>', 'Change name')
20
21
  .option('--json', 'Output JSON')
21
22
  .argument('[change]', 'Change name')
22
23
  .action(async (changeName, options) => {
@@ -24,7 +25,7 @@ export function createModifyCommand() {
24
25
  artifact: options.artifact,
25
26
  workflowInput: options.workflowInput,
26
27
  editor: options.editor,
27
- change: changeName,
28
+ change: changeName || options.change,
28
29
  json: options.json,
29
30
  };
30
31
  try {
@@ -110,6 +111,7 @@ async function executeModify(options) {
110
111
  await historyTracker.recordModification(options.change, [artifactId], options.workflowInput || 'Manual modification');
111
112
  // Emit telemetry events
112
113
  await trackArtifactModifyRequested(options.change, artifactId);
114
+ await trackArtifactContentChanged(options.change, artifactId);
113
115
  // Track proposal ready if proposal artifact is being modified
114
116
  if (artifactId === 'proposal') {
115
117
  await trackChangeProposalReady(options.change);
@@ -5,6 +5,7 @@ export interface ModificationRecord {
5
5
  }
6
6
  export interface ChangeMarker {
7
7
  modifyHistory: ModificationRecord[];
8
+ [key: string]: unknown;
8
9
  }
9
10
  /**
10
11
  * Tracks modification history in the change marker (.openspec.yaml).
@@ -20,15 +21,5 @@ export declare class HistoryTracker {
20
21
  * Gets the modification history for a change.
21
22
  */
22
23
  getHistory(changeName: string): Promise<ModificationRecord[]>;
23
- /**
24
- * Parses the change marker YAML content.
25
- * In a full implementation, this would use a proper YAML parser.
26
- */
27
- private parseMarker;
28
- /**
29
- * Stringifies the change marker to YAML format.
30
- * In a full implementation, this would use a proper YAML stringifier.
31
- */
32
- private stringifyMarker;
33
24
  }
34
25
  //# sourceMappingURL=history-tracker.d.ts.map
@@ -1,5 +1,6 @@
1
1
  import { readFile, writeFile } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
3
4
  /**
4
5
  * Tracks modification history in the change marker (.openspec.yaml).
5
6
  */
@@ -13,29 +14,28 @@ export class HistoryTracker {
13
14
  */
14
15
  async recordModification(changeName, modifiedArtifacts, intent) {
15
16
  const markerPath = join(this.changeRoot, changeName, '.openspec.yaml');
17
+ const newRecord = {
18
+ timestamp: new Date().toISOString(),
19
+ modifiedArtifacts,
20
+ intent,
21
+ };
16
22
  try {
17
23
  const content = await readFile(markerPath, 'utf-8');
18
- const marker = this.parseMarker(content);
19
- // Add new modification record
20
- marker.modifyHistory.push({
21
- timestamp: new Date().toISOString(),
22
- modifiedArtifacts,
23
- intent,
24
- });
25
- // Write back
26
- await writeFile(markerPath, this.stringifyMarker(marker), 'utf-8');
24
+ const parsed = parseYaml(content);
25
+ const marker = parsed ?? {};
26
+ const existingHistory = Array.isArray(marker.modifyHistory)
27
+ ? marker.modifyHistory
28
+ : [];
29
+ marker.modifyHistory = [...existingHistory, newRecord];
30
+ await writeFile(markerPath, stringifyYaml(marker, { sortMapEntries: false }), 'utf-8');
27
31
  }
28
32
  catch (error) {
29
33
  // If marker doesn't exist, create it
30
34
  if (error.code === 'ENOENT') {
31
35
  const marker = {
32
- modifyHistory: [{
33
- timestamp: new Date().toISOString(),
34
- modifiedArtifacts,
35
- intent,
36
- }],
36
+ modifyHistory: [newRecord],
37
37
  };
38
- await writeFile(markerPath, this.stringifyMarker(marker), 'utf-8');
38
+ await writeFile(markerPath, stringifyYaml(marker, { sortMapEntries: false }), 'utf-8');
39
39
  }
40
40
  else {
41
41
  throw error;
@@ -49,8 +49,11 @@ export class HistoryTracker {
49
49
  const markerPath = join(this.changeRoot, changeName, '.openspec.yaml');
50
50
  try {
51
51
  const content = await readFile(markerPath, 'utf-8');
52
- const marker = this.parseMarker(content);
53
- return marker.modifyHistory || [];
52
+ const parsed = parseYaml(content);
53
+ if (!parsed || !Array.isArray(parsed.modifyHistory)) {
54
+ return [];
55
+ }
56
+ return parsed.modifyHistory;
54
57
  }
55
58
  catch (error) {
56
59
  // If marker doesn't exist, return empty history
@@ -60,55 +63,5 @@ export class HistoryTracker {
60
63
  throw error;
61
64
  }
62
65
  }
63
- /**
64
- * Parses the change marker YAML content.
65
- * In a full implementation, this would use a proper YAML parser.
66
- */
67
- parseMarker(content) {
68
- // Simplified parsing - in production, use a YAML library
69
- const lines = content.split('\n');
70
- const marker = { modifyHistory: [] };
71
- let inHistory = false;
72
- let currentRecord = {};
73
- for (const line of lines) {
74
- if (line.trim() === 'modifyHistory:') {
75
- inHistory = true;
76
- continue;
77
- }
78
- if (inHistory) {
79
- if (line.trim().startsWith('- timestamp:')) {
80
- if (currentRecord.timestamp && currentRecord.modifiedArtifacts && currentRecord.intent) {
81
- marker.modifyHistory.push(currentRecord);
82
- }
83
- currentRecord = { timestamp: line.split(':')[1].trim() };
84
- }
85
- else if (line.trim().startsWith('modifiedArtifacts:')) {
86
- currentRecord.modifiedArtifacts = line.split(':')[1].trim().split(',').map(s => s.trim());
87
- }
88
- else if (line.trim().startsWith('intent:')) {
89
- currentRecord.intent = line.split(':')[1].trim();
90
- }
91
- }
92
- }
93
- // Add the last record
94
- if (currentRecord.timestamp && currentRecord.modifiedArtifacts && currentRecord.intent) {
95
- marker.modifyHistory.push(currentRecord);
96
- }
97
- return marker;
98
- }
99
- /**
100
- * Stringifies the change marker to YAML format.
101
- * In a full implementation, this would use a proper YAML stringifier.
102
- */
103
- stringifyMarker(marker) {
104
- // Simplified YAML generation - in production, use a YAML library
105
- let yaml = 'modifyHistory:\n';
106
- for (const record of marker.modifyHistory) {
107
- yaml += ` - timestamp: ${record.timestamp}\n`;
108
- yaml += ` modifiedArtifacts: [${record.modifiedArtifacts.join(', ')}]\n`;
109
- yaml += ` intent: ${record.intent}\n`;
110
- }
111
- return yaml;
112
- }
113
66
  }
114
67
  //# sourceMappingURL=history-tracker.js.map
@@ -38,7 +38,7 @@ export async function readIdentity() {
38
38
  try {
39
39
  const content = await fs.readFile(identityPath, 'utf-8');
40
40
  const parsed = JSON.parse(content);
41
- return parsed.identity || null;
41
+ return parsed.userId || parsed.identity || null;
42
42
  }
43
43
  catch (error) {
44
44
  if (error.code === 'ENOENT') {
@@ -59,7 +59,7 @@ export async function writeIdentity(identity) {
59
59
  // Create directory if it doesn't exist
60
60
  await fs.mkdir(identityDir, { recursive: true });
61
61
  // Write identity file
62
- await fs.writeFile(identityPath, JSON.stringify({ identity }, null, 2) + '\n');
62
+ await fs.writeFile(identityPath, JSON.stringify({ userId: identity }, null, 2) + '\n');
63
63
  // Set file permissions to 0600 (owner read/write only)
64
64
  // This works on Unix-like systems; on Windows it's a no-op
65
65
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codewalla_india/openspec",
3
- "version": "1.3.5",
3
+ "version": "1.3.6",
4
4
  "description": "AI-native system for spec-driven development",
5
5
  "keywords": [
6
6
  "openspec",