opencode-thrum-pro 0.1.6 → 0.1.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 (74) hide show
  1. package/assets/commands/thrum-compact-extended.md +36 -21
  2. package/assets/commands/thrum-compact.md +19 -18
  3. package/assets/commands/thrum-restart-extended.md +1 -5
  4. package/assets/commands/thrum-restart.md +2 -2
  5. package/assets/commands/thrum-sleep-extended.md +1 -5
  6. package/assets/commands/thrum-sleep.md +1 -5
  7. package/assets/commands/thrum-update-project.md +1 -1
  8. package/assets/skills/brainstorm-queue-aware/SKILL.md +1 -1
  9. package/assets/skills/brainstorm-steward/SKILL.md +3 -3
  10. package/assets/skills/choosing-subagent-models/SKILL.md +183 -74
  11. package/assets/skills/closing-findings-while-warm/SKILL.md +1 -2
  12. package/assets/skills/configure-roles/SKILL.md +2 -2
  13. package/assets/skills/coordinator-assessing-agent-completion/SKILL.md +11 -10
  14. package/assets/skills/coordinator-branch-split-on-block/SKILL.md +1 -2
  15. package/assets/skills/coordinator-context-monitoring/SKILL.md +11 -12
  16. package/assets/skills/coordinator-deploying-a-node/SKILL.md +3 -1
  17. package/assets/skills/coordinator-dispatching-work/SKILL.md +5 -4
  18. package/assets/skills/coordinator-hotpath-merge-gate/SKILL.md +9 -7
  19. package/assets/skills/coordinator-interacting-with-the-owner/SKILL.md +1 -2
  20. package/assets/skills/coordinator-maintaining-memory/SKILL.md +1 -1
  21. package/assets/skills/coordinator-managing-state-and-lifecycle/SKILL.md +10 -3
  22. package/assets/skills/coordinator-merging-code/SKILL.md +21 -14
  23. package/assets/skills/coordinator-philosophy-merge-gate/SKILL.md +4 -5
  24. package/assets/skills/coordinator-plan-reconcile-gate/SKILL.md +1 -2
  25. package/assets/skills/coordinator-rolling-out-to-nodes/SKILL.md +1 -0
  26. package/assets/skills/coordinator-running-brainstorm-cycles/SKILL.md +4 -5
  27. package/assets/skills/coordinator-running-review-cycles/SKILL.md +1 -2
  28. package/assets/{commands/thrum-_deviations-protocol.md → skills/deviations-protocol/SKILL.md} +6 -12
  29. package/assets/skills/efficient-multi-agent-research/SKILL.md +2 -2
  30. package/assets/skills/generator-idempotency-protocol/SKILL.md +9 -0
  31. package/assets/skills/implementer-maintaining-memory/SKILL.md +3 -4
  32. package/assets/skills/implementer-orchestrating-execution/SKILL.md +1 -2
  33. package/assets/skills/implementer-receiving-dispatch/SKILL.md +15 -17
  34. package/assets/skills/implementer-receiving-review-feedback/SKILL.md +3 -4
  35. package/assets/skills/implementer-status-and-handoff/SKILL.md +1 -14
  36. package/assets/skills/implementer-tdd-and-quality/SKILL.md +2 -2
  37. package/assets/skills/memory-audit-recover/SKILL.md +7 -5
  38. package/assets/skills/memory-curate/SKILL.md +3 -3
  39. package/assets/skills/memory-maintenance/SKILL.md +2 -0
  40. package/assets/skills/memory-write-discipline/SKILL.md +1 -1
  41. package/assets/skills/orchestrate/SKILL.md +34 -5
  42. package/assets/skills/persistent-watcher-archetype/SKILL.md +2 -2
  43. package/assets/skills/persistent-watcher-archetype/resources/jev_watcher_filter.py +5 -5
  44. package/assets/skills/persistent-watcher-archetype/resources/roster-watch.sh +5 -5
  45. package/assets/skills/persistent-watcher-archetype/resources/roster-watch_test.sh +2 -2
  46. package/assets/skills/persistent-watcher-archetype/resources/thrum-capture-fallback.sh +1 -1
  47. package/assets/skills/persistent-watcher-archetype/resources/thrum-watch-pane-capture.sh +3 -3
  48. package/assets/skills/prime-agent/SKILL.md +1 -1
  49. package/assets/skills/project-hotpath-gate/SKILL.md +1 -2
  50. package/assets/skills/project-philosophy/SKILL.md +2 -3
  51. package/assets/skills/project-rules-protocol/SKILL.md +12 -0
  52. package/assets/skills/project-setup/SKILL.md +9 -10
  53. package/assets/skills/project-setup/resources/implementation-agent.md +1 -2
  54. package/assets/skills/researcher-answering-queries/SKILL.md +1 -2
  55. package/assets/skills/researcher-investigating/SKILL.md +6 -8
  56. package/assets/skills/researcher-maintaining-memory/SKILL.md +3 -1
  57. package/assets/{commands/thrum-_snapshot-protocol.md → skills/snapshot-protocol/SKILL.md} +10 -15
  58. package/assets/{commands/thrum-_stamp-protocol.md → skills/stamp-protocol/SKILL.md} +5 -6
  59. package/assets/skills/thrum/SKILL.md +9 -4
  60. package/assets/skills/thrum/resources/CLI_REFERENCE.md +32 -27
  61. package/assets/skills/thrum-memory/SKILL.md +1 -1
  62. package/assets/skills/using-monitors/SKILL.md +198 -0
  63. package/assets/skills/using-the-queue/SKILL.md +2 -3
  64. package/assets/skills/using-thrum-state/SKILL.md +3 -3
  65. package/assets/skills/verify-against-plan/SKILL.md +2 -2
  66. package/dist/hooks/block-sync-cd.js +1 -1
  67. package/dist/hooks/block-sync-cd.test.js +1 -1
  68. package/dist/installer-assets.test.d.ts +1 -0
  69. package/dist/installer-assets.test.js +41 -0
  70. package/package.json +1 -1
  71. package/assets/commands/thrum-_compact-runtime-commands.md +0 -61
  72. package/assets/commands/thrum-_generator-idempotency-protocol.md +0 -15
  73. package/assets/commands/thrum-_project-rules-protocol.md +0 -18
  74. package/assets/commands/thrum-_verify-before-write-protocol.md +0 -27
