Skip to content

배치 규범 · 워크플로우 문서 · CI 검증 연결 · 싱글턴 정리 - #22

Merged
dongglehada merged 7 commits into
mainfrom
chore/conventions-and-ci
Aug 22, 2026
Merged

dongglehada merged 7 commits into
mainfrom
chore/conventions-and-ci

Conversation

@dongglehada

Copy link
Copy Markdown
Contributor

변경 사항

DECISIONS.md의 권고 넷을 그대로 실행합니다. 커밋 다섯 개로 나눴습니다.

1. 계획서를 고쳤습니다 (5b04932) — 스스로 모순이었습니다. 규칙 절에는 "테스트를 먼저 쓰고 옮긴다"고 적어놓고 실행 절차는 "복사 → 테스트"였습니다.

뷰 안 로직은 테스트를 쓸 수가 없어서(테스트 타깃이 App/을 못 봅니다) "리팩터링 전에 테스트"를 글자 그대로는 못 합니다. 대신 옮기기 전에 원본을 돌려 기대값을 뽑아두고 그 값으로 새 타입을 검증합니다. 그러면 옮기다 생긴 실수가 정답으로 굳지 않습니다. 추출할 때마다 세 줄을 기록하는 절차도 넣었습니다.

2. 코드 배치 규범 (35338e6, D2) — 이름 붙은 아키텍처 대신 규범 문서로 갑니다. 지금 확정 가능한 것만 담고 미정 다섯 개는 "미정"이라고 적어뒀습니다. 특히 데이터 접근을 어느 갈래로 통일할지는 추출을 해봐야 근거가 생깁니다.

3. 워크플로우 문서 재작성 (db8f975) — 절차만 있던 것을 근거까지 담아 다시 썼습니다. 네 버전 지표 추이, 단계마다 담당 규칙·지표·성적, 각 단계를 만든 실제 사건, 어디에서 무엇이 검증되는지, 그리고 못 잡은 것 넷과 그것이 어느 칸의 부재였는지.

4. CI에 두 스크립트 (5848405, D4) — 계약 검사는 실패시키고, 품질 기준선은 기록만 합니다. 리팩터링 중에는 숫자가 잠깐 나빠지는 구간이 있고 그때마다 빨간불이면 규칙이 일을 막습니다.

5. 싱글턴 두 줄 (89bc12b, D5-A) — TodoActions가 이미 주입된 환경을 쓰게 했습니다.

확인 등급

새로 만든 기준(review-criteria.md)을 이 PR부터 적용합니다.

🔴 반드시 보세요 — 하나

Mosco/App/Features/Calendar/TodoActions.swift — 싱글턴을 환경 주입으로 바꿨습니다. 컴파일로는 못 잡는 종류입니다. 환경 주입이 빠진 경로가 있으면 런타임에 크래시합니다. 호출부 둘(TodoRow, TimelineBlock)이 모두 RootTabView 아래인 것을 확인했지만, 확인은 사람이 합니다. 아래 카드 1번.

🟡 훑어보세요

.github/workflows/ci.yml — 단계 둘 추가. 이 PR의 CI 실행 자체가 검증입니다.

🟢 안 보셔도 됩니다

