@nurix/etna 0.19.33 → 0.19.35

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 (84) hide show
  1. package/data/harness-index.json +5 -1
  2. package/data/harnesses/code/CLAUDE.md +21 -11
  3. package/data/harnesses/code/harness.json +2 -2
  4. package/data/harnesses/code/rules/general.md +1 -0
  5. package/data/harnesses/code/rules/testing.md +1 -1
  6. package/data/harnesses/code/rules/verification.md +51 -0
  7. package/data/harnesses/code/skills/test-plan/SKILL.md +3 -3
  8. package/data/harnesses/delivery/.prettierignore +29 -0
  9. package/data/harnesses/delivery/.prettierrc.json +3 -0
  10. package/data/harnesses/delivery/.vscode/settings.json +19 -0
  11. package/data/harnesses/delivery/CLAUDE.md +123 -0
  12. package/data/harnesses/delivery/agents/brainstorm.md +144 -0
  13. package/data/harnesses/delivery/agents/data-generator.md +23 -0
  14. package/data/harnesses/delivery/agents/eval-runner.md +23 -0
  15. package/data/harnesses/delivery/agents/judge.md +23 -0
  16. package/data/harnesses/delivery/agents/lld-mode.md +56 -0
  17. package/data/harnesses/delivery/agents/maintenance.md +229 -0
  18. package/data/harnesses/delivery/agents/prompt-iterator.md +23 -0
  19. package/data/harnesses/delivery/agents/red-team.md +23 -0
  20. package/data/harnesses/delivery/agents/regression-runner.md +28 -0
  21. package/data/harnesses/delivery/agents/retro.md +46 -0
  22. package/data/harnesses/delivery/codex/agents/brainstorm.toml +142 -0
  23. package/data/harnesses/delivery/codex/agents/data-generator.toml +22 -0
  24. package/data/harnesses/delivery/codex/agents/eval-runner.toml +22 -0
  25. package/data/harnesses/delivery/codex/agents/judge.toml +22 -0
  26. package/data/harnesses/delivery/codex/agents/lld-mode.toml +52 -0
  27. package/data/harnesses/delivery/codex/agents/maintenance.toml +228 -0
  28. package/data/harnesses/delivery/codex/agents/prompt-iterator.toml +22 -0
  29. package/data/harnesses/delivery/codex/agents/red-team.toml +22 -0
  30. package/data/harnesses/delivery/codex/agents/regression-runner.toml +27 -0
  31. package/data/harnesses/delivery/codex/agents/retro.toml +45 -0
  32. package/data/harnesses/delivery/harness.json +11 -0
  33. package/data/harnesses/delivery/hooks/generate-ownership-index.mjs +148 -0
  34. package/data/harnesses/delivery/hooks/hooks.json +16 -0
  35. package/data/harnesses/delivery/rules/changelog.md +19 -0
  36. package/data/harnesses/delivery/rules/evals.md +23 -0
  37. package/data/harnesses/delivery/rules/model-tiers.md +18 -0
  38. package/data/harnesses/delivery/rules/nomenclature.md +34 -0
  39. package/data/harnesses/delivery/rules/prompting.md +23 -0
  40. package/data/harnesses/delivery/skills/brainstorm/README.md +56 -0
  41. package/data/harnesses/delivery/skills/brainstorm/SKILL.md +173 -0
  42. package/data/harnesses/delivery/skills/brainstorm/references/doctrine.md +98 -0
  43. package/data/harnesses/delivery/skills/brainstorm/references/harvest.md +86 -0
  44. package/data/harnesses/delivery/skills/brainstorm/references/session-schema.md +186 -0
  45. package/data/harnesses/delivery/skills/brainstorm/scripts/detector.mjs +460 -0
  46. package/data/harnesses/delivery/skills/cost-report/SKILL.md +24 -0
  47. package/data/harnesses/delivery/skills/documentation/SKILL.md +129 -0
  48. package/data/harnesses/delivery/skills/documentation/references/examples.md +279 -0
  49. package/data/harnesses/delivery/skills/documentation/references/frontmatter.md +44 -0
  50. package/data/harnesses/delivery/skills/documentation/references/style-guide.md +340 -0
  51. package/data/harnesses/delivery/skills/documentation/references/untemplated.md +38 -0
  52. package/data/harnesses/delivery/skills/documentation/scripts/doc-lint.mjs +140 -0
  53. package/data/harnesses/delivery/skills/documentation/templates/Readme.md +31 -0
  54. package/data/harnesses/delivery/skills/documentation/templates/api-reference.md +20 -0
  55. package/data/harnesses/delivery/skills/documentation/templates/architecture-decision.md +121 -0
  56. package/data/harnesses/delivery/skills/documentation/templates/backlog.md +33 -0
  57. package/data/harnesses/delivery/skills/documentation/templates/changelog-entry.md +57 -0
  58. package/data/harnesses/delivery/skills/documentation/templates/changelog-index.md +41 -0
  59. package/data/harnesses/delivery/skills/documentation/templates/docs-readme.md +72 -0
  60. package/data/harnesses/delivery/skills/documentation/templates/domain-model.md +30 -0
  61. package/data/harnesses/delivery/skills/documentation/templates/environment-registry.md +15 -0
  62. package/data/harnesses/delivery/skills/documentation/templates/feature.md +149 -0
  63. package/data/harnesses/delivery/skills/documentation/templates/glossary.md +11 -0
  64. package/data/harnesses/delivery/skills/documentation/templates/memory-main.md +25 -0
  65. package/data/harnesses/delivery/skills/documentation/templates/migration-runbook.md +34 -0
  66. package/data/harnesses/delivery/skills/documentation/templates/non-goals.md +11 -0
  67. package/data/harnesses/delivery/skills/documentation/templates/operations-procedure.md +36 -0
  68. package/data/harnesses/delivery/skills/documentation/templates/plan.md +64 -0
  69. package/data/harnesses/delivery/skills/documentation/templates/protected-files.md +37 -0
  70. package/data/harnesses/delivery/skills/documentation/templates/root-readme.md +104 -0
  71. package/data/harnesses/delivery/skills/documentation/templates/security-overview.md +27 -0
  72. package/data/harnesses/delivery/skills/documentation/templates/structure.md +65 -0
  73. package/data/harnesses/delivery/skills/documentation/templates/system-overview.md +32 -0
  74. package/data/harnesses/delivery/skills/documentation/templates/testing-strategy.md +29 -0
  75. package/data/harnesses/delivery/skills/escalate/SKILL.md +25 -0
  76. package/data/harnesses/delivery/skills/prompt-eval/SKILL.md +22 -0
  77. package/data/harnesses/delivery/skills/prompt-library/SKILL.md +36 -0
  78. package/data/harnesses/delivery/skills/route/SKILL.md +21 -0
  79. package/data/harnesses/etna/CLAUDE.md +1 -1
  80. package/data/harnesses/etna/harness.json +2 -2
  81. package/data/harnesses/etna/rules/general.md +1 -0
  82. package/data/harnesses/etna/rules/testing.md +1 -1
  83. package/data/harnesses/hr/harness.json +1 -1
  84. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: prompt-eval
