Skip to content

feat: 원장을 만든 호출이 만들었다고 말한다 — 막지 않고 보이게 (③ MCP 조용한 출생) - #48

Closed
bhyi4 wants to merge 1 commit into
fix/preseal-checks-wire-schemafrom
feat/surface-silent-ledger-birth
Closed

feat: 원장을 만든 호출이 만들었다고 말한다 — 막지 않고 보이게 (③ MCP 조용한 출생)#48
bhyi4 wants to merge 1 commit into
fix/preseal-checks-wire-schemafrom
feat/surface-silent-ledger-birth

Conversation

@bhyi4

@bhyi4 bhyi4 commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

🧱 #47 위에 쌓인 PR(base = fix/preseal-checks-wire-schema). #47 이 머지되면 base 가 main 으로 내려간다.

무엇을 고치나

08-26 에 신고된 "원장이 조용히 태어난다" 두 건은 MCP 경로였다. measure-mirror 0.41.0 이 세운 문(없는 원장 생성 거부)은 main() 안에 있어 CLI 에만 걸린다 — 이 서버의 모든 툴은 파이썬 API 로 가므로 그 문을 통째로 지나친다.

⇒ 수리가 정작 신고된 경로에 안 닿았다.

왜 막지 않았나

API 를 막으면 전 레인 봉인이 멈춘다 — 대부분의 호출자가 안 하는 실수 때문에. 그래서 막지 않고 보이게 한다.

추가되는 것
mm_preregister ⚠️ new_ledger_created + lint㉘ ledger-birth WARN
mm_retract · am_record · am_witness · pm_verify ⚠️ new_ledger_created

메시지는 절대경로를 찍는다 — 이 실패 양식의 본질이 "내가 어느 디렉터리에 있는지 모른다" 라서, no such file 은 도움이 안 된다.

WARN 을 고른 이유: 출력 압축이 WARN 은 원문 그대로 두고 OK/INFO 는 개수로 접는다. 이 줄만 살아남아야 한다.

★ 왜 이 구멍은 다른 무엇으로도 못 메우나

갓 태어난 원장의 체인은 완벽히 성하다. 그래서 무결성 검사는 전부 초록이고, 어떤 프로브도 "이 파일은 새것"이라고 말할 이유가 없다. 08-26 실측이 정확히 그 모양이었다 — 체인은 멀쩡했고, 자리가 틀렸고, 자리를 보는 검사는 없었다.

그 정보가 존재하는 순간은 만드는 그 호출 하나뿐이다. 놓치면 영영 못 되찾는다.

실물

"lint": [
  "✓ 1 check(s) OK: ㉗ prereg-lint",
  "Finding(probe='㉘ ledger-birth', level='WARN', msg='/tmp/…/mm_ledger.jsonl did not exist —
   this call CREATED it rather than appending to an existing ledger. …')"
],
"⚠️ new_ledger_created": "/tmp/…/mm_ledger.jsonl did not exist — …"

파일명이 mm_ledger.jsonl 인 것에 주목 — 08-26 사고를 낸 바로 그 기본값이다.

시험 4건 · 그중 둘은 음성대조

이어 쓸 때는 안 뜬다는 것을 시험한다. 항상 뜨는 알림은 소음이고, 소음은 읽는 쪽이 건너뛰는 법을 배운다 — 이 PR 이 고치려는 병과 같은 병이다.

시험 66 통과(파이프 없이 · exit 0).

08-26 에 신고된 두 건은 **MCP 경로**였다. 0.41.0 이 세운 문(없는 원장 생성 거부)은
`main()` 안에 있어 CLI 에만 걸린다 — 이 서버의 모든 툴은 파이썬 API 로 가므로
그 문을 통째로 지나친다. 그래서 수리가 정작 신고된 경로에 닿지 않았다.

API 를 막는 건 답이 아니다. 대부분의 호출자가 안 하는 실수 때문에 **전 레인 봉인이
멈춘다**. 그래서 막지 않고 **보이게** 한다.

`mm_preregister`·`mm_retract`·`am_record`·`am_witness`·`pm_verify` 가 응답에
`⚠️ new_ledger_created` 를 실어 **절대경로**를 찍는다. `mm_preregister` 는 추가로
`lint` 안에 `㉘ ledger-birth` WARN 을 낸다 — 압축이 WARN 은 원문 그대로 두고
나머지는 개수로 접기 때문에 이 줄만 살아남는다.

