@nurix/etna 0.19.84 → 0.19.86

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "fingerprint": "574f23e45199",
2
+ "fingerprint": "476fa48936bb",
3
3
  "harnesses": {
4
4
  "code": {
5
5
  "plugin": "code",
@@ -16,6 +16,8 @@ Each topic has one canonical location. Read from here, not from plans or changel
16
16
  | API surface | `docs/architecture/` | api.md |
17
17
  | Security | `docs/architecture/` | security.md |
18
18
  | Feature behavior | `docs/features/` | one `kebab-case.md` doc per feature |
19
+ | Product specification (PRD, personas, journeys, information architecture) | `docs/architecture/` | prd.md, personas.md, journeys.md, information-architecture.md |
20
+ | Acceptance criteria | `docs/acceptance/` | one `kebab-case.md` doc per capability, `AC-n` keyed assert lines |
19
21
  | Setup & development | `docs/operations/` | setup.md |
20
22
  | Environment / config surface | `docs/operations/` | environment.md |
21
23
  | Testing strategy | `docs/tests/` | strategy.md |
@@ -39,6 +41,13 @@ Every doc is a **truth document** (states current absolutes, topic-named, update
39
41
  - `docs/features/`: Living reference for implemented features. Each feature doc **carries** the `owns:` / `module:` / `keywords:` / `status:` frontmatter — `owns:` declares the code-path globs it owns (the only ownership key), `module:` is an optional bounded-context label, `keywords:` are discovery terms, `status:` is `active`/`draft`/`deprecated`. The SessionStart hook unions every feature's `owns:` globs into the injected ownership index.
40
42
  - `docs/architecture/`: The truth layer for system-wide shape: overview, domain model, glossary, non-goals, API surface, security, and `decisions/` (ADs — one per subject, updated in place, journey in each AD's Decision Changelog). Update when cross-cutting reality changes.
41
43
  - `docs/operations/`: How-to procedures for setup, development, and deployment, plus the environment registry. Update when workflows change. One-shot migrations do NOT live here — they are records (`docs/history/migrations/`).
44
+ - `docs/acceptance/`: Acceptance-criteria documents — one per capability, stating the promises the
45
+ built product must keep as `AC-n` keyed assert lines that verification surfaces parse as claims.
46
+ Written at specification time, before implementation; carries frontmatter (`type:`, `status:`)
47
+ like every generated doc. Keys are stable once published — a criterion is retired by marking it,
48
+ never by renumbering. Distinct from `docs/tests/`: acceptance criteria state what the product
49
+ promises up front; the checklists in `docs/tests/` are the verification gate's own driving
50
+ scripts, authored and maintained at the gate.
42
51
  - `docs/tests/`: Testing strategy and test docs. Present when the repo has a test posture worth documenting.
43
52
  - `docs/history/plans/`: Records. Must have `Status:` field. Never modify after completion.
44
53
  - `docs/history/changelog/`: Records. One entry per unit of work (`YYYY-MM-DD-{three-words}.md`), written by whoever does the work and frozen inside the commit it describes. Entries carry the refinement context a diff cannot show — the ask in the user's words, iterations and rejections, skill survived/overridden verdicts, discoveries, pins. Format is the `documentation` skill's `templates/changelog-entry.md`; trigger and lifecycle are the `changelog` rule; distillation is the `retro` agent. Immutability begins at commit — a draft in the working tree is mutable until then, never after. Every entry appends a row to `docs/history/CHANGELOG.md`.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "harness": "code",
3
3
  "name": "code",
4
- "version": "3.10.8",
4
+ "version": "3.10.10",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
@@ -15,5 +15,5 @@
15
15
  "docs/memory/main.md",
16
16
  ".mcp.json"
17
17
  ],
18
- "digest": "764dc6628d76"
18
+ "digest": "0f09607cd2d4"
19
19
  }
@@ -6,9 +6,9 @@ Read by the PreToolUse install gate (`compliance.mjs`) — an off-table install
6
6
  | --- | --- | --- | --- |
7
7
  | `react` | ^19.2.3 | UI components | — |
8
8
  | `vite` | ^8.0.0 | Build tool, dev server | `webpack`, CRA |
9
- | `tailwindcss` | ^4.1.18 | Styling | `styled-components` |
9
+ | `tailwindcss` | ^4.3.3 | Styling | `styled-components` |
10
10
  | `@nurix/components` | ^0.15.12 | The UI component library — import by subpath | `npx shadcn add`, a `components.json` scaffold |
11
- | `@tailwindcss/vite` | ^4.1.18 | Tailwind v4 Vite plugin | `postcss`, `tailwind.config.js` |
11
+ | `@tailwindcss/vite` | ^4.3.3 | Tailwind v4 Vite plugin — 4.3.x is the vite-8 peer line; 4.1.x tops out at vite 7 | `postcss`, `tailwind.config.js` |
12
12
  | `@vitejs/plugin-react-swc` | ^4.2.2 | JSX compilation | `@vitejs/plugin-react` |
13
13
  | `react-router-dom` | ^7.11.0 | Routing | — |
14
14
  | `@reduxjs/toolkit` | ^2.11.2 | State management | `zustand`, `jotai` |
@@ -72,6 +72,7 @@ The two guarantees are complementary and both break on mixing: a reader holding
72
72
  | Security / threat model | [`templates/security-overview.md`](templates/security-overview.md) |
73
73
  | Testing strategy | [`templates/testing-strategy.md`](templates/testing-strategy.md) |
74
74
  | Behavioral checklist for one feature (`docs/tests/{feature}.md`) | [`templates/behavioral-checklist.md`](templates/behavioral-checklist.md) — the verification gate's driving script, and the source its suite tests are drawn from |
75
+ | Acceptance criteria for one capability (`docs/acceptance/{capability}.md`) | [`templates/acceptance-criteria.md`](templates/acceptance-criteria.md) — the promises the built product must keep, as stable `AC-n` keyed assert lines verification surfaces parse as claims |
75
76
  | Recurring procedure/setup | [`templates/operations-procedure.md`](templates/operations-procedure.md) |
76
77
  | Cold-start build order (implementation map) | [`templates/implementation-map.md`](templates/implementation-map.md) — authored by the executing session at build start, updated in place as waves complete |
77
78
  | Capture mid-execution knowledge (`docs/history/journal.md`) | [`templates/journal.md`](templates/journal.md) (record — append-only; a row resolves by landing in its owning doc) |
@@ -118,7 +119,13 @@ The two guarantees are complementary and both break on mixing: a reader holding
118
119
 
119
120
  ## Frontmatter Derivation
120
121
 
121
- A feature doc carries ownership frontmatter — `owns:` (required), `module:` (optional), `keywords:` (required), `status:` (required), optional `last-reviewed:`. Deriving it from code and keeping it accurate is [`references/frontmatter.md`](references/frontmatter.md) — every feature-doc create or update, and the `maintenance` agent's baseline pass, route there.
122
+ **Frontmatter is compulsory on every document this skill authors** — `type:` (the genre) on every
123
+ doc, plus the genre's own keys beside it; a document without its frontmatter fails the skill's
124
+ contract and is not done. A feature doc carries the full ownership set — `owns:` (required),
125
+ `module:` (optional), `keywords:` (required), `status:` (required), optional `last-reviewed:`. An
126
+ acceptance-criteria doc (`docs/acceptance/`) carries `type:` and `status:`. The single sanctioned
127
+ exception is a genre the placement map explicitly marks frontmatter-less (the behavioral checklists
128
+ in `docs/tests/`). Deriving ownership frontmatter from code and keeping it accurate is [`references/frontmatter.md`](references/frontmatter.md) — every feature-doc create or update, and the `maintenance` agent's baseline pass, route there.
122
129
 
123
130
  ---
124
131
 
@@ -0,0 +1,37 @@
1
+ # Acceptance Criteria
2
+
3
+ Truth document. Use for: the promises one capability must keep, stated as machine-parseable
4
+ claims. Lives in `docs/acceptance/`, one `kebab-case.md` per capability. Written at specification
5
+ time — before implementation — and read by verification surfaces, which parse each `AC-n` line as
6
+ a claim to grade the built product against.
7
+
8
+ ### Rules
9
+
10
+ - **Frontmatter is required**: `type: acceptance-criteria`, `status:` (`draft` → `active` →
11
+ `deprecated`). No `owns:` — acceptance criteria own no code.
12
+ - **One `AC-n` key per criterion, stable forever.** Keys are never renumbered and never reused: a
13
+ criterion that no longer applies is marked retired in place, so every claim a past verification
14
+ graded still resolves.
15
+ - **Each criterion is one observable assert**, phrased as a checkable statement about the running
16
+ product — never about the code's internals. If it cannot be observed from outside, it is a
17
+ design note, not a criterion.
18
+ - **The `AC-n:` line grammar is load-bearing** — verification parses these lines. Keep the key at
19
+ line start, exactly `AC-<number>:`, followed by the assert sentence. Formatting that buries the
20
+ key (tables, emphasis-wrapped keys, nested bullets) breaks the parse.
21
+
22
+ ### Template
23
+
24
+ ```markdown
25
+ ---
26
+ type: acceptance-criteria
27
+ status: draft
28
+ ---
29
+
30
+ # Acceptance Criteria: {Capability}
31
+
32
+ Scope: {one line — what part of the product these criteria bind}.
33
+
34
+ - AC-1: {observable assert about the running product}.
35
+ - AC-2: {observable assert}.
36
+ - AC-3 (retired): {kept verbatim, marked retired — never renumbered}.
37
+ ```
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "harness": "delivery",
3
3
  "name": "delivery",
4
- "version": "0.2.16",
4
+ "version": "0.2.17",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
8
8
  ".vscode/settings.json"
9
9
  ],
10
10
  "seeds": [],
11
- "digest": "58c1beda728f"
11
+ "digest": "2d09f618c300"
12
12
  }