3
+ description: Use when a prompt needs its quality measured — after drafting or revising a prompt, before certifying a library entry, or when comparing prompt variants. Runs the golden-set eval loop with rubric grading and reports deltas. Triggers on /prompt-eval, "eval this prompt", "does this variant score better", "run the golden set", "certify this prompt".
4
+ ---
5
+
6
+ # Prompt Eval — the golden-set loop
7
+
8
+ A prompt's quality claim is its eval result, nothing else. This skill runs the loop; conventions for golden sets, rubrics, and thresholds are `.claude/rules/evals.md`.
9
+
10
+ ## Procedure
11
+
12
+ 1. **Locate the family's golden set** at `evals/{family}/` — the owning feature doc names the family. A prompt with no golden set gets one *first* (eval-first: the set ships with the prompt, and `data-generator` drafts edge-case items for human review).
13
+ 2. **Run the set** against the prompt via `eval-runner` — every item, not a sample. Batch variants in one run so scores are comparable.
14
+ 3. **Grade with the family's rubric.** Mechanical checks (format, required fields, refusal correctness) grade in code; judgment dimensions grade against the rubric's anchors. Report per-dimension scores and the delta against the incumbent prompt's certified score.
15
+ 4. **Gate:** meeting the family's threshold on iteration is a *candidate*; certification for the library additionally requires the `judge` ship gate (frontier, one dispatch — the only frontier call in the loop).
16
+ 5. **Record:** the winning variant's scores go into its `prompt-library` entry; the losing variants' deltas belong in the changelog entry's refinement context.
17
+
18
+ ## Rules
19
+
20
+ - **Iteration stays cheap.** The draft → eval → revise loop runs on economy (`eval-runner`) and standard (`prompt-iterator`) tiers; the frontier judge appears once, at the gate — never inside the loop.
21
+ - **Never weaken a rubric to pass a prompt.** A rubric change is a design change to the family's eval suite: it goes through the owning feature doc, re-runs the whole family, and re-certifies every entry.
22
+ - **A failing eval is a result, not an obstacle.** Report it honestly; if the family genuinely needs a stronger tier, that is the `escalate` skill's evidence.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: prompt-library
3
+ description: Use when creating, versioning, retrieving, or auditing a production prompt — any write into prompts/{family}/, any "which prompt do we use for X", any certification question. Owns the library entry format - tier certification, eval score, date. Triggers on /prompt-library, "add this to the library", "what's our prompt for", "is this prompt certified", "bump the prompt version".
4
+ ---
5
+
6
+ # Prompt Library — versioned, certified entries
7
+
8
+ `prompts/{family}/` is a library of certified production artifacts, not a scratchpad. Every entry is versioned, eval-scored, and tier-certified; scratch iterations live outside until they pass.
9
+
10
+ ## The entry format
11
+
12
+ Each prompt is one file at `prompts/{family}/{name}.md` with frontmatter:
13
+
14
+ ```yaml
15
+ ---
16
+ version: 3 # integer, bumped on every content change
17
+ tier: standard # the tier this prompt is certified for (economy | standard | frontier)
18
+ eval-score: 0.94 # the certified golden-set score at this version
19
+ certified: 2026-07-26 # date of the certifying run
20
+ status: active # active | candidate | retired
21
+ ---
22
+ ```
23
+
24
+ The body is the prompt itself, verbatim — no narration, no history (the journey lives in changelog entries). A `candidate` has passed its family threshold but not the `judge` gate; `retired` entries stay in place for provenance (consumers must never load them — status is the filter).
25
+
26
+ ## Procedure
27
+
28
+ - **Create / update**: a content change bumps `version`, resets `status` to `candidate`, and goes through `prompt-eval` → `judge` before flipping back to `active` with fresh `eval-score` and `certified` values. The owning feature doc's `owns:` glob covers the family — read it first.
29
+ - **Retrieve**: match by family + status `active`; the entry's `tier` names the tier it runs on — dispatch accordingly, never stronger (that is an unevidenced promotion).
30
+ - **Audit** (on demand, and by `regression-runner` after a model-generation change): every `active` entry whose `certified` date precedes the current `model-tiers` mapping is stale — re-certify or flag.
31
+
32
+ ## Rules
33
+
34
+ - **Certification is per tier.** A prompt certified on standard says nothing about economy; a demotion experiment that passes produces a *new* certification at the lower tier.
35
+ - **One prompt, one entry.** Variants under comparison are `candidate` siblings; only one `active` per name.
36
+ - **Never hand-edit `eval-score`** — it is written by the certifying run or not at all.
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: route
3
+ description: Use when starting any piece of prompt work — drafting, evaluating, generating test data, probing, or judging — before dispatching any agent or choosing any tier. The entry point that classifies the task into a task type, reads the routing table, and dispatches the pinned agent. Triggers on /route, "work on this prompt", "run the evals", "which model should this use", or any prompt task whose tier hasn't been routed yet.
4
+ ---
5
+
6
+ # Route — classify, look up, dispatch
7
+
8
+ The model decision belongs to the routing table in `CLAUDE.md` § The Routing Policy, not to you and not to the user. This skill is the single entry point that applies it.
9
+
10
+ ## Procedure
11
+
12
+ 1. **Classify the task into exactly one task type** from the routing table's rows. Classification is mechanical work — do it inline at the cheapest capable tier, never by dispatching a frontier agent to think about it. When a task spans types (e.g. "draft a prompt and evaluate it"), decompose: each leg routes separately.
13
+ 2. **Read the row**: task type → tier → executing agent.
14
+ 3. **Dispatch the named agent.** The agent's own pin enforces the tier — never override the model at dispatch time. Work with no matching row is new: route it provisionally to the standard tier, do the work, and record the missing row as an out-of-scope discovery so the table gains it.
15
+ 4. **Never route around a failing eval.** If the routed tier's output fails its evals, the answer is the `escalate` skill (evidence-gated promotion), not a quiet re-dispatch on a stronger agent.
16
+
17
+ ## What this skill refuses
18
+
19
+ - Naming a model. Tiers only; the mapping lives in `.claude/rules/model-tiers.md` and the agents' pins.
20
+ - Frontier dispatch for mechanical work (eval runs, data generation, classification) — the routing guardrails in `CLAUDE.md` prohibit it regardless of who asks.
21
+ - Skipping the table because the task "obviously" needs the strongest model — that intuition is exactly what the escalation ladder exists to test.
@@ -152,7 +152,7 @@ When a plan's implementation surfaces work that is important but outside the pla
152
152
 
