Skip to content

fix(core): 여는 쪽이 막힌 강조를 같은 줄의 거울 마커와 짝짓는다 - #100

Merged
minjun0219 merged 2 commits into
mainfrom
fix/hemmed-opener
Oct 2, 2026
Merged

minjun0219 merged 2 commits into
mainfrom
fix/hemmed-opener

Conversation

@minjun0219

@minjun0219 minjun0219 commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

값**(합계)**를 · 이름이**"홍길동"**이다 처럼 여는 ** 앞이 글자이고 뒤가 구두점이면, 전에는 첫 ** 는 버리고 둘째는 글자로 남겼다(모든 채널). 같은 줄의 거울 모양 마커와 짝짓고, 짝이 없으면 버리지 않고 글자로 되돌린다. #99 위에 쌓은 PR 이다.

변경 사항

추측을 닫지 않는 규칙의 예외

그 규칙은 글롭(.* (4개)) · 주석(/* */)에서 실측으로 나왔다. 예외를 "여는 쪽 뒤가 구두점 + 같은 줄 + 같은 길이 + 닫는 쪽 앞이 구두점" 으로 좁혀서 글롭 · 주석(여는 쪽 뒤가 공백) · 마스킹 번호(길이 다름)는 걸리지 않는다. 코퍼스 · 퍼즈 · 대조 테스트가 그대로 통과한다.
crates/mdwire-core/src/inline.rs:330

짝 없는 막힌 마커는 글자로

2**(n-1) 이 2(n-1) 이 되던 것(내용 손실)을 고친다. 버리던 것을 되돌리는 쪽이라 보고의 droppedMarker 가 그만큼 준다.
crates/mdwire-core/src/inline.rs:515

검증

게이트 전부 통과(코퍼스 162회 · 불일치 0, Go 대조, 할당 게이트 — 할당 수는 main 과 같고 바이트만 +32). 슬랙(chat.postMessage) · 노션(커넥터)에서 굵게로 실측. 수식 x**(y)**z 처럼 한 줄에 거울 모양이 나오면 굵게로 읽히는 것은 위에 쌓은 PR 에서 거른다(양 끝이 ASCII 영숫자면 짝짓지 않는다).

모든 리뷰 코멘트는 한국어로 작성해 주세요.

🤖 Generated with Claude Code

@minjun0219
minjun0219 added this pull request to stack #101 October 2, 2026 13:13
@minjun0219
minjun0219 marked this pull request as ready for review October 2, 2026 22:44
Base automatically changed from fix/slack-nested-joiner to main October 2, 2026 22:46
`값**(합계)**를` · `이름이**"홍길동"**이다` 처럼 여는 `**` 앞이 글자이고 뒤가 구두점이면 CommonMark 는 열지
않는다. 지금까지는 첫 `**` 를 추측으로 열었다가 블록 끝에서 버리고, 둘째 `**` 는 "추측은 닫지 않는다" 규칙에
걸려 글자로 남겼다 — 하나는 사라지고 하나만 보이는 가장 나쁜 결과였다. 이 프로젝트를 시작하게 한 모양 가운데
하나다.

- 막힌 여는 마커는 같은 줄에서 같은 길이 · 앞이 구두점인 마커(거울 모양)와 짝짓는다. 추측을 닫지 않는 규칙을
  만든 글롭 · 주석은 여는 쪽 뒤가 공백이고, 마스킹 번호는 길이가 달라 걸리지 않는다
- 짝 없는 막힌 마커는 버리지 않고 글자로 되돌린다 — `2**(n-1)` 이 `2(n-1)` 이 되던 것
- Rust · Go · 하네스 참조 모델 같이. 코퍼스 `hemmed-opener-before-punct`
- 출력은 닫는 쪽 장치를 그대로 탄다(GitHub `<strong>`, 슬랙 U+2060). 슬랙 · 노션에서 굵게로 실측(2026-10-02)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 58a5b44350

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/mdwire-core/src/inline.rs Outdated
Comment thread crates/mdwire-core/src/inline.rs
PR #100 의 Codex 리뷰 두 건을 반영한다.