@@ -51,14 +51,11 @@ skill) BEFORE composing your snapshot below — these survive compaction
51
51
  independently of the prose continuation file and are what a post-compact
52
52
  render reads back.
53
53
 
54
- Read the partial at the absolute path (resolve `$REPO` yourself first via
55
- `thrum agent worktree --authoritative` — NEVER `thrum whoami --field worktree`
56
- or `git rev-parse --show-toplevel`, both cwd-resolved and the root cause of
57
- a documented snapshot-save loss class; there is no git fallback):
58
-
59
- ```text
60
- ${REPO}/claude-plugin/commands/_snapshot-protocol.md
61
- ```
54
+ Invoke the /thrum:snapshot-protocol skill and follow it, starting with its
55
+ Step 1 (resolve your worktree ONLY via `thrum agent worktree --authoritative` —
56
+ NEVER `thrum whoami --field worktree` or `git rev-parse --show-toplevel`, both
57
+ cwd-resolved and the root cause of a documented snapshot-save loss class;
58
+ there is no git fallback).
62
59
 
63
60
  Apply its Step 2 (compose your continuation) per the structure guidance.
64
61
 
@@ -77,6 +74,15 @@ self-contained:
77
74
  > `thrum prime --light` briefing already auto-injected by the SessionStart
78
75
  > hook; only run `thrum:prime-agent` if it did NOT appear. Do NOT manually run
79
76
  > full `thrum prime`. Then continue from §16.
77
+ > If you must re-read this file (no briefing appeared): read the NEWEST
78
+ > `.thrum/agents/<your-id>/sessions/*-restart.md` in the MAIN repo (the prime
79
+ > ARCHIVES the snapshot there); fall back to `.thrum/restart/<your-id>.md` only
80
+ > if it still exists. Find the newest with:
81
+ > `R=$(git rev-parse --show-toplevel); ls -1t "$(cat "$R/.thrum/redirect" 2>/dev/null || echo "$R/.thrum")"/agents/<your-id>/sessions/*-restart.md | head -1`
82
+ > (`$R/.thrum/redirect` in a worktree names the main repo's `.thrum`; using `$R`
83
+ > keeps this independent of your current directory). Open it with the Read tool
84
+ > (not Bash sed/cat). The `sessions/` file lives under the repo's `.thrum`, so
85
+ > that is allowed.
80
86
 
