nova-spec 1.0.0 → 1.0.1

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
@@ -3,53 +3,49 @@
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <strong>Spec-Driven Development on top of Claude Code.</strong><br>
6
+ <strong>Spec-Driven Development for Claude Code and OpenCode.</strong><br>
7
7
  From a ticket to a merged PR in explicit steps, with architectural memory that doesn't decay.
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
11
  <a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
12
12
  <img alt="Status: experimental" src="https://img.shields.io/badge/status-experimental-orange.svg">
13
- <img alt="Built for Claude Code" src="https://img.shields.io/badge/built%20for-Claude%20Code-purple.svg">
13
+ <a href="https://www.npmjs.com/package/nova-spec"><img alt="npm" src="https://img.shields.io/npm/v/nova-spec.svg"></a>
14
+ <img alt="Built for Claude Code" src="https://img.shields.io/badge/built%20for-Claude%20Code%20%7C%20OpenCode-purple.svg">
14
15
  </p>
15
16
 
16
17
  ---
17
18
 
18
19
  ## What it is
19
20
 
20
- `nova-spec` adds seven `/nova-*` commands to Claude Code that turn a ticket into a traceable change: classify, close requirements, plan, implement task by task, review, and wrap up with commit + PR + memory update. Memory (`context/decisions/`, `context/gotchas/`, `context/services/`) lives in atomic markdown files that humans edit and `grep` finds.
21
+ `nova-spec` adds seven `/nova-*` slash commands to Claude Code (and OpenCode) that turn a ticket into a traceable change: classify, close requirements, plan, implement task by task, review, and wrap up with commit + PR + memory update.
21
22
 
22
- It's not a template or a generator. It's a set of conventions + commands that Claude Code runs as slash commands inside your repo.
23
+ Architectural memory (`context/decisions/`, `context/gotchas/`, `context/services/`) lives in atomic markdown files that humans edit and `grep` finds.
24
+
25
+ It's not a template or a generator. It's a set of conventions + commands that your AI agent runs as slash commands inside your repo.
23
26
 
24
27
  ## Who is this for
25
28
 
26
- - Developers using **Claude Code** (or OpenCode) on real projects, not toy demos.
29
+ - Developers using **Claude Code** or **OpenCode** on real projects, not toy demos.
27
30
  - Teams that want their AI agent to follow a **disciplined ticket → PR flow** instead of one-shotting code.
28
31
  - Anyone tired of **re-explaining the same architectural context** every new chat.
29
32
 
30
33
  If you only use Claude Code for one-off scripts, this is overkill. If you ship to production with it, read on.
31
34
 
32
- ## Why it exists
33
-
34
- Without discipline, an agent writes code fast and loses the *why*. The next ticket forces you to re-explain the same context. `nova-spec` enforces human checkpoints, separates spec from executable tasks, and leaves a trail in `context/` so the next ticket starts informed.
35
-
36
35
  ## Quickstart
37
36
 
38
37
  ```bash
39
- # 1. Clone nova-spec on your machine (one time only)
40
- git clone https://github.com/adansuku/nova-spec.git ~/tools/nova-spec
38
+ npx nova-spec init
39
+ ```
40
+
41
+ That's it. The interactive wizard asks where to install (global or per-project), which runtime (Claude Code, OpenCode, or both), and optionally your Jira connection. It generates a ready-to-use `config.yml` — no manual editing required.
41
42
 
42
- # 2. From the repo where you want to use it
43
- cd /path/to/your-project
44
- bash ~/tools/nova-spec/install.sh
43
+ Then open your editor and run your first ticket:
45
44
 
46
- # 3. Open Claude Code and launch your first ticket
47
- claude
45
+ ```
48
46
  /nova-start PROJ-123
49
47
  ```
50
48
 
51
- Full details in [INSTALL.md](./INSTALL.md).
52
-
53
49
  ## A taste of it
54
50
 
55
51
  What `/nova-start PROJ-42` actually does:
@@ -72,7 +68,7 @@ Loaded context:
72
68
  Next step: /nova-spec
