Description
## Problem
`pkg/nim/` contains two distinct concerns:
1. **Messaging layer** (Wind, Leaf, Connect) — used by all services
2. **Agent layer** (Nim interface, Runner, 5A, Brain, Registry) — used only by nim implementations
Every service that just needs pub/sub imports the entire nim package. Pantheon has its own raw `nats.Connect()` because depending on a "nim" package for messaging doesn't make sense.
## Desired outcome
A new `pkg/wind/` package containing `wind.go`, `leaf.go`, `connect.go` with `package wind`. The `pkg/nim/` package imports `pkg/wind` and re-exports via type aliases for backwards compatibility.
## Key blocker: variable shadowing
The codebase uses `wind` as a local variable/parameter name in ~30 functions:
```go
func NewTree(cfg TreeConfig, wind *nim.Wind, ...) { ... }
```
When the package alias was `nim`, there was no conflict. But if the package name is `wind`, then `wind *wind.Wind` causes the parameter to shadow the package — making `wind.Leaf` (the type) inaccessible inside the function body.
## Required approach
Rename all local `wind` variables/parameters to `w` across ~16 files before switching the import. This is the structurally correct solution per Go convention but involves significant churn:
- ~30 function signatures change parameter name from `wind` to `w`
- All method calls inside those functions change (e.g. `wind.Drop()` → `w.Drop()`)
- All callers that pass the variable by name update accordingly
## Files that move to pkg/wind (Wind/Leaf only — 22 source + 10 test files)
cmd/forest/main.go, cmd/forest/cli.go, pkg/runtime/runtimecontroltreehouse.go, pkg/runtime/agent_brain.go, pkg/runtime/clubtreehouse.go, pkg/runtime/treehouse.go, pkg/runtime/tree.go, pkg/runtime/runtreehouse.go, pkg/runtime/processpublisher.go, pkg/agent/agent.go, pkg/dance/dance.go, internal/viewmodel/publisher.go, internal/sources/ceremony.go, internal/sources/factory.go, internal/windwaker/windwaker.go, internal/windwaker/dancer.go, internal/trees/songtree.go, internal/trees/persistencetree.go, internal/core/tree.go, internal/core/nim.go, internal/treehouses/interface.go, internal/songbirds/songbird.go
## Files that stay on pkg/nim (use Nim interface, Runner, Registry)
pkg/runtime/forest.go, pkg/runtime/nim.go, cmd/forest/scaffold.go
## After extraction
- Pantheon replaces raw `nats.Connect()` with `wind.Connect()` + `wind.Drop()`
- External services (nimsforestissue, hetznertreehouse, etc.) can migrate from `pkg/nim` to `pkg/wind` incrementally — aliases keep them working
Nebula's reasoning: This is important architectural hygiene — separating the messaging layer from the agent layer will reduce coupling and let services import only what they need. However, it's not blocking any feature work or causing bugs today. The description is thorough with a clear problem statement, approach, and file inventory. No changes needed to title, category, or description — all well-written. Medium priority reflects that this should be done before more services accumulate the wrong dependency, but isn't urgent.