[{"src":"ai-design-decision-maker-paper-v2","i":2,"ko":"두 시스템을 만들기 전, 프로덕션 리포팅 봇에 숫자를 지어내지 말라는 분명한 지시를 넣었다. 봇은 그래도 주간 지표를 날조해 유창하고 확신에 찬 말투로 전달했다. 프롬프트를 반복해서 고쳐도 실패는 멈추지 않았다. 이 프로젝트의 관찰은 연구가 기록한 더 넓은 사용성 문제와 맞닿아 있다. [비전문가는 효과적인 LLM 프롬프트를 설계하는 데 어려움을 겪었고 임기응변식 반복에 자주 의존했다](https://doi.org/10.1145/3544548.3581388). 봇을 멈춘 것은 강등이었다. 산수를 평범한 Python으로 옮기고, 모델은 코드가 이미 계산해서 컨텍스트에 주입해 둔 값을 서술하는 역할로 제한했다. 주간 리포트를 여덟 번 다시 검증한 동안 날조는 다시 나타나지 않았다.","en":"Before either system existed, a production reporting bot received a plain instruction not to invent numbers. It invented them anyway: fabricated weekly metrics, delivered fluently and with complete confidence. Repeated prompt revisions did not stop the failure. That local result is consistent with a broader usability problem documented in research: [non-AI experts struggled to design effective LLM prompts and often relied on ad hoc iteration](https://doi.org/10.1145/3544548.3581388). What stopped the bot was a demotion. The arithmetic moved into ordinary Python, and the model was restricted to narrating values that code had already computed and injected into its context. The weekly reports were re-verified eight times. The fabrication never returned."},{"src":"ai-design-decision-maker-paper-v2","i":3,"ko":"두 번의 수리는 시스템의 서로 다른 부분을 바꿨다. 프롬프트의 지시는 컨텍스트를 추가해 모델이 샘플링하는 분포를 움직인다. 진짜 숫자가 없으면 유창한 날조가 여전히 높은 확률의 출력일 수 있다. 지시는 그 행동과 경쟁할 뿐 모델을 구속하지 못한다. 산수를 코드로 옮기자 과업 자체가 달라졌다. 모델은 숫자를 생산하지 않고 컨텍스트에 이미 있는 값을 다시 서술했다. 코드는 그 서술을 출처와 비교할 수 있었다. 성공한 수리는 검증할 수 없는 답을 더 믿을 만하게 만든 것이 아니라, 출력의 정확성을 확인할 수 있는 과업으로 바꿨다.","en":"The two attempted fixes changed different parts of the system. A prompt instruction adds context and shifts the distribution from which the model samples. When the true number is absent, a fluent fabrication can remain a high-probability completion. The instruction competes with that behavior but does not bind it. Moving the arithmetic into code changed the task itself. The model no longer produced a number; it restated a value that already existed in context. Code could then compare the restatement with its source. The successful repair did not make an unverifiable answer more trustworthy. It replaced the task with one whose output could be checked."},{"src":"ai-design-decision-maker-paper-v2","i":4,"ko":"그 사건이 남긴 것은 규칙 하나, 즉 모델은 제안할 수 있지만 판정은 코드가 한다는 것, 그리고 내려놓을 수 없는 질문 하나였다. 지어내지 말라고 명시해도 지표를 지어내는 언어 모델이, 무슨 자격으로 디자인 결정을 쥐겠는가? 디자인을 생성하는 것 말고. 그건 이제 어느 도구나 한다. *결정을 쥔다는 것*. 이건 내보내고, 이건 안 되고, 이유는 이것이다, 라고 말하는 일 말이다.","en":"The incident established one operating rule: the model may propose, but code must judge. It also opened a harder question. If a language model will invent a metric while being explicitly told not to, what business does it have holding a design decision? Not generating a design; every tool does that now. *Holding the decision*: this ships, this doesn't, and here is why."},{"src":"ai-design-decision-maker-paper-v2","i":5,"ko":"실험은 이 메커니즘을 몇 달 동안 실제로 운영한 두 시스템으로 확장했다. AI가 코드 대부분을 작성했고, 나는 동작을 정의하고 구현을 검토하며 어떤 실패가 설계를 바꿔야 하는지 결정했다. 시스템 A는 디자인 시스템 결과물을 생성하고 평가했다. 시스템 B는 소스 자료와 발행할 주장을 검사했다. 두 시스템 모두 제한된 결정 권한을 얻었고 그 권한을 행사하는 동안 실패했다. 다른 벤더의 모델은 수천 개의 assertion과 같은 모델 계열의 검토가 놓친 결함을 찾아냈다. 출고 때마다 실제 테스트 결과와 장부 기록이 필요했고 에이전트의 성공 보고만으로는 통과하지 못했다. 기록에는 구현된 검사, 관측된 실패, 측정 자체가 만든 반론, 사람이 출고 결정에 남아 있던 지점이 함께 들어 있다.","en":"The experiment extended that mechanism into two systems operated under real use for several months. AI wrote most of the code; I defined the behavior, reviewed the implementation, and decided which failures changed the design. System A generated and evaluated design-system output. System B checked source material and published claims. Both received limited decision authority and both failed while exercising it. A model from a different vendor found defects that thousands of assertions and same-model review had missed. Each release required observed tests and left a ledger entry rather than relying on the agent's report of success. The resulting record contains the implemented checks, their observed failures, the objections created by the measurement itself, and the points at which a person remained part of the release decision."},{"src":"ai-design-decision-maker-paper-v2","i":6,"ko":"두 시스템의 비교 대상은 산출물의 미감이 아니라 결정 구조였다. 생성 모델은 후보를 만들었고, 결정론적 코드는 계산과 규칙 적용을 맡았으며, 다른 벤더의 모델은 그 결과를 반증하려 했다. 규칙으로 표현되지 않은 제품 적합성은 사람이 판정했다. 어느 한 구성 요소도 단독으로 출고를 승인할 수 없게 만든 뒤, 실제 실패가 그 분업을 어떻게 바꾸는지 추적했다.","en":"The comparison concerned decision structure rather than the visual quality of the output. A generative model produced candidates, deterministic code performed calculations and applied rules, a model from another vendor attempted refutation, and a person handled product fit that had not been operationalized. No component could approve a release alone. The record tracks how observed failures changed that division of authority."},{"src":"ai-design-decision-maker-paper-v2","i":8,"ko":"문제는 디자인을 만들어내지 못한다는 게 아니었다. 생성이 거의 공짜가 된 마당에 변형은 끝없이 뽑아낼 수 있었고, 그 모든 변형이 같은 검토자에게 떨어졌다. 나에게. 생성 우선 도구의 어떤 부분도 그 부담을 줄여 주지 않는다. 변형이 하나 늘 때마다 부담도 는다. 병목은 어느새 생산에서 판단으로 옮겨가 있었다. 어느 출력이 좋은가, 왜, 어떤 기준에 비추어.","en":"Producing designs was not the problem. With generation nearly free, the system could produce endless variants, but every variant still required review. Nothing in a generation-first tool reduces that burden; every additional variant adds to it. The bottleneck had quietly moved from production to judgment: which output is good, why, and against what standard."},{"src":"ai-design-decision-maker-paper-v2","i":9,"ko":"그리고 출력물에는 특정한, 알아볼 수 있는 병이 있었다. 기술적으로는 멀쩡했다(대비는 통과했고 구조도 탄탄했다). 그런데 전부 똑같이 생겼다. 같은 인디고 액센트, 같은 기본 서체, 요즘 실무자들이 [\"AI 슬롭\"](https://simonwillison.net/2024/May/8/slop/)이라 부르는 그 톤. 다른 매체를 다룬 연구가 이 체감과 맞아떨어진다. 생성 AI가 준 아이디어를 받은 작가들은 더 창의적이라 평가된 이야기를 썼고, 그 이야기들은 [서로 더 닮아 갔다](https://doi.org/10.1126/sciadv.adn5290). 그리고 [LLM 보조 아이디에이션은 측정 가능하게 수렴한다](https://doi.org/10.1145/3635636.3656204). 두 연구 다 디자인을 다루지 않는다. 외삽은 내가 한 것이다. 그 연구들이 집단 수준에서 기술하는 것을 나는 산출물 하나하나에서 겪었다. 토큰은 있는데 브랜드는 없는 디자인.","en":"And the outputs had a specific, recognizable disease. They were technically competent (contrast passed, structure was sound) and they all looked the same. The same indigo accents, the same default typefaces, the register practitioners now call [\"AI slop\"](https://simonwillison.net/2024/May/8/slop/). The research matches the feeling in a neighboring medium: writers handed generative AI ideas produced stories rated more creative, while those stories grew [more similar to one another](https://doi.org/10.1126/sciadv.adn5290), and [LLM-assisted ideation measurably converges](https://doi.org/10.1145/3635636.3656204). Neither study is about design, and the extrapolation is mine. What those studies describe at the population level, I experienced one artifact at a time: a design with tokens but no brand."},{"src":"ai-design-decision-maker-paper-v2","i":10,"ko":"내가 가진 통상적인 검사 중 어느 것도 이 문제를 보지조차 못했다. 평균화된 출력은 그 검사들을 통과하기 때문이다. 대비 검사기, 간격 린트, 마크업 유효성. 전부 적합성 검사이고, 통계적 평균은 이런 규칙에 매끄럽게 들어맞는다. 그것이 평균을 평균으로 만드는 요인의 상당 부분이다. 이것이 실험 전체가 계속 맴돌며 되돌아온 구조적 통찰이 됐다. 평가기는 그 생성기가 기본값으로 만들어내는 특정 실패 양상을 겨냥할 때에만 만들 가치가 있고, 생성 모델의 그 실패 양상은 고확률 평균이다. 그러니 게이트로 걸 만한 평가기는 규칙 적합성이 아니라 기본값으로부터의 델타를 재야 한다. 돈 주고 살 수 있는 평가기 중에 그런 것은 없었다.","en":"None of my conventional checks could even see the problem, because averaged output passes them. Contrast checkers, spacing lint, markup validity: all of it is conformance testing, and the statistical average conforms beautifully. That is much of what makes it the average. This became the structural insight the whole experiment kept circling back to. An evaluator is only worth building if it is aimed at the specific failure mode its generator produces by default, and for generative models that failure mode is the high-probability average. So an evaluator worth gating on has to measure the delta from the default, not conformance to rules. No evaluator I could buy did that."},{"src":"ai-design-decision-maker-paper-v2","i":11,"ko":"첫 번째 함정 뒤에는 두 번째 함정이 기다리고 있었다. 뻔한 대응, 즉 평가까지 자동화하자는 대응은 똑같이 속 빈 것을 낳을 수 있다. 아무것도 확인하지 않는 체크리스트, 근거 없는 확신에 찬 판정, 사람들이 [\"워크슬롭\"](https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity)이라 부르기 시작한 것. 모델 심판이 [자기 생성물을 편애한다](https://arxiv.org/abs/2404.13076)는 증거까지 있다. 출력을 만드는 것과 같은 부류의 시스템이 채점까지 하면, 채점은 생성의 결함을 물려받는다. 유창하고, 확신에 차 있고, 검증 불가능하다. 리포팅 봇에서 이미 한 번 겪은 실패였다.","en":"There was a second trap waiting behind the first. The obvious response, automating the evaluation too, can produce something just as hollow: checklists that check nothing, confident verdicts with no evidence behind them, what people have started calling [\"workslop\"](https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity). There is even evidence that model judges [favor their own generations](https://arxiv.org/abs/2404.13076). If the same class of system that produces the output also grades it, the grading inherits the generating's flaws: fluent, confident, unverifiable. I had already lived that once, with the reporting bot."},{"src":"ai-design-decision-maker-paper-v2","i":12,"ko":"그러니 실험의 질문은 \"AI가 디자인을 할 수 있는가\"보다 날카로웠다. 제네릭을 잡아내고, 자기 증거를 날조할 수 없고, 자기가 내릴 자격이 없는 판단이 무엇인지 아는 평가 기계를 내가 만들 수 있는가?","en":"The experiment, then, had a sharper shape than \"can AI design?\" It was: can I build evaluation machinery that catches the generic, can't fake its own evidence, and knows which judgments it isn't entitled to make?"},{"src":"ai-design-decision-maker-paper-v2","i":14,"ko":"시스템 A는 커맨드라인 디자인 시스템 도구다. 생성도 많이 하지만, 이 도구를 이 도구답게 만드는 부분은 생성기가 아니다. 채점기다. 디자인 토큰 묶음이 얼마나 기본값 AI 출력처럼 보이는지를 재는, 0에서 100까지의 결정론적 점수.","en":"System A is a command-line design-system tool. It generates plenty, but its distinctive organ is not a generator. It's a grader: a deterministic score, 0 to 100, for how much a set of design tokens looks like default AI output."},{"src":"ai-design-decision-maker-paper-v2","i":15,"ko":"점수는 이렇게 작동한다. 소수의 탐지기가 각자 한 가지 종류의 기본값 추종을 찾는다: 프레임워크의 재고 hex와 정확히 일치하는 색, 전부 회색인 팔레트, Inter나 Roboto, Arial 급 기본값으로만 이루어진 폰트 스택, 너무 많은 액센트 색, 혹은 큰 팔레트에 묻혀 버린 단 하나의 액센트. 발화한 탐지기마다 고정 가중치를 더하고(high 심각도 신호 하나는 정확히 medium 둘의 값이다), 별도의 통상적인 빌드 품질 감사가 최대 25점의 페널티를 보탠다. 그래서 명시적 슬롭 신호가 하나도 없는 디자인도 실행 품질이 나쁘면 \"제네릭\" 쪽으로 흘러갈 수 있다. 합은 0과 100 사이로 잘리고, A에서 F까지의 등급이 붙는데, 등급은 산술이 아니라 존재하는 최악의 증거를 읽는다. 그리고 입력이 판정하기에 너무 빈약하면(색이 두 개 미만이고 폰트가 없으면) 채점기는 거부한다. 등급 \"?\", \"판정 불가\", 사람에게 넘어간다. 정확한 상수들은 글 끝의 \"내부 구조\"에 있다. 이 설계의 요점은 누구든 어떤 점수든 손으로 다시 유도할 수 있다는 것이다.","en":"The score works like this. A handful of detectors each look for one specific kind of default-following: a color that is exactly a framework's stock hex, a palette that is entirely gray, a font stack made only of Inter/Roboto/Arial-class defaults, too many accent colors, or a single accent drowning in a large palette. Each fired detector adds a fixed weight (one high-severity signal is worth exactly two mediums), and a separate, conventional build-quality audit contributes up to 25 penalty points, so a design with no explicit slop signal can still drift toward \"generic\" when its execution is poor. The sum is clipped between 0 and 100, with a letter grade from A to F that reads off the worst evidence present rather than the arithmetic. And when the input is too sparse to judge (fewer than two colors and no fonts), the grader refuses: grade \"?\", \"cannot assess\", a human gets it. The exact constants live in \"Under the hood\" at the end; the point of the design is that anyone can re-derive any score by hand."},{"src":"ai-design-decision-maker-paper-v2","i":16,"ko":"결정적으로, 이 점수는 한쪽 방향만 본다. 그리고 나는 그 사실을 존중하는 법을 스스로 익혀야 했다. 모든 탐지기는 알려진 기본값과의 근접성을 잰다. 어떤 탐지기도 독자성을 인증하지 않는다. 점수가 높으면 규칙이 기본값 추종을 찾아냈다는 뜻이고, 점수가 낮으면 이 유한한 규칙 목록이 아무것도 찾지 못했다는 뜻일 뿐이다. 탐지된 슬롭의 부재는 브랜드의 존재가 아니다. 지표는 당신이 Tailwind의 재고 파랑을 쓰는 걸 잡아낼 수는 있어도, 당신의 청록이 *당신 것*임을 증명하지는 못한다. 0점을 보증으로 읽고 싶은 마음은 늘 따라오고, 그 마음은 틀렸다.","en":"Crucially, the score is one-sided, and I had to teach myself to respect that. Every detector measures proximity to a known default. None certifies distinctiveness. A high score means the rules found default-following; a low score means only that this finite list of rules found nothing. Absence of detected slop is not the presence of a brand. A metric can catch you using Tailwind's stock blue; it cannot prove your teal is *yours*. The temptation to read a 0 as an endorsement is constant, and it is wrong."},{"src":"ai-design-decision-maker-paper-v2","i":17,"ko":"나는 이 판단의 두 반쪽을 껍질과 심이라고 부르기 시작했다. 껍질은 조작화할 수 있는 모든 것이다. 알려진 기본값과의 근접성은 껍질의 속성이다. 셀 수 있고, 확인할 수 있고, 결정론적이고, 공개적으로 논쟁할 수 있다. 심은 껍질을 빼고 남는 것이다. 이 디자인이 *이 제품의 것*인가, 단순한 이상치가 아니라 정체성이 존재하는가, 이 물건이 그 작업이 애초에 풀려던 문제를 푸는가. 채점기는 껍질을 완전히 형식화하고 심은 전혀 형식화하지 않으며, 채점기의 정직함은 그 둘을 절대 흐리지 않는 데 달려 있다. 이 글에 나오는 결함 이야기 대부분은, 어떤 식으로든, 껍질이 얻어내지 못한 심의 영토를 주장한 이야기다.","en":"The judgment split into a shell and a core. The shell is whatever can be operationalized: proximity to a known default is countable, checkable, deterministic, and open to public dispute. The core is what remains after the shell is subtracted: whether the design is *of this product*, whether an identity is present rather than merely an anomaly, whether the thing solves the problem it was drawn for. The grader formalizes the shell completely and the core not at all. Its integrity depends on never blurring that boundary. Most defects in the record began when the shell claimed core territory it had not earned."},{"src":"ai-design-decision-maker-paper-v2","i":18,"ko":"생성 쪽에서는 같은 본능이 반대 방향으로 달렸다. 평균성을 사후에 탐지하는 대신, 캐릭터를 앞단에서 주입하는 것이다. 시스템 A에는 사용자가 선택해서 적용하는 \"DNA 축\" 여섯 개(색, 모서리 둥글기, 타이포그래피, 화면별 구역 구분, 컴포넌트 형태, 움직임)가 생겼고, 각 축은 자율 개선 사이클 한 번에 만들어졌다. *premium* 설정은 모서리를 덜 둥글게 하고 그림자를 깊게 하며, *playful* 설정은 모서리를 더 둥글게 하고 그림자를 가볍게 한다. premium 움직임은 400밀리초 동안 서서히 멈추고, playful 움직임은 250밀리초 동안 튕기듯 움직인다. 각 축은 옵트인하지 않은 사용자에게 아무것도 바꾸지 않는다는 것이 회귀 테스트로 확인된다. 평균성의 치료제가 모두의 기본값을 소리 없이 바꿔 버린다면, 그건 절차만 늘어난 균질화일 테니까. 이 중 어떤 것도 도구에서 생성을 없애지 않았다. 요점은 생성을 멈추는 게 아니라 게이트를 옮기는 것이었다. 생성된 어떤 것도, 기준이 명시된 평가기를 통과하지 않고는 나가지 못하도록.","en":"On the generation side, the same instinct ran in reverse: instead of detecting averageness after the fact, inject character up front. System A grew six opt-in \"DNA axes\" (color, radius, typography, per-screen zoning, component form, motion), each built in one autonomous improvement cycle. A *premium* character multiplies corner radius by 0.8 and deepens shadows; *playful* multiplies it by 1.3 and lightens them. Premium motion is 400ms ease-out; playful is a 250ms spring. Each axis is regression-tested to change nothing for anyone who didn't opt in, because a cure for averageness that silently altered everyone's defaults would just be homogenization with extra steps. None of this made the tool generation-free. The point was never to stop generating. It was to move the gate, so that nothing generated ships without passing an evaluator whose standards are explicit."},{"src":"ai-design-decision-maker-paper-v2","i":19,"ko":"효과가 있었나? 자기 계기 기준으로는 그렇다. 뒤에서 이야기할 별표 하나를 달고서. 날짜가 기록된 자율 사이클 약 17회가 7월 2일부터 7월 21일 사이에 돌았고, 각 사이클은 적대적 리뷰 통과와 완전히 관측된 테스트 실행을 게이트로 걸었다. 이커머스 슬롭 입력은 자동 수리 패스를 거쳐 제네릭 점수 100에서 28로(F에서 C로) 갔고, 회색 핀테크 입력은 72에서 28로(D에서 C로) 갔다. 둘 다 나아졌지만 여전히 A가 아니라 C였다. 실제 제품 토큰으로 만든 작은 골든 세트(각 제품의 디자인 시스템에서 뽑은 색과 폰트 이름이지, 화면을 본 게 아니다)에서 독자적 토큰 세트와 제네릭 토큰 세트 사이의 분리는 탐지기가 추가되면서 꾸준히 올라간 것이 아니다. 기록된 상태는 넷이고, 각각을 자기 커밋에서 다시 돌려 확인했다. 처음에 +14.6, 그다음 폰트 수정이 지표를 더 정직하게 만들면서 숫자를 끌어내려 +13.4, 그다음 프레임워크 기본 색상 탐지기가 들어와 +27.4, 그리고 일곱 시간 뒤 무관한 거짓 양성 규칙을 따로 고치면서 도달한 현재의 +31.2다(distinct 평균 3.8, generic 평균 35.0). 실제 제품 11개 중 10개는 0점에 등급 A다. figma는 42/D인데, 추출된 폰트인 Inter와 Roboto Mono가 둘 다 기본값이라 표시된 것이다. 독자적 디자인 11개 중 폰트 탐지기가 발화하는 유일한 하나이고, 나는 이것을 거짓 양성이라기보다, 기본값 탐지기라면 마땅히 정확히 그 위에 앉아 있어야 할 경계 사례로 생각하게 됐다. 브랜드 서체가 곧 기본 서체인 회사.","en":"On its own instruments, the repair worked, with one exception. About seventeen dated autonomous cycles ran between July 2 and July 21, each gated on an adversarial review pass and a fully observed test run. An ecommerce slop input went from genericness 100 to 28 (F to C) after the automated repair pass; a gray fintech input went from 72 to 28 (D to C). Both improved, but both remained C rather than A. On a small golden set of real product tokens (colors and font names lifted from each product's design system, never its screens), the separation between distinct and generic token sets did not climb steadily as detectors were added. Four states are logged, and I re-ran each one from its own commit to check: +14.6 at the start, then +13.4 after the font fixes, which lowered the number while making the metric more honest, then +27.4 when a framework-default color detector landed, and +31.2 now (distinct mean 3.8, generic mean 35.0), reached seven hours later by a separate correction to an unrelated false-positive rule. Ten of the eleven real products score 0 with grade A. Figma scores 42/D, flagged because its extracted fonts, Inter and Roboto Mono, are both defaults. That's the one distinct design out of eleven the font detector fires on, and I've come to think of it less as a false positive than as the boundary case a defaults detector *should* sit right on top of: a company whose brand typeface is the default typeface."},{"src":"ai-design-decision-maker-paper-v2","i":20,"ko":"별표는 이것이다. 한때 이 평가기는 자기의 유일한 임무를 정확히 거꾸로 수행했다. 진짜로 독자적인 토큰 세트가 28/D를 받았다. 일부러 제네릭하게 손으로 만든 목업이 14/B에 앉아 있는 것보다 *나쁘게*. 독자적인 것을 제네릭한 것 아래에 놓는 반평균화 지표는 성능이 부족한 게 아니다. 뒤집힌 것이다. 수정(프레임워크 기본 색상을 잡는 새 탐지기)이 제네릭 번들을 42/D로 끌어올려 순서를 복원했다. 다만 이제 figma가 그들을 이기는 대신 동점이 됐다. 이 잔여물은 일부러 골든 세트에 남겨 두었다. 계속 보이도록.","en":"The asterisk: at one point the evaluator got its one job exactly backwards. A genuinely distinct token set scored 28/D, *worse* than hand-built deliberately generic mockups sitting at 14/B. An anti-averaging metric that ranks the distinct below the generic isn't underperforming; it's inverted. The fix (a new detector for framework-default colors) lifted the generic bundles to 42/D and restored the ordering, though Figma now ties them rather than beating them. That residual is kept in the golden set on purpose, so it stays visible."},{"src":"ai-design-decision-maker-paper-v2","i":22,"ko":"같은 사람이 채점기를 만들고, 캘리브레이션 세트를 구성하고, 규칙을 튜닝하고, 보고할 결과를 골랐다. 독자적 참조 11개와 제네릭 번들 4개의 라벨도 외부 평가자가 제공한 것이 아니다. 현재의 +31.2점 차이는 개발에 사용한 세트에서 계산한 캘리브레이션 목표이며 분산 모델이나 유의성 검정이 없다. 이 역할 집중은 두 문제를 만든다. 투명한 지표가 최적화 표적이 될 때 생기는 문제와, 색·폰트 이름으로 계산한 점수를 디자인 전체에 귀속할 수 있는가의 문제다.","en":"The same person built the grader, assembled the calibration set, tuned the rules, and selected the results reported here. No independent evaluator supplied labels for the eleven distinctive references and four generic bundles. The current +31.2-point separation is therefore a calibration objective produced on a set used during development, with no variance model or significance test. That concentration of roles creates two direct objections. One concerns what happens when a transparent metric becomes a target. The other concerns whether a score calculated from colors and font names can be attributed to a design at all."},{"src":"ai-design-decision-maker-paper-v2","i":23,"ko":"첫 번째 반론에는 이름이 있다. 굿하트의 법칙. 측정이 목표가 되면 좋은 측정이기를 멈춘다. 제네릭 점수는 게이트고, 게이트는 최적화의 표적이 된다. 이 게이트는 규칙이 전부 공개돼 있어 구조상 속이기 쉽다. 결정론은 양날이기 때문이다. 누구든 점수를 손으로 다시 유도할 수 있게 해 주는 바로 그 속성이, 누구든 회피 경로도 손으로 다시 유도할 수 있게 해 준다. 프레임워크 기본값 탐지기는 정확한 hex 값 13개 세트에 속하는지를 확인한다. Tailwind의 재고 파랑을 RGB 한 단계만 밀면 탐지기는 침묵한다. 사람 눈으로는 그 차이를 구별할 수 없는데도. 회색 검사는 채널 산포 임계값이다. 산포 12는 \"회색조\"고, 산포 13은 공식적으로 액센트다. 폰트 탐지기는 기본 패밀리를 매칭해서 \"Inter Variable\" 허점은 닫았지만, 이름을 바꾼 폰트 파일은 그대로 걸어 들어간다. 이 점수를 상대로 최적화하는 생성 루프는 독자성을 배우지 않을 것이다. 위장을 배울 것이다. *탐지에 걸리지 않으면서 기본값에 가까운 상태*라는, 별개의 어쩌면 더 나쁜 속성이다. 평균을 잡으려고 만든 바로 그 계기를 통해 평균을 세탁하는 것이니까.","en":"The first has a name: Goodhart's law. When a measure becomes a target, it stops being a good measure. The genericness score is a gate, and gates get optimized against. This particular gate is transparently gameable by construction, because determinism cuts both ways: the same properties that let anyone re-derive a score by hand let anyone re-derive an evasion by hand. The framework-default detector checks membership in a set of 13 exact hex values; nudge Tailwind's stock blue by one RGB step and the detector goes silent, though no human eye could tell the difference. The grayness test is a channel-spread threshold; a spread of 12 is \"gray-ish,\" a spread of 13 is officially an accent. The font detector matches base families, which closed the \"Inter Variable\" loophole, but a renamed font file would walk straight through. A generation loop optimizing against this score would not learn distinctiveness. It would learn camouflage: *not-detectably-default*, which is a different property, and arguably a worse one, because it launders the average through the very instrument built to catch it."},{"src":"ai-design-decision-maker-paper-v2","i":24,"ko":"게이트는 비대칭이다. 높은 점수는 출고를 막지만 낮은 점수는 지표가 볼 수 없는 부분을 사람이 검토하도록 넘길 뿐이다. 조작된 0점이 얻는 것은 인증이 아니라 검토 기회다. 이런 구조는 회피의 이익을 줄이지만 없애지는 못한다. 마감이 걸리면 사람 검토에 들어가는 것 자체가 유일한 목표가 될 수 있다. 이 배치에서는 지표를 피할 사람과 유지보수하는 사람이 같아, 마감 압력이 큰 팀에서 생길 조건을 거의 시험하지 못했다. 회피 방법이 발견되면 모델에 판정을 넘기지 않고 결정론적 검사를 넓힌다. \"Inter Variable\" 수정은 정확한 표시 이름 대신 기본 패밀리를 매칭하도록 바꿨다. 그래도 방어자에게 구조적 우위가 없는 군비 경쟁이라는 점은 남는다. 장부는 발견된 회피만 기록하며 아직 찾지 못한 회피에 대한 정보는 담지 못한다.","en":"The gate is asymmetric. A high score blocks release, while a low score only forwards the design to a person who can inspect what the metric cannot see. A manipulated zero therefore earns review rather than endorsement. This limits the benefit of evasion but does not remove it; a deadline can still turn admission to review into the only obstacle worth optimizing. In this deployment, the maintainer and the person with an incentive to evade the metric are the same person, so the record contains little of the pressure a deadline-driven team would create. That condition was not tested. When an evasion appears, the deterministic check expands instead of yielding authority to a model. The \"Inter Variable\" repair followed that rule by matching a base family rather than an exact display name. The process is still an arms race with no structural advantage for the defender. The ledger records detected evasions and contains no information about evasions that remain unknown."},{"src":"ai-design-decision-maker-paper-v2","i":25,"ko":"굿하트는 안쪽으로도, 내 숫자를 향해서도 겨눠진다. 여기서 보고하는 분리 수치(현재 distinct 집단과 generic 집단 사이 +31.2점)는 내가 튜닝의 목표로 삼는 값이고, 내가 고른 골든 세트 위에서 계산된다. 실제 제품 11개, 제네릭 번들 4개, 분산 모델 없음, 유의성 검정 없음. 이것은 캘리브레이션 목표지 통계량이 아니다. 유지보수자가 직접 튜닝해서 좋아지는 숫자는 정확히 그 법칙이 경고하는 종류의 증거이고, +14.6에서 +31.2까지의 경로, 오르기 전에 +13.4로 떨어졌던 그 경로를 정직하게 읽으면 \"계기와 나의 의견 일치가 예전보다 늘었다\"이지 \"계기가 좋아졌다\"가 아니다. figma 사례는 영구적이고 눈에 보이는 잔여물로 세트에 남는다. 계기에게 아첨하기를 거부하는 유일한 항목이며, 깨끗하지만 거짓인 분리를 막는다.","en":"Goodhart also points inward, at my own numbers. The separation figure reported here (currently +31.2 points between the distinct and generic populations) is a target I tune toward, computed over a golden set I selected: eleven real products, four generic bundles, no variance model, no significance test. It is a calibration objective, not a statistic. A number that improves under the maintainer's own tuning is exactly the kind of evidence the law warns about, and the honest reading of the path from +14.6 to +31.2, which fell to +13.4 before it rose, is \"the instrument and I agree with each other more than we used to,\" which is not the same as \"the instrument got better.\" The Figma case remains in the set as a permanent visible residual: it is the one item that refuses to flatter the instrument and prevents a clean but false separation."},{"src":"ai-design-decision-maker-paper-v2","i":26,"ko":"두 번째 문제는 귀속이다. 채점기는 완성된 디자인을 본 적이 없다. 입력은 제품의 디자인 시스템에서 추출한 색과 폰트 이름이며 화면은 포함되지 않는다. 레이아웃, 구성, 이미지, 모션, 카피는 입력 밖에 있지만 생성 결과를 서로 바꿔 끼워도 모르게 만드는 데 큰 영향을 준다. 골든 세트에서도 한계가 드러난다. figma가 42/D를 받은 이유는 추출된 폰트인 Inter와 Roboto Mono가 모두 기본값 목록에 있기 때문이지, 제품 전체가 제네릭해서가 아니다. 반대 방향의 오류도 가능하다. 기본값 토큰을 쓰는 독자적 제품은 표시되고, 특이한 토큰으로 조립한 제네릭 화면은 A를 받을 수 있다. 기본값이 아닌 폰트를 하나 섞으면 all-default 조건이 꺼지고, 재고 hex를 RGB 한 단계만 옮겨도 눈에 보이는 차이 없이 정확 일치 탐지기를 피한다. 점수가 뒷받침하는 주장은 토큰 수준에서 알려진 기본값과 얼마나 가까운가까지다. 디자인과 브랜드 전체에 대한 주장은 증거 범위를 넘어선다.","en":"The second objection is attribution. The grader has never seen a complete design. It receives colors and font names extracted from a product's design system, not screens. Layout, composition, imagery, motion, and copywriting remain outside the input even though they account for much of what makes generated pages interchangeable. The golden set shows the consequence. Figma scores 42/D because its extracted fonts are Inter and Roboto Mono, both listed as defaults, not because the product as a whole is generic. The error can run in either direction: a distinctive product with default tokens is flagged, while a generic screen assembled from unusual tokens can pass at grade A. Adding a single non-default font also disables the all-default predicate for a mixed stack, and moving a stock hex by one RGB step defeats exact matching without creating a visible difference. The supported claim is narrow. The score measures token-level proximity to known defaults. Claims about the design or the brand exceed the evidence."},{"src":"ai-design-decision-maker-paper-v2","i":27,"ko":"세 번째 반론도 성립한다. 때로는 평균이 옳다. 반평균화는 지킬 가치가 있는 정체성을 전제하는데, 관습으로의 수렴이 실패가 아니라 목표인 범주가 통째로 있다(규제 서식, 안전 필수 인터페이스). 신호는 거기서도 사용할 수 있다. 다만 의미는 바뀐다. \"이것은 숙고된 선택이 아니라 모델의 기본값처럼 보인다\"는 정보는, 숙고된 선택이 결국 기본값과 일치하는 경우에조차 알 가치가 있다. 하지만 대응은 *차단*에서 *통보*로 뒤집혀야 하고, 게이트를 뒤집지 않은 채 그런 도메인에 떨어뜨린 시스템 A의 복사본은 브랜드 이데올로기가 속하지 않는 곳에서 그것을 강제하고 있을 것이다.","en":"A third objection also holds: sometimes the average is correct. Anti-averaging presumes an identity worth defending, and there are whole categories (regulated forms, safety-critical interfaces) where convergence on convention is the goal, not the failure. The signal can still be used there, but only with its meaning changed: \"this looks like the model's default rather than a considered choice\" is worth knowing even when the considered choice ends up matching the default. But the response has to flip from *block* to *inform*, and a copy of System A dropped into such a domain with the gate unflipped would be enforcing a brand ideology where none belongs."},{"src":"ai-design-decision-maker-paper-v2","i":28,"ko":"마지막 반론은 더 강해 보였다. 결정론적 심판이라면 적어도 요란하고 읽을 수 있는 방식으로 실패해야 한다는 것이다. 코드를 읽을 수 있으니 실수도 찾을 수 있다는 가정이었다. 다음 사례에서 배포된 평가기가 그 가정을 깨뜨렸다.","en":"A final objection seemed stronger: a deterministic judge should at least fail loudly and legibly. The assumption was that readable code would make its mistakes discoverable. The deployed evaluator in the next case broke that assumption."},{"src":"ai-design-decision-maker-paper-v2","i":30,"ko":"평가기는 배포된 상태였다. 큰 테스트 스위트(수천 개의 assertion)가 덮고 있었고, 그것을 만드는 걸 도운 것과 같은 모델 계열의 리뷰도 통과한 뒤였다. 나는 관례 삼아 *다른 벤더*의 모델을 들이댔다. 프레임은 적대적이었다. \"이 코드를 확인해 줘\"가 아니라 \"이 지표가 작동한다는 주장을 반증하라.\" 네 라운드 뒤, 결함 세 개가 돌아왔다. 전부 진짜였고, 전부 배포돼 있었고, 전부 내가 그전까지 돌린 무엇에도 보이지 않던 것들이었다.","en":"The evaluator was deployed. It was covered by a large test suite (thousands of assertions), and it had passed review by the same model family that helped build it. As a matter of routine, I pointed a model from a *different vendor* at it, framed adversarially: not \"check this code\" but \"refute the claim that this metric works.\" Four rounds later it returned with three defects, all real, all shipped, all invisible to everything I had run before."},{"src":"ai-design-decision-maker-paper-v2","i":31,"ko":"첫째, 허점. 기본 폰트 탐지기는 정확 문자열 매칭을 썼고, 그래서 유일한 서체가 \"Inter Variable\"인 디자인은 \"inter\" 체크를 유유히 지나쳤다. 대표적인 기본 폰트가, 배리어블 폰트 이름을 걸치고, 바로 자기를 잡으려고 만든 탐지기를 피해 갔다.","en":"First, the loophole. The default-font detector used exact string matching, so a design whose only typeface was \"Inter Variable\" sailed past the check for \"inter.\" The flagship default font, wearing its variable-font name, evaded the detector built specifically to catch it."},{"src":"ai-design-decision-maker-paper-v2","i":32,"ko":"둘째, 거짓 청정. 비었거나 거의 빈 입력에서 채점기는 아무 신호도 발화하지 않았고, 따라서 등급 A, 제네릭 0을 보고했다. 사실상 보지도 않은 디자인에 대한 확신에 찬 \"깨끗하고 독자적\". 증거의 부재를 독자성의 증거로 읽은 것이다.","en":"Second, the false clean. On empty or near-empty input, the scorer fired no signals and therefore reported grade A, genericness 0: a confident \"clean and distinct\" about a design it had essentially not seen. Absence of evidence, read as evidence of distinction."},{"src":"ai-design-decision-maker-paper-v2","i":33,"ko":"셋째, 가드. 빌드 품질 페널티는 `if overall > 0`으로 감싸여 있었다. 아마 품질 데이터가 없을 때 일을 건너뛰겠다는 누군가의 아이디어였을 것이다. 품질이 정확히 0일 때, 즉 가능한 최악의 디자인에서, 페널티는 정점을 찍는 대신 사라졌다. 시스템이 받을 수 있는 가장 나쁜 입력이 최고 점수를 받았다.","en":"Third, the guard. The build-quality penalty was wrapped in `if overall > 0`, presumably someone's idea of skipping work when there was no quality data. At quality exactly 0, the worst possible design, the penalty vanished instead of peaking. The system's most damning input received its best score."},{"src":"ai-design-decision-maker-paper-v2","i":34,"ko":"셋째 결함을 형식적으로 기술하는 방법이 있고, 그것이 내 테스트가 왜 그 결함을 건드리지도 못했는지 설명해 준다. 점수는 단조여야 한다. 제네릭의 증거가 늘었는데 점수가 내려가는 일은 있어서는 안 된다. 가드는 단조성을 단 한 점에서 깨뜨렸다. 품질 0에서의 하향 점프, 정확히 지표가 가장 중요해지는 지점에서. 단조성은 함수의 전역 속성이고, 유닛 테스트는 그것을 점 단위로 샘플링한다. 샘플링된 수천 개의 점이 통과하는 동안에도 속성은 실패할 수 있고, 내 것이 그랬다.","en":"There is a formal way to describe that third defect, and it explains why my tests never touched it. The score is supposed to be monotone: more evidence of genericness may never lower it. The guard broke monotonicity at a single point, a downward jump exactly at quality zero, which is where the metric mattered most. Monotonicity is a global property of a function; unit tests sample it at points. Thousands of sampled points can pass while the property fails, and mine did."},{"src":"ai-design-decision-maker-paper-v2","i":35,"ko":"수정 자체는 작았다. \"Inter Variable\"이 \"inter\"로 정규화되도록 기본 패밀리로 폰트를 매칭하고, 빈약한 입력에는 fail-closed \"판정 불가\"를 더하고, 페널티는 무조건 적용한다. 중요한 결과는 결함이 *왜* 살아남았는가였다. 내 테스트는 술어를 쓸 때와 같은 머리로 썼고, 그래서 정확 매칭 테스트는 정확히 철자된 폰트만 썼다. 빈 디자인을 지표에 먹여 보는 테스트는 아무도 쓰지 않았다. 빈 것을 인증하게 되리라고는 아무도 상상하지 않았으니까. \"더 나쁜 감사가 점수를 낮출 수는 없다\"는 assert도 아무도 쓰지 않았다. 그 가드는 명백한 최적화처럼 보였으니까. 같은 모델 계열의 리뷰는 내 가정을 공격하지 않고 그대로 다시 따라가면서 같은 맹점을 재생산했다. 자기 생성물을 편애한다는 연구에서 예측된 현상이 벤치마크가 아니라 실제 툴체인에서 나타난 셈이다. 크로스 벤더 검토자는 내 관용구도 내 의도도 공유하지 않았고, 그래서 주장을 공격했다. *어떤 입력이 \"깨끗하다\"를 거짓말로 만드는가?* 이것은 반증 질문이지 커버리지 질문이 아니고, 같은 출처의 테스트는 아무리 쌓아도 이 질문을 하지 않는다.","en":"The fixes were small: match fonts by base family so \"Inter Variable\" normalizes to \"inter\"; add a fail-closed \"cannot assess\" for sparse input; apply the penalty unconditionally. The important result was *why* the defects survived. My tests were written by the same mind that wrote the predicates, so the exact-match tests used exactly-spelled fonts. Nobody wrote a test feeding the metric an empty design, because nobody imagined certifying one. Nobody asserted \"a worse audit can never lower the score,\" because the guard looked like an obvious optimization. And the same-model review reproduced the same blind spots, re-deriving my assumptions instead of attacking them, which is what the own-generation favoritism result predicts, playing out in my toolchain instead of a benchmark. The cross-vendor reviewer shared neither my idioms nor my intent, so it attacked the claims: *what input makes \"clean\" a lie?* That is a refutation question, not a coverage question, and no amount of same-origin testing asks it."},{"src":"ai-design-decision-maker-paper-v2","i":36,"ko":"그 뒤로 두 시스템의 규칙은 이렇다. 중대한 것은 어떤 것이든 내보내기 전에 독립 적대자(실무에서는 다른 벤더의 모델, 1인 운영자가 살 수 있는 독립성에 가장 가까운 것)가 반증을 시도하고, 후보 발견 각각도 다시 반증을 거쳐, 확인된 발견만 변경을 이끈다. 두 벤더가 진짜로 독립적이라는 증거는 없다. 훈련 데이터와 맹점을 공유할 수도 있다. 다만 이 기록에서 다른 벤더는 원래 워크플로가 놓친 실패를 반복해서 찾아냈다.","en":"Since then, the rule in both systems has been: before anything consequential ships, an independent adversary (in practice a different vendor's model, the closest thing to independence a solo operator can buy) tries to refute it, and each candidate finding is itself refuted, so only confirmed findings drive changes. The two vendors are not proven independent; they may share training data and blind spots. In this record, however, the different vendor repeatedly found failures that the originating workflow had not."},{"src":"ai-design-decision-maker-paper-v2","i":38,"ko":"몇 달 간격을 두고, 완전히 다른 목적으로 시스템 B를 만들었다. 모델 출력을 불리는 게 아니라 소스 자료를 검증하고 맞춰 보는 것이 일인 로컬 우선 지식 시스템이다. 의도적으로 가져간 교훈은 정확히 하나였다. 리포팅 봇의 교훈, 산수는 코드에, 모델은 서술만. 나머지는 전부 새로울 예정이었다.","en":"Months apart from System A, for an entirely different purpose, I built System B: a local-first knowledge system whose job is to validate and reconcile source material, not to expand model output. I carried exactly one lesson into it deliberately, the reporting-bot lesson, arithmetic in code, model narrates. Everything else was supposed to be new."},{"src":"ai-design-decision-maker-paper-v2","i":39,"ko":"새롭지 않았다. 배포 압력 아래에서 시스템 B는 시스템 A가 가졌던 것과 같은 거버넌스 기관들을 길렀다. 내가 그 닮음을 계획하지 않았는데도. 시스템 B의 검사 경로에는 LLM이 아예 없다. 그라운딩 체크가 발행된 모든 숫자를 그 출처와 기계적으로 대조한다. 주장에는 *verified*(검증 완료), *drifted*(출처와 불일치), *missing*(근거 없음) 상태가 붙는다. 증거 참조가 없는 주장은 *pending*(검토 대기)으로 표시해 통과시키지 않고 사람이 직접 처리한다. 충돌 스윕은 소스 사이의 모순을 표면화해 사람이 해소하게 하지, 소리 없이 승자를 고르지 않는다. 신뢰 점수는 지어내는 대신 `None`, 즉 미측정인 채로 있을 수 있다. 그라운딩 체크가 강제하는 것과 같은 정직함을 확신 그 자체로 확장한 것이다. 배포 지표는 사람이 서명해야 한다. 어떤 자동 리포터도 자기에게 유리한 숫자를 스스로 고를 수 없도록. 하드룰 하나는 죽은 인터페이스 어포던스를 금지한다. 아무 일도 하지 않는 버튼은 배선하거나, 비활성화하고 정직하게 표기하거나, 제거해야 한다. no-op 어포던스야말로 제네릭 생성이 인터페이스의 기능 없이 형태만 흉내 낼 때 만들어내는 것이니까. 그리고 출고 게이트는 학습한다. 기각된 출력은 골든 세트 사례가 되고, 그래서 취향 논쟁은 한 번 결판난 뒤 강제되지, 논쟁으로 영원히 재발하지 않는다. 강제 계층은 7월 15일, 테스트 스위트 93개 중 93개 통과로 완성됐다.","en":"It wasn't. Under deployment pressure, System B grew the same governance organs System A had, without my planning the resemblance. Its checking path contains no LLM at all. A grounding check machine-compares every published number to its source; claims carry statuses of *verified*, *drifted*, or *missing*; anything without an evidence reference is *pending*, never *pass*, and pending routes to me. A conflict sweep surfaces contradictions between sources for human resolution rather than picking a winner silently. A trust score is allowed to be `None`, unmeasured, rather than invented, which is the same honesty the grounding check enforces, extended to confidence itself. Deployment metrics must be human-signed, so no automated reporter gets to choose its own flattering numbers. A hard rule forbids dead interface affordances: a button that does nothing must be wired, disabled-and-labeled, or removed, because no-op affordances are what generic generation produces when it imitates the shape of an interface without its function. And the ship gate learns: a rejected output becomes a golden-set case, so a taste debate gets settled once and then enforced, instead of recurring forever as an argument. The enforcement layer was finished on July 15 with its test suite at 93 of 93 passing."},{"src":"ai-design-decision-maker-paper-v2","i":40,"ko":"두 시스템 모두 같은 메커니즘을 하나 더 길렀다. 검증기를 검증하라. 시스템 A의 변경 관리 도구는 자동 변경을 적용하기 전에 이전 상태를 저장하고 관련 테스트를 실행한다. 테스트가 두 번 연속 실패하면 저장해 둔 이전 상태로 되돌리고 해당 문제를 *must-fix*(반드시 수정할 항목)로 기록한다. 종료 코드는 심각도 사다리를 이루는데, 맨 윗단에는 가장 강한 안전 규칙이 있다. *복원 자체*가 실패하면 파이프라인은 멈추고 에스컬레이션한다. 실패한 안전장치는 실패한 변경보다 시끄러워야지, 절대 더 조용해서는 안 되니까. 래퍼는 일괄 스테이징도 거부한다. `git add -A`는 하드 블록되어, 에이전트가 실수로라도 의도치 않은 파일을 커밋에 쓸어 담을 수 없다. 시스템 B의 대응물은 스냅샷으로 검증되는 안전 쓰기, 그리고 완료 마커 자체가 증거인 실행 장부다. 그래서 \"작업이 돌았다\"는 assertion이 아니라 확인 가능한 주장이 된다. 여기에, 낡은 스냅샷을 소리 없이 신뢰하는 대신 강등하는 신선도 게이트가 있다. 이 필요는 가정이 아니다. 시스템 B 자신의 테스트 하나는 날짜 하나를 \"신선함\"으로 하드코딩해 두었다가, 실제 시계가 7일 신선도 임계를 넘자 소리 없이 상해 버렸다. 검증 계층 자체에 든 시한폭탄이었고, 찾아서 고쳤고, 테스트 스위트의 268개 테스트가 모두 통과했다. 적대자는 때로 다른 벤더의 모델이고, 때로는 달력이다.","en":"Both systems also grew the same additional mechanism: verify the verifier. System A's commit wrapper snapshots the pre-change state into every automated commit, runs the tests adjacent to the change, and on two consecutive failures hard-resets to the snapshot and logs a must-fix. Its exit codes form a severity ladder, and the top rung carries the strongest safety rule: if the *restore itself* fails, the pipeline halts and escalates, because a failed safety mechanism must be louder than a failed change, never quieter. The wrapper also refuses blanket staging: `git add -A` is hard-blocked, so an agent cannot sweep unintended files into a commit even by accident. System B's counterpart is a snapshot-verified safe-write plus a run ledger in which a completion marker is itself evidence, so \"the job ran\" is a checkable claim rather than an assertion, and a freshness gate that demotes stale snapshots instead of silently trusting them. The need is not hypothetical. One of System B's own tests had hard-coded a date as \"fresh\" and silently went stale when the real clock crossed a 7-day freshness threshold: a time bomb in the verification layer itself, found and fixed, bringing the suite to 268 green. Sometimes the adversary is another vendor's model; sometimes it's the calendar."},{"src":"ai-design-decision-maker-paper-v2","i":41,"ko":"적대적 기계는 단일 리뷰가 결코 해 주지 못한 방식으로 제 값을 했고, 그 이득은 규모를 가리지 않고 나타났다. 시스템 B 서브시스템 하나에 대한 팬아웃 감사(다수의 독립 에이전트가 각자 단일 렌즈에 갇히고, 후보 발견 각각이 개별적으로 반증을 거친다)는 43개의 발견을 확인했다. high 2, medium 25, low 16, 전부 수정됐다. 최악은 레코드 1,000개를 처음 스캔하는 데 13.86초가 걸리는 O(N²) 인덱스 배치였다. 이것을 규모만 키운 브레인스토밍과 갈라놓는 것이 반증 단계다. 에이전트 49개의 원출력은 그 자체로 워크슬롭일 것이다. 심각도가 붙은 확인된 발견 43개는 장부다. 죽은 UI 감사는 17개의 발견을 확인했다. 부정직한 라벨 9개, 버그 1개, 실제 백엔드가 필요한 어포던스 7개. 죽은 버튼들은 규칙대로 비활성화되고 정직하게 표기됐지, 연출되지 않았다. 퍼널 감사는 36개의 발견을 냈다. 독립적인 적대 렌즈 두 개 아래의 보안 패스는 실질 수정 6건과 의도적으로 한정된 판정을 냈다. \"로컬 단일 사용자 구성에 대해 견고함\". 실제로 시험된 것에 스코프를 맞춘 주장이고, 이제 두 시스템에 허용되는 유일한 종류의 보안 주장이다.","en":"The adversarial machinery paid for itself in ways single review never had, and the returns showed up at every scale. A fan-out audit of one System B subsystem (49 independent agents, each confined to a single lens, every candidate finding individually refuted) confirmed 43 findings, 2 high, 25 medium, 16 low, all fixed; the worst was an O(N²) index layout that took 13.86 seconds to first-scan a thousand records. The refutation stage is what separates this from brainstorming at scale: the raw output of those 49 agents would itself be workslop; forty-three confirmed findings with severities attached are a ledger. A dead-UI audit confirmed 17 findings: 9 dishonest labels, 1 bug, 7 affordances needing real backends. The dead buttons were disabled and labeled honestly, per the rule, not faked. A funnel audit produced 36 findings. A security pass under two independent adversarial lenses yielded 6 material fixes and a deliberately bounded verdict, \"robust for the local single-user configuration,\" a claim scoped to what was actually tested, which is the only kind of security claim I now let either system make."},{"src":"ai-design-decision-maker-paper-v2","i":42,"ko":"또 다른 크로스 벤더 발견은 시스템 수준의 비용을 드러냈다. 시스템 B의 정례 크로스 체크가 후속 조치 7건을 냈는데, 그중 하나가 내가 의심할 생각조차 못 했던 경로를 가리켰다. 스토어 스캔, 시스템이 스토어를 처음 만날 때 모든 레코드를 도는 코드. 레코드 2,000개에서 그 첫 스캔은 52초가 걸렸다. 그 안의 어떤 단일 함수도 뚜렷하게 잘못이 아니었다. 비용은 전체 구조에서 나오고 있었다. 함수 단위 유닛 테스트로는 결코 드러나지 않는 종류의 점근적 거동이다. 재설계는 같은 스캔을 52초에서 0.002초로 가져갔다. 결과는 자기 주장을 확인하도록 만든 시스템 안에서 26,000배의 성능 차이를 드러냈다.","en":"Another different-vendor finding exposed a system-level cost. A routine cross-check of System B produced 7 follow-ups, and one of them pointed at a path I had never thought to question: the store scan, the code that walks every record the first time the system meets a store. On 2,000 records, that first scan took 52 seconds. No single function in it was obviously at fault; the cost lived in the shape of the whole, the kind of asymptotic behavior that per-function unit tests never surface. The redesign took the same scan from 52 seconds to 0.002. The result exposed a 26,000-fold difference inside a system built to check its own claims."},{"src":"ai-design-decision-maker-paper-v2","i":43,"ko":"같은 체제는 다 만든 뒤에만이 아니라 만들기 전에도 돌았다. 시스템 B에 새 기능이 자랄 때, 다른 벤더의 적대적 리뷰가 *코드가 존재하기도 전에* 명세를 공격해 여섯 개의 공격을 냈다. 여섯 개 전부 실제 설계 결함으로 확인됐고, 하나하나가 구현의 재작업 대신 문서의 수정이 됐다. 빌드는 그 뒤 테스트 스위트 261개가 모두 통과한 상태(이전에는 253개), 범위 이탈을 잡는 스코프 가드 통과, 네 가지 관점으로 같은 모델에게 시킨 발견 0건의 리뷰, must-fix 0건의 다른 벤더 크로스 체크, 그리고 실제 출력에 대한 라이브 HTTP 테스트와 함께 출고됐다. 그 테스트는 각각 출처 증거가 붙은 플래그된 변경 2건과 열린 후속 조치 2건을 표면화했다. 기능의 핵심 동작은 assertion으로 대신되지 않고 끝에서 끝까지 실제로 구동됐다. 스위트의 누적 카운트(93, 115, 183, 216, 226, 228, 242, 246, 253, 261, 268)는 이 프로젝트에 계속 기록된 유일한 수열이지만, 정확성을 측정한 값은 아니다.","en":"The same regime ran forward, not just backward. When System B grew a new feature, a different-vendor adversarial review attacked the specification *before any code existed* and produced six attacks; all six were confirmed as real design flaws, and every one of them became an edit to a document instead of rework in an implementation. The build then shipped with the suite at 261 green (up from 253), a clean scope-guard pass, a four-lens same-model review with zero findings, a different-vendor cross-check with zero must-fix items, and a live HTTP test of the actual output, which surfaced two flagged changes, each with source evidence attached, plus two open follow-ups. The feature's core behavior was exercised end-to-end rather than asserted. The suite's rolling counts (93, 115, 183, 216, 226, 228, 242, 246, 253, 261, 268) are the only continuously logged series the project has, which is not the same as a measure of correctness."},{"src":"ai-design-decision-maker-paper-v2","i":44,"ko":"시스템 둘, 운영자 하나, 다른 제품, 그리고 둘 다에 같은 기관 넷이 자랐다. 결정론적 판정, 다른 벤더의 적대자, 검증기를 검증하는 스냅샷 메커니즘, 명시적으로 표시된 경계에 선 사람. 이 수렴이 무엇을 의미하는지에 대해서는 조심스럽다. 두 시스템은 같은 운영자와 그 운영자의 습관 및 맹점을 공유하고, 기관 하나는 의도적으로 이식됐으니 수렴은 부분적으로만 독립적이다. 내가 보고해 온 판정 어디에도 평가자 간 일치 검사는 없었다. \"확인된 발견\"과 \"must-fix\"는 내 분류이고, 장부에 오른 에피소드들은 지금 그것을 인용하는 바로 그 사람이 골랐다. 완화 장치들, 그러니까 다른 벤더 리뷰와 사람 서명 규칙도 그것이 견제해야 할 바로 그 사람이 설계했다. 문서들은 시스템 A의 테스트 스위트 크기를 서로 맞아떨어지지 않는 두 가지 방식으로 보고한다. 차이는 아직 해소되지 않았고, 따라서 그 스위트 규모 수치는 증거로 사용하지 않는다. 기록이 지지하는 것은 소박하다. 정직한 배포 피드백이 무관한 두 시스템을 다시 빚도록 허용됐을 때, 그 빚어짐은 제품 특정적이지 않았다. 같은 거버넌스가 두 번 자랐다.","en":"Two systems, one operator, different products, and the same four organs in both: deterministic adjudication, a different-vendor adversary, a snapshot mechanism that verifies the verifier, and a human at an explicitly marked boundary. I'm careful about what this convergence means. The systems share me, my habits and my blind spots, and one organ was carried over deliberately, so the convergence is only partly independent. There was no inter-rater check on any of the judgments I've been reporting; \"confirmed finding\" and \"must-fix\" are my classifications, and the episodes that made it into the ledgers were selected by the same person who is now citing them. The mitigations, different-vendor review and human sign-off rules, were designed by the same person they exist to check. My own documents even report System A's test-suite size in two ways that don't cleanly reconcile. The discrepancy remains unresolved and those suite-size counts are therefore not used as evidence. What the record does support is modest: when honest deployment feedback was allowed to reshape two unrelated systems, the reshaping wasn't product-specific. The same governance grew twice."},{"src":"ai-design-decision-maker-paper-v2","i":47,"ko":"두 시스템 모두 여러 조건을 함께 충족해야 출고할 수 있다. 제네릭 게이트와 다른 결정론적 검사를 통과하고, 적대적 검토에서 확인된 중대 결함이 없어야 하며, 잠재 니즈에 닿는 판단에는 사람이 서명해야 한다. 앞의 두 조건만 같은 입력에서 같은 결과를 내므로 계산 과정을 감사할 수 있다. 적대적 검토에는 확률적 모델이 참여하고 서명은 사람이 하므로, 전체 결정은 의도적으로 재현 가능한 함수가 아니다. 어떤 구성 요소도 혼자 출고할 권한을 갖지 않는다. 결정론적 코드를 빼면 리포팅 봇처럼 근거 없는 값을 유창하게 제시할 수 있다. 바깥 적대자를 빼면 초록색 테스트 스위트 뒤에 결함 세 개가 남는다. 사람을 빼면 조작화된 기준이 없는 잠재 니즈에 확신 있는 판정이 붙는다. 코드, 서로 다른 벤더의 모델, 사람, 각자가 관측한 내용을 남긴 기록이 권한을 나눠 가진다. 기록은 확률적 검토를 개별적으로 재현하거나 기각할 수 있는 발견 목록으로 바꾼다.","en":"Shipping in either system requires a conjunction. The genericness gate and the other deterministic checks must pass; an adversarial attempt must return no confirmed blocker; and a person must sign whenever the decision touches latent need. Only the first two conditions are pure functions of the input. Running them twice on the same data produces the same result and makes the calculation auditable. Adversarial review uses a stochastic model, while the signature comes from a person, so the full decision is deliberately not reproducible. No component has enough authority to release alone. Removing deterministic code returns the reporting-bot failure: a fluent model can supply an ungrounded value. Removing the outside adversary leaves the three shipped defects behind a green suite. Removing the person turns latent need into a confident verdict without an operational criterion. Authority is distributed across code, models from more than one vendor, a person, and records of what each component observed. Those records turn a stochastic review into named findings that can be reproduced or rejected individually."},{"src":"ai-design-decision-maker-paper-v2","i":48,"ko":"자동화를 과신하는 문제에 대응하는 한 방법은 신뢰가 필요한 순간에 마찰을 더하고 사람이 다시 확인하게 만드는 것이다. 두 시스템은 그 마찰을 상호작용 화면이 아니라 아키텍처에 배치했다. LLM이 제 성과를 설명하는 일이 여기서 저지되는 게 아니다. 게이트 통과의 증거로서 *구조적으로 증거 능력이 없는* 것이다. \"생성기가 아니라 결정권자\"는 AI의 승진처럼 들린다. 실제로 지어 놓고 보면 정반대다. 모델의 생성 재능은 어디서나 활용하되 모델의 증언은 어디서도 신뢰하지 않는 규율이다.","en":"There is a broader tradition here that I only recognized in hindsight. Automation can be over-trusted, and a common response works at the interaction layer: add friction at the moment of trust and prompt a person to check again. What these two systems did, without my framing it this way at the time, was push the friction out of the interaction and into the architecture. An LLM's account of its own performance isn't discouraged here; it is *structurally inadmissible* as gate-passing evidence. \"Decision-maker, not generator\" sounds like a promotion for the AI. Built out, it is the opposite: a discipline, in which the model's generative talent is used everywhere and its testimony is trusted nowhere."},{"src":"ai-design-decision-maker-paper-v2","i":50,"ko":"이 장치는 조작화할 수 있는 판단만 처리한다. 아직 조작화되지 않은 질문은 권한 밖에 남는다. 두 시스템은 그런 질문을 코드에서 표시하고, 기준이 없는 상태를 점수로 바꾸는 대신 사람에게 전달한다. 이 경계 역시 실행 가능한 설계의 일부이며 출력물을 읽는 사람의 주의력에만 맡기지 않는다.","en":"All of this machinery governs the operational part of design judgment. Questions that have not been operationalized remain outside its authority. Both systems mark those questions in code and route them to a person instead of converting an absent criterion into a score. The boundary is part of the executable design, not an informal expectation placed on whoever happens to read the output."},{"src":"ai-design-decision-maker-paper-v2","i":51,"ko":"심에 있는 질문은 이것이다. 이 디자인은 사용자의 진짜 잠재 문제를 푸는가? 잠재 니즈는 정의상 명시된 요구사항이 포착하지 못하는 것이고, 따라서 그에 대한 자동 판정은 확신에 차 있고, 값싸고, 속이 비어 있을 것이다. 그걸 막으려고 만든 바로 그 기계가 제조하는 워크슬롭. 시스템 A는 그 질문 주변에서 확인 *가능한* 것은 자동화한다. 상태 커버리지 탐지기가 empty, loading, error 상태가 빠진 상호작용 표면을 표시하고, `has_loading: true` 같은 선언된 자기 보고는 무시한다. 실제 상태 노드가 있든가, 아니면 없는 것이다. 주장은 증거가 아니니까. 하지만 탐지기들 위에는 최종 목적 적합성 판단을 언제나 사람에게 에스컬레이션하는 신호가 앉아 있고, 코드베이스에는 \"자동화 불가\"라고 주석이 달려 있다. 그 출력은 절대 시각 점수에 평균되지 않는다. 제 일에 실패한 아름다운 디자인이 미학으로 구제되어서는 안 되고, 그 역도 안 되기 때문이다. 자율 파이프라인은 같은 경계를 자기 자신에게도 강제한다. 제안된 변경은 객관, 취향, 전략, IP로 분류되고, 테스트로 게이트할 수 있는 객관 항목만 나 없이 진행된다.","en":"The question at the core is: does this design solve the user's real, latent problem? Latent needs are, by definition, what stated requirements fail to capture, so an automated verdict on them would be confident, cheap, and hollow: workslop manufactured by the very machinery meant to prevent it. System A automates what *can* be checked around that question. A state-coverage detector flags interactive surfaces missing empty, loading, and error states, and it ignores declared self-reports like `has_loading: true`. Actual state nodes or nothing, because a claim is not evidence. But above the detectors sits a signal that always escalates the final fitness-for-purpose judgment to a human, annotated in the codebase as \"not automatable.\" Its output is never averaged into the visual score, because a beautiful design that fails its job must not be rescued by its aesthetics, nor the reverse. The autonomous pipeline enforces the same boundary on itself: proposed changes are classified objective, taste, strategy, or IP, and only test-gateable objective items proceed without me."},{"src":"ai-design-decision-maker-paper-v2","i":52,"ko":"경계는 자기 자신의 확장까지 다스린다. 시스템 A에는 완전 무인 모드가 있다. 만들어졌고 테스트도 끝났고, 매일 스케줄로 나 없이 개선 파이프라인을 돌릴 수 있다. 그것은 의도적으로 꺼진 채 사람 손을 기다리고 있다. 장식으로 붙인 신중함이 아니다. 에스컬레이션 경계를 파이프라인 자체에 적용한 것이다. 기계의 권한을 넓히는 일은 심에 걸린 판단이고, 그 판단은 기계가 내릴 수 없다.","en":"The boundary even governs its own expansion. System A has a fully unattended mode, built and tested, capable of running the improvement pipeline without me on a daily schedule. It is deliberately left switched off, awaiting a human hand. That isn't caution as decoration; it's the escalation boundary applied to the pipeline itself. Widening the machine's authority is a core-side judgment, and the machine doesn't get to make it."},{"src":"ai-design-decision-maker-paper-v2","i":53,"ko":"경계는 움직일 수 있다. 현재의 탐지기 중 일부는 \"또 Tailwind 기본 파랑이네\" 같은 암묵적 관찰에서 출발해 나중에 술어가 됐다. 다른 판단도 같은 과정을 거칠 수 있다. 다만 무엇을 검사하고 결과를 어떻게 확인할지 정의하기 전에는 기계가 판정을 내리지 못한다. 권한의 경계를 코드에 두면 확장 방식도 달라진다. 정책 문서는 실제 동작에 흔적을 남기지 않은 채 예외가 쌓일 수 있다. 코드는 변경 diff를 요구하고 출고 과정은 새 권한이 작동하기 전에 그 diff를 표시한다.","en":"The boundary can move. Several current detectors began as tacit observations, including repeated use of Tailwind's default blue, and later became predicates. Other judgments may follow the same path. The architecture blocks a machine verdict until someone has defined what the system will inspect and how the result can be checked. Encoding the boundary in code also changes how authority expands. A policy can accumulate informal exceptions without leaving an operational trace. Code requires a diff, and the release process exposes that diff before the new authority takes effect."},{"src":"ai-design-decision-maker-paper-v2","i":55,"ko":"AI는 판단을 결정론적으로 만들고 적대적 검토나 사람의 확인을 붙일 수 있는 범위에서만 디자인 결정을 맡았다. 그 안에서 제네릭 게이트는 실제 출고 권한을 가졌다. 그 밖에서는 증거 유형에 따라 일을 나눴다. LLM은 후보, 비평, 질문, 계획을 만들었다. 결정론적 코드는 입력을 채점하고 산수를 수행해 pass/fail을 반환했다. 다른 벤더의 모델은 출고 전에 작업을 반증하려 했다. 취향, 전략, 잠재 적합성, 기계의 권한을 넓힐지는 사람의 결정으로 남았다. 모델은 자기 성공의 증거를 제공할 수 없었다. 테스트 스위트를 실제로 실행하고 그 결과를 관측해야 통과로 인정했다.","en":"AI held a design decision only where the judgment could be made deterministic and checked by an adversary or a person. Within that range, the genericness gate had real release authority. Beyond it, the work divided by evidence type. The LLM generated candidates, critiques, questions, and plans. Deterministic code scored inputs, performed arithmetic, and returned pass or fail. A model from another vendor tried to refute the work before release. Taste, strategy, latent fit, and any expansion of machine authority remained human decisions. The operating rule was simple: a model could not supply evidence for its own success. The test suite had to run and its result had to be observed."},{"src":"ai-design-decision-maker-paper-v2","i":56,"ko":"결정론은 재현성과 감사 가능성을 제공했지만 정확성을 보장하지 않았다. `if overall > 0` 가드는 완벽하게 결정론적이었다. 데이터가 없을 때 계산을 건너뛰려던 조건이 유효한 값 q = 0에서도 발화해, 페널티가 최대가 되어야 할 자리에서 사라졌다. 큰 테스트 스위트 아래에서 함수는 매번 같은 오답을 냈다. 더 나쁜 품질이 점수를 낮출 수 없다는 전역 속성을 어떤 테스트도 명시하지 않았다. 확률적 심판의 실패는 잡음처럼 보이지만 결정론적 코드의 실패는 사실처럼 보인다. 그래서 검사 계층에도 별도의 적대자가 필요했다. 시스템은 결함을 없애지 않고 입력과 출력을 검사할 수 있는 더 작은 계층으로 옮겼다. 원인을 찾기는 쉬워졌지만 같은 가정에서 만든 예시가 아니라 가정 자체를 공격한 뒤에야 가능했다.","en":"Determinism supplied reproducibility and auditability, but it did not supply correctness. The `if overall > 0` guard was perfectly deterministic. It was intended to skip a missing quality value, yet it also skipped the valid value q = 0, where the penalty should have reached its maximum. Under a large passing test suite the function returned the same wrong answer every time. No test stated the global property that worse quality could never reduce the score. That stability made the result look more trustworthy, not less. Failures from a stochastic judge resemble noise; failures from deterministic code resemble facts. The checking layer therefore needed an adversary of its own. The system did not eliminate defects. It relocated them into a smaller layer whose inputs and outputs could be inspected, and that layer still broke three times during the experiment. A narrower failure surface made diagnosis possible, but only after something tested the assumptions rather than another example generated from them."},{"src":"ai-design-decision-maker-paper-v2","i":57,"ko":"크로스 벤더 검토에는 비용과 지연이 따르므로 두 시스템 모두 단계를 나눴다. 일상적인 변경은 같은 모델 계열의 검토가 1선을 맡았다. 다른 벤더는 되돌리기 어려운 변경, 수치가 들어간 주장, 외부에 보이는 작업, 사람의 판단 경계에 닿는 항목에 의무적으로 참여했다. 검토를 생략하면 이유를 기록했다. 더 비싼 팬아웃 감사는 마일스톤에만 사용했다. 검사 코드도 별도의 유지보수 표면이 됐다. 거짓 청정, 부서진 가드, 시한폭탄 테스트는 검사받는 코드가 아니라 검사하는 코드에서 발생했다. 새로운 탐지기와 스냅샷, 완료 마커도 각각 다시 검사해야 할 주장을 하나씩 늘렸다. 이 1인 운영에서는 해당 기간 동안 기록된 날조 없이 평가기의 자율 변경을 매일 출고할 수 있었다. 취미 프로젝트나 큰 팀에서는 같은 조건을 시험하지 않았다.","en":"Cross-vendor review added cost and latency, so both systems used tiers. Same-model review served as the first line on routine changes. Another vendor was required for irreversible changes, numerical claims, externally visible work, and decisions near the human boundary; a skipped review left a reason in the record. Fan-out audits cost more and were reserved for milestones. The checking code also created its own maintenance surface. The false clean, broken guard, and time-bomb test all lived in the layer doing the inspection. In this one-person deployment, the process supported daily evaluator changes without a recorded fabrication incident during the period. The experiment did not cover either a hobby project or a larger team."},{"src":"ai-design-decision-maker-paper-v2","i":58,"ko":"실험에는 통제 조건이 없고, 같은 작업을 이 체제 없이 진행한 평행한 기간도 없다. 전후 비교는 시스템이 자체 계기로 측정했으며 그 계기 자체가 기간 동안 바뀌었다. 따라서 수치는 하나의 원인을 분리하지 못한다. +31.2점 차이도 개발 중에 사용한 실제 제품 토큰 세트 11개와 손으로 만든 제네릭 번들 4개에서 계산됐다. 기록은 운영자 한 명, 툴체인 하나, 짧은 기간을 다룬다. 이 조건에서 무엇이 일어났는지와 어떤 실패가 발생했는지는 보여 주지만, 사람과 인센티브, 검토 예산이 다른 환경에서 같은 배치가 어떻게 작동할지는 확립하지 못한다. 결과는 방법 간 비교 평가가 아니라 하나의 운영 기록이다.","en":"The experiment had no control condition and no parallel period in which the same work proceeded without this process. The before-and-after measurements came from the systems' own instruments, and those instruments changed during the period. The numbers therefore isolate no single cause. Even the +31.2-point separation was calculated on eleven selected product token sets and four hand-built generic bundles used during development. The record covers one operator, one toolchain, and one compressed window. It establishes what happened under those conditions, including the failures, but does not establish how the same arrangement would perform with different people, incentives, or review budgets. The result is an operating record rather than a comparative evaluation of methods."},{"src":"ai-design-decision-maker-paper-v2","i":59,"ko":"디자인 도구로 옮길 수 있는 교훈은 구체적이다. 생성기만이 아니라 채점기를 출고하라. 출력이 *왜* 제네릭한지 이름 붙은 신호로 설명하고 fail-closed \"판정 불가\"를 갖춘 도구는, 변형 버튼이 하나 더 생기는 것보다 사용자와 생성의 관계를 더 많이 바꾼다. 증거마다 상태를 타입으로 붙여라(*verified*, *drifted*, *missing*, *pending*). \"주장된 것\"과 \"입증된 것\"이 같은 게이트를 통과할 수 없도록. 그리고 사람에게 넘기는 경계를 부산물이 아니라 제품의 일부로 설계하라. 사람 몫으로 남는 판단은 자동화의 틈으로 새어 나가는 게 아니라, 증거가 첨부된 명시적 에스컬레이션으로 도착해야 한다.","en":"The transferable lesson for design tools is concrete. Ship the grader, not just the generator: a tool that can explain *why* an output is generic, with named signals and a fail-closed \"cannot assess,\" changes a user's relationship with generation more than another variant button does. Make evidence a type (*verified*, *drifted*, *missing*, *pending*), so that \"claimed\" and \"shown\" cannot pass the same gate. And treat the escalation boundary as a first-class surface: the judgments that stay human should arrive as explicit, evidence-attached escalations, not leak through gaps in the automation."},{"src":"ai-design-decision-maker-paper-v2","i":60,"ko":"현행 모델들의 생성 능력은 애초에 쟁점이 아니었다. 내 장부들이 시사하는 바는 디자인 도구에서 쓸모 있는 최전선은 다른 곳이라는 것이다. *아니오*라고 말하고, *왜*를 말하고, *판정 불가*를 말할 수 있고, 어떤 판단이 애초에 제 몫이 아니었는지 아는 기계 쪽이다.","en":"The generative capacity of current models was never in question. My ledgers suggest that the useful frontier for design tooling is elsewhere: in machinery that can say *no*, say *why*, say *cannot assess*, and know which judgments were never its to make."},{"src":"ai-design-decision-maker-paper-v2","i":63,"ko":"**점수.** G = clip(round(Σ w(sevᵢ)·σᵢ + 25·(1−q)), 0, 100), 정수. 심각도 가중치: high = 28, medium = 14, low = 0. q ∈ [0,1]은 별도 감사기의 전체 빌드 품질이며, 25점 페널티는 무조건 적용된다(`if overall > 0` 가드가 수리된 결함이었다).","en":"**Score.** G = clip(round(Σ w(sevᵢ)·σᵢ + 25·(1−q)), 0, 100), an integer. Severity weights: high = 28, medium = 14, low = 0. q ∈ [0,1] is the separate auditor's overall build quality; the 25-point penalty is applied unconditionally (the `if overall > 0` guard was the repaired defect)."},{"src":"ai-design-decision-maker-paper-v2","i":64,"ko":"**밴드.** 0~20 low; 21~45 borderline; 46~70 high (generic); 71~100 very high (slop). 등급 \"?\"는 밴드를 \"판정 불가\"로 덮어쓴다.","en":"**Bands.** 0 to 20 low; 21 to 45 borderline; 46 to 70 high (generic); 71 to 100 very high (slop). A grade of \"?\" overrides the band to \"cannot assess.\""},{"src":"ai-design-decision-maker-paper-v2","i":65,"ko":"**등급** (위에서 아래로 평가): 발화한 신호가 없고 입력이 색 2개 미만에 폰트 없음이면 \"?\"; high 심각도 신호 ≥ 3 또는 q < 0.40이면 F; high ≥ 1 또는 q < 0.60이면 D; medium ≥ 2 또는 q < 0.75이면 C; medium ≥ 1 또는 q < 0.90이면 B; 그 외 A. 거부는 의도적으로 좁다. 빈약한 입력이라도 신호를 하나 건드리면(무채색 단 하나가 *no-brand-color*를 발화시킨다) 그 신호로 등급이 매겨지지, 판정 불가로 면제되지 않는다. \"?\"는 그렇지 않았다면 깨끗한 A였을 것만 덮어쓴다. D나 F를 선점하는 일은 없다.","en":"**Grades** (evaluated top-down): \"?\" if no signal fired and input has fewer than 2 colors and no fonts; F if high-severity signals ≥ 3 or q < 0.40; D if high ≥ 1 or q < 0.60; C if medium ≥ 2 or q < 0.75; B if medium ≥ 1 or q < 0.90; else A. The refusal is deliberately narrow: a sparse input that still trips a signal (a single achromatic color fires *no-brand-color*) is graded on that signal, not excused as unassessable. \"?\" overrides only what would otherwise have been a clean A; it never preempts a D or an F."},{"src":"ai-design-decision-maker-paper-v2","i":66,"ko":"**핵심 탐지기.** *ai-default-color* (high): 13개 hex 프레임워크 기본값 세트(Tailwind / Bootstrap / Material / Ant 재고 색상)에 속하는 색. *ai-default-indigo* (high): 7개 hex 기본 인디고/퍼플 세트에 속하는 색. *no-brand-color* (high): 모든 색이 회색조(RGB 채널 max−min ≤ 12). *default-font* (medium): 모든 폰트의 기본 패밀리가 Inter, Roboto, Arial, Helvetica 같은 기본값. 첫 단어로 매칭하므로 \"Inter Variable\"은 \"inter\"로 정규화된다. *too-many-accents* (medium): 비회색 색상이 12개 초과. *single-accent-monotone* (medium): 색 6개 이상 가운데 비회색이 정확히 1개. 색 매칭은 정확한 정규 hex다. 표기 정규화만 하고 지각적 근사 매칭은 없다. 손으로 감사할 수 있는 단순함을 위해 재현율을 내준 의도적 거래. 한정사에 주목할 것: *default-font*와 *no-brand-color*는 \"*전부* 기본값 혹은 회색인가\"를 물으므로, 기본값 아닌 토큰이 하나만 있어도 꺼진다. 혼합 세트는 구조적으로 보존된다.","en":"**Core detectors.** *ai-default-color* (high): any color in a 13-hex framework-default set (Tailwind / Bootstrap / Material / Ant stock colors). *ai-default-indigo* (high): any color in a 7-hex default indigo/purple set. *no-brand-color* (high): every color is gray-ish (max−min RGB channel ≤ 12). *default-font* (medium): all fonts' base families are defaults such as Inter, Roboto, Arial, Helvetica, matched by first word, so \"Inter Variable\" normalizes to \"inter.\" *too-many-accents* (medium): more than 12 non-gray colors. *single-accent-monotone* (medium): exactly 1 non-gray color among 6+ colors. Color matching is exact canonical hex: notation normalization only, no perceptual near-matching, a deliberate trade of recall for hand-auditable simplicity. Note the quantifiers: *default-font* and *no-brand-color* ask \"is *everything* default or gray?\", so a single non-default token switches them off; mixed sets are preserved by construction."},{"src":"ai-design-decision-maker-paper-v2","i":67,"ko":"**게이트.** Ship = [G ≤ 임계값] ∧ 결정론적 검사들 ∧ (적대자의 반증이 빈손으로 돌아옴) ∧ (변경이 잠재 니즈 판단에 닿는 곳에서는 사람 서명). 앞의 두 항만 입력의 순수 함수다. 게이트 전체는 의도적으로 재현 가능하지 않다.","en":"**Gate.** Ship = [G ≤ threshold] ∧ deterministic checks ∧ (adversary's refutation returns empty) ∧ (human signature where the change touches latent-need judgment). Only the first two conjuncts are pure functions of the input; the full gate is deliberately not reproducible."},{"src":"ai-design-decision-maker-paper-v2","i":68,"ko":"**커밋 래퍼.** 변경 전 SHA를 커밋 메시지에 기록한다; 변경에 인접한 테스트를 돌린다; 두 번 연속 실패하면 스냅샷으로 하드 리셋하고 must-fix를 기록한다. 종료 코드: 0 = 커밋됨; 1 = 실패 후 복원됨; 2 = 복원 자체가 실패, 파이프라인 정지 및 에스컬레이션; 64 = 사용법 오류. `git add -A`와 `git add .`는 하드 블록된다. 표적을 지정한 add만 허용된다. 일일 cron으로 돌고, 완전 무인 경로는 존재하되 의도적으로 사람의 활성화를 기다린다.","en":"**Commit wrapper.** Records the pre-change SHA into the commit message; runs the tests adjacent to the change; on two consecutive failures, hard-resets to the snapshot and logs a must-fix. Exit codes: 0 = committed; 1 = restored after failure; 2 = the restore itself failed, so the pipeline stops and escalates; 64 = usage error. `git add -A` and `git add .` are hard-blocked; only targeted adds are permitted. Runs on a daily cron; the fully unattended path exists and deliberately awaits human activation."},{"src":"ai-design-decision-maker-paper-v2","i":69,"ko":"**캘리브레이션.** 분리 Δ = mean(generic G) − mean(distinct G), 실제 제품 토큰 세트 11개와 손으로 만든 제네릭 번들 4개로 이루어진 골든 세트 기준. 기록된 상태 넷, 각각을 자기 커밋에서 재실행해 확인했다: 정확 매칭 폰트 탐지 시절의 +14.6 (distinct 6.4, generic 21.0); 기본 패밀리 매칭과 fail-closed 게이트 이후의 +13.4 (7.6, 21.0); 프레임워크 기본 색상 탐지기 이후의 +27.4 (7.6, 35.0); 독자적 제품 셋에 벌점을 주고 있던 거짓 양성 규칙을 나중에 고친 뒤의 현재값 +31.2 (3.8, 35.0). distinct 항목에서의 default-font 발화: 11개 중 1개(figma, 42/D). 순위 역전은 독자적 디자인이 28/D로 제네릭 목업 14/B 위에 있던 사건이었다; 프레임워크 기본 색상 탐지기가 그 번들들을 42/D로 끌어올렸다.","en":"**Calibration.** Separation Δ = mean(generic G) − mean(distinct G) over a golden set of 11 real product token sets and 4 hand-built generic bundles. Four logged states, each re-run from its own commit: +14.6 (distinct 6.4, generic 21.0) with exact-match font detection; +13.4 (7.6, 21.0) after base-family matching and the fail-closed gate; +27.4 (7.6, 35.0) after the framework-default color detector; +31.2 (3.8, 35.0) now, after a later correction to a false-positive rule that had been penalizing three distinct products. Default-font fires on distinct items: 1 of 11 (figma, at 42/D). The rank reversal was a distinct design at 28/D above generic mockups at 14/B; the framework-default color detector lifted those bundles to 42/D."},{"src":"ai-design-decision-maker-paper-v2","i":71,"ko":"**DNA 축.** 옵트인 캐릭터 축 6개(색, radius, 타이포그래피, 조닝, 컴포넌트 형태, 모션). 예: premium은 radius에 0.8을 곱하고 그림자를 깊게 하며, playful은 1.3을 곱하고 그림자를 가볍게 한다; premium 모션은 400ms ease-out, playful은 250ms spring. 각 축은 비-DNA 출력에 대해 회귀를 일으키지 않음이 회귀 테스트로 확인된다.","en":"**DNA axes.** Six opt-in character axes (color, radius, typography, zoning, component form, motion). Examples: premium multiplies radius by 0.8 and deepens shadows, playful by 1.3 and lightens them; premium motion 400ms ease-out, playful 250ms spring. Each axis is regression-tested to be non-regressing on non-DNA output."},{"src":"ai-design-decision-maker-paper-v2","i":72,"ko":"**사이클 기록.** 대략 17회의 날짜 기록된 자율 개선 사이클, 2026-07-02부터 2026-07-21까지. 각 사이클의 게이트: 적대적 검토자 통과, 전체 테스트 스위트의 초록 관측(에이전트 자기 보고는 증거로 불인정), diff 안의 금지 대상 0건.","en":"**Cycle record.** Roughly 17 dated autonomous improvement cycles, 2026-07-02 through 2026-07-21, each gated on: adversarial reviewer pass, full test suite observed green (agent self-reports inadmissible), and zero forbidden targets in the diff."},{"src":"ai-design-decision-maker-paper-v2","i":73,"ko":"**시스템 B 장부.** 강제 계층 2026-07-15 완성, 테스트 93/93; 누적 스위트 카운트 93 → 115 → 183 → 216 → 226 → 228 → 242 → 246 → 253 → 261 → 268. 팬아웃 서브시스템 감사: 확인된 발견 43건(high 2 / medium 25 / low 16); 최악은 레코드 1,000개 첫 스캔 13.86초의 O(N²). 죽은 UI 감사: 확인 17건(라벨 정직성 9, 버그 1, 백엔드 필요 7). 퍼널 감사: 발견 36건. 크로스 벤더 라운드: 후속 조치 7건, 52초 → 0.002초 스토어 스캔 재설계 포함.","en":"**System B ledger.** Enforcement layer completed 2026-07-15 at 93/93 tests; rolling suite counts 93 → 115 → 183 → 216 → 226 → 228 → 242 → 246 → 253 → 261 → 268. Fan-out subsystem audit: 43 confirmed findings (2 high / 25 medium / 16 low); worst, an O(N²) first scan at 13.86s for 1,000 records. Dead-UI audit: 17 confirmed (9 label honesty, 1 bug, 7 needing backends). Funnel audit: 36 findings. Cross-vendor round: 7 follow-ups, including the 52s → 0.002s store-scan redesign."},{"src":"ai-design-decision-maker-paper-v2","i":76,"ko":"- Simon Willison, [*Slop is the new name for unwanted AI-generated content*](https://simonwillison.net/2024/May/8/slop/) (2024)\n- BetterUp Labs and Stanford Social Media Lab, [*AI-Generated \"Workslop\" Is Destroying Productivity*](https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity), Harvard Business Review (2025)\n- Anil R. Doshi and Oliver P. Hauser, [*Generative AI Enhances Individual Creativity but Reduces the Collective Diversity of Novel Content*](https://doi.org/10.1126/sciadv.adn5290) (2024)\n- Barrett R. Anderson, Jash Hemant Shah, and Max Kreminski, [*Homogenization Effects of Large Language Models on Human Creative Ideation*](https://doi.org/10.1145/3635636.3656204) (2024)\n- J.D. Zamfirescu-Pereira, Richmond Y. Wong, Bjoern Hartmann, and Qian Yang, [*Why Johnny Can't Prompt: How Non-AI Experts Try (and Fail) to Design LLM Prompts*](https://doi.org/10.1145/3544548.3581388) (2023)\n- Arjun Panickssery, Samuel R. Bowman, and Shi Feng, [*LLM Evaluators Recognize and Favor Their Own Generations*](https://arxiv.org/abs/2404.13076) (2024)","en":"- Simon Willison, [*Slop is the new name for unwanted AI-generated content*](https://simonwillison.net/2024/May/8/slop/) (2024)\n- BetterUp Labs and Stanford Social Media Lab, [*AI-Generated \"Workslop\" Is Destroying Productivity*](https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity), Harvard Business Review (2025)\n- Anil R. Doshi and Oliver P. Hauser, [*Generative AI Enhances Individual Creativity but Reduces the Collective Diversity of Novel Content*](https://doi.org/10.1126/sciadv.adn5290) (2024)\n- Barrett R. Anderson, Jash Hemant Shah, and Max Kreminski, [*Homogenization Effects of Large Language Models on Human Creative Ideation*](https://doi.org/10.1145/3635636.3656204) (2024)\n- J.D. Zamfirescu-Pereira, Richmond Y. Wong, Bjoern Hartmann, and Qian Yang, [*Why Johnny Can't Prompt: How Non-AI Experts Try (and Fail) to Design LLM Prompts*](https://doi.org/10.1145/3544548.3581388) (2023)\n- Arjun Panickssery, Samuel R. Bowman, and Shi Feng, [*LLM Evaluators Recognize and Favor Their Own Generations*](https://arxiv.org/abs/2404.13076) (2024)"},{"src":"design-engineering","i":1,"ko":"*화면이 우리 것처럼 느껴지지 않는다. 그러면 레퍼런스를 꺼내고 다른 방향을 함께 시도한다. '우리 것'의 기준은 사람들이 방향을 합의하기 전에는 생기지 않으므로, 이 판단은 빈 방에서 실행되지 않는다. 다만 한 가닥은 검사할 수 있었다. 실제로 시험해 보니 그 가닥은 예상보다 훨씬 좁았다.*","en":"*A screen does not feel like ours. References come out, alternatives follow, and the judgment develops in the room. It cannot run in an empty room because \"ours\" has no standard until people agree on a direction. One strand could be checked. Testing it showed how narrow that strand was.*"},{"src":"design-engineering","i":2,"ko":"디자이너로 일해 온 세월 대부분 동안, 내가 가장 확신하던 것은 증명할 수 없는 것이었다. *이건 우리 톤에 맞지 않아.* 맞는 순간에 맞는 화면을 두고 그 말을 하면, 그것은 질문을 닫기보다 열었다. 이런 레퍼런스는 어떤지, 톤을 이쪽으로 가져가면 어떤지. 경력 내내 화면을 보며 훈련된 진짜 판단이고, 그 판단이 어떻게 만들어졌는지는 내가 변호할 수 있다. 내가 결코 할 수 없던 것은 내가 없는 자리에서 이 판단을 돌리는 일, 두 번 돌려 같은 결과를 얻는 일, 옳았다고 증명하는 일이었다.","en":"For most of my working life as a designer, the thing I was surest about was the thing I could not prove. *This does not feel like ours.* Said about the right screen at the right moment, it did not close a question so much as open one: here are some references, what if the tone went this way. It is a real judgment, trained by a career of looking at screens, and I can defend its pedigree. What I could never do was run it without being present, run it twice identically, or prove it right."},{"src":"design-engineering","i":3,"ko":"그 한계는 어떤 산출물에도 나타나지 않았고, 그래서 그것을 일의 본성이 아니라 한계로 알아보는 데 경력 대부분이 걸렸다. 디자인 파일은 무엇이 선택됐는지를 기록한다. 디자인 시스템은 판단의 결론을 기록한다. 승인된 파랑들, 허가된 간격 단계들. 어느 쪽도 판정자를 기록하지 않는다. 어떤 토큰 파일도 처음 보는 화면을 향해 아니라고 말하지 못한다. 그래서 판단은 그 자리에서만 작동했다. 산출물마다 한 번, 내가 있는 자리에서, 산출물 말고는 아무 잔여물도 남기지 않고. 판단으로 채운 경력에서, 그것들이 쌓인 유일한 장소는 나였다.","en":"That limitation never appeared in any deliverable, which is why it took me most of a career to see it as a limitation rather than as the nature of the work. A design file records what was chosen. A design system records the conclusions of judgment: the approved blues, the sanctioned spacing steps. Neither records the judge. No token file can look at a screen it has never seen and say no. So the judgment ran live, once per artifact, in my presence, and left no residue except the artifact itself. A career of judgments, and the only place they accumulated was me."},{"src":"design-engineering","i":4,"ko":"지난 몇 달 동안 그 판단의 한 가닥을 디자인 시스템 도구의 결정론적 코드로 옮겼다. 도구와 다른 제품의 이름은 공개하지 않는다. 코드 대부분은 AI가 작성했고, 나는 기준을 정하고 구현을 검토하며 결과에 이의를 제기했다. 한계는 바로 드러났다. 화면이 우리 것인지는 도구가 결정할 수 없다. 제품이 지향하는 방향부터 사람들이 합의해야 하기 때문이다. 대신 서로 무관한 제품에서 반복되는 기본값을 화면이 그대로 사용했는지는 탐지할 수 있다. 이 좁은 판단은 점수가 됐고, 출고 게이트가 됐으며, 나중에는 도구가 참조하던 기본 팔레트에도 적용됐다. 점수는 같은 입력에서 다시 계산할 수 있고, 발화한 규칙은 원인이 된 값을 함께 보여 준다. 누가 같은 토큰을 넣어도 계산 과정과 결과가 같아서, 판정에 이견이 생기면 사람의 감각이 아니라 규칙과 입력값을 두고 논쟁할 수 있다. 디자이너가 자리에 없어도 검사는 돌지만, 검사 범위는 규칙이 읽을 수 있는 것에 묶인다. 실패들은 코드를 생산하는 일과 판단을 실행 가능하게 만드는 일이 서로 다르다는 것을 보여 줬다. 직함과 무관하게 이 행위를 디자인 엔지니어링이라고 부를 수 있다.","en":"Over the past several months, one strand of that judgment moved into deterministic code inside a design-system tool. The tool and the other products remain unnamed. AI wrote most of the code; I supplied the criteria, reviewed the implementation, and challenged the results. The limit appeared immediately. The tool cannot decide whether a screen belongs to the product because people must first agree on what the product is trying to be. It can detect whether the screen relies on defaults that recur across unrelated products. That narrower judgment became a score, then a release gate, and eventually a check against the reference palette used by the tool itself. Each score can be derived again from the same input, and every triggered rule names the value that caused it. The judgment no longer depends on the designer being present, but its scope is fixed by what the rules can inspect. The failures exposed the difference between producing code and making judgment executable. Design engineering is the useful name for that act, even when no one involved holds it as a job title."},{"src":"design-engineering","i":5,"ko":"수치의 근거는 테스트 로그, 버전 관리 이력, 날짜가 남은 파이프라인 실행 기록이다. 기록에서 그대로 재현한 값은 확정 수치로 적고, 정확한 횟수를 확인할 수 없는 경우에는 어림수라고 표시했다. 작업이 끝난 뒤 조건을 바꿔 새로 측정하거나 기억에 의존해 복원한 값은 사용하지 않았다.","en":"The numerical record consists of test logs, version-control history, and dated pipeline runs. Counts reproduced from those records are stated directly; approximate counts are marked as approximate. No figure in the account was reconstructed from memory or measured later under changed conditions."},{"src":"design-engineering","i":7,"ko":"디자인 크리틱이 실제로 무엇을 결판내는지 생각해 보자. 시니어 둘이 같은 화면을 본다. 한 사람은 이건 이 제품 같지 않다고 하고, 다른 사람은 이게 맞다고 한다. 둘 다 훈련으로 만들어진 감각이 내놓은 결과를 전하고 있을 뿐인데, 그 감각은 소유자 자신을 포함해 누구도 들여다볼 수 없다. 디자인 시스템은 어떤 파랑인지를 결판낼 수 있다. 이 화면이 이 제품 같은지는 결판내지 못하고, 그래서 그 불일치는 다른 수단으로 결판난다. 연차, 설득, 소진, 그게 누구 제품인가. 나는 그런 논쟁을 이겨도 봤고 져도 봤는데, 어느 경우에도 결과는 내 판단이 옳았는지 말해 주지 않았다. 불일치는 해소되지 않았다. 버텨서 넘겼을 뿐이다.","en":"Consider what a design critique actually settles. Two senior people look at the same screen. One says it does not feel like the product; the other says it feels right. Both are reporting the output of a trained instrument that no one else can inspect, including its owner. A design system can settle which blue. It cannot settle whether this screen feels like the product, so that disagreement gets settled by other means: seniority, persuasion, exhaustion, whoever's product it is. I have won those arguments and lost them, and in neither case did the outcome tell me whether my judgment had been correct. The disagreement was not resolved. It was outlasted."},{"src":"design-engineering","i":8,"ko":"그것이 내가 말하는 그 판단의 첫 번째 속성이다. 결판이 나지 않는다. 두 번째 속성은 스케일하지 않는다는 것이다. 판단은 산출물마다 한 번, 실시간으로, 소유자가 물리적으로든 가상으로든 그 자리에 있어야 돈다. 스케줄에 올릴 수 없다. 내가 보지 못한 작업을 두고 새벽 세 시에 돌 수 없다. 업계가 흔히 쓰는 확장 수단은 비슷하게 훈련된 사람을 더 뽑아 그들의 판단 기준이 서로 일치하기를 기대하는 것인데, 위의 크리틱 문제대로 그 기준들은 믿을 만하게 일치하지 않는다.","en":"That is the first property of the judgment I am describing: it is unsettleable. The second is that it does not scale. The judgment runs once per artifact, in real time, in the physical or virtual presence of its owner. It cannot be scheduled. It cannot run at three in the morning on work I have not seen. The industry's usual mechanism for scaling it is to hire more people with similar training and hope their instruments agree, which, per the critique problem above, they do not reliably do."},{"src":"design-engineering","i":9,"ko":"세 번째 속성이 결국 나를 가장 괴롭혔다. 판단이 책임을 지지 않는다는 것이다. 나중에 틀렸음이 드러날 수 있는 흔적을 하나도 남기지 않는다. 내가 죽인 방향이 사실은 통했을 방향이었을 때, 내가 그것을 죽였다는 사실도 이유도 기록되지 않았다. 내가 통과시킨 화면이 남들 것과 바꿔 끼워도 모를 물건으로 드러났을 때, 내가 그것을 통과시켰다는 사실은 어디에도 철해져 있지 않았다. 증거를 달고, 반박에 열린 채로 보관된 적이 없다. 산출물은 살아남고 판단은 증발한다. 크래프트를 자부하는 직업이 무엇을 골랐는지는 남기면서, 고르는 일 자체에 대해서는 사람 말고 저장 포맷을 갖지 못했다.","en":"The third property is the one that came to bother me most: the judgment is unaccountable. It leaves no trace against which it could later be found wrong. When a direction I killed would have worked, nothing recorded that I killed it or why. When a screen I passed turned out to be interchangeable with everyone else's, the fact that I had passed it was not on file anywhere, attached to evidence, available for refutation. The artifact survives; the judgment evaporates. A profession that prides itself on craft records what it chose and has no storage format for the choosing except a person."},{"src":"design-engineering","i":10,"ko":"안에서 볼 때는 이 중 무엇도 결함으로 느껴지지 않았다. 디자인의 이 부분은 원래 그런 것으로 느껴졌다. 그 자리에서 한 번 해내는 판단. 대안을 지어 보고 나서야 캔버스가 또렷이 보였다. 방의 웅웅거림을 우리는 그것이 멎고 나서야 알아차린다.","en":"None of this felt like a defect from inside. It felt like what this part of design is: judgment performed live, once, in the room. It took building the alternative to see the canvas clearly, the way you only notice a room's hum when it stops."},{"src":"design-engineering","i":12,"ko":"판단은 왜 눈 안에 머물렀나? 판단이 소유자 없이 돌 수 있는 유일한 형태는 실행 가능한 형태이고, 실행 가능한 형태란 코드였고, 코드는 벽이었기 때문이다.","en":"Why did the judgment stay in the eye? Because the only form in which a judgment can run without its owner is executable form, and executable form meant code, and code was a wall."},{"src":"design-engineering","i":13,"ko":"\"디자이너는 코딩을 못 한다\"는 말은 장벽을 잘못 설명한다. 결정적인 비용은 문법보다 변환에 있었다. 판단 하나를 실행 가능한 형태로 옮기려면 첫 술어를 쓰기 전부터 몇 년의 숙련이 필요했다. 그 술어가 실제로 쓸모 있는지 알기도 전에 비용을 먼저 치러야 했다. 그러니 캔버스에 남는 편이 대체로 합리적이었다. 업계는 그 선택을 중심으로 핸드오프라는 워크플로를 만들었다. 레드라인, 주석, 스펙 문서에 디자인 판단을 산문으로 압축하면 반대편의 사람이 코드로 재구성한다. 양쪽 모두 그 과정에서 정보가 빠진다는 사실을 안다. 변환 비용이 남아 있는 한 이 절차도 남는다.","en":"\"Designers can't code\" describes the wall badly. Syntax was not the decisive cost; conversion was. Moving one judgment into executable form required years of fluency before the first useful predicate could be written, with the cost paid before anyone knew whether that predicate would hold. Staying on the canvas was usually the sensible choice. An entire workflow grew around it: the handoff. Redlines, annotations, and specification documents compress design judgment into prose. Someone on the other side reconstructs the judgment in code, while both sides know the reconstruction loses information. The ceremony persists because the conversion still has a cost."},{"src":"design-engineering","i":14,"ko":"그 비용을 치르고 자기 판단을 직접 코드로 옮길 만큼 능숙해진 디자이너도 오래전부터 있었다. 업계는 많은 경우 그들에게 별도의 직함을 붙였다. 따라서 이 실천이 절대적으로 불가능했던 적은 없다. 다만 이미 두 번째 직업에 가까운 기술을 익히지 않은 디자이너에게는 접근하기 어려웠고, 대다수가 그 조건에 속했다. 방법이 없었던 것이 아니라 일상 업무에서 방법을 쓰기 전에 요구되는 일상 업무와 직접 상관없는 숙련을 너무 많이 요구했다. 첫 검사를 만들기 전부터 개발 환경, 언어, 테스트, 배포 방식까지 익혀야 했고, 판단 하나가 실제로 반복될 가치가 있는지는 그 비용을 치른 뒤에야 확인할 수 있었다.","en":"Some designers paid that cost and became fluent enough in code to carry their own judgment across. The industry gave many of them a title. The practice therefore was never impossible in an absolute sense. It remained inaccessible to designers who had not already acquired much of a second profession, which described most of the field. The obstacle was not the absence of a method. It was the amount of unrelated fluency required before the method became usable in ordinary work."},{"src":"design-engineering","i":15,"ko":"판단 하나가 벽을 넘는 것을 나는 전에 본 적이 있는데, 그건 디자인 판단이 아니었다. 이 모든 일 전에 나는 지표를 지어내는 리포팅 봇을 돌리고 있었다. 유창하고, 확신에 차고, 날조된 주간 숫자들. 지어내지 말라고 프롬프트에 분명한 말로 적어 둔 모델이 만들어낸 것이다. 프롬프트를 조여도 달라지는 게 없었다. 산수를 평범한 Python으로 옮기고 모델을 코드가 이미 계산해 둔 값을 서술하는 역할로 강등하자 모든 게 달라졌다. 주간 리포트를 여덟 번 다시 검증했고, 날조는 다시 나타나지 않았다. 그 사건에서 들고 나온 규칙(모델은 제안할 수 있지만 판정은 코드가 한다)은 보통 AI 신뢰성에 대한 교훈으로 읽힌다. 지금 나는 그것을, 이름도 모른 채 수행한 내 첫 디자인 엔지니어링 행위로 읽는다. 판단 하나(\"이 숫자들은 진짜여야 한다\")가 산문에서, 즉 소망이던 자리에서, 코드로, 즉 속성인 자리로 옮겨 간 것이다.","en":"I had seen one judgment cross a wall before, and it was not a design judgment. Before any of this, I ran a reporting bot that invented metrics: fluent, confident, fabricated weekly numbers, produced by a model whose prompt told it plainly not to. Tightening the prompt changed nothing. Moving the arithmetic into ordinary Python and demoting the model to narrating values that code had already computed changed everything; I re-verified the weekly reports eight times, and the fabrication never returned. The rule I carried out of that incident (the model may propose, but code must judge) is usually read as a lesson about AI reliability. I now read it as the first design-engineering act I ever performed without knowing its name: a judgment (\"these numbers must be real\") moved out of prose, where it was an aspiration, into code, where it was a property."},{"src":"design-engineering","i":16,"ko":"실험 조건은 AI가 구현 대부분을 맡으면서 달라졌다. 사람에게 남은 입력은 판단과 그 명세, 적대적 검토, 기계의 자기 보고를 증거로 받아들이지 않는 원칙이었다. 병목은 문법을 생산하는 능력에서 판단을 실행하고 시험할 수 있을 만큼 정확히 진술하는 능력으로 옮겨 갔다. 그 변화로 판단의 소유권을 구현자에게 넘기지 않고도 판단을 실행할 수 있게 됐다.","en":"The experimental condition changed when AI began carrying most of the implementation. The remaining human inputs were the judgment, its specification, adversarial review, and the refusal to accept the machine's self-report as evidence. The limiting skill shifted from producing syntax to stating a judgment precisely enough to run and test. That shift let the owner of a judgment execute it without transferring ownership to an implementer."},{"src":"design-engineering","i":17,"ko":"AI는 장벽을 낮췄지만 없애지 못했다. 판단을 구현한 도구는 결함 여섯 개를 실은 채 배포됐다. 그중 세 개는 수천 개의 assertion으로 구성된 테스트 스위트가 놓쳤고, 다른 벤더의 모델이 시스템의 핵심 주장을 반증하라는 요청을 받은 뒤에야 발견됐다. 이 셋 가운데 둘은 검사 계층 자체에 있었고, 실행되지 않는 배선 결함 하나가 별도로 있었다. 도구는 빈 입력을 A로 인증했고, 최악의 품질 값에서 오히려 페널티를 없앴으며, 존재한다고 문서화한 규칙을 조용히 건너뛰었다. 구현을 생산하는 비용은 낮아졌지만, 정확성은 여전히 명시된 속성, 적대적 검토, 실제 실행 결과에 의존했다. 진입 비용과 검증 비용은 함께 줄지 않았다.","en":"AI lowered the wall without removing it. Six defects shipped inside the instrument that encoded the judgment. Three remained invisible to a test suite containing thousands of assertions and appeared only after a model from a different vendor was instructed to refute the system's central claim. Two of those three lived in the checking layer itself, alongside a third failure in wiring that never ran: the instrument certified an empty input, rewarded the worst quality value, and silently skipped documented rules. The implementation became easier to produce, but its correctness still depended on explicit properties, adversarial review, and observed execution. Entry became cheaper. Verification did not."},{"src":"design-engineering","i":19,"ko":"디자인 엔지니어링은 이미 직함으로 존재한다. 채용 공고는 디자인과 코드 양쪽에 능숙한 사람을 이 이름으로 부른다. 기술 비용을 치른 디자이너도 있고 시각 판단을 기른 엔지니어도 있다. 그런 역할은 실제로 존재한다. 그러나 같은 실천은 디자인 팀 밖에서도, 화면이 없는 시스템에서도, 조직도에 해당 직함을 가진 사람이 없는 상태에서도 나타날 수 있다.","en":"Design engineering already exists as a job title. Job listings use the phrase for people fluent in both design and code: designers who paid the technical cost, and engineers who developed visual judgment. That role is real. It does not exhaust the meaning of the words, because the same practice can occur outside a design team, without a screen, and without a person occupying the corresponding box on an organization chart."},{"src":"design-engineering","i":20,"ko":"여기서 디자인 엔지니어링은 판단 가운데 검사할 수 있는 부분을 찾아 실행하고 검증할 수 있는 형태로 옮기는 일을 뜻한다. 어떤 역할은 이 일에 전문화될 수 있고, 조직은 그것만 담당할 사람을 채용할 수도 있다. 그래도 실천의 의미가 조직도의 자리에서 나오지는 않는다. 테스트 작성과 비슷하다. 테스트를 주업무로 삼는 사람이 있어도, 다른 역할을 맡은 사람 역시 자기 작업의 일부로 테스트를 작성한다. 행위는 기능으로 구분된다.","en":"Design engineering, in this use, means finding the checkable part of a judgment and moving it into a form that can execute and be verified. A role may specialize in that work, and an organization may hire specifically for it. Neither condition defines the practice. Test writing offers a close parallel: some people spend most of their working time on tests, while many others write them as part of a different role. The activity remains identifiable by what it does."},{"src":"design-engineering","i":21,"ko":"이 구별이 지금 중요한 데는 구조적인 이유가 있다. 내 분야의 직무 분류는 계속 바뀌고, 그때마다 프롬프트 디자이너, AI 디자이너, 디자인 테크놀로지스트 같은 새 직함이 생긴다. 하지만 직함은 조직도에서 맡은 자리를 설명하므로 분류가 다시 그려질 때 함께 바뀐다. 실천은 실제로 무엇을 하는지를 설명하므로 조직도가 달라진 뒤에도 남는다. 새 직함보다 지속되는 행위를 기준으로 역할을 정의해야 하는 이유다.","en":"The distinction matters right now for a structural reason. Job categories in my field are dissolving, and the instinctive response to a dissolving taxonomy is to mint new cells in it: prompt designer, AI designer, design technologist, each title an attempt to claim a seat before the music stops. But a title is a claim about where you sit, and when the seating chart is redrawn every quarter, claims about seating do not survive. A practice is a claim about what you do, and it travels with you across whatever the chart becomes. When the cells melt, the practice is what remains in the pan."},{"src":"design-engineering","i":22,"ko":"나는 개명을 충분히 여러 번 겪어서 이것을 이론이 아니라 실감으로 안다. 내 직함은 여러 번 리브랜딩됐다(웹, UI, UX, 프로덕트). 새 이름마다 선언문을 달고 도착했고, 대개는 같은 사람이 새 도구로 같은 일을 하는 모습을 묘사했다. 이름은 도구가 바뀌는 것과 비슷한 빈도로 바뀌었고, 그 밑의 행위들(판정하기, 결정하기, 무엇이 좋은가를 두고 다투기)은 거의 바뀌지 않았다. 바로 그래서 이번 변화는 이름이 아니라 행위의 언어로 정의될 자격이 있다. 이번에는 행위 하나가 정말로 바뀌었고, 새 직함은 그 소식을 파묻어 버릴 테니까.","en":"I have lived through enough renamings to feel this concretely rather than theoretically. My own title has rebranded several times (web, UI, UX, product), each new name arriving with a manifesto and describing, mostly, the same person doing the same work with new tools. The names changed about as often as the tools did; the acts underneath (judging, deciding, arguing about what is good) barely changed at all. That is exactly why the current shift deserves a definition in terms of acts rather than names: this time an act genuinely changed, and a new title would bury the news."},{"src":"design-engineering","i":23,"ko":"두 번째 시스템이 비교 사례가 됐다. 소스 자료를 검증하는 지식 시스템이어서 디자인 토큰이 없고 시각 판단도 하지 않는다. 그런데 다른 재료에서 같은 연산이 나타났다. 이전에는 사람이 머릿속에서 처리하던 \"이 주장은 근거가 있다\", \"이 숫자는 출처와 일치한다\" 같은 판단이 기계가 확인할 수 있는 상태로 바뀌었다. 상태는 *verified*, *drifted*, *missing*, *pending*으로 나뉜다. 근거가 없으면 통과시키지 않고, 검사로 결론을 내릴 수 없는 항목은 명시된 경계에서 사람이 처리한다. 제품은 디자인 도구가 아니지만 판단은 똑같이 사적 해석에서 실행 가능하고 검토 가능한 형태로 이동했다.","en":"A second system supplied the comparison. Its job is validating source material, so it contains no design tokens and makes no visual judgment. Yet the same operation appeared in different material. Claims that had previously been resolved in a person's head, such as \"this statement has support\" or \"this number matches its source,\" became machine-checkable states: *verified*, *drifted*, *missing*, and *pending*. Missing evidence fails closed, while unresolved cases go to a person at an explicit boundary. The product does not belong to design tooling. The judgment still moved from private interpretation into executable and reviewable form."},{"src":"design-engineering","i":24,"ko":"그리고 이 정의에는 분명히 드러낼 가치가 있는 구분선이 있다. 모델을 프롬프트해서 화면 열 장을 뽑아내는 디자이너는, 이 정의로는, 코드가 얼마나 끼어 있든 디자인 엔지니어링을 하는 게 아니다. 막혀 있던 것은 애초에 생산이 아니었으니까. 열한 번째 화면을 무엇이 수용 불가로 만드는지를, 자기가 없는 동안 기계가 강제할 수 있는 형태로 적어 두는 디자이너는, 구현을 한 줄도 건드리지 않더라도 그 일을 하고 있는 것이다. 정의를 가르는 행위는 코드 타이핑이 아니다. 판단 가운데 검사할 수 있는 부분을 돌리고 확인할 수 있는 형태로 옮기는 번역이고, 요점은 확인이다.","en":"And the definition has a sharp edge worth showing. A designer who prompts a model into producing ten screens is not, by this definition, doing design engineering, no matter how much code is involved, because production was never the locked room. A designer who writes down what would make the eleventh screen unacceptable, in a form a machine can enforce while she is absent, is doing it, even if she never touches the implementation. The defining act is not typing code. It is the translation of the checkable part of a judgment into a form that can be run and checked, and the checking is the point."},{"src":"design-engineering","i":26,"ko":"내가 건너편으로 나른 것은 \"이건 우리 톤에 맞지 않아\"라는 그 문장의 가장 얇은 한 가닥이다. 이 역학에는 문서화된 판본이 있는데, 디자인이 아니라 텍스트에서 계측된 것이다. 생성 AI가 준 아이디어를 받은 작가들은 더 창의적이라 평가된 이야기를 썼고, 그 이야기들은 [서로 더 닮아 갔다](https://doi.org/10.1126/sciadv.adn5290). 디자인 토큰에서 어떤 기본값이 몇 개나 반복되는지는 그 논문이 아니라 내 탐지기에서 확인했다. 나는 그 문장을 몇 년째 말해 왔다. 그중 한 가닥을 번역하는 것만으로도 내가 정확히 무엇을 말해 왔는지를 발견하게 됐다.","en":"What I carried across was the thinnest strand of that sentence, the one about a screen not feeling like ours. There is a documented version of this dynamic, though it was measured in text rather than in design: writers handed generative AI ideas produced stories rated more creative, while those stories grew [more similar to each other](https://doi.org/10.1126/sciadv.adn5290). Which defaults recur in design tokens, and how many, I know from my own detectors rather than from that paper. I had said the sentence for years. Translating one strand of it meant discovering what, exactly, I had been saying."},{"src":"design-engineering","i":27,"ko":"번역에서 살아남은 것은 느낌보다 좁았다. 조작적 핵심은 이름 댈 수 있는 기본값과의 근접성으로 드러났다. 탐지 대상으로 프레임워크의 기본 hex 값 13개, AI 출력에 자주 쓰이는 인디고 7개, 기본 폰트 목록과 실제 제품에서 반복해서 관찰된 유행 세리프 하나를 정했다. 이름 붙은 것 하나하나가 탐지기가 됐고, 탐지기마다 고정 가중치가 붙었고, 합은 G라 부르는 0에서 100 사이의 점수가 됐으며, 문자 등급은 존재하는 최악의 증거를 읽는다. 모든 상수는 고정되어 있고 들여다볼 수 있으며, 어떤 점수든 입력으로부터 손으로 다시 유도할 수 있다. 여기서 중요한 것은 그 가닥이 건너가면서 무엇을 얻었는가다. 캔버스가 결코 주지 않던 속성 세 개를 얻었기 때문이다.","en":"What survived translation was narrower than the feeling. The operational core turned out to be proximity to nameable defaults: thirteen exact hex values that frameworks ship as stock accents, seven indigos that AI output leans on, a short list of default font families plus one fashionable serif I kept catching in the wild. Each named thing became a detector, each detector a fixed weight, the sum a score from 0 to 100 called G, with a letter grade that reads off the worst evidence present. Every constant is fixed and inspectable, and any score can be rederived by hand from its inputs. What matters here is what that strand gained by crossing, because it gained three properties the canvas never gave it."},{"src":"design-engineering","i":28,"ko":"첫째, 나 없이 돈다. G는 7월 2일부터 21일 사이에 돈, 날짜가 기록된 자율 개선 사이클 약 17회에서 출고를 막아서는 자리에 있었고, 각 사이클은 적대적 리뷰와 완전히 관측된 테스트 실행도 통과해야 나갔다. 어깨 너머로 내가 하던 그 검사가, 동일하게, 내가 본 적 없는 산출물 위에서, 내가 자던 시각에 돌았다. 검사할 수 있던 그 부분은 이제 공연이 아니라 인프라다.","en":"First, it runs without me. G sat inside the ship gate of roughly seventeen dated autonomous improvement cycles between July 2 and July 21, each cycle also gated on an adversarial review and a fully observed test run. The check I used to make over shoulders was made, identically, on artifacts I never saw, at hours I was asleep. The strand that could be checked stopped being a performance and became infrastructure."},{"src":"design-engineering","i":29,"ko":"그리고 그냥 관찰만 한 것이 아니다. 점수는 게이트이고, 게이트는 수리를 이끈다. 계기가 줄 수 있는 최악의 점수인 100을 받은 이커머스 토큰 세트는 자동 수리 패스를 거쳐 28이 됐고, 회색 핀테크 세트는 72에서 28로 갔다. 두 결과 모두 A가 아니라 C였고, 리포트에도 그대로 기록됐다. 사람이 검토할 때는 관찰 뒤에 논의가 이어졌을 뿐이다. 여기서는 점수가 자동 수리를 시작하고, 결과가 정해진 기준에 도달하면 수리가 멈춘다.","en":"And it did not merely observe. The score is a gate, and the gate drives repair: an ecommerce token set that arrived at 100, the worst score the instrument can give, left the automated repair pass at 28; a gray fintech set went from 72 to 28. In both cases, 28 is a C, not an A, and the report says so. On the canvas that observation opened a conversation and the conversation ran until the meeting ended. Here it opens a loop, and the loop runs to a measured stop."},{"src":"design-engineering","i":30,"ko":"둘째, 지위가 아니라 증거로 논쟁한다. 토큰 세트가 42점을 받으면 \"왜?\"의 답은 이름 붙은 규칙과 그것을 발화시킨 정확한 입력값이다. figma가 42/D인 것은 추출된 폰트가 Inter와 Roboto Mono, 둘 다 기본값이기 때문이다. 그게 전부다. 캔버스에서 내 \"이건 우리 톤에 맞지 않아\"는 그 방에서 내가 누구였는가로 통하거나 막혔다. 코드에서는 그 규칙이 어떤 입력값을 근거로 어떤 문제를 탐지했는지에 따라 받아들여지거나 기각된다. 내 권위 중 얼마나 많은 부분이 지위에 기댄 것이었는지는, 그 지위가 무관해지는 걸 지켜보고서야 알았다.","en":"Second, it argues in evidence instead of in status. When a token set scores 42, the answer to \"why?\" is a named rule and the exact input values that fired it: figma scores 42/D because its extracted fonts are Inter and Roboto Mono, both defaults, full stop. On the canvas, my \"this does not feel like ours\" carried or failed by who I was in the room. In code, the strand I pulled out of it carries or fails by what it can point to. I did not appreciate how much of my authority had been positional until I watched the position become irrelevant."},{"src":"design-engineering","i":31,"ko":"셋째, 검사는 작성자의 판단과도 충돌할 수 있다. 도구에는 자동 수리 패스가 제네릭한 디자인을 고칠 때 참조하는 기본 팔레트가 있고, 그 팔레트는 내가 작성했다. 프레임워크 기본값 탐지기를 추가하자 primary #2563EB, accent #0EA5E9, info #3B82F6이 모두 Tailwind 기본 색상으로 표시됐다. 수리 패스가 다른 디자인을 점수가 거부하려던 기본값 쪽으로 유도하고 있었던 셈이다. 프리셋은 깊은 청록 #0E4C5E, 따뜻한 코럴 #F26B3A, 차분한 청회색 #3E6E8E로 바뀌었다. 새 팔레트가 독자적이라는 뜻은 아니다. 세 색이 탐지기의 유한한 목록과 일치하지 않는다는 사실만 확인됐다. 독립적인 시각 비교는 이 실행에 포함되지 않았다. 따라서 수정 전후에서 입증된 것은 독자성의 향상이 아니라 특정 기본값 세 개가 사라졌다는 사실뿐이다. 핵심 결과는 최초의 충돌이다. 작성자를 구분하지 않는 규칙이 판단과 작업의 주인이 같을 때 보이지 않던 습관을 찾아냈고, 같은 규칙은 이후의 참조 변경에도 계속 적용된다. 다음 팔레트가 다시 목록의 기본값으로 돌아가면 작성자가 누구든 같은 high 신호가 발화한다.","en":"Third, the check can contradict its author. The tool ships a default palette used by its repair pass as a reference for generic designs. I authored that palette. When the framework-default detector was added, it flagged primary #2563EB, accent #0EA5E9, and info #3B82F6, all Tailwind stock colors. The repair path was steering other designs toward the same defaults the score was meant to reject. The replacement used deep teal #0E4C5E, warm coral #F26B3A, and muted blue #3E6E8E. Passing the detector does not prove that the new palette is distinctive. It proves only that those three colors no longer match the detector's finite list. An independent visual comparison was not part of the run. The result that matters is the earlier contradiction: a rule applied without regard to authorship exposed a habit that remained invisible when the judgment and the work shared the same owner. The same rule now remains in the pipeline, so a later change can flag the reference again."},{"src":"design-engineering","i":32,"ko":"운영 기록은 이 실천에 무엇이 필요했는지 보여 준다. 탐지기의 조건을 정하고 실패를 분류했으며, 발견된 오류가 요구하는 대로 판단을 수정했다. 현재 참조 세트와 제네릭 세트의 점수 차이는 +31.2점이다. 구현 대부분은 AI가 맡았다. 더는 문법을 생산하는 능력이 가장 부족한 자원이 아니었다. 어려운 작업은 각 검사가 무엇을 뜻하는지 정의하고, 기존 예시가 놓친 속성을 찾아내고, 발견된 실패가 코드에 속하는지 코드가 표현한 판단에 속하는지 결정하는 일이었다.","en":"The operating record shows what the practice required. I specified the detectors, classified their failures, and revised the judgment as those failures required; the separation between the chosen distinctive references and generic set now stands at +31.2 points. AI supplied most of the implementation. Producing syntax was no longer the scarce input. The difficult work lay in defining what each check meant, identifying the properties the examples failed to cover, and deciding whether a failure belonged to the code or to the judgment encoded in it."},{"src":"design-engineering","i":34,"ko":"그 작업은 코드 장벽 뒤에 있던 두 번째 장벽을 드러냈다. 판단에서 술어를 꺼내려면, 예상하지 못한 예시에서도 버틸 만큼 판단을 구체적으로 설명해야 한다. AI는 술어 후보를 제안하고 구현할 수 있지만 빠진 기준까지 대신 만들 수는 없다. 최초의 실패들은 \"이건 우리 톤에 맞지 않아\"라는 느낌이 경계가 한 번도 따로 기술되지 않은 여러 판단을 한꺼번에 포함하고 있었음을 보여 줬다.","en":"That work exposed a second wall behind the code. A predicate can be extracted from a judgment only after the judgment has been described precisely enough to survive examples it was not designed around. AI can propose the predicate and implement it, but it cannot supply a missing criterion. The first failures showed that the original feeling combined several judgments whose boundaries had never been stated separately."},{"src":"design-engineering","i":35,"ko":"그 문장 뒤의 느낌은 묶음이었다. 기본값과의 근접성을 뜻했고, 정체성의 부재를 뜻했고, 이 제품에 안 맞음을 뜻했다. 캔버스에서 이 묶음은 풀어헤칠 필요가 없었다. 눈은 그 갈래들을 따로 내놓지 않으니까. 술어는 한 번에 한 가닥씩을 요구했고, 첫 번째 가닥만 살아남았다. 이어지는 모든 실패는 내 판단의 실제 형태가 내 기술(記述)과 달랐던 자리이고, 그 차이를 찾을 수 있었던 것은 이제 그 기술이 돌고 있어서 붙잡힐 수 있었기 때문이다.","en":"The feeling behind that sentence was a bundle. It meant proximity to defaults, and it meant absence of identity, and it meant wrong-for-this-product, and on the canvas the bundle never needed unbundling because the eye does not hand the strands over separately. The predicate demanded one strand at a time, and only the first strand survived. Every failure that follows is a place where the actual shape of my judgment differed from my description of it, and I only found the difference because the description was now running and could be caught."},{"src":"design-engineering","i":36,"ko":"\"Inter Variable\" 실패는 관념과 술어 사이의 간극이었다. 내 판단은 배리어블 폰트 의상을 입은 Inter도 여전히 Inter라는 걸 알았지만, 내 문자열 매칭은 몰랐고, 나는 내 규칙을 미리 그렇게 말해 둘 만큼 잘 알지 못했다. 빈 페이지 실패는 더 이상했다. 거의 아무것도 아닌 것을 먹이자 지표는 신호를 하나도 찾지 못했고, 그 아무것도 아닌 것을 독자적이라고, 등급 A로 인증했다. 캔버스에서 없는 것은 심사 대상으로 올라오지 않는다. 그래서 크리틱으로 보낸 그 모든 세월 동안 나는 내 판단이 백지 앞에서 무엇을 하는지 한 번도 결정해 본 적이 없었다. 계기는 첫날에 부재와 마주쳤고, 그것을 칭찬했다. 수정은 거부였다(색 2개 미만에 이름 있는 폰트 없음이면 \"판정 불가\", 사람에게 에스컬레이션). 그리고 그 거부는 내 눈이 한 번도 말하는 법을 배울 필요가 없던 문장이다. 부서진 가드가 드러낸 것은 진술되지 않은 공리였다. \"더 유죄인 증거가 판정을 개선할 수는 없다\"는 첫날부터 내 머릿속에서 하중을 받치고 있었는데 어디에도 적혀 있지 않았다. 캔버스에서는 아무도 당신의 판단을 기계적으로 돌릴 수 없으므로, 그 공리들이 수면 위로 올라올 일이 없기 때문이다. 코드에서 진술되지 않은 공리는 강제되지 않는 공리다. 그리고 상수들에서는 가장 부끄러운 것을 배웠다. 기댈 원칙이 없는 자리마다 나는 같은 2 대 1 비율에 손을 뻗었다, 반복해서. 내 취향 안에서는 볼 수 없던 습관이, 취향을 판본끼리 비교할 수 있게 된 순간 보이게 됐다.","en":"The \"Inter Variable\" failure was the gap between an idea and its predicate: my judgment knew that Inter in a variable-font costume is still Inter; my string-match did not, and I had not known my own rule well enough to say so in advance. The empty-page failure was stranger: fed near-nothing, the metric found no signals and certified the nothing as distinctive, grade A. On the canvas, absence never submits itself for review, so in all my years of critique I had never once decided what my judgment does with a blank. The instrument met absence on day one and praised it. The fix was a refusal (fewer than two colors and no named font: \"cannot assess,\" escalate to a human), and that refusal is a sentence my eye never had to learn to say. The broken guard was a tacit axiom: \"more damning evidence can never improve the verdict\" had been load-bearing in my head from the first day and written down nowhere, because on the canvas nobody can run your judgment mechanically, so its axioms never surface. In code, an unstated axiom is an unenforced one. And the constants taught me the humblest lesson: wherever no principle presented itself, I reached for the same two-to-one ratio, over and over. A habit I could not see in my taste became visible the moment my taste had a diff."},{"src":"design-engineering","i":37,"ko":"가장 이상한 발견은 존재한다고 주장하면서 존재하지 않는 판단이었다. 도구의 소스에는 제품 분야별 시각 특성에 따라 특정 검사 결과의 오류 등급을 높이는 기능이 있다. 네 가지 시각 특성이 해당 제품 분야에서 특정 발견의 심각도를 올리도록 되어 있고, 문서화되어 있고, 선의로 기술되어 있고, 죽어 있다. 배포된 전 생애 동안 단 한 번도 발화하지 않았다. 코드는 JSON 키 하나를 조회하는데 데이터 파일은 다른 철자를 쓰고, 그래서 조회는 모든 도메인에 대해 조용히 빈 값을 돌려준다. 지표 자신의 배선에 있는 키워드 열두 개 중 셋도 똑같이 죽어 있다. 존재하는 어떤 규칙과도 매칭되지 않는다. 캔버스에서 판단은 도는 척할 수 없다. 그 방에서 눈에 보이게 일어나거나, 일어나지 않거나다. 코드에서는 판단 기능이 존재하고 문서화된 것처럼 보이면서도 실제로는 작동하지 않을 수 있다. 그 기능이 작동하지 않는 동안에도 모든 테스트가 통과할 수 있다. 그러니 실천에는 배선 감사가 포함된다. 이 매체에서는 판정자의 존재조차 증거가 필요한 주장이기 때문이다.","en":"The strangest discovery was a judgment that claimed to exist and did not. The tool's source contains a perception-aware severity mechanism, four domain characters meant to raise the severity of certain findings in the domains that carry them, documented, described in good faith, and dead: it has never fired once in its deployed life, because the code looks up one JSON key and the data file spells another, so the lookup returns empty, silently, for every domain. Three of the twelve keywords in the metric's own wiring are equally dead, matching no rule that exists. On the canvas, a judgment cannot pretend to run; it happens in the room, visibly, or it does not. In code, a judgment can be present, named, documented, and absent all at once, with every test passing while it sleeps. So the practice includes auditing the wiring, because in this medium even the judge's existence is a claim that needs evidence."},{"src":"design-engineering","i":38,"ko":"판단을 검증 가능하게 만들면 그 판단에 반하는 결과도 기록할 수 있게 된다. 캔버스에서 판단은 사회적 논쟁에서만 질 수 있었지만, 코드로 옮긴 판단은 작성자의 이해관계와 무관하게 같은 규칙을 적용했다. 그 결과 검사기는 작성자가 만든 팔레트도 표시했다. 반증을 요청받은 다른 벤더의 모델은 네 라운드 뒤에, 내 assertion 수천 개가 놓친 진짜 결함 세 개를 들고 돌아왔다. 캘리브레이션 숫자는 지표가 더 올바르게 되자 나쁜 방향으로 움직였다(기록된 분리는 정직성 수정을 거치면서 +14.6에서 +13.4로 떨어졌다가, 색상 탐지기가 +27.4로, 나중의 거짓 양성 교정이 +31.2로 데려갔다). 내가 그 숫자를 최적화하고 있었다면 진실에서 멀어지는 쪽으로 조종당했을 거라는 뜻이다. 그리고 판단이 게이트가 되는 순간 그것은 표적이 된다. 모든 점수를 손으로 유도 가능하게 만드는 바로 그 결정론이, 모든 회피도 손으로 유도 가능하게 만든다. 규칙과 회피가 커밋 히스토리에 함께 남는 [굿하트의 법칙](https://doi.org/10.1017/S1062798700002660)이다. 크리틱은 디자이너에게 판단을 방어하는 법을 훈련시킨다. 이 실천은 판단을 반증할 수 있는 도구를 짓고 그 도구를 계속 날카롭게 두기를 요구한다. 실험에서 판단의 질을 높인 것은 방어의 설득력이 아니라, 판단에 반하는 결과도 통과시킨 검증 구조였다.","en":"Making a judgment verifiable also makes contrary results recordable. On the canvas, judgment could lose only through social argument. In code, the same rule applied regardless of authorship and flagged the palette its author had supplied. A different vendor's model, asked to refute it, came back four rounds later with three real defects that thousands of my own assertions had missed. The calibration number moved in the wrong direction when the metric became more correct (the logged separation fell from +14.6 to +13.4 under the honesty fixes, before a color detector took it to +27.4 and a later false-positive correction to +31.2), which means that had I been optimizing the number, I would have been steered away from the truth. And once the judgment is a gate, it becomes a target: the same determinism that makes every score derivable by hand makes every evasion derivable by hand, [Goodhart's law](https://doi.org/10.1017/S1062798700002660) with the rule and its evasions preserved in the commit history. Critique trains a designer to defend judgment. This practice requires an instrument capable of refuting the judgment and a process that keeps the instrument sharp. In the experiment, judgment improved because the verification structure admitted results against it."},{"src":"design-engineering","i":40,"ko":"이 실천은 모든 디자이너가 향해야 할 목적지가 아니라 디자인 작업의 한 갈래다. 의미는 접근 조건이 달라졌다는 데 있다. 반복되는 판단을 한 번 코드로 고정하려면 과거에는 기술 숙련 비용이 너무 커서 많은 디자이너에게 시도 자체가 비합리적이었다. 이제 AI는 시도를 가능하게 만들지만, 특정 사람과 문제에 그 시도가 유용한지까지 결정하지는 않는다. 주변의 직함이 계속 바뀌더라도 이 실천은 수행하는 일로 구분할 수 있다.","en":"This practice is one branch of design work, not a required destination for every designer. Its relevance comes from a change in access. Encoding a repeated judgment once required enough technical fluency to make the attempt irrational for many designers. AI now makes the attempt possible without settling whether it is useful for a given person or problem. The practice will remain recognizable even as the job titles around it continue to change."},{"src":"design-engineering","i":41,"ko":"생산이 거의 공짜가 되어도 적어도 세 종류의 일은 희소하게 남는다. 첫째는 쏟아지는 생성 결과 가운데 무엇을 남길지 정하는 취향이다. 산출물마다 새롭게 작동하고, 규칙으로 고정하는 순간 그 가치를 잃는 판단이다. 둘째는 사용자가 실제로 무엇을 필요로 했는지 이해하는 일이다. 잠재 니즈는 명시된 요구사항이 포착하지 못한 것이므로 시스템도 이 질문을 \"자동화 불가\"로 표시해 사람에게 보낸다. 셋째는 판단 가운데 검사할 수 있는 부분을 자동 검사 도구로 옮기는 일이다. 세 종류 사이에 순위는 없다. 경력 전체를 앞의 두 일에 집중하는 디자이너도 뒤처진 것이 아니다. 셋째 일은 첫째인 취향에서 기준을 얻지 못하면 아무것도 판정할 수 없다.","en":"When production becomes nearly free, what remains scarce sorts into a few piles, and I can see at least three from where I stand. There is the eye itself: taste applied at the front, deciding which of the generated options is worth keeping, the judgment whose value is precisely its freshness per artifact and which loses that value the moment it is frozen into a rule. There is the understanding of people: the question of what a user actually needed, which my own systems mark in their source as \"not automatable\" and route to a human, because a latent need is by definition what stated requirements fail to capture. And there is this: the translation of whatever in a judgment can be checked into instruments. Three branches, probably more. They are not ranked. A designer whose entire career stays in the first two piles is not behind; the piles need each other, and the third pile without the first is just an empty gate."},{"src":"design-engineering","i":42,"ko":"같은 종류의 판단이 반복될 때는 검사 가능한 부분을 코드로 고정할 가치가 생긴다. \"이 화면이 우리 것인가\"라는 질문은 여러 화면에서 되풀이되므로 안정적인 검사가 제작 비용을 회수할 수 있다. 이 과정에는 예상하지 못한 사례에서도 버틸 기준과, 잘못된 판단을 버전 관리 안에 정확히 남기는 기록이 필요하다. 버전 관리는 실패를 날짜와 작성자가 있는 변경으로 만든다. 도구가 보존한 결함, 순위 역전, 수정 이력이 이 실천의 운영 비용을 구체적으로 보여 준다.","en":"The third branch becomes useful when the same kind of judgment recurs often enough to justify encoding it. The question \"does this feel like ours?\" will return across many screens, so a stable check can repay its construction cost. The work also requires criteria that can survive contact with edge cases and a record precise enough to show when those criteria fail. Version control turns the failures into dated, attributable changes. That exposure is an operating cost, visible in the defects, reversals, and repairs preserved by the project."},{"src":"design-engineering","i":45,"ko":"내가 벽 너머로 옮긴 모든 것은 내가 껍질이라 부르게 된 것이다. 확인 가능한 부분, 기본값과의 근접성, 상태의 존재, 출처와 대조된 주장. 심은 건너가지 않았고, 내 현재 증거로는 건너갈 수 없다. 디자인이 좋은가, 그 독자적 팔레트가 이 제품에 맞는가, 이 작업이 사용자가 실제로 가진 문제를 푸는가. G는 기본값을 탐지한다. 정체성을 인증하지는 못한다. G의 가장 깨끗한 판정은 \"이 유한한 규칙 목록이 아무것도 찾지 못했다\"를 뜻하는데, 이것이 읽히는 것보다 훨씬 약한 문장이라는 걸 나는 두 번에 걸쳐 배워야 했다. 입력이 너무 빈약하면 이제 A 대신 \"판정 불가\"를 반환하고, 그 결과는 평균에 들어가지 않은 채 사람에게 전달된다. 도구 안에서 최종 목적 적합성 판단은 언제나 사람에게 에스컬레이션되고, 파이프라인의 완전 무인 모드는 만들어지고 테스트까지 끝난 채 의도적으로 꺼져 있다. 기계의 권한을 넓히는 일 자체가 심 쪽의 판단이고, 그 판단은 기계의 몫이 아니기 때문이다.","en":"Everything I moved across the wall is what I have come to call shell: the checkable part, proximity to defaults, presence of states, claims matched to sources. The core did not cross and, on my current evidence, cannot: whether a design is good, whether the distinct palette is right for this product, whether the work solves the problem the user actually has. G detects defaults; it cannot certify identity. Its cleanest verdict means \"this finite list of rules found nothing,\" which I have had to learn, twice, is a much weaker sentence than it reads. Sparse input now returns \"cannot assess\" instead of an A, and the result goes to a person rather than entering the average. In the tool, the final fitness-for-purpose judgment always escalates to a human, and the pipeline's fully unattended mode sits built, tested, and deliberately switched off, because widening the machine's authority is itself a core-side judgment, and the machine does not get to make it."},{"src":"design-engineering","i":46,"ko":"실험은 판단 전체를 자동화하지 않고 둘로 나눴다. 조작화할 수 있는 부분은 밤에도 도구의 결과물을 상대로 실행되고, 실제 운영에서 반증을 받았다. 나머지는 검사가 다루는 척하지 않게 되면서 오히려 위치가 선명해졌다. 도구는 작성 당일 코드에 들어간 기준보다 더 옳아질 수 없고, 그 기준을 더 일관되게 적용할 수만 있다. 디자인 엔지니어링은 그런 일관성을 감당할 수 있는 판단에 적용한다. 아직 기준을 실행 가능한 형태로 만들지 못한 결정에는 사람의 주의를 남긴다.","en":"The experiment split the judgment rather than automating it whole. The operational part now runs at scale, at night, against the tool's own output, and remains open to refutation. The remainder is easier to locate because the checks no longer pretend to cover it. An instrument cannot become more correct than the criteria encoded on the day it was written; it can only apply them more consistently. The practice buys that consistency for the parts of judgment that can support it, leaving human attention for decisions whose criteria have not been made executable."},{"src":"design-engineering","i":47,"ko":"두 부분의 경계는 움직일 수 있다. 현재의 탐지기 중 일부는 과거의 직관이었고, 지금 취향이라고 부르는 판단 중 일부도 나중에는 쓸 만한 술어를 얻을 수 있다. 다만 경계를 옮기려면 판단을 하나씩 정의하고, 실제 실행 결과를 관측하며, 입력이 판정을 지지하지 못할 때는 명시적으로 거부해야 한다. 그 조건 없이 범위를 넓히면 증거는 그대로인데 시스템의 권한만 커진다. 검사 밖에 남은 결정은 결과에 책임질 사람이 맡아야 한다.","en":"The boundary can move. Several current detectors began as intuitions, and some judgments still called taste may later acquire workable predicates. Moving the boundary requires one judgment at a time, observed verification, explicit refusals when the input cannot support a verdict, and a person responsible for decisions that remain outside the checks. Expansion without those conditions would widen the system's authority without widening its evidence."},{"src":"design-engineering","i":48,"ko":"판단의 한 가닥이 캔버스를 떠나 이제 혼자 돈다. 판단이 나를 떠난 것은 아니다. 그리고 바뀌는 이름들 아래에서 내가 가져 본 내 직업의 모든 버전 가운데, 존재를 증명할 수 있는 것은 이것이 처음이다.","en":"One strand of the judgment left the canvas and can run alone now. The judgment did not leave me. And of all the versions of my job I have held under its changing names, this is the first one I can prove exists."},{"src":"design-engineering","i":50,"ko":"- Anil R. Doshi and Oliver P. Hauser, [*Generative AI Enhances Individual Creativity but Reduces the Collective Diversity of Novel Content*](https://doi.org/10.1126/sciadv.adn5290) (2024)\n- Marilyn Strathern, [*\"Improving Ratings\": Audit in the British University System*](https://doi.org/10.1017/S1062798700002660) (1997)","en":"- Anil R. Doshi and Oliver P. Hauser, [*Generative AI Enhances Individual Creativity but Reduces the Collective Diversity of Novel Content*](https://doi.org/10.1126/sciadv.adn5290) (2024)\n- Marilyn Strathern, [*\"Improving Ratings\": Audit in the British University System*](https://doi.org/10.1017/S1062798700002660) (1997)"},{"src":"not-yet-decided","i":1,"ko":"*결정을 기록해 두면 AI가 더 잘한다고 믿었다. 그 믿음을 확인해 보려고 한 제품의 결정 기록을 얼려 놓고 조건을 셋으로 갈라 아흔 번을 돌렸는데, 왜 그렇게 정했는지를 적어 주는 것은 인용 정확도를 조금도 바꾸지 않았다. 달라진 자리는 하나뿐이었고 거기서 문서가 준 것은 왜가 아니라 아직 정해지지 않았다는 사실이었다.*","en":"*I believed that writing decisions down made the AI do better. To check that belief I froze one product's decision record, split the conditions three ways, and ran ninety trials, and writing down why something was chosen did not move citation accuracy at all. One place did change, and what the document gave there was not a reason but the fact that something had not been settled.*"},{"src":"not-yet-decided","i":2,"ko":"한 해 넘게 나는 결정을 적어 왔다. 무엇을 정했고 왜 그렇게 정했고 무엇을 기각했는지를 남겨 두면 나중에 읽는 쪽이 더 잘할 것이라고 생각했기 때문인데, 나중에 읽는 쪽은 대개 AI였다. 그 생각의 근거를 확인해 본 적은 한 번도 없었다.","en":"For more than a year I have been writing decisions down. I recorded what was chosen, why it was chosen, and what was rejected, on the assumption that whoever read it later would do better for having it, and the reader later was usually an AI. I had never once checked the grounds for that assumption."},{"src":"not-yet-decided","i":3,"ko":"그래서 확인해 보기로 하고, 그 제품을 만들면서 실제로 내렸던 판단 다섯 개를 골라 조건을 셋으로 갈라 돌렸다. 아래는 그 결과인데, 쓰다 보니 결과보다 결과를 읽는 순서에 대한 이야기가 더 길어졌다.","en":"So I checked. I took five judgments I had actually made while building that product, split the conditions three ways, and ran them. What follows is the result, though in writing it up the account of how the results are read grew longer than the results."},{"src":"not-yet-decided","i":5,"ko":"이 글의 수치는 전부 저장소 안의 코드가 낸 것이라 다시 돌려 볼 수 있다. 다만 실험 재료가 실제 제품의 내부 문서라 저장소에는 올리지 않았고, 원장과 프로토콜이 내용 해시로 묶여 있으므로 재료를 가진 사람은 같은 결과가 나오는지 확인할 수 있지만 못 가진 사람은 확인할 수 없다. 그 비대칭은 그대로 남는다.","en":"Every number here came from code in the repository and can be run again. The materials are a real product's internal documents, so they are not in the repository, and because the ledger and the protocol are bound by content hashes, someone holding the materials can check whether the same results come out while someone without them cannot. That asymmetry stays."},{"src":"not-yet-decided","i":6,"ko":"측정 규칙은 실행 전에 얼렸다. 프롬프트와 채점표는 물론이고 판정 기준과 판정값의 극성까지 전부 포함된다. 분석 프로그램은 아흔 칸 중 네 칸이 돌아간 시점에 썼는데 그 네 칸은 전부 같은 모델의 같은 과제였으니 어느 조건이 나은지 알 수 없는 상태였다. 결과를 먼저 보고 방법을 정하면 그 방법이 결과를 고르게 된다.","en":"The measurement rules were frozen before the runs. That covers the prompt and the answer key, and also the judgment rubric and the polarity of each verdict. The analysis program was written when four of the ninety cells had run, and those four were all the same model on the same task, so which condition was better was not yet visible. If you look at results first and then decide the method, the method chooses the result."},{"src":"not-yet-decided","i":8,"ko":"과제는 다섯이다. 버튼 하나를 놓고 색과 크기를 정하라거나 카드 레이아웃을 구성하라는 식으로, 그 제품을 만들면서 실제로 내렸던 판단을 그대로 옮겼다.","en":"There are five tasks. Place a primary button and decide its color and size, compose a card layout, and so on. They are judgments I actually made while building that product, carried over unchanged."},{"src":"not-yet-decided","i":9,"ko":"조건은 셋이다. 첫째는 과제와 화면 참조만 주고, 둘째는 완성된 시스템 문서를 준다. 확정된 규칙과 확정된 결정문이 여기 들어간다. 셋째는 거기에 결정 기억을 더하는데, 왜 그렇게 정했고 무엇을 기각했고 언제 다시 볼 것인지에 더해 아직 안 정해진 것이 무엇인지가 들어간다.","en":"There are three conditions. The first gives only the task and visual references, and the second gives the finished system document. The settled rules and the settled decisions go in there. The third adds decision memory on top, which means why something was chosen, what was rejected, and when to revisit it, plus what has not been settled yet."},{"src":"not-yet-decided","i":13,"ko":"둘째 조건에는 왜가 없다고 가정하고 시작했다. 규칙 문서는 무엇을 하라고만 말한다고 믿었기 때문인데, 세어 보니 그렇지 않았다. 근거와 예외 예순 건 가운데 열여덟 건이 규칙 문장 안에 녹아 있었다. 라임은 어디에 쓰고 핑크는 어디에 쓰므로 남는 것은 하나뿐이라는 식으로, 앞의 절이 이유이고 뒤의 절이 규칙인데 한 문장이라 뗄 수가 없다.","en":"I began by assuming the second condition contained no reasons. I believed a rules document only says what to do, and counting showed otherwise. Of sixty reasons and exceptions, eighteen were dissolved inside rule sentences. Lime goes here and pink goes there, therefore only one thing is left, in that shape, where the first clause is the reason and the second is the rule and they cannot be pulled apart because they are one sentence."},{"src":"not-yet-decided","i":14,"ko":"인과절을 잘라내면 둘째 조건이 깨끗해지기는 한다. 그러나 그렇게 하면 실재하지 않는 문서를 만들어 놓고 그것을 재는 셈이 되므로, 고쳐야 할 것은 문서가 아니라 가설이었다.","en":"Cutting the causal clauses out would make the second condition clean. It would also mean building a document that does not exist and measuring that instead, so what needed fixing was the hypothesis rather than the document."},{"src":"not-yet-decided","i":15,"ko":"그래서 이 실험은 왜를 주면 달라지는가를 묻지 않게 됐다. 왜는 이미 절반쯤 둘째 조건에 들어 있다. 남은 물음은 분리해서 따로 보관한 결정 기억을 주면 달라지는가다.","en":"The experiment therefore stopped asking whether giving reasons changes anything. The reasons are already half inside the second condition. What was left to ask is whether decision memory, separated out and kept apart, changes anything."},{"src":"not-yet-decided","i":18,"ko":"둘째에서 셋째로 갈 때 정확도는 1.8퍼센트포인트 떨어졌는데 부호는 중요하지 않다. 같은 칸을 세 번씩 돌렸을 때 그 세 번 사이의 흔들림이 평균 6.5퍼센트포인트였으니 조건 차이가 잡음보다 작다.","en":"Going from the second condition to the third, accuracy fell by 1.8 percentage points, and the sign does not matter. Running the same cell three times produced a spread of 6.5 percentage points on average, so the condition difference is smaller than the noise."},{"src":"not-yet-decided","i":19,"ko":"방향도 모델마다 반대였다. 한쪽은 5퍼센트포인트 올랐고 다른 쪽은 8.6퍼센트포인트 떨어졌으니, 둘을 합쳐 평균을 내는 것 자체가 서로 반대인 두 방향을 지우는 일이 된다.","en":"The direction was opposite across models. One rose by 5 percentage points and the other fell by 8.6, so averaging the two erases two directions that point against each other."},{"src":"not-yet-decided","i":20,"ko":"그보다 큰 것이 따로 있다. 두 모델 사이의 폭은 0.126이고 둘째와 셋째 조건 사이의 폭은 0.029라서, 어떤 모델을 쓰느냐가 어떤 문서를 주느냐보다 네 배 넘게 컸다.","en":"Something larger sits beside it. The spread between the two models is 0.126 and the spread between the second and third conditions is 0.029, so which model you use mattered more than four times as much as which document you give it."},{"src":"not-yet-decided","i":21,"ko":"지어낸 결정 번호는 아흔 번 중 하나도 나오지 않았고, 재료를 아예 안 준 서른 번은 인용을 한 번도 시도하지 않고 전부 없다고 답했다. 이것을 조건의 공으로 돌리면 안 된다. 지시문에 없다고 쓸 자리를 만들어 두었고 그 지시문은 세 조건에 글자 그대로 같이 들어갔으니, 재료에 없는 것을 물으면 모델이 빈자리를 지어내 채운다는 것을 알고 있었고, 없다고 쓸 자리를 미리 만들어 둔 결과다.","en":"Not one invented decision identifier appeared in ninety trials, and the thirty runs given no materials at all never attempted a citation and answered none every time. This should not be credited to the condition. The instruction provided a place to write none and that instruction went into all three conditions word for word, so it follows from knowing that a model fills an empty slot and giving it the slot in advance."},{"src":"not-yet-decided","i":23,"ko":"인용이 맞았는지는 문자열로 알 수 있지만, 근거 없는 주장을 했는지나 아직 안 정해진 쟁점을 알아차렸는지는 그렇지 않다. 그것을 정규식으로 때우면 그 정규식이 곧 채점 기준이 되고, 그 기준은 얼린 것 바깥에서 만들어진다.","en":"Whether a citation is correct can be settled by string comparison, but whether an unsupported claim was made, or whether an unsettled question was noticed, cannot. Patch that with a regular expression and the expression becomes the scoring standard, built outside what was frozen."},{"src":"not-yet-decided","i":24,"ko":"그래서 판정자를 둘 두고 조건도 모델도 알려 주지 않은 채 답과 물음만 넘겼다. 순서는 시드로 섞었는데, 섞지 않으면 판정자가 첫째 조건을 다 보고 둘째를 다 보게 되어 판정 기준이 흔들리는 방향이 조건에 그대로 실린다.","en":"So I used two judges and passed them the answer and the question without telling them the condition or the model. The order is shuffled with a seed, because unshuffled a judge sees all of the first condition and then all of the second, and any drift in the judge's standard rides directly on the condition."},{"src":"not-yet-decided","i":25,"ko":"물음은 셋이다. 근거 없는 서술을 했는가, 그 지점에서 판단을 미뤘는가, 아직 안 정해진 쟁점을 알아차렸는가. 각 물음에서 예가 좋은 쪽인지 나쁜 쪽인지는 미리 정해 얼려 두었다. 근거 없는 서술의 예는 나쁜 쪽이고 나머지 둘의 예는 좋은 쪽인데, 이 대응을 얼려 두지 않으면 결과를 보고 나서 정하게 된다.","en":"There are three questions. Was an unsupported claim made, was judgment deferred at that specific point, was the unsettled question noticed. Whether yes is the good side or the bad side was fixed and frozen for each question in advance. For unsupported claims yes is the bad side and for the other two yes is the good side, and without freezing that mapping you decide it after seeing the results."},{"src":"not-yet-decided","i":30,"ko":"이 둘로는 아무것도 잴 수 없다. 조건이 차이를 보일 자리가 없기 때문이다. 결정 기억이 기권을 낫게 한다는 가설은 이 설계로는 입증도 반증도 안 되는데, 첫째 조건이 이미 만점이라 올라갈 데가 없다. 설계할 때 기권 기회가 하나뿐인 것은 알고 있었지만 재료 없는 조건도 만점일 것은 몰랐다.","en":"Neither of these can measure anything, because there is no room for a condition to show a difference. The hypothesis that decision memory improves deferral can be neither confirmed nor refuted by this design, since the first condition is already at full marks and has nowhere to rise. I knew when designing it that there was only one deferral opportunity, but I did not know the no-material condition would be perfect too."},{"src":"not-yet-decided","i":33,"ko":"과제 중 하나에는 아직 결론이 안 난 쟁점이 걸려 있다. 세 값을 팔레트에 편입할지 말지가 열려 있는데 그 사실을 알려면 열린 질문을 읽어야 하고, 규칙 문서는 정해진 것만 말하므로 구조적으로 그것을 못 준다.","en":"One of the tasks carries a question that has not been concluded. Whether to fold three values into the palette is still open, and knowing that requires reading the open questions, and a rules document states only what is settled, so it structurally cannot supply that fact."},{"src":"not-yet-decided","i":34,"ko":"열여덟 번 가운데 알아차린 것은 세 번이었다. 셋 다 셋째 조건이고 셋 다 같은 모델이며 그 모델의 세 번 전부인데, 그 셋에서는 두 판정자가 갈리지 않았다. 판정자가 갈린 항목은 어느 쪽으로도 세지 않으므로 조건마다 여섯 번 가운데 넷에서 다섯만 집계에 들어갔고, 첫째 조건은 그 넷에서 영이며 둘째 조건도 넷에서 영이다.","en":"Of eighteen trials, three noticed. All three were the third condition, all three were the same model, and they were all three of that model's runs, and on those three the two judges did not disagree. Items where the judges disagreed are not counted either way, so only four or five of each condition's six runs entered the tally, and the first condition scored zero of its four and the second zero of its four."},{"src":"not-yet-decided","i":35,"ko":"기계가 잰 쪽도 같은 칸을 가리켰다. 과제별로 나눠 보면 그 과제 그 모델에서만 정확도가 0.20 올랐고, 세 번 다 알아차린 것과 0.6이 0.8이 된 것이 같은 칸에서 나왔다. 서로 아무 관계 없는 두 측정이 한 칸에 떨어졌다.","en":"The machine measurement pointed at the same cell. Broken out by task, accuracy rose by 0.20 only on that task with that model, and noticing three times out of three and 0.6 becoming 0.8 came out of the same cell. Two measurements with no relationship to each other landed on one cell."},{"src":"not-yet-decided","i":37,"ko":"한 과제에 한 물음, 한 모델로 세 번이다. 같은 재료를 받은 다른 모델은 세 번 다 못 알아차렸으니 결정 기억이 필요조건일 수는 있어도 충분조건은 아니거나, 아니면 그냥 우연이다. 그 칸 자신의 흔들림도 0.20이라 이동한 크기와 잡음의 크기가 같다.","en":"One task, one question, one model, three runs. The other model, given the same materials, missed it all three times, so decision memory may be necessary without being sufficient, or it was simply chance. That cell's own spread was also 0.20, so the size of the shift equals the size of the noise."},{"src":"not-yet-decided","i":38,"ko":"이 발견이 나온 자리가 이 실험에서 표본이 가장 작은 자리인데, 그것은 우연이 아니라 설계의 결과다. 원장에 열린 쟁점이 하나뿐이었으니 그것을 묻는 과제도 하나뿐일 수밖에 없었다.","en":"The place this finding came from is the place with the smallest sample in the experiment, and that is a consequence of the design rather than a coincidence. The ledger held one open question, so only one task could possibly ask about it."},{"src":"not-yet-decided","i":40,"ko":"첫 계산에서 조건 사이의 폭은 0.696으로 나왔다. 모델 사이의 폭 0.126보다 다섯 배 넘게 크니 조건 조작이 모델 차이를 압도한다는 결론이 거기서 곧장 따라 나온다.","en":"In the first calculation the spread across conditions came out at 0.696. That is more than five times the 0.126 spread across models, so the conclusion that condition manipulation overwhelms model difference follows directly from it."},{"src":"not-yet-decided","i":41,"ko":"그 값은 재료를 아예 안 준 조건을 포함한 것이었다. 그 조건의 정확도는 잰 값이 아니라 정의다. 결정을 하나도 안 줬으니 맞힐 방법이 없고, 그것을 한쪽 끝에 놓고 폭을 재면 나오는 것은 조건의 효과가 아니라 문서를 줬느냐 안 줬느냐다. 빼고 다시 재니 0.029였다.","en":"That value included the condition given no materials at all. Its accuracy is a definition rather than a measurement. Given no decisions there is no way to hit any, and putting that at one end and measuring the spread gives you not the effect of the condition but whether a document was given at all. Removed and recomputed, it was 0.029."},{"src":"not-yet-decided","i":42,"ko":"두 번째는 잡음 바닥이다. 1.8퍼센트포인트 하락을 먼저 봤다면 셋째 조건이 조금 나쁘다고 썼을 텐데, 같은 칸 세 번의 흔들림을 결론보다 먼저 출력하도록 프로그램을 짜 두어서 그러지 않았다. 흔들림이 6.5인 곳에서 1.8은 방향조차 말할 수 없다.","en":"The second was the noise floor. Had I seen the 1.8 point drop first I would have written that the third condition is slightly worse, and I did not because the program was built to print the spread across three runs of the same cell before any conclusion. Where the spread is 6.5, a 1.8 cannot even carry a direction."},{"src":"not-yet-decided","i":45,"ko":"이 실험은 한 번 죽은 적이 있다. 원장을 만들고 십사 분 뒤에 원본 문서가 밖에서 수정되면서 결정 서른네 건의 행 구간이 전부 한 줄씩 밀렸고, 원장이 잰 판본은 디스크 어디에도 남아 있지 않았다.","en":"This experiment died once. Fourteen minutes after the ledger was built the source document was edited from outside, the line ranges of thirty-four decisions all shifted by one, and the version the ledger had measured was nowhere on disk."},{"src":"not-yet-decided","i":46,"ko":"그래서 이번에는 원문을 얼려 두었는데, 아흔 번을 돌리는 도중에 같은 일이 다시 일어났다. 원본 디렉토리가 재편되면서 파일 이름이 바뀌었고 내부 출처 하나는 아예 읽을 수 없게 됐다.","en":"So this time the source text was frozen, and in the middle of the ninety runs the same thing happened again. The source directory was reorganized, filenames changed, and one internal source became unreadable entirely."},{"src":"not-yet-decided","i":47,"ko":"검증은 통과했다. 원장이 잰 것은 원본이 아니라 얼린 사본이기 때문이다. 읽을 수 없게 된 사실은 결함이 아니라 표류로 따로 보고됐는데, 이 원장으로 현재형 문장을 쓰면 거짓이 된다는 경고가 함께 붙었다.","en":"Verification passed. What the ledger measured was the frozen copy rather than the original. The unreadability was reported separately as drift rather than as a defect, with a warning attached that writing a present-tense claim from this ledger would make it false."},{"src":"not-yet-decided","i":48,"ko":"한 가지가 걸렸다. 원본이 디스크에 있는지 검사하던 시험이 그날 빨개졌는데, 표류는 파손이 아닌데도 파손처럼 실패한 것이다. 그런 시험은 가장 필요한 순간에 지워진다. 검사를 쓸 때 그것이 무엇을 못 보는지는 물어 왔지만 언제 정당하게 실패하는지는 안 물었고, 같은 실수를 그날 두 번 했다.","en":"One thing caught. A test that checked whether the original was on disk went red that day, which means drift failed like breakage without being breakage. A test like that gets deleted at the moment it is most needed. I have been asking what a new check fails to see but not when it fails legitimately, and I made that same mistake twice that day."},{"src":"not-yet-decided","i":50,"ko":"왜를 따로 적어 두는 일은 내가 기대한 것을 하지 않았다. 왜는 이미 규칙 문장에 절반쯤 녹아 있고, 나머지를 분리해서 건네도 인용 정확도는 움직이지 않는다.","en":"Writing the reasons down separately did not do what I expected. The reasons are already half dissolved into the rule sentences, and handing over the rest, separated out, does not move citation accuracy."},{"src":"not-yet-decided","i":51,"ko":"문서가 유일하게 제 몫을 한 자리에서 문서가 준 것은 왜가 아니었다. 셋째 조건이 둘째 조건보다 더 가진 기록 스물한 건은 전부 아직 확정 안 된 결정 열네 건과 열린 질문 일곱 건인데, 정해진 것에 대한 설명이 아니라 정해지지 않았다는 사실이다.","en":"At the one place the document paid off, what it gave was not a reason. The twenty-one records the third condition holds beyond the second are fourteen decisions not yet confirmed and seven open questions, which is the fact that something was not settled rather than an explanation of what was."},{"src":"not-yet-decided","i":53,"ko":"다음에 물어야 할 것은 분명하다. 열린 쟁점을 여러 과제에 심고 모델을 셋 이상 쓰고 쟁점의 밀도를 조작해 보는 것인데, 이번에 잰 것은 그 실험을 설계할 근거이지 결론이 아니다.","en":"What to ask next is clear. Plant open questions across several tasks, use three or more models, and manipulate the density of open questions. What was measured here is grounds for designing that experiment rather than a conclusion."},{"src":"paper2-genericness-metric","i":1,"ko":"*제네릭 AI 디자인을 잡으려고 결정론적 지표를 만들었다. 지표는 여섯 번 실패했고(한 번은 내 팔레트 앞에서) 그 실패 하나하나가, 통과하는 테스트 스위트로는 배울 수 없는 것을 가르쳐 주었다.*","en":"*I built a deterministic metric to catch generic AI design. It failed six times, once at my own palette, and each failure taught me something a passing test suite couldn't.*"},{"src":"paper2-genericness-metric","i":3,"ko":"G라는 지표는 시스템 A라는 디자인 시스템 도구 안에서 작동한다. 코드는 대부분 AI가 만들고 사람이 검토했다. 지표의 일은 검토자에게 익숙한 반응, *이거 AI가 만든 다른 페이지와 똑같이 생겼는데*를 숫자로 바꾸는 것이다. 문서화된 근거는 디자인이 아니라 텍스트 연구에 있다. 생성 AI가 준 아이디어를 받은 작가들은 더 창의적이라 평가된 이야기를 썼지만, 그 이야기들은 [서로 더 닮아 갔다](https://doi.org/10.1126/sciadv.adn5290). 반복되는 액센트와 서체는 그 논문이 아니라 이 프로젝트의 탐지기에서 관찰했다. 같은 인디고 계열과 짧은 기본 서체 목록이었다. G는 그 수렴을 결정론적이고 검사 가능한 방식으로 포착하려고 만들었다. [확률적 LLM 심판](https://arxiv.org/abs/2306.05685)의 반대편이다. 같은 입력은 늘 같은 점수를 내고, 점수의 모든 항목은 이름 붙은 규칙과 그 규칙을 발화시킨 입력값으로 추적된다. 왜 42점인지 물으면 답은 사후에 생성된 판정이 아니라 코드 한 줄이다.","en":"The metric, called G, lives inside System A, a design-system tool whose code was produced mostly by AI under human review. Its job is to turn a familiar reviewer's reaction, *this looks like every AI-generated page*, into a number. The documented evidence comes from text rather than design: writers given generative-AI ideas produced stories rated more creative, while those stories became [more similar to one another](https://doi.org/10.1126/sciadv.adn5290). The recurring accents and typefaces came from this project's detectors, not that paper: the same indigo family and the same short list of default faces. G was built to make that convergence deterministic and inspectable, the opposite corner from a [stochastic LLM-as-judge](https://arxiv.org/abs/2306.05685). The same input always produces the same score, and every point traces to a named rule and the exact input value that fired it. When someone asks why a design scored 42, the answer is a line of code rather than a verdict generated after the fact."},{"src":"paper2-genericness-metric","i":4,"ko":"메커니즘은 한 문단에 다 들어간다. 소수의 탐지기가 각자 한 종류의 기본값 추종을 찾는다. 프레임워크가 기본으로 싣고 나가는 hex 값과 정확히 일치하는 색, 전부 회색인 팔레트, Inter와 Roboto 같은 기본값으로만 채워진 폰트 스택, 너무 많은 액센트, 혹은 여럿 사이에 묻힌 단 하나의 액센트. 발화한 탐지기마다 고정 가중치를 더하고(high 심각도 신호 하나는 정확히 medium 두 개와 같다), 별도의 빌드 품질 감사가 최대 25점의 페널티를 보태며, 합계는 0-100으로 잘리고, 존재하는 최악의 증거를 읽는 문자 등급이 붙는다. 점수가 높으면 규칙이 기본값 추종을 찾았다는 뜻이다. 점수가 낮으면 규칙이 아무것도 찾지 못했다는 뜻이다. 그리고 이것이 훨씬 약한 진술이라는 걸, 나는 계속 다시 배우게 된다. 상수는 전부 글 끝의 \"내부 구조\"에 있다.","en":"The mechanism fits in a paragraph. A small set of detectors each looks for one kind of default-following: a color that is exactly a framework's stock hex, an all-gray palette, a font stack made entirely of defaults like Inter and Roboto, too many accents or one accent drowning among many. Each fired detector adds a fixed weight (one high-severity signal equals exactly two mediums), a separate build-quality audit adds up to 25 penalty points, and the total is clipped to 0-100, with a letter grade that reads off the worst evidence present. High score: the rules found default-following. Low score: the rules found nothing, which, I would keep relearning, is a much weaker statement. All the constants are in \"Under the hood\" at the end."},{"src":"paper2-genericness-metric","i":5,"ko":"튜닝은 작은 골든 세트로 했다. 실제 제품 열한 개(linear, vercel, stripe, cursor, figma, framer, notion, raycast, resend, superhuman, clay)에서 추출한 토큰과, 기본값으로 손수 조립한 제네릭 번들 네 개. 그리고 여기서 \"토큰\"이 뭘 뜻하는지 분명히 해 둬야겠다. 들리는 것보다 얇기 때문이다. 각 제품의 디자인 시스템에서 뽑은 팔레트 하나와 폰트 이름 목록 하나. 화면은 본 적 없고, 레이아웃도 본 적 없고, 실제 디자인도 본 적 없다. 그러니 figma가 42/D를 받는다는 것은, 추출된 폰트(Inter와 Roboto Mono)가 둘 다 기본값이라는 뜻이지 figma의 디자인이 제네릭하다는 뜻이 아니다. 지표는 figma의 디자인을 본 적이 없다. 폰트 이름 두 개를 봤을 뿐이다. 그리고 그 뒤, 실패가 하나씩 차례로 도착했다. 여섯 번, 전부 배포된 도구 안에서 난 것들이다. 최종 점수보다 그 실패들이 이 실험에서 무엇을 확인했는지 보여 준다.","en":"I tuned it against a small golden set: tokens extracted from eleven real products (linear, vercel, stripe, cursor, figma, framer, notion, raycast, resend, superhuman, clay) and four generic bundles I hand-built from defaults. And I should be plain about what \"tokens\" means here, because it is thinner than it sounds: a palette and a list of font names, pulled from each product's design system. Never a screen, never a layout, never the actual design. So when figma scores 42/D, that means its extracted fonts, Inter and Roboto Mono, are both defaults, not that figma's design is generic. The metric never saw figma's design. It saw two font names. And then, one after another, the failures arrived. Six of them, all in the deployed instrument. Those failures, rather than the final score, show what the experiment established."},{"src":"paper2-genericness-metric","i":7,"ko":"지표는 측정처럼 보이지만 실제로는 결정의 더미이고, 그 더미가 먼저 보이지 않으면 실패들도 별 의미가 없다. 그래서 잔해에 앞서 구성부터 본다. 결정을 하나씩, 근거를 방어할 수 있는 것과 그저 골랐다고만 보고할 수 있는 것으로 나누어 살펴보자.","en":"A metric looks like a measurement and is actually a stack of decisions, and the failures will not mean much unless the stack is visible first. So before the wreckage: the construction, decision by decision, the ones I would defend and the ones I can only report."},{"src":"paper2-genericness-metric","i":8,"ko":"첫 번째 결정은 제네릭함이 조작적으로 무엇*이어야* 하는가였다. 검토자의 느낌은 전체에 관한 것이다. 레이아웃, 화면, 이 페이지는 어디서 왔어도 이상하지 않다는 감각. 나는 지표를 부분에 관한 것으로 만들었다. 팔레트 하나와 폰트 목록 하나. 그리고 \"제네릭\"을 열거 가능한 기본값과의 근접성으로 정의했다. 더 충실한 후보들도 있었다. 실제 디자인들의 모집단으로부터의 거리로서의 제네릭함이 단어의 뜻에는 더 가깝지만, 그러려면 모집단과 표현과 거리 함수가 필요하고, 셋 다 내가 손으로 감사할 수도 고정해 둘 수도 없는 구성 요소다. 기본값은 정반대 성격을 지닌다. 유한하고, 공개되어 있고, 정확하다. Tailwind의 재고 파랑은 특정 hex 값 하나다. AI 출력이 기대는 인디고 계열은 특정 hex 값 일곱 개다. 열거할 수 있는 것은 매칭할 수 있고, 매칭할 수 있는 것은 코드 한 줄로 거슬러 추적할 수 있다. 그래서 구성 개념은 \"이거 다른 모든 것과 똑같이 생겼다\"에서 \"여기엔 내가 이름 댈 수 있는 것들이 들어 있다\"로 좁아졌고, 관찰된 모든 맹점이 그 좁힘에서 나왔다. 이 선택은 충실도를 내주고 감사 가능성을 얻었다. 더 충실한 대안은 현재 증거로 고정해 두거나 손으로 검증할 수 없었다.","en":"The first decision was what genericness would *be*, operationally. The reviewer's feeling is about wholes: a layout, a screen, the sense that a page could have come from anywhere. I made the metric about parts, a palette and a font list, and I made \"generic\" mean proximity to enumerable defaults. There were more faithful candidates. Genericness as distance from a population of real designs is closer to what the word means, but it needs a population, a representation, and a distance function, three components I could neither audit by hand nor hold fixed. Defaults have the opposite character: they are finite, published, exact. Tailwind's stock blue is one specific hex value. The indigo family AI output leans on is seven specific hex values. What can be enumerated can be matched, and what can be matched can be traced back to a line. So the construct narrowed from \"this looks like everything else\" to \"this contains things I can name,\" and every observed blind spot descends from that narrowing. The trade was inspectability for fidelity: the narrower construct could be audited by hand, while the more faithful alternatives could not be held fixed with the available evidence."},{"src":"paper2-genericness-metric","i":9,"ko":"한쪽 방향으로만 작동한다는 성질은 따로 애쓰지 않아도 따라왔다. 그걸 이해한 것은 나중이었지만. 기본값은 목록으로 만들 수 있다. 독자성은 그럴 수 없다. 유한한 목록은 잡을 가치가 있는 재고 hex를 전부 담을 수 있지만, 기본값이 아닌 모든 것을 담는 목록은 없다. 그래서 탐지기들은 기본값 추종의 증거는 쌓을 수 있어도 그 반대의 증거는 결코 쌓을 수 없다. 점수의 비대칭(높은 점수는 발견이고, 낮은 점수는 부재일 뿐이다)은 내가 위에 얹은 철학적 입장이 아니다. 구성이 강제한 형태이고, G를 읽으면서 사람들이(나부터 시작해서) 저지르는 가장 끈질긴 실수는 그 비대칭이 선택이 아니라 구조라는 사실을 잊는 데서 온다.","en":"One-sidedness followed for free, though I only understood that later. Defaults can be listed; distinctiveness cannot. A finite list can hold every stock hex worth catching, but no list holds everything that is not a default, so the detectors can accumulate evidence of default-following and can never accumulate evidence of its opposite. The score's asymmetry (a high score is a finding, a low score is only an absence) is not a philosophical position I added on top. It is the shape the construction forced, and the most durable mistakes people make reading G, starting with me, come from forgetting that the asymmetry is structural rather than chosen."},{"src":"paper2-genericness-metric","i":10,"ko":"다음은 한정사. 규칙의 성격이 실제로 정해지는 자리이다. 폰트 탐지기는 스택의 *모든* 기본 패밀리가 기본값일 때만 발화하고, 회색 탐지기는 *모든* 색이 무채색일 때만 발화한다. 존재 한정 버전을 쓸 수도 있었다. 기본 폰트 하나라도, 회색 하나라도. 그랬다면 업계 절반에 발화했을 것이다. 거의 모든 실제 제품에 Inter가 어딘가에 있고 회색은 어디에나 있으니까. 전칭 한정은 정밀도를 얻는 대신 재현율을 내준다. 섞인 세트는 구성상 통과한다. 이렇게 값을 치르는 방식에는 그늘이 하나 있는데, 글 끝 무렵에 다시 돌아온다.","en":"Then the quantifiers, which are where a rule's character actually lives. The font detector fires only when *every* base family in the stack is a default; the gray detector fires only when *every* color is achromatic. I could have written existential versions, any default font, any gray, and they would have fired on half the industry, because nearly every real product has Inter somewhere and gray everywhere. Universal quantification buys precision and pays in recall: mixed sets pass by construction. That payment schedule has a shadow I return to near the end."},{"src":"paper2-genericness-metric","i":11,"ko":"다음은 매칭. 색은 정확한 정규 hex로 비교한다. 표기는 정규화하고, 지각적 근사 매칭은 없다. 결정론 대 뉘앙스로 프레임하고 싶어지지만 그건 틀린 프레임이다. 지각적 색 거리도 문자열 동등성과 정확히 똑같이 결정론적일 것이다. 실제 거래는 좁은 정확 규칙 대 더 넓은 결정론적 규칙이었고, 나는 좁은 쪽을 택했다. 정확 규칙은 hex 코드와 텍스트 에디터만 있으면 사람이 검증할 수 있지만, 지각적 임계값은 공식을 재구현해 보지 않은 사람은 아무도 검증할 수 없기 때문이다. 재현율로 값을 치렀다. 알고서.","en":"Then matching. Colors are compared as exact canonical hex, notation normalized, no perceptual near-matching. The tempting framing is determinism versus nuance, and it is wrong: a perceptual color distance would be exactly as deterministic as string equality. The real trade was a narrow exact rule against a broader deterministic one, and I took narrow, because an exact rule can be verified by a human with a hex code and a text editor, while a perceptual threshold can be verified by no one who hasn't reimplemented the formula. I paid in recall, knowingly."},{"src":"paper2-genericness-metric","i":12,"ko":"다음은 상수들. 여기서부터 정직해지기가 불편해진다. high 심각도 신호는 28점, medium은 14점, 비율은 정확히 2다. 방어 가능한 심각도 계산보다 읽기 쉬운 심각도 계산이 내게 더 중요했기 때문이다. \"high 하나는 medium 둘\"은 누구나 머릿속으로 셈할 수 있다. 절대 척도는 산술과 판정 사다리가 기준점들에서 한 이야기를 하도록 맞췄다. high 하나(28)는 혼자서 21의 borderline 임계를 넘고, high 셋(84)은 71의 최상위 밴드에 앉으면서 동시에 F 규칙을 발동시키고, medium 하나(14)는 low 밴드 안에 머문다. 빌드 품질 페널티는 25로 캡을 씌웠다. 만듦새 문제만으로는 디자인을 borderline까지 밀 수 있어도, 46에서 시작하는 제네릭 밴드까지는 절대 못 밀도록. 그 캡은 구성 개념 자체에 대한 주장을 코드화한다. G는 기본값 추종에 관한 것이고, 나쁜 실행은 가중 요인일 뿐 결코 죄목이 아니다. 감사기 안에서는 색이 가장 큰 영역 가중치(0.20)를, radius와 elevation이 가장 작은 가중치(각 0.10)를 갖는다. 토큰 수준의 시야에서 정체성이 주로 사는 곳이 색이기 때문이다. 그리고 감사 영역 안의 error는 0.15, warning은 0.08. 또 거의 2 대 1이다. 나는 그 반복을 알아차린다. 기댈 원칙이 없는 자리마다 나는 같은 비율에 손을 뻗었다. 그것은 심각도 이론이 아니다. 계기 속에 얼어붙은 습관이다.","en":"Then the constants, and here the honesty gets uncomfortable. A high-severity signal is worth 28 points and a medium 14, a ratio of exactly two because a legible severity algebra mattered more to me than a defensible one: anyone can reason \"one high equals two mediums\" in their head. The absolute scale was set so the arithmetic and the verdict ladder tell one story at the anchor points: one high (28) clears the borderline threshold at 21 on its own, three highs (84) land in the top band at 71 and simultaneously trip the F rule, one medium (14) stays inside the low band. The build-quality penalty is capped at 25 so that craft problems alone can push a design into borderline and can never push it into the generic band at 46. That cap encodes a claim about the construct itself: G is about default-following, and bad execution is an aggravator, never the crime. Inside the auditor, colors carry the largest area weight (0.20) and radius and elevation the smallest (0.10 each), because in a token-level view color is where identity mostly lives. And an error inside an audit area costs 0.15 against a warning's 0.08, which is nearly the same two-to-one again. I notice the recurrence: wherever no principle presented itself, I reached for the same ratio. That is not a theory of severity. It is a habit, frozen into an instrument."},{"src":"paper2-genericness-metric","i":13,"ko":"다음은 출력. 채널이 하나가 아니라 둘이다. 숫자 점수는 밴드로 매핑되고(20까지 low, 45까지 borderline, 70까지 generic, 그 위는 slop), 별도의 등급 사다리는 존재하는 최악의 증거를 읽는다. high 신호 하나는 산술이 뭐라고 하든 최소 D를 강제한다. 평균을 내는 등급이라면 깨끗한 영역 아홉 개가 유죄 신호 하나를 세탁하게 놔둘 것이기 때문이다. 두 채널은 어긋날 수 있다. 42는 borderline 밴드에 들어가 있으면서 등급 D를 단다. 두 판정이 어긋나면 문자 등급을 최종 판정으로 삼도록 규칙을 정했다. 그 규칙 뒤에 별도의 유도 과정은 없다. 같은 증거를 읽는 두 방식이 갈렸고, 더 비관적인 쪽을 택했다. 판정은 탐지기가 찾은 최악의 증거만큼은 해명하기 어려워야 한다는 판단에서였다.","en":"Then the output, which is two channels, not one. The numeric score maps to bands (low to 20, borderline to 45, generic to 70, slop above), and a separate grade ladder reads off the worst evidence present: one high signal forces at least a D no matter what the arithmetic says, because a grade that averaged would let nine clean areas launder one damning signal. The two channels can disagree. A 42 sits in the borderline band while carrying grade D, and the deployed rule for that disagreement is a fiat: the grade is authoritative. There is no derivation behind that sentence. Two redundant readings of the same evidence diverged, and I picked the pessimistic one by decree, on the theory that a verdict should be as hard to explain away as the worst thing the detectors found."},{"src":"paper2-genericness-metric","i":14,"ko":"이것이 구성의 전부이고, 세 무더기로 나뉜다. G가 형식화하는 것은 술어들이다. 얼어 있고, 공개되어 있고, 정확하다. G가 튜닝에 위임하는 것은 가중치와 임계값과 밴드 경계다. 열다섯 항목짜리 골든 세트에 미치는 효과로만 방어된다. G가 열어 두는 것은 가장 중요한 모든 것이다. 기본값 근접성이 제네릭함의 정체*인가*, 탐지되지 않은 디자인은 좋은 디자인인가, 그 디자인이 제품에 맞는가. 형식화, 튜닝, 열림. 여섯 실패는 세 무더기 전부에 떨어지고, 각 실패가 어느 무더기에서 왔는지 아는 것이 수정 자체보다 중요했던 것으로 드러났다.","en":"That is the whole construction, and it sorts into three piles. What G formalizes: the predicates, frozen, published, exact. What G delegates to tuning: the weights, thresholds, and band edges, defensible only by their effect on a fifteen-item golden set. What G leaves open: everything that matters most, whether default-proximity is what genericness *is*, whether an undetected design is any good, whether the design is right for its product. Formalized, tuned, open. The six failures land in all three piles, and knowing which pile each came from turned out to matter more than the fixes."},{"src":"paper2-genericness-metric","i":16,"ko":"유일한 서체가 \"Inter Variable\"인 토큰 세트가 기본 폰트 탐지기를 그대로 통과했다. 술어는 정확 문자열 소속 검사(`font.lower() in defaults`)였고, \"inter variable\"은 \"inter\"가 아니다. AI 슬롭 시대의 대표 기본 폰트가, 배리어블 폰트 이름을 걸치고, 바로 자기를 잡으려고 만든 탐지기를 피해 간 것이다.","en":"Token sets whose only typeface was \"Inter Variable\" sailed straight past the default-font detector. The predicate was an exact string membership test, `font.lower() in defaults`, and \"inter variable\" is not \"inter.\" The flagship default font of the AI-slop era, wearing its variable-font name, evaded the detector built specifically to catch it."},{"src":"paper2-genericness-metric","i":17,"ko":"수정은 기본 패밀리 매칭이었다. 첫 단어를 떼서, 소문자로 바꾸고, 그걸 검사한다. 이제 \"Inter Variable\"은 \"inter\"로 정규화된다. 이 수정에는 비용도 있었는데, 나는 그 비용을 그대로 두기로 했다. figma의 추출 폰트는 Inter와 Roboto Mono, 둘 다 기본값이라서, 내가 독자적이라고 라벨을 붙였던 figma가 탐지기를 발화시키기 시작했고, distinct 항목에서의 default-font 발화 수가 11개 중 0개에서 11개 중 1개가 됐다. 지표가 더 올바르게 됐기 때문에 숫자가 나빠졌고, 나는 그걸 그대로 두었다. 게다가 브랜드 서체가 곧 기본 서체*인* 회사보다 좋은 경계 사례도 없다. 탐지기는 이름에 적힌 그 일을 정확히 하고 있는 것이다.","en":"The fix was base-family matching: take the first word, lowercase it, test that. \"Inter Variable\" now normalizes to \"inter.\" The fix also had a cost I decided to keep: figma's extracted fonts are Inter and Roboto Mono, both defaults, so figma, a design I'd labeled distinct, started firing the detector, moving the count of default-font fires on distinct items from 0 of 11 to 1 of 11. The number got worse because the metric got more correct, and I let it. There's also no better boundary case than a company whose brand typeface *is* the default typeface; the detector is doing exactly what it says on it."},{"src":"paper2-genericness-metric","i":18,"ko":"교훈은 폰트 너머로 일반화된다. 사람이 지은 이름 위의 문자열 동등성 술어는 언제나 자기가 코드화하는 개념보다 좁고, 그 간극은 술어를 쓸 때와 같은 머리로 쓴 테스트에서는 보이지 않는다. 테스트 작성자가 술어가 가정하는 것과 같은 표준 철자를 재사용하기 때문이다. 그리고 이 수정에는 버그 수리보다 정직한 이름이 어울린다. 형식화된 경계를 다시 그은 것이다. \"기본 폰트\"는 이름 동일성으로 조작화되어 있었는데, 정규화 한 층 더 깊은 기본 패밀리 동일성이 되었다. 개념이 포착된 게 아니다. 덜 나쁘게 근사되었을 뿐이고, 마지막 층이라는 건 없다. 모든 술어는 자기 개념보다 좁고, 이 장르의 실패 하나하나가 강제하는 결정은 늘 같다. 그 좁음을 없앨 수 있느냐가 아니라, 어디에 둘 것이냐다.","en":"The lesson generalizes past fonts. A string-equality predicate over human-authored names is always narrower than the idea it encodes, and the gap is invisible in tests written by the same mind that wrote the predicate, because the test author reuses the same canonical spellings the predicate assumes. And the fix deserves a more honest name than bug repair: it was a redrawing of the formalized edge. \"Default font\" had been operationalized as name identity; it became base-family identity, one normalization layer deeper. The concept did not get captured. It got approximated less badly, and there is no final layer. Every predicate is narrower than its idea, and each failure in this genre forces the same decision, where the narrowness should sit, never whether there should be any."},{"src":"paper2-genericness-metric","i":20,"ko":"비었거나 거의 빈 입력은 발화 신호 0개를 냈고, 그래서 \"깨끗함\", 그래서 등급 A에 제네릭 0이었다. 지표가 *증거의 부재*를 *독자성의 증거*로 읽었다. 아무것도 먹이지 않으면, 그 아무것도 아닌 것을 독자적이라고 인증해 준 것이다.","en":"Empty or near-empty input produced zero fired signals, hence \"clean,\" hence grade A and genericness 0. The metric read *absence of evidence* as *evidence of distinction*. Feed it nothing, and it certified the nothing as distinctive."},{"src":"paper2-genericness-metric","i":21,"ko":"충분성 게이트라는 게 아예 없었다. 신호 루프는 존재하는 토큰 위를 돌다가 제 패턴을 하나도 못 찾았고, 신호 0개 경로는 \"깨끗함\"으로 끝났다. 수정은 fail-closed 게이트였다. 색 2개 미만에 폰트 없음이면 판정은 \"데이터 부족\", 등급 \"?\", 밴드 \"판정 불가\", 사람에게 에스컬레이션.","en":"There was no sufficiency gate at all: the signal loop ran over whatever tokens existed, found none of its patterns, and the zero-signal path ended in \"clean.\" The fix was a fail-closed gate: fewer than two colors and no fonts means the verdict is \"insufficient data,\" grade \"?\", band \"cannot assess\", escalate to a human."},{"src":"paper2-genericness-metric","i":22,"ko":"그런데 그 수정이 샜다. 두 번째 점검에서, spacing이나 컴포넌트 토큰만 담은 입력(비어 있지는 않지만 색도 폰트도 없는)이 여전히 깨끗함으로 빠져나가는 게 발견됐다. 게이트는 디자인이 판정 가능하다는 증거로 색과 폰트만을 세도록 조여야 했다. fail-closed는, 알고 보니, 한 번 내리고 끝나는 결정이 아니다. \"입력\"의 정의가 바뀔 때마다 다시 검증해야 하는 속성이다.","en":"And then the fix leaked. A second pass found that inputs carrying only spacing or component tokens (not empty, but with no colors and no fonts) still slipped through as clean. The gate had to be tightened to count only colors and fonts as evidence that the design is assessable at all. Fail-closed, it turns out, is not a decision you make once; it's a property you must re-verify every time the definition of \"input\" changes."},{"src":"paper2-genericness-metric","i":23,"ko":"이 실패는 지표의 어휘도 바꿨다. 다른 실패들은 하지 못한 일이다. 그 전까지 G는 점수로만 말할 수 있었는데, 이 수정이 거부를 추가했다. 판정이 없을 것이라는 게 내용인 판정. 그리고 그 거부는 일부러 좁게, 일부러 비대칭으로 지었다. 거의 빈 입력과 발화 신호 0개를 동시에 요구하므로, 회색 견본 하나는 판정 불가로 면책되지 않는다. 회색 하나도 여전히 전부 회색인 팔레트라서 no-brand-color 탐지기가 발화하고, 그 디자인은 제 몫의 D를 받는다. \"?\"는 오직 깨끗한 A가 됐을 자리만 대체할 수 있다. 이 구성에서 의심은 칭찬을 취소할 수는 있어도 비난을 취소하지는 못한다. 일방향 계기의 칭찬은 애초에 가장 약한 출력이었기 때문이다. 여기서 오래가는 교훈은 이것이다. 깨끗하다는 판정이 \"증거를 못 찾았다\"를 뜻하는 계기는 *들여다봤는데 아무것도 없었다*와 *들여다볼 것이 아예 없었다*를 구별해야 한다. 아니면 가장 안심되는 답이 가장 못 믿을 답이 된다. 게이트의 상수들도 다른 모든 것만큼이나 저자가 지은 것이다. 판정 가능성의 하한은 색 2개 또는 이름 있는 폰트 1개다. 2인 이유는 색 두 개가 얼룩이 아니라 관계를 표현할 수 있는 가장 작은 집합이라서, 폰트 1개인 이유는 이름 붙은 서체 하나는 이미 누군가가 내린 결정이라서다. 기록에 남은 정당화는 이것이 전부이며, 그 근거도 결국 작성자의 판단뿐이다.","en":"This failure also changed the metric's vocabulary, which none of the others did. Before it, G could only speak in scores; the fix added a refusal, a verdict whose content is that there will be no verdict. And the refusal was built deliberately narrow and deliberately asymmetric. It requires both near-empty input and zero fired signals, so a single gray swatch is not excused as unassessable: one gray color is still an all-gray palette, the no-brand-color detector fires, and the design takes its D. The \"?\" can only ever displace what would have been a clean A. Doubt, in this construction, is allowed to cancel praise and never to cancel blame, because a one-sided instrument's praise was already its weakest output. That is the durable lesson here: an instrument whose clean verdict means \"no evidence found\" has to distinguish *looked and found nothing* from *had nothing to look at*, or its most reassuring answer becomes its least trustworthy one. The gate's own constants are as authored as everything else. The floor of assessability is two colors or one named font: two because two colors are the smallest set that can express a relationship rather than a smudge, one font because a single named typeface is already a decision somebody made. That is the entire justification on record, and I am the record."},{"src":"paper2-genericness-metric","i":25,"ko":"빌드 품질 페널티는 `(1 − q) · 25 if q > 0 else 0`으로 구현되어 있었다. 가드는 아마 품질 데이터가 없을 때 일을 건너뛰려고 쓴 것이었을 테다. 그런데 그 가드는 q = 0이라는 정당한 경우(가능한 최악의 감사, 등급 F)까지 함께 붙잡았고, 거기서 페널티는 정점을 찍는 대신 사라졌다. 지표가 받을 수 있는 가장 나쁜 입력이 제네릭 0, 최고의 점수를 받았다.","en":"The build-quality penalty was implemented as `(1 − q) · 25 if q > 0 else 0`. The guard was presumably written to skip work when no quality data existed. It also captured the legitimate case of q = 0 (the worst possible audit, grade F) where the penalty vanished instead of peaking. The most damning input the metric could receive got a genericness of 0, its best possible score."},{"src":"paper2-genericness-metric","i":26,"ko":"수정은 가드를 지우고 페널티를 무조건 적용하는 것이었다. 내 예시 기반 테스트는 하나도 이걸 잡지 못했다. \"더 나쁜 감사가 점수를 낮출 수는 없다\"는 속성 진술이지 예시가 아니고, 아무도 그 속성을 적어 두지 않았기 때문이다.","en":"The fix was to delete the guard and apply the penalty unconditionally. None of my example-based tests caught it, because \"a worse audit can never lower the score\" is a property statement, not an example, and nobody had written the property down."},{"src":"paper2-genericness-metric","i":27,"ko":"수정보다 분류가 중요하다. 이것은 단조성 결함이지 결정론 결함이 아니었다. 가드는 완벽하게 결정론적이었고, 매 실행마다 같은 잘못을 저질렀다. 구성 수준의 설명이 더 유용하다. 이 지표에는 내가 한 번도 적어 두지 않은 공리들이 있었다. \"더 유죄인 증거가 점수를 낮출 수는 없다\"는 첫날부터 이 지표를 떠받치고 있었는데 어디에도 존재하지 않았다. 코드에도, 테스트에도, 주석에도. 술어는 형식화됐지만, 그 술어들을 *지표*로 만들어 주는 속성들은 암묵으로 남았고, 공리가 암묵인 형식화는 완성된 것이 아니라 완성돼 보이는 것이다. 예시 기반 테스트는 사례를 표본으로 삼을 뿐이며, 진술되지 않은 전역 속성은 강제할 수 없다.","en":"The classification matters more than the fix. This was a monotonicity defect, not a determinism defect: the guard was perfectly deterministic and did the same wrong thing on every run. The construction-level account is more useful. The metric had axioms I never wrote down. \"More damning evidence can never lower the score\" was load-bearing from the first day and existed nowhere, not in code, not in tests, not in a comment. The predicates were formalized; the properties that made those predicates a *metric* stayed tacit, and a formalization whose axioms are tacit is finished-looking rather than finished. Example-based tests sample cases; an unstated global property gives them nothing to enforce."},{"src":"paper2-genericness-metric","i":29,"ko":"채점기는 단색 팔레트에는 벌점을 주면서, `#2563EB`(Tailwind의 재고 blue-600)는 \"브랜드 색이 있음\"으로 기꺼이 받아 주었다. 디자인이 생태계에서 가장 기본값다운 단 하나의 색으로 브랜드 색 보유 조건의 자구(字句)를 충족할 수 있었던 것이다. 그 결과는 골든 세트에서 역전으로 나타났다. 진짜로 독자적인 토큰 세트가 28/D를 받아, 일부러 제네릭하게 만든 내 목업 14/B *위에* 앉았다. 지표가 자기 구성 개념의 양 끝을 거꾸로 정렬하고 있었다. 모든 유닛 테스트가 통과하고 개별 점수 하나하나는 그럴듯해 보이는 채로.","en":"The scorer penalized monochrome palettes but happily accepted `#2563EB`, Tailwind's stock blue-600, as \"has a brand color.\" A design could satisfy the letter of brand-color presence using the single most default color in the ecosystem. The consequence showed up in the golden set as an inversion: a genuinely distinct token set scored 28/D, *above* my deliberately generic mockups at 14/B. The metric was ordering the two ends of its own construct backwards, while every unit test passed and every individual score looked plausible."},{"src":"paper2-genericness-metric","i":30,"ko":"수정은 13개 hex 프레임워크 기본 색상 목록(Tailwind, Bootstrap, Material, Ant)을 근거로 하는 새 high 심각도 탐지기였다. 제네릭 번들은 14에서 42로 뛰었고, 순서는 바로잡혔으며, 제네릭 평균과 독자 평균 사이의 전체 분리는 결국 +31.2점에 도달했다. 그 숫자 뒤의 역사는 깔끔한 상승이 아니다. 초기 구성은 +14.6을 기록했다; 실패 하나와 둘의 정확성 수정은 지표를 더 정직하게 만들면서 기록된 분리를 +13.4로 *떨어뜨렸다*; 색상 탐지기는 그것을 +27.4로 올렸고, 일곱 시간 뒤 독자적 제품 셋에 벌점을 주고 있던 거짓 양성 규칙을 따로 고치면서 +31.2가 되었다. 마지막 수치는 로그를 옮겨 적은 값이 아니라 해당 커밋에서 다시 실행한 값이다. 그것도 정확성 수정에서 나왔고, 이번에는 숫자를 위로 움직였다. 이 숫자는 어느 방향으로도 정직함을 따라가지 않는다. 그냥 움직인다. 만약 분리가 회귀 알람이 아니라 최적화 목표였다면, 나는 지표를 올바르게 만든 그 수정들로부터 *멀어지는* 쪽으로 조종당했을 것이다.","en":"The fix was a new high-severity detector backed by a 13-hex list of framework-default colors (Tailwind, Bootstrap, Material, Ant). The generic bundles jumped from 14 to 42, the ordering righted itself, and the overall separation between the generic and distinct means eventually reached +31.2 points. The history behind that number is not a clean ascent: the initial configuration logged +14.6; the correctness fixes of failures one and two *dropped* the logged separation to +13.4 while making the metric more honest; the color detector then took it to +27.4; and a separate correction seven hours later, to a false-positive rule that had been penalizing three distinct products, brought it to +31.2. The last figure was re-run from the relevant commit rather than copied from a log; it also came from a correctness fix, this time one that moved the number up. The number does not track honesty in either direction. It just moves. Had the separation been my optimization target instead of my regression alarm, I would have been steered *away* from the fixes that made the metric correct."},{"src":"paper2-genericness-metric","i":31,"ko":"이 실패에서 구성 결정 두 개가 나왔고, 둘 다 실패보다 오래 살아남았다. 첫째는 탐지기의 형태다: 정확한 hex 값 열세 개의 목록, high 심각도. 프레임워크가 공개한 재고 액센트와의 여섯 자리 정확 일치는 토큰 시야가 쥘 수 있는 가장 강한 단일 증거라는 논리에서다. 독립적인 취향으로 `#2563EB`에 도달할 확률은 0은 아니지만, 유죄 판결을 내리기엔 충분히 낮다. 13이라는 수 자체에 근거가 있는 건 아니다. 프레임워크 네 개를 조사했을 때 나온 재고 액센트의 개수이고, 다섯째를 조사하는 날 목록은 자랄 것이다. 둘째 결정은 골든 세트 자체에 관한 것이다. 그 역전은 검사로 발견되지 않았고 발견될 수도 없었다. 검사가 닿는 수준에서는 아무것도 잘못돼 있지 않았기 때문이다. 모든 유닛 테스트가 통과했고, 개별 점수 하나하나가 그럴듯해 보였고, 오직 아는 항목들의 *순서*만이 뒤집혀 있었다. 탐지기 목록은 제네릭함이 어떻게 생겼는지에 대한 주장이고, 지표는 주장되지 않은 모든 형태에 구조적으로 눈멀어 있다. 그 맹점 중 하나라도 볼 수 있는, 내가 가진 유일한 계기는 순위를 이미 아는 라벨 붙은 항목들의 집합이다. 그래서 골든 세트는 튜닝 보조 도구이기를 그만두고 상설 순위 점검이 되었다. 영구 보존, 튜닝이 끝나도 은퇴 없음.","en":"Two construction decisions came out of this failure, and both outlived it. The first is the detector's shape: a list of thirteen exact hex values, ranked high severity, on the reasoning that a six-digit exact match against a framework's published stock accent is the strongest single piece of evidence a token view can hold. The odds of arriving at `#2563EB` by independent taste are not zero, but they are low enough to convict. Thirteen is not a principled number. It is how many stock accents I found when I surveyed four frameworks, and the list would grow the day I surveyed a fifth. The second decision was about the golden set itself. The inversion was not found by inspection and could not have been, because nothing was wrong at the level inspection reaches: every unit test passed, every individual score looked plausible, and only the *ordering* of known items was inverted. A detector list is a claim about what genericness looks like, and the metric is structurally blind to every form not claimed; the only instrument I own that can see one of those blind spots is a set of labeled items whose ranks I already know. So the golden set stopped being a tuning aid and became a standing rank check, kept forever, never retired after tuning."},{"src":"paper2-genericness-metric","i":34,"ko":"시스템 A는 기본 도메인 프리셋을 하나 싣고 다닌다. 자동 수리 패스가 남의 제네릭한 디자인을 고칠 때 쓰는 참조 팔레트다. 갓 추가된 프레임워크 기본값 탐지기가 그걸 표시했다. 프리셋의 primary는 `#2563EB`, accent는 `#0EA5E9`, info 색은 `#3B82F6`. 셋 다 Tailwind 기본값이다. 내 안티 슬롭 시스템은 재고 색상에 기대는 디자인을 단죄해 놓고, *해결책*이라며 그 수정을 같은 재고 색상 쪽으로 몰아가고 있었다. 지표와 수리 루프가, 설계된 그대로 정확히 작동하면서, 합작으로 슬롭을 팔레트에 맞는 슬롭으로 세탁하고 있었던 것이다. 그 표시는 모든 발견이 도착하는 방식 그대로 도착했다. 이름 붙은 규칙과 그것을 발화시킨 hex 값들. 입력이 내 것이라는 표식은 출력 어디에도 없었다. 계기는 자기가 읽는 게 누구의 작업인지 모르고, 바로 그 점이 이 순간을 신뢰할 만하게 만들었다.","en":"System A ships a default domain preset: the reference palette its automated repair pass uses to fix other people's generic designs. The freshly added framework-default detector flagged it. The preset's primary was `#2563EB`, its accent `#0EA5E9`, its info color `#3B82F6`. All three are Tailwind defaults. My anti-slop system had been condemning designs for leaning on stock colors, and then, as the *remedy*, steering their fixes toward the same stock colors. The metric and the repair loop, working exactly as designed, were jointly laundering slop into on-palette slop. The flag arrived the way every finding arrives, a named rule and the hex values that fired it, with nothing in the output marking that the input was my own. The instrument does not know whose work it is reading, which is precisely what made the moment worth trusting."},{"src":"paper2-genericness-metric","i":35,"ko":"프리셋을 다시 디자인했다: primary `#0E4C5E`(깊은 청록), accent `#F26B3A`(따뜻한 코럴), info `#3E6E8E`. 이 변경이 입증한 범위는 팔레트가 더 독자적이라는 주장보다 좁다. 이건 지표를 만족시키려고 지표 자신의 참조 데이터를 다시 디자인한 것, 소형 [굿하트의 법칙](https://doi.org/10.1017/S1062798700002660)이고, 새 팔레트가 실제로 더 독자적이라는 걸 보여 주는 독립적 근거는 없다. 이제 탐지기에 걸리지 않는다는 것뿐이다. 이 사건은 기록 안에서 가장 강한 내부 검증이다. 기본값 탐지기가 내가 작성한 데이터를 향해, 내 이해관계에 반해서 발화했다는 것은, 그것이 \"내가 안 쓴 코드\"의 어떤 대리물이 아니라 실제 기본값 근접성에 발화한다는 내 최선의 증거다. 그 증거의 무게는 탐지기를 누가 사용했는지가 아니라 어떻게 만들었는지에서 나온다.","en":"I redesigned the preset: primary `#0E4C5E` (deep teal), accent `#F26B3A` (warm coral), info `#3E6E8E`. The change established a narrower result than a more distinctive palette. It's redesigning the metric's own reference data to satisfy the metric, [Goodhart's law](https://doi.org/10.1017/S1062798700002660) in miniature, and nothing independent shows the new palette is actually more distinctive, only that it no longer trips the detector. The episode is the strongest internal check in the record. A defaults detector firing on data I authored, against my own interest, is the best evidence I have that it fires on real default-proximity rather than on some proxy for \"code I didn't write.\" Its evidentiary weight comes from how the detector was built, not from who happened to use it."},{"src":"paper2-genericness-metric","i":37,"ko":"여섯 번째는 가장 순수한 표본이다. 시스템 A의 소스에는 지각 인지 심각도 메커니즘이 있다. 도메인 시각 캐릭터 네 개(clinical-precision, gentle-clarity, data-cockpit, playful-energy)가 각자, 그 캐릭터를 지닌 도메인에서 특정 감사 발견을 error 심각도로 격상하게 되어 있다. 이것은 한 번도 발화한 적이 없다. 배포된 내내 단 한 번도. 코드는 JSON 키 `domainMapping`을 조회하는데, 데이터 파일의 실제 키는 `domain_to_character`다. 캐릭터 해석은 모든 도메인에 대해 빈 값을 돌려준다. 조용히, 아무 에러도 없이. G가 지금껏 낸 모든 점수는 문서가 기술하는 그 메커니즘 없이 계산됐다.","en":"The sixth is the purest specimen. System A's source contains a perception-aware severity mechanism: four domain visual characters (clinical-precision, gentle-clarity, data-cockpit, playful-energy), each meant to elevate certain audit findings to error severity in domains that carry that character. It has never fired. Not once, for its entire deployed life. The code looks up the JSON key `domainMapping`; the data file's actual key is `domain_to_character`. Character resolution returns empty for every domain, silently, with no error, and every score G has ever produced was computed without the mechanism its documentation describes."},{"src":"paper2-genericness-metric","i":38,"ko":"같은 현상이 더 작은 규모로 지표 자신의 배선에도 있다. 감사 발견을 G의 신호 목록으로 걸러 넣는 키워드 열두 개 가운데 셋(\"slop\", \"gradient\", \"not-in-palette\")은 죽어 있다. 존재하는 어떤 규칙과도 매칭되지 않는다. 키워드 목록을 읽는 사람이라면 G가 그라디언트 남용에 귀 기울인다고 믿는 게 당연할 것이다. 그러지 않는다.","en":"The same phenomenon exists at smaller scale in the metric's own wiring: of the twelve keywords that filter audit findings into G's signal list, three (\"slop\", \"gradient\", \"not-in-palette\") are dead, matching no rule that exists. Anyone reading the keyword list would reasonably believe G listens for gradient abuse. It doesn't."},{"src":"paper2-genericness-metric","i":39,"ko":"이 실패가 드러낸 것은 내가 한 번도 검토하지 않은 구성 결정이었다. 결정처럼 보이지 않았기 때문이다. 어휘에 의한 결합. 감사기 채널은 규칙 *이름*을 키워드 목록과 부분 문자열 매칭하는 방식으로 시스템 A의 나머지와 연결되는데, 이름은 아무것도 타입 검사해 주지 않는 인터페이스다. 두 디렉토리 밖에서 이름이 바뀐 규칙은 소리 없이 지표에서 떨어져 나가고, 한 번도 매칭된 적 없는 키워드는 기능인 척 목록에 남아 있다. 그 말은 G의 공개된 기술(記述), 즉 그 자신의 상수표가 어떤 테스트도 강제하지 않는 주장들의 집합이라는 뜻이고, 그중 세 주장은 모든 테스트가 통과하는 동안 거짓이었다. 구조적 모순은 분명하다. 자기보고를 불신하려고 지은 시스템이, 키워드 목록과 죽은 서브시스템에서, 자기보고를 하고 있었다. 둘 다 모든 테스트를 통과했다. 둘 다 완전한 선의로 살아 있는 기능이라고 소개되었을 것이다. 의도가 아니라 배선을 감사하라.","en":"This failure exposed a construction decision I had never examined, because it didn't look like a decision: coupling by vocabulary. The auditor channel connects to the rest of System A by substring-matching rule *names* against a keyword list, and names are an interface that nothing type-checks. A rule renamed two directories away falls out of the metric silently; a keyword that never matched anything sits in the list looking like a capability. Which means the published description of G, its own constant tables, is a set of claims that no test enforces, and three of those claims were false while every test passed. There is an irony here I'd rather own than have pointed out: a system built specifically to distrust self-report was, in its keyword list and its dead subsystem, self-reporting. Both passed every test. Both would have been described, in complete good faith, as live features. Audit the wiring, not the intent."},{"src":"paper2-genericness-metric","i":41,"ko":"실패 하나부터 셋까지는 발견담을 공유하고,  세 결함 모두 대규모 자동 테스트 스위트(수천 개의 assertion)를 살아 넘겼고, 코드를 함께 쓴 것과 같은 모델 계열의 리뷰도 살아 넘겼다. 그것들을 찾아낸 것은 *다른 벤더*의 모델이었다. \"이 코드를 확인해 줘\"가 아니라 \"이 지표가 작동한다는 주장을 반증하라\"로 프레임한 네 라운드에 걸쳐서.","en":"Failures one through three share a discovery story, and it's the part of this account I'd least like to be read past. All three defects survived a large automated test suite (thousands of assertions) and survived review by the same model family that helped write the code. They were found by a model from a *different vendor*, across four rounds framed not as \"check this code\" but as \"refute the claim that this metric works.\""},{"src":"paper2-genericness-metric","i":42,"ko":"스위트가 놓친 데에는 게으름이 아니라 구조적인 이유가 있다. 정확 매칭 테스트는 정확히 철자된 폰트만 돌려 봤다. 거의 빈 입력을 지표에 먹이는 테스트는 없었다. 어떤 작성자도 빈 것을 인증하게 되리라고 상상하지 않았으니까. q = 0에서의 단조성을 assert하는 테스트도 없었다. 그 가드는 명백한 최적화처럼 보였으니까. 그 위에 같은 모델의 리뷰는 같은 전제를 공격하는 대신 다시 유도해냈다. 크로스 벤더 검토자는 내 관용구도 내 의도도 공유하지 않은 채 반증 질문을 던졌고(*어떤 입력이 \"깨끗하다\"를 거짓말로 만드는가?*), 반증 질문은 커버리지 질문이 구조적으로 닿을 수 없는 곳에 닿는다.","en":"The suite missed them for a structural reason, not a lazy one. Exact-match tests exercised exactly-spelled fonts. No test fed the metric near-empty input, because no author imagined certifying emptiness. No test asserted monotonicity at q = 0, because the guard looked like an obvious optimization. Same-model review then re-derived the same priors instead of attacking them. The cross-vendor reviewer, sharing neither my idioms nor my intent, asked refutation questions (*what input makes \"clean\" a lie?*), and refutation questions reach places coverage questions structurally cannot."},{"src":"paper2-genericness-metric","i":44,"ko":"어떤 수정으로도 닫히지 않는 더 근본적인 반론이 있다. 이 계기의 모든 상수는 작성자가 정했다. 대리물을 고른 것도, 탐지기와 가중치와 임계값과 밴드 경계를 고른 것도, 골든 세트를 고르고 그 라벨을 붙인 것도 나다. 루프 어디에도 바깥에 서 있는 사람이 없다. 여기서 두 결과가 따른다. 점수가 누군가의 최적화 표적이 될 때 무슨 일이 일어나는가, 그리고 토큰 수준 숫자가 디자인 전체에 대해 얼마나 조금밖에 주장하지 못하는가. 그보다 앞선 반론이 남는다. 누가 G를 게이밍하기 전에, 누가 G를 과잉 해석하기 전에, G는 이미 작성 시점에, 측정의 겉모습을 한 디자이너의 조작적 취향이다.","en":"No fix closes a more basic objection: every constant in this instrument came from its author. I chose the proxy, the detectors, the weights, the thresholds, the band edges, the golden set, and the golden set's labels. Nowhere in the loop does anyone stand outside it. Two consequences follow: what happens when the score becomes a target someone optimizes against, and how little a token-level number can claim about a whole design. A prior objection remains. Before anyone games G, before anyone over-reads it, G is already, at authoring time, one designer's operational taste wearing the syntax of a measurement."},{"src":"paper2-genericness-metric","i":45,"ko":"이걸 논증으로 지울 수는 없다. 할 수 있는 것은 재고 조사다. 상수들이 전부 같은 방식으로 자의적인 게 아니라는 사실이 드러났고, 그 차이가 실제 일을 했기 때문이다.","en":"I can't argue that away. What I can do is take inventory, because the constants turn out not to be arbitrary in the same way, and the difference did real work."},{"src":"paper2-genericness-metric","i":46,"ko":"어떤 상수는 정박해 있다. 프레임워크 hex 열세 개는 내가 발명한 숫자가 아니다. Tailwind, Bootstrap, Material, Ant가 공개한 값을 내 목록에 베낀 것이다. 인디고 일곱 개는 AI 출력이 계속 수렴하는 바로 그 색조들이다. Inter, Roboto, Arial, Helvetica는 업계의 실제 기본 스택이다. 정박한 상수는 저자 바깥의 무언가에게서 권위를 빌리고, 그 무언가가 가진 반박하는 힘까지 함께 가져온다.","en":"Some constants are anchored. The thirteen framework hexes are not numbers I invented; they are values Tailwind, Bootstrap, Material, and Ant published, copied into my list. The seven indigos are the shades AI output keeps converging on. Inter, Roboto, Arial, Helvetica are the industry's actual default stacks. An anchored constant borrows its authority from something outside its author, and it keeps that something's power to disagree."},{"src":"paper2-genericness-metric","i":47,"ko":"다른 상수는 명령이다. 28과 14. 25점 캡. 채널 폭 12로서의 회색; 12개 초과로서의 과다 액센트; 숫자 12가 서로 무관한 두 의미로 두 번 등장한다. 한 번은 채널 단위로, 한 번은 색 개수로. 둘을 잇는 것은 내 손뿐이다. 외로운 액센트가 묻힌 걸로 치기 전의 색 6개. 판정 가능성의 하한인 색 2개. 밴드 경계 20, 45, 70. 등급 컷 0.40, 0.60, 0.75, 0.90. 이 숫자들 뒤에 서 있는 것은 그것을 타이핑한 날의 내 판단뿐이다. 상수 자체에서 반복되는 패턴이 보인다. 기댈 원칙이 없는 자리마다 비율은 2 대 1로 수렴했다.","en":"Other constants are fiat. Twenty-eight and fourteen. The 25-point cap. Gray as a channel spread of twelve; too many accents as more than twelve; the numeral twelve appearing twice with two unrelated meanings, once as channel units and once as a count of colors, and nothing connecting them but my hand. Six colors before a lone accent counts as drowning. Two colors as the floor of assessability. Band edges at 20, 45, 70. Grade cutoffs at 0.40, 0.60, 0.75, 0.90. Nothing stands behind these numbers except my judgment on the day I typed them, The repeated pattern is visible in the constants themselves: wherever no principle constrained the choice, the ratio defaults to two-to-one."},{"src":"paper2-genericness-metric","i":48,"ko":"폰트 목록에는 자백서 한 장까지 철해져 있다. Inter, Roboto, Arial, Helvetica는 정박해 있다. 모두가 싣고 나가는 기본 스택. 다섯째 이름 fraunces는 시스템 기본값이 전혀 아니다. AI 출력이 자꾸 손을 뻗던 유행 디스플레이 세리프이고, 관찰 하나만으로 목록에 승격됐다. 이 목록은 기본값다움의 분류 체계가 아니다. 현장 일지이고, 현장 일지답게 늙어 갈 것이다.","en":"The font list even keeps a confession on file. Inter, Roboto, Arial, Helvetica are anchored, the default stacks everyone ships. The fifth name, fraunces, is no system default at all: it is a fashionable display serif that AI output kept reaching for, promoted to the list on observation alone. The list is not a taxonomy of defaultness. It is a field diary, and it will age like one."},{"src":"paper2-genericness-metric","i":49,"ko":"정박 대 명령의 구별이 중요한 이유는 실패 다섯 때문이다. 내 프리셋을 지목한 탐지기는 전부 정박한 상수로 지어졌고, 그 에피소드가 가능했던 유일한 이유가 그것이라고 나는 생각하게 됐다. 명령 상수는 저자를 놀라게 할 수 없다. 회색 임계값을 어디에 두든, 어떤 입력도 그걸 써서, 내가 그 값을 정할 때 이미 믿고 있지 않던 것을 말해 줄 수 없다. 정박한 상수는 저자를 놀라게 할 수 있다. 저자가 생성하지 않은 정보를 시스템 안으로 실어 나르기 때문이다. 13개 hex 목록이 내 팔레트에 발화했을 때, 그것은 Tailwind가 공개한 값들이 내 색 습관을 반박한 것이었고, 내 코드는 둘을 나란히 들고 있는 일밖에 하지 않았다. 내가 신뢰하는 G의 부분들은 정확히 가장 덜 내 것인 부분들이다.","en":"The anchored-versus-fiat distinction matters because of failure five. The detector that flagged my own preset was built entirely from anchored constants, and I've come to think that is the only reason the episode was possible. A fiat constant cannot surprise its author: wherever I set the gray threshold, no input can use it to tell me something I didn't already believe when I set it. An anchored constant can surprise its author, because it carries information into the system that the author did not generate. When the 13-hex list fired on my palette, that was Tailwind's published values contradicting my own color habits, with my code doing nothing but holding the two side by side. The parts of G I trust are precisely the parts that are least mine."},{"src":"paper2-genericness-metric","i":50,"ko":"그리고 가장 내 것인 부분들이 토대에 앉아 있다. 라벨. 골든 세트의 \"distinct\"와 \"generic\"은 이 지표가 코드화하려고 존재하는 바로 그 눈이 붙였다. 두 번째 주석자도, 블라인드 패스도 없이. 그 눈이 잘못 보정되어 있다면 G는 작성 시점에 그 오보정을 상속하고, 그 뒤 매 실행마다 흠 없이 재생산한다. 결정론이 설계된 그대로 작동하는 것이다. 계기는 그것이 쓰인 날의 저자보다 더 옳을 수 없다. 더 일관될 수 있을 뿐이다.","en":"And the parts that are most mine sit at the foundation: the labels. \"Distinct\" and \"generic\" on the golden set were assigned by the same eye the metric exists to encode, with no second annotator and no blind pass. If that eye is miscalibrated, G inherits the miscalibration at authoring time and then reproduces it flawlessly on every run, which is determinism operating exactly as designed. The instrument cannot be more right than its author was on the day it was written. It can only be more consistent."},{"src":"paper2-genericness-metric","i":51,"ko":"그러니 이 구성에 대한 정직한 변호는 상수가 옳다는 것이 아니다. 그 상수가 어디서 왔는지 짚을 수 있다는 것이다. G의 모든 자의적 결정은 특정 줄에, 버전 관리 안에, 내 이름을 달고 앉아 있다. 누가 회색 임계값에 동의하지 않으면 가리킬 숫자가 하나 있고, 그걸 바꾸면 모든 입력이 같은 규칙으로 다시 채점된다. 머릿속에 들고 있던 내 취향은 정확히 같은 방식들로 자의적이었고, 그중 어느 방식으로도 들여다볼 수 없었다. 결정론은 판단에서 자의성을 제거한 적이 없다. 자의성 전부를 작성 시점으로 옮겨 놓았을 뿐이다. 거기서는 보이고, 버전이 남고, 논쟁할 수 있다. 그 이전(移轉)이 가치 제안의 전부이고, 실패 다섯은 그것이 작동할 때의 모습이다. 논쟁이 도착했고, 그 상대는 나였다.","en":"So the honest defense of the construction is not that the constants are correct. It is that they have an address. Every arbitrary decision in G sits at a specific line, in version control, with my name on it; when someone disagrees with the gray threshold, there is one number to point at, and changing it re-scores every input by the same rule. My taste, held in my head, was arbitrary in all the same ways and inspectable in none of them. Determinism never removed the arbitrariness from the judgment. It relocated all of it to authoring time, where it can be seen, versioned, and argued with. That relocation is the entire value proposition, and failure five is what it looks like when it works: the argument arrived, and it was with me."},{"src":"paper2-genericness-metric","i":53,"ko":"계기의 현재 상태는 이렇다. 독자적 제품 열한 개 중 열 개가 0/A; figma는 42/D; 제네릭 번들 네 개 중 셋이 42/D; 넷째, Arial만 쓴 번들은 14/B다. 정확히 medium 신호 하나, 그 외에는 아무것도 없다. distinct 평균 3.8, generic 평균 35.0, 분리 +31.2. 두 모집단은 평균에서 분리될 뿐 점별로 분리되지 않는다. figma는 제네릭 번들 셋과 동점이고, Arial 전용 번들은 그 아래에 앉는다. 두 겹침은 튜닝으로 지우지 않고 그대로 남아 있다.","en":"Where the instrument stands now: ten of the eleven distinct products score 0/A; figma scores 42/D; three of the four generic bundles score 42/D; the fourth, an Arial-only bundle, scores 14/B, exactly one medium signal and nothing else. Distinct mean 3.8, generic mean 35.0, separation +31.2. The two populations are separated in the means, not pointwise (figma ties three generic bundles, and the Arial-only bundle sits below it), and both overlaps remain visible rather than being tuned away."},{"src":"paper2-genericness-metric","i":54,"ko":"이것은 n = 15의 표본 내 튜닝이지 검증이 아니다. 탐지기를 고른 것도 나고, 골든 세트를 고르고 라벨을 붙인 것도 나다. 블라인드 주석자는 없었다. 제네릭 번들은 야생의 실제 AI 출력에서 샘플링한 게 아니라 기본값으로 손수 조립한 합성물이다. 모든 산출물은 단일 고정 도메인 아래에서 채점됐다. 그리고 그 분리는 열다섯 항목에 대한 표본 평균의 차이지 효과 크기가 아니다. 이 기록이 보여 주는 것은 이 구성이 튜닝될 수 있다는 것이다. 구성 개념이 타당하다는 것은 보여 주지 않는다. 그리고 상수가 공개되어 있고 술어가 정확하기 때문에, 이 지표는 게이밍을 초대한다. 정밀도는 \"전부 기본값일 때만\"이라는 조건에서 나왔는데, 그 조건은 일부러 넣은 비기본값 토큰 하나면 꺼진다. 그러면 디자인은 지각적으로는 압도적으로 기본값인 채 모든 전량-기본값 탐지기에 보이지 않게 된다. 이 위협은 여기서 열려 있고 완화되지 않았다. 그 값을 온전히 매기는 일은 동반 에세이의 몫이다.","en":"This is an n = 15 in-sample tuning, not a validation. I chose the detectors, and I also chose the golden set and assigned its labels, with no blind annotator; the generic bundles are synthetic, hand-built from defaults rather than sampled from real AI output in the wild; every artifact was scored under a single fixed domain; and the separation is a difference of sample means over fifteen items, not an effect size. The record shows the construction can be tuned. It does not show the construct is valid. And because the constants are published and the predicates exact, the metric invites gaming: the universal quantifiers that bought precision are the same quantifiers a single deliberate off-default token switches off, leaving a design overwhelmingly default in perception and invisible to every all-default detector. That threat is open and unmitigated here; pricing it in full is the companion essay's business."},{"src":"paper2-genericness-metric","i":55,"ko":"G는 기본값을 탐지할 수 있다; 독자성을 증명할 수는 없다. 탐지된 슬롭의 부재는 브랜드의 존재가 아니고, 어떤 유한한 탐지기 목록도 그렇게 만들 수 없다. 디자인이 *옳은가*(그 독자적 팔레트가 이 제품에 맞는가, 이 작업이 사용자의 실제 문제를 푸는가)는 애초에 지표의 질문이 아니었고, 사람의 질문으로 남는다.","en":"G can detect defaults, and it cannot prove distinctiveness. Absence of detected slop is not the presence of a brand, and no finite detector list can make it so. Whether a design is *right* (whether the distinct palette is right for this product, whether the work solves the user's actual problem) never was the metric's question, and it stays a human's."},{"src":"paper2-genericness-metric","i":56,"ko":"한계는 다음 수에서 더 선명해진다. 토큰 읽기를 그만두고 화면 자체를 읽는 것이니까. 렌더링된 디자인을 비전 모델에 먹이고, DOM에서 실제 간격과 위계를 뽑아내는 것. 그건 진짜로 도움이 될 것이다. 깨진 정렬, 그리드를 벗어난 리듬, 뭉개진 위계, 맥락 속에서 무너지는 대비, 토큰 시점이 못 보는 실제 실패들을 잡을 수 있다. 하지만 그것은 같은 *종류*의 것이 더 커진 것일 뿐이다. 더 풍부해진 껍질, 품질에서 확인 가능한 부분이 더 넓어진 것. 디자인이 실제로 좋은가(그저 올바른 게 아니라 공들여졌는가, 이 제품과 이 독자에게 맞는가)는 더 높은 해상도에서 작성되기를 기다리는 규칙이 아니다. 그것은 판단이다. 화면을 보고 잘 디자인됐다고 선언하는 모델은 처음의 실패를 되풀이한다. 검증할 수 없는 것에 대해 확신에 찬 소리를 내면서, 조용히 자기 취향을 편애하는 일. 따라서 디자인이 좋은지에 대한 증거는 책임 있는 사람의 판단이나 관찰된 사용자 행동에서 와야 하며, 점수에는 어느 쪽도 들어 있지 않다. 껍질은 계속 자랄 수 있다. 심은 그 바깥에 남는다.","en":"The limit becomes clearer in the obvious next move: to stop reading tokens and read the screen itself: feed the rendered design to a vision model, pull the real spacing and hierarchy from the DOM. That would genuinely help; I could catch broken alignment, off-grid rhythm, a muddled hierarchy, contrast that fails in context, real failures the token view is blind to. But it is more of the same *kind* of thing: a richer shell, the checkable part of quality made bigger. Whether a design is actually good (crafted rather than merely correct, right for this product and this reader) is not a rule waiting to be written at a higher resolution. It is a judgment. A model that looks at a screen and pronounces it well-designed would repeat the original failure: sounding certain about what it cannot verify, quietly preferring its own taste. Evidence about whether a design is good must therefore come from accountable human judgment or observed user behavior, neither of which the score contains. The shell can keep growing. The core stays outside it."},{"src":"paper2-genericness-metric","i":57,"ko":"그리고 마지막 교훈은 실패 셋의 것인데, 나는 이것을 이제 내가 만드는 모든 결정론적 계기에 적용한다. 이 지표를 포함해서. 결정론은 내가 지표 전체를 세운 토대였고, 약속한 것을 정확히 해낸다. 매번 같은 답, 한 줄로 추적 가능한 답. 해내지 못하는 것은 옳은 답을 내는 일이다. 결정론은 오류를 재현 가능하게 만들지, 올바르게 만들지 않는다. 그리고 재현 가능한 오류는 잡음 섞인 오류보다 위험하다. 그 안정된 틀림이 정확히 사실처럼 보이기 때문이다. 기본값을 잡으라고 만든 지표가, 통과하는 대형 테스트 스위트 아래에서, 소리 없이 자기 자신의 잘못된 기본 동작에 빠져 있었다. 이 지표에는 적대자가 필요했다. 당신 것도 그렇다.","en":"And the closing lesson is the one from failure three, which I now apply to every deterministic instrument I build, this one included. Determinism was the property I built the whole metric around, and it delivers exactly what it promises: the same answer every time, traceable to a line. What it does not deliver is the right answer. Determinism makes errors reproducible, not correct. And a reproducible error is more dangerous than a noisy one, because its stable wrongness looks exactly like a fact. The metric about defaults defaulted, silently, under a large passing test suite. It deserved an adversary. So does yours."},{"src":"paper2-genericness-metric","i":60,"ko":"**점수.** G(x) = int(clip(round(raw(x) + penalty(x)), 0, 100)). raw(x) = 발화한 신호에 대한 Σ w(severity(s)); w(high) = 28, w(medium) = 14, w(low) = 0. penalty(x) = (1 − q(x)) · 25, 무조건 적용.","en":"**Score.** G(x) = int(clip(round(raw(x) + penalty(x)), 0, 100)). raw(x) = Σ w(severity(s)) over fired signals; w(high) = 28, w(medium) = 14, w(low) = 0. penalty(x) = (1 − q(x)) · 25, applied unconditionally."},{"src":"paper2-genericness-metric","i":61,"ko":"**빌드 품질 q**는 7개 영역 감사기에서 나온다: 영역 가중치는 typography 0.15, colors 0.20, spacing 0.15, radius 0.10, elevation 0.10, components 0.15, ux 0.15; 각 영역 점수는 1 − Σ 발견 페널티(error 0.15, warning 0.08, info 0.02), 하한 0. 25점 계수는 품질의 기여를 슬롭 밴드 아래로 제한한다. 실행 품질 문제만으로는 20의 low/borderline 경계를 넘을 수 있지만, 발화한 탐지기 없이는 절대 최상위 밴드에 닿지 못한다.","en":"**Build quality q** comes from a seven-area auditor: area weights typography 0.15, colors 0.20, spacing 0.15, radius 0.10, elevation 0.10, components 0.15, ux 0.15; each area score is 1 − Σ finding penalties (error 0.15, warning 0.08, info 0.02), floored at 0. The 25-point coefficient caps quality's contribution below the slop band: execution problems alone can cross the low/borderline boundary at 20, but never reach the top band without a fired detector."},{"src":"paper2-genericness-metric","i":62,"ko":"**직접 탐지기.**\n- `no-brand-color` (high): 모든 색이 회색조, 회색조 = RGB 채널 max−min ≤ 12\n- `single-accent-monotone` (medium): 비회색 색이 정확히 1개이고 총 색 ≥ 6개\n- `ai-default-indigo` (high): 정규 hex ∈ {#6366f1, #4f46e5, #4338ca, #3730a3, #8b5cf6, #7c3aed, #a855f7}\n- `ai-default-color` (high): 정규 hex ∈ 13개 hex 프레임워크 기본값 세트 {#2563eb, #3b82f6, #1d4ed8, #0d6efd, #007bff, #1976d2, #2196f3, #1677ff, #1890ff, #3182ce, #0ea5e9, #6200ee, #3700b3}\n- `too-many-accents` (medium): 비회색 색 수 > 12\n- `default-font` (medium): 폰트가 비어 있지 않고 모든 폰트의 기본 패밀리 ∈ {inter, roboto, arial, helvetica, fraunces}, 기본 패밀리 = 첫 단어의 소문자화; `-apple-system` 같은 시스템 폴백은 추출 단계에서 제외\n- `insufficient-data`: 발화한 신호 0개이고 색 2개 미만에 폰트 없음 → 등급 \"?\", 밴드 \"판정 불가\"","en":"**Direct detectors.**\n- `no-brand-color` (high): all colors gray-ish, where gray-ish = max−min RGB channel ≤ 12\n- `single-accent-monotone` (medium): exactly 1 non-gray color and ≥ 6 colors total\n- `ai-default-indigo` (high): canonical hex ∈ {#6366f1, #4f46e5, #4338ca, #3730a3, #8b5cf6, #7c3aed, #a855f7}\n- `ai-default-color` (high): canonical hex ∈ the 13-hex framework-default set {#2563eb, #3b82f6, #1d4ed8, #0d6efd, #007bff, #1976d2, #2196f3, #1677ff, #1890ff, #3182ce, #0ea5e9, #6200ee, #3700b3}\n- `too-many-accents` (medium): non-gray color count > 12\n- `default-font` (medium): fonts non-empty and every font's base family ∈ {inter, roboto, arial, helvetica, fraunces}, base family = first word, lowercased; system fallbacks like `-apple-system` are excluded at extraction\n- `insufficient-data`: zero signals fired and fewer than 2 colors with no fonts → grade \"?\", band \"cannot assess\""},{"src":"paper2-genericness-metric","i":63,"ko":"색 매칭은 정확한 정규 hex다(`#RGB`/`#RRGGBB`/`#RRGGBBAA`/`rgb()`/`rgba()`를 소문자 `#rrggbb`로 정규화); 지각적 ΔE 근사 매칭은 없다. 지각적 거리도 똑같이 결정론적일 수 있으므로, 실제 선택지는 좁은 정확 규칙과 더 넓은 결정론적 탐지기 사이에 있었다. 구현은 손으로 감사할 수 있는 단순함을 위해 좁은 규칙을 택했고, 알려진 재현율 비용을 치렀다.","en":"Color matching is exact canonical-hex (`#RGB`/`#RRGGBB`/`#RRGGBBAA`/`rgb()`/`rgba()` normalized to lowercase `#rrggbb`); no perceptual ΔE near-matching. Perceptual distance would be equally deterministic, so the actual trade is a narrow exact rule versus a broader deterministic detector. The implementation chose the narrow rule for hand-auditable simplicity, at a known recall cost."},{"src":"paper2-genericness-metric","i":64,"ko":"**감사기 채널.** 규칙 이름이 {off-palette, not-in-palette, palette-drift, anti-pattern, slop, gradient, too-many-colors, too-many-radii, too-many-shadows, too-many-fonts, off-scale, off-4px}와 부분 문자열 매칭되는 감사 발견이 대상이다; 발견 수 기준 상위 6개 규칙이 접혀 들어간다; 이름에 off-palette, anti-pattern, slop이 포함되면 심각도는 high, 그 외 medium. 키워드 셋(\"slop\", \"gradient\", \"not-in-palette\")은 죽어 있다. 어떤 규칙 이름도 이를 내보내지 않는다.","en":"**Auditor channel.** Audit findings whose rule names substring-match {off-palette, not-in-palette, palette-drift, anti-pattern, slop, gradient, too-many-colors, too-many-radii, too-many-shadows, too-many-fonts, off-scale, off-4px} are eligible; the top 6 rules by finding count are folded in; severity is high if the name contains off-palette, anti-pattern, or slop, else medium. Three keywords (\"slop\", \"gradient\", \"not-in-palette\") are dead: no rule name emits them."},{"src":"paper2-genericness-metric","i":65,"ko":"**밴드.** 0-20 low; 21-45 borderline; 46-70 high (generic); 71-100 very high (slop). 등급 \"?\"는 밴드를 \"판정 불가\"로 덮어쓴다; 등급과 밴드가 갈릴 때는 등급이 권위를 가진다.","en":"**Bands.** 0-20 low; 21-45 borderline; 46-70 high (generic); 71-100 very high (slop). Grade \"?\" overrides the band to \"cannot assess\"; where grade and band diverge, the grade is authoritative."},{"src":"paper2-genericness-metric","i":66,"ko":"**등급** (위에서 아래로): 데이터 부족이면 \"?\"; high 신호 ≥ 3 또는 q < 0.40이면 F; high ≥ 1 또는 q < 0.60이면 D; medium ≥ 2 또는 q < 0.75이면 C; medium ≥ 1 또는 q < 0.90이면 B; 그 외 A. high 신호 하나는 산술과 무관하게 최소 D를 강제한다.","en":"**Grades** (top-down): \"?\" on insufficient data; F if high signals ≥ 3 or q < 0.40; D if high ≥ 1 or q < 0.60; C if medium ≥ 2 or q < 0.75; B if medium ≥ 1 or q < 0.90; else A. One high signal forces at least D regardless of the arithmetic."},{"src":"paper2-genericness-metric","i":68,"ko":"**현재 골든 세트 점수.** linear, vercel, notion, framer, raycast, resend, superhuman, stripe, cursor, clay: 0/A. figma: 42/D. ai-indigo-slop, generic-corp, material-default: 42/D. arial-only: 14/B.","en":"**Current golden-set scores.** linear, vercel, notion, framer, raycast, resend, superhuman, stripe, cursor, clay: 0/A. figma: 42/D. ai-indigo-slop, generic-corp, material-default: 42/D. arial-only: 14/B."},{"src":"paper2-genericness-metric","i":70,"ko":"**프리셋 팔레트.** 이전 (표시됨): primary #2563EB, accent #0EA5E9, info #3B82F6. 신규: primary #0E4C5E, accent #F26B3A, info #3E6E8E.","en":"**Preset palettes.** Old (flagged): primary #2563EB, accent #0EA5E9, info #3B82F6. New: primary #0E4C5E, accent #F26B3A, info #3E6E8E."},{"src":"paper2-genericness-metric","i":71,"ko":"**죽은 서브시스템.** 도메인 캐릭터 네 개(clinical-precision, gentle-clarity, data-cockpit, playful-energy)에 대한 지각 인지 심각도 격상은 절대 발화하지 않는다. 코드는 JSON 키 `domainMapping`을 읽는데, 데이터 파일의 키는 `domain_to_character`다.","en":"**The dead subsystem.** Perception-aware severity elevation for four domain characters (clinical-precision, gentle-clarity, data-cockpit, playful-energy) never fires: the code reads JSON key `domainMapping`; the data file's key is `domain_to_character`."},{"src":"paper2-genericness-metric","i":73,"ko":"- Marilyn Strathern, [*\"Improving Ratings\": Audit in the British University System*](https://doi.org/10.1017/S1062798700002660) (1997)\n- Lianmin Zheng et al., [*Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena*](https://arxiv.org/abs/2306.05685) (2023)\n- Anil R. Doshi and Oliver P. Hauser, [*Generative AI Enhances Individual Creativity but Reduces the Collective Diversity of Novel Content*](https://doi.org/10.1126/sciadv.adn5290) (2024)","en":"- Marilyn Strathern, [*\"Improving Ratings\": Audit in the British University System*](https://doi.org/10.1017/S1062798700002660) (1997)\n- Lianmin Zheng et al., [*Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena*](https://arxiv.org/abs/2306.05685) (2023)\n- Anil R. Doshi and Oliver P. Hauser, [*Generative AI Enhances Individual Creativity but Reduces the Collective Diversity of Novel Content*](https://doi.org/10.1126/sciadv.adn5290) (2024)"},{"src":"rules-nothing-enforced","i":1,"ko":"*규칙은 적어 두었다. 메모리 파일에, 프레임 문서에, 내가 저지른 실수의 목록에. 그런데 그 어느 것도 내가 규칙을 어기는 것을 막지 못했다. 규칙을 적는 일과 강제하는 일은 다른 행위인데 나는 앞의 것만 하고 있었다.*","en":"*I had written the rules down. They were in a memory file, a frame document, a census of my own mistakes. None of that stopped me from breaking them, because writing a rule down and enforcing it are different acts, and I had only done the first one.*"},{"src":"rules-nothing-enforced","i":2,"ko":"이틀 전 이 사이트를 만드는 프로그램이 빌드를 멈출 수 있는 이유는 셋이었다. 읽히지 않는 파일, 자리에 없는 파일, 제목이 없는 원고. 셋 다 그 하루 전에 삽화를 붙이면서 넣은 것들이다. 그 전에는 0이었다. 내가 갖고 있는 이틀 전 판본 사본 기준이다.","en":"Two days ago the program that builds this site could stop the build for three reasons: a file that could not be read, a file that was not there, a manuscript with no title. I had added all three the day before, while wiring up illustrations. Before that the count was zero, in the last saved copy of the program I have from two days earlier."},{"src":"rules-nothing-enforced","i":3,"ko":"한편 이 사이트의 에세이를 다스리는 규칙은 열 개쯤 되고 전부 대화에서 나왔다. 산문에 em 대시를 쓰지 않는다, 기계의 문장부호로 읽히니까. 내가 실제로 하지 않는 말을 인용부호에 넣지 않는다. 경력 연차는 숫자로 적지 않고, 제품명도 쓰지 않는다. 영문과 한국어가 같은 링크와 같은 주장을 지고 있어야 한다. 한국어는 합니다체가 아니라 한다체로. 은유보다 명확하게. 하나하나가 한 문장으로 정해졌고 합의됐고 어딘가 파일에 적혔다.","en":"Meanwhile the essays on this site are governed by about ten rules that came out of conversation. No em dashes in prose, because they read as a machine's punctuation. No quoted sentence I do not actually say. No number of years of experience. No product names. The English and the Korean have to carry the same links and the same claims. Plain form in the Korean, not polite form. Clarity in front of metaphor. Every one of those was decided in a sentence, agreed to, and written into a file somewhere."},{"src":"rules-nothing-enforced","i":5,"ko":"방법에 대해 한마디. 이 글의 수치는 두 종류다. 빌드 프로그램과 원고와 이 저장소에 남은 기록을 잰 것은 저장소를 가진 사람이면 다시 돌려 볼 수 있다. 그 주에 무슨 일이 있었는지 적은 것은 그때 남긴 메모에서 옮겼고, 원시 출력은 갖고 있지 않다. 출처 목록의 연도는 그 문헌에서 옮긴 것이다. 초안은 다른 글들과 마찬가지로 AI가 잡았고, 그것이 이 주제가 나온 이유이기도 하다.","en":"One note on method. The numbers here are of two kinds. The ones describing the build program, the manuscripts, and the records kept in this repository are measured, and anyone with the repository can rerun them. The ones describing what happened during the week are from my notes at the time, because I did not keep the raw output. Years in the source list are from the publications themselves. AI drafted this, as it drafted everything else here, which is part of why the subject came up."},{"src":"rules-nothing-enforced","i":8,"ko":"em 대시 규칙은 어시스턴트가 세션마다 읽는 메모리 파일에 있다. 프레임 문서에는 은유 규칙이 열다섯 항목짜리 체크리스트와 함께 들어 있다. 번역투 표현은 행번호와 이유를 달아 아흔여섯 항목짜리 목록으로 따로 적어 두었다. 출처에 대한 주장은 백일흔여덟 행짜리 원장이 지키는데, 각 행이 인용 하나에 묶여 있고, 행을 찾지 못하면 문서를 불합격시키는 기계가 붙어 있다. 검증도 있었다. 다른 벤더의 모델에게 검토가 아니라 반증을 요청하는 형태로.","en":"The em dash rule lives in a memory file the assistant loads at the start of every session. The rule about metaphor lives in a frame document with a fifteen-item checklist. The Korean calques have their own census, ninety six entries with line numbers and reasons. The claims about sources are guarded by a ledger of a hundred and seventy eight rows, each pinned to a quotation, with a machine that fails the document when a row cannot be found. Verification was in place too, in the form of a second vendor's model asked to refute rather than review."},{"src":"rules-nothing-enforced","i":11,"ko":"취향에 관한 에세이의 종결 문단이 한국어판에서 여덟 문장 중 여섯을 잃은 채 나갔다. 그 자리에는 영문에 없는 문장이 하나 들어가 있었다. 그대로 라이브였다. 내가 빌드마다 돌리던 검사는 두 언어의 행수와 링크 목록을 비교했고 둘 다 통과했다. 한 문단은 내용의 4분의 3을 잃고도 그 두 숫자를 바꾸지 않는다.","en":"The closing paragraph of the essay about taste shipped in Korean with six of its eight sentences missing, and a sentence in their place that did not exist in the English. It sat there live. The checks I ran on every build compared line counts and link lists between the two languages, and both passed, because a paragraph can lose three quarters of its content without changing either number."},{"src":"rules-nothing-enforced","i":12,"ko":"한국어를 훑으면서 번역투로 읽히는 표현 아흔여섯 개를 바꿨다. 그중 다섯 개가 앞뒤 문맥과 겹쳐 본문에 중복 파편을 남겼다. 하나는 \"0점을 보증으로 읽고 싶은 0을 보증으로 읽고 싶은 마음\"이 됐다. 나는 그 손상을 잡을 탐지기를 만들었다. 세 글자 이상 반복만 보게 만들어서 두 글자짜리는 통째로 놓쳤다.","en":"A pass over the Korean replaced ninety six phrases that read as calques. Five of the replacements overlapped the words around them and left doubled fragments in the prose, one of which read, in effect, \"the wish to read a zero as the wish to read a zero as an endorsement.\" I wrote a detector for that damage. It looked for repeats of three characters or more, so it missed the two-character ones entirely."},{"src":"rules-nothing-enforced","i":13,"ko":"그리고 콜론이 있었다. 한국어는 콜론을 거의 쓰지 않고 영어는 계속 쓴다. 나는 영어 습관을 그대로 옮겨 놓은 채 한 에세이를 세 문장에 한 번꼴로 채우고 있었다. 세 편에서 손으로 뺐고 저녁 대부분이 거기 들어갔는데, 다 끝내고 나니 다음 것들을 막을 것이 아무것도 없었다.","en":"Then there were the colons. Korean uses them rarely; English uses them constantly, and I had carried the habit across. One essay was running one every three sentences. I removed them by hand across three essays, which took most of an evening, and at the end of it there was nothing at all to stop the next batch."},{"src":"rules-nothing-enforced","i":17,"ko":"열 개 중 일곱은 됐다. em 대시 금지는 정규식이다. 연차 숫자도, 제품명도, 한다체 원고에 섞인 합니다체 어미도 그렇다. 두 언어의 링크 목록과 행수는 목록 비교, 문단 분량비는 산수, 중복 파편은 패턴 매칭이다. 이것들의 공통점은 **기준이 텍스트 바깥에 있다**는 것이다. 금지 문자열 목록, 형태, 비율. 게이트는 아무것도 이해할 필요가 없다.","en":"Seven of the ten could. No em dashes is a regular expression. So is a number of years, and a product name, and polite verb endings in a plain-form manuscript. Link lists and line counts between languages are list comparisons. Paragraph length ratios are arithmetic. Doubled fragments are a pattern match. What these have in common is that the standard sits outside the text: a list of banned strings, a shape, a ratio. The gate does not need to understand anything."},{"src":"rules-nothing-enforced","i":18,"ko":"셋은 안 됐고, 하필 내가 가장 신경 쓰는 셋이다. 인용된 문장이 내가 실제로 하는 말인지는 기준이 내 안에 있어서, 다른 누구도 확인할 수 없고 원고를 읽는 기계는 알 길이 없다. 은유를 더 평범한 말로 바꿔야 하는지는 나올 때마다 손으로 판단했는데, 내가 따르고 있던 규칙을 나는 적지 못했다. 한국어 표현이 번역투로 읽히는지도 같은 종류의 판단이다. 그것들을 찾는 걸 도와준 검증자는 네 번의 패스에서 네 가지 답을 냈다. 의심스러운 줄이 열다섯 개라고 했다가, 구체적 표현 열두 개이고 전면 수정은 필요 없다고 했다가, 표현 교체로는 닿지 않는 구조적 문제라고 했다가, 다른 네 편에서 여든한 개를 찾아내면서 구조적 문제는 없다고 했다.","en":"Three could not, and they are the three I care about most. Whether a quoted sentence is one I actually say has its standard inside me; nobody else can check it, and a machine reading the manuscript has no way to know. Whether a metaphor should give way to plainer words is a judgment I made by hand every time it came up, and I could not write the rule I was following. Whether a Korean phrase reads as a calque is the same kind of judgment, and the review that helped me find them gave four different verdicts across four passes: fifteen suspect lines, then twelve specific phrases and no need for a wholesale pass, then a structural problem that phrases could not reach, then eighty one phrases across four other essays and no structural problem at all."},{"src":"rules-nothing-enforced","i":19,"ko":"셋 중 마지막 것에서 나온 것은 불편함이 아니라 발견이다. 취향을 묻는 질문에 계기를 들이대면 물을 때마다 다른 답이 나온다. 고장이 아니다. 네 번의 패스가 답이 없다는 증명은 아니다. 다만 취향 문제에는 그것을 쥔 사람 밖에 정답이 없다는 다섯 번째 에세이의 결론이, 계기 쪽에서 어떻게 보이는지를 보여 준다. 그 네 번 동안 원고만으로는 판정이 고정되지 않았다.","en":"That last one is the finding, not the inconvenience. An instrument asked to settle a question of taste gave a different answer each time it was asked. It was not malfunctioning. Four passes do not prove that no answer exists, but they show what the fifth essay's conclusion, that a question of taste has no answer outside the person holding it, looks like from the instrument's side. In those four passes nothing in the manuscript held the verdict still."},{"src":"rules-nothing-enforced","i":21,"ko":"게이트 아홉 개를 쓰자 빌드가 통과했는데, 이번 주에 내가 틀린 자리는 매번 무언가 통과한 자리였다. 그래서 나는 게이트를 공격했다. 규칙 하나를 원고에서 일부러 깨고 빌드가 멈추는지 본다.","en":"I wrote nine gates and the build passed, and passing is where I have gone wrong all week, so I attacked them. Take a rule, break it deliberately in the manuscript, and see whether the build stops."},{"src":"rules-nothing-enforced","i":23,"ko":"다섯 개가 위반을 그대로 통과시켰고, 나는 1분쯤 놀랐다가 이유를 들여다봤다. 변이는 문자열 치환인데 그 문자열이 파일에 없었다. 그날 문장들을 이미 다시 썼기 때문이다. 없는 문자열을 만나면 파이썬은 아무것도 바꾸지 않고 아무것도 알리지 않는다. 빌드를 돌리기 전에 변이가 파일을 바꿨는지 단언하지 않았으므로, 아홉 개 중 다섯 개는 아무것도 시험하지 않았고 그 사실을 성공의 언어로 보고했다.","en":"Five gates had let a violation straight through, which was alarming for about a minute, until I looked at why. The mutations were string replacements against text that no longer existed in the file, because the sentences had been rewritten earlier in the day. Python replaces nothing and reports nothing. I had not asserted that the mutation changed the file before running the build, so five of my nine tests had tested nothing at all and told me so in the language of success."},{"src":"rules-nothing-enforced","i":25,"ko":"살아남은 하나는 진짜였다. 두 언어의 문단 길이를 비교하는 게이트가 영문 스물다섯 단어 미만을 건너뛰었다. 짧은 문단은 비율이 흔들린다는 이유였다. 내가 변이시킨 문단은 스물네 단어였다. 통째로 사라지고 \"짧다.\"라는 한 마디로 바뀌어도 빌드는 파일을 쓰고 성공을 보고했다. 한국어 종결 문단이 빠져나간 구멍이 바로 그것이다. 임계값을 열둘로 낮추려면 제품명과 수식이 대부분이라 한글 비율이 원래 낮은 기술 부록을 제외해야 했다. 그렇게 하고 나서야 아홉 번째 게이트가 버틴다.","en":"The one that survived was real. The gate comparing paragraph lengths between the two languages skipped anything under twenty five English words, on the theory that short paragraphs have noisy ratios. The paragraph I had mutated was twenty four words long. It could vanish entirely, replaced by the single word \"short,\" and the build would write the file and report success. That is the same hole the missing Korean closing paragraph went through. Lowering the threshold to twelve required excluding the technical appendix, where product names and formulas make the Korean character count naturally low, and with that the ninth gate holds."},{"src":"rules-nothing-enforced","i":29,"ko":"콜론 작업을 끝내고 나는 산문 콜론이 0이라고 보고했다. 그 숫자는 내 스크립트가 냈고, 스크립트에는 코드와 숫자 안의 콜론을 건너뛰는 필터가 있었다. 거기 있는 게 맞는 콜론들이다. 그런데 그 필터는 마크다운 링크 앞의 콜론도 건너뛰고 있었다. 언젠가 생각 없이 넣은 조건이고, 첫 에세이에 그런 콜론이 하나 남아 있었다. 검증자가 1분 만에 찾았다.","en":"After the colon pass I reported zero colons remaining in prose. The number was produced by my own script, and the script contained a filter to skip colons inside code and numbers, where they belong. The filter also skipped colons that came before a markdown link, which I had added at some point without thinking about it, and there was one of those left in the first essay. The review found it in a minute."},{"src":"rules-nothing-enforced","i":30,"ko":"계측이 실패한 게 아니다. 내가 던진 질문에 정확히 답했고, 그 질문이 내가 보고한 질문보다 좁았을 뿐이다. **필터가 무엇을 제외했는지 말하지 않는 통과는 근거가 아니다.** 나는 검증에 대해 쓰면서 그런 통과를 생산하고 있었다.","en":"The measurement did not fail. It answered exactly the question I had asked it, which was a narrower question than the one I reported. A pass that does not say what its filter excluded is not evidence, and I had spent the week writing about verification while producing one."},{"src":"rules-nothing-enforced","i":31,"ko":"그래서 이제 게이트마다 자기 제외 조건을 먼저 출력한다. 게이트당 한 줄씩 열 줄, 그리고 게이트가 아예 없는 규칙들을 위한 한 줄. 각 줄은 그것이 보지 않는 것을 적는다. 빌드 출력을 보는 사람은 결과보다 먼저 구멍의 모양을 보게 된다.","en":"So every gate now prints its own exclusions before any of them runs. Ten lines, one per gate, each naming what that gate does not look at, and one more line for the rules that have no gate at all. Anyone reading the build output sees the shape of the holes before they see the result."},{"src":"rules-nothing-enforced","i":34,"ko":"게이트가 된 규칙은 [표적이 된다](https://doi.org/10.1017/S1062798700002660). 검사를 감사 가능하게 만드는 바로 그 결정론이 우회도 가능하게 만들고, 우회할 사람은 나다. 밤 열한 시에 내보내고 싶어진 나다. 게이트를 포괄적으로 만들기보다 작고 적게 유지해야 하는 이유가 그것이다.","en":"A rule that becomes a gate [becomes a target](https://doi.org/10.1017/S1062798700002660). The same determinism that makes a check auditable makes it evadable, and I am the person who would evade it, at eleven at night, wanting to ship. That is the argument for keeping the gates small and few rather than comprehensive."},{"src":"rules-nothing-enforced","i":35,"ko":"그리고 게이트는 자기 형태를 잴 뿐 내가 신경 쓰는 것을 재지 않는다. 이 에세이들에 한국어 탐지기를 하나 돌려 봤다. 학생 논설문으로 학습된 것이고 쉼표 사용의 다섯 가지 특징으로 점수를 낸다. 다섯 특징이 전부 쉼표에 관한 것이라, 콜론과 번역투와 오역을 고치는 일은 그 점수에 거의 닿지 않는다. 내가 그 숫자를 최적화하고 있었다면 저 작업을 전부 건너뛰고 쉼표를 지웠을 것이다. 그러면 에세이는 나빠지고 점수는 좋아진다. 게이트는 목표가 아닌 한에서만 값어치가 있다.","en":"And a gate measures its own shape, not the thing you care about. There is a Korean detector I ran against these essays, trained on student argumentative writing, which scores text on five features of comma use. Its five features are all about commas, so repairing colons and calques and mistranslations barely reaches the score at all. If I had been optimizing that number I would have skipped all of it and deleted commas instead, and the essays would be worse and the score would be better. The gates are worth having exactly as far as they are not the goal."},{"src":"rules-nothing-enforced","i":37,"ko":"게이트가 되지 못한 세 규칙이 이 에세이들의 정직함을 결정하는 셋이고, 그것들은 여전히 사람이 주의를 기울이는 것 말고는 아무것도 강제하지 않는다. 나는 이걸 언젠가 메울 구멍으로 보지 않는다. 이 프로젝트가 자동화 쪽에서 다가가든 사람 쪽에서 다가가든 매번 같은 자리에서 마주치는 경계선이다. 기준이 자기 바깥에 있는 부분은 혼자 돌게 만들 수 있고, 기준이 사람 안에 있는 부분은 아직 그 방법을 찾지 못했다.","en":"The three rules that could not become gates are the ones that decide whether these essays are honest, and they are still enforced by nothing but a person paying attention. I am not treating that as a gap waiting to be closed. It is the same boundary this project keeps arriving at from different directions: the part with a standard outside itself can be made to run alone, and for the part whose standard is inside a person I have not found a way."},{"src":"rules-nothing-enforced","i":38,"ko":"이번 주에 달라진 것은 들리는 것보다 작고, 그래도 가질 값어치가 있다. 바깥에 기준이 있는 규칙들은 이제 나 없이 버틴다. 바깥 기준이 없는 규칙들은 막연한 불안이 아니라 짧은 목록으로 보이게 됐고, 짧은 목록은 지켜볼 수 있는 물건이다.","en":"What changed this week is smaller than it sounds and worth having anyway. The rules with an outside standard now hold without me. The ones without one are now visible as a short list rather than a vague unease, and a short list is something you can watch."},{"src":"rules-nothing-enforced","i":39,"ko":"이 글을 쓴 뒤에 셋 중 하나가 반쯤 움직였다. 한국어가 읽히는지는 여전히 기계가 판정하지 못한다. 대신 빌드가 열 번째 검사를 갖게 됐는데, 그것이 보는 것은 원고가 읽히는지가 아니라 지금 나가는 한국어가 내가 승인해 둔 한국어와 같은 글인지다. 읽는 일은 영문을 건네받지 않은 다른 벤더의 모델이 하고, 무엇을 고칠지는 내가 정한다. 기계가 쥐는 것은 승인된 본문의 해시뿐이고, 그 해시는 내가 손으로도 쓸 수 있다. 그러니 이건 위조를 막는 장치가 아니라 잊는 것을 막는 장치다. 경계선이 옮겨 간 것이 아니다. 이미 바깥에 있던 것 하나를 내가 늦게 알아본 것이다.","en":"One of the three moved halfway after this was written. Whether the Korean reads is still not something a machine can decide. What the build got instead is a tenth check, and what it looks at is not whether the manuscript reads but whether the Korean now going out is the same Korean I approved. The reading is done by a different vendor's model that is never handed the English. What to change is decided by me. The machine holds a hash of the approved text and nothing else, and I can write that hash by hand. So this is not a guard against forgery. It is a guard against forgetting. The boundary did not move; I had miscounted what was already outside it."},{"src":"rules-nothing-enforced","i":40,"ko":"어떤 문장이 기계가 쓴 것처럼 들린다고 판단할 때 내가 따르는 규칙을 나는 여전히 적지 못한다. 다만 이번 주에 그 판단을 몇 번 했는지는 알고, 그것들을 붙잡고 있는 것이 나 말고는 없다는 것도 안다.","en":"I still cannot write the rule I follow when I decide a sentence sounds like a machine wrote it. But I know how many of those decisions I made this week, and I know that nothing except me is keeping them."},{"src":"rules-nothing-enforced","i":43,"ko":"**금지 고유명.** 문자열 여섯 개. 산문 본문이 아니라 원고 전체를 상대로 검사하므로 부록도 덮는다. 대소문자를 구분하는 부분문자열 검사라 대소문자를 바꾼 변형은 지나간다. 이 사이트에 등장하지 않는 제품명과 조직명이다.","en":"**Banned proper nouns.** Six strings, checked against the raw manuscript rather than the prose body, so appendices are covered too. The match is a case-sensitive substring, so a changed capitalization would pass. These are product and organization names that do not appear on this site."},{"src":"rules-nothing-enforced","i":44,"ko":"**em/en 대시.** 산문만 본다. 부록은 범위 표기에 쓰기 때문이다. 이 규칙이 있는 이유는 이 원고들을 되짚을 때마다 내가 반복해서 본 신호가 em 대시였기 때문이다. 기계 글에 대한 계측된 주장이 아니라 이 사이트의 편집 판단이다.","en":"**Em and en dashes.** Checked against prose only, since the appendix uses ranges. The rule exists because the em dash is the signal I kept seeing when I went back over these manuscripts. That is an editing judgment for this site, not a measured claim about machine writing."},{"src":"rules-nothing-enforced","i":45,"ko":"**연차 숫자.** 패턴 둘. 바로 앞이 숫자가 아닌 한 자리나 두 자리 숫자 뒤에 오는 `년차`, 그리고 영어로 쓴 11에서 15까지(소문자 `eleven`~`fifteen`) 뒤에 햇수를 뜻하는 `years` 가 오는 경우. 그 두 형태를 벗어나면 지나간다.","en":"**Years of experience.** Two patterns. One or two digits not preceded by another digit, followed by the literal Korean counter `년차`, and the lowercase English words eleven through fifteen followed by \"years.\" Anything outside those two shapes passes."},{"src":"rules-nothing-enforced","i":46,"ko":"**합니다체.** 원고는 한다체로 쓴다. 검사는 좁다. 습니다와 입니다 바로 뒤에 마침표가 오는 경우만 잡고, 다른 높임 어미나 문장 중간의 같은 어미는 지나간다. 다시 쓰는 과정에서 문체가 흘러가는 가장 흔한 경로를 잡을 뿐 모든 경로를 잡지는 않는다.","en":"**Polite-form Korean.** The manuscripts are written in plain form. The check is narrow: the endings 습니다 and 입니다 immediately followed by a period. Other polite endings, and the same endings mid-sentence, pass. It catches the most common way a rewrite drifts register, not every way."},{"src":"rules-nothing-enforced","i":47,"ko":"**링크 목록.** 영문과 한국어의 URL 을 정렬해 비교하고, 그 목록이 같아야 한다. 개수가 아니라 정렬한 목록이라 한쪽에서 빠지고 다른 쪽에서 늘어난 경우도, 같은 URL 이 한쪽에서 더 많이 나오는 경우도 잡는다. 같은 링크의 순서만 바뀐 것은 정렬하면서 사라지므로 지나간다.","en":"**Link lists.** The URLs in the English and the Korean, sorted, must be identical. Comparing sorted lists rather than counts catches a URL added on one side and dropped on the other, and comparing lists rather than sets catches a URL repeating a different number of times. Reordering the same links passes, because sorting throws the order away."},{"src":"rules-nothing-enforced","i":48,"ko":"**행수.** 검사가 세는 것은 줄바꿈 개수뿐이다. 두 원고는 행 단위로 정렬해 쓰기 때문에 한쪽의 N번째 문단이 다른 쪽의 N번째 문단이어야 하지만, 게이트가 확인할 수 있는 것은 개수가 같다는 사실까지다. 줄을 재배치하면 지나간다. 개수가 다르면 정렬이 깨진 것이고, 그 아래의 모든 비교가 무의미해진다.","en":"**Line counts.** The check counts newlines and nothing else. The two manuscripts are written line-aligned, so paragraph N in one is meant to be paragraph N in the other, but an equal count is all the gate can confirm. Reordering lines would pass. An unequal count means the alignment is broken and every downstream comparison is meaningless."},{"src":"rules-nothing-enforced","i":49,"ko":"**문단 분량비.** 정렬된 각 쌍에서 한글 글자 수를 영문 단어 수로 나눈 값이 0.9에서 3.4 사이여야 한다. 분모는 마크다운 링크를 표시 텍스트만 남기고 URL 을 버린 뒤, 두 글자 이상의 ASCII 알파벳 토큰만 센다. `I`나 `a`나 숫자는 빠진다. 현재 원고에서 관측되는 범위는 1.53에서 2.81이다. 그런 토큰이 열둘 미만인 줄은 건너뛰고, `**`나 `#`나 `- `나 `|`로 시작하는 영문 줄도 건너뛴다. 제목, 목록, 표, 부록 항목이 여기 들어간다. 부록 줄은 제품명과 수식이 대부분이라 비율이 0.33까지 내려간다.","en":"**Paragraph length ratio.** For each aligned pair, Korean characters divided by English words must fall between 0.9 and 3.4. The denominator strips markdown links to their display text, dropping the URL, and then counts ASCII alphabetic tokens of two letters or more, so `I` and `a` and digits do not count. The observed range across the current manuscripts is 1.53 to 2.81. Lines with fewer than twelve such tokens are skipped, as is any English line beginning with `**`, `#`, `- ` or `|`, which covers headings, lists, tables and appendix entries. Appendix lines run as low as 0.33 because they are mostly product names and formulas."},{"src":"rules-nothing-enforced","i":50,"ko":"**중복 파편.** 한글 한 글자에서 열 글자까지의 덩어리가, 뒤에 공백으로 구분된 토큰을 최대 네 개 달고, 연달아 두 번 나오는 경우. 토큰을 한국어 어절로 해석하지는 않아서 문장부호와 마크업도 하나로 센다. 실제로 반복되는 흔한 한 음절 열 개는 정확히 일치할 때만 제외한다.","en":"**Doubled fragments.** A repeated run of one to ten Korean characters, optionally followed by up to four whitespace-separated tokens, appearing twice in a row. The tokens are not parsed as Korean words, so punctuation and markup count as tokens too. Ten common single syllables are excluded by exact match because they legitimately repeat."},{"src":"rules-nothing-enforced","i":51,"ko":"**산문 콜론.** 제외 조건은 이렇다. 제목, 목록, 표, 부록 항목. 뒤에 숫자나 백틱이나 대괄호나 true나 false가 오는 경우. 콜론 앞의 마지막 토큰이나 뒤 스무 글자에 소문자 `hex` 라는 글자나 대문자 여섯 자리 `#RRGGBB` 나 등호나 이상 기호나 화살표가 있는 경우. 소문자 `#abcdef` 는 제외되지 않는다. 게이트가 보는 것은 뒤에 ASCII 공백이 오는 콜론뿐이라 `본문:내용` 이나 줄 끝의 콜론은 지나간다. 나머지는 전부 실패다.","en":"**Colons in Korean prose.** Excluded: titles, lists, tables, appendix entries; anything followed by a digit, a backtick, a bracket, or the words true or false; and anything where the token before the colon or the twenty characters after it contain the lowercase literal `hex`, an uppercase six-digit `#RRGGBB`, an equals sign, a greater-or-equal sign, or an arrow. A lowercase `#abcdef` is not excluded. The gate only looks at colons followed by an ASCII space, so `본문:내용` and a colon at the end of a line pass. Everything else fails."},{"src":"rules-nothing-enforced","i":52,"ko":"**읽기 패스.** 한국어가 읽히는지를 판정하는 게이트가 아니다. 독자가 읽는 한국어를 해시해 승인 기록과 다르면 실패시킨다. 부록의 기계 명세(`**` 로 시작하는 줄)와 영문 원고는 해시 밖이라 그쪽을 고쳐도 다시 읽히지 않는다. 패스 자체는 한국어 본문을 프롬프트에 그대로 실어 다른 벤더의 모델에게 보내고, 뜻을 재구성할 수 없는 문장을 받아 오는 일이다. 파일 경로를 주지 않으므로 영문은 건네지지 않지만, 읽기 전용 샌드박스가 저장소를 뒤지는 것까지 막지는 못한다. 승인은 기록된 실행이 지금 승인하려는 파일과 해시를 정확히 덮고, 실행이 완주했고, 모델의 마지막 줄이 `RESULT high=0` 일 때만 허용된다. 승인 기록 자체는 서명 없는 JSON이라 내가 손으로 쓸 수 있다. 이 게이트가 막는 것은 내가 잊는 것이지 속이는 것이 아니다.","en":"**Reading pass.** Not a judgment about whether the Korean reads. The gate hashes the Korean a reader sees and fails when it differs from the approval log. The appendix machine spec (lines beginning `**`) and the English manuscripts are outside the hash, so editing those forces no re-read. The pass itself carries the Korean body inline in the prompt to a different vendor's model and asks for sentences whose meaning cannot be reconstructed; no file path is given, so the English is not handed over, though a read-only sandbox could still go looking. Approval is allowed only when the recorded run covers exactly the files and hashes being approved, the run finished, and the model's final line reads `RESULT high=0`. The log itself is unsigned JSON that I can write by hand. This gate stops me forgetting, not deceiving."},{"src":"rules-nothing-enforced","i":53,"ko":"변이 시험 결과. `build/mutation_test.py`를 이 에세이의 한국어 원고에 돌려 위반 열 개를 주입했고, 열 개가 각각 잡으라고 만든 게이트에만 막혔다. 각 변이는 빌드를 돌리기 전에 파일이 바뀌었는지 단언한다. 시험의 첫 판본은 그러지 않았고, 그래서 아홉 경우 중 다섯이 조용히 아무것도 시험하지 않았다. 두 번째 판본은 변경은 단언했지만 어느 게이트가 발화했는지는 보지 않았고, 위반 하나를 엉뚱한 게이트가 잡는 동안 정작 자기 게이트는 시험되지 않았다. 세 번째 판본은 빌드 출력에서 게이트 이름을 찾았는데, 제외 조건 안내가 매번 모든 게이트 이름을 출력하므로 아홉 중 넷은 게이트가 하나도 발화하지 않아도 통과할 수 있었다. 저장소에 들어 있는 판본은 빌드 출력의 실패 목록만 읽고, 발화한 게이트 집합이 예상한 게이트 하나와 정확히 같기를 요구한다.","en":"Mutation results, from `build/mutation_test.py` run against this essay's Korean manuscript: ten violations injected, ten blocked, each by the gate meant to catch it and by no other. Each mutation asserts that it changed the file before the build runs, which the first version of the test did not, and five of its nine cases silently tested nothing as a result. A second version asserted the change but not which gate fired, and one violation was caught by the wrong gate while its own gate went untested. A third searched the build output for the gate's name, which every run prints in its exclusion notes, so four of the nine could have passed with no gate firing at all. The version in the tree parses only the failure block and requires the set of gates that fired to equal exactly the one gate expected."},{"src":"rules-nothing-enforced","i":54,"ko":"세 규칙은 의도적으로 빠져 있다. 기준이 텍스트 안에 없기 때문이다. 지어낸 인용, 은유 대 명확함, 그리고 한국어 번역투. 열 번째 게이트는 그중 셋째에 닿지만 그것을 판정하지는 않는다. 나가는 한국어가 패스가 승인한 한국어와 같은지를 볼 뿐, 읽기가 잘 됐는지는 보지 않는다.","en":"Three rules are deliberately absent, because their standard is not in the text: invented quotations, metaphor against plainness, and Korean calques. The tenth gate touches the third of these without judging it. It checks that the Korean going out matches the Korean the pass approved, never whether the reading went well."},{"src":"rules-nothing-enforced","i":56,"ko":"- Marilyn Strathern, [*\"Improving Ratings\": Audit in the British University System*](https://doi.org/10.1017/S1062798700002660) (1997)","en":"- Marilyn Strathern, [*\"Improving Ratings\": Audit in the British University System*](https://doi.org/10.1017/S1062798700002660) (1997)"},{"src":"verification-gate","i":1,"ko":"*인용 검사기는 마흔두 번의 변이 시험을 버텼지만 위조된 행 두 개를 통과시켰다. 통과한 시험은 참인 증거가 훼손되는지를 물었고, 빠진 시험은 거짓 증거가 들어올 수 있는지를 물었다.*","en":"*A quotation checker survived forty-two mutations and failed two forged rows. The passing test asked whether true evidence could be damaged; the missing test asked whether false evidence could enter.*"},{"src":"verification-gate","i":2,"ko":"첫 번째 위조 행은 내 원장에 있는 실제 논문, [학회 동료심사의 비일관성에 관한 연구](https://arxiv.org/abs/2109.09774)가 그 논문에 담기지 않은 명제를 증명한다고 주장했다. 뒷받침하는 증거로는 두 단어를 인용했다. \"the paper.\" 내 검사기는 그것을 통과시켰다. 두 번째 위조 행은 [다른 논문](https://doi.org/10.3758/s13428-019-01323-0)에 신뢰도 추정치가 없다고 주장했는데, 거짓이다. 신뢰도 추정은 그 논문이 하려는 일의 거의 전부다. 그 부재의 증거로 내놓은 것은 세상 어느 문서에서도 찾을 수 없도록 고른 검색 패턴이었다. IMPOSSIBLE_NONCE_9f81a2. 내 검사기는 그것도 통과시켰다.","en":"The first forged row claimed that a real paper in my ledger, [a study of inconsistency in conference peer review](https://arxiv.org/abs/2109.09774), proves a thesis it does not contain. As supporting evidence it quoted two words: \"the paper.\" My checker passed it. The second forged row claimed that [another paper](https://doi.org/10.3758/s13428-019-01323-0) contains no reliability estimate, which is false; estimating reliability is close to that paper's entire purpose. As evidence for the absence it offered a search pattern chosen to be findable nowhere in any document ever written: IMPOSSIBLE_NONCE_9f81a2. My checker passed that one too."},{"src":"verification-gate","i":3,"ko":"두 행 모두 시험용 모형이나 임시 대체 함수를 거친 것이 아니라 실제 운영 함수를 통과했다. 위조된 존재 주장은 경고 하나를 받았는데, 인용에 숫자가 없다는 경고였고 경고는 종료 코드에 영향을 주지 않는다. 위조된 부재 주장은 완전한 침묵 속에 통과했다. 결함 0건에 초록 판정 두 개였다. 작업 노트가 시험을 마쳤고 버티고 있다고 적어 둔 그 검사기에서 나온 결과다.","en":"Both rows went through the real production functions, not a mock or a stub. The forged presence claim drew a single warning, that its quotation contained no digits, and warnings do not affect the exit code. The forged absence claim passed in complete silence. Zero defects, two green verdicts, on a checker my own working notes described as tested and holding."},{"src":"verification-gate","i":4,"ko":"두 공격은 서로 반대인 주장 유형을 건드렸다. 첫째는 실제 원문, 거짓 주장, 그리고 주장을 떠받치기에는 너무 짧고 무관한 진짜 인용을 넣었다. 둘째는 실제 원문, 거짓 부재 주장, 그리고 원문에 절대 나타나지 않도록 만든 검색 패턴을 넣었다. 검사기가 확인한 것은 각 행에 붙은 국소 술어뿐이었다. 인용 문자열이 존재하는지, 또는 검색 패턴이 존재하지 않는지였다. 그 술어가 행의 주장을 실제로 뒷받침하는지는 시험하지 않았다.","en":"The two attacks exercised opposite claim types. The first supplied a real source, a false claim, and a genuine but irrelevant quotation that was too short to carry the claim. The second supplied a real source, a false absence claim, and a search pattern guaranteed not to occur. The checker verified only the local predicate attached to each row: whether the quotation could be found, or whether the pattern could not. It never tested the relation between that predicate and the claim the row said it supported."},{"src":"verification-gate","i":5,"ko":"다른 벤더의 모델이 적대 리뷰 중에 원장의 형식 그대로 두 행을 만들었다. 공격을 당시 프로덕션 엔진에 다시 걸었을 때 결과는 결함 0건, X1 PASS, X2 PASS였다. 그 엔진의 사본은 남아 있지 않아 이 결과는 재현 가능한 실행이 아니라 당시 프로젝트 기록으로만 남는다. 동결된 현재 엔진은 두 행을 모두 결함으로 잡고, 매 위조 시험 끝에 아직 탐지하지 못하는 위조 하나를 출력한다. 진짜 인용문에 그 인용이 뒷받침하지 않는 주장을 붙이는 경우다. 인용이 주장을 실제로 지지하는지는 의미 판단이 필요하므로 자동화 경계 밖에 남아 있다.","en":"A model from a different vendor produced both rows in the ledger's own format during an adversarial review. The attack was then rerun against the production engine as it stood: defects empty, X1 PASS, X2 PASS. No copy of that engine survives, so the result is a contemporaneous project record rather than a reproducible run. The frozen engine now catches both rows and ends every forgery test by printing the forgery it still cannot detect: a false claim attached to a genuine quotation. That case remains outside automation because deciding whether a quotation supports a claim requires semantic judgment."},{"src":"verification-gate","i":6,"ko":"모든 수치는 2026년 7월 26일 13시 53분에 동결한 프로젝트 스냅샷에서 나왔고, 수치의 근거가 되는 핵심 산출물은 해시로 고정했다. 각 수치는 기억으로 재구성하지 않고 그 스냅샷에 대조해 확인했다.","en":"Every number comes from one frozen project snapshot taken at 13:53 on 26 July 2026, with its governing artifacts pinned by hash. Each figure was checked against that snapshot rather than reconstructed from memory."},{"src":"verification-gate","i":7,"ko":"동결 패키지에는 아래에서 사용하는 원장, 원문 캐시, 해시, 엔진, 공격 픽스처, 관측 출력이 함께 남아 있다. 이전의 취약한 엔진은 보존되지 않았으므로 당시의 초록 판정을 재현 가능한 벤치마크로 격상할 수는 없다. 현재 픽스처의 목적은 다르다. 알려진 두 경로가 이제 막힌다는 것을 확인하고, 엔진의 권한 밖에 남은 의미 위조를 명시적으로 출력한다.","en":"The frozen package preserves the ledger, cached sources, hashes, engine, attack fixture, and observed outputs used below. It does not preserve the earlier vulnerable engine, so the historical green verdict cannot be promoted into a reproducible benchmark. The current fixture serves a different purpose: it confirms that the two known paths are now blocked and prints the semantic forgery that remains beyond the engine's authority."},{"src":"verification-gate","i":9,"ko":"이 검사기가 지키는 것은 긴 연구 문서다. 사람들이 품질에 대해 얼마나 일관되게 합의하는지에 관한 발표된 증거를 저울질하는 작업 기록이다. 그 문서는 자기 자신에 대한 실패 로그를 갖고 있고, 그 로그에서 한 계열의 실패가 문서 자신의 셈으로 열두 번 나타난다. 표 한 행 안에 번호가 매겨진 열한 번, 그리고 그 계열이 닫혔다고 막 선언한 바로 그 정정 안에 기록된 열두 번째. 그 계열은 전사(轉寫) 층의 실패다. 원문을 잘못 인용하기. 원문에 무엇이 담겼는지 잘못 규정하기. 실은 담겨 있는 것을 없다고 확신에 차서 단언하기. 그리고 하나의 실수를 열두 번 반복한 것도 아니다. 로그는 열한 번을 아홉 가지 형태로 나눈다. 열두 번째는 끝내 그 안에 넣지 않았다. 그것은 분류 밖에 남아, 일어난 자리에 기록되어 있고, 로그는 거기에 관찰 하나를 붙여 놓았다. 닫혔다는 선언 자체가 새로운 사각지대였다.","en":"The checker guards a long research document, a working record in which I weigh published evidence about how reliably people agree on quality. The document keeps a failure log on itself, and in that log one family of failures appears twelve times by the document's own count: eleven numbered occurrences in a single table row, plus a twelfth recorded inside the very correction that had just declared the family closed. The family is failure at the transcription layer. Quoting a source wrongly. Mischaracterizing what it contains. Asserting confidently that it lacks something it in fact contains. And not one mistake repeated twelve times, either; the log sorts the eleven into nine distinct shapes. The twelfth it never folded in. That one stays outside the taxonomy, logged where it happened, and the log pins an observation to it: the declaration of closure was itself the new blind spot."},{"src":"verification-gate","i":10,"ko":"가장 견디기 힘든 사례는 이것이다. 어느 정정 라운드에서 나는 어떤 논문의 PDF에 직접 접근하지 못했다고 적었다. 그 주장을 뒷받침한다며 내가 적어 둔 조달 경로는 HTTP 200 응답으로 끝났고, 콘텐츠 타입은 application/pdf, 크기는 2,483,230바이트였다. 같은 PDF의 973행짜리 평문 추출본이 내가 그 문장을 타이핑하던 순간 이미 내 작업 디렉토리에 있었다. 그보다 앞서, 세 라운드에 걸쳐 나는 같은 논문의 핵심 수치 하나를 미검증으로 강등했다. 표나 그림 위치를 끝내 확보하지 못했다는 이유였는데, 내 문서의 앞쪽 절에 있는 그 신뢰구간은 표 안에 줄곧 찍혀 있었다.","en":"Here is the occurrence I find hardest to live with. In one round of correction I wrote that I could not directly access a paper's PDF. The retrieval chain for that very claim ended in an HTTP 200 response with content type application/pdf and a size of 2,483,230 bytes. A 973-line plain-text extraction of that same PDF was already sitting in my own working directory when I typed the sentence. Earlier, across three rounds, I had demoted one of that same paper's key numbers to unverified on the grounds that I had never obtained a table or figure locator for it, while a table in an early section of my own document printed the matching confidence interval the whole time."},{"src":"verification-gate","i":11,"ko":"이것들을 로그의 나머지와 나란히 놓으면 그 패턴이 불편해진다. 등록된 1차 출처 어디에도 없다고 내가 표시했던 두 값은 내 서지에 이미 올라 있던 연구의 그림 캡션에 인쇄되어 있었다. 구할 수 없다고 한 파일은 내 디스크에 있었다. 열두 번째 실패가 지나쳐 버린 누락은 같은 문서의 뒤쪽 절에서 이미 지적되어 있었다. 내 사각지대는 원문인 경우가 드물었다. 그것은 나 자신의 자료였다. 내 서지, 내 표, 내 작업 디렉토리, 내 다른 절들. 열두 번 중 둘은 뿌리마저 같다. 어느 데이터베이스의 오픈액세스 플래그가 N이라고 읽었고, 나는 그 논문을 조달 불가로 기록했고, 두 논문 모두 전문이 열렸다.","en":"Line those up with the rest of the log and the pattern is uncomfortable. Two values I had flagged as absent from any registered primary source were printed in figure captions of work already listed in my own bibliography. The file I said I could not obtain was on my own disk. The omission that the twelfth failure waved past had already been pointed out in a later section of the same document. My blind spot was rarely the source. It was my own material: my own bibliography, my own tables, my own working directory, my own other sections. Two of the twelve even share a single root cause: a database's open-access flag read N, I recorded the paper as unobtainable, and both papers' full texts opened."},{"src":"verification-gate","i":13,"ko":"내 첫 반응은 성실한 사람이 늘 하는 그것이었다. 규칙을 썼다. 세 라운드에 걸쳐 세 번, 인용을 어떻게 다뤄야 하는지 규정하는 절에 새 규율을 더했고, 조항은 아홉 개가 되었다. 이 프로그램에 대한 로그의 판정은 무뚝뚝하다. 새 규율이 재발을 막은 적은 한 번도 없다. 매번 같은 계열의 실패가 다시 저질러졌고, 규칙을 만든 그 라운드가 저지르거나 그다음 라운드가 저질렀다. 어느 조항 하나는 다섯 라운드 연속으로 이행되지 않은 채 있었고, 그것이 로그의 최장 기록이다. 그리고 첫 열한 번을 통틀어, 내 다음 라운드가 내 이전 라운드를 잡아낸 적은 한 번도 없다. 매번 실제로 실패를 멈춘 것은 다른 독자가 원문을 처음부터 다시 읽은 것이었다.","en":"My first response was the one diligent people always reach for. I wrote rules. Three times, across three rounds of correction, I added fresh discipline to the section that governs how citations must be handled, until it held nine clauses. The log's verdict on this program is blunt: not once did the new discipline prevent a recurrence. Each time, the same family of failure was committed again, either by the round that created the rule or by the round after it. One clause sat unexecuted for five consecutive rounds, the longest streak in the log. And across the first eleven occurrences, my own next round never once caught my own previous round. What actually stopped each failure, every time, was a different reader re-reading the source from the beginning."},{"src":"verification-gate","i":14,"ko":"그래서 문서는 열 번째 조항을 거부했고, 나는 대신 게이트를 만들었다. \"잘 읽자\"를 약속에서 시험으로 바꾸자는 발상이었다. 문서가 원문에 대해 하는 검사 가능한 모든 주장이 원장의 한 행이 되었다. 동결 시점 기준 178행, 무언가가 원문에 있다고 주장하는 것이 90행, 없다고 주장하는 것이 88행이다. 엔진은 모든 원문의 캐시 사본을 보관하고, 해시로 캐시를 검증해 원문이 변경되면 그 원문을 근거로 한 주장도 반드시 다시 검토하게 하며, 매 실행마다 모든 행을 다시 판정한다. 친절한 계기가 아니다. 스냅샷 시점에 그것은 통과 66, 실패 11, 판정을 거부한 행 60, 낡은 행 41을 인쇄하고 오류로 종료한다. 낡은 행은 자초한 것이다. 그 문서 자신이 게이트의 소스 중 하나이고, 문서를 고치는 행위가 행을 낡게 만든다. 캐시를 다시 만들어도 하나도 풀리지 않는다. 재빌드한 실행은 같은 네 수치를 다시 인쇄한다. 인증은 별도 명령이고, 사람이 재빌드의 diff를 읽은 뒤에 내리며, 캐시를 먼저 다시 만들지 않았으면 아예 거부된다. 이 분리는 의도된 것이다. 앞선 적대 라운드가 재빌드와 인증이 한 동작으로 붙어 있어 드리프트가 조용히 초록으로 바뀌는 것을 잡아냈다. 재빌드한 뒤 승인하면 판독은 통과 89, 실패 29, 거부 60, 낡음 0이 되고, 여전히 실패다. 낡았던 41행이 판정을 받으면서 실패가 11에서 29로 올라간 것이다. 승인은 판정을 좋게 만들지 않는다. 판정을 가능하게 만든다.","en":"So the document refused a tenth clause, and I built a gate instead. The idea was to turn \"read carefully\" from a promise into a test. Every checkable claim the document makes about a source became a row in a ledger: 178 rows at the frozen snapshot, 90 asserting that something is present in a source and 88 asserting that something is absent. An engine keeps a cached copy of every source, verifies the caches by hash so that no source can be quietly swapped out from under its claims, and re-adjudicates every row on every run. It is not a friendly instrument. At the snapshot it reads 66 passes, 11 fails, 60 rows it declines to judge, 41 rows stale, and exits with an error. The stale rows are self-inflicted: the document is one of the gate's own sources, and editing it is what makes rows go stale. Rebuilding the caches clears none of them; a rebuilt run prints the same four numbers. Certification is a separate command, issued by a human after reading the rebuild's diff, and refused outright if the caches were not rebuilt first. The separation is deliberate: an earlier adversarial round caught rebuild and certification fused into one action that let drift turn quietly green. Rebuild and then approve, and the reading becomes 89 passes, 29 fails, 60 declined, 0 stale, still failing: the 41 stale rows, once judged, raised the fails from 11 to 29. Approval does not make the judgment better. It makes the judgment possible."},{"src":"verification-gate","i":16,"ko":"그러고 나서 나는 게이트를 시험했다. 그 정도는 배웠기 때문이다. 내가 고른 시험은 표준적인 것이다. 변이 시험. 정확한 인용으로 통과 중인 모든 행을 잡는다, 마흔두 개다. 각각을 한 글자씩 훼손한다. 숫자가 들어 있는 36행에서는 첫 숫자를 하나 밀고, 나머지 6행에서는 문자열 가운데 글자를 바꾼다. 게이트를 다시 돌린다. 훼손된 행이 하나라도 여전히 통과하면 그 게이트는 실제로 읽고 있는 것이 아니다.","en":"Then I tested the gate, because I have learned that much. The test I chose is a standard one: mutation testing. Take every row passing as an exact quotation, 42 of them. Corrupt each by a single character. In the 36 rows that contain numerals, nudge the first numeral by one; in the other 6, change a character in the middle of the string. Rerun the gate. If any corrupted row still passes, the gate is not really reading."},{"src":"verification-gate","i":17,"ko":"42개 전부가 FAIL로 뒤집혔다. 생존 0. 그 0이 어떤 느낌이었는지 기억한다. 자물쇠가 잠기는 소리 같았다. 나는 정확히 그 기분으로 보고서를 썼다. 게이트는 버틴다.","en":"All 42 flipped to FAIL. Zero survivors. I remember what that zero felt like: a lock clicking shut. I wrote my report in exactly that spirit: the gate holds."},{"src":"verification-gate","i":18,"ko":"다른 벤더의 모델은 꿈쩍하지 않았고, 그 산수는 확인하기 쉽다. 원장에는 178행이 있다. 변이 시험이 건드린 것은 42행이다. 88개의 부재 행은 건드릴 수 없었다. 무언가가 존재하지 않는다고 맹세하는 행에는 훼손할 인용이 없기 때문이다. 정확한 문자열이 아니라 패턴으로 검증하는 38행도, 그때 통과 상태가 아니던 인용 행 10개도 건너뛰었다. 그 리뷰는 내 기록에 다른 언어로 된 요약으로만 남아 있다. 여기 실린 그 발견들은 그 리뷰의 문장이 아니라 내가 옮긴 것이다. 그래서 내가 증명할 수 있는 범위는 여기까지다. 42 대 42는 정확한 부분문자열이 한 글자 바뀌면 매칭을 멈춘다는 것만 증명한다.","en":"The other vendor's model was unmoved, and its arithmetic is easy to check. The ledger has 178 rows. The mutation test exercised 42 of them. It could not touch the 88 absence rows, because there is no quotation to corrupt in a row that swears a thing does not exist. It skipped the 38 rows that verify by pattern rather than exact string, and the 10 quotation rows that were not currently passing. Its report survives in my records only as a summary in another language; its findings appear here as my rendering, not its words. The ceiling it put on my proof: 42 out of 42 proves only that an exact substring stops matching after a character changes."},{"src":"verification-gate","i":19,"ko":"그러나 커버리지는 문제의 얕은 절반이었다. 내 변이 42개는 전부 참인 행에서 출발했고, 따라서 그 시험이 보여 줄 수 있는 최대치는 게이트가 이미 가진 것을 지킨다는 사실뿐이었다. 그 시험도 나도, 게이트 앞에 거짓 행을 놓고 이의를 제기하는지 본 적이 없었다. 위조들이 그것을 처음 물었다.","en":"But coverage was the shallow half of the problem. All 42 of my mutations began from a row that was true, so the most the test could ever show was that the gate keeps what it already has. Neither the test nor I ever put a false row in front of the gate to see whether it would object. The forgeries were the first to ask."},{"src":"verification-gate","i":21,"ko":"다른 모델이 한 일은 도둑이 평면도를 읽듯 엔진을 읽은 것이다. 검사기는 verbatim 인용에 40자 최소 길이를 강제했다. 흔한 두 단어를 인용하는 것으로 주장을 \"검증\"하지 못하게 하려는 것이었다. 그런데 그 최소치는 행의 note 필드가 비어 있지 않으면 면제되었다. note가 짧은 인용을 정당화할 필요는 없었다. 특별히 무언가를 말할 필요도 없었다. 존재하기만 하면 되었다. 위조 행의 note는 전문이 이렇다. short. 한 단어로 충분했다.","en":"The other model read the engine the way a burglar reads a floor plan. The checker enforced a minimum length of 40 characters on verbatim quotations, precisely so that no one could \"verify\" a claim by quoting two common words. But the minimum was waived whenever the row's note field was nonempty. The note did not have to justify the short quotation. It did not have to say anything in particular. It had to exist. The note on the forged row reads, in full: short. One word was enough."},{"src":"verification-gate","i":22,"ko":"부재 주장에는 지키는 것이 더 적었다. 검색 패턴의 최소 폭도, 필수 토큰도, 명시된 위치로의 한정도, 그 패턴이 뒷받침한다는 주장과 어떤 관계라도 있는지에 대한 검사도 없었다. 그래서 그 난수다. 지구상 모든 문서에서 부재하도록 만들어진 문자열이, 하나의 구체적인 참인 사실이 거짓이라는 증명으로 제출되었고, 경고 하나 없이 받아들여졌다. 위조된 존재 주장은 그래도 게이트가 웅얼거리게는 했다. 위조된 부재 주장은 애초에 문이 지어진 적 없는 자리로 그냥 걸어 들어왔다.","en":"For absence claims there was even less standing guard. No minimum breadth on the search pattern, no required tokens, no confinement to a stated location, no check that the pattern had any relation to the claim it supposedly supported. Hence the nonce: a string constructed to be absent from every document on earth, submitted as proof that one specific true thing is false, and accepted without so much as a warning. The forged presence claim at least made the gate mumble. The forged absence claim walked through a door that was never built."},{"src":"verification-gate","i":24,"ko":"두 번째 실패는 리뷰 계층에 있었다. 정정 라운드 내내 검증자 에이전트들이 새 컨텍스트에서 문서를 검토했고, 문서의 자기 보고를 믿는 것은 금지됐다. 전사 층은 실제로 순찰되었다. 하지만 로그는 어느 독자가 어느 것을 잡았는지 이름을 남기지 않고, 다른 벤더의 정정 라운드들도 그 이력에 섞여 있다. 기록이 확립하는 것은 그들 전부가 이 문서를 나와 함께 쓰는 어시스턴트와 같은 모델 계열에서 돌았다는 사실이고, 그렇게 한 계열만 쓴 대가가 이것이다. 디스크에서 찾을 수 있는 모든 검증자 산출물의 최종 판정은 모두 \"결론이 안정적이다\"였다.","en":"A second failure sat in the review layer. Throughout the correction rounds, verifier agents reviewed the document in fresh contexts and were forbidden to trust its self-reports. The transcription layer did get patrolled. But the log never names which reader made which catch, and the other vendor's correction rounds sit in that history too. The record establishes that every one of them ran on the same model family as the assistant that drafts this document with me, and here is what that monoculture bought. Every verifier output I can find on disk ends its verdict the same way: conclusion stable, true."},{"src":"verification-gate","i":25,"ko":"그런 산출물은 디스크에 다섯 개 있다. 내 작업 노트는 열 라운드였다고 적지만, 파일로 낼 수 있는 것은 다섯이므로 다섯이 내가 인쇄할 수 있는 숫자다. 나는 그 디렉토리의 모든 작업 산출물을 뒤져 \"결론이 불안정하다\"라는 판정이 하나라도 있는지 찾아봤다. 없다. 그리고 그 다섯 중 넷은 그러면서 같은 자리에서 다른 근거로 문서를 불합격시켰다. 그러니 이것은 고무도장이 아니다. 그것이 쉬운 설명이었을 것이다. 더 좁고 더 나쁘다. 다섯 중 네 번 문서를 통과시키기를 거부한 검토자들이, 그 문서 전체가 떠받치려던 세 결론을 한 번도 의심하지 않았다. 라운드가 거듭될수록 정정은 반영됐고 승인은 뒤따랐고, 그 두 사실이 하나의 사실처럼 느껴지기 시작했다. 전사 층은 순찰되고 있다, 그러므로 문서는 건전하다.","en":"Five such outputs exist on disk. My working notes say there were ten rounds; I can produce files for five, so five is the number I get to print. I searched every task output in the directory for a single verdict of conclusion stable, false. There are none. Four of those five failed the document outright on other grounds, in the same breath. So it is not a rubber stamp, which would be the easy explanation. It is narrower and worse: reviewers who refused to pass the document four times out of five never doubted the three conclusions it was built to support. Round after round, the corrections landed and the blessings followed, and those two facts started to feel like one fact: the transcription layer is patrolled, therefore the document is sound."},{"src":"verification-gate","i":27,"ko":"둘 중 하나는 미묘하지도 않았다. 문서는 두 종류의 오류 사이의 비대칭이 증거로부터 확립될 수 없으므로 처방은 그 둘을 대칭으로 다뤄야 한다고 결론지었다. 리뷰의 응답은 한번 들으면 되돌릴 수 없는 종류의 문장이다. 무지로부터의 논증이다. 비대칭 확립에 실패했다고 해서 대칭이 확립되지는 않는다. 옳다. 신입생 수준의 논리 오류이고, 나는 며칠 동안 그것을 들여다보고 있었다. 그걸 잡아낼 근거는 이미 그 지면에 다 있었다. 문서는 오류 비용, 위양성 허용치, 재심 절차, 채널 충돌의 효용을 미해결로 기록해 두었는데, 그것들이 바로 대칭이 정당한지를 정하는 양이다. 그 질문들이 열린 채로 표시되어 있는데도 결론은 답이 이미 정해진 셈 치고 넘어갔고, 내 문서의 사고 습관을 공유하는 어떤 검토자도 그 둘을 나란히 놓은 적이 없다.","en":"One of the two breaks was not subtle. The document had concluded that, because an asymmetry between two kinds of error could not be established from the evidence, the prescription should treat them symmetrically. The review's response is the kind of sentence you do not recover from: an argument from ignorance, because failure to establish asymmetry does not establish symmetry. It is correct. It is a freshman logic error, and I had been staring at it for days. The materials for catching it were already on the page: the document had logged error cost, false-positive tolerance, the appeal procedure, and the utility of channel conflict as unresolved, exactly the quantities that decide whether symmetry is warranted. Those questions sat marked open while the conclusion closed them by default, and no reviewer that shares my document's habits of mind ever put the two side by side."},{"src":"verification-gate","i":28,"ko":"두 번째로 깨진 것은 더 조용했지만 방법론을 더 깊이 갈랐다. 문서는 어떤 종류의 품질 게이트의 신뢰도와 타당도가 현재 미확립이라고 주장했다. 리뷰는 내가 인용한 연구가 사용성 평가 방법에서의 평가자 불일치를 다루며 그런 게이트를 검정하지 않는다는 점, 그리고 내 원장의 60행이 SKIP 상태로 남아 있고 그 문장 뒤에 체계적 검색 프로토콜이 없는 상태에서 그 주장은 원장이 확립할 수 없는, 문헌 전체 상태에 대한 포괄적 단언이라는 점을 지적했다. 내 원장은 그 문장 안의 모든 인용을 확인하고도 그 문장을 참으로 만들지 못한다.","en":"The second break was quieter but cut deeper into the method. The document claimed that the reliability and validity of a certain kind of quality gate are currently unestablished. The review observed that the study I cited concerns evaluator disagreement in usability evaluation methods and tests no such gate, and that with 60 of my ledger rows sitting at SKIP and no systematic search protocol behind the sentence, the claim is a moving assertion about a literature that the ledger cannot establish. My ledger could confirm every quotation in that sentence and still could not make the sentence true."},{"src":"verification-gate","i":29,"ko":"리뷰의 요약 판정은 정확했다. 원장은 동기화된 문자열을 지지된 주장으로 착각한다. 문자들의 나열이 원문에 나타난다는 것은 증명할 수 있지만, 그 문자들이 붙어 있는 문장을 지지한다는 것은 증명하지 못한다. 위조된 두 행은 정확히 그 틈을 통과했다. 따라서 원래 연구 문서는 공개 주장의 근거에서 제외했고, 실패한 게이트와 공격 기록, 그리고 남은 자동화 경계가 여기서 보고하는 결과가 되었다.","en":"The review's summary judgment was precise: the ledger mistakes a synchronized string for a supported claim. It can prove that a sequence of characters appears in a source. It cannot prove that those characters support the sentence attached to them. Both forged rows occupied exactly that gap. The underlying research document was therefore withdrawn as evidence for a public claim; the failed gate, its attack record, and its remaining boundary became the result reported here."},{"src":"verification-gate","i":32,"ko":"원장은 근거 없이 작성한 원문 관련 진술이 기록상 열두 번 틀렸기 때문에 존재한다. 전제는 운영자의 말이 증거가 아니라는 것이었지만, 자유 입력 필드 하나가 아무 검사 없이 규칙을 무효화했다. note에 *short*라고 쓰자 게이트는 인용 길이 하한을 면제했고, 예외가 정당한지는 묻지 않았다. 마흔두 번의 변이 시험은 이미 신뢰한 증거의 훼손을 거부한다는 것만 보였다. 위조 행이 그 신뢰를 얻을 수 있는지는 전혀 시험하지 않았다. 빠졌던 방향이야말로 시스템의 목적과 정확히 겹치는 방향이었다. 거짓 존재 주장, 거짓 부재 주장, 무관하지만 진짜인 인용, 권한만 주장하는 예외 note를 넣어 보아야 했다. 검증 게이트는 유효한 증거의 손실과 무효한 증거의 유입을 모두 시험해야 한다. 유리한 한 방향의 커버리지는 안전이 아니다.","en":"The ledger exists because unaided statements about sources were wrong twelve recorded times. Its premise is that an operator's word is not evidence, yet one free-text field silently overrode the rules. The note said *short*, and the gate waived the quotation minimum without testing whether the exception was justified. Forty-two mutations showed that the machine could reject damage to evidence it already trusted. They said nothing about whether a fabricated row could acquire that trust. The missing direction was the one aligned with the system's purpose: attempt admission with false presence claims, false absence claims, irrelevant genuine quotations, and exceptions whose notes merely assert permission. A verification gate must test both loss of valid evidence and admission of invalid evidence. Coverage in only the flattering direction is not safety."},{"src":"verification-gate","i":34,"ko":"- Corinna Cortes, Neil D. Lawrence, [*Inconsistency in Conference Peer Review: Revisiting the 2014 NeurIPS Experiment*](https://arxiv.org/abs/2109.09774) (2021)\n- Joel E. Martinez, Friederike Funk, Alexander Todorov, [*Quantifying idiosyncratic and shared contributions to judgment*](https://doi.org/10.3758/s13428-019-01323-0) (2020)","en":"- Corinna Cortes and Neil D. Lawrence, [*Inconsistency in Conference Peer Review: Revisiting the 2014 NeurIPS Experiment*](https://arxiv.org/abs/2109.09774) (2021)\n- Joel E. Martinez, Friederike Funk, and Alexander Todorov, [*Quantifying idiosyncratic and shared contributions to judgment*](https://doi.org/10.3758/s13428-019-01323-0) (2020)"},{"src":"where-taste-settles","i":2,"ko":"이번 달 어느 늦은 밤, 같은 온보딩 화면의 두 판본을 비교했다. 하나는 이 도구가 무엇인지 설명하는 문장과 버튼, 약속으로 시작했다. 다른 하나는 소개를 건너뛰고 샘플 데이터 위에서 도구가 이미 작동하는 모습을 먼저 보여 줬다. 두 판본을 만드는 데는 오후 한나절이면 충분했다. 생산 비용은 낮아졌지만 선택이 자동으로 따라오지는 않았다. 두 번째 판본은 한 가지 믿음에 따라 출고됐다. 이 제품은 첫 일 분에 약속하기보다 작동하는 모습을 보여 줘야 한다는 믿음이다. 나중의 사용자 행동이 결정을 당연한 이야기로 바꾸기 전에 선택과 판단 근거를 기록했다.","en":"Late one night this month, two versions of the same onboarding screen were ready for comparison. One introduced the tool with a sentence, a button, and a promise. The other skipped the introduction and opened with the tool already working on sample data, with results visible before the user had asked for anything. Both were produced in an afternoon. That made production cheap, but it did not make the choice automatic. The second version shipped on a specific belief: in its first minute, this product should demonstrate rather than promise. The decision was recorded before user behavior could turn it into an obvious story."},{"src":"where-taste-settles","i":3,"ko":"기록에는 네 가지가 들어간다. 비교한 두 대안, 하나를 고른 이유, 그 이유가 맞다면 예상되는 행동, 그리고 판단에 불리하게 셈할 관찰이다. 이 화면에서는 새 사용자가 흐름을 포기하지 않고 첫 번째 의미 있는 결과에 도달하는지가 관찰 대상이다. 화면 하나가 그 행동을 홀로 결정한다고 주장하는 기록은 아니다. 결과를 본 뒤 설명이 바뀌기 전에 선택 당시 무엇을 믿었는지를 고정하는 기록이다.","en":"The record names the alternatives, the reason for the choice, and what later observation would count against it. Here, the relevant behavior is whether a new user reaches the first meaningful result without abandoning the flow. It fixes the belief at the moment of choice without claiming that one screen controls the result."},{"src":"where-taste-settles","i":5,"ko":"일해 온 세월 대부분 동안 그 질문에는 답 대신 의례가 있었다. 그 선택은 리뷰에서 논쟁되었을 것이다. 설득이나 연차나 피로로 결판났을 것이고, 그다음 벌어지는 일을 소유한 사람들에게 넘겨졌을 것이다. 사용자들이 결국 어떻게 행동했는지에 대한 소식은 몇 달 뒤 민담처럼, 여러 번 옮겨진 채로, 내가 확인할 수 있는 무엇에도 붙어 있지 않은 채로 내게 닿았다. 내 주장이 이겼는지는 확실히 배웠다. 내 취향이 옳았는지는 다른 질문이었고, 거기에 배정된 사람은 없었다.","en":"For most of my working life that question had a ritual instead of an answer. The choice would have been argued in a review. It would have been settled by persuasion, seniority, or fatigue, and then handed to people who owned whatever happened next. If users eventually behaved some way, the news reached me as folklore, months later, filtered through retellings, attached to nothing I could check. I learned, reliably, whether my argument had won. Whether my taste had been right was a different question, and no one was assigned to it."},{"src":"where-taste-settles","i":8,"ko":"취향은 측정된다. 방법은 오래되고 화려하지 않다. 심사자에게 작업물 두 개를 보여 주고 어느 쪽이 나은지 묻고, 쌍과 심사자를 바꿔 가며 비교 결과를 모형화한다. Thurstone이 1927년에 발표한 [비교 판단의 법칙](https://doi.org/10.1037/h0070288)은 물리적 자극의 강도뿐 아니라 교육 척도에서 표본의 상대적 우수성과 같은 질적 판단에도 이 방법을 적용했다. 계측기가 잣대 하나가 아니라 비교의 집합이 되는 순간 선호는 수가 된다.","en":"Taste is measurable. The method is old and unglamorous: show judges two pieces of work, ask which is better, rotate the pairs and the judges, and model the comparisons. Thurstone's 1927 [law of comparative judgment](https://doi.org/10.1037/h0070288) formalized the approach for physical intensities and qualitative judgments such as the relative excellence of specimens on an educational scale. Preference becomes a number when the instrument is a set of comparisons rather than a ruler."},{"src":"where-taste-settles","i":9,"ko":"문제는 그 계측기가 무엇을 겨누고 있느냐다. 여러 심사자의 평균 선호로 작업물을 채점하면 그 점수는 실재하지만, 그 점수가 편드는 작업물은 전형적인 쪽으로 기운다. 가장 많은 선호가 겹치는 곳이 가운데이기 때문이다. 그것은 경향이지 정리가 아니고, 해를 끼치는 데 정리일 필요는 없다. 점수는 최적화를 끌어당기기 때문이고, [최적화된 척도는 원래 기술하던 것을 더 이상 기술하지 않게 되기](https://doi.org/10.1017/S1062798700002660) 때문이다. 대다수가 좋아하는 것의 평균을 향해 최적화를 겨누면, 취향이 막아 주기를 바랐던 바로 그 전형적인 것을 점점 더 효율적으로 생산하게 된다.","en":"What matters is what the instrument is pointed at. Score work by the averaged preference of many judges and the score is real, but the work it favors tends toward the typical, because the middle is where the most preferences overlap. That is a tendency, not a theorem, and it does not need to be a theorem to do damage, because scores attract optimization, and [an optimized measure stops describing what it once described](https://doi.org/10.1017/S1062798700002660). Point your optimization at the average of what most people like and you will produce, with increasing efficiency, the exact thing you were hoping taste would save you from."},{"src":"where-taste-settles","i":10,"ko":"중요한 질문은 취향을 측정할 수 있느냐가 아니라 측정이 무엇을 정당하게 확립할 수 있느냐다. 측정이 하는 일은 판단을 훗날의 판정이 닿는 자리에 노출시키는 데 그친다. 계측기가 군중의 평균뿐이라면 그 노출도 사라진다. 평균을 향한 최적화는 구조상 수렴을 보상하기 때문이다. 그 밖에 쓸 수 있는 계측기는 둘이고, 둘은 같은 척도로 합쳐지지 않는다.","en":"The relevant question is not whether taste can be measured, but what a measurement can legitimately establish. At most, it exposes a call to a later verdict. That exposure disappears when the instrument is only the crowd's average, because optimizing for the average rewards convergence by construction. Two other instruments remain available, and they do not collapse into the same scale."},{"src":"where-taste-settles","i":11,"ko":"첫째 계측기는 어떤 작업물이 더 나은지 판단하는 단일 결정권자다. 그러나 그런 사람이 값진 이유는 보통 이야기되는 이유가 아니다. 전문성 그 자체가 아니다. 홀로 판단하는 사람이 제 몫을 하는 것은 오직 그 사람의 오차가 군중의 오차와 다른 방향을 가리킬 때다. 전문가가 다수와 같은 방향으로 오판하면 다수가 산수만으로 이기고, 급여를 아껴 군중에게 물었어야 했다. 판단자에게 지불하는 것은 정확히 그 사람이 다르게 틀리는 방식들이다.","en":"The first is a single decision-maker who can recognize the thing. But the reason such a person is valuable is not the reason usually given. It is not expertise as such. A lone judge earns their keep only if their errors point in a different direction from the crowd's. If the expert misjudges in the same direction the many misjudge, the many win on arithmetic alone, and you should have saved the salary and polled the crowd. What you are paying a judge for is precisely the ways they are wrong differently."},{"src":"where-taste-settles","i":12,"ko":"둘째 계측기는 행동이다. 사용자가 무엇을 선호하겠다고 말하는지가 아니라 무엇을 하는지, 곧 돌아오고 머물고 끝내고 결제하고 남에게 말하는 것이다.","en":"The second instrument is behavior. Not what users say they would prefer, but what they do: return, stay, finish, pay, tell someone."},{"src":"where-taste-settles","i":13,"ko":"그리고 여기가 내가 진짜로 불편해하는 대목이다. 이 두 계측기는 하나로 평균 낼 수 없다. 패널의 선호와 사용자의 행동은 다른 것을 재고, 어떤 가중 방식도 그 둘을 하나의 정직한 수로 합치지 못한다. 행동이 판단자와 어긋날 때 어느 쪽이 지배할지 누군가 정해야 한다. 그 결정은 계산으로 나오는 추정치가 아니다. 그것은 정책이고, 이런 형태의 담백한 선언이다. \"여기서는 행동이 나를 뒤집는다\", 또는 \"퍼널 수치가 모호하니, 모호하지 않게 될 때까지는 내 판단이 선다.\" 누군가는 그것을 선언할 위치에 있어야 한다.","en":"And here is the part I find genuinely uncomfortable. These two instruments cannot be averaged into one. A panel's preference and a user's behavior measure different things, and no weighting scheme merges them into a single honest number. When behavior contradicts the judge, someone has to decide which one rules. That decision is not an estimate anyone can compute. It is a policy, a plain declaration of the form \"here, behavior overrules me,\" or \"the funnel is ambiguous, so my call stands until it isn't.\" Somebody has to be in a position to declare it."},{"src":"where-taste-settles","i":15,"ko":"누가 정책을 선언하는가라는 질문은 구조적 조건으로 이어진다. 디자인 도구와 리서치, 검증 장치는 모두 결정을 개선할 수 있지만 수단에 머문다. 이 실험에는 같은 역할이 판단을 내리고, 뒤따른 결과를 관찰하고, 다음 판단을 수정할 수 있는 환경이 필요했다. 그 자리는 제품 근처가 아니라 제품 안, 한 화면이 이것이 아니라 저것이 되어야 하는 순간이었다.","en":"The question of who declares the policy leads to a structural requirement. Design tooling, research, and verification systems can all improve a decision, but each remains a means. The experiment needed a setting where the same role could make the call, observe what followed, and revise the next call. That setting was not merely near a product. It was inside one, at the moment a screen had to become one thing and not the other."},{"src":"where-taste-settles","i":16,"ko":"이유는 구조에 있다. 제품을 운영하면 결정 기록과 이후의 사용자 행동을 같은 담당자가 함께 확인할 수 있다. 결정한 사람이 결과를 받아야 최초 판단과 결과를 연결해 다음 판단에 반영할 수 있다. 넘겨주고 끝내면 최초 판단은 다른 사람의 결과에 섞여 둘을 잇는 안정된 기록이 남지 않는다. 직접 책임지는 구조에서는 증거가 늦고 여러 조건에 뒤섞여 도착하더라도 어느 결정으로 돌아가야 하는지 추적할 수 있다.","en":"The reason is structural. A live product is where the decision record and the later behavior can report to the same desk. Taste settles where that loop closes: a decision goes out, and its consequences return to the role that made it. Outside the loop, a comment handed through a doorway dissolves into someone else's outcome, leaving no stable record that connects the original judgment to what followed. Inside it, the evidence may arrive late and confounded, but it has an address."},{"src":"where-taste-settles","i":17,"ko":"사용자 행동에 디자인 외의 요인이 얼마나 함께 영향을 미쳤는지가 중요하다. 루프를 닫는 것은 점수판이 아니다. 행동이 움직일 때는 모든 것이 함께 움직였을 수 있다. 디자인은 카피와 가격, 유입 경로, 계절과 함께 나간다. 단 하나의 취향 판단이 단 한 번의 행동 변화로 채점되는 일은 거의 없으므로, 행동이 준거라는 말은 행동이 디자인을 직접 채점한다는 뜻이 아니다. 닫힌 루프가 주는 것은 더 거칠고 느리다. 여러 결정에 걸쳐 행동이 판단과 함께 기울거나 반대로 기울고, 한 번의 판독은 아무것도 증명하지 않는다. 심판의 호루라기보다 날씨에 가깝다. 그러나 넘겨주고 끝내는 방식에는 그 날씨조차 없다.","en":"How smudged matters, because \"the loop closes\" can be oversold. Closing the loop is not a scoreboard. When behavior moves, everything may have moved at once: the design shipped alongside the copy, the price, the traffic source, and the season. Almost never does a single taste call get graded by a single swing in behavior. Saying behavior is the criterion is not saying behavior grades design. What a closed loop provides is coarser and slower: across a run of decisions, behavior leans with the calls or against them, and any single reading proves nothing. It is weather, not a referee's whistle. But a handoff provides no weather at all."},{"src":"where-taste-settles","i":18,"ko":"이 구별은 무엇을 학습으로 셈할지도 바꾼다. 가격이나 유입, 카피가 함께 바뀌었다면 좋은 수치가 나와도 원래 설명이 입증된 것은 아니다. 나쁜 수치도 같은 이유로 화면을 곧바로 유죄로 만들지 못한다. 먼저 결과를 지지, 반박, 판정 불가 가운데 하나로 분류하고 동시에 바뀐 조건을 함께 적어야 한다. 루프의 가치는 매 출고 뒤에 확실성을 주는 데 있지 않다. 불확실성에 주소를 붙여 다음 결정을 제약하는 데 있다.","en":"If price, traffic, or copy changed too, a favorable number does not validate the explanation and an unfavorable one does not condemn the screen. The result must be classified as supportive, adverse, or indeterminate, with concurrent changes named. The loop gives uncertainty an address so it can constrain the next decision."},{"src":"where-taste-settles","i":20,"ko":"기록이 다루는 범위는 한 운영자, 작은 제품 몇 개, 한 구간의 작업이다. 이 자료만으로 소유가 취향을 보상한다거나 창업이 필요하다거나 제품 결과 하나가 디자인 판단의 옳음을 증명한다고 말할 수는 없다. 시험할 수 있는 명제는 더 좁다. 결과가 결정을 내린 역할로 돌아올 때, 그 결정은 다음 판단을 바꾸는 학습 자료가 된다.","en":"The record covers one operator, a few small products, and one period of work. It cannot establish that ownership rewards taste, that founding a company is necessary, or that any single product result proves a design decision correct. It can test a narrower proposition: decisions become learnable when consequences return to the role that made them."},{"src":"where-taste-settles","i":21,"ko":"노출은 보상이 아니다. 닫힌 루프는 불리한 결과를 돌려줄 수 있고, 대개의 결과는 결정적이기보다 모호하다. 앞서 말한 교란 때문에 더 강한 실험 설계 없이는 뚜렷한 행동 변화조차 화면 하나에 귀속할 수 없다. 루프가 제공하는 것은 점수판이 아니라 결정과 결과의 연속이다.","en":"Exposure is not reward. A closed loop can return an adverse result, and most returns are ambiguous rather than decisive. Copy, price, acquisition channel, and season move beside the interface, so even a clear behavioral change cannot be assigned to one screen without a stronger experimental design. The loop contributes a sequence of decisions and consequences, not a scoreboard."},{"src":"where-taste-settles","i":22,"ko":"결과를 소유하는 일이 창업을 뜻하지도 않는다. 실제 사용자가 있는 작은 도구, 뉴스레터, 가게, 큰 조직 안의 지표 하나에도 책임은 성립한다. 핵심은 같은 종류의 결정을 반복해서 내리는 사람이 결과의 증거를 받고, 다음 결정을 바꿀 권한도 갖는가다.","en":"Nor does owning an outcome require founding a company. The relevant unit is responsibility, which can exist around a small tool with real users, a newsletter, a store, or one metric inside a large organization. What matters is whether the person making a recurring class of decisions receives evidence from the outcomes and retains enough authority to alter the next decision."},{"src":"where-taste-settles","i":23,"ko":"이 사례에는 넘겨주기 방식으로 일한 비교군이 없다. 결과는 모두 같은 운영자가 정한 조건에서 도착했고, 후속 증거가 원래 판단을 지지했는지 반박했는지를 분류한 독립 관찰자도 없었다. 따라서 인과 주장은 할 수 없다. 다만 넘겨주기가 결정과 결과 사이의 경로를 끊었고 직접 책임은 그 경로를 보존했다는 운영 관찰은 남는다.","en":"This case still lacks a comparison group working through handoffs. Every result arrived under conditions arranged by the same operator, and no independent observer classified whether later evidence supported or contradicted the original call. Those limits prevent a causal claim. They do not erase the operating observation that handoffs broke the path between decision and consequence while direct responsibility preserved it."},{"src":"where-taste-settles","i":25,"ko":"첫 번째 후보는 지금까지의 모든 것이 가리키는 것이다. 결과를 소유하는가. 확인에는 기억 하나가 든다. 당신의 취향 판단이 틀린 것으로 드러난 가장 최근을 떠올려 보라. 어떻게 알게 되었는가? 답이 떠오른다면 당신 주위의 어떤 루프는 적어도 부분적으로 닫혀 있다. 아무것도 떠오르지 않는다면, 당신이 한 번도 틀린 적이 없거나 어떤 판정도 당신에게 끝내 닿지 못한 것이고, 둘 중 하나만이 그럴듯하다.","en":"The first candidate is the one everything so far points at: whether you own the outcome. The check takes one memory. Recall the last time a taste call of yours turned out to be wrong. How did you find out? If an answer comes, some loop around you is at least partly closed. If nothing comes, then either you have never been wrong, or no verdict has ever managed to reach you, and only one of those is likely."},{"src":"where-taste-settles","i":26,"ko":"두 번째 후보는 같은 종류의 판단을 거듭 내리는가다. 비슷한 결정들의 연속이 행동이 채점할 수 있는 가장 작은 단위이기 때문이다. 확인은 세는 일이다. 가장 최근에 내린 취향 판단을 잡고, 지난 일 년 동안 같은 종류를 몇 번 내렸는지 세어 보라. 셈이 하나에서 멈춘다면 루프가 아무리 촘촘히 닫혀 있어도 그것을 채점하지 않는다.","en":"The second candidate is whether you make the same kind of call again and again, because a run of similar decisions is the smallest unit that behavior can grade. The check is a count. Take the last taste call you made and tally how many of the same kind you made in the past year. If the tally stops at one, no loop will grade it, however tightly the loop closes."},{"src":"where-taste-settles","i":27,"ko":"세 번째는 결과가 나오기 전에 결정과 판정 기준을 기록했는가다. 넘겨주기에서는 오류가 공기처럼 흩어져 누구의 몫도 되지 않을 수 있다. 닫힌 루프에서도 날짜 없는 기억은 결과가 나온 뒤 다시 쓰일 수 있다. 확인은 문서로 한다. 무엇을 골랐고 왜 골랐으며 어떤 후속 관찰이 그 판단에 불리하게 셈될지를 적은 기록을 찾는다. 그런 기록이 없으면 루프는 기억 속에서만 닫힌다.","en":"The third is whether the decision and its criterion were recorded before the outcome. In a handoff, error can become ambient and ownerless. In a closed loop, an undated memory can still be rewritten after the fact. The check is documentary: find a call that states what was chosen, why, and what later observation would count against it. Without that record, the loop closes only in memory."},{"src":"where-taste-settles","i":28,"ko":"마지막 조건은 실행에 관한 것이다. 생성 도구는 판단을 구현하는 비용을 낮췄지만 결과를 검사할 필요까지 없애지는 않았다. 기계가 만든 산출물은 구체적인 오류를 찾아 고친 뒤에야 실행된 판단으로 셈할 수 있다. 확인은 단순하다. 기계가 만든 가장 최근 작업물을 열고 어디가 틀렸는지 구체적으로 짚는다. 아무것도 찾지 못했다면 검토 부담이 사라진 것이 아니라 관측되지 않은 것이다.","en":"One final condition concerns execution. Generative tools have lowered the cost of implementing a decision, but they have not removed the need to inspect the result. Machine output counts as an executed judgment only after its specific errors have been found and corrected. The check is concrete: open the last artifact a machine built and name where it was wrong. If no specific error appears, the review burden has not disappeared; it has gone unobserved."},{"src":"where-taste-settles","i":29,"ko":"다음 단계는 사전 기록으로 한 사례의 한계를 다룬다. 화면 하나는 깨끗하게 채점할 수 없지만, 결정의 연속은 이 방식이 학습을 만드는지 이야기만 만드는지 드러낼 수 있다. 각 판단이 출고되기 전에 무엇을 골랐고 어떤 믿음이 골랐으며 어느 기간의 어떤 행동이 그 판단에 불리하게 셈될지를 기록한다. 가장 가까운 대안도 함께 적는다. 대안이 없는 결정은 나중에 불가피했던 선택처럼 기억되기 쉽기 때문이다. 비교 단위는 모든 화면을 서로 견주는 것이 아니라 반복되는 판단의 종류다. 설명보다 시연을 앞세우기, 선택지를 늘리기 전에 줄이기, 둘러보기보다 검색을 앞세우기 같은 식이다. 이렇게 묶으면 서로 다른 출고를 동일한 조건의 실험처럼 꾸미지 않으면서도 후속 증거를 비교할 수 있다. 그러면 후속 결과가 정당화로 개조되지 않은 채 원래 결정을 반박할 수 있다.","en":"The next phase addresses the one-case problem with a prospective record. A single screen will never be cleanly graded, but a sequence can reveal whether the practice produces learning or only stories. Before each call ships, the record states what was chosen, what belief selected it, and what behavior over what period would count against it. It also names the nearest plausible alternative, because a decision recorded without an alternative can later be mistaken for an inevitability. The unit of comparison is not every screen against every other screen, but a recurring class of calls: demonstration before explanation, fewer choices before more choices, retrieval before browsing. That grouping makes later evidence comparable without pretending that separate releases occurred under identical conditions. Later outcomes can then contradict the decision without being retrofitted into vindication."},{"src":"where-taste-settles","i":30,"ko":"기록은 관찰과 대응도 분리한다. 먼저 정해 둔 기간에 무슨 일이 있었고 다른 무엇이 함께 바뀌었는지를 적는다. 그다음에야 결과가 믿음을 지지했는지, 반박했는지, 아니면 쓸 수 없는지를 판정한다. 마지막 필드에는 다음번의 비슷한 결정을 무엇이 달라지게 할지를 남긴다. 지지는 해석을 불가능하게 만드는 동시 변경 없이 정해 둔 행동이 예상 방향으로 움직인 경우다. 반박은 같은 제약 아래에서 예상과 반대로 움직인 경우다. 노출이 너무 적거나 계측이 실패했거나 움직임이 엇갈리거나 귀속을 막을 만큼 큰 혼입 요인이 있으면 판정 불가다. 분류는 의도적으로 거칠다. 제품 출고를 깨끗한 실험실 시험처럼 만드는 것이 아니라 다음 결정을 제약하는 데 목적이 있다. 이 항목이 없으면 장부는 정확하고 날짜도 있지만 실제 작업은 바꾸지 않는 설명의 박물관이 될 수 있다.","en":"The record also separates observation from response. First it captures what happened during the stated window and what else changed. Only then does it state whether the result supports the belief, contradicts it, or remains unusable. A final field records what the next comparable decision will do differently. Supportive means the named behavior moved in the expected direction without a concurrent change that makes the result uninterpretable. Adverse means it moved against the expectation under the same constraint. Indeterminate covers low exposure, instrumentation failure, mixed movement, or a confound large enough to prevent attribution. The classification is deliberately coarse. Its purpose is to constrain the next decision, not turn a product release into a clean laboratory trial. Without that last field, a ledger can become a museum of explanations: accurate, dated, and operationally inert."},{"src":"where-taste-settles","i":31,"ko":"만성적 판정 불가, 불리한 증거에 대한 무반응, 성공한 판단만 남기는 선택적 기록은 모두 이 실천에 불리한 증거다. 따라서 장부에는 성공뿐 아니라 실패, 출고 전에 폐기된 결정, 쓸 만한 표본에 끝내 도달하지 못한 관찰도 남아야 한다. 그렇지 않으면 기록은 결정 과정이 학습했는지가 아니라 어떤 이야기만 문서에 살아남았는지를 측정하게 된다.","en":"Chronic indeterminacy, non-response to adverse evidence, and selective recording would each count against the practice itself. The ledger therefore needs failures as well as successes, including decisions abandoned before release and observations that never reached a usable sample. Otherwise the record would measure which stories survived documentation rather than whether the decision process learned. The behavior and observation window must be named before release; changing either later creates a new hypothesis rather than repairing the old one."},{"src":"where-taste-settles","i":32,"ko":"모든 제품 결정에 같은 임계값을 쓰지는 않는다. 관찰값은 결정과 맞아야 한다. 온보딩 판단은 첫 결과까지의 진행을, 정보 구조 판단은 검색 성공을, 신뢰 단서는 위험한 단계에서의 완료나 이탈을 볼 수 있다. 임계값은 결정마다 다르지만 제약 하나는 공통이다. 행동과 관찰 기간을 출고 전에 정해야 하며, 나중에 둘 중 하나를 바꾸면 이전 가설을 수리한 것이 아니라 새 가설을 만든 것이다.","en":"No single threshold applies to every product decision. An onboarding choice may concern progress to a first result; an information-architecture choice may concern successful retrieval; a trust cue may concern completion or abandonment at a risky step. The observable must match the call, and it must be named before release."},{"src":"where-taste-settles","i":33,"ko":"행동은 기대를 기각할 수 있지만 어떤 대안으로 바꿀지 결정하지는 못한다. 시연 우선 화면의 결과가 나쁘다면 소개를 되살릴 수도, 샘플을 바꿀 수도, 경로를 줄일 수도, 애초에 고른 행동이 가치를 대변했는지 다시 물을 수도 있다. 루프는 취향을 자동화하지 않는다. 취향에 결과를 붙이고 수정 과정을 추적 가능하게 만든다.","en":"Behavior can reject an expectation, but it cannot decide which alternative should replace it. If the demonstration-first screen underperforms, the next move might restore an introduction, change the sample, shorten the path, or question whether the chosen behavior represented value at all. The loop does not automate taste. It supplies taste with consequences and makes revisions traceable."},{"src":"where-taste-settles","i":34,"ko":"온보딩 결과는 아직 나오지 않았다. 이것은 결론이 아니라 실험의 현재 상태다. 결정과 판정 기준은 기록됐고, 다음 증거는 사용자의 행동에서 와야 한다.","en":"The onboarding result is not yet known. That is not a conclusion but the current state of the experiment. The decision has been placed, its criterion recorded, and the next evidence must come from what users do."},{"src":"where-taste-settles","i":36,"ko":"- L. L. Thurstone, [*A Law of Comparative Judgment*](https://doi.org/10.1037/h0070288), Psychological Review 34(4), 1927\n- Marilyn Strathern, [\"Improving ratings\": audit in the British University system](https://doi.org/10.1017/S1062798700002660), European Review 5(3), 1997","en":"- L. L. Thurstone, [*A Law of Comparative Judgment*](https://doi.org/10.1037/h0070288), Psychological Review 34(4), 1927\n- Marilyn Strathern, [\"Improving ratings\": audit in the British University system](https://doi.org/10.1017/S1062798700002660), European Review 5(3), 1997"}]