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

풀스택 코딩 에디터 · E05

Spec Evaluation — 명세 게이트 판정

모호성 채점과 통과 판정

목차

Summary

  • Seed Spec: docs/seed-spec-fullstack-code-editor.md
  • Evaluation Date: 2026-09-16
  • specVersion / specHash (E0.1 스탬프): v1.1.1 / 79991d04 (LOCKED 후 git hash-object). 잠금 직전 내용 hash 194efa34 — 잠금은 Metadata 3줄 · AC-01 의 ux-spec 절 번호 · Evolution Log 1행만 바꿨다(§Stage 2 스탬프 주석 참조)
  • Final Verdict: PASS — Specification Gate Passed (Stage 1 10/10 · Stage 2 PASS · Stage 3 3/3 APPROVE-with-notes, blocking 0 — 단일 모델 패널)
  • 평가 방식 고지: 채점 · Contrarian · Simplifier · Round 2 감사 · Stage 3 패널은 전부 같은 세션의 fork 에이전트가 수행했다(일반 서브에이전트 스폰이 tmux pane 오류로 실패). fork 는 초안 작성 맥락을 상속하므로 "독립"은 페르소나 · 지면 채점 원칙 · 인용 실재 검증으로 확보한 것이지 별도 모델 · 별도 맥락이 아니다. Stage 3 는 프로토콜이 명시한 대로 단일 모델 패널(one correlated opinion) 이다.
  • 오너 개별 확답 없이 진행된 결정: D-001~D-008(권장안 일괄 수용, "계속 진행 해줘"). A-01 은 잠정 결정 상태로 잠겼다(D-014). 오너 재확인 항목 3건은 docs/planning-inputs-fullstack-code-editor.md §1.1.

Stage 1: Mechanical Verification — PASS (10/10) · stamp v1.1.1 / 79991d04

ID 항목 결과 근거
M-01 Seed spec 존재 ✅ PASS docs/seed-spec-fullstack-code-editor.md
M-02 Status LOCKED ✅ PASS 제목 줄 Status: LOCKED, Locked: 2026-09-16. ⚠️ A-01 은 "오너 일괄 수용에 의한 잠정 결정" 상태로 잠겼다(Metadata 잠금 근거 · D-014) — 개별 확답이 오면 PATCH, H2 면 폐기
M-03 Core Problem 비어 있지 않음 ✅ PASS §1 한 문장 + Rationale 4건
M-04 불변 제약 ≥ 1 ✅ PASS C-02~C-05 4건(C-01 은 Metadata "상속" 줄로 이동, S-002)
M-05 도메인 엔티티 ≥ 1(속성 · 관계 · 불변식) ✅ PASS DocumentBuffer · RunConfiguration · TerminalSession 3종 전부 3요소 보유
M-06 Must 행 ≥ 1, AC-ID + Status ✅ PASS Must 8행(AC-01 · 03 · 04 · 06 · 07 · 08 · 09 · 10), 전부 AC-NN + PENDING
M-07 Must-Not 행 ≥ 1, AC-ID + Status ✅ PASS Must-Not 5행(AC-11 · 12 · 13 · 22 · 23), 전부 PENDING
M-08 노출 가정 ≥ 3 ✅ PASS 7행(A-01 · 02 · 03 · 04 · 05 · 07 · 10; A-06 · 08 · 09 는 이관)
M-09 모호성 점수 기록 ✅ PASS Metadata 0.07 (v1.1.1, Round 2b — CLEAR)
M-10 SemVer ✅ PASS v1.1.1

검사 방법: 스크립트(grep/sed)로 행 수 · 상태값 · 제목 줄을 기계 판정. 상태값 없는 AC 행 0건.

Stage 2: Semantic Verification — PASS · stamp v1.1.1 / 194efa34(잠금 직전 내용) = 79991d04 의 본문

스탬프 주석(E2.9): Stage 2 의 세 입력은 잠금 직전 hash 194efa34 에 대해 판정됐다. 잠금(79991d04)은 §1~§5 본문을 바꾸지 않았다 — 변경은 제목 줄 Status · Metadata Locked/Ambiguity 줄 · AC-01 의 "ux-spec §2.5" 절 번호 삽입 · Evolution Log 1행이다(git diff 실측). 본문 동일성이 확인되므로 재판정 없이 같은 스탬프로 인정한다.

2a. 모호성 점수 — PASS (0.07 ≤ 0.2)

