@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.
- package/data/harness-index.json +1 -1
- package/data/harnesses/code/harness.json +2 -2
- package/data/harnesses/code/hooks/awareness.mjs +1 -1
- package/data/harnesses/code/hooks/lib/sweep.mjs +1 -1
- package/data/harnesses/code/skills/documentation/scripts/doc-lint.mjs +3 -2
- package/data/harnesses/code/skills/documentation/scripts/source-lint.mjs +5 -8
- package/data/harnesses/delivery/harness.json +2 -2
- package/data/harnesses/delivery/skills/documentation/scripts/doc-lint.mjs +3 -2
- package/data/harnesses/delivery/skills/documentation/scripts/source-lint.mjs +5 -8
- package/data/harnesses/etna/harness.json +2 -2
- package/data/harnesses/etna/skills/documentation/scripts/doc-lint.mjs +3 -2
- package/data/harnesses/etna/skills/documentation/scripts/source-lint.mjs +5 -8
- package/package.json +2 -2
package/data/harness-index.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"harness": "code",
|
|
3
3
|
"name": "code",
|
|
4
|
-
"version": "3.16.
|
|
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": "
|
|
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
|
|
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
|
|
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
|
|
26
|
-
|
|
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
|
-
//
|
|
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.
|
|
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": "
|
|
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
|
|
26
|
-
|
|
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
|
-
//
|
|
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.
|
|
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": "
|
|
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
|
|
26
|
-
|
|
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
|
-
//
|
|
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.
|
|
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": "
|
|
45
|
+
"etnaFingerprint": "2923378ebe87"
|
|
46
46
|
}
|