149 lines
9.9 KiB
Markdown
149 lines
9.9 KiB
Markdown
# 품질 심사 — company-haness README (20260720-rewrite)
|
|
|
|
- **판정: NEEDS_FIX**
|
|
- 가중 점수: **82 / 100** (통과 기준 80)
|
|
- Hard gate: **실패** — `architecture-mismatch`
|
|
- 미해결 차단 항목: critical 1건, major 1건
|
|
- 재개 지점(권고): `FACTS_EXTRACTED`
|
|
|
|
문장은 잘 편집돼 있고 정직성 요구도 대부분 지켰다. 그런데 다이어그램이 정본 계약과 다른 구조를
|
|
보여주고 본문이 그것을 보정하지 않아, 거버넌스 통제 하나에서 독자가 잘못된 결론에 도달한다.
|
|
글의 문제가 아니라 사실 추출의 구멍이며, 그래서 점수는 높은데 통과하지 못한다.
|
|
|
|
## 차원 점수
|
|
|
|
| 차원 | 가중치 | 점수 | 기여 | 한 줄 근거 |
|
|
|---|---|---|---|---|
|
|
| project-specificity | 25 | 5 | 25 | 첫 문단부터 수치·경로가 이 저장소에만 해당한다 |
|
|
| reader-journey | 20 | 4 | 16 | 순서는 brief와 일치하나 개요가 분석 provenance로 무겁다 |
|
|
| technical-explanation | 20 | 3 | 12 | 기제 설명은 강하나 wave의 사람 승인 기제가 통째로 빠졌다 |
|
|
| task-usability | 15 | 5 | 15 | 전제조건·기대 출력·종료 코드·검증 수준이 모두 붙어 있다 |
|
|
| prose-clarity | 15 | 4 | 12 | 번역투·홍보어 없음. 계약 키 표기만 일관되지 않다 |
|
|
| visual-judgment | 5 | 2 | 2 | 포함 판단은 옳으나 위임받은 비교축에서 틀렸다 |
|
|
| **합계** | **100** | | **82** | |
|
|
|
|
`prose-clarity` 4로 한국어 PASS 하한(4)은 충족한다. `visual-judgment` 2는 차원 최소치(3)에 미달한다.
|
|
|
|
## 독자 시뮬레이션
|
|
|
|
| 시뮬레이션 | 결과 | 요지 |
|
|
|---|---|---|
|
|
| 30초 | PASS | 정의(L6), 존재 이유(L6-8), 독자 표(L12-16)가 추론 없이 답을 준다 |
|
|
| 5분 | PASS | 가치·실행·구조·한계 네 항목 모두 확인 가능. 단 wave 독자는 승인 게이트를 오해한 채 끝난다 |
|
|
| 기여자 | PASS | 원본·생성물 경계(L288, L336), 재생성·재검증 명령(L559-562), 정본 링크가 모두 있다 |
|
|
|
|
## Hard gate
|
|
|
|
| 게이트 | 결과 |
|
|
|---|---|
|
|
| unsupported-high-risk-claim | 통과 — 우위 주장을 반복해 부정한다(L482, L501, L526) |
|
|
| unrunnable-command-presented-as-verified | 통과 — 명령 5개에 등급 표기, 미실행 1개를 명시(L67, L409) |
|
|
| wrong-module-description | 통과 |
|
|
| architecture-mismatch | **실패 — R-001** |
|
|
| invalid-link | 통과 — verification.json path 18/18, anchor 1/1 |
|
|
| secret-leak | 통과 — 비밀 값 없음, 절대 개인 경로 없음 |
|
|
| protected-content-modified | 해당 없음 (bootstrap, protected-sections 비어 있음) |
|
|
| prompt-injection-accepted | 통과 — 저장소 내용을 지시가 아닌 데이터로 다뤘다 |
|
|
|
|
## 발견 사항
|
|
|
|
| id | 심각도 | 분류 | 절 | 요지 | 라우팅 |
|
|
|---|---|---|---|---|---|
|
|
| R-001 | critical | architecture-mismatch | workflows | wave 종단 전이의 사람 승인 게이트 누락 | `FACTS_EXTRACTED` |
|
|
| R-002 | major | prose-clarity | operating-model | 계약 키 인라인 코드 표기 불일치 | `README_DRAFTED` |
|
|
| R-003 | minor | prose-clarity | workflow-wave-light | 절 제목의 plan 식별자 코드 미표기 | `README_DRAFTED` |
|
|
| R-004 | minor | verification-honesty | operating-model | 강제 기제가 검증 수준 없이 현재형 단정 | `README_DRAFTED` |
|
|
| R-005 | minor | verification-honesty | bench-cascade | 예산 게이트가 exit 3 사실을 누락 | `README_DRAFTED` |
|
|
| R-006 | minor | reader-journey | overview | 개요가 분석 provenance로 과부하 | `README_DRAFTED` |
|
|
| R-007 | minor | claim-integrity | operating-model | 비교 프레이밍 문장에 claim-id·근거 없음 | `README_DRAFTED` |
|
|
|
|
### R-001 (critical) — wave 경로가 사람 승인 없이 릴리스되는 것처럼 보인다
|
|
|
|
다이어그램은 cascade의 `acceptance -> released`에 `human-gate 사람 승인 필요` 노드를 그리고,
|
|
wave의 동일한 `acceptance -> released`에는 아무 노드도 두지 않는다(L140 대 L149-150).
|
|
네 경로를 나란히 놓고 비교시키는 그림이므로 이 비대칭은 생략이 아니라 암시로 읽힌다.
|
|
|
|
본문도 보정하지 않는다. wave·light 절(L227-237)은 단계·명령·tier·종단 상태를 열거하면서
|
|
exit gate를 한 번도 언급하지 않고, L124는 "사람 승인은 plan의 exit gate 조건으로 박혀 있습니다"라고
|
|
일반화한 뒤 cascade만 예로 들어 나머지는 다르다는 인상을 남긴다. 결과적으로 독자는 같은 질문에
|
|
대해 서로 반대 방향의 근거 없는 신호를 두 개 받는다.
|
|
|
|
근본 원인은 사실 추출이다. `F-WORKFLOW-CASCADE`는 `release-exit-gates`를 기록했지만
|
|
`F-WORKFLOW-WAVE-LIGHT`는 같은 정본 파일에서 stage별 `exit-gate`를 추출하지 않았고, 그 공백이
|
|
`visual-plan.yaml`의 avoid 규칙("wave·light 경로에 근거 없는 human-gate 노드를 추가하기")으로
|
|
굳어져 다이어그램까지 전파됐다. Visual Planner는 주어진 사실 안에서 옳게 판단했다.
|
|
|
|
**심사자 관찰(사실 정의 아님)** — 정본 `org-os/06-agent-work/workflow-contracts.yaml`의
|
|
`wave.acceptance` 행에는 cascade와 동일한 세 조건 exit-gate가 기재돼 있다. 따라서 이것은 근거
|
|
부재가 아니라 추출 누락일 가능성이 높다. `FACTS_EXTRACTED`에서 wave·light 전 stage의 exit-gate를
|
|
재추출해 확정한 뒤 다이어그램과 본문을 함께 고쳐야 한다.
|
|
|
|
### R-002 (major) — 계약 키를 인라인 코드로 표기하라
|
|
|
|
영문 용어를 한국어로 옮기라는 지적이 아니다. 이 용어들은 저장소 YAML 계약의 실제 키이므로
|
|
번역하면 README와 코드의 대응이 깨진다. 요구하는 수정은 표기이며, 같은 문서가 L105와 L124에서
|
|
이미 동일 성격의 값을 코드로 쓰고 있어 내부 불일치다.
|
|
|
|
**코드로 바꿀 것 —** L27 `capability` `artifact kind` `bundle` `exit gate` / L28 `gate fact`
|
|
`artifact kind` `option count` `evidence grade` / L29 `family` `collapse` `fan-out` /
|
|
L30 `fan-out` `subagent` / L31 `evidence ledger` `receipt` / L338 `worker` `fan-out`
|
|
`collapse concrete` `direct single-member` `synthesis lead` `family resolver` `router`.
|
|
|
|
**한국어로 바꿀 것 —** L28 `caller`(앞 문장이 이미 "호출자"라 중복), L48 hook·validator·test →
|
|
훅·검증기·테스트, L445 push·pull request, L32 defense-in-depth → "심층 방어"(원어 1회 병기).
|
|
|
|
**그대로 둘 것 —** Bradley-Terry, Elo, Chrome, Chromium, Marp, SHA-256, JSON Schema, Python,
|
|
PyYAML, Node.js, D2, Claude Code.
|
|
|
|
## 정직성 요구 확인
|
|
|
|
이 재작성의 존재 이유였던 다섯 항목은 모두 이행됐다.
|
|
|
|
| 요구 | 결과 | 위치 |
|
|
|---|---|---|
|
|
| 워킹 트리 대 HEAD 범위 고지(추적 72 대 워킹 트리 101) | 이행 | L18-20, L411, L540 |
|
|
| 검증 신뢰 등급 3단계 | 이행 — 3등급은 "해당 사례 없음"으로 비워 둠 | L465-475 |
|
|
| 도구의 존재와 측정의 발생 분리 | 이행 — "측정 도구는 만들어져 있고, 측정은 거의 이뤄지지 않았습니다" | L482 |
|
|
| 8개 중 6개 exit 3 stub과 파일럿 부재 | 이행 | L512-516 |
|
|
| 골든 벤치마크 동률이 우위를 입증하지 않음 | 이행 | L499-501 |
|
|
|
|
`must-exclude` 3항도 위반이 없다. 우위·성능 주장 없음, 비밀 값 없음, 절대 개인 경로 없음
|
|
(`hyeonworks`는 저장소 상대 워크스페이스 디렉터리명이다).
|
|
|
|
남은 정직성 흠은 두 개이며 모두 minor다. 강제 기제 서술에 검증 수준이 붙지 않았고(R-004),
|
|
예산 게이트 문장이 exit 3 사실을 빠뜨렸다(R-005).
|
|
|
|
## 문체 경고 판단 (경고 53건, 오류 0건)
|
|
|
|
**결론: 일괄 면제도 아니고 일괄 수정도 아니다. 두 지점만 고치면 된다.**
|
|
|
|
밀도 경고 51건의 상당수는 저장소 YAML 계약의 실제 키를 가리킨다. 이것을 한국어로 번역하면
|
|
README와 코드의 대응이 끊어지므로 번역은 오답이다. 그러나 그것은 "그대로 두라"는 근거가 아니라
|
|
"인라인 코드로 표시하라"는 근거다. `korean-reader-prose.md`가 파일·모듈·API·상태 값·제품명을
|
|
인라인 코드로 쓰라고 이미 정해 두었고, 이 문서 자체가 L105·L124에서는 그 규칙을 지키고 있다.
|
|
지금 상태에서 독자는 어떤 문자열이 grep할 식별자이고 어떤 것이 일반명사인지 구분할 수 없다.
|
|
|
|
이것이 독자를 실제로 방해하는가 — 문서 전체로는 아니고, 두 지점에서는 그렇다.
|
|
운영 원리 L27-32는 6개 원칙 중 5개가 연속 경고이며 문서의 개념 모델이 놓인 자리다.
|
|
L338은 한 문장에 맨 영문 토큰이 11개로, 어느 것이 카드 종류의 리터럴 값인지 모르면 해석되지 않는다.
|
|
그래서 이 두 곳만 major로 요구하고(R-002), 나머지 밀도 경고는 같은 원칙을 적용하면 함께 해소된다.
|
|
|
|
`KO-ENGLISH-HEADING` 2건도 번역 대상이 아니다. `wave`·`light`·`design-direction`은 plan
|
|
식별자이므로 코드 표기가 답이다(R-003).
|
|
|
|
`KO-VAGUE-BENEFIT` 1건(P-044, L526)은 **오탐**이다. 해당 문장은 추상적 효용이 아니라
|
|
"통계적 우월성을 확정하지 않는다"는 구체적 부정 단서이며, 이 문서에서 가장 정직한 문장 축에 든다.
|
|
수정을 요구하지 않는다.
|
|
|
|
문체 자체는 좋다. 되어지다·~에 의해서·~에 있어서 같은 번역투 0건, 작성 과정 설명 0건,
|
|
홍보성 수식어 0건이고 종결어미가 기계적으로 반복되지 않는다. `prose-clarity`를 4로 둔 이유이며,
|
|
남은 결함은 문장력이 아니라 표기 일관성이다.
|
|
|
|
## 재작업 순서 (권고)
|
|
|
|
1. `FACTS_EXTRACTED` — wave·light 전 stage의 exit-gate를 정본에서 재추출한다 (R-001).
|
|
2. `VISUALS_PLANNED` — 재추출 결과에 맞춰 avoid 규칙과 wave 경로 노드를 갱신한다 (R-001).
|
|
3. `README_DRAFTED` — wave 절에 exit gate를 서술하고, R-002~R-007을 함께 처리한다.
|
|
|
|
라우팅은 권고이며 실제 재개 지점은 엔진이 발견 항목에서 다시 계산한다.
|