Remove the in_namespace edge relation. A node now belongs to a namespace if that
namespace has has_ownership on it. This simplifies the model: namespace membership
is determined by the ownership chain rather than a separate relation type.
Changes:
- Remove RelInNamespace constant
- Add Namespace fields to AddInput, UpdateInput, and ListFilter
- Update Add() to resolve namespace from input and assign it as owner
- Update List() to filter by namespace ownership instead of in_namespace edges
- Update() can now transfer nodes between namespaces via ownership transfer
- Remove in_namespace self-references from ensureNamespace/ensureGlobalNamespace
The ownership chain now fully describes both permissions and namespace membership,
reducing redundancy. All tests pass with the new model.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Replace InitNodeService/GetNodeService/GetNodeServiceForUser with thin
NewLocalNodeService/NewRemoteNodeService constructors; move wiring logic
into cmd/root.go (getNodeService helper) and an inline closure in serve.go.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>