docs/** 문서 넷. 되돌리기가 한 줄입니다.

체크리스트

  • 빌드 통과 (App / MoscoWidget / Mac Catalyst)
  • 관련 테스트 통과 — 112건. 새 테스트 없음: 문서 넷과 CI 설정, 그리고 동작이 같은 2줄 변경입니다
  • 화면 확인이 필요한 것은 아래 카드
  • 불필요한 로그/주석 제거 — // TEMP: 0건

확인한 것

  • tools/artifact_check.sh와 quality_baseline.py를 로컬에서 돌려 통과를 봤고, CI YAML은 파싱해서 단계 순서를 확인했습니다.
  • 싱글턴 변경은 호출부를 전수로 확인했습니다 — TodoActions를 쓰는 곳은 TodoRow:176과 DayTimelineView:226 둘뿐이고, 둘 다 RootTabView가 주입하는 환경 아래입니다.
  • SettingsScreen이 시트로 뜨면서도 같은 환경을 이미 쓰고 있어서, 시트 경계에서 환경이 끊기지 않는 것도 확인했습니다.

검증 카드

■ 라이브 액티비티 메뉴 [실기기 권장]

  • 하기: 시각을 정한 할 일을 꾹 눌러 메뉴를 연다. '잠금화면에 남은 시간 표시'를 누른다. 다시 꾹 눌러 '잠금화면에서 내리기'
  • 통과: 메뉴 항목이 보이고, 띄우고 내리는 것이 예전과 같다. 이미 띄운 항목은 문구가 '내리기'로 바뀌어 있다
  • 실패: 앱이 죽는다(환경 주입이 안 닿은 것) / 메뉴에 항목이 없다 / 문구가 안 바뀐다

이 카드가 통과하면 D5의 나머지(튜토리얼 창, 테마 색)도 같은 방식으로 갈 수 있습니다.

위임했으면 쌌을 곳

없었습니다. 문서 작성은 이번 세션의 맥락이 필요했고, 나머지는 파일 두세 개짜리였습니다.

관련 이슈

없음 (DECISIONS.md D1·D2·D4·D5 실행)

dongglehada and others added 7 commits August 22, 2026 20:14
계획서가 스스로 모순이었다. 규칙 절에는 "테스트를 먼저 쓰고 옮긴다"고
적어놓고 실행 절차는 "복사 → 테스트"로 적혀 있었다.

뷰 안 로직은 테스트를 쓸 수가 없다(테스트 타깃이 App/을 못 본다). 그래서
"리팩터링 전에 테스트"를 글자 그대로 적용하면 시작을 못 한다. 대신 옮기기
전에 원본을 돌려 기대값을 뽑아두고, 그 값으로 새 타입을 검증한다. 그러면
옮기다 생긴 실수가 정답으로 굳지 않는다.

추출할 때마다 세 줄을 기록하는 절차도 넣었다 — 무엇과 같이 움직였나,
뷰에 무엇이 남았나, @query가 필요했나. 13개가 쌓이면 PATTERNS의 적합도를
추론이 아니라 관측으로 다시 채운다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
이름 붙은 아키텍처 대신 규범 문서로 간다. 근거는 DECISIONS.md D2에 있고,
요지는 이 저장소에서 실제로 일관성을 만든 것이 DesignSystem/README.md였다는
것이다 — 규범 드리프트가 두 버전 연속 0이다.

지금 확정할 수 있는 것만 담았다. 미정인 다섯 개는 "미정"이라고 적어뒀다 —
빈칸이 보여야 채워진다. 특히 데이터 접근을 어느 갈래로 통일할지는 추출을
해봐야 근거가 생긴다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
절차만 적힌 문서였는데, 각 단계가 왜 생겼는지를 사건과 숫자로 붙였다.
근거를 지우면 다음 세션이 "이 단계 왜 있지?" 하고 걷어낸다.

담은 것: 네 버전의 지표 추이와 그 해석, 단계마다 담당 규칙·지표·성적,
각 단계를 만든 실제 사건(14개 목록 중 절반이 사라진 것, 시뮬레이터
1,015회로 산 것, 스와이프 3연속 오진), 워크플로우 어디에서 무엇이
검증되는지, 그리고 못 잡은 것 넷과 그것이 어느 칸의 부재였는지.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
계약 검사는 실패시킨다 — entitlements·plist·버전 일치는 컴파일도 테스트도
통과하면서 틀릴 수 있고, v1.3.0에서 두 번 물렸다.

품질 기준선은 실패시키지 않고 기록만 한다. 리팩터링 중에는 숫자가 잠깐
나빠지는 구간이 있고, 그때마다 빨간불이면 규칙이 일을 막는다. 대신 매
실행에 GitHub 요약으로 남겨 추세를 본다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
RootTabView가 이미 같은 인스턴스를 .environment로 주입하고 있는데 여기서만
.shared를 직접 불렀다. 같은 타입을 두 방식으로 쓰면 테스트나 프리뷰에서
갈아끼울 자리가 사라진다.

동작은 같다. 다만 환경 주입이 빠진 경로가 있으면 런타임에 크래시하는
종류의 변경이라 컴파일로는 못 잡는다 — 호출부 둘(TodoRow, TimelineBlock)이
모두 RootTabView 아래인 것을 확인했고, 검증 카드로도 넘긴다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
"되물었으면 다음 프롬프트를 돕는 한 줄을 남긴다"가 규칙(R5)과 스킬(/intake)에는
있는데 워크플로우 문서와 도식에는 빠져 있었다. 그리고 v1.3.0에서 다섯 번
되묻고 한 번도 안 남겼다 — 규칙에 "같은 종류가 반복될 때만"이라는 단서가
있었고, 판단이 필요한 규칙은 판단하기 전에 잊힌다.

"검토는 매번, 남기는 것은 판단"으로 바꿨다. 답을 받은 직후에 남길 것이 있나를
매번 보고, 없으면 안 남긴다. 두 번째로 같은 종류가 갈리면 반드시 남긴다.

지표는 안 만들었다. 셀 수는 있지만 지표를 늘리는 것도 비용이라 한 버전
지켜보고 정한다. 그 사실도 문서에 적어뒀다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
R3의 담당 지표인 검증 통과율의 원본 데이터다. v1.2.0 이후 한 줄도 안 쌓여
있었다 — 카드는 나갔는데 결과를 안 적었다.

라이브 액티비티 메뉴는 이번 싱글턴 변경(#22)의 확인이다. 환경 주입으로
바꾼 뒤에도 문구가 관찰을 따라 바뀌는 것을 실기기에서 확인했다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@dongglehada
dongglehada merged commit cd641f3 into main Aug 22, 2026
1 check passed
@dongglehada
dongglehada deleted the chore/conventions-and-ci branch August 22, 2026 14:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant