Metadata
- Created: 2026-09-16
- Revised: 2026-09-16 (v1.1.0 — Contrarian 15건 · Simplifier 8건 · 모호성 채점 10건 반영 / v1.1.1 — Round 2 문구 교정 5건)
- Author: 프로젝트 오너(Discovery §5.1 권장안 일괄 수용 — "계속 진행 해줘", 2026-09-16) · 작성: Claude (cc-spec:seed)
- Locked: 2026-09-16 (잠금 직전 내용 hash
194efa34— 잠금은 Metadata 3줄 · AC-01 의 ux-spec 절 번호 · Evolution Log 1행만 바꿨다). ⚠️ A-01 은 오너 일괄 수용에 의한 잠정 결정 상태로 잠긴다(D-014) — 개별 확답이 오면 PATCH 로 검증 상태만 갱신하고, H2 로 정정되면 이 문서는 폐기된다 - Ambiguity Score: 0.07 (v1.1.1, Round 2b — CLEAR) · 이력: v1.0.0 0.275(WARNING) → v1.1.0 0.130 → v1.1.1 0.07. 복잡도 30.0(Caution, ≤ 30). 독립 감사 보고: Round 1
ambiguity-score-round1.md, Round 2/2baudit-round2.md(scratchpad, 평가 보고서에 요약) - Parent:
docs/seed-spec-cocode.mdv3.4.0 (DRAFT). 이 문서의C-nn·AC-nn·A-nn·D-nnn은 이 문서 고유 번호 공간이며, 상위 문서 항목은cocode/C-02처럼 접두어를 붙여 인용한다. - 상속: 이 문서는 상위 Seed Spec 의 불변 제약 cocode/C-01~C-05 와 Must-Not cocode/AC-04 · AC-05 · AC-21 · AC-24 를 그대로 상속하며 완화하지 않는다. 이 줄은 §2 와 같은 잠금 규칙을 따른다(v1.0.0 의 C-01 을 옮긴 것, S-002). 상위의 C-01~C-05 가 개정되면 이 문서는 진화 프로토콜로 추종하는 것이 아니라 새 Seed 로 대체된다(Core Problem 과 불변 제약은 진화 불가, CH-015).
- 잠금 근거: §1 Core Problem 과 C-02 의 "Dart 풀스택"(Discovery §0 의 H1) 확정 근거는 오너가 Discovery §5.1 Q1 에 대한 권장안을 "계속 진행 해줘"로 일괄 수용한 것이다(A-01 · D-001 · D-014). 오너의 개별 확답은 없다. 오너가 H2(다국어)로 정정하면 이 문서는 폐기되고 새 Seed 가 작성된다.
작성 원칙(상위 v3.0.0 재작성 원칙 승계): §4 는 "무엇을 만들고 무엇을 안 만드는가"의 경계만 규정한다. 임계값 · 측정 환경 · 픽스처는 담지 않으며, 그 값들은 Planning 의 BDD 인수 조건이 된다. 수치는 출처가 있는 것만 쓴다.
0. Glossary
| 용어 | 정본 정의 |
|---|---|
| 풀스택 워크스페이스 | 워크스페이스 안에서 pubspec.yaml 이 있는 디렉터리(깊이 무관) 가운데 Flutter 앱(flutter SDK 의존 + lib/main.dart 존재) · Serverpod 서버(serverpod 의존) · Jaspr 웹(jaspr 의존)으로 판정되는 프로젝트 디렉터리가 둘 이상인 상위 Workspace. 판정 입력은 이 세 가지뿐이다(D-015) |
| 프로젝트 디렉터리 | 위 판정을 통과한 디렉터리. RunConfiguration.working_dir 의 값 집합 |
| 1급 프로젝트 타입 | 상위 §0 정의 승계 — 워크스페이스 생성 시 선택지로 제시되고 스캐폴딩 · 언어 지원 · 에이전트 도구가 그 타입을 전제로 동작하는 것. 이 문서에서는 Flutter 앱 · Serverpod 서버 · Jaspr 웹 세 종류 |
| 사람 편집 | 사용자가 에디터의 입력 표면(본문 · 검색/치환 패널)으로 파일 내용을 바꾸고 저장하는 행위. 에이전트 편집(상위 cocode/C-02 의 대상)의 대응 개념 |
| 문서 버퍼 / 버퍼 | §3 DocumentBuffer. "버퍼"는 그 약칭 |
| 실행 구성 | §3 RunConfiguration |
| 터미널 세션 | §3 TerminalSession |
| 앱 셸 | 상위 CocodeShellScaffold 가 그리는 창 레이아웃 — navigation · workbench · editorStack · terminal · inspector 다섯 슬롯(상위 CocodePaneId) |
| 명령 셸 | 사용자의 로그인 셸 프로세스(zsh · bash · PowerShell 부류). 터미널 세션 안에서 실행된다 |
| 셸 통합 | 앱 셸의 슬롯에 실제 뷰가 배치되고 app/cocode 가 editor · terminal · lsp · toolchain 을 의존하는 상태(AC-01) |
| 단일 런처 | toolchain 의 프로세스 기동 지점(상위 architecture DD-15). 앱 안에서 프로세스를 시작할 수 있는 유일한 경로 |
| PTY | 의사 터미널(pseudo-terminal). 자식 프로세스가 터미널에 붙어 있다고 인식하게 하는 OS 장치. 크기 변경 통지와 대화형 입력이 가능하다 |
| 편집 리스 | 상위 decision-log D-045/D-046 의 편집 리스(구현 core EditLease) — 에이전트 작업이 게이트 연산 구간 동안 보유하는 파일 잠금 |
| 체인 불연속 | 같은 DelegatedTask 가 같은 파일에 남긴 연속한 EditSnapshot 두 개에서, 뒤 스냅샷의 base_content_hash 가 앞 스냅샷의 result_content_hash 와 다른 상태. 두 스냅샷 사이에 사람 편집(또는 외부 도구의 변경)이 있었다는 뜻 |
| 진단 | 언어 서버가 publishDiagnostics 로 보내는 오류 · 경고 목록. 에디터 표시 전용이며 상위 자가 검증 ④ 의 입력이 아니다(상위 이슈 #60 AC3) |
| dirty | DocumentBuffer 의 content 해시가 disk_hash 와 다른 상태 |
| IME | 입력기(Input Method Editor). 한글 조합 입력 장치 |
| DAP | Debug Adapter Protocol. 디버거와 에디터 사이의 표준 프로토콜 |
| ADE | Agent Development Environment — 상위 §0 정의 승계 |
| MVP | 상위 §0 정의 승계 — cocode/C-01 이 정의하는 첫 출시 범위 |
| 3-OS | macOS · Windows · Linux 데스크톱 3종(상위 cocode/C-01) |
1. Core Problem
Immutable after locking. Cannot evolve.
Dart 풀스택 개발자가 풀스택 워크스페이스(§0)의 Flutter 클라이언트 · Serverpod 서버 · PostgreSQL 을 한 작업에서 함께 고칠 때 편집·실행·검사를 한 창에서 끝낼 수 있는 데스크톱 에디터가 없고, cocode ADE 가 3-OS 에 제공하기로 한 개발자 표면(상위 cocode/AC-03: 코드 에디터 · 파일 트리 · 터미널)은 플레이스홀더 상태다.
Problem Rationale
- cocode ADE 앱 셸(
app/cocode/lib/main.dart, PR #289)의 editorStack · terminal 슬롯은ColoredBox플레이스홀더이고,editor·terminal·lsp는 앱 의존에 없다(Discovery §1.3, 2026-09-16 실측). - 상위 cocode/AC-03(Must)은 코드 에디터 · 파일 트리 · 터미널을 3-OS MVP 출시 조건으로 둔다. 이 표면 없이 ADE 는 출시되지 않는다.
- Dart 서버(Serverpod)를 1급으로 두는 에디터는 시장에 없고(Discovery §2.1), Flutter 를 1급 템플릿으로 뒀던 Firebase Studio 는 2027-03-22 종료가 공지됐다(Discovery §2.2).
- flutter_ide 실사: Flutter 로 IDE 셸은 4주에 만들어지지만, 버퍼 소유권 · 저장 · 언어 서버 · 실행 배선이 없으면 편집이 소실되고 오류가 삼켜진다(Discovery §1.2). 가치는 표면이 아니라 배선에 있다.
2. Immutable Constraints
Immutable after locking. Each item requires rationale. C-01(상속 조항)은 v1.1.0 에서 Metadata "상속" 줄로 옮겼다(S-002). 번호는 재부여하지 않는다.
| ID | Constraint | Rationale | Type |
|---|---|---|---|
| C-02 | "풀스택"은 Dart 풀스택이다. 1급 프로젝트 타입은 Flutter 앱 · Serverpod 서버 · Jaspr 웹 세 종류(와 그 조합)뿐이다. 그 밖의 언어 · 프레임워크에는 파일 단위 편집 지원(파일 이름 또는 확장자에 대응하는 구문 강조 · 편집 · 저장, AC-07)을 제공하고, 1급 정의(§0)의 세 요소(생성 선택지 · 스캐폴딩 · 에이전트 도구 전제)는 제공하지 않는다(AC-11) | D-001(Q1 권장안 수용). 상위 cocode/AC-05 · C-03 후단과 합치. 조직 표준 스택(Discovery §0). 하한 · 상한 판정 가능화는 CH-007 | Business |
| C-03 | 사람 편집은 EditSnapshot 을 남기지 않고 편집 리스를 획득하지 않는다(상위 cocode/C-02 후단 "사람이 에디터로 직접 하는 편집은 이 제약의 대상이 아니다" 승계). 실행 중인 DelegatedTask 가 EditSnapshot 을 남긴 파일에 대한 사람의 저장은 차단되지 않는다(AC-10). 그 작업이 같은 파일을 다시 편집하면 새 EditSnapshot 은 체인 불연속(§0)을 만들고, 상위 롤백 사전검사(cocode/AC-02)는 롤백 구간 안의 체인 불연속을 충돌로 제시한다 — 사람 편집 구간을 건너뛰는 자동 롤백은 존재하지 않는다(AC-22) | Socratic L3 C-02 · D-009 · D-013. v1.0.0 의 "기존 충돌 메커니즘 재사용" 주장은 상위 AC-02 문면(작업의 마지막 스냅샷 해시만 대조)과 달라 CH-001 로 교정했다. 이 조건은 상위 AC-02 의 충돌 조건을 하나 더하는 강화이며 완화가 아니다 | Technical |
| C-04 | 이 문서가 추가하는 모든 텍스트 입력 표면(에디터 본문 · 터미널 · 검색/치환 패널 · 명령 팔레트 · 실행 구성 편집 입력)은 상위 cocode/AC-16(한글 IME)의 판정 대상이다. 이 문서는 IME 판정 기준을 새로 정의하지 않으며, 각 Must 의 판정은 IME 와 분리한다(AC-09) | 상위 D-069(6조합 미충족) · UX-D-18 I1~I3. flutter_ide 실사에서 WebView 위임형 입력의 위험 확인(Discovery §1.2) | Technical |
| C-05 | 앱이 스스로 실행하는 명령(실행 구성 · 언어 서버 기동 · 이후 추가될 git · pub 동작)은 단일 런처로만 기동한다. 사용자 터미널 세션의 표준 입력에 명령 문자열을 써서 실행하는 경로는 존재하지 않는다(AC-12) | flutter_ide 의 셸 인젝션 경로(git_sidebar.dart:880,883 → PTY 타이핑) 실사(Discovery §4.1) · 상위 DD-15 · check_process_launch_allowlist.py |
Technical |
3. Domain Entities
After locking, only additions are allowed (existing entities cannot be modified). 상위 엔티티 Workspace · DelegatedTask · EditSnapshot 은 재정의하지 않고 참조한다.
DocumentBuffer (문서 버퍼)
- Attributes: path_key(상위 architecture DD-08a 의 경로 키 규칙 — 구현
workspacePathKey) · content · disk_hash(마지막 로드 또는 저장 시점 내용의 해시) · dirty(content 의 해시 ≠ disk_hash) · language_id · external_change_pending(디스크의 내용 · 존재 · 이름이 disk_hash 시점과 달라졌음이 감지된 상태) - Relationships: 정확히 하나의 상위 Workspace 에 속한다. 0개 이상의 에디터 탭(뷰)이 같은 버퍼를 본다
- Invariants: (1) 한 Workspace 안에서 같은 path_key 의 DocumentBuffer 는 최대 1개다 (2) 버퍼의 수명은 그 버퍼를 보는 탭의 수명보다 길거나 같다 — 탭이 닫혀도 dirty 인 버퍼는 사용자 처분(저장 · 폐기) 전에 사라지지 않는다 (3) external_change_pending 이면서 dirty 인 버퍼의 content 는 사용자 선택 없이 디스크 내용으로 대체되지 않는다
RunConfiguration (실행 구성)
- Attributes: id · name · template_kind{flutterRun, serverpodStart, dartTest, custom} · command_template(실행 파일과 인자 목록) · working_dir(Workspace 루트 기준 상대 경로) · env_overrides(상위 architecture DD-23a 환경변수 화이트리스트를 통과한 키만 — 구현
toolchainEnvironmentWhitelist) - Relationships: 정확히 하나의 상위 Workspace 에 속한다. 실행될 때마다 TerminalSession 하나를 만든다(1:n)
- Invariants: (1) working_dir 은 §0 프로젝트 디렉터리 중 하나이며 Workspace 루트 안을 가리킨다
TerminalSession (터미널 세션)
- Attributes: id · backend_kind{pty, pipe} · process_id · cwd · scrollback(출력 버퍼) · status{running, exited(exit_code)} · origin{user, runConfiguration(id)}
- Relationships: 0 또는 1개의 RunConfiguration 에서 기원한다(사용자가 연 명령 셸은 origin=user)
- Invariants: (1) 앱이 세션의 표준 입력에 쓰는 바이트는 사용자의 키 입력(IME 확정 문자열 포함)뿐이다 — 앱 자신의 명령은 쓰지 않는다(C-05)
4. Acceptance Boundaries
One flat table (FLAT — no nesting). Status defaults to PENDING at create. 이 표는 범위 경계를 규정한다. 근거 없는 임계값 · 측정 환경 · 픽스처는 담지 않는다. v1.1.0 병합: AC-02 → AC-01, AC-05 → AC-04 (D-016). 번호는 재사용하지 않는다.
| ID | Type | Acceptance Criterion | Status |
|---|---|---|---|
| AC-01 | Must | Given app/cocode 가 실행되어 워크스페이스가 열렸을 때, When 앱 셸이 그려지면, Then navigation 슬롯에는 워크스페이스의 디렉터리 트리가 표시되어 사용자가 디렉터리 하나를 펼칠 때 펼친 디렉터리의 자식만 그 시점에 읽히고(전체 트리 선행 적재 없음) 워크스페이스의 .gitignore 규칙이 제외하는 항목은 표시되지 않으며(표시/숨김 전환은 설정 항목), editorStack 슬롯에는 에디터 뷰(열린 파일이 없으면 빈 상태 화면 — 상위 ux-spec §2.5 빈 상태 표 ⓐ행의 EmptyState.compact 계약, 워크스페이스는 열렸고 파일만 없는 경우), terminal 슬롯에는 터미널 뷰가 표시되고, workbench 는 editorStack 과 terminal 을 담는 컨테이너로서 자체 내용을 갖지 않으며, 슬롯 이름만 적힌 플레이스홀더는 어느 슬롯에도 남지 않는다 |
PENDING |
| AC-03 | Must | Given 파일이 둘 이상 열려 있고 그중 하나의 버퍼가 dirty 일 때, When 사용자가 다른 탭으로 전환하거나, dirty 버퍼의 탭을 닫거나, 워크스페이스를 닫거나, 앱을 종료하려 하면, Then 전환 시 dirty 버퍼의 content 와 실행 취소 이력은 보존되고(전환 전후의 content 해시가 같다), 탭 닫기 시 저장 · 폐기 · 취소 세 선택이 제시되며, 워크스페이스 닫기 · 앱 종료 시 dirty 버퍼 전체 목록이 한 번에 제시되어 일괄 저장 · 일괄 폐기 · 취소를 선택할 수 있고, 어느 경우에도 선택 전에는 버퍼가 사라지지 않는다 | PENDING |
| AC-04 | Must | Given 버퍼가 dirty 이거나 열린 파일이 에디터 밖에서 바뀌었을 때, When 사용자가 저장 명령을 실행하거나 앱의 파일 감시가 디스크 변경을 감지하면(감지 지연의 상한은 Planning 이 정한다), Then 저장 시 파일이 디스크에 기록되고 disk_hash 가 갱신되며 기록 실패 시 실패 사유가 사용자에게 표시되고, 내용 변경 감지 시 버퍼가 dirty 가 아니면 디스크 내용으로 다시 읽고 dirty 이면 다시 읽지 않은 채 "다시 읽기 · 내 편집 유지" 선택을 제시하며, 파일이 삭제 · 이름변경된 경우 버퍼는 dirty 로 남고 다시 읽기 선택은 제시되지 않는다 | PENDING |
| AC-06 | Must | Given 워크스페이스가 열려 있을 때, When 사용자가 문자열 또는 정규식으로 워크스페이스 전체를 검색하면, Then 검색 대상 파일 집합은 AC-01 의 트리 표시 규칙을 따르고(.gitignore 규칙이 제외하는 항목은 검색되지 않는다), 파일 · 행 단위 결과 목록이 표시되며 결과 하나를 선택하면 그 위치가 에디터에 열리고, 치환은 사람 편집으로 적용된다(C-03) |
PENDING |
| AC-07 | Must | Given 워크스페이스의 파일을 열었을 때, When 편집하면, Then Dart 파일에는 Dart SDK 의 언어 서버(dart language-server)가 보낸 시맨틱 토큰이 구문 색상에 반영되고 진단(§0)이 문제 목록과 에디터 거터에 표시되며 — 이 진단은 상위 자가 검증 ④ 의 입력이 아니고(상위 이슈 #60 AC3), 언어 서버가 없거나 종료되면 문제 목록에 서버 상태가 표시되고 편집은 계속된다 — Dart 이외 파일(Serverpod 마이그레이션 SQL · config/*.yaml · Dockerfile · Markdown)에는 파일 이름 또는 확장자에 대응하는 구문 강조가 적용되고 편집 · 저장은 AC-03 · AC-04 와 같은 규칙으로 동작하며 언어 서버 연결은 요구되지 않는다(AC-24) |
PENDING |
| AC-08 | Must | Given 프로젝트 디렉터리(§0)가 하나 이상인 워크스페이스에 실행 구성이 있을 때(풀스택 워크스페이스가 아닌 단일 프로젝트 워크스페이스를 포함한다), When 사용자가 실행 구성 하나를 실행하면, Then 단일 런처가 humanTerminal 프로파일로 프로세스를 기동하고, 출력이 origin=runConfiguration 인 TerminalSession 으로 표시되며, 실행 중인 프로세스는 세션 목록에 origin 과 함께 나타나 한 번의 조작으로 종료되고, 프로세스에는 화이트리스트를 통과한 환경변수만 전달된다. 앱은 설치 직후 template_kind flutterRun · serverpodStart · dartTest 의 기본 템플릿을 제공하며, 각 기본 템플릿은 실행 파일과 인자 목록이 비어 있지 않고 실행 전제(필요한 CLI 의 존재 · flutterRun 의 디바이스 지정)를 실행 전에 확인해 미충족 시 사유를 표시한다(템플릿의 정본 내용은 Planning 이 정한다, D-017) | PENDING |
| AC-09 | Must | Given 사용자가 터미널을 열 때, When 명령 셸 세션이 시작되면, Then 세션의 명령 셸 프로세스는 단일 런처로 기동되어 환경변수는 상위 architecture DD-23a 화이트리스트를 통과한 것만 받고(C-05 · 상위 DD-15), 세션은 backend_kind=pty 로 기동되어 창 크기 변경이 프로세스에 전달되고, 사용자 키 입력이 실행 중인 프로세스에 그대로 전달되며(flutter run 의 단일 키 명령 포함), 세션을 둘 이상 동시에 열고 각각 개별로 종료할 수 있고, 종료된 세션의 출력은 사용자가 닫기 전까지 남으며, scrollback 은 설치 직후 양의 유한한 상한(값은 설정 항목)을 가져 상한을 넘으면 오래된 줄부터 버린다. 한글 IME 판정은 이 항목의 대상이 아니라 상위 cocode/AC-16 의 대상이다(분리 판정) |
PENDING |
| AC-10 | Must | Given 실행 중인 DelegatedTask 가 EditSnapshot 을 남긴 파일을 사람이 에디터에서 열었을 때, When 편집하고 저장하면, Then 그 파일이 실행 중 작업의 편집 대상임이 에디터에 표시되고, 저장은 차단되지 않으며, EditSnapshot 은 생성되지 않는다(C-03) | PENDING |
| AC-11 | Must-Not | Given 사용자가 새 워크스페이스를 만들거나 실행 구성 템플릿을 고를 때, When 선택지를 확인하면, Then Flutter 앱 · Serverpod 서버 · Jaspr 웹 이외의 언어 · 프레임워크는 1급 프로젝트 타입이나 기본 템플릿으로 제시되지 않는다(C-02) | PENDING |
| AC-12 | Must-Not | Given 앱이 실행 구성 · 언어 서버 · 그 밖의 자체 명령을 실행할 때, When 기동 경로를 확인하면, Then 사용자 터미널 세션의 표준 입력에 명령 문자열을 쓰는 경로는 존재하지 않는다(C-05) | PENDING |
| AC-13 | Must-Not | Given 사람 편집을 저장할 때, When 상위 EditSnapshot 저장소를 확인하면, Then 그 저장으로 생긴 EditSnapshot 은 존재하지 않는다(C-03) | PENDING |
| AC-14 | May | Given 풀스택 워크스페이스에 Serverpod 서버 프로젝트 디렉터리가 있을 때, When 사용자가 DB 브라우저를 열면, Then 접속 정보로 PostgreSQL 에 연결해 스키마와 테이블 데이터를 읽기 전용으로 볼 수 있다 | PENDING |
| AC-15 | May | Given 워크스페이스가 열려 있을 때, When 사용자가 HTTP 요청을 작성해 보내면, Then 응답 상태 · 헤더 · 본문이 표시되고 요청 정의는 워크스페이스 안에 파일로 저장된다 | PENDING |
| AC-16 | May | Given Flutter 앱 또는 Serverpod 서버 프로젝트 디렉터리가 있을 때, When 사용자가 디버그 실행을 시작하면, Then DAP 어댑터(flutter debug-adapter · dart debug_adapter)를 통해 중단점 정지와 변수 조회가 동작한다 |
PENDING |
| AC-17 | May | Given 워크스페이스가 git 저장소일 때, When 사용자가 git 사이드바를 열면, Then 변경 파일 목록 · 스테이징 · 커밋 · 브랜치 전환이 단일 런처를 거친 git 명령으로 동작한다 | PENDING |
| AC-18 | May | Given Flutter 앱 프로젝트 디렉터리가 있을 때, When 사용자가 pub.dev 사이드바에서 패키지를 검색해 추가하면, Then 단일 런처가 flutter pub add 를 실행한다 |
PENDING |
| AC-19 | May | Given 파일이 열려 있을 때, When 사용자가 에디터 분할을 요청하면, Then editorStack 안에서 같은 버퍼 또는 다른 버퍼를 나란히 편집할 수 있다 | PENDING |
| AC-20 | May | Given 앱을 종료했다가 같은 워크스페이스를 다시 열 때, When 앱 셸이 그려지면, Then 직전에 열려 있던 탭과 페인 비율이 복원된다 | PENDING |
| AC-21 | May | Given PTY 터미널 세션에서, When 대체 화면을 쓰는 프로그램(vim · htop)을 실행하면, Then 대체 화면 진입 · 이탈과 커서 이동이 프로그램이 보낸 제어 시퀀스대로 터미널 버퍼에 반영된다 | PENDING |
| AC-22 | Must-Not | Given 실행 중인 DelegatedTask 가 어떤 파일에 EditSnapshot 을 남긴 뒤 사람이 그 파일을 편집 · 저장했고 그 작업이 다시 편집해 체인 불연속(§0)이 생겼을 때, When 사용자가 그 작업을 불연속 이전 시점으로 롤백하면, Then 롤백이 사람 편집 구간을 건너뛰어 자동 적용되는 경로는 존재하지 않는다 — 상위 롤백 사전검사가 그 불연속을 충돌로 제시한다(C-03) | PENDING |
| AC-23 | Must-Not | Given 앱이 기동한 프로세스(실행 구성 · 언어 서버 · 명령 셸의 PTY)가 시작에 실패하거나 비정상 종료했거나 저장이 실패했을 때, When 사용자 화면을 확인하면, Then 종료 코드 또는 오류 메시지가 표시되지 않은 채 실패가 사라지는 경로는 존재하지 않는다 | PENDING |
| AC-24 | May | Given Dart 이외 파일이 열려 있을 때, When 그 언어의 언어 서버가 설정되어 있으면, Then 그 서버의 시맨틱 토큰과 진단이 AC-07 과 같은 방식으로 표시된다(서버의 설치 · 기동 정책은 D-012 이관) | PENDING |
수치의 출처
- 이 표에는 임계값 · 시간 · 개수 목표치가 없다. "둘 이상"(§0 · AC-03 · AC-09)과 "세 선택"(AC-03) · "기본 템플릿 3종"(AC-08)은 목표치가 아니라 열거 결과다. "양의 유한한 상한"(AC-09)은 상위 cocode/AC-08 과 같은 형식으로 값이 아니라 존재를 요구한다.
5. Exposed Assumptions
Socratic 인터뷰(
docs/socratic-discovery-fullstack-code-editor.md) Level 2 가운데 §4 에 의존처가 있거나 잠금 근거인 것. A-06 은 D-003 으로, A-08 은 D-007 로, A-09 는 Discovery A-F6 으로 이관했다(S-003 · S-006). 번호는 재사용하지 않는다.
| ID | Assumption | Verification Status | Verification Method |
|---|---|---|---|
| A-01 | "풀스택"은 Dart 풀스택(Flutter · Jaspr · Serverpod · PostgreSQL)이다 | Unverified — 오너 일괄 수용("계속 진행")으로 잠정 결정, 개별 확답 대기(D-014) | 오너 확답. H2 로 정정되면 이 문서는 폐기되고 새 Seed |
| A-02 | 기존 앱 셸 · 패키지 위에 얹는다(새 앱 없음) | Verified — 상위 cocode/AC-03 문면(개발자 표면은 ADE 의 출시 조건) + D-002 | — |
| A-03 | re_editor 위에 다중 탭 · 버퍼 관리를 얹어도 응답성이 유지된다 |
Unverified — 게이팅 리스크 | 상위 ac15 벤치를 "탭 N개 열림"(N 은 Planning 이 상위 D-065 절차로 확정) 조건으로 재실행. 목표치는 오너가 실측 뒤 결정 |
| A-04 | PTY 백엔드가 대화형 키 · 크기 조절을 3-OS 에서 만족시키고, 한글 IME 는 상위 cocode/AC-16 판정으로 분리된다 | Unverified, 반증 이력 — 게이팅 리스크 | probe.ac16-ime-replay.yaml 을 PTY 백엔드로 재실행 · flutter_pty2 1.0.2 평가(D-008). 실기기 입력기 측정은 상위 D-069 ⓐ 사유로 러너에서 불가 — 사람 수동 재생 필요 |
| A-05 | Serverpod 4 의 serverpod start 가 존재하고 서버 · DB · Flutter 앱을 함께 실행한다 |
Verified(2026-07-08 public beta 블로그) | — |
| A-07 | 사람 편집은 EditSnapshot · 편집 리스 대상이 아니다 | Verified(상위 cocode/C-02 문면) | 상위 evolve 시 이 문서는 새 Seed 로 대체 |
| A-10 | 실행 구성 템플릿 스키마(실행 파일 · 인자 · working_dir · 환경변수)가 Serverpod 4.0 beta 와 stable 의 명령 차이를 설정 값만으로 흡수한다 | Unverified | Design 의 템플릿 스키마 확정 후 4.0 beta 와 stable(출시 시) 명령으로 각각 실행 |
6. Evolution Log
Append-only. Records change history after locking.
| Version | Date | Changes | Reason | Approver |
|---|---|---|---|---|
| v1.0.0 | 2026-09-16 | Initial version | Socratic 인터뷰(근거 기반 비대화형) 결과 | 프로젝트 오너("계속 진행", 권장안 일괄 수용) |
| v1.1.1 (LOCKED) | 2026-09-16 | 잠금 — 모호성 0.07 ≤ 0.2 · 복잡도 30.0 ≤ 30 · Contrarian 15/15 Resolved(Evidence 검증 VALID 15). A-01 잠정 결정 상태 명시 | Specification Gate Stage 1·2 통과 후 잠금(cc-spec:verify --lock 상당) | 진행자(cc-spec) — 오너 재확인 항목 3건은 planning-inputs §1.1 |
| v1.1.1 | 2026-09-16 | 문구 교정 5건 — 파일 이름/확장자(C-02 · AC-07) · AC-01 빈 상태 참조 · AC-08 Given 단일 프로젝트 포함 · AC-06 검색 범위 · AC-09 단일 런처 · DD-23a 정합 | Round 2 독립 감사 잔여 권고 | 진행자(cc-spec) — DRAFT 상태 개정 |
| v1.1.0 | 2026-09-16 | C-01 → Metadata 이동 · C-02/C-03/C-04 문면 교정 · §0 용어 12건 추가 · AC-02→AC-01 · AC-05→AC-04 병합 · AC-01/03/04/07/08/09/10 개정 · AC-22/23(Must-Not) · AC-24(May) 신설 · A-01 잠정 결정 표기 · A-05 사실/A-10 가정 분리 · A-06/08/09 이관 | Contrarian CH-001~015 · Simplifier S-001~008 · 모호성 채점 Round 1 | 진행자(cc-spec) — DRAFT 상태 개정 |