@@ -72,6 +72,7 @@ The two guarantees are complementary and both break on mixing: a reader holding
72
72
  | Security / threat model | [`templates/security-overview.md`](templates/security-overview.md) |
73
73
  | Testing strategy | [`templates/testing-strategy.md`](templates/testing-strategy.md) |
74
74
  | Behavioral checklist for one feature (`docs/tests/{feature}.md`) | [`templates/behavioral-checklist.md`](templates/behavioral-checklist.md) — the verification gate's driving script, and the source its suite tests are drawn from |
75
+ | Acceptance criteria for one capability (`docs/acceptance/{capability}.md`) | [`templates/acceptance-criteria.md`](templates/acceptance-criteria.md) — the promises the built product must keep, as stable `AC-n` keyed assert lines verification surfaces parse as claims |
75
76
  | Recurring procedure/setup | [`templates/operations-procedure.md`](templates/operations-procedure.md) |
76
77
  | Cold-start build order (implementation map) | [`templates/implementation-map.md`](templates/implementation-map.md) — authored by the executing session at build start, updated in place as waves complete |
77
78
  | Capture mid-execution knowledge (`docs/history/journal.md`) | [`templates/journal.md`](templates/journal.md) (record — append-only; a row resolves by landing in its owning doc) |
@@ -118,7 +119,13 @@ The two guarantees are complementary and both break on mixing: a reader holding
118
119
 
