ruvnet-brain 3.9.82-dev โ†’ 3.9.84-dev

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 CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ๐Ÿง  RuvNet Brain
6
6
 
7
- ### ๐Ÿง  RuvNet Brain โ€” [![RuvNet Brain version 3.9.82-dev โ€” updated 2026-07-24 16:09 EDT](https://img.shields.io/badge/version_3.9.82--dev-updated_2026--07--24_16:09_EDT-1E90FF?style=for-the-badge&labelColor=0757BA)](https://github.com/stuinfla/ruvnet-brain/blob/main/plugin/.claude-plugin/plugin.json)
7
+ ### ๐Ÿง  RuvNet Brain โ€” [![RuvNet Brain version 3.9.84-dev โ€” updated 2026-07-24 16:09 EDT](https://img.shields.io/badge/version_3.9.84--dev-updated_2026--07--24_16:09_EDT-1E90FF?style=for-the-badge&labelColor=0757BA)](https://github.com/stuinfla/ruvnet-brain/blob/main/plugin/.claude-plugin/plugin.json)
8
8
 
9
9
  **A portable, source-grounded brain over Reuven Cohen's (rUv's) RuvNet stack โ€” delivered as a Claude Code plugin that makes Claude _use_ the stack instead of fighting it.**
10
10
 
package/bin/install.mjs CHANGED
@@ -1587,6 +1587,18 @@ function disableSpendGuard() {
1587
1587
  const upgradeNoticeStatePath = () =>
1588
1588
  process.env.RUVNET_UPGRADE_NOTICE_FILE || path.join(os.homedir(), '.config', 'ruvnet-brain', 'upgrade-notice.json');
1589
1589
 
1590
+ // The brain on/off switch (ADR-054 ยง2). Same duplicate-rather-than-import rule as the line above:
1591
+ // this installer runs standalone from a fetched tarball and may not depend on scripts/brain-state.mjs.
1592
+ //
1593
+ // IT IS REMOVED ON --uninstall, and that is a deliberate lifecycle decision, not tidiness (ADR-054
1594
+ // ยง5, Fable's inherited-invisible-OFF find). If an uninstall preserved it, the next `npx
1595
+ // ruvnet-brain` would install a product that boots switched off, says almost nothing, and gives the
1596
+ // user no reason to suspect a stale file from a previous life is the cause. `--update` and the
1597
+ // nightly never touch it โ€” only an explicit uninstall, which is the one moment the user has said
1598
+ // they want none of this on their machine.
1599
+ const brainOffSentinelPath = () =>
1600
+ path.join(process.env.RUVNET_BRAIN_STATE_DIR || path.join(os.homedir(), '.config', 'ruvnet-brain'), 'brain-off');
1601
+
1590
1602
  /**
1591
1603
  * Everything this installer can leave on a machine, DERIVED from disk โ€” never asserted.
1592
1604
  *
@@ -1815,6 +1827,8 @@ function uninstallAll() {
1815
1827
  // installer alone writes to, safe to remove outright (not the whole ~/.config/ruvnet-brain/ dir,
1816
1828
  // which can also hold lessons.json/settings.json this installer never creates and must not touch).
1817
1829
  ['upgrade-notice state', upgradeNoticeStatePath()],
1830
+ // ADR-054 ยง5: a reinstall must never inherit an invisible OFF. See brainOffSentinelPath().
1831
+ ['brain on/off switch', brainOffSentinelPath()],
1818
1832
  ]) {
1819
1833
  if (!fs.existsSync(target)) continue;
1820
1834
  try { fs.rmSync(target, { recursive: true, force: true }); ok(`removed the ${label}`); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ruvnet-brain",
3
- "version": "3.9.82-dev",
3
+ "version": "3.9.84-dev",
4
4
  "description": "One-command installer for RuvNet Brain \u2014 a portable, source-grounded brain over rUv's RuvNet building blocks, delivered as a Claude Code plugin so Claude uses the stack instead of fighting it.",
5
5
  "type": "module",
6
6
  "bin": {