@nurix/etna 0.20.6 → 0.20.8

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.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/data/catalog/rules/testing.md +1 -0
  3. package/data/harness-index.json +1 -1
  4. package/data/harnesses/code/agents/lld-mode.md +3 -3
  5. package/data/harnesses/code/agents/maintenance.md +5 -4
  6. package/data/harnesses/code/codex/agents/lld-mode.toml +2 -2
  7. package/data/harnesses/code/codex/agents/maintenance.toml +3 -3
  8. package/data/harnesses/code/harness.json +2 -2
  9. package/data/harnesses/code/hooks/awareness.mjs +22 -3
  10. package/data/harnesses/code/hooks/lib/ownership.mjs +39 -4
  11. package/data/harnesses/code/rules/testing.md +1 -0
  12. package/data/harnesses/code/skills/brainstorm/README.md +1 -1
  13. package/data/harnesses/code/skills/brainstorm/references/doctrine.md +22 -0
  14. package/data/harnesses/code/skills/brainstorm/references/harvest.md +34 -0
  15. package/data/harnesses/code/skills/design/SKILL.md +1 -1
  16. package/data/harnesses/code/skills/design/components/index.md +1 -1
  17. package/data/harnesses/code/skills/documentation/SKILL.md +2 -2
  18. package/data/harnesses/code/skills/documentation/references/frontmatter.md +13 -6
  19. package/data/harnesses/code/skills/documentation/templates/plan.md +4 -1
  20. package/data/harnesses/code/skills/issue-bridge/SKILL.md +1 -1
  21. package/data/harnesses/code/skills/testing/SKILL.md +1 -1
  22. package/data/harnesses/delivery/agents/lld-mode.md +3 -3
  23. package/data/harnesses/delivery/agents/maintenance.md +5 -4
  24. package/data/harnesses/delivery/codex/agents/lld-mode.toml +2 -2
  25. package/data/harnesses/delivery/codex/agents/maintenance.toml +3 -3
  26. package/data/harnesses/delivery/harness.json +2 -2
  27. package/data/harnesses/delivery/hooks/generate-ownership-index.mjs +7 -4
  28. package/data/harnesses/delivery/skills/brainstorm/README.md +1 -1
  29. package/data/harnesses/delivery/skills/brainstorm/references/doctrine.md +22 -0
  30. package/data/harnesses/delivery/skills/brainstorm/references/harvest.md +34 -0
  31. package/data/harnesses/delivery/skills/documentation/SKILL.md +2 -2
  32. package/data/harnesses/delivery/skills/documentation/references/frontmatter.md +13 -6
  33. package/data/harnesses/delivery/skills/documentation/templates/plan.md +4 -1
  34. package/data/harnesses/discover/harness.json +1 -1
  35. package/data/harnesses/discussion/CLAUDE.md +1 -1
  36. package/data/harnesses/discussion/harness.json +2 -2
  37. package/data/harnesses/etna/CLAUDE.md +16 -16
  38. package/data/harnesses/etna/agents/lld-mode.md +3 -3
  39. package/data/harnesses/etna/agents/maintenance.md +5 -4
  40. package/data/harnesses/etna/codex/agents/lld-mode.toml +2 -2
  41. package/data/harnesses/etna/codex/agents/maintenance.toml +3 -3
  42. package/data/harnesses/etna/harness.json +2 -2
  43. package/data/harnesses/etna/hooks/generate-ownership-index.mjs +18 -9
  44. package/data/harnesses/etna/rules/testing.md +1 -0
  45. package/data/harnesses/etna/skills/brainstorm/README.md +1 -1
  46. package/data/harnesses/etna/skills/brainstorm/references/doctrine.md +22 -0
  47. package/data/harnesses/etna/skills/brainstorm/references/harvest.md +34 -0
  48. package/data/harnesses/etna/skills/documentation/SKILL.md +2 -2
  49. package/data/harnesses/etna/skills/documentation/references/frontmatter.md +13 -6
  50. package/data/harnesses/etna/skills/documentation/templates/plan.md +4 -1
  51. package/data/harnesses/hr/harness.json +1 -1
  52. package/data/harnesses/kb-agi/harness.json +1 -1
  53. package/lib/codex/README.md +1 -1
  54. package/lib/codex/validate-codex-agents.mjs +1 -1
  55. package/package.json +2 -2
