콘텐츠로 이동

로드맵

이 문서는 지금 무엇을 하고 있고 다음에 무엇이 오는가를 적는다. 날짜는 적지 않는다 — 유지보수자가 한 명이므로(../../MAINTAINERS.md) 날짜를 적으면 지키지 못할 약속이 되고, 지키지 못한 날짜가 남은 로드맵은 아무도 읽지 않게 된다.

여기 있다는 것은 착수 순서가 정해졌다는 뜻이지 완료 일정이 있다는 뜻이 아니다. 방향을 바꾸고 싶으면 이슈를 연다 — 이 문서는 결정을 기록하는 자리이지 결정하는 자리가 아니다.


1. 지금 — 0.2.x

0.2.2 가 Maven Central 에 있고, 25개 모듈이 같은 버전으로 함께 나간다. 호환성 약속의 전문은 api-stability.md 에 있다.

현재 진행 중인 유일한 작업 스트림은 오픈소스 준비다 — 기능이 아니라 저장소 체계와 문서다. 계획은 ../plan/open-source-readiness.md 에 있고, 그 문서는 작업이 끝나면 삭제된다(진행 추적 문서의 수명 규칙 — ../README.md).

단계 무엇 상태
Phase 0 진입 장벽 제거 — 이슈/PR 템플릿, SECURITY.md, CODE_OF_CONDUCT.md, 문서 카탈로그 ✅ 완료
Phase 1 저장소 체계 — DEVELOP.md 폐기, API 안정성 정책, 릴리스 자동화, dependabot, MAINTAINERS.md, 이 문서 진행 중
Phase 2 번역 전 정본 정비 — 용어표, 프론트매터, 링크 검사 CI 대기
Phase 3 문서 사이트 — MkDocs Material + GitHub Pages + 한국어 검색 대기
Phase 4 영어 번역 약 14,900줄 (Tier 1 + features/) 대기
Phase 5 번역 신선도 검사 — 정본이 바뀌었는데 번역이 안 따라온 것을 CI 가 경고 대기

문서를 기능보다 먼저 놓은 이유는 단순하다. 34,000줄이 넘는 문서가 전부 한국어이고, 그것이 한국어를 읽지 못하는 사람에게는 이 프로젝트에 기여할 방법이 없다는 뜻이기 때문이다. 그 상태에서 기능을 더하면 쓸 수 없는 기능이 는다.


2. 다음 — 무엇이 큐에 있는가

등록부 기준으로 지금 착수 가능한 코드 항목은 없다.

이것은 할 일이 없다는 뜻이 아니라 남은 항목이 전부 외부 조건에 막혀 있다는 뜻이다. Spring Boot starter 작업 스트림은 34건 중 25건이 닫히고 5건이 해소되어 4건이 남았는데 (../backlog/spring-boot-starter-open-items.md), 넷 다 이 저장소가 오늘 시작할 수 있는 종류가 아니다.

항목 무엇 무엇에 막혀 있나
B-7 예약 작업이 재시작을 넘어 살아남지 못한다 — 트리 안의 유일한 ScheduledTaskRepository 구현이 인메모리다 트리거 대기. 영속 구현이 생기는 시점에 열린다. 배달 경로(SchedulingSpec → 엔진)는 B-34 로 이미 뚫려 있다
B-15 테넌트 축 상한 정책이 실측되지 않았다 트리거 대기. 거부가 옳은지 강제 축출이 옳은지는 실측이 정할 문제이고, 실측할 부하가 아직 없다
B-23 외부 앱의 0.1.180.2.0 이관 결정 대기 — 결정권이 여기 없다. 그 앱의 일정이다. 이관되면 §4.11 의 SPI 가 첫 외부 검증을 받는다
B-25 예산·능력 축의 4단 병합 의식적으로 접음. 설계가 SBS-04b 에서 스스로 뒤로 민 범위다

B-23 은 로드맵 관점에서 특별하다 — 1.0 조건 중 "외부 백엔드 구현" 과 같은 것을 묻고 있기 때문이다 (§3). 이 저장소 안에서 자기가 만든 SPI 를 자기가 구현하는 것으로는 그 SPI 가 정말 구현 가능한지 알 수 없다.


3. 1.0 까지

진입 조건 여섯 개는 api-stability.md §6 에 있다. 여기서는 각 조건이 지금 무엇에 막혀 있는지를 적는다 — 목록을 두 곳에 두면 한쪽이 먼저 낡는다.

