Skip to content

docs(e2e): 차단 요인 FETCH-ORIGIN 의 해소 방향을 재판정해 착수 가능으로 세운다 - #137

Merged
dlddu-k3s-homelab-k3s-mcp[bot] merged 1 commit into
mainfrom
reconcile/rct_20260913-0002-e2e-mock-policy
Sep 13, 2026
Merged

dlddu-k3s-homelab-k3s-mcp[bot] merged 1 commit into
mainfrom
reconcile/rct_20260913-0002-e2e-mock-policy

Conversation

@dlddu-k3s-homelab-k3s-mcp

Copy link
Copy Markdown
Contributor

정합성 task rct_20260913-0002 (tbm_session-platform-e2e-mock-policy) 의 산출.

gap

불변식 1(seam 1:1)은 무손상이다 — as-is 지문 seams=29 files=15 바이트 불변, 등재 7 · 회계 20 ·
인터셉트 7(위반 0). 이 PR 이 여는 것은 불변식 2 — 차단 요인 = 부채 쪽이다.

원장의 유일한 차단 요인 FETCH-ORIGIN 행은 선행 이 「해소 방향 재판정」 하나였고, 그 재판정을
미뤄 둔 근거를 같은 행이 이렇게 적고 있었다 — 「대역을 세워도 사설 CA 를 검증할 자리가 MCP
컨테이너에 없다」. 그 근거가 #129 로 죽었다: validateFetchTargethttphttps
함께 받게 되면서 「인클러스터 원본은 https 여야 한다」는 고리가 끊겼고, 평문 http 원본에는
검증할 인증서가 애초에 없다.

그래서 그 행은 형식상 「착수 가능 0」이지만 실질로는 자기 자신에 막혀 있었다선행
소관이 그 행의 소관(이 모델)과 같아 바깥에 기다릴 것이 없는데, R11 은 선행 칸의 존재
보고 내용 은 보지 않으므로 게이트는 영원히 「착수 가능 0」을 찍는다. 정의가 불변식 2 를 만들며
이름 붙여 막으려던 성질(「차단 요인을 성실히 등재할수록 문서는 충실해지는데 해소 압력은 그대로 0인」)이
정확히 이 자리다.

이 PR 이 하는 것 — 재판정 하나

판정: ④ 정적 문서를 내는 평문 http 원본을 인클러스터에 실물로 배포해 등재 없이 닫는다.
정의의 EXT 배제 조항이 그대로 걸린다(kind 에 실물로 세울 수 있으면 EXT 를 쓸 수 없다 — MinIO ·
deploy/plugin-marketplace-git.yaml 선례). 호출 관찰도 치환을 들이지 않는다 — 원본 자신의 액세스
로그가 그 GET 을 센다. 그래서 판정없음 그대로이고 예고할 등재 CODE 도 없다.

앞서 열려 있던 셋이 갈린 근거

  • ① 공개 https 원본을 실물로 — 클러스터 밖 네트워크에 의존해 재현성이 떨어진다.
  • ② 대역 + CA 주입 재검토 — PR feat(mcp): 승인된 아웃바운드 호출에 신뢰 앵커를 낸다 (AC-F6) #93 의 반려 근거는 여전히 유효하고, 평문 http 로 가면 검증할
    인증서 자체가 없어 그 경로가 필요 없어진다.
  • ③ 관측 지점을 세션 런타임 밖으로 — 소관이 다른 모델로 넘어가는데 여기서 닫을 수 있다.

실측 근거(가설이 아니다)

  • data-plane/cmd/agent/session_mcp_tools.go:229url must be http or https. 리터럴
    url must be https 는 코드 전체에서 0건.
  • 같은 session-mcp 컨테이너가 이미 매 실행 평문 http 인클러스터 주소로 나간다 —
    e2e_approval_gated_3_approval_path_test.gooperator()$APPROVAL_GATEWAY_URL
    (= deploy/e2e-approval-gateway-fake.yamlhttp://approval-gateway-fake:8080) 로 요청을 낸다.
    아웃바운드 호출을 내는 http.DefaultClient 도 그 컨테이너에 있다.

변경

파일 무엇을
docs/test/e2e.md (218) 차단 요인 행: 선행 「해소 방향 재판정」 → 「없음」, 무엇이 막는가·해소 시 재작성
docs/test/e2e.md (191·193) 판정 근거 산문의 「https 원본」 → 「http 원본」 + 재판정 기록
docs/test/e2e.md (260) 집계 착수 가능 0 → 1건 (R8 이 실제와 대조한다)
deploy/e2e-approval-gateway-fake.yaml (21~24) 「왜 평문 HTTP 인가」 주석이 아직 url must be https 를 근거로 든다 — 정정. 주석 줄만 바뀐다

검증 (로컬 실행, 전부 rc=0)

python3 scripts/check-fidelity-allowlist.py      # 착수 가능 0 → 1 로 바뀌고 R8·R10·R11 통과
python3 scripts/check-render-fidelity.py
python3 scripts/check_comment_policy.py
bash    scripts/e2e/check-scenario-mapping.sh

범위 밖 (후속)

  • 원본을 실제로 세우는 것 — 이 PR 은 판정만 확정한다. 행이 착수 가능이 됐으므로 다음 감지가
    그 슬라이스를 연다(매니페스트 + kustomization.yaml + f3Prompt URL + 두 단언 + 행 삭제).
  • docs/test/e2e.md:770·:771docs/doc-tracker.md:56 의 같은 거짓 전제 사본 —
    자매 모델 tbm_session-platform-docs-impl 의 열린 task 가 그 축을 들고 있고, doc-tracker.md:56
    은 PR feat(approval-gated): AC-F5 후반 — 공유 볼륨을 파일시스템 아카이브에 실어 동결·복원을 건너 나른다 #127 이 그 줄을 다시 쓰므로 착지 순서가 얽힌다. 여기서 함께 만지지 않는다.

`선행` 이 「해소 방향 재판정」이던 유일한 차단 요인 행을 재판정하고 그 결과를 행에
반영한다. 판정: 정적 문서를 내는 **평문 http 원본을 인클러스터에 실물로 배포**해
등재 없이 닫는다(EXT 배제 조항 — MinIO · plugin-marketplace-git 선례).

재판정이 가능해진 근거는 #129 다. 그 행이 「대역을 세워도 사설 CA 를 검증할 자리가
MCP 컨테이너에 없다」로 판정을 미뤄 두었는데, `validateFetchTarget` 이 `http` 를
함께 받게 되면서 **검증할 인증서가 애초에 없는 평문 http 원본**이 열렸다. 그
컨테이너에서 평문 http 인클러스터 주소로 나가는 것은 이 스위트가 이미 매 실행
하고 있다(`$APPROVAL_GATEWAY_URL` = `http://approval-gateway-fake:8080`).

- 차단 요인 행: `선행` 「해소 방향 재판정」 → 「없음」, `무엇이 막는가`·`해소 시`
  재작성(판정 근거 · 셋 중 왜 이 길인지 · 착수 슬라이스가 할 일)
- 집계: 착수 가능 **0** → **1**건 (R8 이 실제와 대조한다)
- `deploy/e2e-approval-gateway-fake.yaml` 의 「왜 평문 HTTP 인가」 주석이 아직
  `url must be https` 를 근거로 들고 있어 정정한다(코드에 그 리터럴 0건)

판정은 여기까지다 — 원본을 실제로 세우는 것은 이 행이 착수 가능이 된 뒤 다음
감지가 여는 슬라이스의 몫이다.
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.

0 participants