@chrono-meta/fh-gate 2.0.0 → 2.1.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/gstack-content-safety.cap +110 -0
- package/.claude/capabilities/adapters/mate-agent-boundary.cap +110 -0
- package/.claude/capabilities/adapters/qasp-new-code-anchor.cap +116 -0
- package/.claude/capabilities/degrade-direction-scan.cap +24 -0
- package/.claude/capabilities/public-surface-scan.cap +24 -0
- package/.claude/rules/fh_4axis_gate.md +77 -1
- package/.claude-plugin/marketplace.json +3 -3
- package/AGENTS.md +25 -3
- package/CHEATSHEET.md +17 -1
- package/CLAUDE.md +241 -5
- package/README.ja.md +55 -20
- package/README.ko.md +86 -20
- package/README.md +57 -20
- package/README.zh.md +49 -19
- package/knowledge/shared/harness-core/capability_composition_contract.md +68 -0
- package/knowledge/shared/harness-core/fh_three_layer_canon.md +122 -5
- package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +115 -3
- package/knowledge/shared/harness-core/harness_incubator_doctrine.md +83 -1
- package/knowledge/shared/harness-core/harness_terminal_correlation_and_recommendations.md +255 -0
- package/knowledge/shared/harness-core/harness_verification_core_extended.md +1 -1
- package/knowledge/shared/harness-core/ship_readiness_gate.md +234 -11
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +128 -0
- package/knowledge/shared/rules/sister_asset_protocol.md +12 -0
- package/package.json +12 -3
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-commons/agents/quench-challenger.md +6 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +2 -2
- package/plugins/fh-meta/CHANGELOG.md +60 -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/adapters/gstack_content_safety.sh +186 -0
- package/scripts/adapters/mate_agent_boundary.sh +120 -0
- package/scripts/adapters/peer_resolve.sh +99 -0
- package/scripts/adapters/qasp_new_code_anchor.sh +159 -0
- package/scripts/branch_claim.sh +14 -0
- package/scripts/capability_effect_probe.sh +340 -20
- package/scripts/capability_registry_check.sh +271 -20
- package/scripts/chamber_run.sh +24 -3
- package/scripts/chamber_witness.sh +25 -0
- package/scripts/cluster_capability_scan.sh +629 -0
- package/scripts/fh-gate.sh +16 -1
- package/scripts/fh_session_load.sh +70 -0
- package/scripts/package_coverage_check.sh +10 -0
- package/scripts/portability_lint.sh +257 -0
- package/scripts/prepublish_scope_note.sh +139 -0
- package/scripts/relay_channel.sh +70 -7
- package/scripts/selfcheck.sh +167 -5
- package/scripts/test_adapter_lanes.sh +296 -0
- package/scripts/test_capability_entrypoint_shipping.sh +8 -1
- package/scripts/test_fh_gate_regressions.sh +21 -9
- package/scripts/test_marker_axes_run_lanes.sh +87 -3
- package/scripts/test_marker_crossfamily_lanes.sh +31 -1
- package/scripts/test_relay_channel_lanes.sh +76 -0
- package/templates/.git-hooks/pre-commit +239 -12
- package/templates/subagent-tally-hook.json +2 -2
package/CLAUDE.md
CHANGED
|
@@ -43,14 +43,14 @@ core invariants never melt). The nursery also **verifies what it births**: harne
|
|
|
43
43
|
| **③ AI Collaboration Guide** | Accumulates and distributes best practices for token efficiency and dialogue methodology — "how to ask, delegate, and record". | `CHEATSHEET.md` · `knowledge/shared/dialogue/ai_dialogue_playbook.md` · `MEMORY.md` intent-based + associative recall (`knowledge/shared/dialogue/memory_intent_recall.md`) |
|
|
44
44
|
| **Core Axis** | **Harness Engineering (How)** — the methodology and practice axis that realizes the three layers above. The 6-axis framework is the operating unit. **A harness is a means, not an end** — Field harness: "simpler over time" (complexity = warning signal). Meta-harness: *optimize*, not necessarily simplify — complexity earns its scope; red flags are orphaned, redundant, and decorative units, not complexity itself. | `harness_6axis_framework.md` · `hub_compounding_loop.md` · `claude_code_runtime_flow.md` · `plugins/*/agents/` (sub-agents) |
|
|
45
45
|
|
|
46
|
-
> **3층 정본 — 공정 · 엔진 · 정체성**: FH 를 설명하는 뼈대는 세 층이고 셋의 관계가 정본으로 적혀 있다 — **3단 공정**(엔진을 벼리는 순서: 초기 영혼 → 중간 탈상관 가속화 → **마무리
|
|
46
|
+
> **3층 정본 — 공정 · 엔진 · 정체성**: FH 를 설명하는 뼈대는 세 층이고 셋의 관계가 정본으로 적혀 있다 — **3단 공정**(엔진을 벼리는 순서: 초기 영혼 → 중간 탈상관 가속화 → **마무리 6축 태우기**) → **4대 엔진**(영혼·품질게이트·질문하기·맥락유지) → **5대 정체성**(사람이 실제로 쓰는 기능). 기억용 형태는 **3단 공정 · 4대 엔진 · 5대 정체성 · 6축 검증**이나 🟥 **6축은 네 번째 층이 아니다** — 3단 공정 ③단계가 무엇으로 이루어지는지다. **Read `knowledge/shared/harness-core/fh_three_layer_canon.md`** before naming, re-scoping, or citing any of the three — it also defines the **6 verification axes** (ⓐ계열 · ⓑ입장 · ⓒ격리 그라운딩 · ⓓ3자대면 · ⓔ첫실사용 · ⓕ되돌림; §1-a 가 최초 4축, §1-a-2 가 2026-08-16 확장) that the third stage actually consists of, and states why the three are *not* a clean stack. 🟥 **축은 «얼마나 적대적인가»가 아니라 «무엇을 받았는가»로 갈린다** — 받는 것이 같으면 리뷰어를 몇 명 붙여도 같은 사각이 남는다. 🟥 **명칭 충돌 — 이 파일 안에 「4축」이 두 개다.** §FH Improvement **4-Axis Auto-Gate** 의 4축(Axis 1 회귀 · 2 적대 · 3 팬텀 · 4 매니페스트)은 **커밋 게이트**이고, 여기 6축은 **검증 축**이다. 부분적으로만 겹치고(Axis 1·4 는 ⓐ~ⓕ 에 대응이 없다) **서로 대체하지 않는다**. 그래서 6축은 「6축 게이트」가 아니라 **「6축 검증」**으로 부른다. Grade table stays canonical in `ship_readiness_gate.md`; this pointer never carries grades.
|
|
47
47
|
|
|
48
48
|
> **자기 대조는 상시 의무 — 트리거는 발화가 아니라 «지금 FH/PMH 자산을 건드리고 있다»**
|
|
49
49
|
> (운영자 결정 2026-08-09; 이 저장소든 **다른 사용자의 install 이든** 동일). §FH Improvement
|
|
50
50
|
> 4-Axis Auto-Gate 와 **같은 트리거**이므로 새 트리거도 새 파일도 만들지 않는다 — 기록 자리는
|
|
51
51
|
> **4축 마커의 기존 필드**(`axis2-*` · `axis3-*` · `residual`)다.
|
|
52
52
|
> **마커에 반드시 남는 3줄** ① **①영혼** — 설계 *전에* 쓴 «성공 정의 / 절대 안 함»(없으면 `없음`)
|
|
53
|
-
> · ② **돌린 축과 안 돌린 축을 각각
|
|
53
|
+
> · ② **돌린 축과 안 돌린 축을 각각 이름으로.** 마커 `axes-run` 은 **2026-08-17 부로 여섯 글자**를 요구한다 — **기호 키**(ⓐ계열 · ⓑ입장 · ⓒ격리 그라운딩 · ⓓ3자대면 · ⓔ첫실사용 · ⓕ되돌림). 그 전 날짜의 마커는 옛 **ASCII 네 글자**(a·b·c·d) 그대로다. 🟥 **두 배열은 같은 글자가 다른 축을 가리킨다** — 옛 `b`=첫실사용은 지금 **ⓔ**, 옛 `d`=되돌림은 지금 **ⓕ** 라서, 옛 줄을 그대로 옮기면 축 둘이 조용히 뒤바뀌고 아무 오류도 안 난다. **어느 배열인지는 마커 파일명의 날짜로 판별한다**(`< 2026-08-17` = 옛 4축). ⚠️ **표기법은 판별자가 아니다** — 초판이 «기호 키를 보면 6축인 줄 안다» 고 적었는데 **코퍼스 실측이 반증했다**: axes-run 보유 53건 중 기호 키가 4건인데 그중 **2건이 2026-08-10 자이면서 옛 4축 의미로 기호를 쓴다**(`ⓑ 첫실사용` · `ⓓ 되돌림` — 현 배열에선 각각 ⓔ·ⓕ), 혼용도 1건 있다. 훅은 그 셋을 안 읽으므로 커밋은 안 막지만 **감사자의 grep 은 거기서 틀린 답을 낸다**. ⓑ입장은 값을 여기 적지 않고 **`standpoint:` 자기 필드**를 가리킨다(`ⓑ=→standpoint`, 그 줄이 비면 죽은 포인터라 차단). 즉 산문 정본과 기계가 **축 개수로는 맞았고**, 남은 어긋남은 `standpoint:` 값을 **검증하는 코드가 아직 0줄**이라는 것 하나다(명시된 잔여). 형식 정본 = `.claude/rules/fh_4axis_gate.md §Marker axis fields`
|
|
54
54
|
> · ③ **각 축의 컨트롤과 그 생사**. 축을 «돌렸다»의 **최소 증거 = 컨트롤이 살아 있는 실행 출력**
|
|
55
55
|
> 이다 — 안 고른 이유만 적은 것은 준수가 아니다.
|
|
56
56
|
> **비용 경계**: 넷을 매번 다 돌리지 않는다. 실패 모드에 맞춰 **고른다**.
|
|
@@ -122,6 +122,142 @@ onto their single hardest sub-mechanism, and a failure from a **non-harness** ru
|
|
|
122
122
|
metric — each read a live-but-incomplete thing as zero, each caught by the operator, not self-caught.
|
|
123
123
|
Detail: `[[feedback_reinvention_reflex_normalization_counterweight]]`.)
|
|
124
124
|
|
|
125
|
+
## Mechanization Boundary — machinery at irreversible edges and channels, judgment left to evolution
|
|
126
|
+
|
|
127
|
+
**Operator thesis (2026-08-16, verbatim)**: *"기계는 비가역 경계와 채널에만 두고, 판단은 진화에
|
|
128
|
+
맡긴다. 「한 모델로도 도달하지만 진화에 기대어 100%를 뽑는다」는 그 형태에서만 성립한다 — 판단을
|
|
129
|
+
내가 코드로 굳혀두면 그게 바로 진화를 막는 천장이 되니까."*
|
|
130
|
+
|
|
131
|
+
This is the standing answer to *"should this become a check?"*, and it is **not** "mechanize less":
|
|
132
|
+
|
|
133
|
+
| Build machinery | Leave to judgment |
|
|
134
|
+
|---|---|
|
|
135
|
+
| **Irreversible boundaries** — publish · delete · history-rewrite · anything a stranger can observe | Whether a given review was deep enough |
|
|
136
|
+
| **Channels** — that a typed field carries a value, that a verdict is typed not grepped, that grounds are attributable | What the right value *is* |
|
|
137
|
+
|
|
138
|
+
The discriminator: does the check assert a **property of the record** (present · typed · attributable ·
|
|
139
|
+
non-vacuous), or does it assert a **conclusion**? The first is a channel and ages well. The second
|
|
140
|
+
freezes today's judgment into tomorrow's ceiling — and this repo's own thesis is that the model layer
|
|
141
|
+
converges upward while the harness persists, so a frozen conclusion is a harness that gets *worse*
|
|
142
|
+
relative to what it wraps.
|
|
143
|
+
|
|
144
|
+
**Corollary — tier-visible behavior is not automatically a defect.** Some FH capability only becomes
|
|
145
|
+
reachable at a higher tier. `sonnet_floor_doctrine.md` is unchanged and remains a floor: **base ops
|
|
146
|
+
must run 100% at Sonnet, and a tier-gated *base op* is still a defect.** What this corollary adds is
|
|
147
|
+
the other side — where the gap is in *judgment quality* rather than in whether the capability fires,
|
|
148
|
+
the answer is not always to encode the judgment. Discipline and channel-typing are how Sonnet reaches
|
|
149
|
+
it; a frozen rule is how nobody ever exceeds it.
|
|
150
|
+
|
|
151
|
+
⚠️ **Applied honestly to this file's own machinery, same day**: the `declined`-grounds lane added to
|
|
152
|
+
`templates/.git-hooks/pre-commit` is a **channel** check (a claim must name attributable grounds) —
|
|
153
|
+
it does not judge whether decorrelation was warranted. But its grounds test is a *vocabulary grep*,
|
|
154
|
+
and a vocabulary list is a small frozen judgment: a legitimately-phrased `declined` in unforeseen
|
|
155
|
+
wording over-blocks. Accepted because the failure is **loud and cheap** (author rephrases) rather
|
|
156
|
+
than silent, and because it mirrors the existing degrade-branch form — named here rather than
|
|
157
|
+
claimed pure.
|
|
158
|
+
|
|
159
|
+
## Local Execution First — CI is a backstop, never the discovery mechanism
|
|
160
|
+
|
|
161
|
+
**Operator, 2026-08-16**: *"이 실패가 CI 확인 단계에서야 발견되는 건 매우 늦다 … 로컬에서 그
|
|
162
|
+
[대상 레포]를 통해서 실제로 구동시켜 봤다면 안 발생했을까"* and *"CI 확인도 중요하지만 사실 이는
|
|
163
|
+
**깃헙의 기능에 기대는 것**이라고 봐야 하려나."*
|
|
164
|
+
|
|
165
|
+
Both halves are load-bearing. **Late**: a red CI check is discovery at the slowest, most expensive
|
|
166
|
+
point in the loop, after push, after the PR, in front of an audience. **Borrowed**: CI is a
|
|
167
|
+
*platform* feature, so a harness that only finds its own defects there has not built a gate — it has
|
|
168
|
+
outsourced one, and it silently inherits that platform's coverage boundaries as its own.
|
|
169
|
+
|
|
170
|
+
**The order**: run the target's own suite locally, **to completion**, before pushing. Then let CI
|
|
171
|
+
confirm. A green CI on a change whose suite was never run locally is not a second opinion — it is the
|
|
172
|
+
*first* one.
|
|
173
|
+
|
|
174
|
+
**Why "to completion" is the operative phrase** (measured 2026-08-16, pmh-dev): that repo's
|
|
175
|
+
`validate.yml` was wired the same day, so CI's first run was the suite's first real execution ever —
|
|
176
|
+
there was no "previously known-good" for it to confirm. A partial local run would have missed it too:
|
|
177
|
+
the suite printed `SELFCHECK: FAIL` while **neither `FAIL` nor `❌` appeared anywhere in its output**
|
|
178
|
+
(the failing lane used its own vocabulary, `INSTRUMENT ERROR`), so locating it needed `bash -x` to
|
|
179
|
+
the actual failing line. Reading the tail, grepping for the expected token, or trusting an exit code
|
|
180
|
+
you did not trace are all forms of not-running-it.
|
|
181
|
+
|
|
182
|
+
**Relationship to the standpoint axis**: this is that axis's execution half, applied to your own
|
|
183
|
+
change rather than to a peer harness — see `field_verdict_crossfamily_gate.md §7`
|
|
184
|
+
«execution is the load-bearing half». Same principle, two surfaces.
|
|
185
|
+
|
|
186
|
+
## Skeleton, Not Muscle — a wiring change is DONE when the floor tier executes it
|
|
187
|
+
|
|
188
|
+
**Operator, 2026-08-16, verbatim**: *"배선에 대한 건 소넷이 실제로 돌아갈 수 있는지 봐야 잘 된
|
|
189
|
+
거니까. **근육이 아니라 뼈대 기준으로 돌아야 하는 거야.**"* — and, on having had to ask for it:
|
|
190
|
+
*"초기라서 내가 계속 이렇게 해봐라고 메뉴얼로 요청하고 있는데 **알아서 해야 할 거야.**"*
|
|
191
|
+
|
|
192
|
+
**근육(muscle)** = a strong model's raw capability carrying a rule that is not actually wired.
|
|
193
|
+
**뼈대(skeleton)** = the harness itself — the structure that makes the rule fire regardless of who
|
|
194
|
+
is running. A rule that only works because the session was smart enough is not wired; it is being
|
|
195
|
+
*carried*. It fails silently the moment a Sonnet session, a fresh install, or a compacted context
|
|
196
|
+
picks it up — which is every install that is not the author's.
|
|
197
|
+
|
|
198
|
+
**So the definition of done changes.** For any salience-dependent change (a rule, a trigger, an
|
|
199
|
+
enum value, an onboarding path, a doctrine line), "done" is **not** «the text is correct and a
|
|
200
|
+
reviewer agrees». It is: **a blind session at the floor tier, given a realistic situation and not
|
|
201
|
+
told which rule is being tested, actually fires it.** This upgrades `fh_4axis_gate.md`'s target-tier
|
|
202
|
+
sim gate from a near-mandatory step into the completion criterion itself.
|
|
203
|
+
|
|
204
|
+
**And it is self-dispatched.** Do not wait to be asked to run it. The operator asking *"소넷이 실제로
|
|
205
|
+
돌아갈지 확인은 하겠지?"* is the failure — the sim is part of authoring the change, like the
|
|
206
|
+
known-pair is part of authoring an instrument.
|
|
207
|
+
|
|
208
|
+
**Why «reads correctly» is not evidence.** A `tier1b` rung was added to the `standpoint:` enum
|
|
209
|
+
precisely so a static review would stop being recorded as `tier2`. The text was correct; a reader
|
|
210
|
+
would agree — and a reader agreeing is not a measurement, which is this paragraph's whole point.
|
|
211
|
+
|
|
212
|
+
🟥 **RETRACTED (2026-08-17) — the numbers this paragraph used to cite are withdrawn, in BOTH
|
|
213
|
+
directions.** It read: *"Two independent blind Sonnet sims then graded a pure cold-read as `tier2`,
|
|
214
|
+
**0/2** … A static read of my own fix would have scored it PASS. Only running it found the hole."*
|
|
215
|
+
That sim set was **8 runs at `tool_uses: 0`** — the agents never opened a file, so the instrument
|
|
216
|
+
was dead and the grades measure nothing (`tracks/_meta/fh_completed_2026-08-16.md:690`, retracted
|
|
217
|
+
the same day the doctrine was written and **before** this paragraph's own commit). The re-run with a
|
|
218
|
+
live instrument then landed the **opposite** result — the rung was graded correctly — at **reps=1**,
|
|
219
|
+
below this repo's own `reps>=3` bar. **So neither «it failed» nor «it worked» is established.** Do
|
|
220
|
+
not restore either number, and do not read the retraction as proof of the inverse.
|
|
221
|
+
|
|
222
|
+
**The claim that survives is narrower and does not need those numbers**: a static read cannot
|
|
223
|
+
establish that a rule *fires*, because the thing being tested is whether a reader who is not the
|
|
224
|
+
author lands on the right rung — and the author reading their own text is the one reader guaranteed
|
|
225
|
+
to. That is an argument about what a read can measure, not a measurement. The general principle
|
|
226
|
+
(`field_verdict_crossfamily_gate.md §7`'s execution-over-static asymmetry) rests on its own separate
|
|
227
|
+
field evidence; **this paragraph is no longer one of its data points.**
|
|
228
|
+
|
|
229
|
+
**Corollary — what a sim failure means.** It is a defect in the *wiring*, not in the floor model.
|
|
230
|
+
The response is to make the rule fire (disambiguate, give it a mechanical discriminator, move it to
|
|
231
|
+
where the actor reads it) — never to conclude the tier is too weak and move on. That conclusion is
|
|
232
|
+
how a harness quietly becomes tier-gated, which `sonnet_floor_doctrine.md` calls a defect of the
|
|
233
|
+
same severity class as a phantom reference.
|
|
234
|
+
|
|
235
|
+
### Scope, and the target state it exists for (operator, 2026-08-16)
|
|
236
|
+
|
|
237
|
+
**Scope — not FH-only**: *"FH뿐만이 아니라 **기계화 뼈대를 통해서 돌아가는 것들은 다** 이러한 과정을
|
|
238
|
+
거쳐야 제대로 돌아가는지 아닌지 파악할 수 있을 거니까."* Anything whose behavior depends on a
|
|
239
|
+
mechanized skeleton is in scope: field harnesses, propagated `templates/`, a mapped project's own
|
|
240
|
+
gates, **and code contributed upstream to someone else's repo**. The question «does this actually
|
|
241
|
+
fire for a reader who is not me, at the floor tier?» does not become optional because the artifact
|
|
242
|
+
lives outside this repo.
|
|
243
|
+
|
|
244
|
+
**Target state**: *"나머지는 정말 **저자(인간 저자)의 취향만** PR에서 첨삭할 수 있도록 하는 게
|
|
245
|
+
목표야."* A PR should arrive with every **mechanical** question already settled — does it fire ·
|
|
246
|
+
does it degrade in the safe direction · does the floor tier execute it · is the claim reproducible —
|
|
247
|
+
so that the only thing left for the human reviewer is **taste**: naming, framing, whether this is
|
|
248
|
+
the change they want. Review time spent re-deriving whether the thing works is review time
|
|
249
|
+
*taken from* the judgment only a human can supply.
|
|
250
|
+
|
|
251
|
+
**Existence proof, ours, this session**: *"우리가 최근에 클로드온데스크에 기여한 것처럼."*
|
|
252
|
+
`rullerzhou-afk/clawd-on-desk` PR #888 was merged **exactly as submitted, with no changes
|
|
253
|
+
requested** — the owner's words: *"focused, technically sound, and well-tested … we merged it
|
|
254
|
+
exactly as submitted, with no changes needed."* That is the shape: the mechanical case was closed
|
|
255
|
+
before submission (a fixture whose potency was reasoned about in-comment, a lane that re-executes
|
|
256
|
+
the real consumer path rather than asserting a flag), so nothing was left to negotiate but whether
|
|
257
|
+
they wanted it. **This is the bar to hold ourselves to on every outbound PR**, and it is why the
|
|
258
|
+
survivor-lane technique from that same PR is worth absorbing rather than admiring
|
|
259
|
+
(`tracks/_meta/fh_signal_2026-08-16_clawd-survivor-lane-air.md`).
|
|
260
|
+
|
|
125
261
|
## Instrument Calibration — before you trust a number, prove the instrument works *here*
|
|
126
262
|
|
|
127
263
|
An instrument (a scan, a grep, a checker, a diagnostic row, a metric) is a claim about the world only
|
|
@@ -387,12 +523,27 @@ raises resolution *within* one standpoint (the author's own repo, the author's o
|
|
|
387
523
|
target's rules); it does not decorrelate the review's ground-truth source. For a **shared-body /
|
|
388
524
|
cross-harness-boundary** change — scoped by *effect* (alters another harness's behavior, gate
|
|
389
525
|
outcome, or interaction contract), not merely by touching a synced file path — the marker
|
|
390
|
-
additionally carries `standpoint:` — a closed enum (`tier1` content-only ·
|
|
391
|
-
|
|
526
|
+
additionally carries `standpoint:` — a closed enum (`tier1` content-only · **`tier1b(<harness>)`
|
|
527
|
+
STATIC read of the target's own files, executed nothing** · `tier2(<harness>)`
|
|
528
|
+
peer-simulated, **EXECUTED CODE in** the target's own repo — 🟥 the discriminator is mechanical:
|
|
529
|
+
*name the command you ran and the output you saw*; cannot name one → `tier1b`, always. Reading the
|
|
530
|
+
target's real files, however cold, is `tier1b` (🟥 the "two blind Sonnet sims graded a cold-read
|
|
531
|
+
`tier2`" citation that stood here is **RETRACTED** — dead instrument, `tool_uses: 0`; the live re-run
|
|
532
|
+
inverted it at reps=1, below bar. The **rule** stands on its own wording, not on that sim) ·
|
|
533
|
+
`tier2b(<harness>)` same operator, target's real
|
|
392
534
|
runtime (local wiring visible, not independent) · `tier3(<harness>)` a *different* operator of the
|
|
393
535
|
target harness ran it · `not-applicable` · degrade triad `DEGRADED_NO_TARGET_ACCESS` could-not /
|
|
394
536
|
`DEGRADED_NOT_RUN` did-not / `UNKNOWN` did-not-look — same shape as `crossfamily:`'s triad,
|
|
395
|
-
**distinct literal values**, do not reuse crossfamily's tokens).
|
|
537
|
+
**distinct literal values**, do not reuse crossfamily's tokens).
|
|
538
|
+
🟥 **The execution is the load-bearing half** (operator decision 2026-08-16): a static standpoint
|
|
539
|
+
read competes with cross-family review for the same defect classes and mostly loses — *running the
|
|
540
|
+
target harness locally, to completion*, is the part with no substitute. Measured on one delta the
|
|
541
|
+
same day: static read found 1, running the target's own suite found 2 more, one of which printed
|
|
542
|
+
neither `FAIL` nor `❌` and was unreachable by any read. So **`tier2`+ asserts something was RUN** —
|
|
543
|
+
if the review only read, it is `tier1b`, and `tier1b` is deliberately the weak rung so that
|
|
544
|
+
recording it honestly surfaces that the execution arm is still owed. (Broken on the day it was
|
|
545
|
+
written — a static read was recorded as `tier2` because `tier1b` did not yet exist; a missing rung
|
|
546
|
+
gets filled by the next one up rather than staying empty.) Naming note: this collides in
|
|
396
547
|
English with FH's own persona/viewpoint sense of "standpoint" (`fh-meta:beginner`/`main-player`/
|
|
397
548
|
`expert`) — a different axis (which persona reviews, not whose repo is ground truth); kept as-is,
|
|
398
549
|
not renamed, but do not conflate the two. **Prose-only today** — unlike `crossfamily:`, no
|
|
@@ -615,6 +766,7 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
|
|
|
615
766
|
| **"이 절 잘라도 되나", "상주에서 빼자", "cut this section", "is this section load-bearing", "ablate this"** — a proposal to REMOVE resident text (the decision `/context-doctor` and `/salience-splitter` reach, not the routing to them) | **Ablation procedure — do not decide by eye.** Canon = `scripts/probe_scope_check.sh` header (arms · isolation · `reps>=3` · pre-registration · the two leak channels); runner precondition = `bash scripts/ablation_calibrate.sh` exits 0; verdicts land in `.claude/regression/ablation_verdicts.md`. **A section is CUT only on a pre-registered question set an isolated arm B answers correctly** — "I read it and it looks redundant" is not a measurement, and arm B answering *confidently wrong* is a KEEP, not a pass |
|
|
616
767
|
| "wrap up this week", "review", "audit", "weekly", "retrospective" | `/harvest-loop` |
|
|
617
768
|
| "pull this into FH", "reverse-harvest", "worth keeping", "harvest pattern", "field pattern" | `/field-harvest` |
|
|
769
|
+
| **you installed or invoked an EXTERNAL asset (a tool, framework, or repo not ours) and ran it against something this hub owns** — `pip install`/`npm i` of an outside framework, cloning a peer repo to run it, adopting an upstream utility. Fires on the ACT, not on a keyword: the trigger is *"I reached outside because ours did not cover this"* | **Sister Asset Protocol** (`knowledge/shared/rules/sister_asset_protocol.md` §Active adoption) — record the resolution difference, list **items to import** AND **items the hub can propagate** (bidirectionality is a prohibition, not a nicety), and where there is no write access write a `tracks/_audit/proposal_*.md` so the operator can decide whether to contribute it upstream. 🟥 Missed 2026-08-16 on exactly this shape: an external red-team framework was installed, run against a field harness, found a real bypass — and was filed as a `type: reference` **tool pointer** with no sister audit at all |
|
|
618
770
|
| "용광로모드", "crucible mode", "absorb this whole corpus", "throw everything in", "re-forge FH identity", "melt this down" (total-immersion absorption, not cherry-pick — esp. a whole corpus on a core FH axis, or a frontier showcase risking FOMO) | `knowledge/shared/harness-core/crucible_mode.md` (read it, run the chain: total-ingest → steel-quench/phantom-quench melt → governor identity-bonding → sim/persona reforge → field-harvest rebirth; the core invariants stay unmeltable) |
|
|
619
771
|
| "review this PR", "check diff", "code review" | code diff → built-in `/code-review`·`/review` · FH-asset coherence → `/hub-cc-pr-reviewer` (role split) |
|
|
620
772
|
| "keep watching X", "poll this", "check every N minutes", recurring WATCH item | built-in `/loop` (interval runner) — pair with the WATCH list, don't hand-poll |
|
|
@@ -660,6 +812,40 @@ At session start, determine the last run time from history files and auto-propos
|
|
|
660
812
|
|
|
661
813
|
> A cadence reminder the user has repeatedly declined is **muted** per the UAP (see the loop below) — don't re-nag.
|
|
662
814
|
|
|
815
|
+
#### Expedition (원정) — measured first, cadence only if it earns one
|
|
816
|
+
|
|
817
|
+
**Operator, agreed and recorded 2026-08-17** (it had been agreed verbally before and was **not in any
|
|
818
|
+
file** — grepped, zero hits; that gap is why this paragraph exists): *"원정이 가치 있고 성공적이었다면
|
|
819
|
+
**주기적으로 제안하는 것**으로 가기로 했었지."*
|
|
820
|
+
|
|
821
|
+
An **expedition** is a deliberate, extended run that uses the harness cluster at full stretch against
|
|
822
|
+
targets outside this hub — contributing to an external repo, declaring a peer's assets as cluster
|
|
823
|
+
nodes, driving a foreign codebase through FH's own gates. Its operating conditions are unusual and
|
|
824
|
+
must not be judged by another track's: **token cost is expected and pre-approved** (the `/goal-quench`
|
|
825
|
+
budget gate still applies — approval removes the prompt, never the gate), **one session will not
|
|
826
|
+
finish it**, and the success definition is not "expedition completed" but ⓐ **finding the pieces that
|
|
827
|
+
move identities to 🟢 faster than internal work would** and ⓑ **hardening existing weak points by
|
|
828
|
+
stressing them somewhere real**. An expedition that builds nothing and produces those two has succeeded.
|
|
829
|
+
|
|
830
|
+
**Promotion path — and the interval is set AFTER the first one, not before** (operator, 2026-08-17:
|
|
831
|
+
*"그 주기를 얼마나에 한 번씩 잡아야 할지도 그때 세우도록 할게 — 원정 한 차례 다 마치고 답습한 후에"*).
|
|
832
|
+
Expeditions are **not** on a cadence today; they are proposed case-by-case.
|
|
833
|
+
|
|
834
|
+
Sequence, in order, and do not skip to the end:
|
|
835
|
+
1. **Run one, all the way through.** Not a slice — a complete expedition, however many sessions it
|
|
836
|
+
takes (the thread-continuation block on the session card is the carrier).
|
|
837
|
+
2. **Absorb it** (답습) — what came back, what it cost, what it hardened, what it found that internal
|
|
838
|
+
work would not have.
|
|
839
|
+
3. **Then set the interval**, informed by (2). An expedition's cadence has to be derived from what one
|
|
840
|
+
actually costs and yields — a number picked before the first run is a guess wearing a schedule.
|
|
841
|
+
|
|
842
|
+
⚠️ **This deliberately does NOT use the `operations.md` `accepted ≥ 60%` promotion gate.** That gate
|
|
843
|
+
measures how often a proposal class is *accepted*, which is the wrong quantity here: an expedition
|
|
844
|
+
could be accepted every time and still not warrant a schedule, or be proposed once and clearly warrant
|
|
845
|
+
one. The evidence that sets the interval is the **completed run itself**, not an acceptance rate.
|
|
846
|
+
**No new gate, no new cadence table, no new registry** either — when the interval is set, it graduates
|
|
847
|
+
into the existing §Cadence-Rules table like any other row.
|
|
848
|
+
|
|
663
849
|
#### Event-bound proposals (context-entry, not time)
|
|
664
850
|
|
|
665
851
|
Some proposals are not *time*-overdue — they fire **once when a specific work context is entered**. `persona-innovator` (ideation/naming + external-frontier absorption) is most valuable in exactly two contexts and friction-noise everywhere else, so it is proposed on context-entry rather than every session or every N days:
|
|
@@ -988,6 +1174,37 @@ Closing phrase detected ("wrap up", "done", "good work", "end session", etc.)
|
|
|
988
1174
|
across `package.json` + every `.claude-plugin/plugin.json` + `.claude-plugin/marketplace.json` (single-source =
|
|
989
1175
|
`package.json`) → Pre-Publish gate → `npm publish` → `git tag vX.Y.Z` at publish. **Propose, don't
|
|
990
1176
|
auto-publish.** (Why lockstep — Codex caches on plugin.json version — + drift-check + tag-drift caveat → §detail below.)
|
|
1177
|
+
|
|
1178
|
+
🟥 **WHICH DIGIT — operator decision 2026-08-17, and it is deliberately NOT strict semver.**
|
|
1179
|
+
There was no policy before this line, which is why one session proposed three different bumps
|
|
1180
|
+
for the same delta on three different (and each individually defensible) grounds. Decide by
|
|
1181
|
+
**what the number tells a reader**, not by whether anything technically broke:
|
|
1182
|
+
|
|
1183
|
+
| Bump | Reserved for (operator's own wording, 2026-08-17) |
|
|
1184
|
+
|---|---|
|
|
1185
|
+
| **major** `+1.0.0` | **any one of three**: ⓐ **완전히 새로 지음** — rebuilt from scratch, not extended · ⓑ **정체성이 확립됨** — an identity of the five (+Ⓑ) actually standing 🟢, not progressing toward it · ⓒ **기능이 혁신적으로 변경되거나 늘어남** — a capability *class* appears or is replaced, not a capability instance. 🟥 **Never** for tightening a gate that already existed |
|
|
1186
|
+
| **minor** `+0.1.0` | 미들급 — new assets, new gate lanes, doctrine that changes behavior; **including changes that break a consumer's gate acceptance**, which then carry a mandatory `BREAKING (gate):` line |
|
|
1187
|
+
| **patch** `+0.0.1` | 트리비아급 — fixes, wiring, docs that change no behavior |
|
|
1188
|
+
|
|
1189
|
+
**The discriminator between major-ⓒ and minor**: *class* vs *instance*. A sixth Wave-1 attack
|
|
1190
|
+
angle is an instance → minor. An attack-angle **registry** where none existed is a class → major.
|
|
1191
|
+
Today's delta is instances and tightenings throughout, which is why it is 2.1.0 and not 3.0.0
|
|
1192
|
+
even though it breaks a gate acceptance.
|
|
1193
|
+
|
|
1194
|
+
**Why gate-tightenings are minor here, stated so it is not mistaken for hiding a break**: what
|
|
1195
|
+
breaks is the **record format of a gitignored local marker**, not an API or the consumer's code;
|
|
1196
|
+
the hook prints exactly what to write instead; and the blast radius needs the consumer to have
|
|
1197
|
+
installed the hook AND be making a load-bearing change AND have used the specific old form.
|
|
1198
|
+
Against that, strict semver would burn a major on every gate we tighten — this repo took 2.0.0
|
|
1199
|
+
for a publish-freshness gate one day and would have taken 3.0.0 for a commit gate the next.
|
|
1200
|
+
**A major number that arrives monthly stops meaning anything**, and the milestone it should be
|
|
1201
|
+
reserved for would have no word left.
|
|
1202
|
+
|
|
1203
|
+
⚠️ **The condition that makes this honest, and it is not optional**: a minor that breaks gate
|
|
1204
|
+
acceptance MUST carry `BREAKING (gate): <what now blocks> — <the one-line remedy>` in the
|
|
1205
|
+
release description AND the CHANGELOG. Without it this policy is just burying breaks in minors.
|
|
1206
|
+
**Applies from 2026-08-17 forward, not retroactively** (2.0.0 was the same class and is left
|
|
1207
|
+
as-is rather than rewritten).
|
|
991
1208
|
→ ④-c Handoff lifecycle (cross-machine continuity) — when a durable **result artifact lands** this
|
|
992
1209
|
session (mechanical hint: a new `*result*`/`*signal*`/`*_run_*` file in your companion store or
|
|
993
1210
|
`tracks/`), do two things: **(a) ④-c stamps** any `"run this/start here"` run-handoff whose
|
|
@@ -1050,6 +1267,25 @@ Card update is NOT a sub-step of harvest-loop — even if harvest-loop is skippe
|
|
|
1050
1267
|
① **Agent View pre-read** (see above) → ② Step 0-b cross-check generates removal list → ③ Remove completed items → ④ Add new priorities → ⑤ Fix stale paths/versions → ⑥ Overwrite → ⑦ Output "BEFORE N items → AFTER M items" diff.
|
|
1051
1268
|
"Delta update" not "snapshot" — completed items remaining in next session card is a bug.
|
|
1052
1269
|
|
|
1270
|
+
**Thread-continuation block (operator, 2026-08-16)**: *"특정 주제에 집중해서 진행한 세션이라면
|
|
1271
|
+
앞으로도 마감할 때 그 갈래로 이어갈 수 있게 알아서 정리해줘."* When a session ran predominantly on
|
|
1272
|
+
**one thread** (an incubation, one field harness, one doctrine arc) — as opposed to scattered
|
|
1273
|
+
maintenance — the card additionally carries a **named continuation block for that thread**, without
|
|
1274
|
+
being asked:
|
|
1275
|
+
|
|
1276
|
+
```
|
|
1277
|
+
🧵 <thread name> — 이어가려면
|
|
1278
|
+
지금 어디 : <state, with the artifact that proves it — a verdict line, a test count, a merged PR>
|
|
1279
|
+
다음 한 걸음: <the single next action, concrete enough to start without re-deriving>
|
|
1280
|
+
안 닫힌 것 : <what is open, stated as open — not omitted>
|
|
1281
|
+
읽을 것 : <the 1-3 files that reconstitute context, in read order>
|
|
1282
|
+
```
|
|
1283
|
+
|
|
1284
|
+
Not a second card and not a summary of the session — it is the **entry point for the next session
|
|
1285
|
+
that picks up this thread**, and it is written so that session does not have to re-derive where the
|
|
1286
|
+
thread stood. A scattered-maintenance session correctly writes none. Two or more threads → one block
|
|
1287
|
+
each, in priority order.
|
|
1288
|
+
|
|
1053
1289
|
## Session Sync / Knowledge Push Protocol
|
|
1054
1290
|
|
|
1055
1291
|
> Detailed procedure: `knowledge/shared/rules/sync_push_protocols.md`
|
package/README.ja.md
CHANGED
|
@@ -200,7 +200,7 @@ Project B ──→ CLAUDE.md でハブを接続
|
|
|
200
200
|
|
|
201
201
|
| | 正体 | 人が手にするもの |
|
|
202
202
|
|---|---|---|
|
|
203
|
-
| **①** |
|
|
203
|
+
| **①** | **ハーネスクラスター** | 1つの作業が複数のハーネスに乗り、ガバナンスはその*あいだ*で計算されます。その荷重を担う下位機構が **クロスハーネス** — 持っていない能力は**呼んで使い**(作らない)、作るべきものが見えたら**取り込む** |
|
|
204
204
|
| **②** | **プロジェクトインキュベーター** | 新しいハーネスが空のスキャフォールドではなく、**生まれた場所で既に歩ける状態**で出てきます |
|
|
205
205
|
| **③** | **ガバナンスゲート** | 出してはいけないものが、覚えて確認する代わりに**機械的に**止まります |
|
|
206
206
|
| **④** | **フロンティア → 組織への伝播** | 外から届いたものが、組織の*内側*まで届ききります |
|
|
@@ -246,8 +246,13 @@ Project B ──→ CLAUDE.md でハブを接続
|
|
|
246
246
|
4大エンジン それを可能にする能力 (能力 — できること)
|
|
247
247
|
↑ 生み出しているのは
|
|
248
248
|
3段工程 そのエンジンを鍛える「順序」 (工程 — どう作られるか)
|
|
249
|
+
└ ③段階 = 6軸ゲート (下の §6つの検証軸)
|
|
249
250
|
```
|
|
250
251
|
|
|
252
|
+
覚えやすい形にすると **3段工程 · 4大エンジン · 5つの正体 · 6軸ゲート** です。
|
|
253
|
+
⚠️ ただし **6軸は4つめの層ではありません** — 3段工程の**③段階が何でできているか**です。
|
|
254
|
+
4つを横並びの層として読むと、この節がそもそも直そうとしていた「層が入ってこない」問題が戻ってきます。
|
|
255
|
+
|
|
251
256
|
**4大エンジン。** それぞれが上のいずれかの正体を足元で支えています。これらはこのページのために発明された
|
|
252
257
|
ものではありません: 出荷準備ゲートが既に、すべての正体をこの同じ4つの能力に対して専用の列で採点して
|
|
253
258
|
いました([`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md))。ですから
|
|
@@ -286,29 +291,59 @@ Project B ──→ CLAUDE.md でハブを接続
|
|
|
286
291
|
2度持つだけです。並列化それ自体には方向がなく、選ぶのは①の判断回路です。
|
|
287
292
|
これは「働き方」であって、③の最終検査ではありません。
|
|
288
293
|
|
|
289
|
-
③ 最後に
|
|
290
|
-
焼き切る
|
|
294
|
+
③ 最後に6つの軸で 下の6軸です。敵対的レビューはそのうちの1つであって、全部ではありません —
|
|
295
|
+
焼き切る 敵対性は**姿勢**であって軸ではありません。どの軸にも乗せられますが、
|
|
296
|
+
乗せたところでその軸に見えないものはやはり見えません
|
|
291
297
|
```
|
|
292
298
|
|
|
293
|
-
**
|
|
294
|
-
|
|
299
|
+
**6つの検証軸** — 「レビューしました」が実際には最初の1つだけを指していた、と判明しがちな場所です。
|
|
300
|
+
|
|
301
|
+
🟥 **軸は「どれだけ敵対的か」では分かれません。「何を受け取ったか」で分かれます。** 受け取るものが
|
|
302
|
+
同じなら、レビュアーを何人足しても**同じ盲点が残ります**。ですから下の表でいちばん重要な列は
|
|
303
|
+
*受け取るもの*です:
|
|
295
304
|
|
|
296
|
-
| 軸 |
|
|
305
|
+
| 軸 | **受け取るもの** | 何を捕まえるか | 典型的な計器 |
|
|
297
306
|
|---|---|---|---|
|
|
298
|
-
| **ⓐ 別ファミリー** |
|
|
299
|
-
| **ⓑ
|
|
300
|
-
| **ⓒ
|
|
301
|
-
| **ⓓ
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
307
|
+
| **ⓐ 別ファミリー** | diff + 著者のフレーミング | **実装**が間違っている | 別のモデルファミリーからのレビュアー (`auto-decorrelation`) |
|
|
308
|
+
| **ⓑ 立ち位置 (standpoint)** | diff + **対象ハーネス自身の正典** | **引用した規約が本当にそう言っているか** | そのハーネス自身のレポ · ルールの側で diff を走らせる ([`§7`](knowledge/shared/harness-core/field_verdict_crossfamily_gate.md)) |
|
|
309
|
+
| **ⓒ 隔離されたグラウンディング** | 著者が書いた文 + いまのツリー | **主張**が間違っている | 書いていない誰かが、書かれている内容を測り直す |
|
|
310
|
+
| **ⓓ 第三者との対面** | 問題 + **他人のコードベース** | **これはもう解かれているのでは** · 自分の変更が他人のレポのどこに触るか | 無関係な第三のレポで同じ問題を見る |
|
|
311
|
+
| **ⓔ 初の実使用** | 実物の対象1件 | **測り方**が間違っている — 計器の計器 | 実際の対象1件に対して一度走らせ、結果を自分の手で確かめる |
|
|
312
|
+
| **ⓕ 戻して観察する** | 配線を消したツリー | **アンカー**が間違っている — その検査は装飾だ | 守っている対象を消して、*その特定の*検査が赤くなることを確かめる |
|
|
313
|
+
|
|
314
|
+
**6つを毎回すべて回すわけではなく、それが設計です** — 掛け算せずに、**選んでください**:
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
1行の修正(typo · gitignore) 何も焼きません。①の回路すら不要 — 答えが1つなら、
|
|
318
|
+
植えること自体がオーバーヘッドです
|
|
319
|
+
通常のコード変更(可逆) ⓔ 初の実使用 + ⓕ 戻し
|
|
320
|
+
verdict · ゲートのコード + ⓐ 別ファミリー — verdict のロジックは、著者と同じ楽観を
|
|
321
|
+
共有するレビュアーが**構造的に**見落とします
|
|
322
|
+
他人のハーネスに触れる変更 + ⓑ 立ち位置 — ファミリーを3つ足しても、全員が自分の
|
|
323
|
+
フレーミングを飲んでしまえば「その正典が本当にそう
|
|
324
|
+
言っているか」は誰も見ません
|
|
325
|
+
超大型 · 不可逆 + ⓒ 隔離 + ⓓ 第三者との対面。全部焼きます
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
⚠️ **ⓓ 第三者との対面はもっとも高くつき、固有の収穫がもっとも小さい軸です。** ところがその少数は
|
|
329
|
+
すべて**境界をまたぐ種類**でした(他人がすでに廃止していたルール · 他人のレポが自分のファイルを
|
|
330
|
+
import している)。小さく戻せる変更ではそうした項目は**そもそも発生せず**、大きく不可逆なときは
|
|
331
|
+
まさにその2つが事故になります。コストが正当化されるのはそこです。
|
|
332
|
+
|
|
333
|
+
**なぜこれが基盤モデルの進化で置き換わらないのか** — 軸は*レビュアーの能力*ではなく**入力**で
|
|
334
|
+
定義されます。モデルが強くなっても、**「受け取っていない情報」は依然として見えません。** スキャフォー
|
|
335
|
+
ルディングはモデルが良くなれば脱げますが、**入力境界の脱相関は脱げません**。そして単独の著者は定義上
|
|
336
|
+
自分の入力の外へは出られません。🟥 正直な際どさ: エージェントが**ツールで自分から入力を取りに行く**と
|
|
337
|
+
境界はぼやけます — 実際「ストア全件が使われていない」と「例外の握り潰し」は ⓐ · ⓒ でも捕まえられる、
|
|
338
|
+
と外部の判定は見ました(自分で grep するからです)。逆に「他人のレポが過去に廃止したルール」は
|
|
339
|
+
**ツールでも取りに行けません** — そのプロジェクトのレビュー履歴にアクセスする理由がそもそも
|
|
340
|
+
ないからです。ⓓ が残るのはそこです。
|
|
341
|
+
|
|
342
|
+
> 🟥 **引用する前に読むべき限界**: この6軸の表は **n=1**(1つの成果物 · 1セッション · 1人の著者)です。
|
|
343
|
+
> 軸の「非重複」が構造的なのか、その日の偶然なのかは**未測定**です。さらに著者の自己採点を取り除く
|
|
344
|
+
> ために、発見16件を**出典を消したまま**別ファミリーの分類器2つにブラインドで判定させたところ、
|
|
345
|
+
> 著者が ⓓ に帰属させた**5件のうち3件が別の軸と判定されました** — その3件は「その軸が必要だったもの」
|
|
346
|
+
> ではなく「別の軸が見落としたもの」でした。表の帰属はその分だけ割り引いて読んでください。
|
|
312
347
|
|
|
313
348
|
> **正直な注記 — これはきれいな積み木ではなく、そこが要点です。** 段階①と段階③はエンジンと同じ素材で
|
|
314
349
|
> できているので、下の層が上の層を使っています。この矛盾は*主語*で解けます: **エンジン**は FH が
|
package/README.ko.md
CHANGED
|
@@ -197,7 +197,7 @@ Project B ──→ CLAUDE.md에서 허브 연결
|
|
|
197
197
|
|
|
198
198
|
| | 정체성 | 사람이 얻는 것 |
|
|
199
199
|
|---|---|---|
|
|
200
|
-
| **①** |
|
|
200
|
+
| **①** | **하네스 클러스터** | 하나의 작업이 여러 하네스를 타고, 거버넌스는 그 *사이에서* 계산됨. 하위 기제 **크로스하네스** = 없는 능력을 **호출해 쓰고**(안 짓는다) 지어야 할 것이 보이면 **흡수한다** |
|
|
201
201
|
| **②** | **프로젝트 인큐베이터** | 새 하네스가 빈 스캐폴드가 아니라 **태어난 자리에서 이미 걷는 상태로** 나옴 |
|
|
202
202
|
| **③** | **거버넌스 게이트** | 나가면 안 되는 것이 점검을 기억해서가 아니라 **기계적으로** 막힘 |
|
|
203
203
|
| **④** | **프런티어 → 조직 전파** | 밖에서 들어온 것이 조직 *안쪽까지* 내려앉음 |
|
|
@@ -242,8 +242,13 @@ Project B ──→ CLAUDE.md에서 허브 연결
|
|
|
242
242
|
네 엔진 그것을 가능하게 하는 능력 (능력 — 무엇을 할 수 있나)
|
|
243
243
|
↑ 만들어내는 것
|
|
244
244
|
3단 공정 그 엔진들을 벼리는 순서 (공정 — 어떻게 만들어지나)
|
|
245
|
+
└ ③단계 = 6축 게이트 (아래 §여섯 검증 축)
|
|
245
246
|
```
|
|
246
247
|
|
|
248
|
+
기억하기 좋은 형태로는 **3단 공정 · 4대 엔진 · 5대 정체성 · 6축 게이트**입니다.
|
|
249
|
+
⚠️ 다만 **6축은 네 번째 층이 아닙니다** — 3단 공정의 **③단계가 무엇으로 이루어지는지**입니다.
|
|
250
|
+
넷을 나란한 층으로 읽으면 이 절이 애초에 고치려던 «층이 안 들린다» 문제가 되돌아옵니다.
|
|
251
|
+
|
|
247
252
|
**네 엔진.** 각각은 위의 어떤 정체성이 딛고 서 있는 바닥입니다. 이 페이지를 위해 만들어낸 것이
|
|
248
253
|
아닙니다: 레디니스 게이트가 이미 모든 정체성을 이 같은 네 능력에 대해 별도 열로 채점하고 있었고
|
|
249
254
|
([`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)), 이름을 붙인 것은
|
|
@@ -284,29 +289,90 @@ Project B ──→ CLAUDE.md에서 허브 연결
|
|
|
284
289
|
병렬화 자체엔 방향이 없고, 고르는 것은 ①의 판단 회로.
|
|
285
290
|
이건 «일하는 방식»이지 ③의 마감 검사가 아님
|
|
286
291
|
|
|
287
|
-
③ 끝에서
|
|
288
|
-
태우기
|
|
292
|
+
③ 끝에서 6축으로 아래 여섯 축. 적대검증은 그중 하나이지 전부가 아님 —
|
|
293
|
+
태우기 적대성은 **자세**지 축이 아닙니다. 아무 축에나 얹을 수 있고,
|
|
294
|
+
얹어도 그 축이 못 보는 것은 여전히 못 봅니다
|
|
289
295
|
```
|
|
290
296
|
|
|
291
|
-
|
|
292
|
-
|
|
297
|
+
**여섯 검증 축** — "리뷰했다"가 실제로는 이 중 첫 번째 하나만 뜻하는 경우가 대부분입니다.
|
|
298
|
+
|
|
299
|
+
🟥 **축은 «얼마나 적대적인가»로 갈리지 않습니다. «무엇을 받았는가»로 갈립니다.** 받는 것이 같으면
|
|
300
|
+
리뷰어를 몇 명 붙여도 **같은 사각이 남습니다**. 그래서 아래 표에서 가장 중요한 열은 *받는 것*입니다:
|
|
293
301
|
|
|
294
|
-
| 축 |
|
|
302
|
+
| 축 | **받는 것** | 무엇이 틀린 경우를 잡나 | 대표 계기 |
|
|
295
303
|
|---|---|---|---|
|
|
296
|
-
| **ⓐ 다른 패밀리** |
|
|
297
|
-
| **ⓑ
|
|
298
|
-
| **ⓒ
|
|
299
|
-
| **ⓓ
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
한
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
304
|
+
| **ⓐ 다른 패밀리** | diff + 저자의 프레이밍 | **구현**이 틀림 | 다른 모델 패밀리의 리뷰어(`auto-decorrelation`) |
|
|
305
|
+
| **ⓑ 입장** | diff + **대상 하네스의 정본** | **인용한 규약이 정말 그렇게 말하나** | 그 하네스 자신의 레포·규칙에서 diff를 돌림 ([`§7`](knowledge/shared/harness-core/field_verdict_crossfamily_gate.md)) |
|
|
306
|
+
| **ⓒ 격리 그라운딩** | 저자가 쓴 문장 + 지금의 트리 | **주장**이 틀림 | 그것을 쓰지 않은 쪽이 적힌 내용을 다시 잼 |
|
|
307
|
+
| **ⓓ 3자 대면** | 문제 + **남의 코드베이스** | **이미 풀린 문제 아닌가** · 내 변경이 남의 레포를 어디서 만지나 | 관련 없는 제3의 레포에서 같은 문제를 봄 |
|
|
308
|
+
| **ⓔ 첫 실사용** | 실물 대상 한 건 | **재는 방식**이 틀림 — 계기의 계기 | 진짜 대상 하나에 돌리고 결과를 손으로 확인 |
|
|
309
|
+
| **ⓕ 되돌려 관찰** | 배선을 지운 트리 | **앵커**가 틀림 — 검사가 장식임 | 지키는 대상을 지우고 *바로 그* 검사가 빨개지는지 확인 |
|
|
310
|
+
|
|
311
|
+
**여섯을 매번 다 돌리지 않으며, 그것이 설계입니다** — 곱하지 말고 **고르세요**:
|
|
312
|
+
|
|
313
|
+
```
|
|
314
|
+
한 줄 수리(오타 · gitignore) 아무것도 안 태움. ①영혼도 불요 — 답이 하나면 심는 것이 오버헤드
|
|
315
|
+
일반 코드 변경(가역) ⓔ 첫 실사용 + ⓕ 되돌림
|
|
316
|
+
판정 · 게이트 코드 + ⓐ 다른 패밀리 — 판정 로직은 저자와 같은 낙관을 공유하는
|
|
317
|
+
리뷰어가 **구조적으로** 놓침
|
|
318
|
+
남의 하네스에 닿는 변경 + ⓑ 입장 — 패밀리를 셋 붙여도 전부 내 프레이밍을 먹으면
|
|
319
|
+
«그 정본이 그렇게 말하나»는 아무도 안 봄
|
|
320
|
+
초대형 · 비가역 + ⓒ 격리 + ⓓ 3자 대면. 전부 태움
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
⚠️ **ⓓ 3자 대면은 가장 비싸고 고유 수확이 가장 작습니다.** 그런데 그 소수가 전부 **경계를 넘는
|
|
324
|
+
종류**였습니다(남이 이미 폐기한 규칙 · 남의 레포가 내 파일을 임포트). 작고 되돌릴 수 있는 변경에선
|
|
325
|
+
그런 항목이 **생기지 않고**, 크고 비가역이면 정확히 그 둘이 사고가 됩니다. 비용이 정당해지는
|
|
326
|
+
지점이 거기입니다.
|
|
327
|
+
|
|
328
|
+
**왜 이것이 기반 모델 발전으로 대체되지 않나** — 축은 *리뷰어의 능력*이 아니라 **입력**으로
|
|
329
|
+
정의됩니다. 모델이 세져도 **«받지 않은 정보»는 여전히 못 봅니다.** 스캐폴딩은 모델이 좋아지면
|
|
330
|
+
벗겨지지만 **입력 경계 탈상관은 벗겨지지 않으며**, 단일 저자는 정의상 자기 입력을 벗어날 수 없습니다.
|
|
331
|
+
🟥 정직한 가장자리: 에이전트가 **도구로 스스로 입력을 더 가져오면** 경계는 흐려집니다 — 실제로
|
|
332
|
+
「저장소 전수 미사용」과 「예외 삼킴」은 ⓐ·ⓒ 도 잡을 수 있다고 외부 판정이 봤습니다(스스로 grep 하니까).
|
|
333
|
+
반대로 「남의 레포가 과거에 폐기한 규칙」은 **도구로도 가져올 수 없습니다** — 그 프로젝트의 리뷰
|
|
334
|
+
이력에 접근할 이유가 애초에 없기 때문입니다. 거기가 ⓓ가 남는 자리입니다.
|
|
335
|
+
|
|
336
|
+
> 🟥 **인용 전에 읽어야 할 한계**: 이 6축 표는 **n=1**(한 산출물 · 한 세션 · 한 저자)입니다.
|
|
337
|
+
> 축의 «비중복»이 구조적인지 그날 우연인지는 **미측정**입니다. 그리고 저자 자평을 걷어내려고
|
|
338
|
+
> 발견 16건을 **출처를 지운 채** 다른 패밀리 분류자 둘에게 블라인드 판정시켰더니, 저자가 ⓓ에
|
|
339
|
+
> 귀속시킨 **5건 중 3건이 다른 축으로 판정됐습니다** — 그 셋은 «축이 필요했던 것»이 아니라
|
|
340
|
+
> «다른 축이 놓친 것»이었습니다. 표의 귀속은 그만큼 줄여 읽으세요.
|
|
341
|
+
|
|
342
|
+
### 🟥 「4」가 두 개입니다 — 그리고 예전 이름까지 세면 셋이었습니다
|
|
343
|
+
|
|
344
|
+
같은 저장소 안에서 「4」가 서로 다른 것을 가리킵니다. 인용하기 전에 어느 쪽인지 확인하세요:
|
|
345
|
+
|
|
346
|
+
| 이름 | 무엇 | 어디에 붙나 |
|
|
347
|
+
|---|---|---|
|
|
348
|
+
| **4축 게이트** | Axis 1 회귀 · 2 적대 · 3 팬텀 · 4 매니페스트 | **커밋 경계** — 층이 아닙니다 |
|
|
349
|
+
| **4대 엔진** | 영혼 · 품질게이트 · 질문하기 · 맥락유지 | **능력 층** |
|
|
350
|
+
| ~~4축 검증~~ | → **6축 검증**으로 확장됨 | 3단 공정 ③단계의 내용물 |
|
|
351
|
+
|
|
352
|
+
셋은 **부분적으로만 겹치고 서로 대체하지 않습니다** — Axis 2·3 이 ⓐ·ⓒ 와 가깝지만
|
|
353
|
+
**Axis 1·4 는 검증 축에 대응이 아예 없습니다.** 그래서 6축은 «6축 게이트»가 아니라
|
|
354
|
+
**«6축 검증»**으로 부릅니다.
|
|
355
|
+
|
|
356
|
+
### 4축 게이트 — 층에 끼지 않고 커밋 경계에 직교로 붙습니다
|
|
357
|
+
|
|
358
|
+
FH 자산이 바뀌면 **그 세션 첫 커밋 전에** 자동으로 도는 체인이고,
|
|
359
|
+
`templates/.git-hooks/pre-commit` 이 하드 차단합니다. 위 세 층 어디에도 들어가지 않습니다:
|
|
360
|
+
|
|
361
|
+
| 축 | 계기 | 무엇을 잡나 |
|
|
362
|
+
|---|---|---|
|
|
363
|
+
| **Axis 1 · 후방** | `templates/regression_guard.sh` | 절 소실 · 깨진 참조 · 문법 오류 · 줄 감소 |
|
|
364
|
+
| **Axis 2 · 적대** | `steel-quench` | 트리거 충돌 · 설계 공격면 · 과설계 단계 |
|
|
365
|
+
| **Axis 3 · 전방** | `phantom-quench` | 팬텀 참조 · 없는 경로 · 죽은 외부 링크 |
|
|
366
|
+
| **Axis 4 · 기록** | `edit-manifest` | 예측 영향 기록 — 예측·검증 루프를 닫습니다 |
|
|
367
|
+
|
|
368
|
+
> **더 알아보려면** — 층·축·계기가 한 장에 배치된 구조 참조와, 각 자리에 어떤 스킬·에이전트·
|
|
369
|
+
> 스크립트가 붙는지의 매핑:
|
|
370
|
+
> [`fh_three_layer_canon.md`](knowledge/shared/harness-core/fh_three_layer_canon.md)
|
|
371
|
+
> (§1-a 최초 4축 · §1-a-2 6축 확장 · §2 엔진 · §3 정체성) ·
|
|
372
|
+
> [`fh_4axis_gate.md`](.claude/rules/fh_4axis_gate.md)(커밋 게이트) ·
|
|
373
|
+
> [`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)(정체성 등급).
|
|
374
|
+
> ⚠️ 정본 표에서 온 배치와 라우팅 판단을 갈라 읽으세요 — 엔진↔정체성 매핑과 위 4축 표는
|
|
375
|
+
> **정본 그대로**이고, 「어느 스킬이 어느 정체성에 붙나」는 **판단**입니다.
|
|
310
376
|
|
|
311
377
|
> **정직한 주석 — 이것은 깔끔한 스택이 아니고, 그게 핵심입니다.** 1단계와 3단계는 엔진과 **같은
|
|
312
378
|
> 재료**로 되어 있어서, 아래층이 위층을 씁니다. 모순은 *주어*에서 풀립니다: **엔진**은 FH가 당신의
|