@nurix/etna 0.20.49 → 0.20.50

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": "cc18c2845819",
2
+ "fingerprint": "1e7b6e289709",
3
3
  "harnesses": {
4
4
  "code": {
5
5
  "plugin": "code",
@@ -142,7 +142,7 @@ The single policy for sub-agent dispatch — when to fan out, at what tier, and
142
142
 
143
143
  - **Delegate to keep bulk out of the main context.** Wide file reads, sweeps, broad research, audits, fixture prep — work whose raw tool output the main session doesn't need — defaults to a sub-agent: output a sub-agent reads dies with it, while output read inline fills the main context and brings its compaction closer, which is where a long session loses what it knew. **Tokens are not the constraint — assume them abundant.** Never trim a read, a check or a verification to save them; the main context's capacity is what delegation protects. The hand-off is self-contained (the sub-agent sees none of the conversation); run independent delegations in parallel.
144
144
  - **The policy binds every agent, not only the main session.** A sub-agent doing build work inherits these defaults with the dispatch capability to honor them (Runtime Notes): it dispatches its own sub-agents for work this policy routes off-thread — the bookkeeping drain, a wide read — instead of absorbing it into its own loop. What never delegates (a gate verdict, browser driving, the pins the drive earned) never delegates at any level.
145
- - **Every dispatch carries a goal, milestones, a budget and a progress file.** The brief names the result that ends it, its intermediate milestones in order, and a wall-clock budget derived from the work — a run of n browser journeys is n × 10 s, a build step is what its last run took plus half again — and tells the sub-agent to append one line per milestone to `/tmp/<task>-progress.log` (`<UTC time> <milestone> <started|done|stuck> — <one-line result>`), before and after anything expected to run past two minutes. The dispatching agent checks that file on a schedule matched to the budget — a background monitor or a timed check, never a blind wait — and when a milestone overruns its budget it looks at the transcript, the process list and the log, then unblocks the sub-agent with a message, stops it, or takes the step over. An overrun never passes unread. Both failure modes this replaces were observed in one program run: sub-agents that stalled for an hour with nobody watching, and a main session that then redid the dispatched work inline, losing the parallelism the dispatch existed for.
145
+ - **Every dispatch carries a goal, milestones, a budget and a progress file.** The brief names the result that ends it, its intermediate milestones in order, and a wall-clock budget derived from the work — a run of n browser journeys is n × 10 s, a build step is what its last run took plus half again — and tells the sub-agent to append one line per milestone to `/tmp/<task>-progress.log` (`<UTC time> <milestone> <started|done|stuck> — <one-line result>`), before and after anything expected to run past two minutes. The dispatching agent checks that file on a schedule matched to the budget — a background monitor or a timed check, never a blind wait — and when a milestone overruns its budget it looks at the transcript, the process list and the log, then unblocks the sub-agent with a message, stops it, or takes the step over. An overrun never passes unread. Both failure modes this replaces were observed in one program run: sub-agents that stalled for an hour with nobody watching, and a main session that then redid the dispatched work inline, losing the parallelism the dispatch existed for. A sub-agent a workflow started is answered through the workflow, never by message: a message to it starts a second copy beside the one still running, and the two then write the same files. Fix the shared state it reported, or stop the workflow and re-run it.
146
146
  - **Parallel plans cascade into each other.** Running several plans of one program at once, each on its own branch, pays only when the cascade is planned for. Every merge into `dev` moves the base under every open branch, so an open pull request re-merges `dev` before its CI run is worth waiting on — a run on a stale base spends twenty to forty minutes proving nothing. The append-only files every plan writes (the changelog index, the backlog, project memory) conflict on every merge and resolve as a union, in priority order where the file is ordered; a re-merge re-runs the typecheck and the touched suites before its push. Parallel load is a fault of its own: a suite run beside several building sub-agents times out tests that pass alone, so a timeout in a file the plan does not touch is re-run alone before it is called a defect.
147
147
  - **Small or judgment work stays inline.** A task finishable in a handful of tool calls is faster done than briefed. **Never delegate judgment by reflex** — a second opinion is for a high-stakes call or an explicit request.
148
148
  - **A delegated result is a report, not verifiable ground truth** — verify load-bearing results directly.
@@ -29,5 +29,5 @@
29
29
  "origin": "https://cdn.nustack.io",
30
30
  "track": "latest"
31
31
  },
32
- "digest": "393786214dd0"
32
+ "digest": "7bf99a09b133"
33
33
  }
