@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 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("0.1.0");
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.1.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": "./dist/cli.js"
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": "^20.0.0",
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": "^1.4.0"
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` (if present) for the project's operating
22
- guardrails and approved stack. If it is still the unfilled template, proceed but note
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.1.0"
87
+ generated_with: "0.2.0"