119
120
  ## Frontmatter Derivation
120
121
 
121
- A feature doc carries ownership frontmatter — `owns:` (required), `module:` (optional), `keywords:` (required), `status:` (required), optional `last-reviewed:`. Deriving it from code and keeping it accurate is [`references/frontmatter.md`](references/frontmatter.md) — every feature-doc create or update, and the `maintenance` agent's baseline pass, route there.
122
+ **Frontmatter is compulsory on every document this skill authors** — `type:` (the genre) on every
123
+ doc, plus the genre's own keys beside it; a document without its frontmatter fails the skill's
124
+ contract and is not done. A feature doc carries the full ownership set — `owns:` (required),
125
+ `module:` (optional), `keywords:` (required), `status:` (required), optional `last-reviewed:`. An
126
+ acceptance-criteria doc (`docs/acceptance/`) carries `type:` and `status:`. The single sanctioned
127
+ exception is a genre the placement map explicitly marks frontmatter-less (the behavioral checklists
128
+ in `docs/tests/`). Deriving ownership frontmatter from code and keeping it accurate is [`references/frontmatter.md`](references/frontmatter.md) — every feature-doc create or update, and the `maintenance` agent's baseline pass, route there.
122
129
 
123
130
  ---
124
131
 
@@ -0,0 +1,37 @@
1
+ # Acceptance Criteria
2
+
3
+ Truth document. Use for: the promises one capability must keep, stated as machine-parseable
4
+ claims. Lives in `docs/acceptance/`, one `kebab-case.md` per capability. Written at specification
5
+ time — before implementation — and read by verification surfaces, which parse each `AC-n` line as
6
+ a claim to grade the built product against.
7
+
8
+ ### Rules
9
+
10
+ - **Frontmatter is required**: `type: acceptance-criteria`, `status:` (`draft` → `active` →
11
+ `deprecated`). No `owns:` — acceptance criteria own no code.
12
+ - **One `AC-n` key per criterion, stable forever.** Keys are never renumbered and never reused: a
13
+ criterion that no longer applies is marked retired in place, so every claim a past verification
14
+ graded still resolves.
15
+ - **Each criterion is one observable assert**, phrased as a checkable statement about the running
16
+ product — never about the code's internals. If it cannot be observed from outside, it is a
17
+ design note, not a criterion.
18
+ - **The `AC-n:` line grammar is load-bearing** — verification parses these lines. Keep the key at
19
+ line start, exactly `AC-<number>:`, followed by the assert sentence. Formatting that buries the
20
+ key (tables, emphasis-wrapped keys, nested bullets) breaks the parse.
21
+
22
+ ### Template
23
+
24
+ ```markdown
25
+ ---
26
+ type: acceptance-criteria
27
+ status: draft
28
+ ---
29
+
30
+ # Acceptance Criteria: {Capability}
31
+
32
+ Scope: {one line — what part of the product these criteria bind}.
33
+
34
+ - AC-1: {observable assert about the running product}.
35
+ - AC-2: {observable assert}.
36
+ - AC-3 (retired): {kept verbatim, marked retired — never renumbered}.
37
+ ```
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "harness": "etna",
3
3
  "name": "etna",
