@chrono-meta/fh-gate 2.0.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/rules/fh_4axis_gate.md +77 -1
- package/.claude-plugin/marketplace.json +3 -3
- package/AGENTS.md +26 -3
- package/CLAUDE.md +240 -4
- package/knowledge/shared/harness-core/capability_composition_contract.md +68 -0
- package/knowledge/shared/harness-core/fh_three_layer_canon.md +38 -12
- package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +115 -3
- package/knowledge/shared/harness-core/harness_incubator_doctrine.md +82 -0
- package/knowledge/shared/harness-core/harness_terminal_correlation_and_recommendations.md +85 -10
- package/knowledge/shared/harness-core/ship_readiness_gate.md +241 -1
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +102 -0
- package/knowledge/shared/rules/sister_asset_protocol.md +12 -0
- package/package.json +7 -2
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-commons/agents/quench-challenger.md +6 -1
- package/plugins/fh-commons/skills/ko-tech-writer/fixtures/known_negative.md +19 -0
- package/plugins/fh-commons/skills/ko-tech-writer/fixtures/known_positive.md +20 -0
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/CHANGELOG.md +88 -0
- package/plugins/fh-meta/skills/auto-decorrelation/SKILL.md +14 -2
- package/plugins/fh-meta/skills/steel-quench/SKILL_detail.md +13 -0
- package/plugins/fh-meta/skills/verify-bidirectional/SKILL.md +34 -1
- package/scripts/capability_registry_check.sh +75 -12
- package/scripts/chamber_run.sh +39 -5
- package/scripts/chamber_witness.sh +25 -0
- package/scripts/fh-gate.sh +16 -1
- package/scripts/ko_tech_writer_calibrate.py +127 -0
- package/scripts/package_coverage_check.sh +10 -0
- package/scripts/prepublish_scope_note.sh +139 -0
- package/scripts/publish_freshness_check.sh +21 -2
- package/scripts/selfcheck.sh +32 -6
- package/scripts/test_fh_gate_regressions.sh +21 -9
- package/scripts/test_ko_tech_writer_lanes.sh +61 -0
- package/scripts/test_marker_axes_run_lanes.sh +87 -3
- package/scripts/test_marker_crossfamily_lanes.sh +31 -1
- package/templates/.git-hooks/pre-commit +225 -10
- package/templates/subagent-tally-hook.json +2 -2
|
@@ -279,6 +279,7 @@ unchanged and keeps its own 2026-07-14 evidence).
|
|
|
279
279
|
|
|
280
280
|
| # | Identity | Engines it loads | Status | Evidence / what's missing |
|
|
281
281
|
|---|---|---|---|---|
|
|
282
|
+
| **Ⓑ** | **프로젝트 부스터** (booster) — 🟥 **다른 다섯과 같은 층이 아니다. 포괄 기능이되 ①②⑤ 를 «포함»하지 않고 «끌어다 쓴다» — 셋 다 부스팅 밖의 고유 범위를 갖는다** — 번호 대신 Ⓑ 를 쓰는 이유이자 §Ⓑ-layering 을 먼저 읽어야 하는 이유 | judgment-circuit + ship-gate | 🟢 **GREEN (신설 2026-08-16)** | **이 행이 없던 것이 이 표의 맹점이었다.** 온보딩 문 ③(«매핑 프로젝트 가속»)이 오래전부터 이 기능을 팔고 있었는데 등급표에 대응 행이 없었다 — 그래서 부스터는 **한 번도 등급이 매겨진 적이 없고, 약점이 발견될 자리도 없었다.** 미할당 기능은 미감사 기능이다. **인접 세 행이 이걸 안 덮는다**: ②는 *새 하네스를 낳고*(성숙한 하네스는 대상 아님), ⑤는 *사람의 의도*를 벼리고(증폭 대상이 하네스가 아니다), ①은 남의 능력을 *FH 가* 쓴다(활용 ∪ 흡수 — 둘 다 FH 가 이득 보는 방향). 부스터는 **FH 의 기계가 상대 하네스의 자체 개발을 가속하는 것**이라 셋 다와 방향이 다르다. **실적(운영자 열거 + 실측)**: pmh 는 *이 경로에서 출발했다* · mate 스킬 출하 + 인프라 배선 · 조직 환경 2건(품질 게이트 인프라 이식, 자산명은 residency 로 미기재) · clawd-on-desk · gstack. **Dominance — §Gate consequence 를 면제 없이 그대로 만족한다.** 경쟁자 = *그 하네스 자신의 개발 과정*, 결과 = 그 과정이 놓친 것을 부스팅이 잡았다: ⑴ **gstack**(외부·운영자 통제 밖) — 이슈 #1890 을 외부인 자격으로 제기, 그 레포 오너가 수정하고 **회귀 테스트 `test/claude-provider-keychain.test.ts` 로 못 박아 릴리스에 실었다**(2026-08-15). 채택 판정이 **우리가 아니라 그쪽 메인테이너**라 자기채점이 아니다. ⑵ **pmh**(2026-08-16 실측) — 이식된 자산이 대상 환경에서 **게이트가 죽은 채** 있었고 selfcheck 35 FAIL 이 CI 부재로 몇 달간 안 보였다; 부스팅 경로가 그걸 드러내고 31/31·35→2 로 닫았다. ①이 받은 dominance 면제는 **이 행에 필요하지 않다** — ①은 산출이 «안 지어도 됐다»라 겨냥이 틀렸던 경우고, 부스터의 산출은 «상대가 못 잡던 걸 잡았다»라 이 절의 정의에 그대로 맞는다. 🟥 **명시 잔여 — 초록 행의 잔여이지 보류 사유가 아니다**(①이 «(d) 안 닫힘»을 안고 🟢인 것과 같은 처리): **부스팅이 이식한 자산이 대상 환경에서 실제로 발화하는지 재는 계기가 없었다.** 2026-08-16 pmh 실측이 그 대가다 — 한 줄(`set -euo pipefail` 아래 `package.json` 읽는 할당문)이 게이트를 즉사시켰고, 30레인 회귀 스위트가 그걸 30번 보고하는데 **아무도 안 봤다**(그 레포에 CI 가 없었으므로). 승급이 아니라 **이 행의 첫 승급 기준**이 거기서 나온다(아래). ⚠️ n 은 세지 않는다 — 실적 열거는 운영자 증언 + 오늘 실측 2건이고, 조직 환경 2건은 이 파일에서 검증 불가(residency)이므로 **증언으로 표기하고 측정으로 세지 않는다** |
|
|
282
283
|
| ③ | 거버넌스 게이트 (governance) | ship-gate | 🟢 GREEN | pre-commit/pre-push physically block; moat measured 3–4 family blind (HITL 8/8 ABSENT); cross-family caught a real companion-store-name leak 2026-07-14 (fail-closed) |
|
|
283
284
|
| ⑤ | 증폭자 (amplifier) | judgment-circuit | 🟢 GREEN | short-intent→literature-grounding→ultimate-doc real instances; rules-diet −18.2k measured; intent-routing probe 94% (below) |
|
|
284
285
|
| ④ | 프런티어→조직 전파 (**🔵 RC, 2026-08-09**) | external-grounding | 🔵 RC | frontier-digest launchd auto + AX submission docs both real, but digest→org never closed as ONE pipeline. **2026-08-09**: the missing link was built — `scripts/digest_landing_check.sh` extracts the digest's candidate table into probes and reuses the existing landing checker (no second verifier). Self-test 8 lanes green. **🔵 RC (2026-08-09)**: the mtime defect that initially held it back is closed — the since-filter now splits two axes (git-tracked → commit time via `git log --since`; gitignored `tracks/**` → mtime, the only evidence that axis has; dirty-tracked → `UNMEASURED`), and **two lanes pin that split**: a file with only a fresh mtime is *not* counted, and a file with only a fresh commit *is* counted even when its mtime is stale. The second lane matters — without it the fix degenerates into "discard all tracked files so only negatives pass" (named by the cross-family reviewer). Self-test **10 lanes** green. **What remains is a named residual, not a calibration gap**: `file-change ≠ token-introduction` — a file committed after the digest may carry the token from before (closing it needs token-level diff, which does not fit the checker's interface). The instrument therefore prints, and this row states, that it is a **screener, not an adjudicator**: hits must be opened. Four real runs, four hand-verifications, four defects found |
|
|
@@ -286,6 +287,154 @@ unchanged and keeps its own 2026-07-14 evidence).
|
|
|
286
287
|
| ② | 프로젝트 인큐베이터 (**🔵 RC, 2026-08-09**) | context-continuity + judgment-circuit | 🔵 RC | **RC 세 다리가 섰다** — (a) 구현: `chamber_run.sh` 6단계 게이트 (b) known-pair: 러너 게이트 **18 레인**(`test_chamber_run_lanes.sh`, BLOCK/PASS 대칭 — PASS arm 이 있어야 "전부 막는 게이트"도 걸린다) + 순서 증인 **16 레인**(`chamber_witness.sh`) (c) self-test 초록. **실상황 발화 대기 = formal chamber EMIT 아직 0** — 그것이 RC 가 🟢 이 아닌 이유이자 RC 정의 그 자체다. ⚠️ **그 0 의 해석이 2026-08-09 에 바뀌었다**: 지금까지 *"챔버가 엄격해서"* 로 읽었으나, KILL 된 후보 다수가 **메타-형** 이고 유일한 EMIT(`forge-wiki`)만 **필드-형** 이다 — 즉 *낳을 수 없었던* 게 아니라 **애초에 대상이 아닌 후보가 들어왔을** 가능성이 있다. 필드 ⊥ 메타 프로파일과 씨앗(precocial) 기준 정의: `harness_incubator_doctrine.md §3-a`. ⚠️ 그 분류는 **사후에 이뤄졌고 n=9** 라 가설이다 — 사전 등록 후 다음 런을 예측해야 결과가 된다. 아래 옛 판정 줄은 이력으로 남긴다 |
|
|
287
288
|
| ②-old | (이력) 프로젝트 인큐베이터 | context-continuity + judgment-circuit | 🟡 PARTIAL | incubation is running — **stockbattle is being incubated now** (S1 built, mid-flight) + qasp/pmh spin-out precedent + scaffold-emit shipped (doctrine: "emit shipped today as scaffold+approval; the chamber flow is the named target"). **Corrected 2026-08-08** (the old text read "6 runs, 6 KILL … 0/6", which was stale on both counts, and the ledger itself was missing a run): hand-counted from `tracks/_chamber/INDEX.md` — **9 full runs (#2–#10), 8 KILL, 1 EMIT** (#1 is a trigger probe, not a full run). Runs #5–#6 *measured* the emit-worthiness criterion (net-new ∧ artifact-shaped ∧ real-data-precision-adequate ∧ hub-state-independent); run #6 confirmed the graduation-order principle — hub-internal proof before standalone extraction, never the reverse. **The 🟡 is now held for a different reason than before.** The old reason ("no closed emit-via-incubation yet") is false: run #9 `forge-wiki` emitted and shipped publicly under operator approval with the Pre-Publish gate passed. What is *not* proven is that the **formal chamber flow** produced it — that run's workspace holds only an `EMISSION_VERDICT.md`, with no `INTENT.md`, `BUDGET.md` or `SIM_NOTES.md`, so the intent/budget/blind-persona gates have no artifact and the verdict was written after the fact. The first run to complete the formal flow end-to-end is #10 (2026-08-08, 3 blind isolated personas) and it KILLed. So: **the identity has fired once, the mechanism has not yet been shown to be what fired it**, and the dominance result every 🟢 owes is still outstanding → 🟡 |
|
|
288
289
|
|
|
290
|
+
### <a name="b-layering"></a>§Ⓑ-layering — **프로젝트 부스터**는 여섯 번째 행이 아니라 **다른 층**이다 (운영자, 2026-08-16)
|
|
291
|
+
|
|
292
|
+
> 🟥 **먼저 — 이 절을 위계도로 읽지 마라. 이 표는 분류학이 아니라 재고 목록이다.**
|
|
293
|
+
> 운영자(2026-08-16): *"사실 계층구조로 지으면 5대 정체성은 **서로를 먹고 먹지만**, 그럼에도
|
|
294
|
+
> 정체성을 두는 이유는 **여기에 뭐가 있는지를 볼 수 있게** 하기 위함이야. 실제로는 유기적으로
|
|
295
|
+
> 서로 연결되고 조합하여 사용해내게 되는 거지."*
|
|
296
|
+
>
|
|
297
|
+
> 아래 관계 서술은 **«무엇이 무엇 밑이다»를 굳히려는 게 아니라, 각 행이 서로 다른 범위를 갖는다는
|
|
298
|
+
> 증거**다. 관계를 정밀화할수록 표는 실제 사용과 멀어진다 — 현장에서는 한 작업이 ①⑤ 를 같이
|
|
299
|
+
> 태우고 그 결과가 ② 로 흐른다. **정합한 위계를 못 그리는 것은 이 표의 결함이 아니다.**
|
|
300
|
+
>
|
|
301
|
+
> ⇒ 그래서 Ⓑ 부재의 비용도 «위계가 틀렸다»가 아니다. **목록에 없어서 안 보였고, 안 보이니 감사가
|
|
302
|
+
> 물을 수 없었다** — 그게 전부이고, 그거면 충분히 비싸다.
|
|
303
|
+
|
|
304
|
+
이 항목의 초판은 부스터를 «⑥» 으로, 즉 나머지 다섯과 **나란한 여섯 번째 정체성**으로 적었다.
|
|
305
|
+
운영자가 그걸 정정했다: *"증폭자, 하네스클러스터 이 두 개가 사실 부스팅을 위한 **과정적
|
|
306
|
+
정체성**인데 부스터는 **포괄적 기능**이라고 보는 게 맞을지도 모르겠다"* · *"인큐베이터도
|
|
307
|
+
비슷한 것 같네."*
|
|
308
|
+
|
|
309
|
+
🟥 **그리고 그 정정의 초판도 과했다 — 운영자가 같은 자리에서 두 번 고쳤다.** 초판은 위 문장을
|
|
310
|
+
«Ⓑ 가 ①②⑤ 를 **포함**한다»로 옮겨 적었는데, 운영자가 되물었다: *"증폭자는 하네스를 부스팅하기
|
|
311
|
+
위한 것뿐만이 아니라 **훨씬 범용적으로** 쓸 수 있는 거 아닌가?"* 맞다. 그리고 같은 잣대를 나머지
|
|
312
|
+
둘에 대면 셋 다 포함관계가 아니다:
|
|
313
|
+
|
|
314
|
+
| 행 | 부스팅 밖의 범위 | 그래서 |
|
|
315
|
+
|---|---|---|
|
|
316
|
+
| ⑤ 증폭자 | **사람의 의도** 전반. `CLAUDE.md §Intent Marshaling` 이 하네스가 전혀 안 끼는 일반 작업(문서·리서치·정리)까지 명시적으로 이 아래 둔다 | Ⓑ 보다 **넓다** |
|
|
317
|
+
| ① 하네스 클러스터 | 남의 능력을 **FH 가** 써서 FH 가 안 짓는다 — 수혜자가 FH 다 | Ⓑ 와 **방향이 반대** |
|
|
318
|
+
| ② 프로젝트 인큐베이터 | **유닛을 낳는다 — 하네스만이 아니다.** 「프로젝트」는 더 큰 틀로 고른 이름이고 범위가 **하네스 · 스킬 · 에이전트 · 하네스 형태가 아닌 일반 레포**까지다(운영자, 2026-08-16). 부스팅은 낳은 뒤에 온다 | **순차**지 종속이 아니다 |
|
|
319
|
+
|
|
320
|
+
⇒ **관계는 «포함»이 아니라 «끌어다 쓴다»(uses)** 다.
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
Ⓑ 프로젝트 부스터 ← 포괄 기능이되, 셋을 소유하지 않는다
|
|
324
|
+
↑ 끌어다 쓴다 (uses, not contains)
|
|
325
|
+
⑤ 증폭자 · ① 하네스 클러스터 · ② 프로젝트 인큐베이터
|
|
326
|
+
— 각자 부스팅 밖의 고유 범위를 갖는다 (위 표)
|
|
327
|
+
② 의 산출 유닛 = 하네스 · 스킬 · 에이전트 · 일반 프로젝트 레포
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
이 구분이 실질을 바꾼다: 포함이면 ①②⑤ 의 등급이 Ⓑ 의 등급에 종속되고, **끌어다 쓰는 관계면
|
|
331
|
+
각 행이 자기 승급 기준을 그대로 진다.** 후자가 맞고, 그래서 Ⓑ 신설이 다른 행의 등급을 하나도
|
|
332
|
+
건드리지 않는다.
|
|
333
|
+
|
|
334
|
+
**이게 왜 «행이 없었나»를 설명한다.** 부스터는 다섯과 같은 층에 없었으므로 다섯을 아무리
|
|
335
|
+
들여다봐도 나오지 않는다 — 빠진 게 아니라 **층이 하나 접혀 있었다.** 다섯은 각각 자기 자리에서
|
|
336
|
+
감사됐고, **그것들을 무엇에 쓰고 있었는지**는 표에 적힌 적이 없다.
|
|
337
|
+
|
|
338
|
+
🟥 **그리고 «왜 아무도 안 적었나»의 답은 «빠뜨렸다»가 아니다.** 운영자: *"부스터가 비워져
|
|
339
|
+
있던 이유는 사실 FH 자체의 **너무나도 당연한 기본 정체성**이었기 때문이야. 가장 근원적인 것.
|
|
340
|
+
계속 **숨쉬듯이** 해왔으니까. 그 위에 5개 정체성이 서게 되었는데."*
|
|
341
|
+
|
|
342
|
+
이건 흔한 사각과 **방향이 반대다.** 보통 놓치는 것은 드물고 눈에 안 띄는 것인데, 이것은
|
|
343
|
+
**항상 하고 있어서 안 보였다.** 사람은 자기가 끊임없이 하는 일을 명제로 적지 않는다 — 적을
|
|
344
|
+
이유를 못 느끼기 때문이고, 그래서 **가장 근원적인 항목이 가장 늦게 문서화된다.**
|
|
345
|
+
|
|
346
|
+
⇒ 이 표에 대한 진단 질문이 하나 생긴다: **«우리가 매일 하고 있는데 여기 적혀 있지 않은 것은
|
|
347
|
+
무엇인가»** — 없는 것을 찾는 게 아니라 **있는데 너무 흔해서 안 세는 것**을 찾는 물음이다.
|
|
348
|
+
`[[feedback_reinvention_reflex_normalization_counterweight]]` 의 사촌이되 반대 극이다: 저쪽은
|
|
349
|
+
낯선 것을 익숙한 것으로 접는 반사고, 이쪽은 **익숙한 것을 아예 항목으로 세지 않는 반사**다.
|
|
350
|
+
|
|
351
|
+
**난이도 순서가 등급을 설명한다(정합성 확인).** 운영자: *"인큐베이터는 이 부스팅보다
|
|
352
|
+
어렵기에(**없는 걸 만드는 자리니까**) 초록이 되기까지 오래 걸린 거였고."* ⇒ 있는 것을 빠르게
|
|
353
|
+
하는 일(Ⓑ) < 없는 것을 만드는 일(②). 그러므로 **Ⓑ 가 🟢 이고 ② 가 🔵 RC 인 것은 이상이
|
|
354
|
+
아니라 예상되는 순서다.** 만약 반대였다면 둘 중 하나의 등급을 의심해야 했다.
|
|
355
|
+
|
|
356
|
+
**명명이 평행한 것은 우연이 아니다 — 두 행의 유닛 범위가 같기 때문이다(운영자, 2026-08-16).**
|
|
357
|
+
② 가 「하네스 인큐베이터」가 아니라 **「프로젝트 인큐베이터」**인 이유가 *"하네스를 인큐베이팅하기
|
|
358
|
+
위한 것도 있지만 **스킬이나 에이전트도** 인큐베이팅하기 위해 더 큰 틀로 프로젝트라 명명한 것"*
|
|
359
|
+
이고, *"하네스 형태가 아니더라도 **프로젝트 레포**를 만들어 줄 수도 있"*다. 부스터도 같은 범위를
|
|
360
|
+
다루므로 **「프로젝트 부스터」**다. 초판이 「하네스 부스터」로 적은 것은 ② 를 「하네스를 낳는다」로
|
|
361
|
+
좁게 적은 것과 **같은 실수**이며, 같은 자리에서 두 번 났다.
|
|
362
|
+
|
|
363
|
+
```
|
|
364
|
+
유닛 난이도 사다리 (두 행 공통)
|
|
365
|
+
일반 프로젝트 레포 < 스킬 < 에이전트 < 하네스
|
|
366
|
+
↑ 쉽다 ↑ 가장 어렵다
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
**⇒ 등급 판정 규칙(운영자): «하네스까지 도달해 있으면 이미 초록이다».** 하네스가 사다리 꼭대기라
|
|
370
|
+
거기 닿았다는 것은 아래 단계를 이미 통과했다는 뜻이다.
|
|
371
|
+
🟥 **이 사다리는 «하네스까지 할 수 있습니다»이지 «하네스만 가능하다»가 아니다**(운영자, 2026-08-16).
|
|
372
|
+
포함 관계이지 배타가 아니다 — 하네스에 도달하려면 **그 전까지의 모든 것이 가능해야** 하므로,
|
|
373
|
+
꼭대기 칸의 실적은 아래 칸들의 실적을 **함께 주장한다**. 그래서 Ⓑ 의 🟢 은 «하네스를 부스팅한다»가
|
|
374
|
+
아니라 **«일반 레포부터 하네스까지 부스팅한다»**로 읽어야 하고, 반대로 아래 칸 실적만 있는 상태를
|
|
375
|
+
꼭대기 실적으로 올려 읽어서도 안 된다. 이 자로 두 행을 같이 재면 현재 등급이
|
|
376
|
+
설명된다 — **Ⓑ 는 하네스 급 대상(pmh · gstack · mate)에서 실적이 있어 🟢**, **② 는 유일한 EMIT 이
|
|
377
|
+
사다리의 아래쪽 유닛이라 아직 🔵**. 두 행이 다른 등급인 것은 서로 다른 잣대를 써서가 아니라
|
|
378
|
+
**같은 사다리의 다른 칸에 도달했기 때문**이다.
|
|
379
|
+
|
|
380
|
+
**기전(운영자 비유)**: *"실무자도 사회초년생을 가르치는 자보다 **3년 이상 실무한 사람을 옆에서
|
|
381
|
+
부스팅**해주는 게 훨씬 쉬운 것과 마찬가지."* 3년차에게는 이미 판단·맥락·도는 루프가 있어
|
|
382
|
+
**지렛대를 대면 된다**. 신입에게는 그 엔진 자체를 **만들어 줘야** 한다. 부스터는 전자, 인큐베이터는
|
|
383
|
+
후자다.
|
|
384
|
+
|
|
385
|
+
🟥 **그래서 이 행이 실제로 주장하는 범위는 좁게 적어야 한다.** 부스터의 난이도는 **대상의
|
|
386
|
+
성숙도에 반비례**하고, 위 실적의 대상은 **전부 이미 도는 개발 과정을 가진 하네스**였다(pmh ·
|
|
387
|
+
gstack · mate · 조직 환경 2건 — 어느 것도 무에서 시작하지 않았다). 그러니 이 🟢 은 «성숙한
|
|
388
|
+
엔진에 지렛대를 댔다»에 대한 초록이지 «무에서 길렀다»에 대한 초록이 아니다 — 후자는 ②의
|
|
389
|
+
자리이고 ②는 아직 🔵 다.
|
|
390
|
+
⇒ 승급 기준 4로 승격: **실적을 셀 때 대상의 성숙도를 같이 기록한다.** 안 그러면 «하네스 6개를
|
|
391
|
+
부스팅했다»가 «도는 엔진 6개를 가속했다»와 «6개를 무에서 길렀다» 사이에서 **어느 쪽인지 모르는
|
|
392
|
+
숫자**가 된다. 지금까지의 실적은 전부 전자이며, 그렇게 적는다.
|
|
393
|
+
|
|
394
|
+
⚠️ **③ 과 ④ 는 이 아래로 넣지 않았다 — 운영자가 그 둘을 말하지 않았고, 내가 대신 정할 일이
|
|
395
|
+
아니다.** 잠정 관찰만 남긴다: ③ 거버넌스 게이트는 부스팅을 *포함한* 모든 행위가 통과하는
|
|
396
|
+
품질 바닥이라 하위라기보다 **직교**로 보이고, ④ 프런티어→조직 전파는 대상이 하네스가 아니라
|
|
397
|
+
조직이라 **다른 축**일 수 있다. 둘 다 운영자 판단 대기이며, 그때까지 이 표에서 위치를
|
|
398
|
+
바꾸지 않는다.
|
|
399
|
+
|
|
400
|
+
⚠️ 그리고 **계보와 포함은 다른 관계다.** 운영자는 별도로 *"부스터로부터 모든 정체성이
|
|
401
|
+
발아했다"* 고도 말했는데, 그건 «부스터가 나머지를 포함한다»가 아니라 **«나머지가 거기서
|
|
402
|
+
나왔다»**다. 씨앗이 나무를 포함하지 않는다 — 각 행은 자기 승급 기준을 그대로 진다.
|
|
403
|
+
|
|
404
|
+
### §Ⓑ-genealogy — 그리고 계보상으로도 **첫 번째**다 (운영자, 2026-08-16)
|
|
405
|
+
|
|
406
|
+
운영자 원문: *"부스터로부터 모든 정체성이 발아했다고 보면 될 정도임."* 이 행이 표에 **늦게 추가된
|
|
407
|
+
것**은 발견 순서이지 계보의 순서가 아니다. 나머지 행들이 전제하는 것을 보면 이유가 보인다:
|
|
408
|
+
|
|
409
|
+
- **① 하네스 클러스터**는 *클러스터할 남의 하네스가 존재하고 연결돼 있어야* 성립한다. 그 하네스들이
|
|
410
|
+
존재하고 연결된 경위가 부스팅이다. pmh 는 이 경로에서 **출발했다**.
|
|
411
|
+
- **② 인큐베이터**가 방출한 것은 방출로 끝나지 않는다 — 길러진다. 그 기르는 행위가 부스팅이다.
|
|
412
|
+
- **⑤ 증폭자**는 사람의 의도를 벼리고, 부스터는 그렇게 벼려진 것을 **다른 하네스에 실어 나른다**.
|
|
413
|
+
|
|
414
|
+
🟥 **그래서 이 행의 부재가 비쌌다.** 등급표는 FH 가 자기를 감사하는 계기인데, 계보상 첫 번째인 기능에
|
|
415
|
+
행이 없으면 그 기능은 매 감사에서 **구조적으로 시야 밖**이다. 2026-08-16 pmh 실측(이식 자산이 대상
|
|
416
|
+
환경에서 죽어 있었고 몇 달간 안 보였음)은 그 사각의 청구서다.
|
|
417
|
+
|
|
418
|
+
⚠️ **여기서 «모든 정체성이 부스터에서 나왔다»를 «부스터가 나머지를 포함한다»로 읽지 마라.** 계보와
|
|
419
|
+
포함은 다른 관계다. 씨앗이 나무를 포함하지 않는다 — 각 행은 자기 승급 기준을 그대로 진다.
|
|
420
|
+
|
|
421
|
+
### §Ⓑ promotion criteria — 이 행이 지킬 것
|
|
422
|
+
|
|
423
|
+
🟢 로 신설됐으므로 이 절은 «어떻게 올라가나»가 아니라 **«무엇이 이 행을 내릴 수 있나»**를 적는다.
|
|
424
|
+
잔여가 닫히는 조건이자, 다음 감사가 이 행에 물어야 할 질문이다.
|
|
425
|
+
|
|
426
|
+
1. **이식 발화 검사 (핵심 잔여, 미구축).** 부스팅이 대상 하네스에 자산을 이식했을 때, 그 자산이
|
|
427
|
+
**대상 환경에서 실제로 발화하는가**를 재는 계기가 없다. 2026-08-16 의 실패 형태가 정본이다:
|
|
428
|
+
저자 레포에는 있고 대상 레포에는 없는 전제(여기서는 npm 표면)를 자산이 조용히 깔고 있었고,
|
|
429
|
+
**저자 환경에서는 31/31 초록**이었다. ⇒ 판정은 **대상 환경에서** 이뤄져야 한다. 판별선은
|
|
430
|
+
`harness_incubator_doctrine.md §3-b` 의 것을 그대로 쓴다 — **«아무것도 하기 전에 죽는다»(rc=1)**
|
|
431
|
+
와 **«돌았고 타입 있는 verdict 를 낸다»(HARNESS_ERROR)** 는 다른 상태다.
|
|
432
|
+
2. **가속과 오염을 가른다.** 부스팅은 **자산을 이식하는 행위**라, 이식되는 것에는 저자 하네스의
|
|
433
|
+
결함도 같이 실린다. 이 행의 실적은 «몇 개를 이식했나»가 아니라 «이식된 것이 **거기서** 도나»로
|
|
434
|
+
센다. 전자는 활동량이고 후자만 결과다.
|
|
435
|
+
3. **조직 환경 실적은 증언으로 남고 측정으로 세지 않는다.** residency 때문에 이 파일에서 검증할 수
|
|
436
|
+
없고, 검증 못 하는 것을 숫자에 넣으면 그 숫자 전체가 못 쓰게 된다.
|
|
437
|
+
|
|
289
438
|
### ② promotion criteria — and what the criteria themselves turned out not to be able to check
|
|
290
439
|
|
|
291
440
|
②'s 🟡 has been re-argued on different grounds each round, every round re-deriving the bar from scratch.
|
|
@@ -318,7 +467,98 @@ unreachable condition, which is the shape that trains people to delete the thing
|
|
|
318
467
|
|
|
319
468
|
| | Condition | Check class | Status |
|
|
320
469
|
|---|---|---|---|
|
|
321
|
-
| **P1** | An EMIT run leaves an ordering record that does not depend on trusting the author — the intent/budget/sim record committed, hashed, or otherwise witnessed **outside** the gitignored workspace, before the verdict | mandatory-pass | **channel
|
|
470
|
+
| **P1** | An EMIT run leaves an ordering record that does not depend on trusting the author — the intent/budget/sim record committed, hashed, or otherwise witnessed **outside** the gitignored workspace, before the verdict | mandatory-pass | **channel exists (2026-08-08)** — `scripts/chamber_witness.sh`, wired into `chamber_run.sh` steps 2–5. 🟥 **and it was UNSATISFIABLE until 2026-08-17 — by construction, not by strictness.** See §P1-2026-08-17 below. **Still unsatisfied**: no run holds a witness yet |
|
|
471
|
+
|
|
472
|
+
<a name="p1-20260817"></a>
|
|
473
|
+
**§P1-2026-08-17 — 첫 형식 완주가 이 조건이 «도달 불가능»이었음을 실측했다. 수리했고, 그 사실을 남긴다.**
|
|
474
|
+
|
|
475
|
+
챔버 런 **#11**(`persona-simulator-harness`, KILL)은 이 채널을 **처음으로 끝까지** 태운 런이다.
|
|
476
|
+
그리고 완주하자마자 `verify` 가 **`TAMPERED — 증인 무효`** 를 냈다. 기전은 추측이 아니라 코드다:
|
|
477
|
+
|
|
478
|
+
```
|
|
479
|
+
step 3 BUDGET.md(ESTIMATE)의 해시를 증인 원장에 기록 ← 사전등록 증인
|
|
480
|
+
step 5 verdict 기록
|
|
481
|
+
step 6 BUDGET.md 에 ^ACTUAL: 을 요구하며 하드 차단(exit 1) ← 그 파일을 변경하도록 강제
|
|
482
|
+
verify 기록된 해시 ≠ 현재 파일 → TAMPERED
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
⇒ **COMPLETE 에 도달하려면 반드시 증인 아티팩트를 사후 변경해야 했다. 우회로가 없었다.**
|
|
486
|
+
즉 P1 은 «완주한 런»으로 만족이 불가능했고, 그것이 ②가 🔵 였던 **기계적** 이유다 — 후보가
|
|
487
|
+
부족해서가 아니다. 이 절이 2026-08-08 에 *"unreachable condition … trains people to delete the
|
|
488
|
+
thing being counted"* 라고 경고한 그 형태가, **그 경고를 적은 채널 자신에서** 재발했다.
|
|
489
|
+
|
|
490
|
+
**대상 선정 실수가 아니다.** P1 문언이 *"the **intent/budget**/sim record"* 로 BUDGET 을 증인
|
|
491
|
+
대상으로 **명시 지목**한다. 결함은 **한 파일에 두 역할이 겹친 것**이다 — ①불변을 요구하는 증인 ·
|
|
492
|
+
②변경을 요구하는 사후 캘리브레이션. **개별로는 둘 다 옳고, 충돌은 아무도 소유하지 않는다.**
|
|
493
|
+
그래서 어느 쪽 코드를 읽어도 안 보였고, 정적 판독은 양쪽 다 초록으로 읽힌다.
|
|
494
|
+
|
|
495
|
+
**왜 기존 검증이 다 놓쳤나 — 이게 남길 값의 본체다.**
|
|
496
|
+
- `test_chamber_run_lanes.sh` 는 헤더에 *"순서 증인은 이 테스트의 대상이 아니다 — 부수 효과가
|
|
497
|
+
섞이므로 복사하지 않는다"* 라고 **명시적으로 증인을 제외**했다.
|
|
498
|
+
- `chamber_witness.sh --self-test` 16레인은 증인을 **단독으로** 시험했다(cross-family 가 fail-open
|
|
499
|
+
7건을 잡은 그 레인들이다).
|
|
500
|
+
- ⇒ **러너 × 증인의 이음매를 어느 쪽도 안 봤다.** 두 테스트 다 자기 범위에선 옳았다.
|
|
501
|
+
- 그리고 러너 픽스처 `_mk_budget()` 이 `ESTIMATE:\nACTUAL: -` 를 **한 번에** 써서, 12레인 어디에도
|
|
502
|
+
«추정→실행→실비용» 이라는 **실제 순서가 존재하지 않았다.** 픽스처가 *상태*를 모델링했고 결함은
|
|
503
|
+
*과정*에 있었다. `[[feedback_adversarial_review_not_substitute_for_first_use]]` 의 교과서 사례다.
|
|
504
|
+
|
|
505
|
+
**수리(2026-08-17)** — 스펙은 안 건드리고 **변경 요구만** 빼낸다:
|
|
506
|
+
- `chamber_run.sh` step 6 → **별도 `ACTUAL.md`**. 정의상 판정 후 산물이므로 **증인에 기록하지 않는다.**
|
|
507
|
+
- `chamber_witness.sh do_record` → 동일 `(run, artifact, sha)` 삼중항 재기록 스킵. 종전엔 무조건
|
|
508
|
+
append 라 4스텝 런에 엔트리 **11개**가 쌓였다(판정은 안 틀리나 공개 tracked 파일이 부풀고 verify
|
|
509
|
+
출력이 같은 줄을 반복해 **읽는 사람이 「몇 건이 문제인가」를 오독**한다). 🟥 **내용이 바뀐 경우는
|
|
510
|
+
여전히 새 엔트리로 남는다** — 그게 TAMPERED 를 성립시키는 증거다.
|
|
511
|
+
- `test_chamber_run_lanes.sh` **12 → 26레인**. 신설 축은 **이음매**이고, 어서션이 두 겹이다:
|
|
512
|
+
**L13-a**(완주 후 BUDGET.md 해시 불변) + 🟥 **L13-b**(step 6 이 **지목하는 파일**이 증인 대상이
|
|
513
|
+
아닐 것). L13-b 가 본체다 — **러너는 BUDGET.md 를 직접 고치지 않고 사람에게 고치라고 시키므로**,
|
|
514
|
+
파일 해시만 보는 L13-a 는 되돌림 프로브에서 **초록으로 남았다**(즉 그것만으로는 장식이었다).
|
|
515
|
+
잴 것은 파일이 아니라 **지시**였다. 되돌림 실측: `git show HEAD:` 판으로 되돌리면 L13-b 가
|
|
516
|
+
적색(`step6 이 증인 아티팩트를 고치라고 시킨다`), 컨트롤은 초록 유지.
|
|
517
|
+
|
|
518
|
+
### 🟥 §P1-2026-08-17-b — 그리고 그 수리로도 아직 부족했다. **커밋을 합치는 모든 경로가 증인을 죽인다**
|
|
519
|
+
|
|
520
|
+
런 #12(`prosody-lens`, KILL)가 수리 후 첫 런이었고, TAMPERED 는 사라졌으나 **`UNORDERED`** 가 나왔다.
|
|
521
|
+
판정 코드가 이유를 명시한다 — `chamber_witness.sh do_verify`:
|
|
522
|
+
|
|
523
|
+
```bash
|
|
524
|
+
# 주석 원문: "같은 커밋(또는 같은 초)에 들어온 verdict 는 «먼저» 를 증명하지 못한다"
|
|
525
|
+
if [ "$verdict_ts" -le "$pre_max_ts" ]; then # ← -le. 같은 «초» 도 실패
|
|
526
|
+
echo "UNORDERED — verdict 가 pre-verdict 아티팩트보다 먼저이거나 같은 시점에 커밋됐다."
|
|
527
|
+
return 1
|
|
528
|
+
fi
|
|
529
|
+
```
|
|
530
|
+
이건 의도된 설계다(초판이 `-lt` 라 same-second 역순을 통과시켰고 cross-family 가 잡았다).
|
|
531
|
+
문제는 **그 조건을 만드는 경로가 이 레포의 표준 절차 안에 셋이나 있다**는 것이다:
|
|
532
|
+
|
|
533
|
+
| 경로 | 실측 |
|
|
534
|
+
|---|---|
|
|
535
|
+
| **P-a `--squash` 머지** | 런 #11 은 브랜치에서 게이트/verdict 를 **따로** 커밋해 순서가 성립했다(`e86f796`→`f79cc05`→`852064b`). PR #414 를 squash 하자 **main 에서 원장을 건드린 커밋 = 1개** — 게이트 4 + verdict 가 전부 그 하나에 접혔다 |
|
|
536
|
+
| **P-b 저자가 한 커밋에 배치** | 런 #12 에서 4해시를 한 번에 커밋(`50ef761`) → 브랜치에서부터 UNORDERED. 실측 `verdict_commit=1786935355 latest_pre=1786935355` |
|
|
537
|
+
| **P-c `--delete-branch`** | 순서를 담은 커밋이 도달 불가가 된다(런 #12 의 첫 증인 커밋이 그렇게 됐다) |
|
|
538
|
+
|
|
539
|
+
🟥 **정정**: 위 §P1-2026-08-17 을 *"P1 이 만족 가능해졌다"* 로 읽지 마라. 정확히는
|
|
540
|
+
**피처 브랜치에서 만족 가능하고, 이 레포가 의무화한 squash 머지가 main 에서 그것을 파괴한다.**
|
|
541
|
+
|
|
542
|
+
**채택된 처방 ⓐ (운영자 결정 2026-08-17) — 정책 변경 0**:
|
|
543
|
+
> **게이트 해시와 verdict 해시를 두 PR 로 분리한다.** 각각 squash 해도 main 에 **2커밋**이 남아
|
|
544
|
+
> 순서가 보존된다. 저자 규율이 따라온다 — **게이트 커밋과 verdict 커밋을 절대 합치지 않는다**(P-b 차단).
|
|
545
|
+
|
|
546
|
+
**배선**(산문으로 안 남긴다): `chamber_run.sh` 가 **행위자가 읽는 자리에서** 이 규율을 인쇄한다 —
|
|
547
|
+
게이트 기록 시 «verdict 보다 먼저, 별도 커밋으로», verdict 기록 시 «게이트 해시들과 **다른 커밋**»,
|
|
548
|
+
그리고 UNORDERED 일 때 세 경로를 이름으로 열거. 앵커는 `test_chamber_run_lanes.sh` **L15/L15b/L15c**
|
|
549
|
+
(33레인) — 🟥 **그 레인이 생긴 이유는 러너가 틀린 처방을 가르치고 있었기 때문이다**:
|
|
550
|
+
*"원장 해시를 커밋한 뒤 재실행하면 증인이 성립한다"* — 한 커밋에 넣으면 성립하지 않는다.
|
|
551
|
+
**게이트 문구는 «막는가»만이 아니라 «옳은 것을 가르치는가»도 재야 한다**
|
|
552
|
+
(`[[feedback_gate_prescription_is_unverified]]`, 2026-08-17 3번째 사례).
|
|
553
|
+
|
|
554
|
+
⚠️ **런 #11 자신은 TAMPERED 로 남는다. 소급 수리하지 않는다** — 과거 9런을 back-fill 하지 않는 것과
|
|
555
|
+
같은 이유다(사후에 쓴 기록은 증명하지 않는다). **P1 은 이 수리 이후의 EMIT 런에서 처음 만족 가능하다.**
|
|
556
|
+
🟥 그리고 이 수리는 **P1 을 만족시키지 않는다** — 만족을 *가능하게* 만들 뿐이다. ②는 🔵 유지.
|
|
557
|
+
|
|
558
|
+
⚠️ **되돌림 프로브 자체에서 실책 1건(기록)**: 첫 시도가 `sed` 로 따옴표 포함 패턴만 바꿔 **검사는
|
|
559
|
+
BUDGET, 메시지는 ACTUAL 인 잡종**을 만들었고, 그 상태에서 L13-b 가 초록이라 하마터면 «레인이
|
|
560
|
+
장식이다»로 결론 낼 뻔했다. 되돌림은 **`git show HEAD:` 로 통째 복원**해야 한다 — 부분 되돌림은
|
|
561
|
+
되돌림이 아니다.
|
|
322
562
|
|
|
323
563
|
**P1's channel was built, and that is not the same as P1 passing.** The row above said *not buildable
|
|
324
564
|
today*; that is no longer true, and the reason it was true is worth keeping because it names the shape of
|
|
@@ -2080,3 +2080,105 @@
|
|
|
2080
2080
|
outcome: accepted
|
|
2081
2081
|
evidence: "1M/4S/2R. 챌린저와 중첩 2건뿐(rc=10 fail-open · 사전순 정렬) — 렌즈가 계열보다 갈랐다. 단독 적발 3건: package.json files[] 누락 · 비UTF8 바이트에서 grep 무매치하는 로케일 fail-open(양쪽 로케일 직접 실행) · 파일스코프 set -e 판별. 그리고 의심 하나를 기각(§ 구분자는 두 로케일에서 실측 통과)"
|
|
2082
2082
|
cost: 105k tokens
|
|
2083
|
+
- date: 2026-08-17
|
|
2084
|
+
agent: fh-meta:beginner (isolated) — 챔버 런 #11 step-4 블라인드 페르소나 1/3
|
|
2085
|
+
purpose: "인물 시뮬레이터 하네스 후보에 대한 냉담 첫 접촉 — 첫 실패 지점·믿을 이유·이해 불가 지점"
|
|
2086
|
+
outcome: accepted
|
|
2087
|
+
evidence: "tool_uses 8(실독 확인 — 어제 sim 8회 tool_uses:0 죽은 컨트롤의 반대). 최대 소득 = 첫 기계적 실패가 크래시가 아니라 무음 통과라는 지목: grounding_gate_v3.py:88-93 _KNOWN_BOOKS 가 'Book Ch:Vs' 주소 문법에 하드코딩이라 임의 인물 코퍼스에선 빈 셋 → 오귀속 검출 b1/b2 가 초록으로 통째 우회. 🟥 최강 발견 1건은 VOID(stale 체크아웃에 조준한 내 계기 결함 — personas_dialogue.json 이 반증). 부재를 0으로 안 렌더한 덕에 그 결함이 드러났다"
|
|
2088
|
+
cost: 102k tokens
|
|
2089
|
+
- date: 2026-08-17
|
|
2090
|
+
agent: fh-meta:main-player (isolated) — 챔버 런 #11 step-4 블라인드 페르소나 2/3
|
|
2091
|
+
purpose: "실사용자 일상 가치 — 티어 선정 후 매일 쓸 값어치가 있는지, 게이트가 값인지 방해인지"
|
|
2092
|
+
outcome: accepted
|
|
2093
|
+
evidence: "tool_uses 9. 핵심 숫자 = 사용 장면 0/3 생존(2 기존수단 대체 · 1 자기 게이트가 금지). 그리고 Light↔Heavy 구조적 상충(게이트 ON→Light 사망 / OFF→Heavy 유일 값 소멸)이 튜닝으로 못 푸는 것임을 코드 주석(v3:233-234 'PARAPHRASE over-blocks … err-safe direction')으로 근거화. Midcore 스킵을 자백하고 '이 스킵이 판정의 최약 고리'라고 스스로 적음. 결론 'KILL the simulator · EMIT the attribution gate'"
|
|
2094
|
+
cost: 102k tokens
|
|
2095
|
+
- date: 2026-08-17
|
|
2096
|
+
agent: fh-meta:challenger (isolated) — 챔버 런 #11 step-4 블라인드 페르소나 3/3
|
|
2097
|
+
purpose: "배출 후보 적대 심사 — 핵심 술어 성립성·재발명·배출가치·실패비용·안 보이는 것"
|
|
2098
|
+
outcome: accepted
|
|
2099
|
+
evidence: "tool_uses 22, 자체 컨트롤 부착(같은 Glob 이 battery4.py·normalization.py 는 잡음 → 계기 생존 증명). 🟥 거버너 사각 2건 적발: EMIT 이 이미 내려진 운영자 결정(출하 없음)과 정면 충돌 · Delphi 가 미승인 Peter Attia 클론을 실제 테이크다운(카파시와 동일 프로파일). 최대 기여 = 술어가 '더 어렵다'가 아니라 '목적과 상충'임을 코드로(grounding_gate.py:317-332). 팬텀 4건은 VOID(stale 체크아웃)이나 본인이 '원인 MED, stale 가능성 배제 못 함'이라고 선제 자백 — 등급 자기하향이 판정 신뢰도를 올렸다"
|
|
2100
|
+
cost: 117k tokens
|
|
2101
|
+
- date: 2026-08-17
|
|
2102
|
+
agent: general-purpose (isolated) — 챔버 런 #11 조건 1(net-new) measured 스캔
|
|
2103
|
+
purpose: "외부 생태계 + FH 내부 자산 전수 스캔으로 재발명 여부를 측정. '없는 것 같다'는 결과가 아니라고 명시 지시"
|
|
2104
|
+
outcome: accepted
|
|
2105
|
+
evidence: "tool_uses 28(WebSearch 12 · WebFetch 3 · 로컬 SKILL 4종 정독). 🟥 이 런의 KILL 을 가른 계기이고, 유일하게 stale-체크아웃 결함의 영향 밖이다(the-bible 은 '안 열었다'고 자백). ⓐ=Delphi.ai 상용 + verbatimeter(--fail 비영종료 CI 게이트) + 내부 corpus-grounding-expander · ⓒ=NeMo Guardrails + 내부 persona_container_schema.md 4그룹 tier-floor · ⓑ만 빈칸인데 그건 배출물이 아니라 업계 미해결 난제. 선행연구 PersonaCite(CHI 2026 EA) 가 후보 루프와 동형. 미탐 자백 6종(영어 전량·Delphi 실계정 미검증·GitHub code search 미실시 등)을 스스로 열거"
|
|
2106
|
+
cost: 157k tokens
|
|
2107
|
+
- date: 2026-08-17
|
|
2108
|
+
agent: codex/gpt-5.5 (cross-family, headless) — 챔버 P1 증인 수리 델타 Axis 2 탈상관
|
|
2109
|
+
purpose: "chamber_run.sh/chamber_witness.sh/test_chamber_run_lanes.sh 197줄 diff 를 다른 계열로 공격. crossfamily 마커 값 확보(하중 변경 — 게이트 exit 동작 + 증인 판정)"
|
|
2110
|
+
outcome: accepted
|
|
2111
|
+
evidence: "7건(A급3·B급4) · **자력 적발 0/7**. A급 전부 손 재현 후 수리 — ⓐ 멱등 가드 `substr($0,9)` 오프셋(`- run: `는 7자, 값은 8부터): 슬러그 첫 글자가 잘려 **어떤 정상 엔트리와도 매칭 안 됨** = 가드가 조용히 무력인데 30레인 전부 초록이었다(재현: `printf -- '- run: g2\\n' | awk '{print substr($0,9)}'` → `2`) ⓑ L11 이 «멱등»을 잰다면서 증인 원장이 아니라 G4 INDEX.md 를 셌다 → L14 신설(증인 실제 복사 후 2회 기록) ⓒ L13-b 가 `step 6 BLOCKED` 한 줄만 grep 해 뒤에 한 줄 더 붙이면 게임 가능 → 차단 블록 전체로 확대. B급 4 중 3 채택(인접성 상태기계 · 리터럴→호출 인자 **집합 대조** · 거짓 주석 정정), 1건 수용(레거시 런이 시끄럽게 막히는 건 안전 방향). 🟥 그리고 **내 주석 하나가 거짓임을 지적**했다(레인이 증인을 복사한다고 적었는데 `grep -c 'cp .*chamber_witness'`=0). 미탐 자백: bash 3.2/BSD·GNU 이식성 구체 결함 0건 — 공백 아티팩트명은 상류에서 이미 거부되어 도달 불가라고 근거까지 댔다"
|
|
2112
|
+
cost: 50k tokens
|
|
2113
|
+
- date: 2026-08-17
|
|
2114
|
+
agent: general-purpose (isolated) — axes-run 4축→6축 조사·설계안
|
|
2115
|
+
purpose: "마커 스펙 정본 위치 · 훅이 실제로 강제하는 것 · 6축 대응표 · 기존 마커 실측 · 마이그레이션 설계안 3개. 파일 수정 금지(read-only)"
|
|
2116
|
+
outcome: accepted
|
|
2117
|
+
evidence: "tool_uses 21. 🟥 승인의 전제를 반증한 것이 최대 기여 — 「기존 마커 전량 무효화」가 거짓이고 훅은 `.axes_23_passed_{branch}_{TODAY}.marker` 한 개만 검증한다(pre-commit:906 인용). 실측 190건 중 차단 0 · 재해석 51. 그리고 스펙 정본이 **어느 rule 파일에도 없다**는 것(grep 0건)을 지목해 §Marker axis fields 신설로 이어졌다. 자기 미확인 3건을 스스로 열거(08-10 자 기호 마커 2건이 어떻게 통과했는지 · 기호 grep 이식성 · 다른 소비자 영향)"
|
|
2118
|
+
cost: 168k tokens
|
|
2119
|
+
- date: 2026-08-17
|
|
2120
|
+
agent: general-purpose (isolated) — deepteam 업스트림 이슈 준비
|
|
2121
|
+
purpose: "전달본 §DELIVERABLE 정리 + 채널 기계 확인 + 이슈 템플릿/라벨 조사 + 사생활 스캔. 게시 금지(read-only)"
|
|
2122
|
+
outcome: partial
|
|
2123
|
+
evidence: "tool_uses 14. 채널을 기계로 확정(hasDiscussionsEnabled=false / hasIssuesEnabled=true, 출력 인용) — 운영자 서술을 맞춰준 게 아니라 확인했다. 전달본이 `sentry_sdk` 누락을 「the one genuinely actionable thing」으로 단정한 것을 코드검색 hit 0 근거로 격하 권고. 🟥 **그 권고가 뒤집혔다** — 검색 대상이 `main` 이었고 설치되는 건 릴리스 1.0.9 다. 깨끗한 venv 실측에서 `import deepteam` 이 실제로 죽었고(telemetry.py:7), 이슈는 사용노트가 아니라 **버그 리포트**로 게시됐다(#263). 정적 검색이 「없다」고 하고 실행이 「있다」고 한 형태 — partial 로 기록"
|
|
2124
|
+
cost: 107k tokens
|
|
2125
|
+
- date: 2026-08-17
|
|
2126
|
+
agent: general-purpose (isolated) — ⓓ 3자대면(날짜 컷오프 마이그레이션 선례 대조)
|
|
2127
|
+
purpose: "「날짜 컷오프 + 표기법이 스키마 버전을 나른다」가 남의 코드베이스에 알려진 패턴인가 안티패턴인가. 반증 기회로 돌릴 것을 명시 지시"
|
|
2128
|
+
outcome: accepted
|
|
2129
|
+
evidence: "tool_uses 2(WebSearch/WebFetch 중심). 🟥 **내 명제 2건을 반증했다** — ⓐ 「표기법이 배열을 선언한다」가 거짓(코퍼스 손 카운트: axes-run 53건 중 기호 4·혼용 1, 기호 4 중 2건이 08-10 자 옛 4축 의미) ⓑ 날짜 컷오프가 프로덕션 도달 불가 분기(호출부가 ${TODAY} 로 경로 구성). 둘 다 내가 재현 확인. 선례 3계열을 URL 근거로 제시(SonarQube new-code-period · PNG 청크 암묵버전 + 그 전제 문장 · git repositoryFormatVersion 3단 롤아웃 · protobuf 필드번호 재사용금지). 「찾지 못함 ≠ 없다」를 스스로 구분해 적음"
|
|
2130
|
+
cost: 136k tokens
|
|
2131
|
+
- date: 2026-08-17
|
|
2132
|
+
agent: general-purpose (isolated) — qasp-dev 입장리뷰(정적+동적)
|
|
2133
|
+
purpose: "전파 자산(pre-commit) 변경에 대한 standpoint 축. 훅 부재 가설을 실행으로 검증 + qasp 자기 정본 독해. 실물 레포 불변"
|
|
2134
|
+
outcome: accepted
|
|
2135
|
+
evidence: "tool_uses 19. 임시 클론에서 git commit 8회, **양방향 컨트롤**(스텁 훅 rc=1 / 실구성 rc=0 · hooksPath unset 시 폴백 rc=1)로 pre-commit 부재 확정. 🟥 **내 프레이밍을 규범적으로 반증** — 「게이트 부재 = S급 결함」이 아니다(qasp 정본 «4축 비적용» + FH 정본 «NEVER installed into field projects», 양쪽 일치). 내가 세운 「.new.NNNNN = 설치 중단 흔적」 가설도 반증(rename 단계 부재, mv 는 폐기된 옛 설계). 부산물로 FH 자기 기록 2건 오진 발견(08-03 철회 후 08-10 재발). 등급 tier2(qasp-dev)"
|
|
2136
|
+
cost: 146k tokens
|
|
2137
|
+
- date: 2026-08-17
|
|
2138
|
+
agent: general-purpose (isolated) — pmh-dev 동적 입장리뷰(tier2)
|
|
2139
|
+
purpose: "6축 전파가 pmh-dev 에서 무엇을 깨는가. 임시 클론에 이식 후 실제 커밋 양팔. 실물 레포 불변"
|
|
2140
|
+
outcome: accepted
|
|
2141
|
+
evidence: "tool_uses 43. 🟥 **자기 방법론 사고를 자백하고 전량 재실행** — 1차가 움직이는 FH 워킹트리를 소스로 써서 중간 측정이 설명 불가능한 값을 냈다(훅 1414줄). `git show a15e384:<path>` 로 동결 후 재실행하고 매 실행마다 계기 적재를 diff 로 대조(IDENTICAL). 커밋 4팔 exit 1/1/0/0 + 되돌림 컨트롤로 귀속 확인. 신규 FAIL 0(기준선 35=전파 후 35) · 기존 마커 42건 재판정 0 · LC_ALL=C sed remap 유니코드 무손상(바이트 IDENTICAL). **내 델타 안의 결함 2건 적발** — 픽스처 헤더가 기호 표기로 옛 4축 의미를 가르침 + selfcheck 주석 stale. 범위 밖 관측 2건을 미확인으로 분리 기재"
|
|
2142
|
+
cost: 180k tokens
|
|
2143
|
+
- date: 2026-08-17
|
|
2144
|
+
agent: codex/gpt-5.5 (cross-family sidecar, headless)
|
|
2145
|
+
purpose: "출하 배선 + axes-run 6축 델타 309줄에 대한 적대 리뷰. 공격 지점 6개를 명시 지정"
|
|
2146
|
+
outcome: accepted
|
|
2147
|
+
evidence: "8건 지적(S2·A3·B3). 그중 2건(혼용 오탐 · 화살표 fail-open)은 내가 투입 전 자력 수리했고 codex 가 독립으로 같은 지점을 지목해 수렴 확인 — 그 둘은 「둘 다 봤다」. **나머지 5건 자력 적발 0**: grep 이 주석 처리된 호출에 매칭(S) · if:false 로 꺼진 잡(S) · 트리거 미검사(A) · 잡 신원 미검사(A) · 마커 파일명 날짜 추출 fail-open(B, 선재). 각 지적에 깨뜨리는 입력을 구체적으로 제시해 손 재현이 즉시 가능했다"
|
|
2148
|
+
cost: 85k tokens
|
|
2149
|
+
- date: 2026-08-17
|
|
2150
|
+
agent: fh-meta:beginner (isolated) — 챔버 런 #12 step-4 블라인드 1/3 (낭독 렌즈)
|
|
2151
|
+
purpose: "「소리 내어 읽히는가」 계기 후보의 냉담 첫 접촉 — 정의가 서는가, 첫 실패 지점, ko-tech-writer 와의 겹침"
|
|
2152
|
+
outcome: accepted
|
|
2153
|
+
evidence: "tool_uses 3(실독). HARD 4/SOFT 2 · **첫 산출물 도달 실패**. 최대 소득 = *「소리 내어 읽힌다」의 예시 셋이 서로 다른 층이라 정의를 역추정하는 것조차 안 된다* — 번역투=어법층(소리 무관) · 호흡=글자수 · 운율만 소리. 🟥 **그 결함은 후보가 아니라 내 한 줄 요약이 갖고 있었다**(정본은 A~F 로 층을 갈라놨다). ko-tech-writer 대조로 Step 2(번역투 7클래스)·Step 2-b(리듬 수치 대조)를 줄번호로 짚음"
|
|
2154
|
+
cost: 112k tokens
|
|
2155
|
+
- date: 2026-08-17
|
|
2156
|
+
agent: fh-meta:main-player (isolated) — 챔버 런 #12 step-4 블라인드 2/3
|
|
2157
|
+
purpose: "실사용자 일상 가치 — 매일 쓸 층이 있는가, 별도 계기인가 한 스텝인가"
|
|
2158
|
+
outcome: accepted
|
|
2159
|
+
evidence: "tool_uses 4. 판정 **NO** — 장면 3/3 대체, 증명된 사용자 **n=1·월 3회**. 🟥 결정적 한 줄: *「후보의 known-positive 가 이미 남의 집에 있다」*(ko-tech-writer:84-90 의 124자 문장·어간 4연속 실측) — **픽스처가 남의 집에 있는 계기는 별도 계기가 아니다.** 그리고 한국어 기술문서 인구를 *「못 잡는다 — UNMEASURED 이지 크다도 작다도 아니다」* 로 **스스로 자백**해 판정 신뢰도를 올렸다. 진짜 구멍 지목: 낭독 대본 레지스터의 Step 5 N/A"
|
|
2160
|
+
cost: 106k tokens
|
|
2161
|
+
- date: 2026-08-17
|
|
2162
|
+
agent: fh-meta:challenger (isolated) — 챔버 런 #12 step-4 블라인드 3/3
|
|
2163
|
+
purpose: "배출 후보 적대 심사 — 술어 성립성·재발명·정답라벨·보이지 않는 것"
|
|
2164
|
+
outcome: partial
|
|
2165
|
+
evidence: "tool_uses 12, S 4건. **VALID**: S3(기계화 가능분은 이미 있는 스텝) · S4(표면지표 환원 시 **양방향 오탐**, known-negative 3건을 손으로 제작해 시연) · A3(정답 라벨 주체 부재, SKILL.md:235 «생성자=평가자 금지»). 🟥 **S2 는 거버너가 반증**: *「산출물 회수 불가, rg 낭독 tracks/ → no matches」* 의 repro 가 **재현 안 된다**(실측 12파일, 정본 신호 272줄 실재). S1(«양식 미도달»)은 과장 — 음절수·동음이의는 텍스트에서 계산되는 소리 속성. ⇒ **사이드카 발견은 소스로 닫히기 전엔 판정이 아니다**(오늘 2번째). 본인이 *「나도 스캐너를 안 돌렸고 나 역시 소리를 못 낸다」* 로 등급을 스스로 깎은 것은 신뢰도를 올렸다"
|
|
2166
|
+
cost: 131k tokens
|
|
2167
|
+
- date: 2026-08-17
|
|
2168
|
+
agent: general-purpose (isolated) — 챔버 런 #12 조건 1(net-new) measured 스캔
|
|
2169
|
+
purpose: "외부 생태계(한국어권 1순위) + 로컬 전수 스캔으로 재발명 여부 측정. 런 #11 의 자백된 사각(영어 전량)을 INTENT 가 필수 조건으로 박았다"
|
|
2170
|
+
outcome: accepted
|
|
2171
|
+
evidence: "tool_uses 27(WebSearch 12 중 **한국어 7** · GitHub API 15 · WebFetch 4 · 로컬 정독). 이 런의 KILL 을 가른 계기이고 **거버너의 프레이밍 오류 영향을 가장 덜 받았다**. ⓑ번역투 **포화** — 2026-06~08 3개월간 한국어 번역투 제거 스킬 **10+ 신설**(humanizer-ko 35패턴 등) · ⓒ처방형식은 이 분야 **기본값** · ⓐ운율만 외부 공백(GitHub 전체 `낭독` SKILL.md **1건=우리 미러**). 🟥 **결정적 근거를 찾았다** — harness_terminal_correlation:235-236 이 ko-tech-writer Step 2·4 를 이미 `UNCALIBRATED` 로 강등(Step 4 는 자기반증까지). 미탐 자백 7종을 스스로 열거(GitHub API 403 4쿼리 미실행 · 국립국어원 규칙목록 미개봉 · description 기준 판정 등)"
|
|
2172
|
+
cost: 152k tokens
|
|
2173
|
+
- date: 2026-08-17
|
|
2174
|
+
agent: codex/gpt-5.5 (cross-family sidecar) — qasp-dev #174 load-bearing 게이트 리뷰
|
|
2175
|
+
purpose: "게이트 exit enum·면제 경로 변경의 degrade-direction / bypass / 테스트 판별력 적대검증"
|
|
2176
|
+
outcome: partial
|
|
2177
|
+
evidence: "5건 지목, 전부 diff 인용 동반. **실행으로 갈랐다 — 2 반증 · 3 확인.** 🟥 반증 둘(깊은 `src/**/*.py`·중첩 `scripts/ci/*.sh` 가 샌다)의 근거 오류가 같다: **bash `case` 의 `*` 는 `/` 를 먹는다**(경로 글롭 semantics 로 읽음) — 실측 rc=1 로 둘 다 정상 차단. 확인 셋 중 **이 PR 이 새로 만든 것은 S1-c 하나**(sandbox 제외가 침묵, 종전 rc=4→rc=0 무흔적)이고 그것만 수리. 나머지 둘은 기존 결함·재발 0건이라 미착수. 테스트 판별력에서 되돌림 에이전트와 **갈렸고 코덱스가 옳았다**(파일명 substring 은 그 이름이 위반 목록에 실려도 참 → 보고 형태로 조임). ⇒ 사이드카 발견은 소스로 닫히기 전엔 판정이 아니다 — 이번엔 40% 가 틀렸다"
|
|
2178
|
+
cost: 68k tokens
|
|
2179
|
+
- date: 2026-08-17
|
|
2180
|
+
agent: general-purpose (isolated, sonnet) — qasp-dev #174 되돌림 프로브 ⓕ축
|
|
2181
|
+
purpose: "PR 이 추가한 테스트가 장식인지 실측 — 수리 4건 개별 되돌림 3단(적용확인→실행→복원) + substring 8행 판별력"
|
|
2182
|
+
outcome: accepted
|
|
2183
|
+
evidence: "tool_uses 25(계기 생존 — 카드가 경고한 `tool_uses: 0` 아님). **4/4 앵커 생존**, 매번 대응 레인만 적색(S1→2건·S2→1건·S3→2건·B1→known-pair 2건), 무관 25~28개는 통과 → 과결합 0. 복원 후 29 passed 재확인, 트리 clean. 🟥 substring 8행은 **전부 ✅ 로 판정했는데 코덱스와 갈렸고 이쪽이 졌다** — 「뚫리는 입력을 제시 못 함」을 판별력 있음으로 읽었으나, 그 단언이 *주장*하는 것(«범위 밖 보고가 났다»)은 파일명만으로 증명되지 않는다. **없음을 증명 못 함 ≠ 판별력 있음**"
|
|
2184
|
+
cost: 135k tokens
|
|
@@ -12,6 +12,18 @@ When a **sister asset** (another team in the organization · external frontier
|
|
|
12
12
|
- An external resource with **similar scope but different resolution** from a `knowledge/shared/` asset is found
|
|
13
13
|
- An external reference URL repeatedly appears in the weekly audit scanner aggregation
|
|
14
14
|
- User mentions "that other project/team also did this"
|
|
15
|
+
- 🟥 **ACTIVE ADOPTION — you went looking for an external asset, installed it, and RAN it** against
|
|
16
|
+
something this hub owns. Added 2026-08-16 because every condition above is **passive discovery**
|
|
17
|
+
("a resource *is found*"), and the strongest sister signal there is does not look like discovery
|
|
18
|
+
at all: deliberately reaching for an outside tool *because ours did not cover something* is a
|
|
19
|
+
measured resolution difference, not a hunch about one. **Measured miss**: an external red-team
|
|
20
|
+
framework was installed, run against a field harness's safety gate, and found a real bypass — and
|
|
21
|
+
none of it fired this protocol. It was filed in memory as `type: reference`, a **tool pointer**,
|
|
22
|
+
because "a tool I used" was an available and correct-looking category while "sister asset" was a
|
|
23
|
+
category no listed condition named. That is the normalization reflex `CLAUDE.md
|
|
24
|
+
§Envelope-Boundary Discipline` exists to counter, reproduced inside the protocol meant to catch it.
|
|
25
|
+
**The tell**: if you can answer *"what does it do that ours doesn't?"* — you have already done
|
|
26
|
+
step 1's resolution-difference analysis, and owe steps 2–3.
|
|
15
27
|
|
|
16
28
|
## Lightweight path (C-tier — cheap debt entry)
|
|
17
29
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrono-meta/fh-gate",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "FH runtime adapters — run FH governance, skills, and agents via Claude or Codex with machine-parseable gates.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"prepare": "chmod +x bin/fh-gate.js bin/fh-run.js bin/fh-goal.js bin/fh-codex-doctor.js scripts/fh-gate.sh scripts/fh-run.sh scripts/fh-goal.sh",
|
|
28
28
|
"postinstall": "node scripts/postinstall_notice.js",
|
|
29
29
|
"test": "bash scripts/selfcheck.sh",
|
|
30
|
-
"prepublishOnly": "bash scripts/
|
|
30
|
+
"prepublishOnly": "bash scripts/prepublish_scope_note.sh && bash scripts/publish_freshness_check.sh && bash scripts/version_lockstep_check.sh && bash scripts/package_coverage_check.sh --vs-tarball && bash scripts/public_surface_scan_files.sh",
|
|
31
31
|
"release": "bash scripts/public_surface_scan_files.sh && npm publish"
|
|
32
32
|
},
|
|
33
33
|
"engines": {
|
|
@@ -72,7 +72,12 @@
|
|
|
72
72
|
"scripts/test_lane_runner_lanes.sh",
|
|
73
73
|
"scripts/test_version_lockstep_lanes.sh",
|
|
74
74
|
"scripts/package_coverage_check.sh",
|
|
75
|
+
"scripts/test_ko_tech_writer_lanes.sh",
|
|
76
|
+
"scripts/ko_tech_writer_calibrate.py",
|
|
77
|
+
"plugins/fh-commons/skills/ko-tech-writer/fixtures/known_positive.md",
|
|
78
|
+
"plugins/fh-commons/skills/ko-tech-writer/fixtures/known_negative.md",
|
|
75
79
|
"scripts/publish_freshness_check.sh",
|
|
80
|
+
"scripts/prepublish_scope_note.sh",
|
|
76
81
|
"scripts/lane_runner_check.sh",
|
|
77
82
|
"scripts/test_package_coverage_lanes.sh",
|
|
78
83
|
"scripts/adapters/peer_resolve.sh",
|
|
@@ -53,7 +53,12 @@ This agent repeatedly analyzes harness structure failure patterns. Even when a S
|
|
|
53
53
|
|
|
54
54
|
"This is weak" is not enough. **"Fix it like this" must accompany every valid attack.**
|
|
55
55
|
|
|
56
|
-
> **Role separation from steel-quench Wave 1**: Wave 1 attacks from
|
|
56
|
+
> **Role separation from steel-quench Wave 1**: Wave 1 attacks from **6** angles (reason for existence · real-world validation · bus factor · obsolescence · self-reference · **gate-locality**). quench-challenger attacks **orthogonal** harness-structure-specific 6 axes in an isolated independent instance. It does not replace Wave 1 — it covers the structural layer Wave 1 misses.
|
|
57
|
+
> ⚠️ Corrected 2026-08-16 — this line said "5 angles" and omitted gate-locality after `SKILL.md`
|
|
58
|
+
> added it, and `SKILL_detail.md`'s output template had no row for it either. Three copies of one
|
|
59
|
+
> list, drifted. **Adding a Wave 1 angle means editing all three** (`SKILL.md` table · this
|
|
60
|
+
> paragraph · `SKILL_detail.md` template); the two counts here are deliberately different numbers
|
|
61
|
+
> (Wave 1 = 6 angles, this agent = 6 axes, unrelated sets) so do not "reconcile" them.
|
|
57
62
|
|
|
58
63
|
---
|
|
59
64
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- KNOWN-NEGATIVE 픽스처 — Step 2/4-b 스캔이 «잡으면 안 되는» 표본.
|
|
2
|
+
같은 주제·비슷한 길이의 정상 산문. 히트가 나오면 그 스캔은 과차단이다. -->
|
|
3
|
+
|
|
4
|
+
# 표본 — 같은 내용을 정상 문체로
|
|
5
|
+
|
|
6
|
+
파이프라인은 세 단계로 나뉘고, 각 단계가 서로 다른 결함을 잡습니다.
|
|
7
|
+
|
|
8
|
+
- **격리**: 에이전트를 별도 컨텍스트에서 돌리는 방식입니다.
|
|
9
|
+
|
|
10
|
+
관측된 분업은 검출을 기계가 맡고 판정을 사람이 맡는 형태입니다.
|
|
11
|
+
|
|
12
|
+
여기서 한 층이 걸립니다.
|
|
13
|
+
|
|
14
|
+
이 스캐너에는 이전 상태가 없습니다.
|
|
15
|
+
그 판정에는 재현 경로가 없습니다.
|
|
16
|
+
|
|
17
|
+
이 방식에서는 오탐이 세 건 나왔고, 그 셋을 손으로 확인했습니다.
|
|
18
|
+
후보 목록에서 두 건이 빠졌으며, 남은 항목은 개별로 판정했습니다.
|
|
19
|
+
그 경로는 두 차례 관측됐습니다.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- KNOWN-POSITIVE 픽스처 — Step 2/4-b 스캔이 «잡아야 하는» 표본.
|
|
2
|
+
🟥 이 파일은 일부러 번역투를 담고 있다. 문체 교정 대상이 아니다.
|
|
3
|
+
각 줄 끝 주석이 어느 클래스를 심었는지 밝힌다. 클래스당 최소 1건. -->
|
|
4
|
+
|
|
5
|
+
# 표본 — 일부러 심은 번역투
|
|
6
|
+
|
|
7
|
+
파이프라인은 세 단계로 나뉩니다 — 그리고 각 단계가 서로 다른 결함을 잡습니다. <!-- C1 줄표 이어붙임 -->
|
|
8
|
+
|
|
9
|
+
- **격리** — 에이전트를 별도 컨텍스트에서 돌리는 방식입니다. <!-- C2 용어-머리 -->
|
|
10
|
+
|
|
11
|
+
관측된 분업은: 검출은 기계가, 판정은 사람이. <!-- C3 콜론 나열투 -->
|
|
12
|
+
|
|
13
|
+
여기서 걸리는 층. <!-- C4 조각문 -->
|
|
14
|
+
|
|
15
|
+
이 스캐너는 이전 상태를 갖지 않습니다. <!-- C5 소유 직역 -->
|
|
16
|
+
그 판정은 재현 경로를 가지고 있지 않습니다. <!-- C5 소유 직역(변형) -->
|
|
17
|
+
|
|
18
|
+
이 방식으로는 오탐이 전혀 나오지 않았습니다. <!-- C6 전칭 단정(Step 4-b) -->
|
|
19
|
+
후보 목록에서 하나도 빠지지 않았고, 예외 없이 모두 통과했습니다. <!-- C6 전칭 단정 -->
|
|
20
|
+
그 경로는 한 번도 잡히지 않았다. <!-- C6 부정형 전칭 -->
|