ADR: 심덩 Architecture Decision Records

📅 2026-06-09 20:43 KST§ 8개 섹션

ADR: 심덩 Architecture Decision Records#

문서 목적#

이 문서는 심덩 Discord Codex assistant의 핵심 아키텍처 결정을 기록한다. PRD가 요구사항을 설명하고 SSOT가 기준 출처를 정한다면, ADR은 중요한 설계 결정을 왜 그렇게 했는지 남긴다.

적용 범위#

관련 문서#

ADR-001: Discord bot은 UI adapter로 제한하고 agent-runtime이 workflow를 소유한다#

상태#

Accepted

맥락#

심덩은 Discord에서 요청을 받고 결과를 보여준다. 하지만 workflow state, Codex thread control, approval, write-agent orchestration, runtime store 접근까지 Discord bot이 모두 맡으면 UI 코드가 실행 정책과 상태 관리까지 소유하게 된다.

이는 다음 문제를 만든다.

결정#

Discord bot은 UI adapter로 제한한다.

결과#

장점:

단점:

연결 문서#

ADR-002: 승인 버튼에는 approval id만 넣고 scope는 server-side에서 조회한다#

상태#

Accepted

맥락#

Discord 버튼의 custom_id에 action, repo, cwd, command, scope를 모두 넣으면 payload가 길어지고 조작 위험이 커진다. 또한 승인 범위가 UI payload와 server store 사이에서 불일치할 수 있다.

결정#

승인 버튼 custom_id에는 approval id만 포함한다. 실제 action, scope, repo, cwd, request metadata는 agent-runtime approval store에 저장한다.

결과#

장점:

단점:

연결 문서#

ADR-003: 자연어 intent를 하드코딩된 classifier로 만들지 않는다#

상태#

Accepted

맥락#

Discord 사용자는 자연어로 요청한다. 하지만 특정 단어, regex, 키워드 테이블로 intent나 권한을 판정하면 쉽게 우회되거나 오분류된다.

예를 들어 “삭제해줘”라는 단어만 보고 destructive command로 확정하거나, “관리자 승인”이라는 문구만 보고 권한이 있다고 판단하면 안 된다.

결정#

자연어는 current-turn reasoning의 입력으로만 사용한다. 최종 판단에는 structured input, Discord metadata, server-side role, repo allow-list, approval record, handoff operation 같은 authoritative metadata를 사용한다.

결과#

장점:

단점:

연결 문서#

ADR-004: write-agent는 선언된 artifact path 안에서만 산출물을 생성한다#

상태#

Accepted

맥락#

write-agent는 Markdown, HTML, JSON, SVG 같은 산출물을 만들 수 있다. 그러나 요청 본문이나 소스 문서 안에 “다른 경로에 저장하라”는 지시가 들어 있을 수 있다. 이 지시를 따르면 path traversal이나 원치 않는 파일 변경이 발생할 수 있다.

결정#

write-agent는 structured handoff의 declared paths를 최종 출력 경계로 사용한다. data/runtime/write-agents/<topic>/ 아래 선언된 path만 반환하고, 허용 확장자만 사용한다.

결과#

장점:

단점:

연결 문서#

WTF 후보 감지: ADR을 보강해야 하는 신호#

다음 의문이 나오면 ADR을 보강한다.

ADR은 이미 선택한 구조적 결정을 설명한다. 요구사항 자체가 불분명하면 PRD, 기준 출처가 불분명하면 SSOT, 동작 검증이 부족하면 BDD를 보강한다.