4
- "version": "1.5.5",
4
+ "version": "1.5.6",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
8
8
  ".vscode/settings.json"
9
9
  ],
10
10
  "seeds": [],
11
- "digest": "223330f92bc3"
11
+ "digest": "6114240474ef"
12
12
  }
@@ -72,6 +72,7 @@ The two guarantees are complementary and both break on mixing: a reader holding
72
72
  | Security / threat model | [`templates/security-overview.md`](templates/security-overview.md) |
73
73
  | Testing strategy | [`templates/testing-strategy.md`](templates/testing-strategy.md) |
74
74
  | Behavioral checklist for one feature (`docs/tests/{feature}.md`) | [`templates/behavioral-checklist.md`](templates/behavioral-checklist.md) — the verification gate's driving script, and the source its suite tests are drawn from |
75
+ | Acceptance criteria for one capability (`docs/acceptance/{capability}.md`) | [`templates/acceptance-criteria.md`](templates/acceptance-criteria.md) — the promises the built product must keep, as stable `AC-n` keyed assert lines verification surfaces parse as claims |
75
76
  | Recurring procedure/setup | [`templates/operations-procedure.md`](templates/operations-procedure.md) |
76
77
  | Cold-start build order (implementation map) | [`templates/implementation-map.md`](templates/implementation-map.md) — authored by the executing session at build start, updated in place as waves complete |
