Phase 4: 서브 배너 카운트 제거 증거
2026-10-30, PRD DEC-009. 제품 변경은 SubBannerCarousel.swift의 overlay 6줄 및 pageIndicator helper/구분 공백 17줄 삭제뿐이다(181→158줄). 원본 줄 7580, 118134를 제외한 문자열과 최종 파일의 완전 일치를 확인했다. 접근성 페이지/전체 라벨, 제스처·순환·타이머·레이아웃은 동일하다.
소스 연결
- 변경 전 SHA256:
b3e4c5333cf8249ccd7773b5cabd372efb5a5565323bd7778034e110386151fd. - 변경 후/runner 실행 전/컴파일 대상/실행 후 SHA256:
15ade1c2e0cd26fca4b0e1833bbb08aa42627335a8c79099528caedc337015d8. - 기존
BannerCarousel.swiftSHA256:3dc39a2bcb081ed0013a8940f22537b79765353881e0f9468aae98f547bcde19. 메인 배너 및 기존 harness/UI tests/runner/project generator 해시 불변 확인.
실행 명령과 결과
첫 도구 호출에서 RUN_TMP=$(mktemp -d "/var/folders/yh/8xsbvpsj5wg2qnxzxdp11_gm0000gn/T/opencode/no-count.XXXXXX")로 소유 root no-count.zj3m6P 및 OWNED-RESOURCES.txt 정리 TODO를 생성했다. 모든 shell에서 이 root의 TMPDIR, NODE_COMPILE_CACHE, BUN_INSTALL_CACHE_DIR를 사용했고 기존 runner도 그 아래 module/cache/tmp를 사용했다.
export RUN_TMP=/var/folders/yh/8xsbvpsj5wg2qnxzxdp11_gm0000gn/T/opencode/no-count.zj3m6P
export TMPDIR="$RUN_TMP/" NODE_COMPILE_CACHE="$RUN_TMP/node-cache" BUN_INSTALL_CACHE_DIR="$RUN_TMP/bun-cache"
export KINGFISHER_MODULE_PATH=/Users/klaus/Library/Developer/Xcode/DerivedData/SodaLive-clzdtvqrsfonoxcijatzkrqdzrsu/Build/Products/Debug-iphonesimulator
bash work/tests/check-sub-banners.sh --ui
xcrun simctl create NoCount-zj3m6P com.apple.CoreSimulator.SimDeviceType.iPhone-SE-3rd-generation com.apple.CoreSimulator.SimRuntime.iOS-18-3
export SB_SIMULATOR_ID=755670D7-8F09-458C-9B2A-8707973E1B38 SB_RUN_ROOT="$RUN_TMP" SB_RUN_NAME=no-count
xcrun simctl boot "$SB_SIMULATOR_ID"
xcrun simctl bootstatus "$SB_SIMULATOR_ID" -b
bash work/tests/run-sub-banner-gesture-tests.sh \
-only-testing:GestureUITests/SubBannerGestureUITests/testManualBoundaryFrames \
-only-testing:GestureUITests/SubBannerGestureUITests/testSwipeDoesNotTap
xcrun xcresulttool get test-results summary --path "$RUN_TMP/no-count.xcresult"
xcrun xcresulttool export attachments --test-id 'SubBannerGestureUITests/testManualBoundaryFrames()' \
--path "$RUN_TMP/no-count.xcresult" --output-path "$RUN_TMP/attachments"
--ui: exit 0, production carousel/model/UIKit opener iOS16.6 typecheck PASS(설치된 Kingfisher 및 실제 theme/font).- 전용 iPhone SE3, iOS18.3 runtime(실제 OS18.3.1/22D8075), x86_64.
TEST SUCCEEDED, xcodebuild exit 0, 2 tests / 0 failures / 0 skipped. testManualBoundaryFrames: PASS, 15.416초. 실제 좌표 입력으로 1→3→1 양방향 경계 이동, 페이지 접근성 라벨 유지, callback0 확인.testSwipeDoesNotTap: PASS, 9.295초. 실제 swipe 후 callback0, 현재 배너 tap 후 callback1/ID2 확인. 합계 24.711초.- native attachment 1장을 no-count-native.png로 보존하고 직접 열어 확인했다.
BANNER 3은 fixture 이미지 내부 글자이며 카운터가 아니다. 이미지 우측 상단은 파란 이미지 그대로이고 카운트 capsule/텍스트가 없다. 가로 전체 폭과 아래 콘텐츠가 정상 표시된다. - PNG SHA256:
038f3787462ec58907ed31ca22bdb14a14166cde8dcd68188c42d9f77d610c14(750×1334). 원본 attachment3DC829EB-E276-482A-ABF6-939AC29FEAFE.png를 그대로 복사했다.
정리 및 검증 한계
- 소유 앱
invalid.sodalive.gesturefix.Gesture, runnerinvalid.sodalive.gesturefix.GestureUITests.xctrunner에 각각xcrun simctl uninstall "$SB_SIMULATOR_ID" <bundle-id>exit 0.simctl listapps에서 두 bundle 부재 확인 PASS. xcrun simctl shutdown "$SB_SIMULATOR_ID"및xcrun simctl delete "$SB_SIMULATOR_ID"exit 0. 소유 device 디렉터리 부재 확인 PASS.ps -p 35102,35139,35180,34167 -o pid=,comm=출력 없음: runner35102, 앱35139/35180, 해당 simulator launchd34167 모두 종료.- 증거 보존 및 최종 소스 해시 재확인 후
rm -rf "$RUN_TMP",test ! -e "$RUN_TMP"PASS. root 하위 build/xcresult/임시 프레임/cache와OWNED-RESOURCES.txt메모까지 제거했다. 최종 출력:PASS: owned root/cache/note and simulator directory absent. 공유 Kingfisher/DerivedData cache와 기존 device는 삭제하지 않았다. - 새 의존성·테스트·scaffolding·worktree·commit·push 없음. 기존 테스트 2개와 UI typecheck만 실행했으며 전체11개 suite/전체 앱 빌드/실서비스/실기기/VoiceOver 자체 조작은 재검증하지 않았다. LSP 도구는 제공되지 않아 native Swift typecheck 및 harness build/test로 검증했다.