@nurix/etna 0.1.2 → 0.1.3

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/bin/etna.js CHANGED
@@ -74,12 +74,16 @@ function writeJson(path, value) {
74
74
  }
75
75
 
76
76
  // Register the marketplace in ~/.claude/settings.json (extraKnownMarketplaces).
77
- // Mirrors what `/plugin marketplace add <owner>/<repo>` writes.
77
+ // Mirrors what `/plugin marketplace add <owner>/<repo>` writes, plus opts the
78
+ // marketplace into auto-updates (off by default for non-Anthropic marketplaces).
78
79
  function registerMarketplace(marketplace) {
79
80
  const path = join(homedir(), '.claude', 'settings.json');
80
81
  const settings = readJson(path);
81
82
  settings.extraKnownMarketplaces = settings.extraKnownMarketplaces || {};
82
- settings.extraKnownMarketplaces[marketplace.name] = { source: marketplace.source };
83
+ settings.extraKnownMarketplaces[marketplace.name] = {
84
+ source: marketplace.source,
85
+ autoUpdate: true,
86
+ };
83
87
  writeJson(path, settings);
84
88
  return path;
85
89
  }
@@ -7,6 +7,7 @@
7
7
  }
8
8
  },
9
9
  "plugins": {
10
- "nurix-harness": "code"
10
+ "nurix-harness": "code",
11
+ "kb-agi": "kb-agi"
11
12
  }
12
13
  }
