Skip to content

Latest commit

 

History

History
110 lines (99 loc) · 33.7 KB

File metadata and controls

110 lines (99 loc) · 33.7 KB

설계 결정 기록 (ADR)

중요한 정책, 아키텍처, 데이터 저장, 접근 제어 결정을 기록한다. 작은 구현 기본값은 각 도메인 문서나 feature 문서에 둔다.

작성 기준

  • 여러 문서나 여러 모듈에 영향을 주는 결정만 ADR로 남긴다.
  • DB schema, RBAC, audit, data retention, organization boundary, 보안 경계는 ADR 후보로 본다.
  • ADR은 결정의 이유와 선택지를 기록한다. 현재 구현 기준은 관련 문서(docs/, features/)에도 반드시 반영한다.
  • 파일명은 ADR-NNNN-topic-slug.md 형식을 사용한다. NNNN은 4자리 순번이다.
  • 병렬 브랜치의 ADR 번호는 예약된 전역 식별자가 아니다. Merge 또는 rebase 직전에 최신 dev의 인덱스를 기준으로 중복을 확인하고, 충돌하면 아직 병합되지 않은 ADR의 파일명·제목·본문 링크·인덱스를 함께 재번호한다. 같은 번호의 서로 다른 결정을 dev에 병합하지 않는다. PR quality gate는 파일명, H1, 번호 유일성과 이 README 인덱스의 1:1 대응을 항상 검사한다.
  • 중복이 이미 dev에 병합됐다면 dev history에 먼저 도달한 ADR의 번호를 유지하고 후발 ADR의 파일명, H1, 인덱스와 모든 공식 참조만 다음 가용 번호로 재분류한다. 이 식별자 무결성 복구는 결정 내용의 소급 변경으로 보지 않으며 본문은 수정하지 않는다.
  • ADR 본문은 작성 시점의 기록으로 보존하고 소급 수정하지 않는다. 결정이 바뀌면 새 ADR을 추가하고 이전 ADR을 참조한다. 단 머리말 Status는 기록이 아니라 상태이므로 Superseded 등으로 전이할 수 있다.
  • 새 ADR의 메타 블록은 Status만 필수로 하고, 관련 결정이 있으면 Related ADRs를 선택적으로 추가한다. Date는 git history가 답하므로 넣지 않고, 구현 반영 여부는 이 README의 현재 코드 기준 열이 담당하므로 Verified Against도 넣지 않는다.
  • 이관 ADR의 Date, Original, Verified Against 필드는 이관 당시 기록으로 보존하며, 새 ADR 기준으로 소급 정리하지 않는다.

기존 docs_old/decisions/의 ADR-YYYYMMDDHHmm-* 파일은 2026-07-02 문서 체계 개편 때 이 디렉토리로 이관했다. 각 ADR 머리말의 Original: 항목이 원본 파일명을 가리키며, 이관 시 본문은 보존하고 링크와 번호만 새 구조에 맞게 갱신했다.

목록

ADR 본문은 작성 시점의 결정 과정을 보존하는 기록 문서다. 상태는 해당 ADR 자체의 상태를 뜻하며, 현재 코드 기준은 현재 코드 기준 열을 따른다.