- 막힌 여는 마커의 거울 짝은 앞이 여는 괄호·따옴표(`([{「『(【《“‘`)가 아니어야 한다.
  `2**(n-1) (**주의**)` 의 둘째 `**` 를 거울로 삼키면 `(` 까지 굵어지고 셋째가 글자로
  남았다. 이제 막힌 마커는 글자로 돌아가고 `**주의**` 가 온전히 열린다. ASCII `"`·`'` 는
  여닫는 모양이 같아 가르지 않는다.
- 안 닫힌 코드 스팬을 되돌려 다시 읽을 때 줄 번호를 코드 스팬이 열린 줄로 되감고 줄바꿈마다
  센다. 전에는 `self.line` 이 그대로라 "같은 줄" 검사가 줄을 넘어 통과했다
  (`` `값**(합계)⏎)**를 `` 가 굵어졌다).

Rust·Go·하네스 참조 모델에 같이 넣고, 코퍼스 `hemmed-opener-before-punct` 에 두 모양을 더했다.

Co-Authored-By: Claude <noreply@anthropic.com>
minjun0219 added a commit that referenced this pull request Oct 2, 2026
코어에 넣은 규칙(#100 리뷰 반영)을 lezer 확장에도 같이 넣는다. 막힌 여는 마커가 열려 있을 때
앞이 여는 괄호·따옴표인 마커(`2**(n-1) (**주의**)` 의 둘째 `**`)는 거울이 아니라 새 강조의 여는
마커다. 이때 막힌 마커는 물려서(`retire`) 더는 짝 후보가 되지 않고 글자로 남는다 — 코어가 글자로
되돌리는 것과 같다. 막힌 마커가 또 올 때도 앞의 것을 같이 물린다.

Co-Authored-By: Claude <noreply@anthropic.com>
@minjun0219
minjun0219 merged commit f153ad7 into main Oct 2, 2026
10 of 11 checks passed
@minjun0219
minjun0219 deleted the fix/hemmed-opener branch October 2, 2026 23:23
minjun0219 added a commit that referenced this pull request Oct 2, 2026
* feat(core): 추측으로 짝지은 강조를 세고, 수식은 짝짓지 않고, 슬랙은 글자 별표를 이스케이프한다

여는 쪽이 막힌 강조(#100)는 규칙이 아니라 추측으로 짝을 맺는다. 그 판단을 보고에 드러내고, 애매한 자리를
좁히고, 슬랙에서 글자 별표가 다시 읽히는 것을 막는다. 모델에게 "수식은 백틱으로" 라고 부탁하지 않아도
되게 하는 것이 목표다.

- `Repairs.guessed_pair`(npm `guessedPair`, Go `GuessedPair`, CLI JSON) — 고친 것 다섯 번째. `any()`에 든다.
  0 이 아니면 한 번 볼 만한 답변이다
- 거울 짝은 **닫는 마커 뒤에 글자(조사)가 와야** 맺는다 — 마스킹 번호 `4***-…-003*` 의 홑 `*` 가 같은 줄
  멀리의 글롭 `underfront.*` 와 묶이던 것. **양 끝이 다 ASCII 영숫자면 수식**이라 짝짓지 않는다(`x**(y)**z`,
  `2**(n-1)**2`). 막힌 여는 마커가 또 오면 앞의 것은 글자로 되돌리고 새것을 연다 — 앞의 것이 뒤의 거울
  짝을 가로채지 않게
- **슬랙은 글자 `*` 를 `\*` 로 낸다**(실측 2026-10-02, `chat.postMessage`): 글자로 둔 별표를 슬랙이 CommonMark
  로 다시 읽어 `x**(y)**z 와 2**(n-1)**2` 의 `**z 와 2**` 와 마스킹 번호의 `-****-` 를 굵게로 그렸다(후자는
  지금 main 도 그렇다). `\*` `\~` `\<` `\_` 는 글자로 그렸다. 하네스의 슬랙 CommonMark 판정(#99)이 이걸
  잡아냈다. 코퍼스 슬랙 기대값 4건이 바뀐다
- Rust · Go · 하네스 참조 모델 같이. 코퍼스 `hemmed-opener-before-punct` 에 수식 줄 · 사이트 문서에 `<Next />`

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* test(fuzz): 한국어 조사 앞 강조 조각을 퍼즈 알파벳에 더한다

닫는 쪽·여는 쪽이 막힌 모양, 겹친 강조, 수식, 낫표를 부품으로 넣어 새 규칙이 스트리밍 일치와 Rust↔Go 대조에
실제로 걸리게 한다. Rust 20,000회 · Go 4,000회(Rust CLI 대조) 통과.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
minjun0219 added a commit that referenced this pull request Oct 2, 2026
코어에 넣은 규칙(#100 리뷰 반영)을 lezer 확장에도 같이 넣는다. 막힌 여는 마커가 열려 있을 때
앞이 여는 괄호·따옴표인 마커(`2**(n-1) (**주의**)` 의 둘째 `**`)는 거울이 아니라 새 강조의 여는
마커다. 이때 막힌 마커는 물려서(`retire`) 더는 짝 후보가 되지 않고 글자로 남는다 — 코어가 글자로
되돌리는 것과 같다. 막힌 마커가 또 올 때도 앞의 것을 같이 물린다.

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions github-actions Bot mentioned this pull request Oct 2, 2026
minjun0219 added a commit that referenced this pull request Oct 2, 2026
* feat(npm): lezer 확장 — @lezer/markdown 이 mdwire 규칙으로 강조를 읽는다

mdwire 를 거치지 않고 `@lezer/markdown` · CodeMirror 로 마크다운을 그리는 화면에서 `**설정(config)**을` 의
별표가 그대로 보인다. 코어 `inline.rs` 의 읽기 규칙을 lezer 인라인 파서로 옮긴 확장을 `./lezer` 서브패스로 낸다
(mdwire-16 2단계). WASM 없음, `@lezer/markdown` 은 선택 peer.

- lezer 의 기본 구분자 해석은 내장 구분자에만 크기·"3의 배수" 규칙을 적용해 못 쓴다. 확장용 API
  (`findOpeningDelimiter` · `takeContent`)로 닫는 자리에서 바로 짝을 맺는다 — 코어 규칙 1 과 같은 모양
- 옮긴 규칙: 닫기(앞이 공백 아님) · 열기(`can_open`, `①` 은 글자 아님) · 먼저 연 쪽이 짐 · `_` 단어 안 ·
  `***` 쪼개기 · 막힌 여는 마커의 거울 짝(수식 제외) · `~~`(GFM 노드가 있을 때만)
- 코어와 다른 것 셋(의도): 짝 잃은 마커는 글자로, 블록 끝에서 닫지 않음, `****` 이상은 글자
- 스모크가 설치한 패키지로 코어의 텔레그램 출력과 17가지를 대조한다. 실제 문단 6,965개 대조에서 규칙 차이는
  위 셋뿐

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(npm): lezer 확장도 여는 괄호 뒤 마커를 거울로 삼키지 않는다

코어에 넣은 규칙(#100 리뷰 반영)을 lezer 확장에도 같이 넣는다. 막힌 여는 마커가 열려 있을 때
앞이 여는 괄호·따옴표인 마커(`2**(n-1) (**주의**)` 의 둘째 `**`)는 거울이 아니라 새 강조의 여는
마커다. 이때 막힌 마커는 물려서(`retire`) 더는 짝 후보가 되지 않고 글자로 남는다 — 코어가 글자로
되돌리는 것과 같다. 막힌 마커가 또 올 때도 앞의 것을 같이 물린다.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(review): lezer 확장이 진 여는 마커를 물리고 peer 바닥을 1.5 로 올린다

PR #103 의 Codex 리뷰 두 건을 반영한다.

- 규칙 2(앞이 공백인 여는 마커가 또 오면 먼저 열린 쪽이 진다)에서 진 구분자를 `cx.parts` 에
  그대로 두어 `**old⏎**new** tail**` 의 끝 `**` 가 첫 `**` 와 다시 짝지어 문단 전체가 굵어졌다.
  진 구분자를 물려서(`retire`) 더는 짝 후보가 되지 않고 글자로 남게 한다.
- `@lezer/markdown` peer 범위를 `>=1.5` 로 올린다 — 확장이 쓰는 `getDelimiterAt` 은 1.5.0 에서
  생겼다(1.4.3 에는 없다, 확인). 스모크는 peer 범위의 바닥 판으로 깔아 돌리고 최신판으로 한 번
  더 돌린다 — 전에는 최신판만 깔아 바닥이 깨져도 몰랐다.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
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