os-sdlc lsp-probe daemon socket path exceeds the 108-byte Unix socket limit in git worktrees #619
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
rule-proposal
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#619
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
lsp-probe daemon socket path exceeds sun_path limit in worktrees
Problem
plugins/os-sdlc/lib/os_sdlc/lsp_probe/daemon/paths.rbderivesdirasFile.join(@root, ".cc-os", "lsp", sha1(root)[0,12]), so the socket path length grows with the root path. In a git worktree the root is long enough to cross the Linuxsun_path108-byte limit;UNIXServer.newraisesENAMETOOLONGin the spawned server, the client sees no socket and raisesSpawnTimeoutwith no clear diagnostic.Cases
lsp-probespawns the daemon, then it still binds and returns EVIDENCE lines instead of timing out.Paths.new(root).sock_pathis read, then its byte length is under 108.Approach
Derive
dirfrom a short fixed base (XDG_RUNTIME_DIR, falling back toDir.tmpdir) plus the existing 12-char root hash, keepingsock_pathandlock_pathco-located under it.Required work:
Paths#dirtoFile.join(base, "os-sdlc-lsp", sha1(@root)[0,12])where base isENV.fetch("XDG_RUNTIME_DIR") { Dir.tmpdir }— check:grep -n "def dir" plugins/os-sdlc/lib/os_sdlc/lsp_probe/daemon/paths.rbsock_pathunder 108 bytesPaths#dir(no change expected since they key off it) — check existing cleanup tests still passAcceptance criteria
lsp-probeinvoked from a worktree checkout with a long root, when it runs, then it prints EVIDENCE lines instead of raising SpawnTimeout.Paths.new, whensock_pathis read, then itsbytesizeis less than 108.Owner sketch
Origin
Reproduced deterministically 2026-09-23: worktree name ticket-643-aliases gives a 110-byte daemon socket path (.claude/worktrees/ticket-643-aliases/plugins/os-sdlc/.cc-os/lsp//daemon.sock) and evidence_bin_test fails with SpawnTimeout every run; ticket-643 gives 102 bytes and passes; the same commit checked out at .claude/worktrees/a passes. The 108-byte limit is the live cause, not a flake.
Resolution
Done: Socket path length no longer applies: the lsp-probe daemon registry moved to the procman gem under $XDG_RUNTIME_DIR/procman// (ADR-0219, #712).
Evidence: Commit
cd265726on branch ticket-712: Daemon::Paths deleted, ProcmanKind supplies the endpoint; os-sdlc suite 1423 runs, 0 failures, 33.8s. Branch batch-lsp abandoned unmerged.Follow-ups: none