Docs · Cocode ADE · 분석 · 설계 문서

풀스택 코딩 에디터 · E11

Flow Permutation — 흐름 순열

에디터 흐름의 경로 · 오류 · 경계 사례

목차

rev.1 · 2026-09-16 재판정 — ux-spec rev.1(UX-E-18~20 · 05/11/12/14/21~27/32/33) · architecture rev.3(ED-16 · ED-17 · ED-06a) · PRD v1.1(FR-206/302/406/501/505/606) · bdd v1.1(54 → 79 시나리오, 재판정 후 R-0 · R-2 · R-5 · R-9 추가로 83) 대조. Critical E-C1~3 닫힘 · Must-Have 12/12 대응 · 재판정 표는 §rev.1 재판정. rev.0 본문은 그대로 두고 Covered? 열과 누락 분류만 갱신했다.

Summary

  • Evaluation Date: 2026-09-16
  • Target(rev.0): architecture rev.1 · ux-spec rev.0 · PRD §4 흐름 1~6 · bdd 54 시나리오 / Target(rev.1 재판정): architecture rev.3 · ux-spec rev.1 · PRD v1.1 · bdd v1.1 79 시나리오 — 전부 디스크 재독
  • Total Flows: 6 (PRD §4) + 교차 흐름 1(닫기 · 종료 순서)
  • Total Permutations: 127 (Happy: 24 · Error: 25 · Edge: 59 · Permission: 4 · Empty: 7 · Concurrency: 8 · Network: 0 — 이 모듈은 네트워크 호출이 없다; 외부 도구 가용성은 Error/Edge 로 분류)
  • Covered by existing BDD(rev.1): 81 커버 · 8 부분 · 35 미커버 · 3 외부 의존/첫 릴리스 밖 (rev.0: 51 · 4 · 69 · 3)
  • Missing Coverage(rev.1): Critical 0 열림(3 닫힘 + 외부 의존 2 유지) · Important 열림 10 / 닫힘 19 · Nice-to-have 열림 27 / 닫힘 4 · 신설 E-N32 (rev.0: Critical 3 · Important 29 · Nice-to-have 31)
  • 표기: FP-E{표면}{순번} — 상위 docs/flow-permutation-cocode.md 의 FP-1xx~5xx · N-n 과 충돌하지 않도록 E 접두어와 E-C/E-I/E-Nn 을 쓴다. 수치 목표는 쓰지 않는다 — 값이 미정인 곳은 PRD §10 U-n 을 가리킨다. 이 문서의 열거량은 §Permutation Matrix 를 스크립트로 직접 계수한 값이다.

Screen Inventory (ux-spec §3 + 탐색 트리)

Screen States Transitions(주요)
S-E01 에디터 탭 스트립 + 본문 (+ 탐색 트리 · 흐름 1) 빈 상태 · 로딩(파일 읽는 중) · 열림(clean) · dirty · 외부 변경 대기(modified/deleted/moved) · 작업 대상 · 열기 실패 파일 선택 → 열림 · 편집 → dirty · 저장 → clean · 감시 이벤트 → 대기/교체 · 닫기 → S-E02
S-E02 dirty 처분 다이얼로그 단일 · 일괄(워크스페이스 닫기 · 앱 종료) · 제시 중 · 처분 완료 저장/폐기/취소 · 모두 저장/모두 폐기/취소
S-E03 검색 패널 입력 · 검색 중 · 결과 · 결과 0 · 정규식 오류 · 치환 중 Enter → 검색 중 → 결과/0 · 중지 · 행 선택 → S-E01 · 모두 바꾸기
S-E04 문제 패널 서버 실행 중 · 서버 부재 · 서버 종료 · 진단 0 · 진단 목록 서버 상태 전이 · 진단 갱신 · 항목 선택 → S-E01 · 다시 시작
S-E05 세션 탭 바 + 터미널 세션 0 · running · exited(code) · PTY 실패 · 전제 미충족 Alert [+] → running · 종료/중지 → exited · × → 제거 · 실패 → Alert
S-E06 실행 구성 목록/실행 프로젝트 0 · 목록 · 전제 검사 중 · 전제 미충족 · 실행 중 실행 → 검사 → S-E05 세션 · 3.x 대안 · JSON 편집 → 목록 갱신
S-E07 작업 대상 배너 없음 · 표시 · 닫힘(세션 내 재표시 없음) 작업 스냅샷 존재 → 표시 · 닫기 · 작업 종결 → ?

User Flow Overview

Flow 1: 워크스페이스가 열린 뒤 앱 셸 (AC-01)

  • Entry: 워크스페이스 열림(경로는 상위 소관 — D-018 미결)
  • Steps: 앱 셸 → 탐색 트리(지연 로드 · 무시 규칙) → 파일 선택 → 탭 열림
  • Exit Points: 정상(편집 시작) · 디렉터리/파일 읽기 실패(노드 사유) · 바이너리(U-12)

Flow 2: 편집 · 저장 · 외부 변경 (AC-03 · AC-04)

  • Entry: 열린 탭에서 타이핑 · Steps: dirty → 전환 → 저장 → 감시 이벤트 → 배너/교체 → 닫기 처분 · Exit: clean 저장 · 저장 실패(dirty 유지) · 처분 취소

Flow 3: 전역 검색 · 치환 (AC-06)

  • Entry: [검색] 탭 · Steps: 입력 → 검색 중 → 결과 → 선택/치환 → 저장 · Exit: 결과 0 · 정규식 오류 · 중지 · 치환 저장 실패

Flow 4: 실행 구성 (AC-08)

  • Entry: Run 메뉴 · 팔레트 · 세션 탭 바 [+ ▾] · Steps: 전제 검사 → 기동 → origin 세션 → 중지 · Exit: 전제 미충족 Alert(3.x 대안) · 기동 실패 Alert · exited(code)

Flow 5: 터미널 세션 (AC-09)

  • Entry: [+] · Steps: 티켓 → PTY 로그인 셸 → 입력/출력 → 다중 세션 → 종료 · Exit: PTY 실패 Alert · exited 유지 · 닫기

Flow 6: 실행 중 작업 대상 파일의 사람 편집 (AC-10 · AC-22)

  • Entry: 작업 스냅샷이 있는 파일 열기 · Steps: 배너 → 편집 · 저장(비차단 · 스냅샷 없음) → 작업 재편집(체인 불연속) → 롤백 충돌 · Exit: D-013 확정 전에는 상위 현행 규칙(사람 편집 소멸 가능)

Flow 7(교차): 워크스페이스 닫기 · 앱 종료

  • Entry: File › 워크스페이스 닫기 · 창 닫기 · Steps: dirty 일괄 처분 → 검색 취소 → 언어 서버 종료 → 세션 처분 → 종료 · Exit: 취소 · 일부 저장 실패(규칙 없음 — E-C2) · running 프로세스 처분(규칙 없음 — E-C1)

Permutation Matrix

Covered? 열은 docs/bdd-fullstack-code-editor.md 의 시나리오 제목을 인용한다. 부분 은 전제나 결과의 일부만 확인되는 경우다. 외부 는 상위 파이프라인 결정(D-013 · D-018)에 달린 것, May 는 첫 릴리스 밖.