라운드 대상 점수 판정 보고서
Round 1 v1.0.0 0.275 (Lex .15 · Ref .50 · Comp .25 · Cons .25 · Test .25) WARNING scratchpad ambiguity-score-round1.md — 권고 10건
Round 2 v1.1.0 0.130 (Lex .10 · Ref .10 · Comp .20 · Cons .15 · Test .10) CLEAR scratchpad audit-round2.md §A — 잔여 권고 5건
Round 2b v1.1.1 0.07 (Lex .05 · Ref .05 · Comp .10 · Cons .05 · Test .10) CLEAR 같은 파일 §Round 2b
  • 상위 인용 실재 검증: cocode/C-01~C-05 · AC-02/03/04/05/12/16/21/24 · D-019/036/045/046/052/065/066/067/069 · DD-08a/DD-15/DD-23a · UX-D-18 · ux-spec §2.5 ⓐ행 · 이슈 #60 AC3(3번째 체크박스) · humanTerminal 프로파일 — 전부 실재.
  • 금칙어(한국어 16종 · 영어 14종) 0건. 병합 행 AC-01/04/07/08/09 는 각 절이 독립 관찰 가능한 단일 계약으로 확인.

2b. Contrarian 검토 — PASS (Critical 2 · Major 9 · Minor 4 → 15/15 Resolved, Evidence 검증 VALID 15)

  • 보고서: docs/contrarian-review-fullstack-code-editor.md. 저자 응답 15건 전부 Evidence(Seed 문면 위치) 기재.
  • Round 2 Evidence 검증(scratchpad audit-round2.md §C): VALID 14 · WEAK 1(CH-009 — "사용자 셸은 전체 환경 상속" 근거가 상위 DD-23a 와 충돌) → v1.1.1 에서 근거 교정 후 Round 2b 재검 VALID 15 · WEAK 0 · INVALID 0.
  • Critical 해소 요약: CH-001(사람 편집이 롤백에 조용히 소멸) → §0 체인 불연속 · C-03 · AC-22 · D-013(상위 RollbackPrecheck 확장 필요 — 상위 결정 항목). CH-002(잠정 결정 위 잠금) → A-01 Unverified 표기 · Metadata 잠금 근거 · D-014.
  • 잔여 위험 Accepted 4건: 개별 확답 부재(CH-002) · 상위 AC-16 종속(CH-005) · May 존치(CH-012) · 상위 DRAFT 위에 쌓는 위험(CH-015).

2c. Simplifier 검토 — PASS (복잡도 30.0 ≤ 30, 제안 8건 전부 처분)

  • 보고서: docs/simplifier-review-fullstack-code-editor.md. Round 1 계수 30.5(Excessive 경계) → 처분(Accept 5 · Reject 1 · Defer 2) + 저자 병합 2건(AC-02→AC-01 · AC-05→AC-04) → Round 2 독립 재계수 30.0(엔티티 3 · 관계 4 · 제약 4 + 상속 줄 1 + 불변식 5 · Must 8 · 미검증 가정 4). 상속 줄 제외 시 29.5.
  • 주의(재계수자 기록): Must 10→8 은 병합에 의한 행 수 감소이며 내용 감소가 아니다 — 병합 행의 독립 관찰 가능성은 2a 에서 별도 확인.

Stage 3: Consensus Verification — PASS (3/3 APPROVE, single-model panel) · stamp v1.1.1 / 79991d04

패널 3인은 각각 fork 에이전트가 페르소나로 수행했고(병렬, 상호 비조율), 판정은 enum + objection 목록 + 스탬프의 스키마로 회수해 셋이 다 도착한 뒤 한 번에 집계했다(verdicts === 3 && blocking === 0 → PASS). 세 스탬프 전부 79991d04 일치. 이 결과는 하나의 상관된 의견이지 교차 모델 합의가 아니다.

Role Verdict Objections Blocking? Stamp
Analyst APPROVE (with notes) OBJ-1-Analyst-1 ~ 5 no ×5 v1.1.1 / 79991d04
PM APPROVE (with notes) OBJ-1-PM-1 ~ 4 no ×4 v1.1.1 / 79991d04
Architect APPROVE (with notes) OBJ-1-Architect-1 ~ 6, OBJ-1-Architect-7("looked for an objection and found none because 어떤 Must 도 main 채널 전용 API 를 요구하지 않는다") no ×7 v1.1.1 / 79991d04
  • blocking = 0 · verdicts = 3 → PASS. 원문: scratchpad panel-analyst.md · panel-pm.md · panel-architect.md.

Round table