★ 이건 스택의 다른 무엇도 못 메우는 구멍이다. 갓 태어난 원장의 체인은 **완벽히
  성하다**. 그래서 무결성 검사는 전부 초록이고, 어떤 프로브도 이 파일이 새것이라고
  말할 이유가 없다. 그 정보가 존재하는 순간은 **만드는 그 호출 하나뿐**이다.

시험 4건 — 그중 둘이 **음성대조**다(이어 쓸 때는 안 뜬다). 항상 뜨는 알림은 소음이고,
소음은 읽는 쪽이 건너뛰는 법을 배운다.

pytest 66 통과(파이프 없이 · exit 0).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@bhyi4
bhyi4 deleted the branch fix/preseal-checks-wire-schema August 28, 2026 21:31
@bhyi4 bhyi4 closed this Aug 28, 2026
@bhyi4

bhyi4 commented Aug 29, 2026

Copy link
Copy Markdown
Contributor Author

♻️ 재구성해서 #49 로 다시 올렸다.

이 PR 은 결정으로 닫힌 게 아니다 — #47--delete-branch 로 머지하면서 base 브랜치(fix/preseal-checks-wire-schema)가 사라졌고 깃허브가 자동으로 닫았다. 대장님 답 163a 는 셋 다 머지였으니 승인 범위 안이었다.

내용 변경 0 — cbd9e053main(9596b98e) 위로 rebase 했고 충돌 없었다(git 이 #47 커밋을 이미 반영된 것으로 인식). base 를 main 으로 잡아 다시 올린 것이 #49 다.

★ 남는 교훈: 포개서 올린 PR 은 밑장이 빠질 때 윗장이 조용히 사라진다. base 를 형제 브랜치로 잡은 게 원인이고 내 실수다.

bhyi4 added a commit that referenced this pull request Aug 30, 2026
* feat: 원장을 만든 호출이 만들었다고 말한다 (막지 않고 보이게)

08-26 에 신고된 두 건은 **MCP 경로**였다. 0.41.0 이 세운 문(없는 원장 생성 거부)은
`main()` 안에 있어 CLI 에만 걸린다 — 이 서버의 모든 툴은 파이썬 API 로 가므로
그 문을 통째로 지나친다. 그래서 수리가 정작 신고된 경로에 닿지 않았다.

API 를 막는 건 답이 아니다. 대부분의 호출자가 안 하는 실수 때문에 **전 레인 봉인이
멈춘다**. 그래서 막지 않고 **보이게** 한다.

`mm_preregister`·`mm_retract`·`am_record`·`am_witness`·`pm_verify` 가 응답에
`⚠️ new_ledger_created` 를 실어 **절대경로**를 찍는다. `mm_preregister` 는 추가로
`lint` 안에 `㉘ ledger-birth` WARN 을 낸다 — 압축이 WARN 은 원문 그대로 두고
나머지는 개수로 접기 때문에 이 줄만 살아남는다.

★ 이건 스택의 다른 무엇도 못 메우는 구멍이다. 갓 태어난 원장의 체인은 **완벽히
  성하다**. 그래서 무결성 검사는 전부 초록이고, 어떤 프로브도 이 파일이 새것이라고
  말할 이유가 없다. 그 정보가 존재하는 순간은 **만드는 그 호출 하나뿐**이다.

시험 4건 — 그중 둘이 **음성대조**다(이어 쓸 때는 안 뜬다). 항상 뜨는 알림은 소음이고,
소음은 읽는 쪽이 건너뛰는 법을 배운다.

pytest 66 통과(파이프 없이 · exit 0).

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

* fix: 새 프로브 번호를 ㉙ 로 — ㉘ 는 subspace 감사기가 이미 쓴다

카드 171 에 대한 대장님 답 b(기호만 안 겹치는 것으로 바꾼 뒤 머지) 집행이다.

measure-mirror 의 mm.py 는 ㉑~㉘ 를 한 등록부로 쓰고, 그 ㉘ 는 이미
Subspace claim — declaration auditor 다(하위 항목 schema / no-anchor /
energy-not-matched / null-ladder). 이 PR 이 붙인 ledger-birth 가 같은 번호를
두 번째 뜻으로 쓰고 있었다. 다음 빈 번호인 ㉙ 로 옮긴다.

바꾼 것은 기호 두 자리뿐이다 — server.py 의 Finding 이름과 0.2.13 절 한 줄.
0.2.10 절의 옛 ㉘ 두 줄은 진짜 ㉘ 를 가리키므로 그대로 뒀다.
시험은 기호가 아니라 ledger-birth 문자열로 검사하므로 안 깨진다. pytest 66 통과.

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

---------

Co-authored-by: Mother Seara <seara@bhyi4.com>
Co-authored-by: Claude Opus 5 (1M context) <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