S-E01 에디터 탭 스트립 · 본문 · 탐색 트리

ID Category Scenario Precondition Action Expected Result Covered?
FP-E101 Happy Path 파일 선택 → 버퍼 열림 · 탭 생성 트리 표시, 파일 clean 파일 클릭 탭 생성 · 내용 표시 · DocumentBufferRegistry 등록(ED-03) 부분 — [AC-01] 앱 셸의 세 슬롯에 실제 뷰가 그려진다(뷰 존재만) → E-N1
FP-E102 Empty State 열린 파일 0 — 앱 셸 그림 EmptyState.compact + [파일 열기…](ux-spec §8 ⓔ) 커버 — [AC-01] 열린 파일이 없으면 editorStack 은 빈 상태 화면을 그린다
FP-E103 Happy Path 디렉터리 지연 로드 접힌 디렉터리 펼침 직접 자식만 읽힘 커버 — [AC-01] 디렉터리를 펼치면 그 시점에 자식만 읽는다
FP-E104 Edge Case git 저장소의 무시 항목 숨김 .gitignore build/ 루트 펼침 build 미표시(ED-05) 커버 — [AC-01] git 이 무시하는 항목은 트리에 표시되지 않는다
FP-E105 Edge Case 비-git + .gitignore 없음 — 펼침 제외 0 커버 — [AC-01] git 저장소가 아니고 .gitignore 파일도 없으면 제외 항목이 없다
FP-E106 Edge Case 비-git + 루트 .gitignore 파일 규칙 펼침 규칙 적용(Dart matcher, U-14) 커버 — [AC-01] git 저장소가 아니어도 루트 .gitignore 파일 규칙은 적용된다
FP-E107 Error State git 저장소인데 git 실행 파일이 없음 .git 존재, git 부재 펼침 규칙 없음 — 판정 정본(git)이 없을 때 파일 규칙으로 후퇴하는지 커버 — [AC-01] git 저장소인데 git 실행 파일이 없으면 파일 규칙으로 후퇴하고 판정 불가가 표시된다(ED-06a · FR-302, rev.1 E-I1 닫힘)
FP-E108 Permission 디렉터리 읽기 권한 없음 secret/ 펼침 노드 사유 + 트리 계속 커버 — [AC-01] 읽기 권한이 없는 디렉터리를 펼치면 사유가 표시되고 트리는 계속 동작한다
FP-E109 Permission 파일 읽기 권한 없음 파일 0400 아닌 0000 파일 클릭 규칙 없음 — 탭이 열리는지, 사유 표시 위치 커버 — [AC-01] 읽기 권한이 없는 파일을 열면 탭은 열리되 본문에 사유가 표시되고 편집할 수 없다(UX-E-04, rev.1 E-I2 닫힘)
FP-E110 Error State 바이너리 · 비 UTF-8 파일 열기 — 파일 클릭 U-12(Design) 미정 미커버 → E-I3 (U-12)
FP-E111 Edge Case 파일 이름 공백 · 유니코드 NFC/NFD · 대소문자 폴딩 볼륨 — path_key 정규화(상위 DD-08a) A.dart 와 a.dart 가 같은 path_key 인 볼륨 둘 다 열기 버퍼 1개(불변식 1) — 어느 이름으로 표시하는지 규칙 없음 부분 — 규칙 확정(UX-E-08 표시 이름 = 처음 연 이름) · 시나리오는 [불변식] 같은 path_key 의 버퍼는 최대 하나다 뿐 → E-I4 시나리오 열림(권고 R-6)
FP-E112 Happy Path 타이핑 → dirty 점 표시 clean 편집 탭 ● · dirty true 부분 — dirty 는 전제로만 등장 → E-N2
FP-E113 Happy Path 탭 전환 시 보존 dirty 전환 후 복귀 content 해시 동일 · undo 동작 커버 — [AC-03] 탭을 전환해도 dirty 버퍼의 내용과 실행 취소 이력이 보존된다
FP-E114 Edge Case 활성 탭 재클릭은 디스크를 다시 읽지 않는다(ux-spec §4.1) dirty 활성 탭 재클릭 내용 유지 미커버 → E-I5 — 규칙은 ux-spec §4.1 에 있음 · 시나리오 없음(권고 R-7)
FP-E115 Edge Case 활성 탭을 닫은 뒤 활성 탭 결정 탭 3개 가운데(활성) 닫기 규칙 없음(왼쪽? 직전 활성?) 커버 — [AC-03] 활성 탭을 닫으면 직전에 활성이었던 탭이 활성이 된다(UX-E-05, rev.1 E-I6 닫힘; "직전 활성 없음 → 왼쪽 이웃" 분기는 미커버 — 권고 R-10)
FP-E116 Happy Path 저장 성공 dirty 저장 디스크 = 버퍼 · disk_hash 갱신 커버 — [AC-04] 저장하면 디스크에 기록되고 disk_hash 가 갱신된다
FP-E117 Permission 저장 실패(읽기 전용) 쓰기 불가 저장 사유 표시 · dirty 유지 커버 — [AC-04][AC-23] 저장 실패는 사유와 함께 표시되고 버퍼는 dirty 로 남는다
FP-E118 Concurrency 저장 진행 중 재저장 요청 저장 중 저장 연타 규칙 없음(직렬화 · 무시) 미커버 → E-N3
FP-E119 Happy Path 외부 변경 + clean → 다시 읽기 clean 감시 이벤트 content 교체 커버 — [AC-04] 외부 변경이 clean 버퍼에 감지되면 디스크 내용으로 다시 읽는다
FP-E120 Error State 외부 변경 + dirty → 배너 선택 dirty 감시 이벤트 [다시 읽기] [내 편집 유지](UX-E-04) 커버 — [AC-04] 외부 변경이 dirty 버퍼에 감지되면 덮어쓰지 않고 선택을 제시한다
FP-E121 Error State 열린 파일 삭제 clean/dirty 삭제 감지 보존 + external_change_pending, 다시 읽기 없음 커버 — [AC-04] 열린 파일이 삭제되면 버퍼는 보존되고 다시 읽기 선택은 없다
FP-E122 Error State 열린 파일 이름변경 dirty 이름변경 감지 dirty 유지 + 표시 커버 — [AC-04] 열린 파일의 이름이 바뀌면 버퍼는 dirty 로 남는다
FP-E123 Edge Case 배너 [다시 읽기] 선택 후 undo 이력 외부 변경 대기 다시 읽기 이력을 비우는지 잇는지 규칙 없음 미커버 → E-N4
FP-E124 Concurrency 저장 진행 중 외부 변경 도착 — 자체 저장 억제는 해시 대조(ED-08) 저장 중 타인의 변경 이벤트 자체 저장 이벤트는 무시 · 타인 변경은 배너 미커버 → E-I7 — 규칙 ED-14(해시 대조) 확정 · 시나리오 없음(권고 R-8)
FP-E125 Edge Case 작업 대상 파일 열기 실행 중 작업 스냅샷 존재 열기 배너(S-E07) 커버 — [AC-10] 작업 대상 파일을 열면 표시되고 저장은 차단되지 않는다
FP-E126 Edge Case 같은 버퍼를 두 탭에서(분할) — 분할 첫 릴리스 밖(AC-19 May) May
FP-E127 Edge Case 탭 다수 오버플로 탭 많음 열기 계속 FadeScroll/OverflowMarquee(ux-spec §4.1) — 상한 없음 미커버 → E-N5
FP-E128 Edge Case 삭제 대기 중 파일이 다시 생성됨 삭제 대기 파일 재등장 감지 규칙 없음(대기 해제? 외부 변경으로 취급?) 미커버 → E-N6
FP-E129 Edge Case 파일 열기 로딩 상태(큰 파일) — 열기 로딩 표시 여부 규칙 없음(값 없음 — NFR-01 은 열린 뒤 조작만) 미커버 → E-N7 — 규칙 확정(UX-E-04 읽는 중 = Loading) · 시나리오 없음