@@ -73,6 +73,13 @@ Feature docs in `docs/features/` must include YAML frontmatter with `owns`, `tou
73
73
 
74
74
  The spec-mode agent checks for ownership conflicts during research. If conflicts are found, address them in the spec before proceeding.
75
75
 
76
+ ### Architecture Decisions (ADRs)
77
+
78
+ Record an ADR when a decision (a) changes how state, dependencies, or boundaries are organized, (b) has a rejected alternative worth remembering, and (c) could plausibly be re-litigated. Default: don't write one. Style preferences, local refactors, and obvious-from-code choices don't qualify.
79
+
80
+ - File: `docs/architecture/adr/NNNN-kebab-case.md` (4-digit sequential number). Frozen once written — supersede via a new ADR, never edit.
81
+ - Invoke the `documentation` skill with "record an ADR" or "architecture decision".
82
+
76
83
  ---
77
84
 
78
85
  ## Agents
@@ -88,7 +95,7 @@ Seven sub-agents and three skills are defined under `.claude/`. Reach for them b
88
95
  | `dep-health` | Agent | Dependency supply-chain audit | "audit dependencies", "check CVEs", "dep health" |
89
96
  | `git-history` | Agent | Classify recent commits into a velocity/severity CSV | "classify commits", "commit history report" |
90
97
  | `change-review` | Agent | Velocity heatmap, risk zones (high churn + low coverage) | "where is risk accumulating", "velocity report" |
91
- | `documentation` | Skill | Baseline audit, scaffolding, templates | "baseline docs", "create docs", "audit docs" |
98
+ | `documentation` | Skill | Baseline audit, scaffolding, templates, ADRs, guardrails | "baseline docs", "create docs", "audit docs", "record an ADR", "architecture decision", "create guardrails" |
92
99
  | `workflow-mapper` | Skill | Discover and diagram codebase workflows | "map workflows", "trace flows" |
93
100
  | `introspect` | Skill | Pre-implementation impact analysis against guardrails | "introspect this plan", "impact analysis" |
94
101
 
@@ -140,20 +147,22 @@ Unless explicitly requested:
140
147
 
141
148
  The six procedural folders below are fixed. Domain folders live as subfolders inside these — `docs/architecture/core/` for core module internals, `docs/features/{feature}/` for deep features. Discovery flows through **[`docs/routing.md`](docs/routing.md)** when present.
142
149
 
143
- | Folder | Purpose | Mutability |
144
- | -------------------- | ------------------------------------------------------ | --------------------- |
145
- | `docs/architecture/` | System-wide patterns, technical decisions, API specs | Living |
146
- | `docs/features/` | How implemented features work today | Living |
147
- | `docs/operations/` | Setup, development, deployment | Living |
148
- | `docs/history/` | Plans, changelogs, backlog | Frozen or append-only |
149
- | `docs/memory/` | Project knowledge + agent state | Living |
150
- | `docs/tests/` | Test plans and automation | Living |
150
+ | Folder | Purpose | Mutability |
151
+ | ------------------------ | -------------------------------------------------------- | --------------------- |
152
+ | `docs/architecture/` | System-wide patterns, technical decisions, API specs | Living |
153
+ | `docs/architecture/adr/` | Architecture Decision Records — numbered, one per file | Frozen (supersede) |
154
+ | `docs/features/` | How implemented features work today | Living |
155
+ | `docs/operations/` | Setup, development, deployment | Living |
156
+ | `docs/history/` | Plans, changelogs, backlog | Frozen or append-only |
157
+ | `docs/memory/` | Project knowledge + agent state | Living |
158
+ | `docs/tests/` | Test plans and automation | Living |
151
159
 
152
160
  ### Naming & Lifecycle
153
161
 
154
162
  - Features: `kebab-case.md` — living reference, status `Active`
155
163
  - Plans: `YYYY-MM-DD-kebab-case.md` — frozen after `Complete` or `Abandoned`
156
164
  - Changelogs: `YYYY-MM-DD-kebab-case.md` — append-only
165
+ - ADRs: `NNNN-kebab-case.md` (4-digit zero-padded number, sequential) — frozen; supersede via a new ADR
157
166
  - Memory: `{agent-name}.md` — agent-maintained
158
167
 
159
168
  ### Documentation Maintenance
@@ -0,0 +1,57 @@
1
+ # nupilot Knowledge Hub — router
2
+
3
+ This repo is a flat Obsidian vault that you read on the user's behalf. It's the bridge from the front (positioning, claims) to the back (product and service specs); detailed execution lives downstream in the service repos.
4
+
5
+ You are the **router**. Every session starts with a short interview, then follows one of two paths: **ask** (read the vault and answer) or **contribute** (help the user add to the vault). The contract that governs both — the note model, the frontmatter hints, who may write — is [`meta/guidance.md`](meta/guidance.md). Read it before you write anything.
6
+
7
+ ---
8
+
9
+ ## Step 0 — first run
10
+
11
+ If `meta/guidance.md` is missing, this vault isn't initialized — invoke the **kb-agi-init** agent to scaffold the `meta/` control plane, then continue.
12
+
13
+ ---
14
+
15
+ ## Step 1 — the opening interview
16
+
17
+ Before answering anything, run a short interview with the `AskUserQuestion` tool to establish two things:
18
+
19
+ 1. **What brings you?** → *ask* (you have a question) or *contribute* (you have something to add).
20
+ 2. **Your user-type (genre):** → *Sales*, *PM*, or *Contributor*. This sets the default depth and framing of answers, nothing else. (If none fits, let them say so — a missing genre just means use plain working depth.)
21
+
22
+ Then load the matching template from [`meta/genre/`](meta/genre/) — `sales.md`, `pm.md`, or `contributor.md` — and follow the path below.
23
+
24
+ Keep the interview to those two questions. Don't re-interview on every follow-up in the same session; carry the answers forward.
25
+
26
+ ---
27
+
28
+ ## The ask path — read-only
29
+
30
+ You are **read-only** on this path. You never edit a note. Your only write is appending a query log to `meta/sessions/` (see below).
31
+
32
+ 1. **Find the entry note(s)** for the question. Start from [`meta/intent-index.md`](meta/intent-index.md) (keyed by *what the user wants to do*) and the entry notes named in their genre template.
33
+ 2. **Traverse the note graph both ways** — *up* toward summaries and entry notes, *down* into detail and evidence. The `[[wikilinks]]` are the structure. Lead with `canonical` notes; treat `canonical: false` ones as background.
34
+ 3. **Synthesize at the genre's default depth**, then adjust to how the question was actually asked — go deeper when they reach for it, compress when they want the headline. Depth shapes the answer; it never hides notes.
35
+ 4. **Cite the notes you used** so the user can stand behind the answer and follow the links.
36
+ 5. **Log the session** to `meta/sessions/` in the format in that folder's README — including, honestly, whether you could fully answer. A question you *couldn't* answer is a gap; logging it feeds the gap-finder and lets the user resume later.
37
+
38
+ If the vault can't answer, say so plainly and log it as a gap. Don't invent an answer the notes don't support.
39
+
40
+ ## The contribute path — the human steers
41
+
42
+ Here the user is *adding* knowledge, not reading. This path is deliberately thin and grows with use. There are **no sub-agents** — it's you and the user in a normal session.
43
+
44
+ 1. **Orient them** with [`meta/guidance.md`](meta/guidance.md) (the note model and where things belong) and the target folder's `metadata.md` (what belongs there, what's already nearby).
45
+ 2. **What does the hub want next?** Run the `kb-find-gaps` agent (it reads `meta/sessions/` gaps + folder `metadata.md`) — that's the live content roadmap.
46
+ 3. **Draft and place notes** as the user directs: one idea per note, light frontmatter per the contract, linked to its neighbours. Links form naturally as you write.
47
+ 4. Writing here is the human-in-the-loop exception to read-only — a person is steering every write, and every write is a git commit.
48
+
49
+ ---
50
+
51
+ ## What you do *not* do
52
+
53
+ - **You don't run upkeep.** The kb-agi upkeep agents (`kb-find-gaps`, `kb-sync-metadata`, `kb-catch-stale`, `kb-fix-links`, `kb-refresh-frontdoor`, `kb-refresh-summaries`) are the only writers of canon, invoked by name and only when *deliberately* run — not as a side effect of a question. Don't trigger them from the ask path.
54
+ - **You don't hand-edit `meta/_kg/`** — it's a derived graph, regenerated from the notes.
55
+ - **You don't mutate notes on the ask path.** Read-only means read-only.
56
+
57
+ Everything is git-checked-in, so any write is reviewable and reversible (doctrine P3).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nurix/etna",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Bootstrap a project with a Nurix harness — installs a Claude Code plugin from the nurixlabs/skills marketplace and drops the harness's CLAUDE.md at the project root.",
5
5
  "type": "module",
6
6
  "bin": {