Files
gitea-agent-testbed/docs/data-model.md
T
code-agent 14302a26f9 code-agent: implement issue 6
Approval-Correlation: e5da4592756fb704256d8737d31662e5
Plan-SHA256: 0fbe8b996656fb908c513b31e30706f7521cf76eeac60778a1c28f46bfc19b46
Bundle-SHA256: 29ce1ef1917864f79938459725201e6e74d67e21b1f817ac53d7b294eca8f1a2
Base-SHA: cabd354d71
2000-01-01 00:00:00 +00:00

4.6 KiB

데이터 모델

목적과 범위

이 문서는 대화 세션에서 사용자 메시지와 에이전트 응답의 작성자 의미를 명시적으로 관리하는 데이터 모델을 정의한다. 메시지의 역할과 본문을 정본 데이터로 삼고, 화면 라벨과 구조적 스타일은 역할에서 파생한다. 외부 API 연동, 인증, 사용자별 기록 관리 및 영속 저장은 범위에 포함하지 않는다.

정본 엔터티

정본 메시지 엔터티는 작성자 역할과 본문을 함께 보유한다. 작성자 역할은 사용자 또는 에이전트 중 하나이며, 역할별 화면 라벨은 각각 사용자와 에이전트로 정해진다. 본문은 사용자 입력의 앞뒤 공백을 제거한 문자열 또는 고정 응답 목록에서 선택된 문자열이다.

message-author-semantics

메시지의 작성자 의미는 화면 표현이 아니라 정본 데이터 모델에서 관리한다. 각 메시지는 작성자 역할과 본문을 필수 값으로 가지며, 역할은 사용자와 에이전트 중 하나로 제한한다.

  • 사용자 메시지는 user 역할과 정규화된 사용자 입력을 가진다.
  • 에이전트 응답은 agent 역할과 선택된 응답 본문을 가진다.
  • 역할별 표시 라벨은 사용자 역할에서 사용자, 에이전트 역할에서 에이전트로 파생한다.
  • 화면의 user-message, response-message, user-role, agent-role 클래스와 좌우 정렬 및 테두리는 역할에서 파생되는 표현이며 역할의 정본이 아니다.
  • 메시지 본문은 역할과 분리된 문자열 값이며, 사용자 입력은 앞뒤 공백을 제거한 뒤 보존한다.
  • 메시지 목록은 유효한 제출마다 사용자 메시지를 먼저, 에이전트 응답을 다음에 보유한다.
  • 빈 문자열 또는 공백만 포함한 입력에는 메시지 엔터티와 응답을 생성하지 않는다.

역할과 본문은 하나의 불변 메시지 값으로 취급한다. 메시지가 생성된 뒤 역할을 화면 스타일에 맞추어 변경하거나 본문과 분리하여 관리하지 않는다. 에이전트 응답은 외부 시스템 결과가 아니라 고정된 응답 집합에서 선택된 세션 값이며, 작성자 역할은 선택 결과와 무관하게 항상 에이전트로 유지한다.

이 모델은 현재 세션 메모리에서만 사용된다. 저장 위치, 직렬화 형식, 식별자 생성 규칙 및 데이터베이스 스키마는 정의하지 않는다. 따라서 기존 저장 데이터에 대한 마이그레이션이나 저장 실패에 대한 롤백은 없다. 향후 영속화를 도입할 경우 역할 값과 본문을 함께 원자적으로 저장하고 사용자 메시지와 에이전트 응답의 순서를 보존해야 한다.

검증은 다음 조건을 확인한다.

  • 유효한 입력의 앞뒤 공백이 제거되고 사용자 역할로 기록되는지 확인한다.
  • 같은 제출에서 선택된 응답이 에이전트 역할로 기록되는지 확인한다.
  • 여러 제출의 메시지가 사용자와 에이전트 순서로 반복되는지 확인한다.
  • 역할 라벨과 구조적 스타일이 해당 역할에서 일관되게 파생되는지 확인한다.
  • 빈 입력과 공백 입력에서 응답 선택, 메시지 목록 변경 및 화면 항목 추가가 발생하지 않는지 확인한다.
  • 역할을 CSS 클래스나 표시 위치에서 추론하지 않고 정본 메시지 값에서 직접 검증하는지 확인한다.

관계와 불변조건

각 유효한 사용자 입력은 사용자 역할의 메시지 하나와 그에 대응하는 에이전트 역할의 메시지 하나를 순서대로 만든다. 역할은 CSS 클래스나 화면 위치에서 추론하지 않으며 메시지 데이터에 직접 보존한다. 빈 입력과 공백 입력은 메시지와 응답을 만들지 않는다.

저장과 마이그레이션

메시지는 애플리케이션 세션 메모리에만 보관하며 직렬화 형식이나 영속 저장소는 정의하지 않는다. 따라서 기존 데이터 마이그레이션과 롤백 절차는 필요하지 않다. 이후 저장 기능이 추가되더라도 역할과 본문을 함께 저장하고 기존 순서를 보존해야 한다.

검증

정상 입력에서는 역할, 본문, 생성 순서가 일치하는지 검증한다. 경계 입력에서는 빈 문자열과 공백 문자열이 상태를 변경하지 않는지 확인한다. 렌더링 검증에서는 역할에서 파생된 라벨과 구조적 스타일이 일치하는지 확인하며, 영속 저장 후 재조회와 마이그레이션 검증은 해당 없음으로 판정한다.