81
87
  Then §1…§16 as normal, with §16 (immediate next actions) actionable from a
82
88
  compacted (not cold) start.
@@ -135,12 +141,6 @@ is not torn down, so `/thrum:sleep-extended`'s teardown-loss risk does not apply
135
141
  > A single `thrum tmux send "$SESSION" "<command>"` call has no such split to
136
142
  > make.
137
143
 
138
- On a non-Claude runtime this block sends that runtime's own compact-equivalent
139
- command in place of `/compact` — see
140
- `${REPO}/claude-plugin/commands/_compact-runtime-commands.md` for the cited
141
- per-runtime table; `scripts/sync-skills.sh` applies the substitution when
142
- syncing this file to each runtime's plugin tree.
143
-
144
144
  Firing `/compact` before the Step 3 Write lands compacts a pre-write context and
145
145
  resumes from a stale/blank file — the exact failure this command prevents. This
146
146
  block (paste the two values printed by the Step 3 PREP block into its first two
@@ -236,6 +236,7 @@ if [ "$SNAPSHOT_OK" = 1 ] && [ "$SESSION_OK" = 1 ]; then
236
236
  echo "Report this to your coordinator (or the operator if you are top-level) and stop; a human or coordinator must inspect the pane and submit or clear it."
237
237
  exit 1
238
238
  fi
239
+ RESUME_PROMPT="Compaction complete - please continue: your Resume Plan is in the auto-injected briefing (# Previous Session Context). If it is missing, read ${SNAPSHOT} or the newest *-restart.md in .thrum/agents/${AGENT}/sessions/ of the main repo, then execute its numbered resume plan."
239
240
  if [ "$SEND_RC" -ne 0 ]; then
240
241
  echo "ERROR: thrum tmux send exited ${SEND_RC} — the daemon-routed self-send failed; it will NOT queue or deliver /compact."
241
242
  # Fail-loud fallback, NOT silent idle: attempt the compact command
@@ -274,16 +275,29 @@ if [ "$SNAPSHOT_OK" = 1 ] && [ "$SESSION_OK" = 1 ]; then
274
275
  exit 1
275
276
  fi
276
277
  echo "Raw fallback send-keys succeeded on socket $RAW_TMUX_SOCK."
278
+ # The daemon route is known-dead here (that is why this is the
279
+ # fallback), and on several runtimes no hook fires at all after
280
+ # compaction — so queue the resume prompt on the same explicit socket,
281
+ # same single-call text+C-m discipline. Without this the pane idles
282
+ # after compaction with an empty composer until a human types.
283
+ tmux -S "$RAW_TMUX_SOCK" send-keys -t "${SESSION}:0.0" "$RESUME_PROMPT" C-m
284
+ RAW_RESUME_RC=$?
285
+ if [ "$RAW_RESUME_RC" -eq 0 ]; then
286
+ :
287
+ else
288
+ echo "WARNING: raw resume-prompt send-keys exited ${RAW_RESUME_RC} — the post-compact resume prompt was NOT queued. If the pane sits idle after compaction, send it a resume prompt by hand."
289
+ fi
277
290
  fi
278
- # thrum-xyz: queue the RESUME PROMPT right behind /compact, on the same
279
- # daemon queue (only when the daemon-routed /compact send succeeded; the raw
280
- # fallback path leaves any hook-side nudge as the kickoff). Hook output is
291
+ # resume-prompt: queue the RESUME PROMPT right behind /compact — on the daemon
292
+ # queue when the daemon-routed send succeeded (dispatched once the pane is
293
+ # idle again AFTER the compaction, FIFO behind /compact: not a timer, fires
294
+ # exactly once), or via the raw explicit-socket send above when the raw
295
+ # fallback carried /compact. Hook output is
281
296
  # context only — it does not start a turn — so without this an idle pane with
282
297
  # an empty inbox can sit at 0% context, empty composer, until a human types.
283
298
  # The daemon dispatches it once the pane is idle again AFTER the compaction
284
299
  # (FIFO behind /compact), so it is not a timer and it fires exactly once.
285
300
  if [ "$SEND_RC" -eq 0 ]; then
286
- RESUME_PROMPT="Compaction complete - please continue: your Resume Plan is in the auto-injected briefing (# Previous Session Context). If it is missing, read ${SNAPSHOT} or the newest *-restart.md in .thrum/agents/${AGENT}/sessions/ of the main repo, then execute its numbered resume plan."
287
301
  thrum tmux send "$AGENT" "$RESUME_PROMPT"
288
302
  RESUME_RC=$?
289
303
  if [ "$RESUME_RC" -eq 0 ]; then
@@ -333,9 +347,10 @@ of that is needed here. Resume LEAN, in this order:
333
347
  snapshot (moves `${REPO}/.thrum/restart/${AGENT}.md` into the main repo's
334
348
  `.thrum/agents/${AGENT}/sessions/`), so the original path is normally GONE
335
349
  by the time you look — that is by design, not loss. Only if no briefing
336
- appeared (daemon unreachable), read the newest `*-restart.md` in that
337
- `sessions/` directory (or `${REPO}/.thrum/restart/${AGENT}.md` if it still
338
- exists) and run `thrum:prime-agent` manually as the fallback. Never manually
350
+ appeared (daemon unreachable), read the NEWEST `*-restart.md` in that
351
+ `sessions/` directory, e.g. `ls -1t "$(cat "${REPO}/.thrum/redirect" 2>/dev/null || echo "${REPO}/.thrum")"/agents/${AGENT}/sessions/*-restart.md | head -1`
352
+ (fall back to `${REPO}/.thrum/restart/${AGENT}.md` only if it still
353
+ exists; use the Read tool, not Bash sed/cat, on `~/.claude` paths) and run `thrum:prime-agent` manually as the fallback. Never manually
339
354
  run full `thrum prime` when the briefing is present.
340
355
  2. **A resume prompt starts your first turn.** Step 4 queued a "Compaction
341
356
  complete - please continue" prompt on the daemon right behind `/compact`; it
@@ -53,14 +53,11 @@ skill) BEFORE composing your snapshot below — these survive compaction
53
53
  independently of the prose continuation file and are what a post-compact
