Skip to content

Release 0.13.13 — a crashed Windows session no longer locks its node name until reboot - #45

Merged
sym-bot merged 8 commits into
mainfrom
release/0.13.13
Oct 1, 2026
Merged

sym-bot merged 8 commits into
mainfrom
release/0.13.13

Conversation

@sym-bot

@sym-bot sym-bot commented Oct 1, 2026

Copy link
Copy Markdown
Owner

Release branch for @sym-bot/sym 0.13.13, cut from main (360f11a), per the release rule: every release goes through a release/* branch, then merge → push → annotated tag → GitHub release → npm publish.

Contents

  • sym 0.13.13 — a crashed Windows session no longer locks its node name until reboot #44: the Windows identity lock records a real process start time (system PowerShell, UTC ISO-8601), so a crashed Windows session's recycled PID no longer locks the node name until reboot.
    • xmesh review (mission-cd6db6cf10ea) addressed.
    • Windows sign-off by claude-sym-agent-x on Windows 11 / Node 24: 4/4 manual checks, no regressions.
  • Test isolation: every test that creates node state runs in a HOME + USERPROFILE sandbox.
    • No test writes to the real ~/.sym any more, verified by watching the directory on macOS and on Windows.
    • The ask test can no longer pick up a real API key from ~/.sym/relay.env.
  • Version bump and dated CHANGELOG.

Not in this release

These are follow-ups:

  • Pre-existing Windows test failures: the SIGTERM test, the named-pipe socket path, and PID 1.
  • A runtime guard against node registration from tests outside a temp home.

Locks written by 0.13.12 or earlier carry no start time, so they still need a reboot or a manual delete (documented in the CHANGELOG).

Timing

This merges after the sym-mesh-channel 0.10.0 soak on sym 0.13.12 finishes, as agreed with the channel owner. Then mesh-channel 0.10.1 requires ^0.13.13, and every node moves in one pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MKQsnKr82ygK5YEef85PAn

sym-bot and others added 8 commits October 1, 2026 12:48
… lock whose PID started later

processStartTime() returned null on win32, so Windows locks carried no start
time and a crashed holder's recycled PID kept the name locked until reboot.
Windows now reads it through PowerShell (UTC ISO-8601, same form for writer
and reader). A lock with no start time, written this boot, is stale when its
PID's process started after the file was written.

Reported by claude-sym-agent-a; Windows verification by claude-sym-agent-x.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- F1/F2/F10 drop the pid-only mtime heuristic: a clock step could make a
  live holder look stale, and it was not gated to Windows; a live holder
  must never lose its lock. 0.13.12-era locks still need a reboot or a
  manual delete, as documented.
- F3 cache Windows start times per PID for 10 s (one PowerShell spawn per
  holder process during a daemon's node scan)
- F4 run the system PowerShell by absolute path, and accept only a UTC
  ISO-8601 answer
- F5 warn once when a start time cannot be read (still treated as held)
- F6 a failed self start-time lookup is retried, not cached
- F7 test that a live holder whose recorded start matches is still held
- F9 bound the pid before it reaches the command line
- F11 CHANGELOG states what is covered and what is not

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKQsnKr82ygK5YEef85PAn
…medir())

The test sandbox set HOME only. On Windows os.homedir() reads USERPROFILE,
so an unsandboxed npm test wrote node dirs into the real ~/.sym/nodes and
~/.sym/loopback, and the ask tests ran `sym ask` against the user's real
mesh memory. Found by claude-sym-agent-x on Windows 11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKQsnKr82ygK5YEef85PAn
…, not the cache

With the 10 s per-PID cache, the second call read the cache and no longer
checked that PowerShell's output is stable. A test-only hook clears the
cache before each call. Review note by claude-sym-agent-x.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKQsnKr82ygK5YEef85PAn
…d-API path in the ask test

- daemon-relay-only and the discovery exit-hook child set USERPROFILE with
  HOME, so a Windows child no longer writes into the real ~/.sym
- identity-halt and ask load _isolate-home: identity-halt created a real
  ~/.sym/nodes/agent-g@mesh, and the ask test's NO_PROVIDER check let
  llm-reason's ensureEnv() read ~/.sym/relay.env from the real home, which
  can supply an API key and make a real, paid call with the prompt "hi"

Found by claude-sym-agent-x running a plain npm test on Windows 11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKQsnKr82ygK5YEef85PAn
…E sandbox

p6-legacy-grandfather, rule-a-collapse and the five integration tests
created their nodes in the real ~/.sym/nodes and deleted them afterwards
(a watcher on the real directory saw p6-* and rule-a-* come and go; the
transient write claude-sym-agent-x observed on Windows). With
_isolate-home loaded, a full unit + integration run leaves no event in the
real directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKQsnKr82ygK5YEef85PAn
Windows identity-lock fix and test isolation; xmesh review mission-cd6db6cf10ea addressed; Windows sign-off by claude-sym-agent-x.
… until reboot

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MKQsnKr82ygK5YEef85PAn
@sym-bot
sym-bot merged commit 1f76590 into main Oct 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant