채널 어댑터
사람 대면 surface는 하나. 채널은 교체 가능하게.
Persona는 transport-neutral human_* 도구를 사용하고 hub가 channel credential을 보유합니다. Teams가 첫 adapter이며, Telegram·Slack·Email과 미래 채널은 추가될 때 같은 선언형 계약에 맞춥니다.
선언된 CAPABILITY
없는 기능을 조용히 버리지 않습니다.
필수send · reply · ack · status없으면 adapter로 승인되지 않습니다.
Reaction / file선택지원하지 않으면 명시적으로 거부합니다.
Card선택호출자가 명시적 text fallback을 주지 않으면 거부합니다.
Typing선택보고되는 no-op으로 degrade합니다.
BINDING
Persona가 아니라 경로를 바꿉니다.
Persona address
↓ exact bindingchannel type + adapter ID + lane
↓ matching adapter사람 대화
Binding 변경은 persona identity·tool·runtime을 바꾸지 않고 channel만 전환합니다. Channel type은 adapter와 일치해야 하며 모든 operation은 binding과 caller의 stamped path를 비교합니다. 다른 workspace나 project의 그럴듯한 binding은 거부합니다.
전달
Retry는 identity와 intent를 보존합니다.
Boundary contract는 외부 side-effect port가 같은 durable key를 강제하도록 요구합니다. Redis는 임의의 외부 API 호출을 atomic하게 만들 수 없습니다.
메시지가 도착하지 않을 때
Private content가 아니라 metadata를 추적합니다.
설계된 channel doctor는 lane, authentication 존재 여부, terminal HTTP 또는 adapter-admission status만 관찰합니다. Candidate가 정확히 하나일 때 세 outcome branch를 따르고, 여러 개면 attribution 없이 inconclusive로 끝냅니다.
채널 진단 열기