diff --git a/confluence-mdx/tests/test_reverse_sync_patch_builder.py b/confluence-mdx/tests/test_reverse_sync_patch_builder.py
index ef32f8ac6..e07645279 100644
--- a/confluence-mdx/tests/test_reverse_sync_patch_builder.py
+++ b/confluence-mdx/tests/test_reverse_sync_patch_builder.py
@@ -2967,6 +2967,57 @@ def test_image_anchor_list_keeps_collapsed_text_diff(self):
)
assert patches[0]['new_plain_text'] == '목록 좌측 상단에서 Delete 버튼을 클릭합니다.'
+ def test_image_anchor_list_marker_ws_change_produces_patch(self):
+ """이미지 preserved anchor 리스트의 마커 뒤 공백 변경도 패치를 생성한다."""
+ xhtml = (
+ '
목록 좌측 상단에서 Delete 버튼을 클릭합니다.
'
+ ''
+ ''
+ '
'
+ )
+ old_content = (
+ '4. 목록 좌측 상단에서 Delete 버튼을 클릭합니다.
\n'
+ ' \n'
+ '
\n'
+ ' \n'
+ )
+ new_content = (
+ '4. 목록 좌측 상단에서 Delete 버튼을 클릭합니다.
\n'
+ ' \n'
+ '
\n'
+ ' \n'
+ )
+ change = _make_change(0, old_content, new_content, type_='list')
+ mapping = BlockMapping(
+ block_id='list-image-ws-1',
+ type='list',
+ xhtml_xpath='ol[1]',
+ xhtml_text=xhtml,
+ xhtml_plain_text='목록 좌측 상단에서 Delete 버튼을 클릭합니다.',
+ xhtml_element_index=0,
+ children=[],
+ )
+ roundtrip_sidecar = _make_roundtrip_sidecar([
+ SidecarBlock(0, 'ol[1]', xhtml, sha256_text(old_content), (1, 4))
+ ])
+
+ patches, _, skipped = build_patches(
+ [change], [change.old_block], [change.new_block],
+ mappings=[mapping],
+ roundtrip_sidecar=roundtrip_sidecar,
+ )
+
+ assert len(patches) == 1, (
+ f"마커 공백만 변경된 이미지 preserved anchor 리스트도 패치를 생성해야 합니다. skipped={skipped}"
+ )
+ assert patches[0].get('action') == 'replace_fragment', (
+ f"preserved anchor 리스트는 replace_fragment 패치여야 합니다: {patches[0]}"
+ )
+ new_xhtml = patches[0].get('new_element_xhtml', '')
+ assert '