73
69
  ```
74
70
 
75
- No code yet. The agent has classified the work, created the branch, and pulled in only the architectural decisions that matter for this ticket. From here you'd move on to `/nova-spec` to close requirements, then `/nova-plan`, then `/nova-build`.
71
+ No code yet. The agent classified the work, created the branch, and pulled in only the architectural decisions that matter for this ticket.
76
72
 
77
73
  ## Flow
78
74
 
@@ -82,7 +78,6 @@ No code yet. The agent has classified the work, created the branch, and pulled i
82
78
 
83
79
  | Command | What it does |
84
80
  |---|---|
85
- | `/nova-init` | One-off bootstrap: scans the repo and generates draft `context/services/` files with TODOs |
86
81
  | `/nova-start <TICKET>` | Pulls the ticket, classifies it (quick-fix / feature / architecture), creates a branch, loads context |
87
82
  | `/nova-spec` | Closes open decisions and writes `proposal.md` |
88
83
  | `/nova-plan` | Translates the spec into `tasks.md` (plan + tasks) |
@@ -90,8 +85,32 @@ No code yet. The agent has classified the work, created the branch, and pulled i
90
85
  | `/nova-review` | Final code review against spec, conventions and decisions |
91
86
  | `/nova-wrap` | Updates memory, archives the spec, creates commit and PR |
92
87
  | `/nova-status [TICKET]` | Current status of the ticket (read-only) |
88
+ | `/nova-sync` | Updates nova-spec core to the latest version |
89
+ | `/nova-diff <name>` | Shows diff between your custom override and the new core version |
90
+
91
+ `quick-fix` tickets skip `/nova-spec` and `/nova-plan`.
92
+
93
+ ## Customizing skills and commands
94
+
95
+ Place any file in `novaspec/custom/` to override the core version — same name, your rules:
93
96
 
94
- `quick-fix` tickets skip `/nova-spec` and `/nova-plan`. `/nova-init` is optional and runs only once when installing nova-spec into an existing repo.
97
+ ```
98
+ novaspec/
99
+ ├── skills/ ← core (managed by nova-spec)
100
+ └── custom/
101
+ └── skills/
102
+ └── nova-wrap/ ← your override, same name wins
103
+ ```
104
+
105
+ Run `/nova-sync` to update the core. Your `custom/` folder is never touched.
106
+
107
+ ## Keeping up to date
108
+
109
+ ```bash
110
+ npx nova-spec sync
111
+ ```
112
+
113
+ Updates the core, preserves your custom overrides and `config.yml`, and tells you if any of your overrides have upstream changes worth reviewing.
95
114
 
96
115
  ## Principles
97
116
 
@@ -102,15 +121,10 @@ No code yet. The agent has classified the work, created the branch, and pulled i
102
121
 
103
122
  ## Documentation
104
123
 
105
- - Detailed install: [INSTALL.md](./INSTALL.md)
106
- - Internal architecture: [novaspec/README.arch.md](./novaspec/README.arch.md)
107
- - Quick reference: [novaspec/README.quickref.md](./novaspec/README.quickref.md)
124
+ - Install options: [INSTALL.md](./INSTALL.md)
125
+ - Design philosophy: [PHILOSOPHY.md](./PHILOSOPHY.md)
108
126
  - Contributing: [CONTRIBUTING.md](./CONTRIBUTING.md)
109
127
 
110
- ## See also
111
-
112
- `nova-spec` was built using itself. The full development history — including specs, decisions, gotchas and dogfooding — is preserved in the lab repo: [adansuku/nova-spec-lab](https://github.com/adansuku/nova-spec-lab).
113
-
114
128
  ## License
115
129
 
116
130
  MIT — see [LICENSE](./LICENSE).
package/lib/installer.js CHANGED
@@ -150,9 +150,7 @@ function createSymlinks(destDir, dotDir) {
150
150
  for (const name of ['commands', 'skills', 'agents']) {
151
151
  const link = path.join(dir, name);
152
152
  const target = path.join('..', 'novaspec', name);
153
- if (fs.existsSync(link) || fs.lstatSync(link).isSymbolicLink?.()) {
154
- fs.rmSync(link, { recursive: true, force: true });
155
- }
153
+ fs.rmSync(link, { recursive: true, force: true });
156
154
  fs.symlinkSync(target, link);
157
155
  }
158
156
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nova-spec",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Spec-Driven Development framework for Claude Code and OpenCode",
5
5
  "bin": {
6
6
  "nova-spec": "./bin/nova-spec.js"