Problem
Toolset is RWMutex-protected, but stores pointers to CanonicalTool. If callers mutate a tool after adding it, concurrent readers can race.
Evidence
File: toolcompose/set/toolset.go
Add stores *adapter.CanonicalTool directly.
- Comments indicate toolset is concurrency-safe, but tool objects remain mutable externally.
Proposal
- Deep copy
CanonicalTool on Add/Update, or
- Document immutability requirement clearly and enforce via cloning helpers.
Acceptance Criteria
Problem
Toolsetis RWMutex-protected, but stores pointers toCanonicalTool. If callers mutate a tool after adding it, concurrent readers can race.Evidence
File:
toolcompose/set/toolset.goAddstores*adapter.CanonicalTooldirectly.Proposal
CanonicalToolon Add/Update, orAcceptance Criteria