@@ -24,7 +24,7 @@ Document contracts and architecture, not implementation details. Show function s
24
24
 
25
25
  The journey — dates, migrations, progress, supersessions — lives only in records (`docs/history/`); when reality changes, a truth document simply becomes correct. The full strip-list and the record-side rules: [`references/style-guide.md`](references/style-guide.md) § The Two Natures — Tense & History.
26
26
 
27
- The mechanical subset of these rules is checked by [`scripts/doc-lint.mjs`](scripts/doc-lint.mjs) — run it over changed docs before finishing. Block-severity findings must be fixed; `<!-- doc-lint-disable: <id> -->` with a reason beside it is the escape hatch.
27
+ The mechanical subset of these rules is checked by [`scripts/doc-lint.mjs`](scripts/doc-lint.mjs) — run it over changed docs before finishing. Block-severity findings must be fixed; `<!-- doc-lint-disable: <id> -->` with a reason beside it is the escape hatch. Two invocation traps: the disable comment takes **bare rule ids only** — prose inside the comment silently breaks the parse, so put the reason in a second comment beside it — and the script grades truth-vs-record scope by matching `docs/(history|research|memory)/` against **the path string it is given**, so always hand it a repo-root-relative path; linting a record from inside its own folder grades it as a truth document.
28
28
 
29
29
  ---
30
30
 
@@ -85,7 +85,7 @@ The two guarantees are complementary and both break on mixing: a reader holding
85
85
  | Derive/update a feature doc's `owns:` | [`references/frontmatter.md`](references/frontmatter.md) |
86
86
  | Update existing doc | § Editing an existing doc (below) |
87
87
  | Instruction file (`CLAUDE.md`, a rule, an agent, skill prose) | [`references/instruction-style.md`](references/instruction-style.md) — not these templates; every-load prose stays lean, and the present-tense rule still applies |
88
- | Author or restructure a **skill** (fit, triggers, shape, anatomy, shipping) | The skill-authoring field guide — the `etna` repo (`nurixlabs/etna`), folder `docs/architecture/skills/playbook/`, chapters `00`–`10`. **No etna checkout available ⇒ ask the user for access to the etna repo, or proceed from first principles** with [`references/instruction-style.md`](references/instruction-style.md) governing the prose. This row is the only place the playbook is referenced |
88
+ | Author or restructure a **skill** (fit, triggers, shape, anatomy, shipping) | The skill-authoring field guide — the `etna` repo (`nurixlabs/etna`), folder `docs/playbooks/skills/`, chapters `00`–`10`. **No etna checkout available ⇒ ask the user for access to the etna repo, or proceed from first principles** with [`references/instruction-style.md`](references/instruction-style.md) governing the prose. This row is the only place the playbook is referenced |
89
89
  | **No template matches** | [`references/untemplated.md`](references/untemplated.md) — shape decisions + the co-authoring workflow |
90
90
 
91
91
  ---
@@ -24,13 +24,20 @@ A feature doc's ownership frontmatter is `owns:` (required), `module:` (optional
24
24
 
25
25
  **1. `owns:`** (the path scope)
26
26
 
27
- Read the doc's content. Extract every source file path it references (file listings, function locations, component paths). Group them into the narrowest glob patterns that cover all referenced files without overlapping another doc's `owns:` globs at equal specificity. A doc may own several globs.
27
+ `owns:` names the **regions whose truth this doc holds** — the directories where a change must be reconciled against this document before it ships. It is an authority claim a human makes, not an inventory of what the feature touches.
28
28
 
29
- | Doc references | Glob |
30
- | ------------------------------------ | ------------------------- |
31
- | Multiple files under one directory | `src/feature/**` |
32
- | Specific files in a shared directory | List each file explicitly |
33
- | A single entry-point file | The exact file path |
29
+ **A file the doc merely references is not a file the doc owns.** Reaching across a boundary into a shared module is a fact about the code, and it belongs to whoever owns that module's region. Transcribing those reach edges as `owns:` entries is how an index stops being a routing table and becomes a hand-maintained import graph: rows then track the dependency graph rather than the feature count, and the shared upstream file ends up filed under whichever downstream feature happened to name it first — a consumer recorded as the authority.
30
+
31
+ Prefer one region glob over many file globs. Ten paths say nothing about which is the entry point; one region says where the doc's writ runs.
32
+
33
+ | The doc governs | Glob |
34
+ | -------------------------------------------- | ------------------------------------ |
35
+ | A feature's own directory | `src/feature/**` |
36
+ | A feature split across two directories | One glob each |
37
+ | A single entry-point file, and nothing beside it | The exact file path |
38
+ | A shared file several features import | **Nothing — leave it unowned** |
39
+
40
+ **An unowned shared file is the system working, not a gap.** A shared module's authority is the contract it exposes, not any one consumer, so a library-references file or a common utility legitimately has no owning doc. Claiming it would make the index bigger and the routing less certain at once.
34
41
 