54
54
  render reads back.
55
55
 
56
- Read the partial at the absolute path (resolve `$REPO` yourself first via
57
- `thrum agent worktree --authoritative` — NEVER `thrum whoami --field worktree`
58
- or `git rev-parse --show-toplevel`, both cwd-resolved and the root cause of
59
- a documented snapshot-save loss class; there is no git fallback):
60
-
61
- ```text
62
- ${REPO}/claude-plugin/commands/_snapshot-protocol.md
63
- ```
56
+ Invoke the /thrum:snapshot-protocol skill and follow it, starting with its
57
+ Step 1 (resolve your worktree ONLY via `thrum agent worktree --authoritative` —
58
+ NEVER `thrum whoami --field worktree` or `git rev-parse --show-toplevel`, both
59
+ cwd-resolved and the root cause of a documented snapshot-save loss class;
60
+ there is no git fallback).
64
61
 
65
62
  Apply its Step 2 (compose your continuation) per the structure guidance.
66
63
 
@@ -79,6 +76,15 @@ self-contained:
79
76
  > `thrum prime --light` briefing already auto-injected by the SessionStart
80
77
  > hook; only run `thrum:prime-agent` if it did NOT appear. Do NOT manually run
81
78
  > full `thrum prime`. Then continue from §9.
79
+ > If you must re-read this file (no briefing appeared): read the NEWEST
80
+ > `.thrum/agents/<your-id>/sessions/*-restart.md` in the MAIN repo (the prime
81
+ > ARCHIVES the snapshot there); fall back to `.thrum/restart/<your-id>.md` only
82
+ > if it still exists. Find the newest with:
83
+ > `R=$(git rev-parse --show-toplevel); ls -1t "$(cat "$R/.thrum/redirect" 2>/dev/null || echo "$R/.thrum")"/agents/<your-id>/sessions/*-restart.md | head -1`
84
+ > (`$R/.thrum/redirect` in a worktree names the main repo's `.thrum`; using `$R`
85
+ > keeps this independent of your current directory). Open it with the Read tool
86
+ > (not Bash sed/cat). The `sessions/` file lives under the repo's `.thrum`, so
87
+ > that is allowed.
82
88
 
