@mmmbuto/nexuscrew 0.8.52 → 0.8.54

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/CHANGELOG.md CHANGED
@@ -4,6 +4,146 @@ All notable changes to NexusCrew are tracked here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.8.54 — 2026-08-07 — "Why the Tunnel Was Left Behind"
8
+
9
+ - **An automatic update no longer leaves the reverse channel behind.** 0.8.53
10
+ said the reason a node stayed down after a restart was not established. It is
11
+ now, and it was not the platform: a manual restart has always stopped the
12
+ tunnel supervisors first, and the automatic update — on the runtime where no
13
+ service manager owns the process — did not. The new service then found a
14
+ supervisor still alive that it could not attribute to itself, so it neither
15
+ stopped it nor started its own, and the reverse channel stayed attached to an
16
+ orphan nobody reconciled. The peer read as down until someone intervened by
17
+ hand. What isolated it was a count, not a theory: on one device, restarts run
18
+ by hand left the peer up twice out of twice, and restarts run by the updater
19
+ left it down twice out of twice. The difference between those two paths was
20
+ this one step.
21
+
22
+ Failing to stop the tunnels does not block the update — that is the main job —
23
+ but it is now reported rather than swallowed, because a silent failure here is
24
+ what made this take a day to find.
25
+
26
+ - **The tool bridge documents all of its tools.** The skill shipped alongside
27
+ NexusCrew described twelve of the twenty tools the bridge exposes; the audio
28
+ surface, the caller-identity probe and the per-cell start diagnostics were
29
+ missing entirely. An agent that cannot read what a tool does uses it by
30
+ guessing. It now covers all of them, along with the mistakes that have
31
+ actually been paid for: a receipt means the text was pasted and submitted, not
32
+ that anything was accepted; a terminal that queues an incoming message while
33
+ it works is healthy, and telling that apart from a stuck one means reading CPU
34
+ time from the right process; a node does not listen on the port you happen to
35
+ know, since each installation picks a free one; and answering a remote caller
36
+ by writing into your own inbox reaches nobody, because that directory is
37
+ per-installation.
38
+
39
+ - **The published package is checked by a test, not by a checklist.** The sweep
40
+ before publishing was done by hand, from a list rebuilt from memory each time.
41
+ On 2026-08-07 that list covered paths, hostnames and AI attribution but not
42
+ the names of internal working sessions, and 0.8.53 shipped a comment naming
43
+ one. Nothing secret — and nothing that can be taken back, since a version is
44
+ never republished. The check now runs with the rest of the suite, reads the
45
+ published directories from the package manifest rather than repeating them,
46
+ and states a reason for every pattern so that no entry can be quietly dropped
47
+ to make the suite pass. A second test proves the patterns still bite, so an
48
+ emptied list fails instead of turning green.
49
+
50
+ ## 0.8.53 — 2026-08-07 — "Coming Back Up, and Saying So"
51
+
52
+ Automatic updates are on by default and check every six hours, so a node
53
+ installs a new release and restarts itself without anyone watching. That makes
54
+ the restart path the most consequential code in the product, and this release
55
+ is about what happens when it doesn't work: today a node was measured staying
56
+ down for over twenty minutes after a restart, with its tunnel still up, while
57
+ nothing anywhere said so.
58
+
59
+ - **A restart now confirms the service came back.** `nexuscrew restart` used to
60
+ report success as soon as the restart *command* returned — which says the
61
+ command ran, not that anything is answering. The two look identical to whoever
62
+ reads the exit code. The check already existed and was already used by two
63
+ other paths: the auto-updater waits for health and fails if it doesn't come,
64
+ and the Fleet bootstrap does the same, with a comment that literally says "a
65
+ verified restart is needed". It was missing precisely on the command a person
66
+ types by hand — the one where no other code is checking on your behalf.
67
+
68
+ - **A service that exited after a restart is brought back, once.** On a phone
69
+ there is no service manager to raise the process again: if it goes, it stays
70
+ gone. That was measured — a node stayed down for over twenty minutes after a
71
+ restart, with its reverse tunnel still up, and nothing brought it back. Now,
72
+ when the service does not answer, the port decides what happens: free means
73
+ the process is gone and it is started again *once*; still busy means something
74
+ is holding it without serving, and retrying would only hide that. Once and no
75
+ more — repeating turns a fault into a loop. On a machine where a service
76
+ manager owns the runtime nothing is started alongside it: that is the
77
+ manager's job, and a process it does not know about would race its own unit
78
+ for the port and outlive a stop.
79
+
80
+ **Why the process exited is not established.** A plausible story — that the
81
+ restart did not wait for the old process before starting the new one — turned
82
+ out to be wrong on inspection: it does wait, and has since 0.8.17. So this is
83
+ a recovery for a failure whose cause is still open, not a fix for a known one,
84
+ and it is worth knowing which of the two you are relying on.
85
+
86
+ - **"Peer unreachable" no longer covers two different failures.** With a reverse
87
+ SSH channel, a device that is not connected leaves no listener and the
88
+ connection is *refused*; a device that is connected but whose NexusCrew has
89
+ died accepts the connection and then *resets* it. Those need opposite
90
+ remedies — one is fixed on the network, the other by going to the device —
91
+ and one message sent the investigation to the wrong place half the time. It
92
+ did: four hours were spent in federation and pairing while the defect was a
93
+ service that had not come back on a phone. The two are now named, with the
94
+ port, and an error nobody recognises is still reported as before rather than
95
+ guessed into a layer.
96
+
97
+ - **The interface reloads itself after the node updates.** With automatic
98
+ updates on, a node updates and restarts while an open app keeps running the
99
+ old bundle. The only way out was closing and reopening it — the banner had to
100
+ be tapped, and because of a service-worker defect fixed in 0.8.52, tapping it
101
+ did not work either. The app now applies the new bundle by itself. Only for
102
+ the case a reload can fix: when the package on the server is newer than the
103
+ interface it serves, no amount of reloading changes that, and it is left
104
+ alone. If the mismatch survives the reload it is not retried — a reload loop
105
+ makes the app unusable, which is far worse than a banner, so the banner
106
+ remains as the fallback. What you were typing is not lost: the composer draft
107
+ was already kept across reloads, which is what made this acceptable. The
108
+ version check now also repeats about once a minute rather than running only
109
+ when the app starts — an app left open in front of someone is precisely the
110
+ case this exists for, and checking only at startup would have made it work
111
+ solely for people who had already closed and reopened it.
112
+
113
+ - **`nexuscrew autoupdate on|off|status`.** The switch already existed — a
114
+ persisted setting, on by default, with a checkbox in Settings. It was missing
115
+ from the command line, which is where you need it: when a node has updated
116
+ itself and the service did not come back, the interface is the thing you
117
+ cannot open. With the service running the command goes through the API rather
118
+ than writing the file, because writing the file would leave the running
119
+ process with the old value — the setting would read "off" while updates kept
120
+ happening on schedule, and a switch that reads off without switching anything
121
+ off is worse than no switch. If the service is up but not answering, nothing
122
+ is written at all.
123
+
124
+ - **An error now says when the tool bridge is older than the hub.** Updating
125
+ NexusCrew does not update the MCP bridge of an already running session: that
126
+ process started with the previous code and keeps it until the session is
127
+ restarted. The symptom is cruel — you install a fix, try again, and get the
128
+ *old* error, so you conclude the fix does not work and go looking where the
129
+ defect is not. The check runs only on the error path, which costs nothing in
130
+ normal use and is the only moment it helps; it cannot be cached at startup
131
+ either, since the version that changes is the hub's, and it changes while the
132
+ bridge is running.
133
+
134
+ - **A long message sent to a cell is no longer pasted and left unsent.** The
135
+ wait between the bracketed paste and the Enter was a constant, while the time
136
+ a terminal interface needs to swallow a paste grows with its size — above a
137
+ certain length the client collapses it, the Enter lands while it is still
138
+ being processed, and it is swallowed. The message then sat in the composer
139
+ while the sender got a delivery receipt. Measured on the same target eleven
140
+ minutes apart: 2900 characters were never processed for nine hours, sixty
141
+ characters were being worked on in twelve seconds. The wait now grows with the
142
+ text, and below 500 characters nothing changes — those were already reliable,
143
+ and slowing them would be a cost paid by everyone for a defect that is not
144
+ theirs. This narrows the window rather than closing it: a receipt still means
145
+ paste and Enter, not acceptance.
146
+
7
147
  ## 0.8.52 — 2026-08-07 — "What a Peer May See, and What a Cell May Reach"
8
148
 
9
149
  - **Each node now has a cryptographic identity, and it changes nothing yet.**