Round Objection id Raised by Blocking? Disposition Evidence / issue id Stamp
1 OBJ-1-Analyst-1 Analyst no carried → Planning BDD AC-04: clean 버퍼의 파일 삭제 · 이름변경 결과를 "버퍼 보존 + external_change_pending 표시 + 닫기 시 AC-03 처분"으로 고정 (planning-inputs §7) v1.1.1 / 79991d04
1 OBJ-1-Analyst-2 Analyst no carried → Planning BDD AC-08 을 "실행" 과 "설치 직후 템플릿 · 전제 검사" 두 시나리오로 분리 v1.1.1 / 79991d04
1 OBJ-1-Analyst-3 Analyst no escalated → 상위 파이프라인 D-013: AC-22 는 상위 RollbackPrecheck 확장 없이는 MET 불가 — 하드 의존, 기각 시 새 Seed (planning-inputs §1.1 #2) v1.1.1 / 79991d04
1 OBJ-1-Analyst-4 Analyst no carried → Breakdown AC-01 판정 인프라: analysis_options.yaml exclude 를 도너 파일로 좁히는 Story 를 AC-01 Story 에 선행 v1.1.1 / 79991d04
1 OBJ-1-Analyst-5 Analyst no carried → Planning BDD AC-01 · AC-06 의 .gitignore 판정 = git check-ignore 결과로 고정 v1.1.1 / 79991d04
1 OBJ-1-PM-1 PM no escalated → 상위 파이프라인 D-018 기존 폴더 열기 — Development 착수 전 확정 필수(P1 ROI) v1.1.1 / 79991d04
1 OBJ-1-PM-2 PM no carried → Planning PRD 첫 릴리스의 "검사" = 진단 + 터미널 출력임을 PRD 가치 서술에 명시 v1.1.1 / 79991d04
1 OBJ-1-PM-3 PM no escalated → 오너 Breakdown(ZenHub 이슈 생성) 전 Q1 개별 확답 v1.1.1 / 79991d04
1 OBJ-1-PM-4 PM no carried → Planning serverpodStart 템플릿: Serverpod 3.x 대체 템플릿 또는 "4.x 전용" 표기 결정 v1.1.1 / 79991d04
1 OBJ-1-Architect-1 Architect no carried → Design PTY spawn 은 Process.start 가 아님 — 런처에 PTY 경로 추가 + check_process_launch_allowlist.py 를 Pty.start/FFI 심볼까지 확장 v1.1.1 / 79991d04
1 OBJ-1-Architect-2 Architect no escalated → 상위 파이프라인 D-013 구현 가능 확인(SnapshotChainStore.snapshotsOfTask · RollbackTargetSet.structuralConflicts) — core/workspace 변경이라 상위 Story 라우팅 v1.1.1 / 79991d04
1 OBJ-1-Architect-3 Architect no carried → Design DiagnosticsSink 를 core/lib/src/contract/contracts.dart 에 신설(contractTypes 12→13, DD-02a 테스트 갱신) · 언어 서버 SandboxProfile 결정 v1.1.1 / 79991d04
1 OBJ-1-Architect-4 Architect no carried → Design DD-06: content · scrollback 은 컨트롤러/버퍼 객체에, Bloc 엔 dirty · 탭 목록 같은 저빈도 요약만 v1.1.1 / 79991d04
1 OBJ-1-Architect-5 Architect no carried → Design .gitignore matcher 선택(중첩 · 부정 패턴) · 검색은 isolate 스트리밍 v1.1.1 / 79991d04
1 OBJ-1-Architect-6 Architect no carried → Design 명령 셸을 로그인 셸(-l)로 기동해 PATH 복원(flutter_ide §6-e 결함 재현 방지) v1.1.1 / 79991d04
1 OBJ-1-Architect-7 Architect no withdrawn(부재 확인) main 채널 전용 API 요구 없음(상위 D-025 정합) v1.1.1 / 79991d04

판정과 권고

  1. Specification Gate Passed — Seed v1.1.1 은 LOCKED 이며 후속 단계(Planning)는 이 문서를 확정 계약으로 취급한다. 단 A-01(Dart 풀스택)은 잠정 결정 상태로 잠겼으므로, Breakdown 이 ZenHub 이슈를 만들어 외부에 노출하기 전에 오너의 Q1 개별 확답을 받는다(OBJ-1-PM-3 · D-014).
  2. 상위 파이프라인 결정 2건이 하드 의존이다 — D-013(롤백 사전검사 체인 불연속 조건, AC-22)과 D-018(기존 폴더 열기, 도그푸딩 · P1 ROI). 둘 다 Planning 은 막지 않으나 Development 착수 전 확정돼야 하며, D-013 기각 시 C-03 이 불변이라 새 Seed 가 필요하다.
  3. 패널의 비차단 지적 16건은 위 round table 의 disposition 대로 Planning(BDD 5건 · PRD 2건) · Design(5건) · Breakdown(1건) · 상위/오너(3건) 로 이관했고 docs/planning-inputs-fullstack-code-editor.md §7 에 같은 목록을 둔다.
  4. 이 평가의 한계: 채점 · 반론 · 단순화 · 감사 · 패널이 전부 같은 세션의 fork 다(Summary 고지). 교차 모델 합의가 필요하면 사람 또는 다른 백엔드 리뷰어로 에스컬레이트한다.

Generated by cc-spec:evaluate · 2026-09-16