153
153
  ❌ prohibitions hold unless the user explicitly asks otherwise; ✅ and ⚠️ items are standing policy:
154
154
 
155
- - ❌ **Tests** — etna is a markdown-authoring repo plus a small CLI with no test suite; never generate, update, or modify test files unless the user explicitly asks. (The `code` harness ships a suite-first posture for the projects it governs — that is a shipped rule, not etna's own.)
155
+ - ❌ **Tests** — etna is a markdown-authoring repo plus a small CLI with no test suite; never generate, update, or modify test files unless the user explicitly asks. (The `code` harness ships a gated-verification posture for the projects it governs — that is a shipped rule, not etna's own.)
156
156
  - ❌ **Dependencies** — never upgrade frameworks, libraries, or dependencies.
157
157
  - ❌ **Compatibility** — never maintain backward compatibility unless specified.
158
158
  - ❌ **Branches & Worktrees [override]** — never self-create git branches or worktrees; commit straight to the checked-out branch. This replaces any built-in "branch first on the default branch" default. Exception: when the user asks for a pull request, create the branch the PR requires before committing its changes.
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "harness": "etna",
3
3
  "name": "etna",
4
- "version": "1.3.2",
4
+ "version": "1.3.4",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
8
8
  ".vscode/settings.json"
9
9
  ],
10
- "digest": "c7f202566db9"
10
+ "digest": "4a94c1c4b34c"
11
11
  }