ADR 상태 주제 현재 코드 기준
ADR-0001 Proposed Active organization 결정 방식 ADR-0009에 따라 X-Organization-Id header 방식 구현
ADR-0002 Proposed auth_state 표준화 ADR-0006에 따라 none/viewer/operator/builder/manager와 legacy mapping 구현
ADR-0003 Proposed User direct permission 도입 ADR-0006에 따라 user_workflow_permissions, user_knowledge_permissions, user_llm_permissions 구현
ADR-0004 Accepted audit_logs와 RAG trace 저장 기준 audit_logs, trace payload 계열 table 재사용
ADR-0005 Superseded 데이터 모델 문서 구조 2026-07-02 문서 체계 개편으로 대체됨. 데이터 모델 문서는 docs/data_model.md 단일 문서 기준
ADR-0006 Accepted RBAC auth_state 및 User Direct Permission 승인 workflow/Knowledge Base/LLM credential RBAC가 additive user direct permission 모델을 사용한다. user_audit_permissions는 아직 구현되지 않음
ADR-0007 Accepted MVP 2 classification metadata 저장 방식 documents.meta_info 사용 가능. knowledge_bases.classification, documents.classification column 없음
ADR-0008 Accepted Audit action naming 표준 MVP 1 주요 AuditAction과 organization membership invite/accept/update/remove action 구현. permission row 변경은 *_permission.created/updated/deleted data-change audit도 기록. policy.warn, policy.block, rag.retrieve는 MVP 2 목표 action이며, RAG Agent answer lifecycle/purge 목표 action은 rag.answer.*로 구분
ADR-0009 Accepted Active organization header context 승인 organization/team/permission API와 app 생성/목록/복제, workflow 생성 API에서 X-Organization-Id 검증 구현. MBA-67 이후 scope 판정은 active organization membership을 기준으로 하며, membership row 자체가 없는 legacy owner/manager만 fallback을 받는다
ADR-0010 Accepted Resource 접근 403/404 정책 App/Workflow에서 organization scope 밖은 404, scope 안 action 권한 부족은 403
ADR-0011 Accepted Team API RBAC service boundary Team 관리 권한 판정과 team/team member 조회는 TeamService가 소유하고, 등록 router는 기존 team.py 기준 유지
ADR-0012 Accepted Metadata-aware 및 Hierarchical RAG 경계 Metadata filter는 allowlist schema, metadata는 permission source가 아니며, RAG trace는 raw chunk content 없이 citation metadata를 저장
ADR-0013 Accepted RAG Agent answer와 trace/usage correlation 경계 Standalone Agent answer는 RAG-owned rag_answer_runs와 opaque correlation_id로 연결하고, trace/usage table에 RAG 전용 FK를 추가하지 않음
ADR-0014 Accepted Knowledge Base document atom과 Collection 경계 목표 KB 통합 모델에서 Knowledge Base는 document/source item 단위 permission/retrieval/sync/lifecycle atom이고, Knowledge Collection은 grouping/routing/ops 단위. RAG/embedding은 redacted canonical text만 사용하고 raw content는 opt-in protected artifact로만 별도 저장 가능. Destructive cutover는 별도 승인 대상이며, MBA-105의 source ACL/API/privacy baseline은 ADR-0017을 따른다
ADR-0015 Accepted Knowledge Skill과 LLM node RAG 옵션 구성 경계 Knowledge Skill은 Workflow Builder가 LLM node의 RAG 옵션을 구성할 때 참고하는 provider-neutral 절차/context/routing artifact다. 권한 source나 source of truth가 아니며 실행 시점 RAG 권한을 부여하지 않는다
ADR-0016 Accepted 권한 신청과 App 생성 권한 모델 App 생성(POST /apps) 권한 검사, permission_requests, user_app_creation_permissions, 신청/승인/거절 API와 audit 구현. Organization member 제거 시 App 생성 권한 row도 cleanup 대상
ADR-0017 Accepted Knowledge 통합 임시 구현 baseline MBA-105에서는 ADR-0014/0015의 남은 구현 gate에 대해 보수적 임시 baseline을 채택한다. Source ACL은 KB use를 대체하지 않고, auto-ingested KB use provisioning, active version finalization, protected source identity, LLM node RAG option runtime, query rewrite/evidence sufficiency, resource hiding, 운영 기본값을 이 ADR 기준으로 구현한다. Workflow RAG의 execution_subject 부재 처리는 MVP에서 ADR-0018이 보정한다
ADR-0018 Accepted Workflow RAG anonymous public-only runtime Interactive 실행은 execution_subject=current_user를 전달한다. execution_subject가 없으면 workflow owner/user_id fallback 없이 active public collection 소속 KB만 anonymous public-only로 검색한다. Source-managed KB는 ADR-0020의 public exposure approval도 통과해야 한다. MBA-176 preflight는 private KB가 subject 없는 active deployment surface에 올라가는 것을 차단하며, private KB 자동 실행용 service account/operator는 후속 기능이다
ADR-0019 Superseded by ADR-0045 Agent Builder preview apply/save boundary Preview/apply-save는 legacy characterization 기록이다. 신규 Agent Builder 동작과 UX는 ADR-0045의 direct-edit 계약을 따른다.
ADR-0020 Accepted Knowledge MCP incremental sync boundary MCP/API source connector는 LLM 자유 tool-use가 아니라 Knowledge Source Connector 뒤의 allowlist adapter로 둔다. Live-linked source-side search는 requester-scoped 또는 opaque-ref-only flow만 허용하고, runtime source authorization은 batch 우선 primitive와 bounded fallback을 사용한다. Source-managed KB public exposure는 collection public flag와 별도 approval scope validation을 모두 통과해야 한다
ADR-0021 Accepted Webhook capture helper security boundary Capture start/status/cancel은 public trigger 실행 표면이 아니라 로그인 사용자 + target workflow deploy 권한이 필요한 디버그 helper다. App secret 인증만으로는 capture를 시작/조회/취소할 수 없고, captured payload는 raw 원문이 아니라 redacted/capped preview만 반환한다
ADR-0022 Accepted 헥사고널 아키텍처 점진 도입 Gateway deployment preflight는 application use case/result/error/port, SQLAlchemy adapter, outer composition root와 compatibility facade로 이관되어 첫 reference pilot을 제공한다. 다른 domain package는 각 도메인의 첫 리팩터링 PR에서 실제 use case/port와 함께 만들고, mutation은 별도 UnitOfWork/audit transaction을 추가한다. 기존 router/service 대량 이동은 하지 않는다
ADR-0023 Accepted Audit actor 기반 organization access management 경계 access_management application/port/SQLAlchemy·audit adapter, manager-only actor profile/team/resource/action API, transaction-bound audit, safe change summary와 Audit actor drawer가 구현됐다. 기존 member/team/user-direct/App 권한 경로는 동일 subject lock protocol과 transaction-bound audit을 사용하는 compatibility path로 보강됐다
ADR-0024 Accepted Agent Builder node capability catalog 버전 관리되는 공통 catalog가 구현 node type과 Agent Builder allowlist 계약을 소유한다. 현재 구현 16개 중 제품 가용성이 비활성인 loopNode를 제외한 15개를 Builder에 허용하며 외부 action 설정은 unresolved로 남긴다
ADR-0025 Superseded Agent Builder 내부 intent model 선택 경계 MBA-240 당시 OpenAI gpt-5.5 정확 일치 예외와 서로 다른 Header/generated-node fallback 정렬을 정의한 역사 기록이다. 현재 구현은 ADR-0040의 통합 추천 정책으로 이 동작을 대체한다.
ADR-0026 Accepted Agent Builder intent 및 graph 연결 검증 Schema-valid LLM 의미 후보를 semantic invariant로 재검증하고 최대 1회 safe-code repair 후 fail-closed한다. Catalog v2 연결 정책을 preview/apply-save 양쪽에서 검증하며 loopNode는 Builder 제품 가용성에서 제외한다.
ADR-0027 Accepted Agent Builder pre-intent safe KB context Intent LLM 호출 전에 권한과 retrieval-visible gate를 통과한 KB metadata 후보를 조회하고 상위 20개의 opaque handle, safe label/topics/description, runtime availability, bounded relevance만 prompt에 제공한다. LLM handle은 hint이며 backend가 다시 ranking·권한·materialization을 검증한다.
ADR-0028 Accepted Security Alert 탐지와 lifecycle 경계 조직·actor가 검증된 permission.denied와 allowlist policy.block을 규칙 기반 alert로 탐지한다. MBA-211~214와 MBA-223을 통해 Alert/evidence 모델, 실시간 detector, reconciliation, 관리자 API/UI·SSE, audit producer 정규화가 구현됐다.
ADR-0029 Accepted 분산 Schedule dispatch claim과 admission 멱등성 경계 MBA-187이 occurrence별 durable claim, deterministic task id, duplicate-suppressed Worker admission, system actor, outcome-unknown no-replay, WorkflowRun visibility signal을 구현했다. Admission 이후 외부 node 부수효과 멱등성은 MBA-190과 ADR-0035가 소유하며 provider가 증명하지 않은 exactly-once는 보장하지 않는다.
ADR-0030 Accepted 독립 Memory bounded context와 Conversation Memory 경계 Memory가 session/turn/entry/summary/provenance/retention과 durable dispatch를 소유하고 Gateway/Workflow Engine은 port로 협업한다. Deployment-version-pinned session, principal-neutral authorization revision, ProviderExecutionCapability, complete purge/audit cardinality, versioned Worker와 fenced summary를 목표로 하며 정상 turn/summary는 AuditLog가 아닌 operational trace로 분리한다. Control provenance, capability authority, session surface와 grant V1 보정은 ADR-0033을 따른다. 현재 global memory_mode, client conversation ID와 execution-log 기반 기억 구현은 아직 이관되지 않았다.
ADR-0031 Accepted Mail credential reference 경계 Organization-scoped Mail credential과 read/use/manage 권한을 두고 workflow graph에는 credential_id만 저장한다. Runtime은 명시 execution subject 기준으로 재검증하며 legacy inline password는 fail-closed한다.
ADR-0032 Accepted Mail 처리 claim과 Gmail 답장 초안 멱등성 경계 Workflow/source node 단위 durable message claim, no-send Gmail Draft adapter, outcome-unknown no-replay와 명시적 terminal acknowledgement node를 채택한다.
ADR-0033 Accepted Conversation Memory 계약 공백 보정 Runtime provenance에 활성 control dependency를 포함하고 ProviderExecutionCapability authority를 LLM Credentials로 고정한다. 초기 session surface에서 Workflow Editor test를 제외하며 Access Grant V1은 standalone rotation/grace 없이 즉시 replacement/revoke한다. 현재 target 설계이며 legacy Memory 구현 완료를 의미하지 않는다.
ADR-0034 Accepted Knowledge 위임 관리와 KB RBAC 경계 MBA-231은 owner를 귀속 정보로 전환하고 KB object/property action, Team/User Knowledge domain delegation, self-escalation 차단, transaction-bound audit, public exposure·hard delete 조직 관리자 경계를 구현한다.
ADR-0035 Accepted Workflow external effect 멱등성 경계 모든 실행 표면의 stable execution/node invocation identity와 compare variant 분리, operation 변경 우회를 막는 stable effect slot, 독립 DB session을 사용하는 durable attempt, 같은 execution 재진입과 claim loser 처리, 고정 replay deadline, supported operation에만 적용하는 versioned HMAC key, canonical JSON 최대 65,536-byte replay result와 변경 불가능한 provider contract profile을 확정했다. MBA-190 시점 Generic HTTP mutation과 Slack은 replay unknown, GitHub issue comment는 unsupported인 보수적 baseline을 구현했으며, 현재 Slack provider 계약은 ADR-0037이 보정한다.
ADR-0036 Accepted Knowledge runtime candidate resolution 경계 MBA-232는 direct KB와 명시 selected Collection을 execution audience 기준으로 재평가하는 pure policy, Workflow Engine use case/port, PostgreSQL repeatable-read read-only adapter와 실제 PostgreSQL snapshot/동시성 검증을 구현했다. Graph/Builder/preflight/LLM wiring은 ADR-0039이 소유한다.
ADR-0037 Accepted Slack 전용 전달과 외부 부수효과 경계 Slack API/Webhook을 전용 operation과 strict response parser로 분리한다. Provider replay는 unknown으로 유지하고 성공 safe projection만 durable result로 재사용하며, 429와 outcome-unknown은 자동 replay하지 않는다. 기존 slack.http.request.v1은 과거 attempt 해석용으로 보존한다.
ADR-0038 Accepted Workflow-Aware Adaptive Routing 운영/Replay evidence, Hard Gate, 보수적 품질 하한과 결정론적 optimizer를 통과한 모델만 versioned Semantic Route에 연결한다. Runtime은 Aurelio식 semantic cohort matcher와 저장 policy만 평가하며 Judge를 호출하지 않는다. Replay evidence, semantic matcher, optimizer와 50개 이상 배포 검증은 FR-011 진행중이다.
ADR-0039 Accepted Workflow Knowledge Collection 라우팅 통합 MBA-233은 additive knowledgeCollections graph, route-safe Builder picker, save-time use/route 재검증, deployment preflight와 MBA-232 resolver의 LLM/retrieval 연결을 구현한다. Worker-first drain 뒤 Client를 노출하고 public projection과 durable observability에서 Collection identity를 제거한다.
ADR-0040 Accepted Agent Builder 통합 model 추천과 선택 경계 Header와 generated LLM node가 동일한 권한 후보와 최신 세대 → general/mini/nano/pro 순서를 공유한다. Gateway의 순수 추천 정책이 두 경로를 함께 정렬하며, 확실한 특수 목적 모델은 제외하고 이름을 해석하지 못한 verified chat 모델은 안정적인 후순위로 유지한다.
ADR-0041 Accepted Public webhook ingress 보안 경계 Public webhook은 query secret을 거부하고 단일 Bearer 또는 X-Webhook-Secret header만 허용한다. 인증 뒤 queue admission 전에 1 MiB, 5초, depth 20, 10,000 JSON node 제한을 적용하며 Repository Nginx와 production ingress도 query/header safe logging과 path-specific body guard를 검증한다.
ADR-0042 Accepted Security Alert reconciliation receipt 경계 Processor별 receipt 부재를 미처리 audit의 durable 기준으로 사용한다. Event-time cursor는 rule 평가 순서와 관찰값으로 유지하고 late commit 발견 correctness에는 사용하지 않는다.
ADR-0043 Accepted Deployment browser origin과 iframe embedding 경계 Public Chatbot/Widget parent origin을 immutable deployment policy와 CSP frame-ancestors로 집행하고 first-party iframe API와 external direct JavaScript CORS를 분리한다. Missing/malformed policy와 projection 장애는 'none'으로 닫으며 public endpoint wildcard CORS를 제거한다.
ADR-0044 Accepted Knowledge Collection 운영 관리 경계 MBA-264는 manual Collection restore, exact revision reorder, bounded Team/User subject page, action-set bundle revoke와 1~50개 Collection atomic bulk 권한 변경을 Collection-first lock·transaction-bound audit 경계로 구현한다. KC sync 실행은 MBA-265로 분리한다.
ADR-0045 Accepted Agent Builder direct edit와 parameter guidance Typed Knowledge placement, 통합 설정 흐름, ParameterTask, 완료 상태와 Workflow history boundary를 정의한다. Preview 경로는 Superseded legacy characterization으로 취급한다.
ADR-0046 Accepted Agent Builder GraphMutation과 CAS 저장 ADR-0045를 지원하는 저장 계약이다. Full typed operations는 API 응답 전용이고 DB에는 expected result hash를 포함한 safe envelope만 저장한다. 일반 editor 저장과 Agent Builder 저장은 canonical graph hash와 updated_at 기반 CAS를 공유한다.
ADR-0047 Accepted Password login abuse prevention 경계 Email/password login 앞에서 account, source network, account+network Redis token-bucket을 원자적으로 적용한다. Trusted proxy에서만 forwarded address를 해석하고 versioned HMAC fingerprint를 사용하며, limited request는 generic 429, limiter 장애는 password 검증 전 fail-closed 503으로 닫는다.
ADR-0048 Accepted Knowledge Collection sync 실행 경계 MBA-265는 Manual KC의 현재 DB document sync를 durable job/item, request idempotency, KC single-flight, worker-start 권한 재검사, Celery lease/recovery와 safe polling UI에 연결한다. Source/system-managed connector sync는 adapter가 없는 동안 fail-closed한다. DB Connection 사용 주체 정책은 ADR-0051이 보정한다.
ADR-0049 Accepted Connector 연결 테스트 보안 경계 /connectors/test를 authenticated active-organization capability로 제한하고 Redis 분산 admission, 기본 public PostgreSQL 및 explicit development exact-target TLS/pinning, bounded ingress/timeout과 오류 비노출을 강제한다. Local demo는 TLS-only 최소권한 DB, ephemeral CA signing key와 분리 volume을 사용하며 SSH와 운영 private-network test는 승인 정책 전까지 거부한다.
ADR-0050 Accepted Workflow Generic HTTP egress 경계 Generic HTTP를 application outbound port와 공통 guard에 연결하고 검증된 IP로 dial해 DNS rebinding을 차단한다. Redirect는 추적하지 않고 기존 HTTPX/provider 계약을 유지하며, Worker NetworkPolicy는 private·metadata direct egress를 추가로 차단한다.
ADR-0051 Accepted Connection 사용 권한 경계 현재 user-owned Connection은 실행 주체 본인 소유일 때만 Knowledge DB ingestion에 사용할 수 있다. Shared resolver가 설정 저장과 dial 직전에 권한 스냅샷을 재검증하고 non-owner/missing reference를 resource hiding으로 처리한다. Runtime transaction/lock protocol은 MBA-302에서 별도로 결정한다.
ADR-0052 Accepted Knowledge document ingestion durable 실행 경계 MBA-288은 process/sync/resume/reindex를 PostgreSQL durable job, document single-flight, worker lease/heartbeat/fencing, due recovery와 전용 knowledge queue worker로 이관한다. MBA-359는 provider-neutral Helm production reference에서 bounded worker와 singleton Beat를 함께 활성화하고 migration/keyring gate 및 exact local Celery readiness를 적용한다. Celery는 job UUID wake-up 신호이며 active version finalization과 job success는 같은 transaction에서 확정한다.
ADR-0053 Accepted Connection transaction과 lock 경계 Runtime DB use는 독립된 짧은 session에서 immutable credential snapshot을 만든 뒤 session을 닫고 외부 I/O를 시작한다. Reference mutation만 Connection -> KnowledgeBase -> Document/Version 순서의 bounded row lock과 stale revision 검사를 사용하며 timeout/deadlock은 safe transient 오류로 처리한다.
ADR-0054 Accepted Agent Builder 생성 모드와 전환 경계 기본 guided_generate, 명시적 quick_generate, 고급 structure_only를 정의한다. 빠른 생성도 typed GraphMutation/CDS CAS를 사용하고 서버 eligibility와 사용자 확인을 통과하며 Legacy Preview 프로토콜을 복구하지 않는다.
ADR-0055 Accepted Agent Builder intent 사용량 귀속 경계 Planner와 repair 호출을 실제 user/organization/workflow/model/credential에 별도로 귀속하고, provider 응답 직후 raw content 없이 기존 llm_usage_logs에 멱등 저장한다. 모델·credential 삭제 뒤에도 token/cost 이력을 보존하며 기존 관리·예산·workflow별 월 예상 비용 집계에 포함한다. 워크플로우 화면의 page-level 표시 조항은 ADR-0060이 대체한다.
ADR-0056 Accepted App 인증 secret 발급·검증·rotation 경계 App·Deployment 일반 응답에서 secret 원문을 제거하고 명시적 one-time rotation API만 원문을 반환한다. App에는 비가역 current/previous verifier와 version을 저장하며, row lock·CAS·최대 5분 grace·즉시 폐기·transaction-bound audit을 적용한다.
ADR-0057 Accepted LLM credential 저장 암호화와 key rotation LLM credential config를 전용 versioned keyring으로 암호화하고 Shared 단일 decrypt 경계, dual-read/single-write 전환, Gateway·Workflow Worker·Knowledge Worker startup 검증과 제한 batch backfill·rotation을 적용한다.
ADR-0058 Superseded Bootstrap 난이도 라우팅 정책 ADR-0059의 Judge bootstrap과 점진 학습 구조로 대체됐다.
ADR-0059 Accepted Judge Bootstrap과 점진 학습 로컬 라우팅 초기 운영 요청은 Judge가 실행 주체가 쓸 수 있는 후보 중 모델을 선택하고, Judge label과 실제 운영 성과가 충분히 쌓이면 로컬 mDeBERTa 분류기가 우선 선택한다. 낮은 신뢰도는 Judge로 되돌아가며, Judge 실패는 기본/대체 모델로 닫는다.
ADR-0060 Accepted 내 모듈 비용 요약 표시 경계 현재 워크플로우 화면은 page-level 비용·추세·위험 요약과 cost-summary 호출을 제거하고 workflow별 총비용과 실행/Agent Builder 구분값을 유지한다. cost-summary API와 Admin 조직 비용 요약은 호환성과 관리 용도로 유지한다.
ADR-0061 Accepted Agent Builder 계층형 Knowledge 선택 Collection 동적 routing과 직접 KB binding을 분리하고 opaque handle, 권한 필터, 안정 점수 정렬, 중복 KB 선택 동기화와 runtime 합집합 중복 제거를 정의한다.
ADR-0062 Accepted Workflow node secret reference 경계 Agent Builder와 Node Detail의 masked 직접 입력 및 나중에 설정 UX를 유지하면서 Slack/GitHub 원문 secret을 서버 암호화 immutable revision으로 저장하고 graph/deployment에는 opaque reference만 보존한다.
ADR-0063 Accepted Agent Builder 결정론적 intent plan cache 채택된 목표 계약이며 현재 코드는 아직 구현되지 않았다. Feature flag는 기본 비활성이고 Production Redis 운영 증거 전에는 production/staging serving을 활성화하지 않는다.
ADR-0064 Accepted Provider 실행 capability와 deployment credential 정책 경계 Deployment-version LLM node별 단일 server-owned credential policy, typed runtime principal, 실제 token/cost admission, provider 호출 전 capability commit과 Shared config materialization 경계를 확정한다. 호출 뒤 usage lifecycle은 ADR-0069, legacy activation은 MBA-320이 소유한다.
ADR-0065 Accepted Knowledge 분류, 조직 taxonomy와 processing profile 경계 Security classification, platform document type, organization taxonomy와 immutable processing profile을 분리한다. Manual lock과 accepted assignment가 우선하고 AI는 suggestion-only다. 현재는 목표 정책만 승인됐으며 registry, assignment API, profile infrastructure와 classifier는 아직 구현되지 않았다.
ADR-0066 Accepted Nested LLM canonical node location Deployment policy와 ProviderExecutionCapability의 node identity를 Loop-only structured container_path + node_id로 확장한다. 기존 top-level row는 root path로 보존하고 실제 capability rollout은 MBA-320이 소유한다.
ADR-0067 Accepted 프로덕션 HTTPS와 operation-bound outbound 경계 Browser public HTTPS와 server-only internal API URL을 분리하고 LLM, Knowledge와 Workflow 원격 파일을 immutable operation profile, address-pinned TLS transport와 safe error 경계에 연결한다. 잔여 adapter 이관과 proxy-only 강제는 MBA-356/357로 분리한다.
ADR-0068 Accepted EKS 지원 표면 제거와 공급자 중립 배포 경계 EKS 전용 workflow/raw manifest/Terraform을 제거하고 Docker Compose와 provider-neutral Helm만 지원한다. Non-disabled schedule activation은 별도 coordinated CD가 생길 때까지 fail-closed한다.
ADR-0069 Accepted Provider usage durable ledger와 compatibility projection 경계 Capability path의 intent/start/outcome canonical ledger, outcome-unknown no-retry, correction, deterministic llm.call audit, mixed cost read와 nullable compatibility projection/reconciliation을 확정한다.
ADR-0070 Accepted 조직 Detector Provider와 embedding 전 로컬 마스킹 경계 Local hard baseline, closed mode/provider/action matrix, exact provider·egress approval revision, UTF-8 byte span/fingerprint, platform+Organization validity epoch와 30-day legacy hard max를 redacted canonical/retrieval 경계에 강제한다. 현재 runtime/provider/persistence는 미구현이며 MBA-362와 각 관리 readiness 전에는 non-null provider 및 review-capable path를 비활성화한다.
ADR-0071 Accepted RAG query embedding provider capability 경계 Deployment version과 canonical LLM location, exact embedding model별 명시 policy를 사용한다. Authorized 후보가 있을 때만 model별 capability와 durable usage operation을 만들고 query/vector를 invocation-local로 유지하며 ADR-0067 guarded transport를 사용한다. 일반 runtime activation과 legacy 제거는 MBA-320이 소유한다.
ADR-0072 Accepted Outbound proxy-only 네트워크 강제 경계 Application guard를 의미 정책 권위로 유지하면서 explicit Squid transport, Compose internal network와 provider-neutral Helm NetworkPolicy를 결합한다. PR CI는 pinned kind+Calico IPv4에서 direct HTTPS 차단을 검증하고 dual-stack·운영 CNI는 release gate로 둔다.
ADR-0073 Accepted Cookie 인증 API CSRF 경계 Cookie/pre-auth unsafe route에 signed double-submit, exact Origin·Fetch Metadata, 명시적 Public/server 예외와 Client memory token을 적용한다. Development와 production은 기본 enforcement를 사용하고 Client/Gateway를 같은 maintenance release와 rollback 단위로 배포한다.
ADR-0074 Accepted Public Chatbot client-held conversation history Public은 완료된 user/assistant history를 요청마다 보내고 서버는 20 turn/4,096 token을 검증한다. Public Session/Transcript/Access Grant와 content-bearing run/node/trace를 저장하지 않는다. ADR-0030/0033 durable Memory는 authenticated internal Chatbot 후속 target으로 유지한다.

참고 보고서

문서 성격 기준
docs_old/decisions/docs-code-discrepancy-report-20260629.md docs와 code 불일치 조사 보고서. 현재 active source of truth가 아니라 정리 근거 기록이다. docs_old/ 삭제 후에는 아카이브 커밋(eedd820)의 git history에서 확인한다. dev @ c990b54e931b4de8023822f6dff14f43fc1d415f

상태 의미

  • Proposed: 작성 당시 제안 상태로 남은 기록이다. 현재 구현 기준은 반드시 현재 코드 기준 열을 따른다.
  • Accepted: 채택된 결정 기록이다. 실제 구현 반영 여부와 범위는 현재 코드 기준 열을 따른다.
  • Superseded: 다른 ADR 또는 문서로 대체됨.