@@ -155,7 +155,7 @@ When a plan's implementation surfaces work that is important but outside the pla
155
155
  The single policy for sub-agent dispatch — when to fan out, at what tier, and how far to trust the result. Component-internal dispatch mechanics (the foreman loop, the brainstorm twin, batch classification) stay in their components and defer here for anything this section covers. No dispatch mechanism ⇒ inline.
156
156
 
157
157
  - **Delegate to keep bulk out of the main context.** Wide file reads, sweeps, broad research, audits, fixture prep — work whose raw tool output the main session doesn't need — defaults to a sub-agent: output a sub-agent reads dies with it, while output read inline fills the main context and brings its compaction closer, which is where a long session loses what it knew. **Tokens are not the constraint — assume them abundant.** Never trim a read, a check or a verification to save them; the main context's capacity is what delegation protects. The hand-off is self-contained (the sub-agent sees none of the conversation); run independent delegations in parallel.
158
- - **Every dispatch carries a goal, milestones, a budget and a progress file.** The brief names the result that ends it, its intermediate milestones in order, and a wall-clock budget derived from the work — a run of n browser journeys is n × 10 s, a build step is what its last run took plus half again — and tells the sub-agent to append one line per milestone to `/tmp/<task>-progress.log` (`<UTC time> <milestone> <started|done|stuck> — <one-line result>`), before and after anything expected to run past two minutes. The dispatching agent checks that file on a schedule matched to the budget — a background monitor or a timed check, never a blind wait — and when a milestone overruns its budget it looks at the transcript, the process list and the log, then unblocks the sub-agent with a message, stops it, or takes the step over. An overrun never passes unread. Both failure modes this replaces were observed in one program run: sub-agents that stalled for an hour with nobody watching, and a main session that then redid the dispatched work inline, losing the parallelism the dispatch existed for.
158
+ - **Every dispatch carries a goal, milestones, a budget and a progress file.** The brief names the result that ends it, its intermediate milestones in order, and a wall-clock budget derived from the work — a run of n browser journeys is n × 10 s, a build step is what its last run took plus half again — and tells the sub-agent to append one line per milestone to `/tmp/<task>-progress.log` (`<UTC time> <milestone> <started|done|stuck> — <one-line result>`), before and after anything expected to run past two minutes. The dispatching agent checks that file on a schedule matched to the budget — a background monitor or a timed check, never a blind wait — and when a milestone overruns its budget it looks at the transcript, the process list and the log, then unblocks the sub-agent with a message, stops it, or takes the step over. An overrun never passes unread. Both failure modes this replaces were observed in one program run: sub-agents that stalled for an hour with nobody watching, and a main session that then redid the dispatched work inline, losing the parallelism the dispatch existed for. A sub-agent a workflow started is answered through the workflow, never by message: a message to it starts a second copy beside the one still running, and the two then write the same files. Fix the shared state it reported, or stop the workflow and re-run it.
159
159
  - **Small or judgment work stays inline.** A task finishable in a handful of tool calls is faster done than briefed. **Never delegate judgment by reflex** — a second opinion is for a high-stakes call or an explicit request.
160
160
  - **A delegated result is a report, not verifiable ground truth** — verify load-bearing results directly.
161
161
  - **Tiers**: mechanical fan-out → the cheapest capable tier; judgment-heavy delegation → the session's standard tier; the strongest tier **only** on explicit user request. The session itself defaults to the standard tier, entering the strongest only by explicit user switch. Model names live in Runtime Notes.
@@ -14,5 +14,5 @@
14
14
  "origin": "https://cdn.nustack.io",
15
15
  "track": "latest"
16
16
  },
17
- "digest": "5ef5fa9f9472"
17
+ "digest": "eb29fb639903"
18
18
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nurix/etna",
3
- "version": "0.20.49",
3
+ "version": "0.20.50",
4
4
  "description": "Bootstrap a project with a Nurix harness — writes the committed contract (CLAUDE.md, AGENTS.md, .claude/harness.json, settings.json, the mount hook) and mounts the harness itself, gitignored, from a bundled payload; sessions keep it current from the CDN.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,5 +46,5 @@
46
46
  "agent",
47
47
  "plugin"
48
48
  ],
49
- "etnaFingerprint": "cc18c2845819"
49
+ "etnaFingerprint": "1e7b6e289709"
50
50
  }