@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.
- package/README.md +1 -1
- package/data/catalog/rules/testing.md +1 -0
- package/data/harness-index.json +1 -1
- package/data/harnesses/code/agents/lld-mode.md +3 -3
- package/data/harnesses/code/agents/maintenance.md +5 -4
- package/data/harnesses/code/codex/agents/lld-mode.toml +2 -2
- package/data/harnesses/code/codex/agents/maintenance.toml +3 -3
- package/data/harnesses/code/harness.json +2 -2
- package/data/harnesses/code/hooks/awareness.mjs +22 -3
- package/data/harnesses/code/hooks/lib/ownership.mjs +39 -4
- package/data/harnesses/code/rules/testing.md +1 -0
- package/data/harnesses/code/skills/brainstorm/README.md +1 -1
- package/data/harnesses/code/skills/brainstorm/references/doctrine.md +22 -0
- package/data/harnesses/code/skills/brainstorm/references/harvest.md +34 -0
- package/data/harnesses/code/skills/design/SKILL.md +1 -1
- package/data/harnesses/code/skills/design/components/index.md +1 -1
- package/data/harnesses/code/skills/documentation/SKILL.md +2 -2
- package/data/harnesses/code/skills/documentation/references/frontmatter.md +13 -6
- package/data/harnesses/code/skills/documentation/templates/plan.md +4 -1
- package/data/harnesses/code/skills/issue-bridge/SKILL.md +1 -1
- package/data/harnesses/code/skills/testing/SKILL.md +1 -1
- package/data/harnesses/delivery/agents/lld-mode.md +3 -3
- package/data/harnesses/delivery/agents/maintenance.md +5 -4
- package/data/harnesses/delivery/codex/agents/lld-mode.toml +2 -2
- package/data/harnesses/delivery/codex/agents/maintenance.toml +3 -3
- package/data/harnesses/delivery/harness.json +2 -2
- package/data/harnesses/delivery/hooks/generate-ownership-index.mjs +7 -4
- package/data/harnesses/delivery/skills/brainstorm/README.md +1 -1
- package/data/harnesses/delivery/skills/brainstorm/references/doctrine.md +22 -0
- package/data/harnesses/delivery/skills/brainstorm/references/harvest.md +34 -0
- package/data/harnesses/delivery/skills/documentation/SKILL.md +2 -2
- package/data/harnesses/delivery/skills/documentation/references/frontmatter.md +13 -6
- package/data/harnesses/delivery/skills/documentation/templates/plan.md +4 -1
- package/data/harnesses/discover/harness.json +1 -1
- package/data/harnesses/discussion/CLAUDE.md +1 -1
- package/data/harnesses/discussion/harness.json +2 -2
- package/data/harnesses/etna/CLAUDE.md +16 -16
- package/data/harnesses/etna/agents/lld-mode.md +3 -3
- package/data/harnesses/etna/agents/maintenance.md +5 -4
- package/data/harnesses/etna/codex/agents/lld-mode.toml +2 -2
- package/data/harnesses/etna/codex/agents/maintenance.toml +3 -3
- package/data/harnesses/etna/harness.json +2 -2
- package/data/harnesses/etna/hooks/generate-ownership-index.mjs +18 -9
- package/data/harnesses/etna/rules/testing.md +1 -0
- package/data/harnesses/etna/skills/brainstorm/README.md +1 -1
- package/data/harnesses/etna/skills/brainstorm/references/doctrine.md +22 -0
- package/data/harnesses/etna/skills/brainstorm/references/harvest.md +34 -0
- package/data/harnesses/etna/skills/documentation/SKILL.md +2 -2
- package/data/harnesses/etna/skills/documentation/references/frontmatter.md +13 -6
- package/data/harnesses/etna/skills/documentation/templates/plan.md +4 -1
- package/data/harnesses/hr/harness.json +1 -1
- package/data/harnesses/kb-agi/harness.json +1 -1
- package/lib/codex/README.md +1 -1
- package/lib/codex/validate-codex-agents.mjs +1 -1
- 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/
|
|
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
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
|
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
|
|
package/lib/codex/README.md
CHANGED
|
@@ -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/
|
|
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/
|
|
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.
|
|
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": "
|
|
45
|
+
"etnaFingerprint": "bcf04d8d525c"
|
|
46
46
|
}
|