- generic [active] [ref=e1]:
  - checkbox "Toggle sidebar ⌘B" [checked=mixed] [ref=e2]
  - navigation [ref=e3]:
    - list [ref=e4]:
      - generic "Toggle sidebar ⌘B" [ref=e5]
      - listitem [ref=e6]:
        - link "Roomfit v2 — Spec Map" [ref=e7] [cursor=pointer]:
          - /url: ./
    - generic [ref=e8]:
      - searchbox "Search" [ref=e9]
      - text: ⌘K
    - list [ref=e11]:
      - listitem [ref=e12]:
        - link "개요" [ref=e13] [cursor=pointer]:
          - /url: ./
      - listitem [ref=e14]:
        - link "화면" [ref=e15] [cursor=pointer]:
          - /url: ./screens
      - listitem [ref=e16]:
        - link "Use case" [ref=e17] [cursor=pointer]:
          - /url: ./use-cases
      - listitem [ref=e18]:
        - link "시나리오" [ref=e19] [cursor=pointer]:
          - /url: ./scenarios
      - listitem [ref=e20]:
        - link "데이터 흐름" [ref=e21] [cursor=pointer]:
          - /url: ./data-flow
  - generic [ref=e22]:
    - banner [ref=e23]: Roomfit v2 Spec — 자동 추출 + 수동 보강
    - complementary [ref=e24]:
      - navigation [ref=e25]:
        - generic [ref=e26]: Contents
        - list [ref=e27]:
          - listitem [ref=e28]:
            - link "Use case 카탈로그" [ref=e29] [cursor=pointer]:
              - /url: "#use-case-1"
          - listitem [ref=e30]:
            - link "한 use case 깊게 보기" [ref=e31] [cursor=pointer]:
              - /url: "#use-case-2"
          - listitem [ref=e32]:
            - link "b2c/b2b 공유 매트릭스" [ref=e33] [cursor=pointer]:
              - /url: "#b2c-b2b"
    - main [ref=e34]:
      - heading "Use case" [level=1] [ref=e35]:
        - link "Use case" [ref=e36] [cursor=pointer]:
          - /url: "#use-case"
      - paragraph [ref=e37]: 도메인 layer (packages/) 의 use case 가 어디에서 쓰이는지 역추적. 한 use case 가 b2c/b2b 어디 다 쓰이는지, 어떤 command/response 와 묶이는지.
      - heading "Use case 카탈로그" [level=2] [ref=e38]:
        - link "Use case 카탈로그" [ref=e39] [cursor=pointer]:
          - /url: "#use-case-1"
      - table [ref=e70]:
        - rowgroup [ref=e71]:
          - row "Use case package intent (수동) 쓰는 provider 쓰는 app 발사 cmd 수신 resp path" [ref=e72]:
            - columnheader [ref=e73]:
              - checkbox [ref=e74]
            - columnheader "Use case" [ref=e75]: Use case
            - columnheader "package": package
            - columnheader "intent (수동)" [ref=e76]: intent (수동)
            - columnheader "쓰는 provider": 쓰는 provider
            - columnheader "쓰는 app": 쓰는 app
            - columnheader "발사 cmd": 발사 cmd
            - columnheader "수신 resp": 수신 resp
            - columnheader "path" [ref=e77]: path
        - rowgroup [ref=e78]:
          - row "MockDeviceGateway roomfit_device 0 0 9 8 packages/roomfit_device/lib/src/testing/mock_device_gateway.dart" [ref=e79]:
            - cell [ref=e80]:
              - checkbox [ref=e81]
            - cell "MockDeviceGateway" [ref=e82]
            - cell "roomfit_device"
            - cell [ref=e83]
            - cell "0"
            - cell "0"
            - cell "9"
            - cell "8"
            - cell "packages/roomfit_device/lib/src/testing/mock_device_gateway.dart" [ref=e84]
          - row "AcwrCalculator roomfit_exercise 0 0 0 0 packages/roomfit_exercise/lib/src/load/acwr_calculator.dart" [ref=e85]:
            - cell [ref=e86]:
              - checkbox [ref=e87]
            - cell "AcwrCalculator" [ref=e88]
            - cell "roomfit_exercise"
            - cell [ref=e89]
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_exercise/lib/src/load/acwr_calculator.dart" [ref=e90]
          - row "RecordedSession roomfit_exercise 3 1 0 0 packages/roomfit_exercise/lib/src/recording/recorded_session.dart" [ref=e91]:
            - cell [ref=e92]:
              - checkbox [ref=e93]
            - cell "RecordedSession" [ref=e94]
            - cell "roomfit_exercise"
            - cell [ref=e95]
            - cell "3"
            - cell "1"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_exercise/lib/src/recording/recorded_session.dart" [ref=e96]
          - row "RoomfitExtendedMetricsCalculator roomfit_exercise 0 0 0 0 packages/roomfit_exercise/lib/src/metrics/calculators/roomfit_extended_calculator.dart" [ref=e97]:
            - cell [ref=e98]:
              - checkbox [ref=e99]
            - cell "RoomfitExtendedMetricsCalculator" [ref=e100]
            - cell "roomfit_exercise"
            - cell [ref=e101]
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_exercise/lib/src/metrics/calculators/roomfit_extended_calculator.dart" [ref=e102]
          - row "SessionRecorder roomfit_exercise 3 1 0 0 packages/roomfit_exercise/lib/src/recording/session_recorder.dart" [ref=e103]:
            - cell [ref=e104]:
              - checkbox [ref=e105]
            - cell "SessionRecorder" [ref=e106]
            - cell "roomfit_exercise"
            - cell [ref=e107]
            - cell "3"
            - cell "1"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_exercise/lib/src/recording/session_recorder.dart" [ref=e108]
          - row "SixStateFsmRepDetector roomfit_exercise 8 2 0 0 packages/roomfit_exercise/lib/src/segmentation/detectors/six_state_fsm/six_state_fsm_detector.dart" [ref=e109]:
            - cell [ref=e110]:
              - checkbox [ref=e111]
            - cell "SixStateFsmRepDetector" [ref=e112]
            - cell "roomfit_exercise"
            - cell [ref=e113]
            - cell "8"
            - cell "2"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_exercise/lib/src/segmentation/detectors/six_state_fsm/six_state_fsm_detector.dart" [ref=e114]
          - row "StandardVbtMetricsCalculator roomfit_exercise rep displacement/속도/파워/MCV 계산. velocityMeaningful 모드 분기 8 2 0 0 packages/roomfit_exercise/lib/src/metrics/calculators/standard_vbt_calculator.dart" [ref=e115]:
            - cell [ref=e116]:
              - checkbox [ref=e117]
            - cell "StandardVbtMetricsCalculator" [ref=e118]
            - cell "roomfit_exercise"
            - cell "rep displacement/속도/파워/MCV 계산. velocityMeaningful 모드 분기" [ref=e119]
            - cell "8"
            - cell "2"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_exercise/lib/src/metrics/calculators/standard_vbt_calculator.dart" [ref=e120]
          - row "VelocitySignFlipRepDetector roomfit_exercise 0 0 0 0 packages/roomfit_exercise/lib/src/segmentation/detectors/velocity_sign_flip/velocity_sign_flip_detector.dart" [ref=e121]:
            - cell [ref=e122]:
              - checkbox [ref=e123]
            - cell "VelocitySignFlipRepDetector" [ref=e124]
            - cell "roomfit_exercise"
            - cell [ref=e125]
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_exercise/lib/src/segmentation/detectors/velocity_sign_flip/velocity_sign_flip_detector.dart" [ref=e126]
          - row "FirmwareUpdateSession roomfit_firmware OTA — YModem + IAP 시퀀스 0 0 0 0 packages/roomfit_firmware/lib/src/session/firmware_update_session.dart" [ref=e127]:
            - cell [ref=e128]:
              - checkbox [ref=e129]
            - cell "FirmwareUpdateSession" [ref=e130]
            - cell "roomfit_firmware"
            - cell "OTA — YModem + IAP 시퀀스" [ref=e131]
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_firmware/lib/src/session/firmware_update_session.dart" [ref=e132]
          - row "PacketBuilder roomfit_protocol RoomfitFrame 인코더 — Command → bytes 0 0 0 0 packages/roomfit_protocol/lib/src/codec/packet_builder.dart" [ref=e133]:
            - cell [ref=e134]:
              - checkbox [ref=e135]
            - cell "PacketBuilder" [ref=e136]
            - cell "roomfit_protocol"
            - cell "RoomfitFrame 인코더 — Command → bytes" [ref=e137]
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_protocol/lib/src/codec/packet_builder.dart" [ref=e138]
          - row "InMemoryShopRepository roomfit_shop 6 1 0 0 packages/roomfit_shop/lib/src/repository/in_memory_shop_repository.dart" [ref=e139]:
            - cell [ref=e140]:
              - checkbox [ref=e141]
            - cell "InMemoryShopRepository" [ref=e142]
            - cell "roomfit_shop"
            - cell [ref=e143]
            - cell "6"
            - cell "1"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_shop/lib/src/repository/in_memory_shop_repository.dart" [ref=e144]
          - row "InMemoryWorkoutRepository roomfit_workout 7 2 0 0 packages/roomfit_workout/lib/src/data/workout_repository.dart" [ref=e145]:
            - cell [ref=e146]:
              - checkbox [ref=e147]
            - cell "InMemoryWorkoutRepository" [ref=e148]
            - cell "roomfit_workout"
            - cell [ref=e149]
            - cell "7"
            - cell "2"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_workout/lib/src/data/workout_repository.dart" [ref=e150]
          - row "RestDetector roomfit_workout 세트 사이 휴식 진입 감지 — WeightOff 이벤트 + 체결시간 5 1 0 0 packages/roomfit_workout/lib/src/domain/use_cases/rest_detector.dart" [ref=e151]:
            - cell [ref=e152]:
              - checkbox [ref=e153]
            - cell "RestDetector" [ref=e154]
            - cell "roomfit_workout"
            - cell "세트 사이 휴식 진입 감지 — WeightOff 이벤트 + 체결시간" [ref=e155]
            - cell "5"
            - cell "1"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_workout/lib/src/domain/use_cases/rest_detector.dart" [ref=e156]
          - row "SessionManager roomfit_workout 세션 단위 — 여러 세트, 운동 종목 entries, 종료 처리 7 2 0 0 packages/roomfit_workout/lib/src/domain/use_cases/session_manager.dart" [ref=e157]:
            - cell [ref=e158]:
              - checkbox [ref=e159]
            - cell "SessionManager" [ref=e160]
            - cell "roomfit_workout"
            - cell "세션 단위 — 여러 세트, 운동 종목 entries, 종료 처리" [ref=e161]
            - cell "7"
            - cell "2"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_workout/lib/src/domain/use_cases/session_manager.dart" [ref=e162]
          - row "SetExecutor roomfit_workout 한 세트의 시작-진행-종료 라이프사이클을 관장. rep 누적, 종료 트리거 7 2 6 0 packages/roomfit_workout/lib/src/domain/use_cases/set_executor.dart" [ref=e163]:
            - cell [ref=e164]:
              - checkbox [ref=e165]
            - cell "SetExecutor" [ref=e166]
            - cell "roomfit_workout"
            - cell "한 세트의 시작-진행-종료 라이프사이클을 관장. rep 누적, 종료 트리거" [ref=e167]
            - cell "7"
            - cell "2"
            - cell "6"
            - cell "0"
            - cell "packages/roomfit_workout/lib/src/domain/use_cases/set_executor.dart" [ref=e168]
          - row "SupabaseWorkoutRepository roomfit_workout 5 1 0 0 packages/roomfit_workout/lib/src/data/supabase_workout_repository.dart" [ref=e169]:
            - cell [ref=e170]:
              - checkbox [ref=e171]
            - cell "SupabaseWorkoutRepository" [ref=e172]
            - cell "roomfit_workout"
            - cell [ref=e173]
            - cell "5"
            - cell "1"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_workout/lib/src/data/supabase_workout_repository.dart" [ref=e174]
          - row "WorkoutRepository roomfit_workout 7 2 0 0 packages/roomfit_workout/lib/src/data/workout_repository.dart" [ref=e175]:
            - cell [ref=e176]:
              - checkbox [ref=e177]
            - cell "WorkoutRepository" [ref=e178]
            - cell "roomfit_workout"
            - cell [ref=e179]
            - cell "7"
            - cell "2"
            - cell "0"
            - cell "0"
            - cell "packages/roomfit_workout/lib/src/data/workout_repository.dart" [ref=e180]
      - heading "한 use case 깊게 보기" [level=2] [ref=e40]:
        - link "한 use case 깊게 보기" [ref=e41] [cursor=pointer]:
          - /url: "#use-case-2"
      - generic [ref=e182]:
        - generic [ref=e183]: Use case 선택
        - combobox "Use case 선택" [ref=e184]:
          - option "roomfit_protocol.PacketBuilder" [selected]
          - option "roomfit_device.MockDeviceGateway"
          - option "roomfit_firmware.FirmwareUpdateSession"
          - option "roomfit_shop.InMemoryShopRepository"
          - option "roomfit_exercise.StandardVbtMetricsCalculator"
          - option "roomfit_exercise.RoomfitExtendedMetricsCalculator"
          - option "roomfit_exercise.VelocitySignFlipRepDetector"
          - option "roomfit_exercise.SixStateFsmRepDetector"
          - option "roomfit_exercise.SessionRecorder"
          - option "roomfit_exercise.RecordedSession"
          - option "roomfit_exercise.AcwrCalculator"
          - option "roomfit_workout.WorkoutRepository"
          - option "roomfit_workout.InMemoryWorkoutRepository"
          - option "roomfit_workout.SupabaseWorkoutRepository"
          - option "roomfit_workout.RestDetector"
          - option "roomfit_workout.SessionManager"
          - option "roomfit_workout.SetExecutor"
      - generic [ref=e187]: "Error: Binder Error: Table \"c\" does not have a column named \"code_hex\" LINE 2: SELECT c.class_name, c.code_hex ^"
      - generic [ref=e42]:
        - generic [ref=e43]:
          - heading "이 use case 를 쓰는 provider" [level=3] [ref=e44]
          - generic [ref=e189]: "RuntimeError: Binder Error: Table \"c\" does not have a column named \"code_hex\" LINE 2: SELECT c.class_name, c.code_hex ^"
        - generic [ref=e46]:
          - heading "도달하는 화면 (transitive)" [level=3] [ref=e47]
          - generic [ref=e191]: "RuntimeError: Binder Error: Table \"c\" does not have a column named \"code_hex\" LINE 2: SELECT c.class_name, c.code_hex ^"
      - generic [ref=e49]:
        - generic [ref=e50]:
          - heading "발사하는 Command" [level=3] [ref=e51]
          - generic [ref=e193]: "RuntimeError: Binder Error: Table \"c\" does not have a column named \"code_hex\" LINE 2: SELECT c.class_name, c.code_hex ^"
        - generic [ref=e53]:
          - heading "수신하는 Response" [level=3] [ref=e54]
          - generic [ref=e195]: "RuntimeError: Binder Error: Table \"c\" does not have a column named \"code_hex\" LINE 2: SELECT c.class_name, c.code_hex ^"
      - heading "b2c/b2b 공유 매트릭스" [level=2] [ref=e56]:
        - link "b2c/b2b 공유 매트릭스" [ref=e57] [cursor=pointer]:
          - /url: "#b2c-b2b"
      - paragraph [ref=e58]: 같은 use case 가 b2c · b2b 둘 다에서 쓰이는지 = packages/ 공유 도메인이 실제로 동작 중인지 확인.
      - table [ref=e198]:
        - rowgroup [ref=e199]:
          - row "use_case package b2c_uses b2b_uses" [ref=e200]:
            - columnheader [ref=e201]:
              - checkbox [ref=e202]
            - columnheader "use_case" [ref=e203]: use_case
            - columnheader "package" [ref=e204]: package
            - columnheader "b2c_uses" [ref=e205]: b2c_uses
            - columnheader "b2b_uses" [ref=e206]: b2b_uses
        - rowgroup [ref=e207]:
          - row "SixStateFsmRepDetector roomfit_exercise 6 2" [ref=e208]:
            - cell [ref=e209]:
              - checkbox [ref=e210]
            - cell "SixStateFsmRepDetector" [ref=e211]
            - cell "roomfit_exercise" [ref=e212]
            - cell "6" [ref=e213]
            - cell "2" [ref=e214]
          - row "StandardVbtMetricsCalculator roomfit_exercise 6 2" [ref=e215]:
            - cell [ref=e216]:
              - checkbox [ref=e217]
            - cell "StandardVbtMetricsCalculator" [ref=e218]
            - cell "roomfit_exercise" [ref=e219]
            - cell "6" [ref=e220]
            - cell "2" [ref=e221]
          - row "InMemoryWorkoutRepository roomfit_workout 2 5" [ref=e222]:
            - cell [ref=e223]:
              - checkbox [ref=e224]
            - cell "InMemoryWorkoutRepository" [ref=e225]
            - cell "roomfit_workout" [ref=e226]
            - cell "2" [ref=e227]
            - cell "5" [ref=e228]
          - row "SessionManager roomfit_workout 2 5" [ref=e229]:
            - cell [ref=e230]:
              - checkbox [ref=e231]
            - cell "SessionManager" [ref=e232]
            - cell "roomfit_workout" [ref=e233]
            - cell "2" [ref=e234]
            - cell "5" [ref=e235]
          - row "SetExecutor roomfit_workout 2 5" [ref=e236]:
            - cell [ref=e237]:
              - checkbox [ref=e238]
            - cell "SetExecutor" [ref=e239]
            - cell "roomfit_workout" [ref=e240]
            - cell "2" [ref=e241]
            - cell "5" [ref=e242]
          - row "WorkoutRepository roomfit_workout 2 5" [ref=e243]:
            - cell [ref=e244]:
              - checkbox [ref=e245]
            - cell "WorkoutRepository" [ref=e246]
            - cell "roomfit_workout" [ref=e247]
            - cell "2" [ref=e248]
            - cell "5" [ref=e249]
          - row "RecordedSession roomfit_exercise 3 0" [ref=e250]:
            - cell [ref=e251]:
              - checkbox [ref=e252]
            - cell "RecordedSession" [ref=e253]
            - cell "roomfit_exercise" [ref=e254]
            - cell "3" [ref=e255]
            - cell "0" [ref=e256]
          - row "SessionRecorder roomfit_exercise 3 0" [ref=e257]:
            - cell [ref=e258]:
              - checkbox [ref=e259]
            - cell "SessionRecorder" [ref=e260]
            - cell "roomfit_exercise" [ref=e261]
            - cell "3" [ref=e262]
            - cell "0" [ref=e263]
          - row "InMemoryShopRepository roomfit_shop 0 6" [ref=e264]:
            - cell [ref=e265]:
              - checkbox [ref=e266]
            - cell "InMemoryShopRepository" [ref=e267]
            - cell "roomfit_shop" [ref=e268]
            - cell "0" [ref=e269]
            - cell "6" [ref=e270]
          - row "RestDetector roomfit_workout 0 5" [ref=e271]:
            - cell [ref=e272]:
              - checkbox [ref=e273]
            - cell "RestDetector" [ref=e274]
            - cell "roomfit_workout" [ref=e275]
            - cell "0" [ref=e276]
            - cell "5" [ref=e277]
          - row "SupabaseWorkoutRepository roomfit_workout 0 5" [ref=e278]:
            - cell [ref=e279]:
              - checkbox [ref=e280]
            - cell "SupabaseWorkoutRepository" [ref=e281]
            - cell "roomfit_workout" [ref=e282]
            - cell "0" [ref=e283]
            - cell "5" [ref=e284]
          - row "MockDeviceGateway roomfit_device 0 0" [ref=e285]:
            - cell [ref=e286]:
              - checkbox [ref=e287]
            - cell "MockDeviceGateway" [ref=e288]
            - cell "roomfit_device" [ref=e289]
            - cell "0" [ref=e290]
            - cell "0" [ref=e291]
          - row "AcwrCalculator roomfit_exercise 0 0" [ref=e292]:
            - cell [ref=e293]:
              - checkbox [ref=e294]
            - cell "AcwrCalculator" [ref=e295]
            - cell "roomfit_exercise" [ref=e296]
            - cell "0" [ref=e297]
            - cell "0" [ref=e298]
          - row "RoomfitExtendedMetricsCalculator roomfit_exercise 0 0" [ref=e299]:
            - cell [ref=e300]:
              - checkbox [ref=e301]
            - cell "RoomfitExtendedMetricsCalculator" [ref=e302]
            - cell "roomfit_exercise" [ref=e303]
            - cell "0" [ref=e304]
            - cell "0" [ref=e305]
          - row "VelocitySignFlipRepDetector roomfit_exercise 0 0" [ref=e306]:
            - cell [ref=e307]:
              - checkbox [ref=e308]
            - cell "VelocitySignFlipRepDetector" [ref=e309]
            - cell "roomfit_exercise" [ref=e310]
            - cell "0" [ref=e311]
            - cell "0" [ref=e312]
          - row "FirmwareUpdateSession roomfit_firmware 0 0" [ref=e313]:
            - cell [ref=e314]:
              - checkbox [ref=e315]
            - cell "FirmwareUpdateSession" [ref=e316]
            - cell "roomfit_firmware" [ref=e317]
            - cell "0" [ref=e318]
            - cell "0" [ref=e319]
          - row "PacketBuilder roomfit_protocol 0 0" [ref=e320]:
            - cell [ref=e321]:
              - checkbox [ref=e322]
            - cell "PacketBuilder" [ref=e323]
            - cell "roomfit_protocol" [ref=e324]
            - cell "0" [ref=e325]
            - cell "0" [ref=e326]
    - contentinfo [ref=e59]:
      - navigation [ref=e60]:
        - link "Previous page 화면" [ref=e61] [cursor=pointer]:
          - /url: ./screens
          - text: Previous page
          - generic [ref=e62]: 화면
        - link "Next page 시나리오" [ref=e63] [cursor=pointer]:
          - /url: ./scenarios
          - text: Next page
          - generic [ref=e64]: 시나리오
      - generic [ref=e65]:
        - text: "Source: /Volumes/WorkSSD/Projects/RoomfitV2 · build via"
        - code [ref=e66]: make extract && npm run build