83
89
  Then §1…§11 as normal, with §9 (Numbered resume plan) actionable from a
84
90
  compacted (not cold) start.
@@ -135,12 +141,6 @@ not torn down, so `/thrum:sleep`'s teardown-loss risk does not apply here).
135
141
  > A single `thrum tmux send "$SESSION" "<command>"` call has no such split to
136
142
  > make.
137
143
 
138
- On a non-Claude runtime this block sends that runtime's own compact-equivalent
139
- command in place of `/compact` — see
140
- `${REPO}/claude-plugin/commands/_compact-runtime-commands.md` for the cited
141
- per-runtime table; `scripts/sync-skills.sh` applies the substitution when
142
- syncing this file to each runtime's plugin tree.
143
-
144
144
  Firing `/compact` before the Step 3 Write lands compacts a pre-write context and
145
145
  resumes from a stale/blank file — the exact failure this command prevents. This
146
146
  block (paste the two values printed by the Step 3 PREP block into its first two
@@ -234,7 +234,7 @@ if [ "$SNAPSHOT_OK" = 1 ] && [ "$SESSION_OK" = 1 ]; then
234
234
  echo "ERROR: thrum tmux send exited ${SEND_RC} — /compact was not queued. Report and stop."
235
235
  exit 1
236
236
  fi
237
- # thrum-xyz: queue the RESUME PROMPT right behind /compact, on the same
237
+ # resume-prompt: queue the RESUME PROMPT right behind /compact, on the same
238
238
  # daemon queue. Hook output is context only — it does not start a turn — so
239
239
  # without this an idle pane with an empty inbox can sit at 0% context, empty
240
240
  # composer, until a human types. The daemon dispatches it once the pane is
@@ -281,9 +281,10 @@ of that is needed here. Resume LEAN, in this order:
281
281
  snapshot (moves `${REPO}/.thrum/restart/${AGENT}.md` into the main repo's
282
282
  `.thrum/agents/${AGENT}/sessions/`), so the original path is normally GONE
283
283
  by the time you look — that is by design, not loss. Only if no briefing
284
- appeared (daemon unreachable), read the newest `*-restart.md` in that
285
- `sessions/` directory (or `${REPO}/.thrum/restart/${AGENT}.md` if it still
286
- exists) and run `thrum:prime-agent` manually as the fallback. Never manually
284
+ appeared (daemon unreachable), read the NEWEST `*-restart.md` in that
285
+ `sessions/` directory, e.g. `ls -1t "$(cat "${REPO}/.thrum/redirect" 2>/dev/null || echo "${REPO}/.thrum")"/agents/${AGENT}/sessions/*-restart.md | head -1`
286
+ (fall back to `${REPO}/.thrum/restart/${AGENT}.md` only if it still
287
+ exists; use the Read tool, not Bash sed/cat, on `~/.claude` paths) and run `thrum:prime-agent` manually as the fallback. Never manually
287
288
  run full `thrum prime` when the briefing is present.
288
289
  2. **A resume prompt starts your first turn.** Step 4 queued a "Compaction
289
290
  complete - please continue" prompt on the daemon right behind `/compact`; it
@@ -54,11 +54,7 @@ mkdir -p "${REPO}/.thrum/restart"
54
54
 
55
55
  ### 2. Read the shared snapshot-composition partial
56
56
 
57
- Read the partial at the absolute path:
58
-
59
- ```text
60
- ${REPO}/claude-plugin/commands/_snapshot-protocol.md
61
- ```
57
+ Invoke the /thrum:snapshot-protocol skill and follow it.
62
58
 
63
59
  It carries the CRITICAL DISCIPLINE block and BOTH the standard 11-section
64
60
  structure and the EXTENDED 16-section structure with per-section guidance.
@@ -70,7 +70,7 @@ shapes everything else you write below it.
70
70
 
71
71
  **Stamp your snapshot with the base it was authored against.**
72
72
  Derive and emit the **Authored-against** stamp per
73
- `claude-plugin/commands/_stamp-protocol.md` and place it at the very top of your
73
+ the /thrum:stamp-protocol skill and place it at the very top of your
74
74
  §1 section (that protocol computes the SHA and merge_target for you — never
75
75
  hand-type them). This is what lets `thrum prime` diff your snapshot at the next
76
76
  wake and flag which cited files have MOVED; an unstamped snapshot reads as
@@ -361,7 +361,7 @@ Every archive already self-verifies: `sessionarchive.Archive` computes a
361
361
  SHA-256 checksum of the snapshot content it read *before* the move, then
362
362
  re-reads the file it just wrote at the destination and confirms the
363
363
  checksums match (`sessionarchive.VerifyArchivedIdentity` /
364
- `ChecksumContent` — see `internal/daemon/sessionarchive/verify.go`) before
364
+ `ChecksumContent` in the daemon's session-archive package) before
365
365
  reporting success. A destination that exists but doesn't hash-match its
366
366
  own pre-move content is treated as a hard failure of the archive call, not
367
367
  a warning. This is what actually proves "the file at
@@ -58,11 +58,7 @@ no session end. Exit code 1.
58
58
 
59
59
  ### 2. Read the shared snapshot-composition partial
60
60
 
61
- Read the partial at the absolute path:
62
-
63
- ```text
64
- ${REPO}/claude-plugin/commands/_snapshot-protocol.md
65
- ```
61
+ Invoke the /thrum:snapshot-protocol skill and follow it.
66
62
 
67
63
  Apply its Step 2 (compose your continuation) per the structure guidance.
68
64
 
@@ -62,11 +62,7 @@ no session end. Exit code 1. The skill is the wrong tool for non-tmux agents.
62
62
 
63
63
  ### 2. Read the shared snapshot-composition partial
64
64
 
65
- Read the partial at the absolute path:
66
-
67
- ```text
68
- ${REPO}/claude-plugin/commands/_snapshot-protocol.md
69
- ```
65
+ Invoke the /thrum:snapshot-protocol skill and follow it.
70
66
 
71
67
  Apply its Step 2 (compose your continuation) per the structure guidance.
72
68
 
@@ -104,7 +104,7 @@ updating.
104
104
 
105
105
  1. **Header line** — Update `Last Updated` date and `Phase` status summary. Also
106
106
  derive and insert the Authored-against stamp, placing it immediately after
107
- the `Last Updated` line (see `claude-plugin/commands/_stamp-protocol.md`
107
+ the `Last Updated` line (see the /thrum:stamp-protocol skill
108
108
  for the exact two-line format).
109
109
 
110
110
  2. **Current State Summary — LIVE STATE ONLY, SUPERSEDED EACH SESSION.**
@@ -32,7 +32,7 @@ answer," do this instead:
32
32
  clear question, plus 2-3 concrete options (A/B/C) so the Steward has
33
33
  something to decide between, not an open-ended essay prompt.
34
34
  2. Send it as a `NEED` to your steward, per the NEED/ANSWER convention
35
- (`dev-docs/specs/2026-08-24-brainstorm-need-answer-convention.md`):
35
+ (the NEED/ANSWER convention spec in the project's design docs):
36
36
 
37
37
  ```bash
38
38
  thrum send --to @<steward> --stdin <<'EOF'
@@ -72,7 +72,7 @@ thread:
72
72
  - **Push — inbox scan.** Each cycle, read your inbox (`thrum inbox`) for
73
73
  messages from a roster brainstormer whose first line matches
74
74
  `NEED [<topic>]:` (the convention from
75
- `dev-docs/specs/2026-08-24-brainstorm-need-answer-convention.md`). Read
75
+ the NEED/ANSWER convention spec in the project's design docs). Read
76
76
  the topic, question, and options straight from the prose — there is no
77
77
  structured payload to parse; you are a judgment agent reading a message
78
78
  the way you'd read any message. The sender identity tells you which
@@ -242,9 +242,9 @@ state as soon as the brainstormer advances past it.
242
242
 
243
243
  ## Reuse note
244
244
 
245
- `dev-docs/templates/brainstorm-steward-watch_params.json` is the canonical
245
+ The brainstorm-steward watch-params template in the project's design docs is the canonical
246
246
  starting config for a new Brainstorm Steward — it uses the schema documented
247
- in `dev-docs/specs/2026-07-22-watch-params-schema.md` unchanged, with an
247
+ in the watch-params schema spec unchanged, with an
248
248
  empty `roster` to be populated as brainstormers are launched under it. Its
249
249
  `parent` field ships pre-filled with this fleet's own escalation target —
250
250
  when copying the template to a different fleet or box, replace that value