@chrono-meta/fh-gate 2.2.0 → 2.4.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/capabilities/adapters/qasp-new-code-anchor.cap +5 -2
- package/.claude/capabilities/adapters/qasp-web-rules.cap +130 -0
- package/.claude/rules/fh_4axis_gate.md +55 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CLAUDE.md +51 -6
- package/README.ja.md +14 -2
- package/README.ko.md +14 -1
- package/README.md +16 -2
- package/README.zh.md +12 -1
- package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +231 -7
- package/knowledge/shared/harness-core/harness_incubator_doctrine.md +215 -1
- package/knowledge/shared/harness-core/ship_readiness_gate.md +168 -1
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +24 -0
- package/package.json +9 -1
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/CHANGELOG.md +110 -0
- package/plugins/fh-meta/skills/auto-decorrelation/SKILL.md +20 -0
- package/plugins/fh-meta/skills/steel-quench/SKILL.md +25 -2
- package/scripts/adapters/fixtures/qasp_web_rules_known_negative.json +7 -0
- package/scripts/adapters/fixtures/qasp_web_rules_known_positive.json +7 -0
- package/scripts/adapters/mate_agent_boundary.sh +27 -7
- package/scripts/adapters/qasp_web_rules.sh +171 -0
- package/scripts/capability_effect_probe.sh +104 -0
- package/scripts/capability_registry_check.sh +69 -3
- package/scripts/relay_channel.sh +151 -6
- package/scripts/selfcheck.sh +18 -0
- package/scripts/target_freeze.sh +239 -0
- package/scripts/test_adapter_lanes.sh +54 -1
- package/scripts/test_marker_axes_run_lanes.sh +19 -0
- package/scripts/test_marker_standpoint_lanes.sh +83 -0
- package/scripts/test_marker_thirdparty_lanes.sh +73 -0
- package/scripts/test_regression_guard_ci_lanes.sh +170 -0
- package/scripts/test_relay_channel_lanes.sh +146 -17
- package/scripts/test_target_freeze_lanes.sh +203 -0
- package/templates/.git-hooks/pre-commit +262 -0
- package/templates/PRE-PUBLISH-CHECKLIST.md +22 -0
- package/templates/regression_guard.sh +32 -4
|
@@ -95,8 +95,11 @@ judge: mechanical
|
|
|
95
95
|
verdict_binding: VIOLATION ARGS HARNESS_ERROR OUT_OF_SCOPE PEER_ABSENT
|
|
96
96
|
#
|
|
97
97
|
# known-pair — **합성 레포**에서 실행시점에 세운다. peer 히스토리를 안 쓰는 이유 셋:
|
|
98
|
-
# ① peer 의 이 진입점은
|
|
99
|
-
# `fix/anchor-scan-out-of-scope-repairs`
|
|
98
|
+
# ① peer 의 이 진입점은 **움직인다**. 2026-08-16 이 줄을 쓸 때는 qasp PR #174 가 열려
|
|
99
|
+
# 있었고(브랜치 `fix/anchor-scan-out-of-scope-repairs`), 그 PR 은 **2026-08-17 머지됐다**
|
|
100
|
+
# (qasp-dev main `cfd0e77`, 브랜치 삭제). 즉 이유는 살아 있고 사례만 닫혔다 —
|
|
101
|
+
# 그 브랜치를 고정 SHA 로 박았으면 squash 로 커밋이 orphan 이 되어 쌍이 지금 죽어 있다.
|
|
102
|
+
# ★머지 후 known-pair 재실행으로 확인: `--known-positive` rc=1 · `--known-negative` rc=0.
|
|
100
103
|
# 고정 SHA 를 박으면 그 브랜치가 squash 머지되는 순간 커밋이 orphan 이 되어 쌍이 죽는다.
|
|
101
104
|
# ② 상대 ref(`HEAD~N`)는 커밋이 쌓이면 가리키는 구간이 조용히 움직인다 — 같은 선언이
|
|
102
105
|
# 다른 것을 재게 된다.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# ═════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
# 어댑터 선언 — FH 가 **남의 하네스 능력을 자기 안에서** 선언한다
|
|
3
|
+
# ═════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
# peer 하네스 `qasp`(로컬 별칭 해석: `qasp-dev`)의 `scripts/web_rules_pr_scan.sh` —
|
|
5
|
+
# 1.5막 **웹 셀렉터-안정성 rule 세트** — 를 FH 가 호출 가능하게 감싼 것이다.
|
|
6
|
+
# 어댑터임은 **id 네임스페이스**(`adapter/…`)와 이 헤더로 표시한다 — 🟥 **새 스키마 키를
|
|
7
|
+
# 만들지 않는다.** `.cap` 파서가 이 클러스터에 네 벌 있고(relay · registry · cluster_scan ·
|
|
8
|
+
# effect-probe), 키를 늘리면 네 곳을 동시에 고쳐야 하며 그게 이 레포의 재발 결함이다.
|
|
9
|
+
#
|
|
10
|
+
# 왜 여기 사나 (운영자 결정 2026-08-16): 어댑터가 **기본 경로**다. 남의 레포 안 `.cap`
|
|
11
|
+
# (소유 선언)은 그 하네스를 소유하고 동시에 노출을 결정한 특권적 경우이지 일반 경로가 아니다.
|
|
12
|
+
# ★이 노드는 그 결정의 **직접 산물**이다 — qasp-dev PR #173 이 대상 레포 안에 `.cap` 을
|
|
13
|
+
# 두려다 그 원칙에 걸려 CLOSED 됐고(2026-08-16), 그 자리를 이 파일이 대신한다.
|
|
14
|
+
#
|
|
15
|
+
# ── 무엇을 재나 ──────────────────────────────────────────────────────────────
|
|
16
|
+
# **웹 E2E 테스트 diff 에 로케이터/대기 규율 위반이 들어왔는가.** rule 5종
|
|
17
|
+
# (`web-coordinate-click` P1 · `web-wait-for-timeout` P2 등 — LOCATOR_DISCIPLINE ·
|
|
18
|
+
# ASSERTION_STRENGTH 렌즈). peer 헤더의 기원 실측: rule 테이블은 2026-07-24 부터 있었으나
|
|
19
|
+
# **프로덕션 호출자가 0건**이었다(2026-07-27 실측 — tests/ 와 자기 자신뿐).
|
|
20
|
+
# *"호출자가 없는 검출기는 산문이지 게이트가 아니다."*
|
|
21
|
+
#
|
|
22
|
+
# ── 왜 net-new 인가 ──────────────────────────────────────────────────────────
|
|
23
|
+
# FH 에 같은 계기가 **없다.** 인접 자산은 전부 다른 질문을 한다:
|
|
24
|
+
# · `adapter/qasp-new-code-anchor` — **신규 실행 코드에 앵커가 있나**(대상=diff 의 추가 파일)
|
|
25
|
+
# · `degrade_direction_scan.sh` — **판정이 어느 방향으로 무너지나**(대상=verdict 표면)
|
|
26
|
+
# · `adapter/mate-agent-boundary` — 모바일 에이전트 경계
|
|
27
|
+
# 이 능력은 **테스트 코드 자체의 로케이터/대기 규율**을 본다 — 대상이 «게이트» 도 «신규 파일»
|
|
28
|
+
# 도 아니고 **E2E 테스트의 작성 품질**이다. 그 렌즈는 FH 에 없다.
|
|
29
|
+
#
|
|
30
|
+
# ── 왜 진입점을 그대로 못 쓰나 ───────────────────────────────────────────────
|
|
31
|
+
# ⓐ peer 는 자기 부재를 뜻하는 값이 없다 — 없으면 「qasp 를 안 깔았다」가 ENGINE_ERROR
|
|
32
|
+
# (= qasp 가 깨졌다)로 렌더된다. 어댑터가 `PEER_ABSENT(20)` 을 더한다.
|
|
33
|
+
# ⓑ 🟥 **peer 의 문서화된 계약이 실제보다 좁다.** 셸 헤더는 `0/1/3` 만 적는데, 하위 python
|
|
34
|
+
# CLI 가 `parser.error()` 를 쓰고 argparse 가 **exit 2** 를 내며 셸이 그대로 전파한다
|
|
35
|
+
# (실측 2026-08-17). 어댑터는 **실제 계약**을 선언한다 — 안 그러면 인자 오류가
|
|
36
|
+
# 「계기가 깨졌다」로 렌더된다. peer 쪽 헤더 갱신은 별건으로 남긴다.
|
|
37
|
+
id: forge-harness:adapter/qasp-web-rules
|
|
38
|
+
summary: adapter to qasp web selector-stability rules — locator/wait discipline violations in web E2E test diffs
|
|
39
|
+
tags: adapter qasp web e2e playwright locator selector wait flaky static-review rules diff
|
|
40
|
+
entry: bash scripts/adapters/qasp_web_rules.sh
|
|
41
|
+
requires_cwd: SELF
|
|
42
|
+
verdict_channel: exit
|
|
43
|
+
#
|
|
44
|
+
# 🟥 「안 쟀다」가 **세 값**으로 갈라져 있다 — 전부 다른 명제다:
|
|
45
|
+
# ARGS(2) 인자가 틀렸다 (호출에 대한 진술)
|
|
46
|
+
# ENGINE_ERROR(3) 하네스는 있는데 못 쟀다 (계기에 대한 진술)
|
|
47
|
+
# 도달 경로(peer 실측): python 인터프리터 부재 · diff-json 읽기 실패 ·
|
|
48
|
+
# `gh api` 실패 · **스캔 대상 0개**(peer 가 fail-closed 로 못 박았다)
|
|
49
|
+
# HARNESS_ERROR(10) 계기 자신이 전제를 잃었다 (어댑터에 대한 진술)
|
|
50
|
+
# 도달 경로: `peer_resolve.sh` 부재 · peer 진입점 부재 ·
|
|
51
|
+
# peer 별칭 다중 히트(모호 — 고르지 않는다) · 캘리브레이션 픽스처 부재 ·
|
|
52
|
+
# peer 가 자기 계약 {0,1,2,3} 밖의 값 반환
|
|
53
|
+
# PEER_ABSENT(20) 그 노드가 이 머신에 없다 (클러스터에 대한 진술)
|
|
54
|
+
#
|
|
55
|
+
# 🟥 **`10` 은 초판 선언에서 빠져 있었다 — 스크립트는 내던 값인데 선언이 좁았다.**
|
|
56
|
+
# 등록 바(`capability_registry_check.sh` M2+)가 잡았다: *"enum 에 「안 돌았다」를 뜻하는
|
|
57
|
+
# 값이 없다"*. 자기 레인(W6)이 `rc=10` 을 이미 단언하고 있었는데도 선언에는 없었다 —
|
|
58
|
+
# **[[feedback_unedited_parts_of_my_own_file]]** 의 형태다(내 편집 범위 안, 자력 적발 0).
|
|
59
|
+
# ★peer 자신의 규율: *"exit 3 을 0 으로 뭉개지 않는다 — 못 잰 것을 깨끗하다고 보고하는
|
|
60
|
+
# 순간 게이트가 장식이 된다."* 어댑터는 하위 exit 을 전파하지 않고 **명시 case 로 재매핑**한다.
|
|
61
|
+
# ★등록 바는 아래 두 arm 만 돌린다 — ARGS·ENGINE_ERROR·PEER_ABSENT 는 선언돼 있으나
|
|
62
|
+
# 그 판정에서 **관측되지 않는다**. 셋은 `scripts/test_adapter_lanes.sh` 가 덮는다.
|
|
63
|
+
verdict_enum: 0=CLEAN 1=FINDINGS 2=ARGS 3=ENGINE_ERROR 10=HARNESS_ERROR 20=PEER_ABSENT
|
|
64
|
+
approval: auto
|
|
65
|
+
#
|
|
66
|
+
# `reversibility: reversible` — 이 계기는 **읽고 보고할 뿐** 아무것도 되돌릴 수 없게 만들지
|
|
67
|
+
# 않는다. peer 표면 자신도 advisory 다(PR 코멘트/요약 — 차단하지 않는다).
|
|
68
|
+
reversibility: reversible
|
|
69
|
+
#
|
|
70
|
+
# 🟥 `residency: company` — peer 레포가 company 다. `--diff-json` 모드에서 이 어댑터는
|
|
71
|
+
# **호출자가 준 diff 의 파일 경로와 코드 라인**을 출력에 그대로 싣는다. 회사 코드를
|
|
72
|
+
# 스캔하면 그 경로·라인이 조직 자산을 나른다.
|
|
73
|
+
# ⇒ 이 능력의 **출력**은 로컬에 남기고 외부 계열 디스패치에 그대로 넘기지 않는다.
|
|
74
|
+
# ⚠️ 캘리브레이션 arm 은 **우리가 지은 합성 diff** 만 만지므로 그 경로에 한해 조직 내용이
|
|
75
|
+
# 없다. 그러나 residency 는 **가장 넓게 관측된 값**으로 선언한다.
|
|
76
|
+
residency: company
|
|
77
|
+
degrade: fail-closed
|
|
78
|
+
tier_floor: none
|
|
79
|
+
#
|
|
80
|
+
# ═════════════════════════════════════════════════════════════════════════════
|
|
81
|
+
# 🟥 `writes: write-local` — `read-only` 가 **아니다.** cold 실측이 근거다
|
|
82
|
+
# ═════════════════════════════════════════════════════════════════════════════
|
|
83
|
+
# 진입점이 `python -m src.static_review.web_rules` 를 부르고, 그 import 폐포가
|
|
84
|
+
# `src/config/settings.py` 의 **import 시점 `ensure_dirs()`** 에 닿는다.
|
|
85
|
+
#
|
|
86
|
+
# warm(운영자 실 트리) : 트리 변화 **없음** ← 🟥 이것을 근거로 쓰면 안 된다
|
|
87
|
+
# cold(격리 클론) : 신규 엔트리 **25개**
|
|
88
|
+
# `__pycache__` 디렉토리 5 + `.pyc` 파일 18
|
|
89
|
+
# **빈 디렉토리 `./tmp` · `./uploads`** ← `mkdir(exist_ok=True)` 의 산물
|
|
90
|
+
#
|
|
91
|
+
# warm 이 깨끗해 보인 것은 그 디렉토리들이 **이미 있어서** mkdir 이 무음 no-op 이었기
|
|
92
|
+
# 때문이다 — **warm cache 아티팩트지 read-only 의 증거가 아니다.**
|
|
93
|
+
#
|
|
94
|
+
# 🟥 **이 값은 손 실측으로만 선다 — M6 는 이 노드의 선언을 판별하지 못한다.**
|
|
95
|
+
# known-pair 로 확인했다(2026-08-17): 같은 파일을 `writes: read-only` 로 **거짓 선언**해도
|
|
96
|
+
# 프로브는 `✅ VERIFIED · 관측=no-write` 를 낸다. 즉 이 축에서 **컨트롤이 죽어 있다.**
|
|
97
|
+
#
|
|
98
|
+
# 기전: 프로브의 감시면은 ⓐ 샌드박스(= **FH** 레포의 격리 클론) ⓑ 임시 카나리아 하나
|
|
99
|
+
# ⓒ `$HOME` 엔트리 목록이다. 그런데 **어댑터는 정의상 peer 트리에서 돈다** —
|
|
100
|
+
# `cd "$PEER_ROOT"` 가 이 파일의 전제다. 쓰기는 전부 감시면 **밖**에 떨어지고, 밖이되
|
|
101
|
+
# ⓑⓒ 어디도 아니라서 «샌드박스 밖이 바뀌었다» 분기에도 안 걸린다.
|
|
102
|
+
#
|
|
103
|
+
# ⚠️ **초판이 여기에 «이제 기계로 검증·반증된다» 고 적었는데 그건 거짓이었다.**
|
|
104
|
+
# FH PR #422 가 «빈 디렉토리» 축을 넣은 것은 사실이고 일반 명제로는 맞지만, **그 축은
|
|
105
|
+
# 샌드박스 안을 볼 때만 작동하므로 이 노드에는 닿지 않는다.** 참인 일반 명제로 거짓인
|
|
106
|
+
# 개별 주장을 덮은 형태다 — 대조군이 없었으면 그대로 실렸다.
|
|
107
|
+
#
|
|
108
|
+
# ⇒ 이 선언의 근거는 **위 cold 손 실측 하나뿐**이고, 재검증하려면 손으로 다시 재야 한다
|
|
109
|
+
# (격리 클론 → 진입점 1회 → `find` 순증 계수). 자동 앵커 없음.
|
|
110
|
+
# ⇒ **어댑터 클래스 전체의 성질**이다. 자매 노드 `adapter/qasp-new-code-anchor` 의
|
|
111
|
+
# `writes: read-only` 도 같은 이유로 M6 가 판별하지 못한다 — 그쪽은 결론이 맞지만
|
|
112
|
+
# (순수 bash, import 없음) **맞는 이유가 프로브 덕은 아니다.**
|
|
113
|
+
writes: write-local
|
|
114
|
+
judge: mechanical
|
|
115
|
+
# CLEAN 만 clearing. FINDINGS 는 위반, 나머지 셋은 「안 쟀다」의 서로 다른 얼굴 — 전부 막는다.
|
|
116
|
+
verdict_binding: FINDINGS ARGS ENGINE_ERROR HARNESS_ERROR PEER_ABSENT
|
|
117
|
+
#
|
|
118
|
+
# known-pair — **FH 소유 픽스처**(`scripts/adapters/fixtures/`), 오프라인·결정적.
|
|
119
|
+
# 양성: `page.wait_for_timeout(3000)` → `web-wait-for-timeout` 발화 → 실측 rc=1
|
|
120
|
+
# 음성: `get_by_role("button", name=…).click()` → 위반 0 → 실측 rc=0
|
|
121
|
+
# ★왜 peer 픽스처를 안 쓰나: peer 의 `tests/` 는 그 레포 사정으로 움직인다. **남의 트리에
|
|
122
|
+
# 있는 픽스처에 의존하는 계기는 별도 계기가 아니라 그 레포의 일부다.**
|
|
123
|
+
# ★왜 PR 번호 모드를 안 쓰나: `gh api` 가 필요해 네트워크·인증에 의존하고, 그러면 M4 가
|
|
124
|
+
# 「계기가 판별하는가」가 아니라 **「오늘 gh 가 되는가」**를 재게 된다.
|
|
125
|
+
# ★왜 고정 SHA 를 안 박나: 자매 노드(`adapter/qasp-new-code-anchor`)가 그 대가를 오늘 실증했다
|
|
126
|
+
# — 그 쌍이 가리키던 브랜치가 squash 머지되며 커밋이 orphan 이 됐다. 합성 픽스처는 안 움직인다.
|
|
127
|
+
calibration_positive_args: --known-positive
|
|
128
|
+
calibration_positive_expect: FINDINGS
|
|
129
|
+
calibration_negative_args: --known-negative
|
|
130
|
+
calibration_negative_expect: CLEAN
|
|
@@ -194,6 +194,61 @@ controls: n/a — no measurement in this delta (<reason>)
|
|
|
194
194
|
— zero hook lines, no fixture suite. Recorded here so the gap is visible from the rules side rather
|
|
195
195
|
than only from the hook's absence.
|
|
196
196
|
|
|
197
|
+
**`thirdparty:` — ⓓ3자 대면의 자기 필드 (2026-08-17 신설).** ⓑ가 `standpoint:` 를 갖는 것과
|
|
198
|
+
같은 형태다: `axes-run` 에는 포인터(`ⓓ=→thirdparty`)만 두고 값은 이 필드가 나른다.
|
|
199
|
+
|
|
200
|
+
🟥 **이 축은 반쪽이 아니라 둘이다 — 규격이 한쪽만 인코딩하고 있었다(2026-08-17 정정).**
|
|
201
|
+
6축 정본(`knowledge/shared/harness-core/fh_three_layer_canon.md:243`)은 ⓓ가 받는 것을
|
|
202
|
+
**«문제 + 남의 코드베이스»**로 정의하고 **두 질문**을 묶는다:
|
|
203
|
+
|
|
204
|
+
| 반쪽 | 질문 | 값 |
|
|
205
|
+
|---|---|---|
|
|
206
|
+
| ① 선행자산 | **이미 풀린 문제 아닌가** | `checked` · `none-found` |
|
|
207
|
+
| ② **하네스 단위 적대검증** | **내 변경이 남의 레포/입장에서 어떻게 보이나** | `peer-review` ← **신설** |
|
|
208
|
+
|
|
209
|
+
②의 정본 형태(운영자, 2026-08-17): *"qasp 개선건에 대해서 **지스택에 소넷을 넣고 지스택 하네스
|
|
210
|
+
페르소나로** qasp 개선건을 리뷰하고 검증하는 것 — **계열을 넘어선 하네스 단위의 적대검증 스코프**."*
|
|
211
|
+
**FH 는 governor 로서 그 상황을 만들고·관측하고·판정한다.** 4축 게이트가 검증하는 대상은 그
|
|
212
|
+
제3 하네스가 내놓은 **의견**이고, 그 판정은 **FH 로컬**에서 이뤄진다 — 남의 레포에 게이트를
|
|
213
|
+
거는 것이 아니다.
|
|
214
|
+
|
|
215
|
+
⚠️ **②가 왜 빠져 있었는지가 실측으로 드러났다**: 규격에 ①만 있으니 코퍼스 6건 중 peer 가 쓴
|
|
216
|
+
4건은 전부 ① 형태였고, ②에 가까운 것을 적으려던 2건은 **enum 밖 자유 산문으로 샜다.** 이 필드가
|
|
217
|
+
신설된 사유(*「적을 자리가 없다」를 벗는다*)가 **한 칸 안쪽에서 재발한 것**이다.
|
|
218
|
+
|
|
219
|
+
🟥 **그리고 ②는 정의상 «남의 레포 스코프»다.** 게이트 스코프가 자기 자신으로 묶여 있으면 이 축은
|
|
220
|
+
**구조적으로 기록될 수 없다** — 정본 §170 의 «ⓓ 자기 스코프가 가장 나빴다» 실측과 같은 자리다.
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
thirdparty: peer-review(<하네스>/<페르소나> → <대상>, <무엇이 돌아왔나>)
|
|
224
|
+
← ② 하네스 단위 적대검증. 계열을 넘는다
|
|
225
|
+
예: gstack/harness-persona → qasp, 경계 가정 2건 반증
|
|
226
|
+
thirdparty: checked(<무엇을 검색했고 무엇을 찾았나>)
|
|
227
|
+
thirdparty: none-found(<무엇을 검색했나>) ← 찾았는데 선행 없음. «안 봤다»와 다른 명제다
|
|
228
|
+
thirdparty: DEGRADED_NO_ACCESS(<사유>) ← 못 봤다 (검색 수단 부재)
|
|
229
|
+
thirdparty: DEGRADED_NOT_RUN(<사유>) ← 안 돌렸다
|
|
230
|
+
thirdparty: UNKNOWN ← 안 봤다
|
|
231
|
+
thirdparty: not-applicable(<사유>)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
🟥 **왜 `axes-run` 한 칸으로 부족한가.** 그 칸은 **토큰**을 담는데, 이 축이 실제로 내는 것은
|
|
235
|
+
«무엇을 검색해서 무엇을 찾았나» 라 한 토큰에 안 들어간다. **자리가 없으면 안 적히고, 안 적히면
|
|
236
|
+
다음 세션이 «이 축을 돌렸나»를 물을 수도 확인할 수도 없다.**
|
|
237
|
+
실측 근거(2026-08-17): 이 축을 처음 제대로 돌린 세션에서 **발표 주장 6건이 선행자산에 걸렸다**
|
|
238
|
+
(mutation testing · Anthropic skill-creator 블라인드 · Claude Code auto mode · Self-Harness ·
|
|
239
|
+
공식 cross-family 플러그인 · constrained decoding). 그 전까지 이 레포 전체 마크다운에서
|
|
240
|
+
`promptfoo|DeepEval|Inspect|garak|PyRIT|mutation testing` grep 히트는 **1줄**이었다 —
|
|
241
|
+
축은 정본화돼 있었는데 **기록면이 없어서 습관이 안 생겼다.**
|
|
242
|
+
|
|
243
|
+
**degrade 3값 분리는 `crossfamily:` 를 그대로 상속한다** — 못 봤다 / 안 돌렸다 / 안 봤다는
|
|
244
|
+
서로 다른 명제이고, 자유 산문은 그 셋을 접는다. 접히면 «안 돌린 축»이 «선행 없음»으로 읽힌다.
|
|
245
|
+
|
|
246
|
+
**검증 범위(오늘 기준)**: 훅은 ⓑ와 동일하게 **포인터가 가리키는 필드의 존재**만 본다.
|
|
247
|
+
enum 값 검증은 안 한다 — `standpoint:` 와 같은 유보이고, 같은 이유다(첫 거짓 값이 기록되면
|
|
248
|
+
그때 기계화한다). ⚠️ ⓑ가 겪은 **화살표 fail-open 도 같이 상속해 미리 막았다**: 화살표를
|
|
249
|
+
필수로 보지 않고 «ⓓ 값이 thirdparty 를 참조하는가»로 본다. 같은 명시 잔여(참조어가 다른
|
|
250
|
+
토큰에 있으면 미검출)도 그대로 남는다.
|
|
251
|
+
|
|
197
252
|
**Scope, unchanged**: form + non-vacuity + auditability, **never provenance**. A marker claiming
|
|
198
253
|
`ⓐ=codex` when codex never ran passes — deliberately. Catching that is cross-family review *reading*
|
|
199
254
|
the marker, which is not this hook's job.
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "fh-meta",
|
|
14
|
-
"version": "2.
|
|
14
|
+
"version": "2.4.0",
|
|
15
15
|
"description": "New in 2.2.0: BREAKING (gate): chamber step 6 now reads ACTUAL.md, not BUDGET.md — an in-flight chamber run whose actual cost sits in BUDGET.md blocks until the ACTUAL: line moves to tracks/_chamber/<slug>/ACTUAL.md (the runner prints the path). Why: BUDGET.md's pre-verdict hash IS the ordering witness, and step 6 hard-blocked until that same file changed, so every run that reached COMPLETE necessarily mutated a witnessed artifact and verify returned TAMPERED — the chamber's promotion condition was unsatisfiable by construction, not by strictness. Two roles (immutable witness / post-verdict calibration sink) had collided in one file; each was correct alone, so neither side's code showed the conflict. Also: ko-tech-writer Step 2/4-b scans are now calibration-backed (known-pair fixtures + reproducible command, shipped) — discrimination is proven, 'zero residue' is explicitly NOT; chamber lane suite 12 -> 33 including the runner x witness seam no test covered; chamber_run.sh now teaches the two-commit discipline (gate hashes and verdict hash must land in separate commits/PRs — it previously advised the opposite). New in 2.1.0: BREAKING (gate): `crossfamily: declined` in an Axes 2-3 marker now requires grounds naming a record path that RESOLVES on disk — bare `declined`, and `declined` justified by author judgment, are blocked at commit. Remedy: cite where the operator decision lives (e.g. `.. — operator declined sidecars, per knowledge/shared/rules/operational_adaptation.md`), or use `DEGRADED_PANEL_UNUSED` if a panel was reachable and you chose not to recruit it — which is what author judgment actually is. `declined` was the only enum value with no grounds requirement; a cross-family review then broke the first (vocabulary-grep) fix three ways — self-validating on the value's own token, vacuous keyword passes, and over-blocking real declinations in natural prose — so the check asserts a resolvable record instead of words. Also: standpoint axis gains `tier1b` (a STATIC read of a target repo, executed nothing) plus a decide-in-order procedure, after blind floor-tier sims graded pure cold-reads as `tier2` three rounds running; steel-quench Wave 1's sixth angle (gate-locality) gains the output-template row it never had, so a mandatory angle stops being structurally unreportable; verify-bidirectional gains category 5 (prescriptive doctrine statement); Sister Asset Protocol gains an active-adoption trigger; new resident doctrine — Mechanization Boundary, Local Execution First, Skeleton-not-Muscle, Expedition track, and this package's versioning policy. Hub meta-operations toolkit — 35 skills + 7 agents. New in 2.0.1: harness-doctor cadence hook, portability lint wired into pre-commit, branch_claim.sh claim-count-vs-tree-count warning, louder confidentiality-scan fail-open notice, fh-gate.sh missing-package.json survival, identity ① reclassified 🟢 (cross-harness adapters + relay argument channel). New in 1.4.53: `fh-codex-doctor` (npm bin) — Codex adapter drift scanner; reads the documented M1/M2/M3 skill tier map + skill/agent source and reports codex-native/adapter-required/claude-native/unclassified per unit, wired into `npm test`/`prepublishOnly` (fail-closed on unclassified Claude-native primitives). New in 1.4.49: steel-quench gains Step 0.6 Verdict-Invariance Probe (groundedness axis — a load-bearing judged gate's verdict must track behavior, not rubric phrasing; measured flip-count over cross-family paraphrases; arXiv:2605.06161 Policy Invariance anchor); multi_model_sidecar_strategy §Vendor-native harness (a model is strongest in its own vendor CLI — Claude/CC, GPT/codex, Gemini/Antigravity; a universal router degrades all of them, so it stays an autocomplete/QA sidecar, never orchestration); predelete_check.sh fail-closed rewrite; memory-hygiene A-TMA anchor. New in 1.4.48: phantom-quench + steel-quench gain external frontier anchors (arXiv:2607.02052 package-hallucination; arXiv:2607.02057 prompt-coverage-adequacy); README model-flat claim reframed from a per-release point-curve to structural invariants (operation flattens across tiers; depth tier-order fixed within a generation). New in 1.4.47: onboarding step ① surfaces the Mode D companion-store session-start load in the auto-read salience anchor (previously only in the local binding + rules, so a greeting could skip the load). New in 1.4.46: context-doctor command-output axis (route to rtk/proxy for verbose CLI stdout, complementing .claudeignore; risk-gated to token-scarce envs). New in 1.4.41: context-doctor 2026 trigger vocab (context engineering/rot/collapse) + phantom-citation hardening; hub measurement-integrity-checklist (cross-model measurement pre-flight: display-name pin/reps≥3/discriminating probe). New in 1.4.40: install-wizard queryable-wiki scaffold (INDEX + session-start read + R/W/C ingest). New in 1.4.39: auto-decorrelation (cross-family verifier sidecar recruitment) + video-ingest (capability-routed video ingestion). New in 1.4.x: verify-axis check-class taxonomy (mandatory-pass/measured/judged), no-reinvention Tier-0 inventory, 7-class failure taxonomy, Destructive-Op Gate, Wave-T (Temper), tier-floor governance, Mode D Model Notice, FC consent lane, default-Sonnet guidance. New in 1.3.0: public-surface-audit, field-harvest Mode B auto-trigger, 4-axis gate scope ext. Validated cross-CLI: Claude Code, Codex, Gemini.",
|
|
16
16
|
"source": "./plugins/fh-meta"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"name": "fh-commons",
|
|
20
|
-
"version": "2.
|
|
20
|
+
"version": "2.4.0",
|
|
21
21
|
"description": "Project-agnostic utility skills — 5 skills (convergence-loop · deliberation · mcp-circuit-breaker · token-budget-gate · ko-tech-writer) + 1 agent (quench-challenger). Domain-independent utilities transplantable into any project.",
|
|
22
22
|
"source": "./plugins/fh-commons"
|
|
23
23
|
}
|
package/CLAUDE.md
CHANGED
|
@@ -54,9 +54,18 @@ core invariants never melt). The nursery also **verifies what it births**: harne
|
|
|
54
54
|
> · ③ **각 축의 컨트롤과 그 생사**. 축을 «돌렸다»의 **최소 증거 = 컨트롤이 살아 있는 실행 출력**
|
|
55
55
|
> 이다 — 안 고른 이유만 적은 것은 준수가 아니다.
|
|
56
56
|
> **비용 경계**: 넷을 매번 다 돌리지 않는다. 실패 모드에 맞춰 **고른다**.
|
|
57
|
-
> 🟥 **자평이다 · 게임 가능하다
|
|
58
|
-
>
|
|
59
|
-
>
|
|
57
|
+
> 🟥 **자평이다 · 게임 가능하다 — 둘은 안 닫혔다. 「훅이 없다」는 2026-08-17 부로 거짓이 됐고,
|
|
58
|
+
> 그 정정이 경계를 더 선명하게 만든다.** 그날 `standpoint:`(PR #429)와 `thirdparty:`(PR #434)에
|
|
59
|
+
> 값 검증 레인이 붙어, `crossfamily:` 와 함께 **세 필드가 훅에서 닫힌 enum + 비공허 근거로
|
|
60
|
+
> 검증된다**(`validate_{crossfamily,standpoint,thirdparty}_leg`). 🟥 **그러나 닫힌 것은 «형식»
|
|
61
|
+
> 이지 «진위»가 아니다** — 훅은 값이 목록 안에 있고 근거가 비어 있지 않은지를 보지, 그 값이
|
|
62
|
+
> **참인지**는 보지 않는다. 도그푸드 증거: 그 기계화를 촉발한 거짓값(어느 릴리스 마커의
|
|
63
|
+
> `not-applicable`)이 **새 레인을 그대로 통과한다.** 형식이 옳기 때문이다.
|
|
64
|
+
> 그래서 **자평·게임 가능성은 그대로 열려 있다.** 그건 결함이 아니라 §Mechanization Boundary 가
|
|
65
|
+
> 의도적으로 사람에게 남긴 자리다(판단을 코드로 굳히면 오늘의 판단이 내일의 천장이 된다).
|
|
66
|
+
> 닫는 방향은 여전히 **cross-family 가 그 마커를 읽는 것**이지 자기 채점을 더 성실히 하는 게
|
|
67
|
+
> 아니다 — 2026-08-17 실측이 그 근거를 강화했다(병렬 두 세션, 상호 정정 7건, **판단 축 자력
|
|
68
|
+
> 적발 0**, 둘 다 사전등록·컨트롤·되돌림을 다 돌리고도 각자 자기 쪽으로 접었다).
|
|
60
69
|
> **근거·사례·표본 한계는 `fh_three_layer_canon.md` §1-c — 인용하기 전에 읽어라.** 이 규칙은
|
|
61
70
|
> **n=1 세션 표본**에서 모든 install 로 일반화한 것이고, 그 절이 그 사실을 명시한다.
|
|
62
71
|
|
|
@@ -535,6 +544,27 @@ runtime (local wiring visible, not independent) · `tier3(<harness>)` a *differe
|
|
|
535
544
|
target harness ran it · `not-applicable` · degrade triad `DEGRADED_NO_TARGET_ACCESS` could-not /
|
|
536
545
|
`DEGRADED_NOT_RUN` did-not / `UNKNOWN` did-not-look — same shape as `crossfamily:`'s triad,
|
|
537
546
|
**distinct literal values**, do not reuse crossfamily's tokens).
|
|
547
|
+
🟥 **Settle the TARGET CLASS(es) before the tier — §7's `Q0`, added 2026-08-17 (operator decision).**
|
|
548
|
+
A consumer install **is** another harness; what the enum scopes is not who *receives* the change but
|
|
549
|
+
where it has to be **executed**. Q0 is **not first-match — it can return more than one target, and
|
|
550
|
+
each owes its own tier**: ⓐ a **named peer** whose local repo carries the changed surface, or which
|
|
551
|
+
the cluster registry / a `scripts/adapters/` entry names (decide by that test, not from a name list)
|
|
552
|
+
→ the enum as written · ⓑ the delta changes **consumer-visible behavior** (what a consumer's gate
|
|
553
|
+
blocks or passes, what their session is told to do, what an install receives) → target = a *clean
|
|
554
|
+
install of the packed artifact*, and it binds **now, pre-push — never deferred to the eventual
|
|
555
|
+
release** · ⓒ neither → `not-applicable`. 🟥 Do **not** read «no cross-repo consumer contract» as
|
|
556
|
+
«this file is not shipped» — measured, **194/200 recent non-merge commits touch a shipped path (97%,
|
|
557
|
+
all 6 exceptions hand-verified)**, so shipped-ness cannot be the discriminator; the behavior clause
|
|
558
|
+
is. Pricing the axis at that rate is the **over-triggering** §7's own Trigger paragraph rejects.
|
|
559
|
+
⚠️ 97% measures **the reach of the discarded shipped-path argument**, not the applicability rate —
|
|
560
|
+
how often ⓑ actually fires is **unmeasured in both tails** (it could also land near-universal, which
|
|
561
|
+
would be a rubber stamp — watch the next 20 markers). 🟥 Do **not** cite
|
|
562
|
+
`[[feedback_unreachable_done_when_trains_evasion]]` here: that memory concerns an unreachable *pass
|
|
563
|
+
condition*, and `not-applicable` is an *exemption* — the direction inverts. Three marker-audit legs all failed at that reading;
|
|
564
|
+
they were **not** decorrelated (same family · same prompt · same canon) so that is one observation,
|
|
565
|
+
not three. ⚠️ The consumer-install arm's *presence* half is mechanized at ship time; its
|
|
566
|
+
**execution** half (extract the tarball, run the gate, record command + output) has **no lane** —
|
|
567
|
+
do it by hand, and do not cite that arm as mechanized.
|
|
538
568
|
🟥 **The execution is the load-bearing half** (operator decision 2026-08-16): a static standpoint
|
|
539
569
|
read competes with cross-family review for the same defect classes and mostly loses — *running the
|
|
540
570
|
target harness locally, to completion*, is the part with no substitute. Measured on one delta the
|
|
@@ -609,14 +639,28 @@ installed **FH assets** run the **4-axis gate**; **field scaffolds** run **`asse
|
|
|
609
639
|
`steel-quench`** (the FH pre-commit hook is repo-local and does **not** reach a scaffold installed into another
|
|
610
640
|
repo, so this routing is not redundant with it) · **autonomy floor** — discover/rank trusted at opus-tier+;
|
|
611
641
|
below-floor, present the raw recommend and ask · **HITL per item**, and `"끝까지 해줘 / 자율로 완주"` → full-autonomy under the `/goal-quench`
|
|
612
|
-
gate: autonomy removes the per-item *prompt*, **never the gate**.
|
|
613
|
-
|
|
614
|
-
|
|
642
|
+
gate: autonomy removes the per-item *prompt*, **never the gate**.
|
|
643
|
+
|
|
644
|
+
🟥 **Chamber outcome vocabulary changed 2026-08-17 (operator decision) — the old count below is a
|
|
645
|
+
snapshot of a *different instrument*, not a current rate.** Re-routing, not softening:
|
|
646
|
+
`net-new` failure is no longer a KILL — it routes to **`CURATED`** (hand the maker the prior-art list
|
|
647
|
+
and the delta it does not cover; *"그 사람이 만들려는 걸 인큐베이터가 막을 필요가 있을까"*), and a
|
|
648
|
+
judgment-shaped candidate routes to **`NOT-APPLICABLE`**. **KILL survives for measured
|
|
649
|
+
precision-shortfall, hub-state dependence, and inability-to-run** — the screening that was actually
|
|
650
|
+
load-bearing is intact. Detail + the frozen known-pair that keeps the old instrument measurable:
|
|
651
|
+
`harness_incubator_doctrine.md §3-SCREEN-2026-08-17` · `tracks/_meta/chamber_taxonomy_knownpair_PREREG_2026-08-17.md`.
|
|
652
|
+
|
|
653
|
+
Honesty boundary that must not soften in summary — **under the old vocabulary**, hand-counted
|
|
654
|
+
2026-08-08 from the run ledger: 9 full runs, **8 KILL, 1 EMIT** (13 runs · 11 KILL · 1 EMIT as of
|
|
655
|
+
2026-08-17). It has birthed **once** (run #9 `forge-wiki`, shipped publicly), so
|
|
615
656
|
"it has not birthed" — the earlier wording here — is no longer true. But do not upgrade the claim
|
|
616
657
|
either: that run's workspace carries only a verdict file, with no intent/budget/blind-persona
|
|
617
658
|
artifacts, so the **formal flow** is not what produced it. The first end-to-end formal run is #10 and
|
|
618
659
|
it KILLed. Either way simulate-first stays a one-line HITL recommendation, never a push-button
|
|
619
660
|
autonomous emit.
|
|
661
|
+
⚠️ **Do not cite that ratio as "the chamber screens well" or "over-screens" going forward** — the
|
|
662
|
+
counts were produced by a rule set that no longer runs, and whether it over-screened is **exactly
|
|
663
|
+
what the frozen known-pair exists to measure and has not measured yet.**
|
|
620
664
|
|
|
621
665
|
> **Detail**: See `knowledge/shared/harness-core/onboarding_acceleration_autopilot.md` — full Phase-0 branch
|
|
622
666
|
> logic + `chamber_run.sh` scope, the per-phase skill composition, the remaining guards (no-reinvention
|
|
@@ -791,6 +835,7 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
|
|
|
791
835
|
| "I don't know what to build", "how should I approach this", "organize this for me", "clarify this", "정리해줘" (ambiguous request before dispatch) | `/deep-clarify` |
|
|
792
836
|
| **work-shaped request outside the harness domain** — "이 문서 만들어줘", "위키 페이지 써줘", "이 자료 표로 만들어줘", any general work ask no other row or skill catches (**fallback default** — a more specific row above/below always wins: 리서치→deep-research · ambiguous "정리해줘"→deep-clarify · heavy fleet→goal-quench) | **Intent-Marshaling loop** (§Intent Marshaling — mechanical capability scan → one-line compose proposal → run; gap → capability ladder) |
|
|
793
837
|
| "memory feels bloated", "clean up memory", "memory too large", "memory hygiene" | `/memory-hygiene` |
|
|
838
|
+
| **사람이 읽을 산출물이 나가기 직전** — README·가이드·리포트·장표·PR 본문 등 «독자가 여는» 것 (proactive; 코드가 옳아도 걸린다 — 이 행이 잡는 건 정확성이 아니라 **가독성**이다) | **독자로서 한 번 읽어라** — 첫 8줄에 결론이 있나 · 본문이 고정 템플릿에 덮이지 않나 · 마지막 인상이 무엇인가. 렌즈는 이미 있다: `/sim-conductor` A-1(`beginner` cold-read) 또는 직접 렌더해서 읽기. 🟥 **정적 검사는 「없는 것」을 잡고 「안 읽히는 것」은 못 잡는다** — 실측 2건이 독립 수렴했다(qasp 축: 지적 12건 중 스캐너 적발 0 · gstack 3자대면: 배포된 리포트 본문 3줄 vs 고정 템플릿 21줄). pre-commit 이 같은 상기를 advisory 로 낸다(차단 아님) |
|
|
794
839
|
| "ready to PR", "about to push", "merge this", "PR 올려줘", FH asset changed in session | 4-axis auto-gate (see above — runs automatically, no proposal needed) |
|
|
795
840
|
| **field verdict/gate/safety/irreversible code changed** in a mapped project (function returning a verdict enum / gate exit code / safety-invariant · publish/delete/history path) — **proactive, before merge** | **Field-Harness Load-Bearing Change Gate** (see above → degrade-lint → cross-family review → converge; same rigor as FH assets, applied to field code) |
|
|
796
841
|
| **a diff (yours or an unattended pipeline's) alters another harness's actual behavior, gate outcome, or interaction contract** — building automation that opens PRs autonomously, touching a synced/shared-body surface, or any change whose effect crosses a harness boundary (not merely a file-class match — most self-improvement is `not-applicable` here, which is the expected common case) — **proactive, before push, never as a post-PR comment** | **Standpoint axis** (`knowledge/shared/harness-core/field_verdict_crossfamily_gate.md §7` — orthogonal to `crossfamily:`; run the diff from the TARGET harness's own repo/standpoint via `tier2`/`tier2b`/`tier3`, or record `not-applicable`/`DEGRADED_*` on the closed enum. Missed once in-session while building `scripts/frontier_digest_autopilot.sh` 2026-08-15 — mis-routed to `fh-meta:hub-cc-pr-reviewer` (same-repo self-consistency, a different lens) before the operator caught it; this row exists so the next session connects the trigger without two rounds of correction.) |
|
package/README.ja.md
CHANGED
|
@@ -206,14 +206,26 @@ Project B ──→ CLAUDE.md でハブを接続
|
|
|
206
206
|
| **④** | **フロンティア → 組織への伝播** | 外から届いたものが、組織の*内側*まで届ききります |
|
|
207
207
|
| **⑤** | **増幅器 (Amplifier)** | 短い意図が、完成した成果物まで鍛え上げられます |
|
|
208
208
|
|
|
209
|
+
**6つ目の行は、意図的にこの表にありません。** `Ⓑ` **プロジェクトブースター (Project Booster)**
|
|
210
|
+
— FH の機構が *相手のハーネス自身の開発* を加速すること — は実在し等級も付いていますが、
|
|
211
|
+
**5つと同じ層ではありません。** 番号ではなく文字 Ⓑ を使う理由がまさにそれです。5つはそれぞれ
|
|
212
|
+
ブースティングの **外側** に固有の範囲を持ちます: ⑤ は人の意図全般(ハーネスが一切絡まない仕事
|
|
213
|
+
まで)、① は逆方向(受益者が FH 側)、② はユニットを *産む* こと — ブースティングは産んだ
|
|
214
|
+
**後**に来ます。だから包含関係ではありません。
|
|
215
|
+
|
|
216
|
+
🟥 **正典はここで止め、矢印を描きません。** 階層を固めるほど、表が実際の動き方から離れるから
|
|
217
|
+
です — 現場では一つの仕事が ① と ⑤ を同時に走らせ、その結果が ② へ流れます。「何が何の下か」
|
|
218
|
+
ではなく **「異なる範囲」** として読んでください。等級は Ⓑ の分も含めてファイル一つにあります:
|
|
219
|
+
[`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md) §Ⓑ-layering。
|
|
220
|
+
|
|
209
221
|
**5つが等しく仕上がっているわけではなく、この表を「5つの動く機能」として読んではいけません。** 成熟度は
|
|
210
222
|
正体ごとに4段階(`aspirational → partial → RC (ラボで立った) → REALIZED (外を歩いた)`)で追跡され、
|
|
211
223
|
それぞれに日付入りの証拠の行が付いています。その等級はここには**あえて写しません**: 2つのファイルに
|
|
212
224
|
置かれた等級は片方が必ず腐りますし、このページは4言語で存在するので、ここに写せば写しは4つになります。
|
|
213
225
|
上のどの行かに頼る前に、現在の等級を読んでください — それはファイル1つです:
|
|
214
226
|
[`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)。1文だけ欲しいなら、
|
|
215
|
-
**2026-08-
|
|
216
|
-
|
|
227
|
+
**2026-08-17** 時点で: **①, ③, ⑤ と Ⓑ は緑 — ラボの外で実証済み。②, ④ はリリース候補 — 作られ較正
|
|
228
|
+
されていますが、他人の手の中で歩くところはまだ示されていません。** この文とゲートファイルが食い違ったときは、
|
|
217
229
|
ゲートファイルが正しく、この行が古いということです。
|
|
218
230
|
|
|
219
231
|
5つすべてを横断する性質が2つあり、どちらもオンにする機能ではありません:
|
package/README.ko.md
CHANGED
|
@@ -203,13 +203,26 @@ Project B ──→ CLAUDE.md에서 허브 연결
|
|
|
203
203
|
| **④** | **프런티어 → 조직 전파** | 밖에서 들어온 것이 조직 *안쪽까지* 내려앉음 |
|
|
204
204
|
| **⑤** | **증폭자** | 짧은 의도가 완성된 산출물까지 벼려짐 |
|
|
205
205
|
|
|
206
|
+
**여섯 번째 행은 의도적으로 이 표에 없습니다.** `Ⓑ` **프로젝트 부스터** — FH 의 기계가 *상대
|
|
207
|
+
하네스의 자체 개발*을 가속하는 것 — 는 실재하고 등급도 매겨져 있지만, **다섯과 같은 층이
|
|
208
|
+
아닙니다.** 번호 대신 문자 Ⓑ 를 쓰는 이유가 정확히 그것입니다. 다섯 각각은 부스팅 **밖의**
|
|
209
|
+
고유 범위를 지닙니다: ⑤ 는 사람의 의도 전반(하네스가 전혀 안 끼는 일까지)을, ① 은 반대 방향
|
|
210
|
+
(수혜자가 FH 다)을, ② 는 유닛을 *낳는* 것을 — 부스팅은 낳은 **뒤에** 옵니다. 그래서 포함
|
|
211
|
+
관계가 아닙니다.
|
|
212
|
+
|
|
213
|
+
🟥 **정본은 여기서 멈추고 화살표를 그리지 않습니다.** 위계를 못 박을수록 표가 실제 작업 방식과
|
|
214
|
+
멀어지기 때문입니다 — 현장에서는 한 작업이 ①과 ⑤ 를 같이 태우고 그 결과가 ② 로 흐릅니다.
|
|
215
|
+
「무엇이 무엇 밑」이 아니라 **「서로 다른 범위」**로 읽으세요. 등급은 Ⓑ 것까지 파일 하나에
|
|
216
|
+
있습니다: [`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)
|
|
217
|
+
§Ⓑ-layering.
|
|
218
|
+
|
|
206
219
|
**다섯이 똑같이 완성돼 있지 않으며, 이 표를 작동하는 기능 다섯으로 읽어서는 안 됩니다.** 성숙도는
|
|
207
220
|
정체성별로 `지향 → 부분 → RC(실험실에서 섬) → REALIZED(밖에서 걸음)` 4단계로, 각각 날짜가 박힌
|
|
208
221
|
증거 한 줄과 함께 추적합니다. 그 등급은 의도적으로 여기에 **옮겨 적지 않습니다**: 두 파일에 나눠 둔
|
|
209
222
|
등급은 한쪽이 반드시 낡고, 이 페이지는 4개 언어로 존재하므로 여기에 복제하면 사본이 넷이 됩니다.
|
|
210
223
|
위의 어느 행이든 믿고 쓰기 전에 현재 등급을 읽으세요 — 파일 하나입니다:
|
|
211
224
|
[`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md). 한 문장만 원한다면,
|
|
212
|
-
**2026-08-
|
|
225
|
+
**2026-08-17** 기준 요약: **①·③·⑤ 와 Ⓑ 는 초록 — 실험실 밖에서 실증됨. ②·④는 릴리스 후보 —
|
|
213
226
|
만들어지고 보정됐지만, 아직 남의 손에서 걷는 것이 확인되지 않음.** 이 문장과 게이트 파일이 다르면,
|
|
214
227
|
게이트 파일이 옳고 이 줄이 낡은 것입니다.
|
|
215
228
|
|
package/README.md
CHANGED
|
@@ -204,14 +204,28 @@ this page: that table is *symptoms you might arrive with*, this is *what the hub
|
|
|
204
204
|
| **④** | **Frontier → org propagation** | What arrives from outside lands all the way *inside* the organization |
|
|
205
205
|
| **⑤** | **Amplifier** | A short intent gets forged all the way to the finished artifact |
|
|
206
206
|
|
|
207
|
+
**A sixth row is deliberately absent from that table.** `Ⓑ` **Project Booster** — FH's machinery
|
|
208
|
+
accelerating *another harness's own development* — is real and graded, and it is **not on the same
|
|
209
|
+
layer as the five**. It carries a letter instead of a number for exactly that reason. Each of the
|
|
210
|
+
five keeps scope that sits outside boosting: ⑤ covers human intent generally (including work where
|
|
211
|
+
no harness is involved at all), ① runs in the opposite direction (FH is the beneficiary), and ②
|
|
212
|
+
births units — boosting comes *after* birth. So the relation is not containment.
|
|
213
|
+
|
|
214
|
+
🟥 **The canon stops there on purpose and does not draw an arrow.** Pinning a hierarchy makes the
|
|
215
|
+
table drift from how the work actually runs, where one job rides ① and ⑤ together and the result
|
|
216
|
+
flows into ②. Read "different scopes", not "one sits under another". Grades — Ⓑ's included — live
|
|
217
|
+
in one file: [`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)
|
|
218
|
+
§Ⓑ-layering.
|
|
219
|
+
|
|
207
220
|
**They are not equally finished, and you should not read the table as five working features.** Maturity is
|
|
208
221
|
tracked per identity on a four-step scale — `aspirational → partial → RC (stood up in the lab) → REALIZED
|
|
209
222
|
(walked outside)` — with a dated line of evidence for each. Those grades are deliberately **not** copied
|
|
210
223
|
here: a grade kept in two files goes stale in one, and this page exists in four languages, so a copy here
|
|
211
224
|
would be four copies. Before you rely on any row above, read the current grades — that is one file:
|
|
212
225
|
[`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md). The short version if you
|
|
213
|
-
only want one sentence, as of **2026-08-
|
|
214
|
-
|
|
226
|
+
only want one sentence, as of **2026-08-17**: **①, ③, ⑤ and Ⓑ are graded green — demonstrated outside
|
|
227
|
+
the lab; ② and ④ are release candidates — built and calibrated, not yet shown to walk in someone
|
|
228
|
+
else's hands.**
|
|
215
229
|
If that sentence and the gate file disagree, the gate file is right and this line is stale.
|
|
216
230
|
|
|
217
231
|
Two properties cut across all five, and neither is a feature you switch on:
|
package/README.zh.md
CHANGED
|
@@ -194,13 +194,24 @@ Project B ──→ 在 CLAUDE.md 中连接中枢
|
|
|
194
194
|
| **④** | **前沿 → 组织传导 (Frontier → org propagation)** | 从外部到来的东西,一路落进组织 *内部* |
|
|
195
195
|
| **⑤** | **放大器 (Amplifier)** | 一句简短的意图被一路锻造到成品 |
|
|
196
196
|
|
|
197
|
+
**第六行是刻意不放进这张表的。** `Ⓑ` **项目助推器 (Project Booster)** —— FH 的机制去加速
|
|
198
|
+
*对方harness自身的开发* —— 是真实存在且已被评级的,但它 **与这五项不在同一层**。用字母 Ⓑ
|
|
199
|
+
而不是编号,理由正在于此。这五项各自都有落在助推 **之外** 的固有范围:⑤ 覆盖人的意图整体
|
|
200
|
+
(包括完全不涉及harness的工作),① 方向相反(受益者是 FH 自己),② 是 *生出* 单元 ——
|
|
201
|
+
助推发生在生出**之后**。所以这不是包含关系。
|
|
202
|
+
|
|
203
|
+
🟥 **正典到此为止,不画箭头。** 把层级钉死,表就会离实际的运作方式越来越远 —— 现场里一个任务
|
|
204
|
+
同时跑 ① 和 ⑤,结果再流向 ②。请读成 **「不同的范围」**,而不是「谁在谁下面」。等级(含 Ⓑ 的)
|
|
205
|
+
只在一个文件里:[`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)
|
|
206
|
+
§Ⓑ-layering。
|
|
207
|
+
|
|
197
208
|
**它们完成度并不齐平,你也不该把上面那张表读成五项能用的功能。** 成熟度按身份逐项跟踪,用一把
|
|
198
209
|
四级刻度 —— `aspirational(构想)→ partial(部分)→ RC(在实验室里立起来了)→ REALIZED(走到
|
|
199
210
|
外面去了)` —— 每一级都配一条带日期的证据。这些等级刻意 **没有** 被复制到这里:同一个等级放进
|
|
200
211
|
两个文件,总会有一个先腐坏,而本页有四种语言版本,复制到这里就等于四份副本。在你依赖上表任何
|
|
201
212
|
一行之前,请先读当前的等级 —— 那只有一个文件:
|
|
202
213
|
[`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)。如果你只想要
|
|
203
|
-
一句话的版本,截至 **2026-08-
|
|
214
|
+
一句话的版本,截至 **2026-08-17**:**①、③、⑤ 与 Ⓑ 是绿灯 —— 已在实验室之外得到验证;② 与 ④ 是
|
|
204
215
|
候选发布 (RC) —— 已造出并校准,但还没在别人手上走过。** 如果这句话和那个门禁文件对不上,以门禁
|
|
205
216
|
文件为准,这一行就是过期的。
|
|
206
217
|
|