@nurix/etna 0.19.10 → 0.19.11

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": "3745f4d420c5",
2
+ "fingerprint": "68a0c87df160",
3
3
  "harnesses": {
4
4
  "code": {
5
5
  "plugin": "code",
@@ -13,7 +13,7 @@ Strictly separated — never mix them:
13
13
  | Layer | Lives in |
14
14
  | --- | --- |
15
15
  | **Method** (timeless) | this file + `.claude/rules/method.md` (how sessions run) + `.claude/rules/artifacts.md` (what gets written) |
16
- | **State** (current) | `metadata/` — `TOPICS.md` (topic index) + `SESSIONS.md` (session ledger) + `lessons/` (operator layer) + `ops/` (maintenance run-logs) |
16
+ | **State** (current) | `metadata/` — `TOPICS.md` (topic index) + `SESSIONS.md` (session ledger) + `lessons/` (operator layer) + `ops/` (maintenance run-logs) + `writing-styles/` (style registry: `reading.md` default for operator-facing docs) |
17
17
  | **Record** (append-only) | each topic's `README.md` + artifacts |
18
18
 
19
19
  **The operator layer**: `metadata/lessons/` — read `DIGEST.md` at session start alongside the routing files; it is **prior, not canon** (its reading-protocol block governs). Everything else under `lessons/` (append-only `log/`, `forecasts.md`) loads on demand only. The `lessons-maintenance` agent (instruction set: `metadata/lessons/distillation.md`) runs **only during user sessions** — spawn it in the background when the `metadata/ops/` cursor falls a session behind.
@@ -29,7 +29,7 @@ Decide once, up front, from two reads:
29
29
 
30
30
  1. **Git.** If `.git/` is absent: `git init`. Ensure the root `.gitignore` exists with the minimal set (below). The workspace **must** end this run as a git repository — the session-close auto-commit depends on it.
31
31
  2. **Seed `metadata/`.** Create `metadata/TOPICS.md`, `metadata/SESSIONS.md`, and `metadata/method-changelog.md` from the templates below — create only what's missing; **never overwrite an existing file**. Stamp `harness-version:` in `TOPICS.md` frontmatter from `.claude/harness.json`.
32
- 3. **Seed the operator layer.** Create `metadata/lessons/` (`distillation.md`, `dimensions.md`, `DIGEST.md`, `forecasts.md`, empty `log/` with a `.gitkeep`) and `metadata/ops/lessons-miner.md` from the templates below — create only what's missing. These ship **empty**: every install accumulates its own operator's lessons via the `lessons-maintenance` agent; no personal content ever ships with the harness.
32
+ 3. **Seed the operator layer.** Create `metadata/lessons/` (`distillation.md`, `dimensions.md`, `DIGEST.md`, `forecasts.md`, empty `log/` with a `.gitkeep`) and `metadata/ops/lessons-miner.md` from the templates below — create only what's missing. These ship **empty**: every install accumulates its own operator's lessons via the `lessons-maintenance` agent; no personal content ever ships with the harness. Also seed the style registry `metadata/writing-styles/` (`README.md` + `reading.md` from the templates below, create-only) — the shipped `reading.md` is a generic default the operator refines in place.
33
33
  4. **Adopt existing content.** If topic-shaped folders already exist (a folder with a `README.md` that isn't harness machinery), fold them forward: add a `TOPICS.md` entry per topic (state phrase from its README's TL;DR/open threads), and create a `metadata.md` map for any topic lacking one (one line per file — name + what it is, from each file's H1/banner; bulk directories one line total). Adoption is registration, not rewriting — READMEs stay untouched.
34
34
  5. **Commit.** One commit: `🔧 baseline: discussion harness v<version>`.
35
35
  6. **Hand off.** Report created vs skipped vs adopted, then point at the next actions: start the first topic (say what you're thinking about), or resume via `metadata/TOPICS.md`.
@@ -45,7 +45,7 @@ Declarative, not a migration ladder — converge to the **current** shape; detec
45
45
  | Method changelog inside `CLAUDE.md` | `metadata/method-changelog.md` (copy the entries out; the CLI owns `CLAUDE.md` — flag, don't edit it) |
46
46
  | Instrument folders at the root | flag for the user to relocate outside the workspace (never move data yourself) |
47
47
 
48
- Only fold what is present. Also seed any missing operator-layer files (`metadata/lessons/` + `metadata/ops/` — same templates below, create-only; introduced in v0.2.0). Then re-stamp `harness-version:`, commit `🔧 baseline: reconciled to discussion harness v<version>`, and report every move.
48
+ Only fold what is present. Also seed any missing operator-layer files (`metadata/lessons/` + `metadata/ops/` — same templates below, create-only; introduced in v0.2.0) and any missing style-registry files (`metadata/writing-styles/` — templates below, create-only; introduced in v0.4.0). Then re-stamp `harness-version:`, commit `🔧 baseline: reconciled to discussion harness v<version>`, and report every move.
49
49
 
50
50
  ## Rules
51
51
 
@@ -231,3 +231,28 @@ Grammar: workspace record = last-processed git commit; transcripts = per-file pr
231
231
 
232
232
  ## Runs
233
233
  ````
234
+
235
+ `metadata/writing-styles/README.md`:
236
+
237
+ ````markdown
238
+ # writing-styles — the operator's style registry
239
+
240
+ > **Operator-owned state.** One file per writing register, named for it: `reading.md` (documents presented to the operator — the default), `blog.md`, `email.md`, … A style file is instructions to the writer: register, voice, form, length. The artifact rules' two-audience doctrine is the floor; a style refines on top of it. Style named but file missing → draft it from the operator's instructions in the moment, file it here marked `Not yet ratified`, apply it, surface it for ratification. Machine-facing writing (raw dumps, referential twins) is never styled from here.
241
+ ````
242
+
243
+ `metadata/writing-styles/reading.md`:
244
+
245
+ ````markdown
246
+ # reading — documents presented to the operator (default style)
247
+
248
+ > Applies to anything the operator will read — readable editions, syntheses filed for reaction, reports. This default ships with the harness; refine in place, dated.
249
+
250
+ - **Self-contained:** every referenced item's substance expanded inline where used; summarize in place when expansion would bloat; the reader never chases a link or an ID to understand a sentence.
251
+ - **No reference soup:** no lane IDs, item codes, or `file:line` anchors in body prose — at most one pointer line to the machine twin.
252
+ - **Present tense, declarative** — the document states what is, not a narration of what was done.
253
+ - **Each point stands alone** — readable selectively, in any order, with its full meaning intact.
254
+ - **Verdict first**, then support. Full sentences, plain words; no mid-document abbreviations or codenames.
255
+ - **Numbered handles only where the operator disposes by number**; stable across editions.
256
+ - **Tables for short enumerable facts only**; the argument lives in the prose.
257
+ - **Verbosity welcome when it buys self-containment**; cut by dropping what doesn't change the reader's next move.
258
+ ````
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "harness": "discussion",
3
3
  "name": "discussion",
4
- "version": "0.2.1",
4
+ "version": "0.4.0",
5
5
  "files": [
6
6
  ".prettierrc.json",
7
7
  ".prettierignore",
8
8
  ".vscode/settings.json"
9
9
  ],
10
- "digest": "14700b32c049"
10
+ "digest": "670ff91f4b1b"
11
11
  }
@@ -12,6 +12,8 @@ What gets written in a topic folder. How sessions run is [method.md](method.md).
12
12
 
13
13
  A ratified class-3 doc **is** the goal-track canon — never double-book it under canon.
14
14
 
15
+ **The two audiences**: every artifact serves exactly one reader — the **operator** (human) or the **agent** (main line, sub-agents, downstream syntheses). Operator-facing artifacts (syntheses, goal track, canon, auxiliaries the user reads) are **self-contained**: written in full verbosity, the substance of every cited item expanded inline in prose — summarized in place where full expansion would bloat — never lane IDs, item codes, or link trails the reader must chase. Agent-facing artifacts (raw dumps, and the referential twin of any operator doc) stay maximally cross-referenced: stable IDs, links, the citation grammar. When one document must serve both, it **forks**: the readable edition keeps the canonical name and slot; the referential twin lives in the topic's `machine/` subfolder and remains the citation-of-record (verification, adjudication, and downstream citing run against the twin). Each opens with a one-line pointer to the other; ratification stamps land on the readable edition and are mirrored onto the twin; the twins are the same content in two registers, never allowed to drift — a substantive change lands in both or is a break. Numbered handles the user disposes by (open questions, register items) survive in the readable edition — they are dialogue handles, not citations. The register itself is governed by the workspace style registry `metadata/writing-styles/`: one operator-owned file per register, `reading.md` the default for documents presented to the operator, others (`blog.md`, `email.md`, …) when the operator names one; a named-but-missing style is drafted from the operator's instructions in the moment, filed there unratified, and applied. Grandfathering applies: existing referential artifacts stand; fork on next touch or user request.
16
+
15
17
  **Banner**: class 1/2/3 artifacts and auxiliaries open with an H1 + `>` blockquote banner: **class · derivation (links + scale) · method · ISO date · ratification status**. Status applies to 2/3/auxiliaries only — raw dumps are immutable, never ratified. Exempt: canon (its own `**Status:**` line / orientation paragraph) and clips (two-line header).
16
18
 
17
19
  **Status vocabulary**: `**DRAFT — not yet ratified**` / `Not yet user-ratified` · `(ratified YYYY-MM-DD)` — at doc, section, or extract granularity · `**Superseded note (YYYY-MM-DD):** … kept as record` · `deferred — blocked on <gate>` vs the exclusion grades.
@@ -5,7 +5,7 @@ How sessions run in this workspace. What gets written is [artifacts.md](artifact
5
5
  ## Workspace layout
6
6
 
7
7
  - **Topic folders** — one folder = one long-running topic. Kebab-case noun phrase naming the **inquiry, not the deliverable** (`pricing-research`, not `pricing-report`). Every topic has a `README.md` (the record), a `metadata.md` (the map), and a `TOPICS.md` entry.
8
- - **`metadata/`** — all workspace state: `TOPICS.md` (topic index), `SESSIONS.md` (session ledger), `method-changelog.md` (workspace-local method notes; the harness itself versions via `.claude/harness.json`), `lessons/` (the operator layer: append-only log + always-loaded digest + forecasts), `ops/` (maintenance-agent run-logs). State lives here and nowhere else.
8
+ - **`metadata/`** — all workspace state: `TOPICS.md` (topic index), `SESSIONS.md` (session ledger), `method-changelog.md` (workspace-local method notes; the harness itself versions via `.claude/harness.json`), `lessons/` (the operator layer: append-only log + always-loaded digest + forecasts), `ops/` (maintenance-agent run-logs), `writing-styles/` (the operator's style registry — one file per register, `reading.md` the default for operator-facing documents). State lives here and nowhere else.
9
9
  - **External instruments** — code/data a topic depends on (scraper, corpus, pipeline) lives **outside the workspace**, never at the root: this folder holds only topics and the harness. Record the dependency on the depending topic's README (external path + ratification status); exclusions are recorded on the excluder's side.
10
10
  - **Git** — the workspace **is a git repository** (the `discussion-baseline` agent initializes one). The SessionEnd hook auto-commits each session's changes as one `📝 session close` batch — never per-file commits. Milestone commits by hand are still welcome: `✨` content, `🔧` workspace/method. Root `.gitignore` stays minimal.
11
11
  - **Grandfathering** — when the method changes, never reshuffle existing artifacts to match. New artifacts follow current rules; old layouts stay, flagged where confusing.
@@ -66,6 +66,10 @@ Method lives in the rules (timeless); state lives in `metadata/` (current); topi
66
66
 
67
67
  One entry per session, appended at the bottom. An entry is the session's **summary**, rewritten in place when the session resumes — never a resume-log. Format: `## YYYY-MM-DD — <goal headline>` + bullets: `**Goal:**` (the user's stated aim; update it if it shifts mid-session) · `**Touched:**` · `**Filed:**` (linked) · `**Close state:**` (where it stopped, what it awaits). Entries point into topics; content never lives here.
68
68
 
69
+ ### `writing-styles/` — the style registry
70
+
71
+ One operator-owned file per writing register (`reading.md` — the default for documents presented to the operator; `blog.md`, `email.md`, … as the operator introduces them). A style file is instructions to the writer — register, voice, form; the artifact rules' two-audience doctrine is the floor it refines. Style named but file missing → draft it from the operator's instructions in the moment, file it marked unratified, apply it. Machine-facing writing is never styled from here.
72
+
69
73
  ### `lessons/` + `ops/` — the operator layer
70
74
 
71
75
  - `metadata/lessons/` is two-tier: an append-only occurrence **`log/`** (one dated file per maintenance run, never edited, never loaded by default) distilled into **`DIGEST.md`** — the operator profile read at session start (**prior, not canon**; its reading-protocol block governs). Beside them: `forecasts.md` (the operator's falsifiable claims, captured in the moment; resolutions mined for calibration) and `distillation.md` (the maintenance instruction set + admission bar).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nurix/etna",
3
- "version": "0.19.10",
3
+ "version": "0.19.11",
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": {