77
78
  | Capture mid-execution knowledge (`docs/history/journal.md`) | [`templates/journal.md`](templates/journal.md) (record — append-only; a row resolves by landing in its owning doc) |
@@ -118,7 +119,13 @@ The two guarantees are complementary and both break on mixing: a reader holding
118
119
 
119
120
  ## Frontmatter Derivation
120
121
 
121
- A feature doc carries ownership frontmatter — `owns:` (required), `module:` (optional), `keywords:` (required), `status:` (required), optional `last-reviewed:`. Deriving it from code and keeping it accurate is [`references/frontmatter.md`](references/frontmatter.md) — every feature-doc create or update, and the `maintenance` agent's baseline pass, route there.
122
+ **Frontmatter is compulsory on every document this skill authors** — `type:` (the genre) on every
123
+ doc, plus the genre's own keys beside it; a document without its frontmatter fails the skill's
124
+ contract and is not done. A feature doc carries the full ownership set — `owns:` (required),
125
+ `module:` (optional), `keywords:` (required), `status:` (required), optional `last-reviewed:`. An
126
+ acceptance-criteria doc (`docs/acceptance/`) carries `type:` and `status:`. The single sanctioned
127
+ exception is a genre the placement map explicitly marks frontmatter-less (the behavioral checklists
128
+ in `docs/tests/`). Deriving ownership frontmatter from code and keeping it accurate is [`references/frontmatter.md`](references/frontmatter.md) — every feature-doc create or update, and the `maintenance` agent's baseline pass, route there.
122
129
 
123
130
  ---
124
131
 
@@ -0,0 +1,37 @@
1
+ # Acceptance Criteria
2
+
3
+ Truth document. Use for: the promises one capability must keep, stated as machine-parseable
4
+ claims. Lives in `docs/acceptance/`, one `kebab-case.md` per capability. Written at specification
5
+ time — before implementation — and read by verification surfaces, which parse each `AC-n` line as
6
+ a claim to grade the built product against.
7
+
8
+ ### Rules
9
+
10
+ - **Frontmatter is required**: `type: acceptance-criteria`, `status:` (`draft` → `active` →
11
+ `deprecated`). No `owns:` — acceptance criteria own no code.
12
+ - **One `AC-n` key per criterion, stable forever.** Keys are never renumbered and never reused: a
13
+ criterion that no longer applies is marked retired in place, so every claim a past verification
14
+ graded still resolves.
15
+ - **Each criterion is one observable assert**, phrased as a checkable statement about the running
16
+ product — never about the code's internals. If it cannot be observed from outside, it is a
17
+ design note, not a criterion.
18
+ - **The `AC-n:` line grammar is load-bearing** — verification parses these lines. Keep the key at
19
+ line start, exactly `AC-<number>:`, followed by the assert sentence. Formatting that buries the
20
+ key (tables, emphasis-wrapped keys, nested bullets) breaks the parse.
21
+
22
+ ### Template
23
+
24
+ ```markdown
25
+ ---
26
+ type: acceptance-criteria
27
+ status: draft
28
+ ---
29
+
30
+ # Acceptance Criteria: {Capability}
31
+
32
+ Scope: {one line — what part of the product these criteria bind}.
33
+
34
+ - AC-1: {observable assert about the running product}.
35
+ - AC-2: {observable assert}.
36
+ - AC-3 (retired): {kept verbatim, marked retired — never renumbered}.
37
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nurix/etna",
3
- "version": "0.19.84",
3
+ "version": "0.19.86",
4
4
  "description": "Bootstrap a project with a Nurix harness — copies the harness's CLAUDE.md, skills, agents, rules, and hooks directly into the project from a bundled payload (no marketplace fetch, no network).",
5
5
  "type": "module",
6
6
  "bin": {
@@ -42,5 +42,5 @@
42
42
  "agent",
43
43
  "plugin"
44
44
  ],
45
- "etnaFingerprint": "574f23e45199"
45
+ "etnaFingerprint": "476fa48936bb"
46
46
  }