@nurix/etna 0.20.16 → 0.20.17

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": "6b7b8d3d3e8f",
2
+ "fingerprint": "2923378ebe87",
3
3
  "harnesses": {
4
4
  "code": {
5
5
  "plugin": "code",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "harness": "code",
3
3
  "name": "code",
4
- "version": "3.16.4",
4
+ "version": "3.16.5",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
@@ -25,5 +25,5 @@
25
25
  }
26
26
  ],
27
27
  "docsRoot": "docs",
28
- "digest": "5e98d9973eb1"
28
+ "digest": "2e50abdd4ddd"
29
29
  }
@@ -343,7 +343,7 @@ function detectorForFile(projectDir, rel, meta, rows) {
343
343
  formatAutoRow({
344
344
  ...meta,
345
345
  kind: "doc-lint",
346
- description: `${rel} has ${findings.length} doc-lint finding(s)`,
346
+ description: `${rel} has doc-lint findings`,
347
347
  action: `fix or doc-lint-disable with reason`,
348
348
  })
349
349
  );
@@ -132,7 +132,7 @@ export const ROW_VERIFIERS = {
132
132
  return now !== then;
133
133
  },
134
134
 
135
- // "<rel> has N doc-lint finding(s)" — dead once a re-run comes back clean (or the doc is gone).
135
+ // "<rel> has doc-lint findings" — dead once a re-run comes back clean (or the doc is gone).
136
136
  "doc-lint": (projectDir, body) => {
137
137
  const m = /·\s+doc-lint\s+·\s+(\S+)\s+has/.exec(body);
138
138
  if (!m) return false;
@@ -22,8 +22,9 @@ const RULES = [
22
22
 
23
23
  // Sections inside a truth doc where dated history is sanctioned (the two bridges).
24
24
  const BRIDGE_HEADINGS = /^#{1,4}\s+(decision changelog|health log)\b/i;
25
- // Instruction files and generated trees are out of scope; the authoring roots are anchored to the repo root.
26
- const SKIP = /^(\.claude|skills|rules|agents|harness)\/|(^|\/)(node_modules|packages\/[^/]+\/data)\/|(^|\/)(CLAUDE|AGENTS)\.md$|\.bkp\./;
25
+ // Instruction files, the three harness-installed mirrors and generated trees are out of scope; the authoring
26
+ // roots are anchored to the repo root.
27
+ const SKIP = /^(\.claude|\.agents|\.codex|skills|rules|agents|harness)\/|(^|\/)(node_modules|packages\/[^/]+\/data)\/|(^|\/)(CLAUDE|AGENTS)\.md$|\.bkp\./;
27
28
  // `operations/issues/YYYY-MM-DD-{slug}.md` is a sanctioned record genre (`type: issue`, the
28
29
  // `issue-bridge` skill's local pack) living outside the record folders, so it is named here too —
29
30
  // graded as a truth document it fails the date rule for carrying the date its filename already does.
@@ -2,10 +2,7 @@
2
2
  // Usage: node source-lint.mjs <file | dir ...> | node source-lint.mjs --changed (git-changed + untracked source files)
3
3
  // Exit 1 when any block-severity finding survives. Escape hatch: a `source-lint-disable: id[, id]` comment,
4
4
  // file-wide in the first 20 lines or on the offending line; the reason goes in a second comment beside it.
5
- //
6
- // The convention is the harness `CLAUDE.md` § File Structure and is not restated here: a repo-relative path
7
- // header of two or three present-tense sentences, one third-person sentence above each non-obvious function,
8
- // rationale in the owning doc. This script checks only what is mechanical; voice and placement stay judgement.
5
+ // The convention itself is the harness `CLAUDE.md` § File Structure; this checks only what is mechanical.
9
6
 
10
7
  import { readFileSync, existsSync, statSync, readdirSync } from 'node:fs';
11
8
  import { execSync, spawnSync } from 'node:child_process';
@@ -21,10 +18,10 @@ const DIALECTS = {
21
18
  '.py': '#', '.sh': '#', '.zsh': '#', '.bash': '#', '.rb': '#',
22
19
  };
23
20
 
24
- // Generated trees, vendored copies, and formats with no comment syntax are a different genre. `.claude/`
25
- // is harness-owned in every consumer — its files are overwritten on the next roll, so a finding there
26
- // names work nobody in that repo can land. The forge lints its own copies at `harness/`, not here.
27
- const SKIP = /(^|\/)(node_modules|dist|build|target|\.git|\.claude|coverage|__screenshots__|data\/harnesses)\/|\.min\.|\.d\.ts$|(^|\/)(pnpm-lock|package-lock)\./;
21
+ // Generated trees, vendored copies, and formats with no comment syntax are a different genre. `.claude/`,
22
+ // `.agents/` and `.codex/` are harness-owned in every consumer — overwritten on the next roll, so a finding
23
+ // there names work nobody in that repo can land. The forge lints its own copies at `harness/`, not here.
24
+ const SKIP = /(^|\/)(node_modules|dist|build|target|\.git|\.claude|\.agents|\.codex|coverage|__screenshots__|data\/harnesses)\/|\.min\.|\.d\.ts$|(^|\/)(pnpm-lock|package-lock)\./;
28
25
  // A generated file says so in its own first lines; the convention exempts it.
29
26
  const GENERATED = /@generated|DO NOT EDIT|AUTO-GENERATED|This file was generated/i;
30
27
  // Below this a file is too small for a density ratio to mean anything.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "harness": "delivery",
3
3
  "name": "delivery",
4
- "version": "0.2.31",
4
+ "version": "0.2.32",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
@@ -10,5 +10,5 @@
10
10
  "seeds": [],
11
11
  "tools": [],
12
12
  "docsRoot": "docs",
13
- "digest": "2b8abfd5bb5f"
13
+ "digest": "94b63ce8cf37"
14
14
  }
@@ -22,8 +22,9 @@ const RULES = [
22
22
 
23
23
  // Sections inside a truth doc where dated history is sanctioned (the two bridges).
24
24
  const BRIDGE_HEADINGS = /^#{1,4}\s+(decision changelog|health log)\b/i;
25
- // Instruction files and generated trees are out of scope; the authoring roots are anchored to the repo root.
26
- const SKIP = /^(\.claude|skills|rules|agents|harness)\/|(^|\/)(node_modules|packages\/[^/]+\/data)\/|(^|\/)(CLAUDE|AGENTS)\.md$|\.bkp\./;
25
+ // Instruction files, the three harness-installed mirrors and generated trees are out of scope; the authoring
26
+ // roots are anchored to the repo root.
27
+ const SKIP = /^(\.claude|\.agents|\.codex|skills|rules|agents|harness)\/|(^|\/)(node_modules|packages\/[^/]+\/data)\/|(^|\/)(CLAUDE|AGENTS)\.md$|\.bkp\./;
27
28
  // `operations/issues/YYYY-MM-DD-{slug}.md` is a sanctioned record genre (`type: issue`, the
28
29
  // `issue-bridge` skill's local pack) living outside the record folders, so it is named here too —
29
30
  // graded as a truth document it fails the date rule for carrying the date its filename already does.
@@ -2,10 +2,7 @@
2
2
  // Usage: node source-lint.mjs <file | dir ...> | node source-lint.mjs --changed (git-changed + untracked source files)
3
3
  // Exit 1 when any block-severity finding survives. Escape hatch: a `source-lint-disable: id[, id]` comment,
4
4
  // file-wide in the first 20 lines or on the offending line; the reason goes in a second comment beside it.
5
- //
6
- // The convention is the harness `CLAUDE.md` § File Structure and is not restated here: a repo-relative path
7
- // header of two or three present-tense sentences, one third-person sentence above each non-obvious function,
8
- // rationale in the owning doc. This script checks only what is mechanical; voice and placement stay judgement.
5
+ // The convention itself is the harness `CLAUDE.md` § File Structure; this checks only what is mechanical.
9
6
 
10
7
  import { readFileSync, existsSync, statSync, readdirSync } from 'node:fs';
11
8
  import { execSync, spawnSync } from 'node:child_process';
@@ -21,10 +18,10 @@ const DIALECTS = {
21
18
  '.py': '#', '.sh': '#', '.zsh': '#', '.bash': '#', '.rb': '#',
22
19
  };
23
20
 
24
- // Generated trees, vendored copies, and formats with no comment syntax are a different genre. `.claude/`
25
- // is harness-owned in every consumer — its files are overwritten on the next roll, so a finding there
26
- // names work nobody in that repo can land. The forge lints its own copies at `harness/`, not here.
27
- const SKIP = /(^|\/)(node_modules|dist|build|target|\.git|\.claude|coverage|__screenshots__|data\/harnesses)\/|\.min\.|\.d\.ts$|(^|\/)(pnpm-lock|package-lock)\./;
21
+ // Generated trees, vendored copies, and formats with no comment syntax are a different genre. `.claude/`,
22
+ // `.agents/` and `.codex/` are harness-owned in every consumer — overwritten on the next roll, so a finding
23
+ // there names work nobody in that repo can land. The forge lints its own copies at `harness/`, not here.
24
+ const SKIP = /(^|\/)(node_modules|dist|build|target|\.git|\.claude|\.agents|\.codex|coverage|__screenshots__|data\/harnesses)\/|\.min\.|\.d\.ts$|(^|\/)(pnpm-lock|package-lock)\./;
28
25
  // A generated file says so in its own first lines; the convention exempts it.
29
26
  const GENERATED = /@generated|DO NOT EDIT|AUTO-GENERATED|This file was generated/i;
30
27
  // Below this a file is too small for a density ratio to mean anything.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "harness": "etna",
3
3
  "name": "etna",
4
- "version": "1.5.21",
4
+ "version": "1.5.22",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
@@ -10,5 +10,5 @@
10
10
  "seeds": [],
11
11
  "tools": [],
12
12
  "docsRoot": "docs",
13
- "digest": "a3f92ccefc2e"
13
+ "digest": "1fcc2f8a0d2a"
14
14
  }
@@ -22,8 +22,9 @@ const RULES = [
22
22
 
23
23
  // Sections inside a truth doc where dated history is sanctioned (the two bridges).
24
24
  const BRIDGE_HEADINGS = /^#{1,4}\s+(decision changelog|health log)\b/i;
25
- // Instruction files and generated trees are out of scope; the authoring roots are anchored to the repo root.
26
- const SKIP = /^(\.claude|skills|rules|agents|harness)\/|(^|\/)(node_modules|packages\/[^/]+\/data)\/|(^|\/)(CLAUDE|AGENTS)\.md$|\.bkp\./;
25
+ // Instruction files, the three harness-installed mirrors and generated trees are out of scope; the authoring
26
+ // roots are anchored to the repo root.
27
+ const SKIP = /^(\.claude|\.agents|\.codex|skills|rules|agents|harness)\/|(^|\/)(node_modules|packages\/[^/]+\/data)\/|(^|\/)(CLAUDE|AGENTS)\.md$|\.bkp\./;
27
28
  // `operations/issues/YYYY-MM-DD-{slug}.md` is a sanctioned record genre (`type: issue`, the
28
29
  // `issue-bridge` skill's local pack) living outside the record folders, so it is named here too —
29
30
  // graded as a truth document it fails the date rule for carrying the date its filename already does.
@@ -2,10 +2,7 @@
2
2
  // Usage: node source-lint.mjs <file | dir ...> | node source-lint.mjs --changed (git-changed + untracked source files)
3
3
  // Exit 1 when any block-severity finding survives. Escape hatch: a `source-lint-disable: id[, id]` comment,
4
4
  // file-wide in the first 20 lines or on the offending line; the reason goes in a second comment beside it.
5
- //
6
- // The convention is the harness `CLAUDE.md` § File Structure and is not restated here: a repo-relative path
7
- // header of two or three present-tense sentences, one third-person sentence above each non-obvious function,
8
- // rationale in the owning doc. This script checks only what is mechanical; voice and placement stay judgement.
5
+ // The convention itself is the harness `CLAUDE.md` § File Structure; this checks only what is mechanical.
9
6
 
10
7
  import { readFileSync, existsSync, statSync, readdirSync } from 'node:fs';
11
8
  import { execSync, spawnSync } from 'node:child_process';
@@ -21,10 +18,10 @@ const DIALECTS = {
21
18
  '.py': '#', '.sh': '#', '.zsh': '#', '.bash': '#', '.rb': '#',
22
19
  };
23
20
 
24
- // Generated trees, vendored copies, and formats with no comment syntax are a different genre. `.claude/`
25
- // is harness-owned in every consumer — its files are overwritten on the next roll, so a finding there
26
- // names work nobody in that repo can land. The forge lints its own copies at `harness/`, not here.
27
- const SKIP = /(^|\/)(node_modules|dist|build|target|\.git|\.claude|coverage|__screenshots__|data\/harnesses)\/|\.min\.|\.d\.ts$|(^|\/)(pnpm-lock|package-lock)\./;
21
+ // Generated trees, vendored copies, and formats with no comment syntax are a different genre. `.claude/`,
22
+ // `.agents/` and `.codex/` are harness-owned in every consumer — overwritten on the next roll, so a finding
23
+ // there names work nobody in that repo can land. The forge lints its own copies at `harness/`, not here.
24
+ const SKIP = /(^|\/)(node_modules|dist|build|target|\.git|\.claude|\.agents|\.codex|coverage|__screenshots__|data\/harnesses)\/|\.min\.|\.d\.ts$|(^|\/)(pnpm-lock|package-lock)\./;
28
25
  // A generated file says so in its own first lines; the convention exempts it.
29
26
  const GENERATED = /@generated|DO NOT EDIT|AUTO-GENERATED|This file was generated/i;
30
27
  // Below this a file is too small for a density ratio to mean anything.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nurix/etna",
3
- "version": "0.20.16",
3
+ "version": "0.20.17",
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": "6b7b8d3d3e8f"
45
+ "etnaFingerprint": "2923378ebe87"
46
46
  }