조건 지금 상태
핵심 SPI 가 한 릴리스 주기 동안 무변경 아직 한 주기도 지나지 않았다. 0.2.x 가 그 주기의 첫 번째다
aimon-core 밖에서 온 백엔드 구현이 하나 이상 0건. 25개 모듈 전부 이 저장소 안에 있다. B-23 이 여기에 걸려 있다
스코프 모델이 개명 없이 한 주기를 넘김 최근 두 번의 파괴적 변경이 둘 다 여기서 나왔다(AgentExecutionContextAgentRuntime, Conversation/AgentSessionSessionRecord/LiveSession). 세 번째가 없어야 한다
starter 미결 항목 정리 4건 남음 — 전부 외부 조건 대기(§2)
공개 API javadoc 완비 측정 장치가 없다. 빌드는 -Xdoclint:none 으로 javadoc 린트를 끄고 있다(buildSrc/src/main/kotlin/aimon.java-conventions.gradle.ktstasks.withType<Javadoc>() 블록). 완비 여부를 말하려면 그 스위치부터 켜야 한다
번역 신선도 CI 동작 Phase 5. 정본이 한국어인 프로젝트에서 번역이 조용히 낡으면 문서가 틀린 API 문서가 된다

1.0 은 날짜가 아니라 상태다. 위 여섯이 전부 참이 되기 전에는 올리지 않고, 참이 되면 그 이상 기다리지 않는다.

0.x 동안 파괴적 변경이 어떻게 다뤄지는지는 api-stability.md 를 본다. 요약하면 patch 는 호환되고, minor 는 깨질 수 있으며, 깨질 때는 옛 이름 ↔ 새 이름 매핑표가 ../../CHANGELOG.md 에 함께 들어간다. 현재 저장소에 @Deprecated한 개도 없다0.2.x 로 오면서 열한 개를 전부 제거했고, 그것이 1.0 이전이라서 가능했던 일이다.


4. 계획에 없는 것

로드맵에서 가장 자주 빠지는 절이지만, 채택을 검토하는 쪽에는 §1~3 만큼 중요하다. 아래는 "언젠가"가 아니라 범위 밖이라는 뜻이다.

  • 모델을 호스팅하거나 서빙하지 않는다. LlmClient 는 어댑터이고 앞으로도 어댑터다. 추론 서버, 모델 다운로드, 파인튜닝은 이 프로젝트가 하는 일이 아니다
  • 모델의 출력 품질을 책임지지 않는다. 환각·거부·잘못된 추론은 프레임워크가 고칠 수 있는 층에 있지 않다. 프레임워크가 책임지는 것은 권한 경계다 — 모델이 무엇을 하도록 설득되든, 허용되지 않은 도구 호출은 실행되지 않아야 한다(../../SECURITY.md 의 범위 절)
  • 웹 UI 를 만들지 않는다. 사용자 표면은 CLI(aimon-cli)와 임베딩 API 두 가지이고, 화면은 이 프레임워크를 쓰는 애플리케이션의 일이다. 그래서 세션 이벤트가 스트림으로 나간다
  • 다른 언어로 포팅하지 않는다. Java 17 프레임워크다. 다른 런타임에서 쓰려면 프로세스 경계로 붙인다
  • 컨테이너 오케스트레이터를 대체하지 않는다. at.aimon.sandbox:* (별도 저장소) 는 도구 실행을 격리하는 것이지 워크로드를 스케줄링하는 것이 아니다

이 목록은 고정되어 있지 않다. 바꿔야 할 이유가 생기면 이슈로 논의하고, 바뀌면 이 문서를 고친다 — 조용히 예외를 만들지 않는다.


5. 이 문서를 갱신하는 규칙

  • 완료된 항목은 지운다. 로드맵은 이력이 아니다. 무엇이 언제 끝났는지는 ../../CHANGELOG.md 가 갖는다
  • 막혀 있는 항목은 "무엇에" 막혔는지까지 적는다. "나중에" 라고만 적힌 줄은 다음에 읽는 사람에게 아무것도 주지 않는다
  • 날짜를 넣지 않는다. 넣고 싶어지면 그것은 로드맵 항목이 아니라 이슈다
  • 여기와 다른 문서에 같은 목록을 두지 않는다. 1.0 조건은 api-stability.md 가 갖고 여기는 상태만 적는다(§3). 두 곳에 두면 한쪽이 먼저 낡는다

관련 문서