@@ -22,6 +22,7 @@ Runtime versions, the canonical package list, and GitHub Actions pins — the wo
22
22
  | `@reduxjs/toolkit` | ^2.11.2 | State management | `zustand`, `jotai` |
23
23
  | `react-redux` | ^9.2.0 | Redux React bindings | — |
24
24
  | `axios` | ^1.13.2 | HTTP requests | `fetch` |
25
+ | `@microsoft/fetch-event-source` | ^2.0.1 | SSE over POST — streaming agent output | hand-rolled `getReader()` loops, `EventSource` |
25
26
  | `date-fns` | ^4.1.0 | Date formatting | `moment`, `dayjs` |
26
27
  | `@dnd-kit/core` | ^6.3.1 | Drag and drop | `react-beautiful-dnd` |
27
28
  | `@xyflow/react` | ^12.11.0 | Node-based flow charts | `reactflow`, `react-flow-renderer` |
@@ -1,6 +1,6 @@
1
1
  # Testing
2
2
 
3
- Test technology and placement — framework per stack, suite layout, mocking policy; the suite-first policy (what gets tests, run-and-report discipline) is the harness `CLAUDE.md` Tests guardrail, not here. Framework choice is **never** ad hoc and never the user's problem mid-task: detect the stack, use its row; if the repo already has a runner, that runner wins — **never** introduce a second framework beside it.
3
+ Test technology and placement — framework per stack, suite layout, mocking policy; **when** a test is written and how work is proven is [`verification.md`](verification.md), not here. Framework choice is **never** ad hoc and never the user's problem mid-task: detect the stack, use its row; if the repo already has a runner, that runner wins — **never** introduce a second framework beside it.
4
4
 
5
5
  ## Frameworks by stack
6
6
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "harness": "hr",
3
3
  "name": "hr",
4
- "version": "0.1.12",
4
+ "version": "0.1.13",
5
5
  "files": [
6
6
  ".prettierignore",
7
7
  ".prettierrc.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nurix/etna",
3
- "version": "0.19.33",
3
+ "version": "0.19.35",
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": {