@novare-technologies/nvaid 0.1.0 → 0.2.0
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/LICENSE +21 -0
- package/dist/cli.js +12 -5
- package/package.json +7 -4
- package/templates/commands/apply.md +8 -0
- package/templates/commands/breakdown.md +8 -0
- package/templates/commands/contracts.md +8 -0
- package/templates/commands/install.md +63 -0
- package/templates/commands/intent.md +17 -3
- package/templates/nvaid/config.yml +14 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Novare SQE Armory
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/cli.js
CHANGED
|
@@ -270,8 +270,14 @@ function hasConfig(projectRoot) {
|
|
|
270
270
|
async function readConfig(projectRoot) {
|
|
271
271
|
const raw = await readFile2(configPath(projectRoot), "utf8");
|
|
272
272
|
const parsed = parse(raw) ?? {};
|
|
273
|
+
const install = parsed.install ?? {};
|
|
273
274
|
return {
|
|
274
275
|
schema: parsed.schema ?? "nvaid/v1",
|
|
276
|
+
install: {
|
|
277
|
+
config: install.config === true,
|
|
278
|
+
project_rules: install.project_rules === true,
|
|
279
|
+
design_code_dictionary: install.design_code_dictionary === true
|
|
280
|
+
},
|
|
275
281
|
project_name: parsed.project_name ?? "",
|
|
276
282
|
owning_repo: parsed.owning_repo ?? "",
|
|
277
283
|
tech_stack: { ...EMPTY_STACK, ...parsed.tech_stack ?? {} },
|
|
@@ -362,13 +368,14 @@ async function runInit(opts) {
|
|
|
362
368
|
);
|
|
363
369
|
p.outro(
|
|
364
370
|
[
|
|
365
|
-
"Next, in your AI chat:",
|
|
371
|
+
"Next, in your AI chat \u2014 run this FIRST:",
|
|
372
|
+
" /nvaid:install scan the project, fill config.yml + PROJECT-RULES + dictionary",
|
|
373
|
+
"",
|
|
374
|
+
"The workflow commands are blocked until /nvaid:install completes:",
|
|
366
375
|
' /nvaid:intent "..." draft the intent, then STOP for stakeholder approval',
|
|
367
376
|
" /nvaid:contracts after approval \u2014 draft the per-role contracts",
|
|
368
377
|
" /nvaid:breakdown cut into units (tagged by owning repo)",
|
|
369
|
-
" /nvaid:apply generate per-repo unit docs + branches"
|
|
370
|
-
"",
|
|
371
|
-
"Fill in nvaid/PROJECT-RULES.md and set owning_repo in nvaid/config.yml."
|
|
378
|
+
" /nvaid:apply generate per-repo unit docs + branches"
|
|
372
379
|
].join("\n")
|
|
373
380
|
);
|
|
374
381
|
}
|
|
@@ -455,7 +462,7 @@ async function runValidate() {
|
|
|
455
462
|
|
|
456
463
|
// src/cli.ts
|
|
457
464
|
var program = new Command();
|
|
458
|
-
program.name("nvaid").description("nvaid \u2014 install an AI-DLC skills + workflow toolkit into any coding agent").version(
|
|
465
|
+
program.name("nvaid").description("nvaid \u2014 install an AI-DLC skills + workflow toolkit into any coding agent").version(await nvaidVersion());
|
|
459
466
|
program.command("init").description("Onboard this repo: select coding agents, inject skills, create the nvaid/ folder").option("--agents <ids>", "comma-separated agent ids (skips the prompt)", (v) => v.split(",")).option("--owning-repo <tier>", "owning_repo value written to config.yml").option("--project-name <name>", "project_name value written to config.yml").option("-y, --yes", "accept defaults, no prompts (CI)").action(async (opts) => {
|
|
460
467
|
await runInit({
|
|
461
468
|
agents: opts.agents,
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@novare-technologies/nvaid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "nvaid — one CLI that installs an AI-DLC skills-and-workflow toolkit into any coding agent, and houses intents, config, and the design-code dictionary in a single nvaid/ folder.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"nvaid": "
|
|
7
|
+
"nvaid": "dist/cli.js"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
@@ -39,10 +39,13 @@
|
|
|
39
39
|
"yaml": "^2.4.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@types/node": "^
|
|
42
|
+
"@types/node": "^22.0.0",
|
|
43
43
|
"tsup": "^8.0.0",
|
|
44
44
|
"tsx": "^4.7.0",
|
|
45
45
|
"typescript": "^5.4.0",
|
|
46
|
-
"vitest": "^
|
|
46
|
+
"vitest": "^5.0.3"
|
|
47
|
+
},
|
|
48
|
+
"overrides": {
|
|
49
|
+
"esbuild": "^0.28.2"
|
|
47
50
|
}
|
|
48
51
|
}
|
|
@@ -7,6 +7,14 @@ precondition: unit-breakdown approved (Decomposition-Approved gate green)
|
|
|
7
7
|
|
|
8
8
|
# /nvaid:apply
|
|
9
9
|
|
|
10
|
+
## ⛔ Precondition: nvaid install must be complete
|
|
11
|
+
|
|
12
|
+
Read `nvaid/config.yml` and check the `install:` block. If `config`, `project_rules`, or
|
|
13
|
+
`design_code_dictionary` is not `true` (or the file is missing), **STOP** and tell the
|
|
14
|
+
user to run `/nvaid:install` first — name which flag(s) are false. Do not proceed until
|
|
15
|
+
all three are true.
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
Turn an **approved** unit-breakdown into construction-ready work: for each Unit, generate
|
|
11
19
|
its design doc in the Owning Repo named by the breakdown, and open the construction branch
|
|
12
20
|
per the `github` Skill.
|
|
@@ -7,6 +7,14 @@ precondition: Contracts drafted (/nvaid:contracts has run)
|
|
|
7
7
|
|
|
8
8
|
# /nvaid:breakdown
|
|
9
9
|
|
|
10
|
+
## ⛔ Precondition: nvaid install must be complete
|
|
11
|
+
|
|
12
|
+
Read `nvaid/config.yml` and check the `install:` block. If `config`, `project_rules`, or
|
|
13
|
+
`design_code_dictionary` is not `true` (or the file is missing), **STOP** and tell the
|
|
14
|
+
user to run `/nvaid:install` first — name which flag(s) are false. Do not proceed until
|
|
15
|
+
all three are true.
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
Produce `unit-breakdown.md` — the **Phase 5 output**, the decomposition of record,
|
|
11
19
|
informed by the contracts from `/nvaid:contracts`. This runs **after** contracts, not
|
|
12
20
|
before (the `unit-breakdown` Skill is Phase 5; the contract Skills are Phases 2–5).
|
|
@@ -7,6 +7,14 @@ precondition: Intent approved (Decomposition-Approved gate green)
|
|
|
7
7
|
|
|
8
8
|
# /nvaid:contracts
|
|
9
9
|
|
|
10
|
+
## ⛔ Precondition: nvaid install must be complete
|
|
11
|
+
|
|
12
|
+
Read `nvaid/config.yml` and check the `install:` block. If `config`, `project_rules`, or
|
|
13
|
+
`design_code_dictionary` is not `true` (or the file is missing), **STOP** and tell the
|
|
14
|
+
user to run `/nvaid:install` first — name which flag(s) are false. Do not proceed until
|
|
15
|
+
all three are true.
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
Draft the Architecture Contracts for an **already-approved** Intent, running each role's
|
|
11
19
|
contract Skill. The contracts are negotiated across Elaboration Phases 2–5 and **precede**
|
|
12
20
|
the unit-breakdown (which is the Phase 5 output) — run `/nvaid:breakdown` after this.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
command: nvaid:install
|
|
3
|
+
summary: Scan the project and fill in the three required nvaid documents (config.yml, PROJECT-RULES.md, DESIGN-CODE-DICTIONARY.md). Must run before /nvaid:intent.
|
|
4
|
+
stage: "nvaid onboarding — run once, first, before any workflow command"
|
|
5
|
+
blocks: [nvaid:intent, nvaid:contracts, nvaid:breakdown, nvaid:apply]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /nvaid:install
|
|
9
|
+
|
|
10
|
+
The **first** command to run after `nvaid init`. `init` only drops empty templates; this
|
|
11
|
+
skill makes nvaid actually usable by scanning the project and authoring the three required
|
|
12
|
+
documents. **Every other nvaid workflow command is blocked until this completes** — running
|
|
13
|
+
`/nvaid:intent` against unfilled templates would produce hollow, confidently-wrong output.
|
|
14
|
+
|
|
15
|
+
## Why this is a skill, not a CLI step
|
|
16
|
+
|
|
17
|
+
The CLI can detect facts (languages, frameworks from manifest files) but cannot author
|
|
18
|
+
*judgment*: a project's guardrails, its design patterns, what breaks if a given module
|
|
19
|
+
changes. That requires reading the actual code and reasoning about it — the agent's job,
|
|
20
|
+
not a file-scan's. This skill does that reading. A human reviews before it's marked done
|
|
21
|
+
(propose, don't dispose).
|
|
22
|
+
|
|
23
|
+
## Steps
|
|
24
|
+
|
|
25
|
+
1. **Scan the project.** Read manifest files (`package.json`, `pyproject.toml`, `go.mod`,
|
|
26
|
+
lockfiles), the directory structure, config, CI workflows, and a representative sample
|
|
27
|
+
of source to understand the stack, the architecture, and the conventions in use.
|
|
28
|
+
|
|
29
|
+
2. **Fill `nvaid/config.yml`** — replace every `<placeholder>`:
|
|
30
|
+
- `project_name`, `owning_repo` (frontend | backend | platform | other — infer from the
|
|
31
|
+
code, confirm with the user if ambiguous).
|
|
32
|
+
- `tech_stack` — fill from what you actually found in the manifests, not assumptions.
|
|
33
|
+
- `architects` — these are sign-off identities you cannot infer from code. **Ask the
|
|
34
|
+
user** for the names; leave a role blank only if the user confirms it doesn't apply.
|
|
35
|
+
- `context` — the short, always-on constraints worth repeating to every agent.
|
|
36
|
+
|
|
37
|
+
3. **Author `nvaid/PROJECT-RULES.md`** — replace the template skeleton with real content:
|
|
38
|
+
the approved stack and what's disallowed without an ADR, non-negotiable constraints,
|
|
39
|
+
data rules, coding standards, the quality gates CI actually runs, and known gaps.
|
|
40
|
+
Derive what you can from the code (e.g. the lint/test config that exists); for anything
|
|
41
|
+
that is a *decision* rather than a fact (what's allowed, what's off-limits), propose it
|
|
42
|
+
and flag it for the user to confirm — do not invent a guardrail the project hasn't made.
|
|
43
|
+
|
|
44
|
+
4. **Author `nvaid/DESIGN-CODE-DICTIONARY.md`** — the technical README for the code:
|
|
45
|
+
the design patterns and conventions in use (with real file examples), and the component
|
|
46
|
+
map (concept → where it lives → what it depends on → what breaks if changed). This is
|
|
47
|
+
narrative derived from reading the code; §1 references `config.yml`'s `tech_stack`
|
|
48
|
+
rather than repeating it. Be honest in the "not yet mapped" section about coverage.
|
|
49
|
+
|
|
50
|
+
5. **Human review.** Present all three for review. Per propose-don't-dispose, you draft;
|
|
51
|
+
a human confirms. Do not self-approve.
|
|
52
|
+
|
|
53
|
+
6. **Flip the gate.** Only after the user confirms each document is genuinely filled (not
|
|
54
|
+
placeholder text), set the matching flag in `config.yml`'s `install:` block to `true`:
|
|
55
|
+
`config`, `project_rules`, `design_code_dictionary`. When all three are true, the
|
|
56
|
+
workflow commands unblock.
|
|
57
|
+
|
|
58
|
+
## Boundaries
|
|
59
|
+
|
|
60
|
+
- Facts come from the code; **decisions and sign-off identities come from the user** — ask,
|
|
61
|
+
don't fabricate.
|
|
62
|
+
- Never set an `install:` flag to `true` on a document that still contains template
|
|
63
|
+
`<placeholder>` text or that the user hasn't confirmed.
|
|
@@ -6,6 +6,21 @@ stage: "Fig. 2 Stage 1 — Intent captured, pre-Elaboration"
|
|
|
6
6
|
|
|
7
7
|
# /nvaid:intent
|
|
8
8
|
|
|
9
|
+
## ⛔ Precondition: nvaid install must be complete
|
|
10
|
+
|
|
11
|
+
Before doing anything, read `nvaid/config.yml` and check the `install:` block. If
|
|
12
|
+
`config`, `project_rules`, or `design_code_dictionary` is **not** `true` — or
|
|
13
|
+
`nvaid/config.yml` doesn't exist — **STOP** and tell the user:
|
|
14
|
+
|
|
15
|
+
> nvaid isn't fully installed in this project yet. Run `/nvaid:install` first — it scans
|
|
16
|
+
> the project and fills in config.yml, PROJECT-RULES.md, and DESIGN-CODE-DICTIONARY.md.
|
|
17
|
+
> Those documents are what this command relies on; drafting an Intent without them would
|
|
18
|
+
> produce hollow output.
|
|
19
|
+
|
|
20
|
+
Name which flag(s) are false. Do not proceed with any step below until all three are true.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
9
24
|
Draft a new Intent from the user's description. Produce **only** `intent.md` — the
|
|
10
25
|
business need, who it's for, success criteria, and scope boundaries — then **stop**.
|
|
11
26
|
|
|
@@ -18,9 +33,8 @@ limitation — propose, don't dispose.
|
|
|
18
33
|
|
|
19
34
|
## Steps
|
|
20
35
|
|
|
21
|
-
1. Read this repo's `nvaid/PROJECT-RULES.md`
|
|
22
|
-
|
|
23
|
-
that the project rules are not yet defined.
|
|
36
|
+
1. Read this repo's `nvaid/PROJECT-RULES.md` for the project's operating guardrails and
|
|
37
|
+
approved stack (guaranteed authored, since the install gate above has passed).
|
|
24
38
|
2. Write `nvaid/intents/<INTENT-ID>-<slug>/intent.md`: business need, who it's for,
|
|
25
39
|
Intent-level success criteria (observable outcomes, not implementation), scope
|
|
26
40
|
boundaries (name what's out of scope, don't silently drop it), and open questions for
|
|
@@ -12,6 +12,19 @@
|
|
|
12
12
|
|
|
13
13
|
schema: nvaid/v1
|
|
14
14
|
|
|
15
|
+
# Installation gate. `nvaid init` scaffolds empty templates; the /nvaid:install SKILL
|
|
16
|
+
# then scans the project and fills in all three required documents. The workflow commands
|
|
17
|
+
# (/nvaid:intent, :contracts, :breakdown, :apply) are BLOCKED until install is complete —
|
|
18
|
+
# running them against unfilled templates would produce hollow, confidently-wrong output.
|
|
19
|
+
#
|
|
20
|
+
# Each flag is set to true by /nvaid:install only once that document is genuinely filled
|
|
21
|
+
# (not left as <placeholder> template text) and a human has confirmed it. The install is
|
|
22
|
+
# "complete" when all three are true.
|
|
23
|
+
install:
|
|
24
|
+
config: false # project_name, owning_repo, tech_stack, architects all set
|
|
25
|
+
project_rules: false # nvaid/PROJECT-RULES.md authored (not the template skeleton)
|
|
26
|
+
design_code_dictionary: false # nvaid/DESIGN-CODE-DICTIONARY.md authored (not the skeleton)
|
|
27
|
+
|
|
15
28
|
# A short name for this project/repo, used in generated artifact headers
|
|
16
29
|
# (replaces the {{PROJECT_NAME}} placeholder in PROJECT-RULES.md and the dictionary).
|
|
17
30
|
project_name: "<set-me>"
|
|
@@ -71,4 +84,4 @@ context: ""
|
|
|
71
84
|
|
|
72
85
|
# nvaid version this repo was last generated against. `nvaid validate` compares the
|
|
73
86
|
# installed CLI version to this and flags drift.
|
|
74
|
-
generated_with: "0.
|
|
87
|
+
generated_with: "0.2.0"
|