Skip to content

feat: list the 52d82f0a features in server.capabilities - #779

Merged
schubydoo merged 3 commits into
mainfrom
feat/capabilities-52d82f0a
Oct 30, 2026
Merged

schubydoo merged 3 commits into
mainfrom
feat/capabilities-52d82f0a

Conversation

@schubydoo

Copy link
Copy Markdown
Owner

Summary

server.capabilities now lists the four features of build 52d82f0a that claustrum has built, at the places the build sends them. On Windows, a daemon with jobs on also lists process.spawn.job.

  • process.kill.farewell follows process.stdin.offset.
  • files.list.includeDotNames follows files.extract_tar.execBit.
  • process.spawn.failure_reason and server.line_end follow process.spawn.shellAgentSocket, before launcher.managed.
  • Windows: process.spawn.job comes after server.instance_id. With CLAUDE_SSH_NO_JOBS=1 the name is not in the list.

These positions were measured on 52d82f0a on Linux, macOS and Windows. claustrum does not list process.spawn.pty, because the terminal is not built yet.

Wire surface

  • Wire-surface change that matches the reference. The features array of server.capabilities gains four names on every system, and the job name on Windows with jobs on. The two socket_responses goldens change for that reason: the Linux one was regenerated with -update, and the Windows one gained the same four lines by hand.

Docs

  • docs/protocol/server.md: the example array and one sentence on the Windows job name. Its word limit rises from 1490 to 1496, because the docs test pins the example array word for word.

Test plan

  • gofmt -l . prints nothing. go vet ./... is clean for Linux, Windows and macOS. golangci-lint run ./... is clean.
  • go test -race -timeout 20m ./... passes.
  • TestCapabilitiesListTheJobNameOnlyWithJobs pins the job name with jobs on and off.

🤖 Generated with Claude Code

The features array gains process.kill.farewell, files.list.includeDotNames,
process.spawn.failure_reason and server.line_end at the places that 52d82f0a
sends them. A Windows daemon with jobs on adds process.spawn.job last.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@schubydoo

Copy link
Copy Markdown
Owner Author

@claude review


Generated by Claude Code

@claustrum-ci

claustrum-ci Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

✅ Claude reviewed 5618aa9: 1 important, 0 nits. Review · Run

@claustrum-ci claustrum-ci Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 important, 0 nits

Severity File Line Finding
🔴 Important process_stdin_killwait_test.go 468 The guard "featuresFor changed the shared list" cannot fail. Without slices.Clip, the append writes into the spare capacity of capabilityFeatures, which slices.Contains never reads.

I read the code. I did not run the tests, because CI is the measurement.

The wire change matches the PR description. capabilityFeatures at methods_server.go#L52-L68 puts the four names at the places the PR names. The two goldens, wantCapabilityFeatures and TestCapabilitiesAdvertisesNewSurface agree with that order. The Windows golden needs no process.spawn.job, because the socket harness builds its procManager with newProcManager (harness_test.go#L303-L308) and never calls startChildJobs. So jobs stays jobsOff there. The missing process.spawn.pty is already documented at docs/protocol/server.md#L160. Each new name has code behind it: farewell.go, IncludeDotNames in methods_files.go, spawnFailureReason in spawnreason.go, and lineend_test.go for the line end.

Comment thread process_stdin_killwait_test.go Resolved
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@schubydoo

Copy link
Copy Markdown
Owner Author

@claude review


Generated by Claude Code

@claustrum-ci

claustrum-ci Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

✅ Claude reviewed a477bac: 0 important, 0 nits. Review · Run

@claustrum-ci claustrum-ci Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0 important, 0 nits

No important findings.

Previous findings

Status File Line Finding
FIXED in a477bac process_stdin_killwait_test.go 470 The guard of the shared list could not fail. It now reads capabilityFeatures[:cap(capabilityFeatures)].

The fix holds. The shared list has spare capacity on every system. On Linux and macOS, the append of externalRootCapabilityFeatures to the 15-name literal grows the array, and server.instance_id then fits in it. On Windows, that append adds nothing, and the append of server.instance_id grows the array. In both cases, an append without slices.Clip in featuresFor (methods_server.go#L76-L81) writes the job name below the capacity, and the new check at process_stdin_killwait_test.go#L468-L472 reads it.

I read the code again at a477bac. I did not run the tests, because CI is the measurement. The rest of the diff is the same as in 5618aa9. The Windows tests of the full frame (the Windows golden, wantCapabilityFeatures and TestCapabilitiesAdvertisesNewSurface) build their server with newTestServer or newRunningServerAt. Neither calls startChildJobs (server.go#L643), so jobs stays jobsOff, and those frames correctly have no process.spawn.job.

@codecov

codecov Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

… on Windows

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@schubydoo
schubydoo merged commit 7fd710e into main Oct 30, 2026
28 checks passed
@schubydoo
schubydoo deleted the feat/capabilities-52d82f0a branch October 30, 2026 07:38
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