#!/usr/bin/env bash
# test_ko_tech_writer_lanes.sh — `ko-tech-writer` Step 2 / Step 4-b 판별력 known-pair (얇은 래퍼).
#
# ─────────────────────────────────────────────────────────────────────────────
# 왜 필요한가 — 이 레포가 자기 스캔을 UNCALIBRATED 로 강등해 놨다
# ─────────────────────────────────────────────────────────────────────────────
# `knowledge/shared/harness-core/harness_terminal_correlation_and_recommendations.md`:
#   Step 2  "잔여 0건(양성 컨트롤 동반)" 주장 -> UNCALIBRATED: 컨트롤·재현커맨드·출력이
#           하나도 없다. 재현 불가한 0은 0의 증거가 아니다
#   Step 4  "전칭 단정 잔여 0건" 주장        -> UNCALIBRATED, 자기반증(그 시점에 3건 생존)
#
# 챔버 런 #12(2026-08-17, prosody-lens KILL)가 이 부채를 배출 판정의 결정적 근거로
# 인용했다 — "같은 계열 계기가 미보정인데 하나 더 짓는 것은 미보정 계기의 증식".
# 운영자 결정: 새 계기보다 이 부채가 먼저. 이 파일이 그 부채를 갚는다.
#
# ─────────────────────────────────────────────────────────────────────────────
# 왜 래퍼인가 — 패턴이 셸 밖에 있어야 하는 실측 이유가 둘 있다
# ─────────────────────────────────────────────────────────────────────────────
# 초판은 패턴을 이 파일 안에 두고 엔진을 ripgrep 으로 고정했다. CI 가 둘 다 반증했다
# (2026-08-17, ubuntu-latest):
#   1) ripgrep 부재 -> 스위트가 rc=10 으로 죽었다(HARNESS ERROR). 설계는 옳게 작동했다 —
#      SKIP 이 아니라 시끄럽게 죽었다 — 그러나 CI 에서 못 도는 앵커는 앵커가 아니다.
#   2) 이식성 린트 적중 — 셸 파일 안의 한글 문자 범위는 GNU grep C 로케일에서 exit 2 로
#      죽고 그 결과가 "무매치"로 읽힌다. 즉 fail-open.
# 두 결함이 같은 처방으로 닫힌다: **패턴을 Python 으로 옮긴다.** SKILL.md 가 허용 엔진으로
# Python `re` 를 이미 명시했으므로 격하가 아니라 등가 엔진으로의 이동이고, python3 는
# 세 허용 엔진 중 어디에나 있는 유일한 것이다.
#
# ─────────────────────────────────────────────────────────────────────────────
# 무엇이 재어지는가 — Step 2 다섯 클래스 + Step 4-b 두 패턴
# ─────────────────────────────────────────────────────────────────────────────
#   Step 2  C1 줄표 이어붙임 · C2 용어-머리 · C3 콜론 나열투 · C4 조각문 · C5 소유 직역
#   Step 4-b C6 전칭 어휘 · C6b 부정형 전칭
# 각 레인의 PASS 조건은 **양성 >= 1 그리고 음성 == 0** 이다. 존재 확인이 아니라 판별
# 확인이라는 점이 핵심 — known-negative 가 없으면 "오탐이 있나" 조차 못 재고, 그러면
# PASS 는 "늘 잡는 계기" 와 구분되지 않는다.
#
# ⚠️ 아래 인용문은 **사문(死文)이다** — 2026-08-25 에 SKILL.md 에서 삭제됐다.
#    그 파일은 이제 「앞 몇 줄」식 위치 열거를 안 쓰고 표의 `check-class` 열로 채점한다
#    (위치 서술이 행 추가 때마다 조용히 어긋났다). 판정 자체는 유효하므로 남긴다.
#    🟥 **「둘뿐」도 그 시점 상태다** — 같은 날 SKILL.md 에 C2 패턴이 실렸다.
# 🟥 첫 캘리브레이션이 정본의 과장을 드러냈다: SKILL.md 는 Step 2 의 "앞 다섯 줄은 기계
# 검출 가능" 이라 적었는데, 당시 grep 을 싣고 있던 것은 C1·C5 둘뿐이고 C2·C3·C4 의
# 검출 힌트 칸은 산문 서술이다. 특히 C4 는 패턴이 없어서, 내가 임의로 지은 패턴이
# 양성을 0건으로 놓쳤다 — 계기를 세우자마자 대상의 결함이 나온 형태다.
#
# 🟥 이 스위트가 PASS 를 내도 주장하면 안 되는 것: "Step 2 잔여 0건" · "Step 4 잔여 0건".
# 판별력과 잔여는 다른 명제이고, 후자는 문서마다 따로 잰다. 그 혼동이 애초에 두 행을
# UNCALIBRATED 로 강등시킨 사유다.
#
# 사용: bash scripts/test_ko_tech_writer_lanes.sh
# exit: 0 판별 확인(전 레인 PASS) · 1 판별 실패 · 10 harness error(python3/픽스처 부재)

set -uo pipefail

SRC="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PY="$SRC/ko_tech_writer_calibrate.py"

command -v python3 >/dev/null 2>&1 || {
  echo "harness error: python3 absent -- cannot measure. Not a pass." >&2; exit 10; }
[ -f "$PY" ] || { echo "harness error: missing $PY" >&2; exit 10; }

echo "-- ko-tech-writer Step2/4-b discrimination known-pair --"
python3 "$PY"
exit $?
