그룹·레인의 소유자 역할을 추상값으로만 강제하는 권한 게이트를 둠
문제 (Context)
0.0.2.5 안정화 작업은 권한이 흐려지는 두 표면을 짚는다. 7회차에서 RAG 쪽을 닫았고, 이 결정은 대칭을 이루는 나머지 하나인 그룹·레인 권한을 닫는다.
시도한 해결 (Decision)
kanban_group_layout(TRACK B 플래너)은 공급자 중립성을 강한 제약으로 선언한다. 카드는 추상 owner_role에만 묶이고, 채팅 id나 봇 사용자명, agy 같은 구체 신원에는 절대 묶이지 않는다. 그런데 이를 검증하는 테스트가 없었고, 최종 안전 블록은 채팅에 노출되는 제목과 사유만 가렸을 뿐 권한 키 자체인 owner_role은 검증한 적이 없었다.
그래서 lane_authority_violations()를 추가했다. 계획된 모든 작업이 추상 owner_role(pm 또는 worker:<숫자>)을 지니는지 단언하는 순수 게이트다. 이후 누군가 코드를 고쳐도 권한을 구체 신원으로 조용히 흘려보낼 수 없다. 이 모듈의 첫 테스트 묶음(11건)도 함께 추가했다. 모든 작업의 추상 역할, 숫자가 아니거나 사용자명 형태인 worker id가 PM 레인으로 안전하게 떨어지며 새지 않는지, 손으로 만든 구체 신원 작업에 게이트가 무는지, 플래너의 순수성과 결정성, 그리고 생성/이름변경/닫기/재오픈/General 미변경 차이를 검증한다. 더 강한 문구가 아니라 실제로 무는 게이트다. 두 엔진 양쪽에서 30건이 통과했다.
근거·결과 (Consequences)
범위는 좁다. 게이트 함수 하나와 테스트 파일 하나다.
노드 계약 (contract)
| 필드 | 값 |
|---|---|
| type | 결정(decision) |
| Status | accepted |
| source_count | 1 |
| confidence | 미설정 — 구 엔진 격차 |
| confidence_reason_codes | 미설정 — 구 엔진 격차 |
| stale | fresh |
| 이슈(feature) | 권한·레인 게이트 |
상호참조
- 이어받음 — 쓰기 입구에서 RAG 소스 경계 강제
- 이어받음 — RAG-칸반 엔진 회귀 스위트 고정
- 관련 — 표면 모델: 스레드는 네이티브 표면에만
이슈 권한·레인 게이트 · Status accepted · 2026-06-25