S-E02 dirty 처분 다이얼로그

ID Category Scenario Precondition Action Expected Result Covered?
FP-E201 Edge Case 단일: 세 선택 제시 · 선택 전 버퍼 유지 dirty 탭 닫기 저장 · 폐기 · 취소 커버 — [AC-03] dirty 탭을 닫으면 세 선택이 제시되고 선택 전에는 버퍼가 남는다
FP-E202 Happy Path 단일 → [저장] → 성공 제시 중 저장 탭 닫힘 · registry.release 커버 — Outline [AC-03] dirty 탭 닫기의 세 선택은 각각 정해진 결과를 낳는다(저장 행, rev.1)
FP-E203 Error State 단일 → [저장] → 실패 쓰기 불가 저장 탭 · 버퍼 유지 + 사유(AC-23) 미커버 → E-I8 열림 — Outline 에 저장 실패 행이 없다(필수 R-0)
FP-E204 Edge Case 단일 → [폐기] 제시 중 폐기 버퍼 해제(불변식 2 의 처분 완료) 커버 — 위 Outline 폐기 행(rev.1)
FP-E205 Edge Case 단일 → [취소] / Esc 제시 중 취소 탭 · 버퍼 · dirty 유지 커버 — 위 Outline 취소 행(rev.1, E-N8 닫힘)
FP-E206 Edge Case K4 — [폐기] 는 Enter 기본 활성화 아님 제시 중 Enter 폐기되지 않음 커버 — [AC-03] dirty 탭을 닫으면…(And 절)
FP-E207 Edge Case 일괄: dirty 목록 제시 · 선택 전 유지 dirty 2+ 앱 종료 목록 + 세 선택 커버 — [AC-03] 앱 종료 시 dirty 버퍼 전체 목록을 한 번에 처분한다
FP-E208 Happy Path 일괄 → [모두 저장] 전부 성공 제시 중 모두 저장 종료 진행 미커버 → E-I9 — 모두 저장 전부 성공 → 진행 시나리오 없음(권고 R-2)
FP-E209 Error State 일괄 → [모두 저장] 일부 실패 한 파일 쓰기 불가 모두 저장 규칙 없음 — 종료를 진행하면 실패한 dirty 버퍼가 처분 없이 사라진다(불변식 2 위반) 커버 — [AC-03][AC-04] 일괄 저장 중 한 파일이 실패하면 닫기는 진행되지 않고 실패 목록이 남는다(UX-E-19 · ED-16 · FR-206, rev.1 E-C2 닫힘)
FP-E210 Edge Case 일괄 → [모두 폐기] 제시 중 모두 폐기 종료 진행 · 버퍼 전부 해제 부분 — [AC-03][AC-09] 워크스페이스 닫기 시 실행 중 세션이 나열되고 계속을 고른 경우에만 전부 종료된다("모두 폐기하고 계속" 경로, dirty 0 전제 — dirty 버퍼 폐기 자체는 미확인) → E-I9
FP-E211 Edge Case 일괄 → [취소] 제시 중 취소 종료 취소 · 상태 유지 커버 — 위 E-C1 시나리오의 "취소" 단계(세션 유지, rev.1 E-N9 닫힘)
FP-E212 Empty State dirty 0 인 상태의 워크스페이스 닫기 · 앱 종료 clean 닫기 다이얼로그 없이 진행 미커버 → E-N10 — 규칙 확정(ux-spec §4.2 "둘 다 없으면 다이얼로그 없이 진행") · 시나리오 없음
FP-E213 Edge Case 워크스페이스 닫기 vs 앱 종료 — 같은 다이얼로그, 다른 후속(Flow 7) — 각각 후속 순서 규칙 없음 부분 — 규칙 확정(UX-E-26 · ED-16 6단계) · 순서 자체의 시나리오 없음 → E-I29(권고 R-9)

S-E03 검색 패널

