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 +42 -28
- package/lib/installer.js +1 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,53 +3,49 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<strong>Spec-Driven Development
|
|
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="
|
|
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.
|
|
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
|
-
|
|
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**
|
|
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
|
-
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
-
|
|
106
|
-
-
|
|
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
|
-
|
|
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
|
}
|