35
42
  Glob each pattern against the codebase. At `status: active`, drop any that match nothing; at `status: draft`, projected globs may match nothing yet — confirm them against real code when the doc flips to `active`.
36
43
 
@@ -71,7 +71,10 @@ Why this work is happening *now*. Link to the spec for *what* we're building; th
71
71
  <!-- Written by the `testing` skill (plan-gate mode) at the plan gate (after `boundary`). One row per
72
72
  promised behavior: layer · target file · oracle · fixtures · an empty Outcome cell the
73
73
  verification gate fills (satisfied / owes nothing / blocked → backlog). Amendable while the
74
- plan is open. Do not hand-author. -->
74
+ plan is open. Do not hand-author. NEVER put a pipe in a ledger cell, escaped or not — the
75
+ compliance hook splits rows on `|` at a fixed column index with no unescaping, so a
76
+ markdown-legal `\|` shifts every later cell and the wall blocks a row that is in fact
77
+ discharged. Write "`install` or `update`", not "`install \| update`". -->
75
78
 
76
79
  ## Open Questions
77
80
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "harness": "hr",
3
3
  "name": "hr",
4
- "version": "0.1.14",
4
+ "version": "0.1.15",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "harness": "kb-agi",
3
3
  "name": "kb-agi",
4
- "version": "1.0.2",
4
+ "version": "1.0.3",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
@@ -32,7 +32,7 @@ The two channels do not install the same set. The **CLI** writes the full Codex
32
32
 
33
33
  ## Subagents are authored, not derived at install
34
34
 
35
- `.claude/agents/*.md → .codex/agents/*.toml` is a semantic conversion, so the twin is **authored from the `.md` by following** [`docs/architecture/harness/authoring-agents.md`](../../../../docs/architecture/harness/authoring-agents.md) — the model that writes or edits the agent produces the twin inline (frontmatter → `name`/`description`, body verbatim → `developer_instructions`, `tools:` dropped to a comment, Claude model aliases omitted), with **no external CLI**. The committed `agents/<name>.codex.toml` is checked by the validation gate:
35
+ `.claude/agents/*.md → .codex/agents/*.toml` is a semantic conversion, so the twin is **authored from the `.md` by following** [`docs/playbooks/agents.md`](../../../../docs/playbooks/agents.md) — the model that writes or edits the agent produces the twin inline (frontmatter → `name`/`description`, body verbatim → `developer_instructions`, `tools:` dropped to a comment, Claude model aliases omitted), with **no external CLI**. The committed `agents/<name>.codex.toml` is checked by the validation gate:
36
36
 
37
37
  ```bash
38
38
  node packages/cli/lib/codex/validate-codex-agents.mjs # or: npm run validate:codex-agents
@@ -1,6 +1,6 @@
1
1
  // packages/cli/lib/codex/validate-codex-agents.mjs
2
2
  // The Codex-twin validation gate — decoupled from any generator. A `<name>.codex.toml`
3
- // twin is now authored by the AI following docs/architecture/harness/authoring-agents.md,
3
+ // twin is now authored by the AI following docs/playbooks/agents.md,
4
4
  // so this is the check that keeps a malformed or Claude-only twin from shipping: the twins
5
5
  // are copied UNPARSED into the bundle (build-data.js) and a consumer's .codex/agents/, so
6
6
  // nothing else catches a bad one before Codex fails to load it in that repo. Run it after
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nurix/etna",
3
- "version": "0.20.6",
3
+ "version": "0.20.8",
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": "5e362f34919c"
45
+ "etnaFingerprint": "bcf04d8d525c"
46
46
  }