← 이슈 목록

FROM THE WORKSHOP / 이슈

5 노드 SDK skew 가 만든 3-회차 cascade 회귀 (PR #23 → #28 → #34 → #39)

강대종 · 마이너스베타스튜디오

5 노드 SDK skew 가 만든 3-회차 cascade 회귀 (PR #23 → #28 → #34 → #39)

야간 오토파일럿 사이클 #1~#7 (2026-05-29 새벽) 메모요 1.0.7 cycle 에서 같은 root cause 가 세 PR 에 걸쳐 forward/backward 양방향 회귀를 만든 사고. PR 4개 / 23h 전체 추적.

Cascade 타임라인

사이클PR브랜치변경사용 SDK 추정회귀 방향잡힌 시점
#1#23wsl/memoyo-107-undo-snackbar-2026-05-29onReorderItem: _onReorderFav/Normal본진/WSL 3.44.0 (A 그룹)—머지 후 노트북 (3.41.9, B 그룹) analyze 가 4 errors missing_required_argument + undefined_named_parameter catch
~#28mac/memoyo-107-undo-snackbar-2026-05-29 (본진 직접 또는 노트북 작업 추정)onReorderItem → onReorder (deprecated 옛 API)3.41.9 (B 그룹) 위 PASSA→B fix 가 deprecated 회귀본진 3.44.0 위 info-level deprecation surface, 사이클 #7 audit 가 패턴화
~#34mac/memoyo-107-reorder-callback-safety-2026-05-29reorderable.onReorder(0, 1) 직접 호출 테스트 추가3.41.9 (B 그룹, non-null 시그너처) PASSB → A nullable 회귀사이클 #7 본 audit PR 의 merge-gate (3.44.0) rc=1 발견
~#39mac/… (본진 fix)reorderable.onReorder!(...) (bang)3.44.0 PASSA→B fix사이클 #8 ack 시점 머지 완료

3번의 회귀 사이에 매번 fix PR 1개씩 추가. 메모요 1.0.7 cycle 23h 안 4 PR (1 + 3 fix).

Root cause 확정

~/flutter repo 의 commit 3e6c2071664 Deprecate onReorder callback (#178242) (Navaron Bracke, 2026-01-29).

  • 변경: onReorder deprecated + 시그너처 ReorderCallback (non-nullable) → ReorderCallback? (nullable). 새 onReorderItem named arg 도입.
  • 첫 포함 stable: 3.42.0-0.0.pre

5 노드 SDK audit (본진 ssh 1회):

  • 🍎 본진 / 🪟 WSL = 3.44.0 (A 그룹, 변경 포함)
  • 🏭 맥미니 / 💻 노트북 = 3.41.9 (B 그룹, 변경 미포함)
  • 🖥 데스크탑 = flutter 없음 (C 그룹)

A/B 그룹 간 3 minor 차이가 forward-incompatible API + nullable 시그너처 둘 다 만들어, 같은 위젯 호출이 그룹마다 다른 결과:

B 그룹 (3.41.9)            A 그룹 (3.44.0)
─────────────────          ─────────────────
onReorder: required        onReorder?  nullable
onReorderItem: undefined   onReorderItem: valid
direct .onReorder(...)     direct .onReorder(...)  ← ERROR
   PASS                       unchecked_use_of_nullable_value

→ 각 PR 이 작성된 노드의 SDK 위에서는 PASS, 다른 그룹 위에서는 회귀. cascade.

왜 게이트가 못 잡았나

~/claude-skills/autopilot/merge-gate.sh 가 1 SDK 위에서만 flutter analyze 호출. 그 1 SDK 가 PASS = 게이트 PASS = main 머지. 다른 그룹 SDK 회귀는 머지 후 별 노드 analyze 가 catch → fix PR → 같은 패턴 반복.

5 노드 SDK 다양성이 정보 자원 이긴 한데, 게이트가 활용 안 함. strict 노드 (B 그룹) 가 사실상 사후 회귀 catch 기로 운영되는 상태.

해결 방향

본 사이클 #6 의 [[../specs/5node-flutter-sdk-policy-brainstorm.md]] v2 가 옵션 3 안 비교 + 디폴트 픽 = 옵션 3 v2 (B 그룹 2 노드만 cron audit) 강화.

  • v1 옵션 확정 후속 = 형님 ack + trio-vote / mesh-vote.
  • B 그룹 SDK 업그레이드 (3.42.0+) → forward migration (onReorder → onReorderItem) 묶음 PR.
  • 본 사이클 결과로 SDK 정책 v1 시급성 강화 (단순한 docs 자산이 아니라 메모요 cycle 비용 직접 영향).

재발 방지 룰 후보

  • 메모리 신규: [[../../projects/-home-ssamssae/memory/feedback_5node_sdk_skew_cascade_regression.md]] — 5 노드 SDK skew cascade 가 cycle 비용 직접 만든다, SDK 정책 v1 우선순위 상승.
  • ack 4티어 변경: “merge-gate 자체 호출 rc=0” 단일 노드 기준 → 본진/B 그룹 cross-check 옵션 강제 (옵션 2 v2 진입 시).
  • audit 자동화: cron audit 인프라 (옵션 3 v2) 가 mesh-report 채널 으로 회귀 신호 즉시 surface.

관련 PR / 사이클 references

  • PR #23 (UNDO 스낵바), PR #28 (회귀 fix), PR #34 (reorder 콜백 안전망 테스트), PR #39 (nullable bang fix)
  • PR #33 (SDK 정책 v1 draft), PR #35 (SDK 정책 v2 audit), PR #37 (deprecated API audit + §8 cascade 재현 발견)
  • Flutter commit 3e6c2071664 (~/flutter), Flutter PR #178242

사고 카테고리

infrastructure / forcing function 부족 — SDK 다양성을 정보 자원으로 활용하지 못하고 사후 회귀 catch 기로 운영. 단일 PR 가치 평가 자체는 정상 (각 PR 자기 노드 위에서 PASS) 인데 mesh 차원에서 cascade.

기록은 다음 시작이 됩니다.이슈 더 읽기 ↗이 작업장의 제품 ↗
작업장 전체 페이지 목적에 맞는 페이지 찾기