--- model: gpt-5.6-sol service: opencode session: tractor-addr-unpacking timestamp: 2026-08-22T04:20:26Z git_ref: 29141f0b scope: code substantive: true raw_file: 20260822T042026Z_29141f0b_prompt_io.raw.md --- ## Prompt After committing endpoint namespace visibility, the human authorized continued Layer C implementation. During staged review, the human requested Literal-derived validation, ownership documentation, stable-inode clarification, explicit non-serialization rationale and consolidated invalid-model tests. ## Response summary Added the foundational bindspace model: serializable declarations and stable identities are separated from a process-local live capability. The handle validates names, ownership and FD identity. A global `ProcessLocal` sentinel blocks default encoding while retaining msgspec struct behavior. Review fixes require a positive inode for every realized netns, derive runtime choices from the Literal aliases and clarify that an FD integer is not transferable capability authority. The human then clarified that msgspec structs are useful generic storage independently of serialization policy, so the live handle now uses a struct while remaining process-local by contract. The human first selected an opaque FD wrapper, then recognized that future process-local handles need the same guard and directed a global marker under `tractor.msg` instead. ## Files changed - `tractor/discovery/_bindspace.py` - declaration, identity and live capability models. - `tractor/discovery/__init__.py` - public bindspace exports. - `tractor/msg/_local.py` - reusable process-local struct marker. - `tractor/msg/__init__.py` - public `ProcessLocal` export. - `tests/discovery/test_bindspace.py` - serialization and capability invariant coverage. - `tests/msg/test_process_local.py` - direct and nested wire rejection. - `ai/tpt-backends/03_wg_tunnel_bindspace.md` - concrete initial model contract. ## Human edits The human selected the foundational Layer C capability model, then reviewed the staged patch and directed all eight follow-up changes: remove distracting ownership variation, consolidate invalid-model tests, derive containment checks from Literal aliases, require a stable inode and explain why the live handle is not a msgspec struct. The human subsequently corrected that last design choice: struct use does not imply IPC authorization, so `BindspaceHandle` should retain msgspec's generic storage benefits. The agent applied those human-directed edits. The human first chose an opaque process-local FD wrapper, then refined that decision to a reusable global marker under `tractor.msg` for future local handles. No direct manual source edits were observed.