@rubytech/create-maxy 1.0.803 → 1.0.805

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/dist/index.js CHANGED
@@ -1760,22 +1760,10 @@ function installTunnelScripts() {
1760
1760
  const setupSrc = join(INSTALL_DIR, "platform/plugins/cloudflare/scripts/setup-tunnel.sh");
1761
1761
  const resetSrc = join(INSTALL_DIR, "platform/plugins/cloudflare/scripts/reset-tunnel.sh");
1762
1762
  const listSrc = join(INSTALL_DIR, "platform/plugins/cloudflare/scripts/list-cf-domains.sh");
1763
- // _cdp-authorize.mjs is invoked by setup-tunnel.sh via `node <path>` and
1764
- // resolved via readlink -f → same dir as the script. It does NOT get a
1765
- // $HOME symlink — it's a helper, not a top-level operator command. We do
1766
- // chmod +x defensively so `ls -l` and any ad-hoc `~/setup-tunnel.sh` copy
1767
- // flow sees it as executable (Task 588).
1768
- //
1769
- // _cdp-authorize-matcher.mjs is imported by _cdp-authorize.mjs (Task 855)
1770
- // — the tri-state matcher's MATCH_EXPR + findMatch live in this side
1771
- // module so JSDOM tests run identical logic to the live page. chmod +x
1772
- // is defensive symmetry; the file is read by Node, not exec'd.
1773
- const cdpAuthorizeSrc = join(INSTALL_DIR, "platform/plugins/cloudflare/scripts/_cdp-authorize.mjs");
1774
- const cdpMatcherSrc = join(INSTALL_DIR, "platform/plugins/cloudflare/scripts/_cdp-authorize-matcher.mjs");
1775
1763
  const setupLink = resolve(process.env.HOME ?? "/root", "setup-tunnel.sh");
1776
1764
  const resetLink = resolve(process.env.HOME ?? "/root", "reset-tunnel.sh");
1777
1765
  const listLink = resolve(process.env.HOME ?? "/root", "list-cf-domains.sh");
1778
- for (const src of [setupSrc, resetSrc, listSrc, cdpAuthorizeSrc, cdpMatcherSrc]) {
1766
+ for (const src of [setupSrc, resetSrc, listSrc]) {
1779
1767
  try {
1780
1768
  chmodSync(src, 0o755);
1781
1769
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy",
3
- "version": "1.0.803",
3
+ "version": "1.0.805",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy": "./dist/index.js"
@@ -170,6 +170,30 @@ The setup script emits either the raw `https://dash.cloudflare.com/argotunnel?..
170
170
 
171
171
  The transient unit was auto-collected by systemd before the client subscribed. Race condition: action finished in <1 s. The per-action log file is retained for 7 days; look for it by name under `~/.maxy/logs/actions/`. If it isn't there, the unit failed before any output (check `journalctl --user -u maxy-action-<id>`).
172
172
 
173
+ **Cloudflare-setup action card shows "Failed (exit null)" after the tunnel works.**
174
+
175
+ > **Pre-Task-860 misdiagnosis.** Devices on platform versions before Task 860 misrender a successful `cloudflare-setup` run as red `Failed (exit null) · ~20s` because the script-armed brand-service restart kills the SSE generator before it can read the action's exit code. The Cloudflare side is fine in this case — the tunnel is created, DNS is routed, the brand service comes back up.
176
+ >
177
+ > **First-line check:** open the persisted action log directly. Two markers prove success:
178
+ >
179
+ > ```bash
180
+ > grep -E 'step=service-restart-armed exit=0|step=done' \
181
+ > ~/.{configDir}/logs/actions/cloudflare-setup-*.log | tail -2
182
+ > ```
183
+ >
184
+ > Both lines present in the log ⇒ the script succeeded; the UI banner is the bug, not the run. On post-Task-860 platforms the action card renders `Completed · Ns` on the same log shape; the card now distinguishes four states:
185
+ >
186
+ > - `Completed` (green) — `code === 0` (whether reported by systemd or recovered from the log).
187
+ > - `Failed (exit N)` (red) — non-zero exit reported by systemd. Real failure, follow the existing remediation paths.
188
+ > - `Restart in progress` (neutral sage) — arming line present in log but the post-arm `step=done` was not written before the unit was GC'd. Resolves automatically once `/api/admin/version` responds; if it stays >90 s, falls through to amber.
189
+ > - `Failed (exit unobserved)` (amber) — neither systemd nor the log can confirm a terminal state. Check `journalctl --user -u maxy-action-<id>`; the unit failed early or the log was truncated.
190
+ >
191
+ > The server emits `[action-runner] reconcile actionId=<id> result=<succeeded|failed|restart-in-progress|unresolved> source=<systemd|persisted-log> ms=<n>` once per terminal-state resolution. Missing reconcile line on a finished run = stale platform; upgrade.
192
+
193
+ **Cloudflare-setup auto-relays "completed" but the next chat turn 502s.**
194
+
195
+ Pre-Task-860, `CloudflareSetupForm` dispatched the post-success chat message immediately on `exit{code:0}`. The relay POST hit the admin server inside the brand-restart bounce window (`~3 s` after `step=service-restart-armed`) and returned `Error: Request failed (502)`. Post-Task-860 the form holds the dispatch behind one successful `/api/admin/version` probe (cap 30 s); the relay only fires once admin handlers are reachable. Browser console emits `[cloudflare-setup-form] holdback=fired awaitedMs=<n>` per dispatch — non-zero `awaitedMs` is normal and expected.
196
+
173
197
  ---
174
198
 
175
199
  ## Software Update click shows an error instead of opening the terminal