ID Category Scenario Precondition Action Expected Result Covered?
FP-E301 Happy Path 문자열 검색 일치 2파일 Enter 파일 · 행 결과 커버 — [AC-06] 문자열 검색 결과가 파일 · 행 단위로 표시된다
FP-E302 Happy Path 정규식 검색 [.*] on Enter 일치 행 커버 — [AC-06] 정규식 검색이 동작한다
FP-E303 Error State 정규식 문법 오류 endpoint( Enter 미실행 + 인라인 오류 커버 — [AC-06] 정규식 문법 오류는 검색을 실행하지 않고 오류를 표시한다
FP-E304 Empty State 빈 검색어(또는 공백만) Enter 입력 비움 Enter 규칙 없음(미실행? 전체 목록?) 커버 — [AC-06] 빈 검색어는 검색을 실행하지 않는다(UX-E-11, rev.1 E-I10 닫힘)
FP-E305 Empty State 결과 0 불일치 검색어 Enter EmptyState.compact(ux-spec §8 ⓖ) 커버 — [AC-06] 일치가 없으면 빈 상태와 검색어 지우기 동작이 표시된다(rev.1 E-I11 닫힘)
FP-E306 Edge Case 대소문자 토글 on/off(UX-E-06) [Aa] Enter 민감/무시 결과 차이 미커버 → E-N11
FP-E307 Edge Case 한글 조합 중 Enter — I2(조합 중 트리거 금지) 조합 중 Enter 조합 확정만, 검색 미실행 미커버(상위 cocode/AC-16 · UX-D-18 I2 소관) → E-N12
FP-E308 Edge Case 매우 긴 검색어 · 대량 결과 — Enter 상한 없음(원칙) — CocodeVirtualList 로 표시 미커버 → E-N13
FP-E309 Happy Path 결과 선택 → 에디터 이동 결과 표시 행 선택 탭 열림 · 커서 이동 · 포커스는 패널(K2) 커버 — [AC-06] 결과를 선택하면 그 위치가 에디터에 열린다(포커스 잔류는 미확인)
FP-E310 Error State 결과 선택 시 파일이 그 사이 삭제됨 결과 stale 행 선택 UX-E-12 «삭제됨» + Alert.destructive, 탭을 열지 않는다 커버(#338) — Feature 3 «그 사이 사라진 파일의 결과 행은 …» + 위젯 테스트 3건
FP-E311 Edge Case git 무시 파일 제외 .gitignore Enter build/ 미포함 커버 — [AC-06] git 이 무시하는 파일은 검색되지 않는다
FP-E312 Concurrency 검색 중 [중지] 스트리밍 중 중지 취소 토큰(ED §4.4) · 부분 결과 유지 여부 규칙 없음 커버 — [AC-06] 검색을 중지하면 그때까지의 부분 결과가 유지된다(rev.1 E-I13 닫힘)
FP-E313 Concurrency 검색 중 파일 변경 → stale 위치 스트리밍 중 파일 편집 결과 행의 위치 어긋남 처리 규칙 없음 미커버 → E-N14
FP-E314 Happy Path 치환 → 사람 편집 · 스냅샷 없음 결과 표시 모두 바꾸기 + 저장 디스크 반영 · EditSnapshot 수 불변 커버 — [AC-06][C-03] 치환은 사람 편집으로 적용되고 EditSnapshot 을 만들지 않는다
FP-E315 Edge Case 치환 대상이 dirty 버퍼(디스크 ≠ 버퍼) dirty 모두 바꾸기 버퍼 내용 기준 적용(UX-E-14) — 결과 목록은 어느 파일을 열지만 정한다 커버(#339) — Feature 3 «dirty 버퍼의 치환은 버퍼 내용 기준이다» + 단위 테스트 4건
FP-E316 Error State 치환 저장 중 일부 파일 실패 한 파일 쓰기 불가 모두 바꾸기 부분 적용 상태 표시 규칙 없음 커버 — [AC-06][AC-23] 치환 저장이 일부 파일에서 실패하면 실패 목록이 표시되고 성공분은 유지된다(UX-E-14, rev.1 E-I15 닫힘)
FP-E317 Edge Case 정규식 치환의 캡처 그룹($1) 지원 여부 [.*] on 모두 바꾸기 규칙 없음 미커버 → E-N15
FP-E318 Edge Case 바이너리 파일 검색 포함 여부 바이너리 존재 Enter U-12 미커버 → E-I3 (U-12)

S-E04 문제 패널

ID Category Scenario Precondition Action Expected Result Covered?
FP-E401 Happy Path 시맨틱 토큰 색상 서버 실행 중 편집 역할 색상 커버 — [AC-07] Dart 파일을 편집하면 언어 서버의 시맨틱 토큰이 색상에 반영된다
FP-E402 Happy Path 진단 목록 + 거터 서버 실행 중 오류 입력 목록 · 거터 커버 — [AC-07] 진단이 문제 목록과 거터에 표시된다
FP-E403 Edge Case 진단은 ④ 입력 아님 — ④ 실행 미사용 커버 — [AC-07][상위 C5] 진단은 자가 검증 ④ 의 입력이 아니다
FP-E404 Error State 서버 부재 dart 없음 열기 · 편집 상태 표시 · 편집 계속 커버 — [AC-07][AC-23] 언어 서버 실행 파일이 없으면 상태가 표시되고 편집은 계속된다
FP-E405 Error State 서버 비정상 종료 실행 중 종료 코드 표시 · 편집 계속 커버 — [AC-07][AC-23] 언어 서버가 종료되면 종료 코드가 표시되고 편집은 계속된다
FP-E406 Happy Path [다시 시작] → 재기동 성공 종료됨 다시 시작 실행 중 · 진단 재수신 커버 — [AC-07] 언어 서버 다시 시작이 성공하면 상태가 실행 중으로 바뀌고 진단은 새 서버의 것으로 교체된다(FR-406 v1.1, rev.1 E-I16 닫힘)
FP-E407 Error State [다시 시작] → 실패(부재 · 즉시 종료) 종료됨 다시 시작 부재/종료 상태 + 사유 커버 — [AC-07][AC-23] 언어 서버 다시 시작이 실패하면 사유가 같은 자리에 표시되고 편집은 계속된다(rev.1 E-I16 닫힘)
FP-E408 Empty State 진단 0 실행 중 — EmptyState.compact(ux-spec §8 ⓗ) · 배지 없음 커버 — [AC-07] 진단이 없으면 문제 패널은 빈 상태를 그리고 동작은 제시하지 않는다(UX-E-17, rev.1 E-I17 닫힘)
FP-E409 Happy Path 진단 항목 선택 → 에디터 이동 목록 선택 파일 · 행 이동 미커버 → E-N16
FP-E410 Edge Case 닫힌 파일 · 열지 않은 파일에 대한 진단(워크스페이스 범위 publishDiagnostics) 서버 실행 중 다른 파일 오류 표시 여부 · 파일 닫을 때 제거 여부 규칙 없음 미커버 → E-I18 — 규칙 확정(UX-E-22 열림 여부 무관 전부 표시 · 서버 빈 목록으로만 제거) · 시나리오 없음(권고 R-5)
FP-E411 Concurrency 서버 재시작 중 도착한 진단 재시작 중 진단 도착 폐기/유지 규칙 없음 커버 — 위 재시작 성공 시나리오 "목록은 새 서버가 보낸 진단으로 교체된다"(UX-E-22, rev.1 E-N17 닫힘)
FP-E412 Edge Case 탭 배지 = 오류 + 경고(정보 제외, UX-E-08) 진단 혼합 — 배지 수 미커버 → E-N18
FP-E413 Happy Path 비-Dart 4종 구문 강조 — 열기 언어별 강조 커버 — [AC-07][C-02] Dart 이외 파일에는 파일 이름 또는 확장자에 대응하는 구문 강조가 적용된다(Outline 4행)
FP-E414 Edge Case 비-Dart 서버 미요구 SQL 서버 없음 열기 상태 줄 무표시 커버 — [AC-07][C-02] Dart 이외 파일에는 언어 서버 연결이 요구되지 않는다
FP-E415 Edge Case Dockerfile 파일 이름 매핑 — 열기 Dockerfile 강조 커버 — 위 Outline backend/Dockerfile 행
FP-E416 Edge Case 대량 진단(가상 목록) 파일 다수 오류 — CocodeVirtualList 스크롤 미커버 → E-N19

S-E05 세션 탭 바 + 터미널

ID Category Scenario Precondition Action Expected Result Covered?
FP-E501 Happy Path 새 터미널 = 런처 티켓 + PTY — [+] pty · 화이트리스트 환경 커버 — [AC-09][C-05] 새 터미널은 단일 런처를 거쳐 PTY 로 기동된다
FP-E502 Edge Case 로그인 셸 PATH 복원 프로필 존재 which flutter 경로 표시 커버 — [AC-09] 명령 셸은 로그인 셸로 기동되어 프로필의 PATH 를 갖는다
FP-E503 Happy Path resize 전달 running 크기 변경 rows · cols 반영 커버 — [AC-09] 뷰 크기 변경이 프로세스에 전달된다
FP-E504 Happy Path 키 입력 전달 프로그램 실행 r stdin 수신 커버 — [AC-09] 키 입력이 실행 중인 프로세스에 그대로 전달된다
FP-E505 Happy Path 세션 둘 이상 · 개별 종료 T1 [+] · T1 종료 T1 exited · T2 running 커버 — [AC-09] 세션을 둘 이상 열고 각각 개별로 종료한다
FP-E506 Edge Case exited 출력 유지 exited 닫지 않음 출력 유지 커버 — [AC-09] 종료된 세션의 출력은 닫기 전까지 남는다
FP-E507 Error State scrollback 상한 초과 상한 L(U-2) 대량 출력 오래된 줄 폐기 커버 — [AC-09] scrollback 이 상한을 넘으면 오래된 줄부터 버려진다
FP-E508 Edge Case IME 분리 판정 running 프로브 상위 cocode/AC-16 기록 커버 — [AC-09][C-04] 한글 IME 판정은 상위 cocode/AC-16 재생 워크플로가 담당한다
FP-E509 Error State PTY 생성 실패 장치 불가 [+] Alert 사유 커버 — [AC-09][AC-23] PTY 생성에 실패하면 세션 자리에 사유가 표시된다
FP-E510 Empty State 세션 0 — 터미널 탭 열기 EmptyState.compact + [새 터미널](ux-spec §8 ⓕ) 커버 — [AC-09] 세션이 없으면 빈 상태와 새 터미널 동작이 표시된다(rev.1 E-I19 닫힘)
FP-E511 Edge Case running 세션 탭의 × running × 규칙 없음 — 확인 없이 kill 이면 파괴적 동작의 무확인 실행(K4 취지) 커버 — [AC-09] 실행 중 세션의 탭 닫기는 비활성이고 명시적 종료를 거쳐야 닫힌다(UX-E-20 · FR-606, rev.1 E-C3 닫힘)
FP-E512 Edge Case exited 세션 [닫기] → 탭 제거 exited 닫기 제거 · 출력 소멸 커버 — 위 E-C3 시나리오 후단 "세션 탭과 출력이 사라진다"(rev.1 E-N20 닫힘)
FP-E513 Concurrency 출력 버스트 중 종료 대량 출력 중 종료 잔여 출력 · 종료 코드 표시 순서 규칙 없음 미커버 → E-N21
FP-E514 Edge Case Windows 셸 선택 Windows [+] U-13 미커버 → E-N32(신설) — 규칙 확정(ED-11 pwsh → powershell → %COMSPEC%, U-13 닫힘) · 시나리오 없음
FP-E515 Edge Case 세션 다수 탭 오버플로 세션 많음 [+] 반복 상한 없음 · 오버플로 표시 미커버 → E-N22
FP-E516 Error State 앱 종료 시 running 세션(사용자 셸 · 실행 구성 프로세스) running 앱 종료 규칙 없음 — 고아 프로세스 방치 또는 무확인 강제 종료 부분 — 규칙 확정(UX-E-18 · ED-16 ①로 라우팅, 강제 종료 경로 없음 · FR-206) · 시나리오는 워크스페이스 닫기 변형뿐 → E-C1 닫힘, 앱 종료 · 창 닫기 변형은 권고 R-1
FP-E517 Edge Case 실행 구성 세션 [다시 실행](UX-E-09) exited 다시 실행 새 세션인지 같은 탭 재사용인지 규칙 없음 커버 — [AC-08] 종료된 실행 구성 세션의 다시 실행은 같은 탭에서 새 세션을 만든다(UX-E-23, rev.1 E-I20 닫힘)
FP-E518 Error State 셸이 즉시 종료(잘못된 $SHELL · 프로필 오류) — [+] exited(code) 로 남는지 Alert 인지 규칙 없음 커버 — [AC-09][AC-23] 셸이 기동 직후 종료되면 세션은 종료 코드와 함께 exited 로 남는다(UX-E-21, rev.1 E-I21 닫힘)
FP-E519 Error State 워크스페이스 닫기 시 running 세션 running 닫기 E-C1 과 같은 규칙 필요 커버 — [AC-03][AC-09] 워크스페이스 닫기 시 실행 중 세션이 나열되고 계속을 고른 경우에만 전부 종료된다(UX-E-18 · ED-16 · FR-206, rev.1 E-C1 닫힘)

S-E06 실행 구성

ID Category Scenario Precondition Action Expected Result Covered?
FP-E601 Edge Case 설치 직후 템플릿 3종 + custom 구성 0 목록 열기 비어 있지 않은 4건 커버 — [AC-08] 설치 직후 기본 템플릿 3종이 비어 있지 않은 채 제공된다
FP-E602 Edge Case 단일 프로젝트 워크스페이스 Flutter 앱 1 목록 열기 flutterRun 1건 커버 — [AC-08] 단일 프로젝트 워크스페이스에서도 flutterRun 템플릿이 제공된다
FP-E603 Empty State 프로젝트 디렉터리 0 pubspec 없음 목록 열기 EmptyState.compact(ux-spec §8 ⓘ) 커버 — [AC-08] 프로젝트 디렉터리가 없으면 빈 상태와 JSON 열기 동작이 표시된다(rev.1 E-I22 닫힘)
FP-E604 Edge Case 같은 종류 디렉터리 여럿(서버 5) 서버 5 목록 열기 디렉터리마다 템플릿(FR-503) 미커버 → E-N23
FP-E605 Happy Path 실행 → origin 세션 전제 충족 실행 humanTerminal 기동 · origin 표시 · 출력 커버 — [AC-08] 실행 구성을 실행하면 단일 런처가 기동하고 origin 세션에 출력이 표시된다
FP-E606 Happy Path [중지] 한 번 running 중지 exited(code) 커버 — [AC-08] 세션의 중지 한 번으로 프로세스가 종료된다
FP-E607 Error State 전제 미충족(실행 파일 부재) serverpod 없음 실행 세션 없음 · 사유 커버 — [AC-08] 실행 전제가 미충족이면 세션을 만들지 않고 사유를 표시한다
FP-E608 Error State 3.x → 대안 안내 3.x 실행 사유 + 3.x 템플릿 안내(UX-E-14) 커버 — [AC-08] serverpod CLI 가 3.x 면 사유와 함께 3.x 대체 템플릿을 안내한다
FP-E609 Error State 기동 실패(권한) 실행 불가 실행 세션에 오류 · exited 커버 — [AC-08][AC-23] 기동 실패는 세션에 오류로 표시된다
FP-E610 Edge Case flutterRun 디바이스 미지정 → 선택 요구(PRD §2.5) <device> 비움 실행 디바이스 선택 UI 흐름 규칙 없음(선택 후 재실행? 취소?) 커버 — [AC-08] flutterRun 이 디바이스 미지정이면 디바이스 목록에서 선택한 뒤 실행된다 + [AC-08] 디바이스 선택을 취소하면 실행되지 않는다(UX-E-32 · FR-505, rev.1 E-I23 닫힘)
FP-E611 Error State working_dir 소실(저장 뒤 디렉터리 삭제) 구성 존재 실행 불변식 (1) 런타임 위반 — 거부 + 사유 규칙 없음 커버 — [AC-08] working_dir 이 사라진 구성은 실행이 거부되고 사유가 표시된다(UX-E-33 · FR-505, rev.1 E-I24 닫힘)
FP-E612 Error State run_configurations.json 손상 파싱 실패 목록 열기 규칙 없음(무시? 오류 표시? 재생성?) 커버 — [AC-08][AC-23] 실행 구성 파일이 손상되면 목록은 비고 오류가 표시되며 파일은 재생성되지 않는다(ED-17 · UX-E-33 · FR-501, rev.1 E-I25 닫힘)
FP-E613 Concurrency 같은 구성을 두 번 실행 running 실행 두 세션인지 거부인지 규칙 없음 커버 — [AC-08] 같은 구성을 두 번 실행하면 두 번째 세션 이름에 순번이 붙는다(UX-E-24, rev.1 E-I26 닫힘)
FP-E614 Edge Case 중지 후 미종료 → SIGKILL 대기 SIGTERM 무시 중지 대기 값 미정(architecture §10-1) 미커버 → E-N24 — 계약은 확정(ED-15 terminate({grace})) · grace 값은 여전히 미정(ux-spec §10 · architecture §10)
FP-E615 Edge Case JSON 편집 저장 → 목록 갱신(UX-E-15) 파일 열림 저장 목록 다시 읽기 미커버 → E-N25
FP-E616 Edge Case 진입점 3개 동등(UX-E-13) — 메뉴/팔레트/탭바 같은 결과 미커버 → E-N26
FP-E617 Edge Case pubspec.yaml 변경 → 판정 캐시 무효화 캐시 pubspec 편집 목록 갱신(ED §4.5) 미커버 → E-N27

S-E07 작업 대상 배너 · 상위 의존

ID Category Scenario Precondition Action Expected Result Covered?
FP-E701 Happy Path 작업 대상 → 배너 · 저장 비차단 스냅샷 S1 편집 · 저장 배너 · 저장 성공 커버 — [AC-10] 작업 대상 파일을 열면 표시되고 저장은 차단되지 않는다
FP-E702 Edge Case 사람 저장 → 스냅샷 없음 · 리스 없음 스냅샷 N 저장 N 불변 커버 — [AC-10][AC-13] 사람 저장은 EditSnapshot 을 만들지 않는다
FP-E703 Error State 체인 불연속 → 충돌 S1 → 사람 → S2 롤백 자동 적용 없음 · 충돌 커버(판정 보류 U-9) — [AC-22] 사람 편집 뒤 작업이 다시 편집하면 체인 불연속이 생기고 롤백은 충돌로 제시된다
FP-E704 Edge Case 연속 체인 → 충돌 없음 S2.base = S1.result 롤백 기존 규칙 커버(판정 보류 U-9) — [AC-22] 사람 편집이 없으면 체인은 연속이고 롤백은 기존 규칙대로 동작한다
FP-E705 Edge Case 작업 대상 아님 → 배너 없음 스냅샷 없음 열기 배너 없음 미커버 → E-N28
FP-E706 Edge Case 파일이 열린 채 작업이 종결(완료 · 실패 · 롤백됨) 배너 표시 중 상태 전이 배너 제거/갱신 규칙 없음 커버 — [AC-10] 작업이 종결되면 배너가 제거된다(UX-E-27, rev.1 E-I27 닫힘)
FP-E707 Edge Case 배너 닫기 → 세션 내 재표시 없음(UX-E-11) 표시 중 닫기 · 재열기 재표시 없음 미커버 → E-N29
FP-E708 Concurrency 두 작업이 같은 파일(상위 AC-12 로 순차) 작업 A 스냅샷, B 대기 열기 배너에 어느 작업(들)을 표시하는지 규칙 없음 커버 — [AC-10] 두 작업이 같은 파일을 편집하면 표시에 둘 다 나열된다(UX-E-25, rev.1 E-I28 닫힘)
FP-E709 Edge Case D-013 미확정 상태의 롤백 상위 현행 규칙 롤백 사람 편집 소멸 가능(PRD §4 흐름 6) 외부 — E-C4(상위 결정)
FP-E710 Edge Case D-018 미확정 → 기존 폴더 열기 불가 — 흐름 1 진입 새로 생성한 워크스페이스에서만 동작 외부 — E-C5(상위 결정)

교차(Flow 7) — 닫기 · 종료 · 포커스

ID Category Scenario Precondition Action Expected Result Covered?
FP-E801 Edge Case 워크스페이스 닫기 순서 — dirty 처분 → 검색 취소 → 언어 서버 종료 → 세션 처분 전부 활성 닫기 순서 · 각 단계 취소 시 되돌림 규칙 없음 부분 — 규칙 확정(UX-E-26 · ED-16 6단계 · 취소는 ①뿐) · E-C1 시나리오가 취소 지점과 결과(고아 0)만 확인 → E-I29(권고 R-9)
FP-E802 Error State 언어 서버 running 중 워크스페이스 닫기 서버 실행 닫기 프로세스 종료 보장 규칙 없음(고아) 커버 — 위 E-C1 시나리오 "앱이 소유한 자식 프로세스는 남아 있지 않다"(ED-16 ③ 언어 서버 무조건 종료, rev.1 E-C1 닫힘)
FP-E803 Edge Case K2 포커스 순환에 [검색] · 세션 탭 바 포함 — 순환 키 좌 → 중 → 우 → 하단 미커버 → E-N30
FP-E804 Edge Case K1 — 새 1급 동작 전부 팔레트 등재 — 팔레트 CocodePaletteCoverage 통과 미커버(가드 테스트로 대체) → E-N31
FP-E805 Permission git 저장소이지만 .git 읽기 권한 없음 — 펼침 git 판정 실패 시 후퇴 규칙 없음(E-I1 과 동근원) 부분 — 규칙 확정(ED-06a .git 읽기 불가 포함) · 시나리오는 git 실행 파일 부재 변형만 → E-I1 잔여 분기(권고 R-10)

Missing Coverage (Gaps) — rev.1 재판정 반영

판정 기준: 닫힘 = 규칙이 ux-spec/architecture/PRD 에 확정되고 bdd v1.1 에 대응 시나리오가 있다. 규칙만 = 규칙은 확정, 시나리오 없음. 열림 = 규칙 없음. 시나리오 제목은 docs/bdd-fullstack-code-editor.md v1.1 문면 그대로.

Critical

ID 규칙 시나리오 판정
E-C1 UX-E-18 · ED-16(6단계 · 고아 0 · 창 닫기 → ① 라우팅) · FR-206 [AC-03][AC-09] 워크스페이스 닫기 시 실행 중 세션이 나열되고 계속을 고른 경우에만 전부 종료된다 닫힘 — 앱 종료 · 창 닫기 변형 시나리오는 없음(권고 R-1)
E-C2 UX-E-19 · ED-16 · FR-206 [AC-03][AC-04] 일괄 저장 중 한 파일이 실패하면 닫기는 진행되지 않고 실패 목록이 남는다 닫힘
E-C3 UX-E-20 · FR-606 [AC-09] 실행 중 세션의 탭 닫기는 비활성이고 명시적 종료를 거쳐야 닫힌다 닫힘
E-C4 · E-C5 상위 D-013 · D-018 — 열림(외부 의존 — 변동 없음, 이 문서가 닫을 수 없다)

Important — 29건: 닫힘 19 · 규칙만/부분 9 · 열림(규칙) 1

ID 규칙 시나리오 판정
E-I1 ED-06a · FR-302 [AC-01] git 저장소인데 git 실행 파일이 없으면 파일 규칙으로 후퇴하고 판정 불가가 표시된다 닫힘(.git 읽기 불가 변형은 권고 R-10)
E-I2 UX-E-04 [AC-01] 읽기 권한이 없는 파일을 열면 탭은 열리되 본문에 사유가 표시되고 편집할 수 없다 닫힘
E-I3 U-12 미정 없음 열림(규칙) — Breakdown 이관
E-I4 UX-E-08 없음 규칙만(권고 R-6)
E-I5 ux-spec §4.1(재클릭 무재읽기) 없음 규칙만(권고 R-7)
E-I6 UX-E-05 [AC-03] 활성 탭을 닫으면 직전에 활성이었던 탭이 활성이 된다 닫힘(왼쪽 이웃 분기는 권고 R-10)
E-I7 ED-14 없음 규칙만(권고 R-8)
E-I8 FR-206 · AC-23 Outline [AC-03] dirty 탭 닫기의 세 선택은 각각 정해진 결과를 낳는다 — 저장 성공 · 폐기 · 취소 부분 — 저장 실패 행 없음(필수 R-0)
E-I9 UX-E-18/19 E-C1 시나리오("모두 폐기하고 계속", dirty 0) 부분 — 모두 저장 전부 성공 → 진행 없음(권고 R-2)
E-I10 UX-E-11 [AC-06] 빈 검색어는 검색을 실행하지 않는다 닫힘
E-I11 ux-spec §8 ⓖ · UX-D-31 [AC-06] 일치가 없으면 빈 상태와 검색어 지우기 동작이 표시된다 닫힘
E-I12 UX-E-12 Feature 3 «그 사이 사라진 파일의 결과 행은 «삭제됨» 으로 표시되고 열리지 않는다» 해소(#338) — R-3 권고를 시나리오로 승격
E-I13 architecture §4.4 [AC-06] 검색을 중지하면 그때까지의 부분 결과가 유지된다 닫힘
E-I14 UX-E-14 Feature 3 «dirty 버퍼의 치환은 버퍼 내용 기준이다» 해소(#339) — R-4 권고를 시나리오로 승격
E-I15 UX-E-14 [AC-06][AC-23] 치환 저장이 일부 파일에서 실패하면 실패 목록이 표시되고 성공분은 유지된다 닫힘
E-I16 FR-406 v1.1 · ED-10 [AC-07] 언어 서버 다시 시작이 성공하면 상태가 실행 중으로 바뀌고 진단은 새 서버의 것으로 교체된다 · [AC-07][AC-23] 언어 서버 다시 시작이 실패하면 사유가 같은 자리에 표시되고 편집은 계속된다 닫힘
E-I17 UX-E-17 [AC-07] 진단이 없으면 문제 패널은 빈 상태를 그리고 동작은 제시하지 않는다 닫힘
E-I18 UX-E-22 없음(재시작 교체만 위 시나리오) 규칙만(권고 R-5)
E-I19 ux-spec §8 ⓕ [AC-09] 세션이 없으면 빈 상태와 새 터미널 동작이 표시된다 닫힘
E-I20 UX-E-23 [AC-08] 종료된 실행 구성 세션의 다시 실행은 같은 탭에서 새 세션을 만든다 닫힘
E-I21 UX-E-21 [AC-09][AC-23] 셸이 기동 직후 종료되면 세션은 종료 코드와 함께 exited 로 남는다 닫힘
E-I22 ux-spec §8 ⓘ [AC-08] 프로젝트 디렉터리가 없으면 빈 상태와 JSON 열기 동작이 표시된다 닫힘
E-I23 UX-E-32 · FR-505 [AC-08] flutterRun 이 디바이스 미지정이면 디바이스 목록에서 선택한 뒤 실행된다 · [AC-08] 디바이스 선택을 취소하면 실행되지 않는다 닫힘
E-I24 UX-E-33 · FR-505 [AC-08] working_dir 이 사라진 구성은 실행이 거부되고 사유가 표시된다 닫힘
E-I25 ED-17 · UX-E-33 · FR-501 [AC-08][AC-23] 실행 구성 파일이 손상되면 목록은 비고 오류가 표시되며 파일은 재생성되지 않는다 닫힘
E-I26 UX-E-24 [AC-08] 같은 구성을 두 번 실행하면 두 번째 세션 이름에 순번이 붙는다 닫힘
E-I27 UX-E-27 [AC-10] 작업이 종결되면 배너가 제거된다 닫힘
E-I28 UX-E-25 [AC-10] 두 작업이 같은 파일을 편집하면 표시에 둘 다 나열된다 닫힘
E-I29 UX-E-26 · ED-16 E-C1 시나리오(취소 지점 · 고아 0 결과만) 규칙만(권고 R-9)

Nice-to-have — 변동분만

  • 닫힘 4: E-N8(Outline 취소 행) · E-N9(E-C1 시나리오의 취소 단계) · E-N17(UX-E-22 + 재시작 성공 시나리오) · E-N20(E-C3 시나리오 후단).
  • 규칙만 확정(시나리오 없음): E-N7(UX-E-04 Loading) · E-N10(둘 다 없으면 다이얼로그 없이 진행) · E-N28/E-N29(UX-E-28) · E-N32(신설) Windows 셸 순서 ED-11(U-13 닫힘, FP-E514).
  • 값 미정 유지: E-N24 terminate grace 값(ux-spec §10 · architecture §10).
  • 나머지 E-N1~6 · 11~16 · 18~19 · 21~23 · 25~27 · 30~31 은 변동 없음(rev.0 목록 그대로).

BDD Scenario Recommendations — rev.1 대응표

Must Have 1~12 (rev.0 요구 → bdd v1.1 대응)

# rev.0 요구 FP / GAP 대응 시나리오(bdd v1.1) 판정
1 일괄 저장 일부 실패 → 종료 취소 FP-E209 / E-C2 [AC-03][AC-04] 일괄 저장 중 한 파일이 실패하면 닫기는 진행되지 않고 실패 목록이 남는다 대응
2 종료 시 running 세션 처분 · 고아 0 FP-E516 · E519 · E802 / E-C1 [AC-03][AC-09] 워크스페이스 닫기 시 실행 중 세션이 나열되고 계속을 고른 경우에만 전부 종료된다 대응(앱 종료 변형 권고 R-1)
3 running 세션 탭 닫기 무확인 kill 금지 FP-E511 / E-C3 [AC-09] 실행 중 세션의 탭 닫기는 비활성이고 명시적 종료를 거쳐야 닫힌다 대응
4 단일 처분 저장 · 폐기 · 취소 결과 FP-E202~E204 / E-I8 Outline [AC-03] dirty 탭 닫기의 세 선택은 각각 정해진 결과를 낳는다 부분 — 저장 실패 행(FP-E203) 없음 → 필수 R-0
5 파일 읽기 권한 없음 FP-E109 / E-I2 [AC-01] 읽기 권한이 없는 파일을 열면 탭은 열리되 본문에 사유가 표시되고 편집할 수 없다 대응
6 결과 0 빈 상태 · 빈 검색어 FP-E305 · E304 / E-I11 · E-I10 [AC-06] 일치가 없으면 빈 상태와 검색어 지우기 동작이 표시된다 · [AC-06] 빈 검색어는 검색을 실행하지 않는다 대응
7 언어 서버 다시 시작 성공 · 실패 FP-E406 · E407 / E-I16 [AC-07] 언어 서버 다시 시작이 성공하면 상태가 실행 중으로 바뀌고 진단은 새 서버의 것으로 교체된다 · [AC-07][AC-23] 언어 서버 다시 시작이 실패하면 사유가 같은 자리에 표시되고 편집은 계속된다 대응
8 JSON 손상 · working_dir 소실 FP-E611 · E612 / E-I24 · E-I25 [AC-08] working_dir 이 사라진 구성은 실행이 거부되고 사유가 표시된다 · [AC-08][AC-23] 실행 구성 파일이 손상되면 목록은 비고 오류가 표시되며 파일은 재생성되지 않는다 대응
9 flutterRun 디바이스 선택 FP-E610 / E-I23 [AC-08] flutterRun 이 디바이스 미지정이면 디바이스 목록에서 선택한 뒤 실행된다 · [AC-08] 디바이스 선택을 취소하면 실행되지 않는다 대응
10 git 실행 파일 부재 후퇴 FP-E107 / E-I1 [AC-01] git 저장소인데 git 실행 파일이 없으면 파일 규칙으로 후퇴하고 판정 불가가 표시된다 대응
11 빈 상태 3종(세션 0 · 진단 0 · 프로젝트 0) FP-E510 · E408 · E603 / E-I19 · E-I17 · E-I22 [AC-09] 세션이 없으면 빈 상태와 새 터미널 동작이 표시된다 · [AC-07] 진단이 없으면 문제 패널은 빈 상태를 그리고 동작은 제시하지 않는다 · [AC-08] 프로젝트 디렉터리가 없으면 빈 상태와 JSON 열기 동작이 표시된다 대응
12 작업 종결 시 배너 갱신 FP-E706 / E-I27 [AC-10] 작업이 종결되면 배너가 제거된다 대응

Should Have 1~8

# rev.0 요구 FP 대응 시나리오(bdd v1.1) 판정
1 활성 탭 재클릭 무재읽기 FP-E114 없음 권고 R-7
2 저장 중 외부 변경 — 해시 대조 FP-E124 없음 권고 R-8
3 검색 중지 · 부분 결과 유지 FP-E312 [AC-06] 검색을 중지하면 그때까지의 부분 결과가 유지된다 대응
4 dirty 버퍼 치환 = 버퍼 기준 FP-E315 Feature 3 «dirty 버퍼의 치환은 버퍼 내용 기준이다»(#339) 반영
5 동종 디렉터리마다 템플릿 1건 FP-E604 없음 권고 R-11
6 pubspec 변경 후 목록 갱신 FP-E617 없음 권고 R-11
7 배너 없음 · 닫은 뒤 재표시 없음 FP-E705 · E707 없음 권고 R-11
8 배지 = 오류 + 경고 FP-E412 없음 권고 R-11

"규칙 확정 없이 시나리오를 쓰지 말 것" 6건의 현황

E-I6 → UX-E-05 · E-I18 → UX-E-22 · E-I20 → UX-E-23 · E-I26 → UX-E-24 · E-I28 → UX-E-25 · E-I29 → UX-E-26/ED-16 — 6건 전부 규칙 확정. 시나리오는 E-I6 · I20 · I26 · I28 작성됨, E-I18 · I29 는 미작성(권고 R-5 · R-9). 유보 조건은 해제됐다.

rev.1 추가 요구 시나리오

ID 구분 대상 한 줄 사유
R-0 필수 FP-E203 / E-I8 — 단일 처분 [저장] 이 실패하면 탭 · 버퍼가 유지되고 사유가 표시된다 다이얼로그 발 저장 실패 뒤 탭이 닫히면 처분 없는 소멸(Seed 불변식 2) — E-C2 의 단일 변형만 빠져 있다
R-1 권고 FP-E516 / E-C1 — 앱 종료 · OS 창 닫기 변형 ED-16 "강제 종료 경로 없음" 은 창 닫기 이벤트가 ①로 라우팅될 때만 성립하는데 시나리오는 워크스페이스 닫기뿐
R-2 권고 FP-E208 / E-I9 — 모두 저장 전부 성공 → 진행 부분 실패만 확인되고 성공 경로의 진행이 미확인
R-3 권고 FP-E310 / E-I12 — 결과 행 파일 소실 «삭제됨» + 열기 시 Alert 반영(#338) — Feature 3 에 시나리오 추가. 규칙이 이미 확정돼 있었고 픽스처 step(파일 생성 · 외부 삭제)이 있어, 시나리오 없이 두면 판정이 위젯 테스트에만 남는다
R-4 권고 FP-E315 / E-I14 — dirty 버퍼 치환은 버퍼 내용 기준 반영(#339) — Feature 3 에 시나리오 추가. 규칙은 단위 테스트가 판정하지만 「셸이 디스크를 다시 읽지 않는다」는 배선은 단위 테스트가 볼 수 없다
R-5 권고 FP-E410 / E-I18 — 닫힌 파일 진단 유지 · 서버 빈 목록으로만 제거 규칙 UX-E-22 확정, 재시작 교체만 시나리오화
R-6 권고 FP-E111 / E-I4 — path_key 충돌 시 표시 이름 = 처음 연 이름 규칙 UX-E-08 확정, 시나리오 없음
R-7 권고 FP-E114 / E-I5 — 활성 탭 재클릭 무재읽기 flutter_ide 회귀 교훈(§6-b5) 인데 판정 시나리오 없음
R-8 권고 FP-E124 / E-I7 — 저장 중 자체 저장 이벤트 무시 · 타인 변경은 배너 ED-14 해시 대조의 유일한 관찰 지점
R-9 권고 FP-E801 / E-I29 — 닫기 6단계 순서 관찰 결과(고아 0)는 E-C1 시나리오가 확인하므로 권고
R-10 권고 E-I6 "직전 활성 없음 → 왼쪽 이웃" · E-I1 .git 읽기 불가 확정된 규칙의 두 번째 분기가 Examples 에 없음
R-11 권고 Should-Have 5~8(FP-E604 · E617 · E705/E707 · E412) 규칙(FR-503 · ED §4.5 · UX-E-28 · UX-E-15) 확정, 시나리오 없음
  1. R-0(필수) 을 bdd v1.2 에 추가한다 — Outline 에 "저장(실패)" 행 하나면 된다. Solutioning Gate 전.
  2. Breakdown 이관: 열린 Important E-I3(규칙 · U-12) + 시나리오만 남은 E-I4 · I5 · I7 · I8(부분) · I9 · I12 · I14 · I18 · I29 — Story 인수 조건에 R-2~R-9 를 붙인다.
  3. 외부 의존 E-C4 · E-C5 는 planning-inputs §1.1 오너 재확인 항목 그대로 유지.
  4. 권고 R-1 · R-10 · R-11 은 해당 Story 의 인수 조건 작성 시 흡수한다.

Generated by cc-spec flow-permutation · 2026-09-16 · rev.0 대상 architecture rev.1 · ux-spec rev.0 · bdd 54 / rev.1 재판정 대상 architecture rev.3 · ux-spec rev.1 · PRD v1.1 · bdd v1.1 79