@chrono-meta/fh-gate 2.6.0 → 2.7.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 +26 -3
- package/.claude-plugin/marketplace.json +2 -2
- package/AGENTS.md +24 -3
- package/CLAUDE.md +39 -12
- package/README.ja.md +32 -8
- package/README.ko.md +32 -8
- package/README.md +112 -15
- package/README.zh.md +28 -8
- package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +19 -5
- package/knowledge/shared/harness-core/harness_incubator_doctrine.md +12 -2
- package/knowledge/shared/harness-core/multi_model_sidecar_strategy.md +32 -0
- package/knowledge/shared/harness-core/ship_readiness_gate.md +77 -8
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +90 -0
- package/knowledge/shared/rules/knowledge_layer_seam.md +1 -1
- package/package.json +13 -2
- 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 +111 -0
- package/plugins/fh-meta/agents/persona-innovator.md +170 -0
- package/plugins/fh-meta/skills/public-surface-audit/SKILL_detail.md +16 -1
- package/plugins/fh-meta/skills/steel-quench/SKILL.md +97 -0
- package/scripts/adapters/peer_resolve.sh +58 -6
- package/scripts/cluster_capability_scan.sh +42 -13
- package/scripts/digest_landing_check.sh +142 -2
- package/scripts/fh_hub_identity.sh +83 -0
- package/scripts/fh_session_load.sh +53 -5
- package/scripts/fh_track_resolve.sh +114 -0
- package/scripts/field_canon_preload.sh +50 -5
- package/scripts/package_coverage_check.sh +8 -0
- package/scripts/prior_art_prompt.sh +168 -0
- package/scripts/psa_scan_lib.sh +201 -15
- package/scripts/residency_admission_check.sh +204 -0
- package/scripts/selfcheck.sh +88 -0
- package/scripts/test_adapter_lanes.sh +67 -2
- package/scripts/test_heavy_classifier_lanes.sh +144 -0
- package/scripts/test_marker_defense_lanes.sh +152 -0
- package/scripts/test_marker_soul_check_lanes.sh +211 -0
- package/scripts/test_prior_art_prompt_lanes.sh +128 -0
- package/scripts/test_psa_singlefile_lanes.sh +351 -1
- package/scripts/test_residency_admission_lanes.sh +60 -0
- package/scripts/test_track_resolve_lanes.sh +158 -0
- package/templates/.git-hooks/pre-commit +400 -4
- package/templates/.git-hooks/pre-push +17 -2
- package/templates/settings.PriorArt.snippet.json +15 -0
|
@@ -331,8 +331,18 @@ by design. ~~**Therefore a meta-harness candidate is not a chamber candidate.**~
|
|
|
331
331
|
day-one walk 의 정의는 *"on the first run, with the user adding nothing, the thing produces
|
|
332
332
|
something useful"* 이고 반대말이 `built-but-not-wired`, 그리고 *"**wiring is part of the birth**"*
|
|
333
333
|
다. **md 규율은 구조적으로 호출부가 없다**(살리언스). 실제 반례:
|
|
334
|
-
`.claude/rules/fh_4axis_gate.md` 의 `standpoint:` 필드 — *"Still validated by nothing —
|
|
335
|
-
lines, no fixture suite"*
|
|
334
|
+
`.claude/rules/fh_4axis_gate.md` 의 `standpoint:` 필드 — 그 규율이 *"Still validated by nothing —
|
|
335
|
+
zero hook lines, no fixture suite"* 라고 **자기 자신에 대해** 적고 있었다.
|
|
336
|
+
🟥 **2026-08-20 정정 — 이 예시는 인용한 문장이 틀렸다는 것이 밝혀져 방향이 바뀐다.** 실측: 그 시점에
|
|
337
|
+
`validate_standpoint_leg()` 는 훅에 **있었고** 픽스처도 `selfcheck.sh` 로 배선돼 있었다
|
|
338
|
+
(`banana(qasp)` → 차단 · `tier2` 괄호 없음 → 차단). 즉 이건 «태어났는데 안 걸은 규율»이 아니라
|
|
339
|
+
**«걷고 있는데 자기가 못 걷는다고 적어둔 규율»**이다 — 그리고 그게 더 조용한 결함이다: 정직한
|
|
340
|
+
겸손처럼 읽히면서 **이미 있는 컨트롤의 사용을 억제**하고, 실제로 그 문장은 **여섯 개 문서로
|
|
341
|
+
전파돼** 있었다(`CLAUDE.md` ×2 · 그 규칙 파일 · `AGENTS.md` · `field_verdict_crossfamily_gate.md` ·
|
|
342
|
+
여기). ⇒ md 규율의 실패 모드는 **하나가 아니라 둘**이다:
|
|
343
|
+
① 태어나고 안 걷는다(호출부 부재) ② **걷는데 자기 상태를 틀리게 적는다**(자기서술 드리프트).
|
|
344
|
+
②는 ①의 판정자(«블라인드 sim 이 발화하는가»)로는 안 잡힌다 — 규율은 정상 발화하고, 틀린 것은
|
|
345
|
+
그 규율이 자기에 대해 하는 **진술**이기 때문이다. 그걸 잡는 검사는 아직 없다.
|
|
336
346
|
`axes-run` 기호 키도 53건 중 2건이 옛 의미로 쓰였다. **태어났고 안 걸은 md 규율들**이다.
|
|
337
347
|
|
|
338
348
|
⇒ **유닛 클래스별 day-one walk 판정자를 따로 건다**:
|
|
@@ -149,6 +149,38 @@ human-review floor is structural, not a transitional patch. (Its Faros AI number
|
|
|
149
149
|
the author's own caveat travels with any citation.)
|
|
150
150
|
"Aggressive" Codex/Gemini use is bounded by the fit task-class above, never a blanket main-seat swap.
|
|
151
151
|
|
|
152
|
+
### Write authority — a sidecar audits, it does not edit (measured 2026-08-21)
|
|
153
|
+
|
|
154
|
+
The doctrine above governs **verdicts**: a sidecar's finding is an evidence candidate until the governor
|
|
155
|
+
source-closes it. That is the *judgment* axis. It says nothing about the **write** axis, and the gap is
|
|
156
|
+
not academic — a sidecar with tool access will start editing the target tree unless told not to.
|
|
157
|
+
|
|
158
|
+
> **A sidecar returns findings and, at most, a proposed patch as TEXT. It does not write to the target
|
|
159
|
+
> tree.** The governor applies, or does not apply, each change. Same shape as the verdict rule: the
|
|
160
|
+
> sidecar supplies material, the governor is the only writer.
|
|
161
|
+
|
|
162
|
+
🟥 **The reason is not overreach. It is that the fixer and the checker become the same party.**
|
|
163
|
+
Measured this day: `codex/gpt-5.5` was dispatched as an adversarial auditor over a hook delta and began
|
|
164
|
+
editing the working tree directly (caught by `mtime`, not by any gate). Its *finding* was real and sharp
|
|
165
|
+
— two detectors in the same file had divergent leniency. Its *fix* widened one detector's pattern, and
|
|
166
|
+
the widened pattern then matched **the claim line's own text** as its own evidence — a self-referential
|
|
167
|
+
false positive that flipped a BLOCK lane to PASS. **41 lanes stayed green.** A human reading the diff
|
|
168
|
+
sees "leniency aligned", which is correct as far as it goes. What caught it was the first real use in an
|
|
169
|
+
isolated clone. This is [[feedback_blind_separation_is_a_defect_generator]] arriving through a door the
|
|
170
|
+
verdict rule left open: the sidecar was, for those minutes, both author and reviewer of the same lines.
|
|
171
|
+
|
|
172
|
+
**Operationally**: dispatch sidecars with the target tree read-only where the runtime supports it; when it
|
|
173
|
+
does not, state the constraint in the prompt AND verify afterwards (`git status` / `mtime` on the files you
|
|
174
|
+
handed over). A sidecar edit discovered after the fact is treated as a **finding to re-derive**, never as a
|
|
175
|
+
patch to keep — re-decide it in the governor's seat, because a patch you did not author is a patch you did
|
|
176
|
+
not review.
|
|
177
|
+
|
|
178
|
+
⚠️ **Process safety, same surface**: terminating a runaway sidecar needs a discriminator for *your own*
|
|
179
|
+
process — pin the model, capture the PID, or `pgrep` first. A bare `pkill -f codex` on a shared machine
|
|
180
|
+
reaches other sessions' sidecars; measured the same day (nothing was actually killed — exit codes
|
|
181
|
+
separated the cases afterwards — but the command could not have known that in advance). **Confirm what
|
|
182
|
+
died after killing**, not before.
|
|
183
|
+
|
|
152
184
|
### Decorrelation axes — model family AND authoring context (measured 2026-08-01)
|
|
153
185
|
|
|
154
186
|
Decorrelation has been treated as one axis (model family). A codex-outage session measured a second,
|
|
@@ -28,7 +28,7 @@ our own tests pass" — a real and reportable milestone, and *still* short of th
|
|
|
28
28
|
is authored by the same party it tests. The boundary is the one named in
|
|
29
29
|
`[[feedback_adversarial_review_not_substitute_for_first_use]]`: **passing your own tests is not firing in
|
|
30
30
|
the real situation**, and the first real use is repeatedly what invalidates the design. So RC never opens
|
|
31
|
-
|
|
31
|
+
an `identity-v1.0.0`; only REALIZED does.
|
|
32
32
|
|
|
33
33
|
> The origin note (2026-08-08 session card) drew this ladder with RC and REALIZED **both** marked 🟢. That
|
|
34
34
|
> shorthand is fine in a card and breaks here: this gate's rule reads literally as "every identity 🟢 →
|
|
@@ -109,19 +109,65 @@ Score with the same triangulation the 2026-07-14 audit used — no single-source
|
|
|
109
109
|
novice-vocabulary intents, scored on whether the right skill/gate fires. Salience-only ≠ measured.
|
|
110
110
|
|
|
111
111
|
## Versioning policy — the formal release track
|
|
112
|
-
The formal release tag is **independent of the npm package version**. The npm version (
|
|
113
|
-
`1.4.x`
|
|
112
|
+
The formal release tag is **independent of the npm package version**. The npm version (**2.6.0** as of
|
|
113
|
+
2026-08-21; ⚠️ this parenthetical said `1.4.x` until then — a version number written into prose goes
|
|
114
|
+
stale silently and reads as fact, so verify it against `package.json` before citing) is the
|
|
115
|
+
**plugin-cache lockstep number** — it bumps on every shipped-asset change so Codex/
|
|
114
116
|
marketplace cache-invalidate; it is not a maturity claim. The **formal identity-maturity release starts at
|
|
115
117
|
`v0.1.0`**. Do not conflate the two counters; a high npm number does not make the harness mature.
|
|
116
118
|
|
|
119
|
+
🟥 **Tag namespace — the two counters must not share one (added 2026-08-21, operator-approved).**
|
|
120
|
+
They did, and it broke the public surface: both tracks used `vX.Y.Z`, only the maturity track had
|
|
121
|
+
GitHub *Release* objects, so the Releases page advertised **`v0.3.0` (2026-08-16) as "Latest"** while
|
|
122
|
+
the shipped package was **2.6.0**. A visitor could not tell which number was newer or what either meant.
|
|
123
|
+
|
|
124
|
+
This is the same defect class this repo keeps finding in its gates — **two layers, one name** (a CI
|
|
125
|
+
`paths:` filter read as the local hook; a leg scoped to load-bearing changes read as scoped to every
|
|
126
|
+
marker, both measured 2026-08-21). The fix is never "merge the layers"; the two counters measure
|
|
127
|
+
genuinely different quantities and collapsing them destroys the maturity signal. The fix is to stop
|
|
128
|
+
sharing the name:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
maturity track identity-v0.4.0 onward (v0.1.0 · v0.2.0 · v0.3.0 keep their names)
|
|
132
|
+
package track v2.6.0 onward, unchanged tags only — NO GitHub Release objects (see below)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
🟥 **The Releases page carries the maturity track ONLY — and this was measured, not assumed.**
|
|
136
|
+
On 2026-08-21 a Release object was created for `v2.6.0` to make "Latest" reflect what ships. It was
|
|
137
|
+
deleted the same hour, by operator decision, because it solved the wrong half: **GitHub gives exactly
|
|
138
|
+
one "Latest" badge**, so two tracks on one page compete for it and the holder defines what the repo
|
|
139
|
+
announces. The package number took the headline and pushed the maturity claim under it. The misreading
|
|
140
|
+
that prompted it was already closed by the cheaper half — a one-line header on the existing release
|
|
141
|
+
bodies. ⇒ **package releases live in `CHANGELOG.md` and the registry, not here.** The `v2.x` tags
|
|
142
|
+
remain (a deleted Release does not delete its tag — verified).
|
|
143
|
+
|
|
144
|
+
🟥 **Read every bare `vX.Y.Z` in THIS section as the maturity track — and from v0.4.0 that means the
|
|
145
|
+
tag is `identity-vX.Y.Z`.** So the all-green ship below is the tag **`identity-v1.0.0`**, not `v1.0.0`;
|
|
146
|
+
a bare `v1.0.0` would now be ambiguous with the package track (already past `v2.x`, so it will never
|
|
147
|
+
mint one — but "will never collide" is not the same as "is unambiguous to a reader").
|
|
148
|
+
⚠️ Renaming the prefix without carrying it to the milestone is exactly the half-fix this repo keeps
|
|
149
|
+
recording — the rule lands and the thing the rule points at does not follow
|
|
150
|
+
(`[[feedback_half_fix_propagation_boundary]]`). Caught by a peer session, not by the author, on the
|
|
151
|
+
same day the rename was written.
|
|
152
|
+
⚠️ Deliberately **not** rewritten: `fh-gate v1.0.0` (a different package), the CHANGELOG's record of a
|
|
153
|
+
past version normalization (history), and CATALOG entries — checked one by one before editing. A
|
|
154
|
+
blanket substitution would have corrupted all three.
|
|
155
|
+
|
|
156
|
+
⚠️ **Existing tags are NOT renamed.** Retagging deletes and recreates a public ref that release bodies
|
|
157
|
+
and inbound links already point at — an irreversible operation on a public surface, so the
|
|
158
|
+
Destructive-Op gate applies to this repo's own tags. The cheap equivalent is a one-line header on the
|
|
159
|
+
existing release bodies stating which track they belong to. (The v0.3.0 body already says it —
|
|
160
|
+
*"independent of the npm plugin-cache number"* — but four paragraphs down, where the Releases list does
|
|
161
|
+
not show it. Gate-locality: if it is not where the reader is, it is not there.)
|
|
162
|
+
|
|
117
163
|
**The `0.x` ↔ `1.0` mapping (refined 2026-07-14, informed operator decision).** Semver `0.x` explicitly
|
|
118
164
|
means *early / not-yet-complete*, so the formal track maps cleanly onto the identity gate:
|
|
119
165
|
- **`v0.1.0` = the first formal-release baseline.** It is tagged when the harness has a *proven core*
|
|
120
166
|
(≥1 identity 🟢 by real artifact) and an *honest, evidence-scored status for the rest* — NOT when every
|
|
121
167
|
identity is green. `v0.1.0` makes **no all-green claim**; its release notes carry the real per-identity
|
|
122
168
|
status (🟢/🟡/🔴). This is the baseline *from which* all-green is tracked, not the all-green ship itself.
|
|
123
|
-
- **`v1.0.0` = the all-green ship.** The original "ship only when every identity is 🟢" condition maps to
|
|
124
|
-
|
|
169
|
+
- **`identity-v1.0.0` = the all-green ship.** The original "ship only when every identity is 🟢" condition maps to
|
|
170
|
+
**`identity-v1.0.0`**, not `v0.1.0`. A 🟡/🔴 blocks *v1.0*, and names exactly what real run is missing — it does not
|
|
125
171
|
block the honest v0.1.0 baseline.
|
|
126
172
|
|
|
127
173
|
This refinement resolves the tension of tagging a baseline while identities are still maturing: `0.x` is
|
|
@@ -286,11 +332,34 @@ unchanged and keeps its own 2026-07-14 evidence).
|
|
|
286
332
|
| **Ⓑ** | **프로젝트 부스터** (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)이므로 **증언으로 표기하고 측정으로 세지 않는다** |
|
|
287
333
|
| ③ | 거버넌스 게이트 (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) |
|
|
288
334
|
| ⑤ | 증폭자 (amplifier) | judgment-circuit | 🟢 GREEN | short-intent→literature-grounding→ultimate-doc real instances; rules-diet −18.2k measured; intent-routing probe 94% (below) |
|
|
289
|
-
| ④ |
|
|
335
|
+
| ④ | 프런티어 답습 (**의도 기반** — 🔵 RC, 재정의 2026-08-21) | external-grounding | 🔵 RC | 🟥 **이 정체성은 «파이프라인»이 아니라 «루프»다** (운영자 재정의 2026-08-21): **트리거** = 운영자가 내 행동·판단에 **의문을 표한 순간**(*"그거 아니지 않아?"* · *"좀 이상한데"* · *"이거 어때?"* · *"어떻게 생각해?"*) → **절차** = 숙고 → **내면 도구 먼저(책장)** → 안 닫히면 **세계(도서관)** → **제안 2단** = «물어볼까?» 그리고 «반영할까?». **완주 판정** = *사람이 안 시켰는데* «물어볼까?»가 떴고, 회수한 것이 **실제 강화로 이어졌나**. 🟥 **`frontier-digest` 는 이 정체성이 아니다** — 그건 launchd 로 도는 **기계화된 일상작업**이고, 이 행이 그동안 그것을 재고 있었다(범위 오조준). 아래 §digest-routine 으로 이관. **2026-08-21 실측 — 0/4**: 그날 운영자 의문 5건 중 4건(*봉인 개봉* · *발화속도 숫자* · *의도 오독* · *작업 범위*)에서 세션은 **전부 내부 확인으로 닫았고 외부 조회 0회**, 나머지 1건은 *"세계에 물어보았나"* 라는 **명시 명령**이라 트리거가 아니라 지시였다. 그 1회가 곧바로 선행연구(`arXiv:2507.23158`, 같은 과제의 벤치마크 P61/R36)를 냈다 — **능력이 아니라 격발이 빈 자리**임을 같은 날 양쪽으로 보여준다. **격발 표면은 둘이고 상태가 다르다**: ⓐ **빌드 시점**(새 메커니즘 짓기 직전) — 물건은 있다(`feat/prior-art-prompt-t2`, 「책장 먼저, 없으면 도서관」) 그러나 **어느 settings 에도 미등록**이고, 등록해도 `matcher=Write` 라 **auto-mode 세션이 heredoc 으로 파일을 만드는 한 구조적으로 우회된다**(2026-08-21 측정, 컨트롤 동반). ⓑ **대화 시점**(의문 발화) — **기계 없음**. 🟥 **경계**: «이 의문이 외부를 요구하나»는 **판단이지 채널이 아니다**. 훅이 할 수 있는 최대는 «외부 고유명사가 제안/물음 형태로 들어왔다»를 surface 하는 것까지고, 낡았는지는 사람/세션이 정한다 — 이걸 기계에 넘기면 §Mechanization Boundary 가 금하는 «결론을 단언하는 체크»가 된다 |
|
|
290
336
|
| ① | 하네스 클러스터 (**🟢 2026-08-16 — 기준이 바뀌었다, 아래 §①-2026-08-16 를 먼저 읽어라**) | context-continuity | 🟢 | routing already ran for real (17 nodes, sidecar-orchestrator, Skill Bus). **The relay half is now built rather than specified**: `capability_composition_contract.md` (2026-08-02) was a complete spec with **zero implementing code** — the ① blocker was missing wiring, not missing design ([[feedback_built_but_not_wired]]). `scripts/relay_channel.sh` executes it (strictest-wins merge · typed invocation · checks 1/2/3 · short-circuit · causal binding), `scripts/test_relay_channel_lanes.sh` carries **64 lanes, BLOCK/PASS symmetric**, and three arms ran across **two real field harnesses** (pmh-dev · qasp-dev) on FH's own assets. ⭐ **The measured result is the divergence arm, and its mechanism is not what the first draft of this row said.** On `templates/.git-hooks`, `qasp` alone returns exit 0 — a single-node pass would have shipped it — and the composition returns `BLOCKED` because `pmh` returns `FINDINGS`. But `qasp`'s exit 0 is `degrade-scan: no scannable (py/sh) target files`: **zero files were scanned.** The qasp copy predates pmh's 2026-07-28 shebang pass, so extension-less hook files are invisible to it, and its exit 0 means *no target*, not *clean*. So the composition did not catch a substantive disagreement between two harnesses — it caught **a single node rendering an unmeasured surface as a pass**, which is `[[feedback_not_found_is_not_zero_family]]`, and structurally the spec's own §ⓑ.4 B1 ("the exit 0 that means I never started"). That is a *stronger* result than the first framing and a narrower one: it demonstrates the union catching a blind spot, not decorrelated judgment. **Correction also to the order claim**: both orders return `rc=2`, but in the pmh-first order the chain short-circuits at node 1 and qasp never runs — only the qasp-first order actually exercises the union. Non-decorative: reverting each wiring line reddens lanes and no reversion passes silently. **Why this is RC and not 🟢** — *updated 2026-08-11; (b) and (c) moved, (a) did not, and a fourth appeared*: (a) the row's *other* half, external-harness recommend, is still parked — **unchanged, and it is a build, not a check**; (b) ~~`scripts/capability_registry_check.sh` does not exist~~ → **built 2026-08-11** (M1–M5 + the ran≠did-not-run clause, M4 pair executed, 7 self-test lanes BLOCK/PASS symmetric); (d) **NEW, and it cuts against the row**: a capability declaring `writes: read-only` passed all of M1–M5 and its entry point then `rm -rf`'d this repo's `scripts/`. The registration bar measures *form* and *known-pair separation*, never *whether the declaration is true* — so the machinery this row now points at carries a demonstrated structural hole (`capability_composition_contract.md §Salience`). A checker whose green can precede a destructive act is not yet a green identity; (c) ~~the two nodes are copies of one scanner at different staleness~~ → **superseded 2026-08-11, but only partly**: a run now exists across two *genuinely different* capabilities (a leak lens ∪ a verdict-direction lens — different enums, different defect classes, each blocking on its own finding), and the clean arm exercised the union end-to-end. ⚠️ **That satisfies the letter of the old (c) and not the identity's spirit: both new nodes live inside FH.** This identity was then named *멀티하네스 클러스터* (shortened to *하네스 클러스터* 2026-08-16); the only run that actually crossed harness boundaries is still the older pmh-dev/qasp-dev one, whose nodes were<a name="c-orig"></a> **copies of one scanner at different staleness** (all three copies — pmh 237 ln, qasp 121 ln, FH 269 ln — share a byte-identical 12-line header; the clean arm's two `out_sha` were identical), so the run proves the channel turns and that composing unequal copies has value, not that two independent judgments were decorrelated. Artifact: `tracks/_meta/identity_audit_2026-08-09_relay_channel.md` <br><br>**<a name="id1-20260816"></a>§①-2026-08-16 — 이 행이 🟢 이 된 이유는 «더 잘해서» 가 아니라 «다른 것을 재서» 다. 그 사실을 먼저 적는다.** 🟥 **옛 바로 재면 이 행은 오늘도 🔵 다.** §Gate consequence 의 dominance 절을 **두 번** 쟀고 **둘 다 미성립**이다 — 1차(기계 스캔 vs recall, `tracks/_meta/dominance_2026-08-16_cluster_scan_vs_recall_RESULT.md`)는 **상보**: 기계는 실행 축(M4·M6)을 독점하고 recall 은 구조·정합 축을 독점한다 — 서열이 아니라 직교다. 2차(**복사 vs 호출**, survives 다리, `tracks/_meta/dominance_2026-08-16b_copy_vs_call_RESULT.md`)는 **safety 동률**: 구 enum 사본으로 `exit 4` 를 부르면 relay 가 enum 밖 값을 `HARNESS_ERROR` 로 접어 `BLOCKED`(rc=2), 소유 선언은 `OUT_OF_SCOPE` 로 `BLOCKED`(rc=2) — **둘 다 막는다.** 「복사는 조용히 썩는다」는 예측이 반증됐고, 안 썩게 막아주는 것은 이 레포가 이미 가진 «미측정≠PASS» 규율의 기계 판본이었다. 두 측정 다 **사전등록 봉인 후 실행**이고 반증 조건을 결과 뒤에 옮기지 않았다. ⇒ **운영자 결정(2026-08-16)**: ①의 🟢 기준을 dominance 에서 **ⓐⓑⓒ 3기준으로 대체**한다. 운영자 원문 — *"그들의 능력을 활용하고 **내 쪽에서 더 짓지 않기 위한(재발명을 최소화하기 위한)** 목적이 멀티하네스 클러스터"* · *"FH 의 **뾰족한 부분을 유지하면서** 능력을 최대한 쓸 수 있는 방법"* · *"오래오래 진화에 따라 **살아남으면서 얇아지면서도** 가치를 발휘 … LLM 의 진화 그리고 다른 유수의 하네스들의 진화, **그 덕을 받는 것이 목적**"* (전문 + 방법론: `tracks/_meta/doctrine_2026-08-16_identity1_redefinition_and_method.md`). ①의 산출은 «더 많이 잡았다»가 아니라 **«안 지어도 됐다»** 라서 dominance 는 겨냥이 틀린 계기다. ⚠️ **이 대체는 ①에만 적용된다** — 다른 행의 dominance 요구는 그대로다. **ⓐ 재사용이 실재하고 호출 가능한가(복붙 아님)** → ✅ **측정**: `pmh-dev:merge-noop-check` 가 **pmh 자기 레포에서** 선언되고(`.claude/capabilities/merge-noop-check.cap`, `requires_cwd: SELF`, known-pair 는 그 레포의 실제 커밋 두 개), FH 가 `cluster_capability_scan.sh discover` 로 **발견** → `capability_registry_check.sh` M1–M6 `REGISTRABLE` → `relay_channel.sh run` 으로 **실제 호출**한다. 양·음 arm 이 갈린다 — NO-OP 입력은 `FH_NODE1_VERDICT: NO_OP` 로 node1 에서 BLOCKED, 차이 있는 입력은 node1 통과(`HAS_DIFF`) 후 node2(`forge-harness:degrade-direction-scan`)가 `FINDINGS` 로 BLOCKED. **다른 노드에서 다른 이유로** 막히므로 「늘 막는 계기」와 구분된다. **ⓑ FH 가 안 커졌는가 — «안 한 일»을 이름으로 댈 수 있는가** → ✅: `merge_noop_check.sh`(트리해시 + 조상관계 판정)를 FH 는 짓지 않았고, FH 자기 정본 `knowledge/shared/rules/multi_session_close_protocol.md §1-b` 가 **그 파일을 이름으로 지목하며 «가져오면 된다»** 고 이미 적어둔 자리가 여기다. 오늘 FH 가 새로 지은 것은 **채널**(`relay_channel.sh --cap-args`, 노드별 호출 인자)이지 판단이 아니다 — 그 채널이 없는 동안 호출 시점 인자를 요구하는 능력은 **항상 `ARGS → HARNESS_ERROR → BLOCKED`** 였다(방향은 fail-closed 로 옳았으나 **신호가 0**, 즉 «호출 가능» 을 구조적으로 만족시킬 수 없었다). **ⓒ 뾰족함이 보존되는가** → ✅ **측정**: 합성이 `FH_MERGED_residency: company`(둘 중 엄격한 쪽) · `verdict_binding` 은 4값 합집합 · 상류가 막히면 하류 노드 미실행. 🟥 **명시 잔여 — 축소하지 않는다.** ⑴ **두 측도를 갈라 적는다.** **㉮ 선언 보유 하네스 = 2**(FH · pmh) — *능력(capacity)* 측도. **㉯ 실제로 함께 돈 하네스 = 5** — *사건(event)* 측도이고 정체성이 묻는 쪽이다. 🟥 **단일 합성 한 번에 5개가 돌았다(실측, 세션 말)**: `relay_channel.sh run` 4노드 체인이 `gstack`(어댑터) → `pmh-dev`(소유 선언) → `mate-dev`(어댑터) → `qasp-dev`(어댑터) 를 태우고 FH 가 그 사이에서 병합했다 — 청정 arm 은 **네 노드 전부 실행 후 `FH_RELAY_VERDICT: PASS`(rc=0)**, 교란 arm 은 node3 `FAIL` 에서 `BLOCKED` + 하류 미실행(rc=2). **늘 통과하지도 늘 막지도 않는다.** 병합 결과: `residency: company`(다섯 중 최엄격) · `verdict_binding` **9값 합집합**. ⚠️ ㉮ 가 여전히 2인 것은 나머지 셋이 **어댑터**(FH 소유·FH 유지)이기 때문이고, 그게 결함이 아니라 운영자 결정으로 정해진 **기본 경로**다(§선언 위치). ㉮ 가 커지는 것은 남이 «노출한다» 고 자기 정본에 적었을 때뿐이다. 그리고 ㉮ 가 여전히 작다는 사실은 남는다: ⚠️ **부풀리지 않는다**: clawd-on-desk 는 하네스 자산이 없는 **대상 레포**라 PR #888 은 기여였지 하네스 주행이 아니다 — 세지 않았다. 그리고 ㉮ 가 여전히 작다는 사실은 남는다: qasp 는 **그 하네스 자신의 입장리뷰가 REJECT** 했다 — 정본 근거 0건 · 소비자 0곳(읽는 건 FH 뿐) · `session.md:101` 「n=3 전엔 추상화 금지」 위반 · **그 선언 경로가 그 하네스의 조직 미러 대상에서 제외돼 있지 않다**(운영자가 이 레포에서 통제하지 않는 목적지로 그대로 복제된다). 운영자 결정(2026-08-16)으로 **보류**이며, 「이 하네스는 외부 하네스에 자기 인터페이스를 노출한다」를 **그 하네스 자신의 정본에 적는 것**이 선행 조건이다. 선언 파일이 남의 레포에 **있다**는 것과 그 하네스가 노출을 **결정했다**는 것은 다른 명제다. ⑵ 🟥 **(d) 는 안 닫혔다.** `.git/objects` 를 감시면에 넣어 객체 쓰기 한 부류를 닫았고(probe L13 탐지 / L13b 과차단 컨트롤 / 되돌림 시 정확히 L13 만 적색), **그러나 M6 는 선언된 캘리브레이션 arm 만 관측한다** — 실증: `merge_noop_check.sh` 는 **분기 입력에서 git 객체를 쓰는데**(격리 클론 실측: `.git/objects` 파일 수가 **+1**. ⚠️ 절대값은 클론 상태에 의존하므로 **델타만 인용한다** — 이전 판본이 적었던 절대 쌍은 재현 불가라 철회한다) 선언된 두 arm 이 그 경로를 안 지나므로 `writes: read-only` 로 거짓 선언해도 `REGISTRABLE` 이 난다(실측 확인). 같은 날 아침에 나온 **「검사기에 enum↔구현 일치 축이 없다」와 같은 형태**다 — 같은 stale 선언이 캘리브레이션 쌍에 따라 REJECTED 도 REGISTRABLE 도 된다. 한 문장으로: **검사기는 선언이 시키는 것만 본다.** ⑶ 그러므로 이 🟢 은 **「클러스터가 실제로 돈다」**에 대한 것이지 **「등록 바가 선언의 진위를 검증한다」**에 대한 것이 아니다. 후자는 열려 있고, 열려 있다고 적는다. Artifact: `tracks/_meta/identity_audit_2026-08-16_cluster_green.md` <br><br>**<a name="id1-naming"></a>§①-naming (운영자 결정, 2026-08-16) — 이름을 줄이고, 그 안의 하중 부품에 이름을 준다.** 「멀티하네스 클러스터」 → **「하네스 클러스터」**: 「멀티」와 「클러스터」가 둘 다 복수를 뜻해 **중복이었다**. 그리고 그 아래에 **크로스하네스**를 둔다 — *"서로간의 능력을 보강하기 위함이야. **없는 걸 쓰기 위함**이고, FH 에서 **‘짓지 않아도 되는 것’을 다른 레포 개발에 활용**하기 위함이지. 다만 그 와중에 **FH 에서 지어야 하는 게 보이면 개선해서 답습**하는 거고."*(운영자) ⇒ **크로스하네스는 양방향이다**: **활용**(남의 능력을 호출해 FH 가 안 짓는다) **∪ 흡수**(FH 가 지어야 할 것이 보이면 개선해 들여온다). 종전 정의는 앞의 절반뿐이었다. 🟥 **둘의 관계는 합집합이 아니라 «포함 + 하중»이다.** 운영자: *"하네스 클러스터가 돌려면 크로스하네스는 항상 있어야 하니까."* ⇒ **크로스하네스는 하네스 클러스터의 필요조건**이고, 그래서 판정에서 다음이 따라 나온다 — **ⓐ(«재사용이 실재하고 호출 가능한가»)가 곧 크로스하네스 시험이고, 그게 이 정체성의 결박 지점이다.** 노드 수 n 은 클러스터의 **범위**를 재지 «도는가»를 재지 않는다. (이 구분이 없어서 이 행의 잔여 ⑴이 «n=1»을 마치 미성립처럼 읽히게 적혀 있었다 — n=1 에서도 교환은 실제로 일어났다. 다만 **n 을 늘리는 것은 여전히 옳고, 그건 선언이 없어서지 기제가 없어서가 아니다**: 실측 2026-08-16, 매핑된 하네스 12개 중 선언 보유 2개 · 나머지 10개는 `.claude/capabilities` 디렉토리 자체가 없다. 도구는 있다 — gstack `bin/*`=69 · gbrain 50 · openhuman 43 · mate-dev 7 · qasp-dev 16.) 🟥 **크로스하네스는 두 형태를 갖고, 둘 다 «건넜다»에 든다(운영자, 2026-08-16).** **기계 형태** = 남의 능력을 typed 채널로 호출한다(`.cap` 선언 필요) · **판단 형태** = **남의 정본을 근거로 심사받는다**(입장리뷰 — 선언 불요). 운영자: *"입장리뷰도 크로스가 아닐까 … 결국 너와 그쪽 하네스 2개가 동시에 도는 거니까."* ⇒ **판단 형태는 선언 없이 지금 당장 모든 하네스에서 성립한다**, 그리고 **한 번의 크로싱이 이미 하네스 2개의 동시 주행**이다. *"크로스하네스는 노드 1개라도 발휘되는 거고 … 그게 늘어나면 클러스터가 되는 거고."* ⇒ **크로스하네스 = 사건(건넜다) · 하네스 클러스터 = 그 사건의 누적.** 🟥 **이 문장이 아래 잔여 ⑴의 계수 오류를 잡는다** — 나는 «외부 **선언** 수»를 셌는데 정체성이 묻는 것은 «**함께 돈 하네스** 수»다. 두 측도를 갈라 적는다(둘 다 남긴다, 유리한 쪽만 남기지 않는다). 🟥 **명칭 경계 — 알고 쓴다.** `cross-harness` 는 이 레포에서 **이미 다른 뜻**으로 쓰인다: `CLAUDE.md §Standpoint axis` · `field_verdict_crossfamily_gate.md §7` 의 *"cross-harness-boundary change"* = **다른 하네스의 동작·게이트 결과·상호작용 계약을 바꾸는 diff**(게이트 트리거 범위). 정체성 이름이 「하네스 클러스터」로 남으므로 **최상위 층에서는 충돌하지 않지만**, 하위 기제 「크로스하네스」와는 여전히 같은 낱말이다 — 구분: **명사 「크로스하네스」 = 능력 교환(이 정체성의 필요조건)** · **형용구 cross-harness-boundary = 그 게이트의 적용 범위**. 섞어 쓰지 마라. 🟥 **ⓑ 기준이 양방향화에 맞춰 «좁아진다»(느슨해지는 게 아니다).** 흡수를 허용하면 ⓑ(«FH 가 안 커졌는가»)가 그대로는 무력해지므로: **FH 는 «닫는 FH 결함을 이름으로 댈 수 있을 때만» 커진다.** 새 규율이 아니라 이미 있는 증거-임계 빌드 규율(`fh_signal_2026-08-16_expedition_two_tracks.md` §경계 2 — *"«좋아 보여서»가 아니라 «우리 결함이 그걸 요구해서»"*)을 ⓑ 의 판정 문구로 승격시킨 것이다. ⇒ **ⓑ = ⑴ 호출로 대체한 것을 이름으로 댈 수 있고, ⑵ 새로 지은 것은 각각 닫는 FH 결함을 이름으로 댄다.** 오늘 실적: 대체 = `merge_noop_check.sh`(안 지었다) · 신축 = `--cap-args` 채널(닫는 결함 = «호출 시점 인자를 요구하는 능력이 relay 를 통과할 방법이 없다», 실측) + `.git/objects` 감시(닫는 결함 = «`writes: read-only` 거짓 선언이 VERIFIED 를 받는다», 실측). 둘 다 이름이 붙는다. 🟥 **선언 위치는 두 종류이고, 기본은 «어댑터»다(운영자 결정 2026-08-16 — 초판은 이걸 거꾸로 적었다).** 운영자: *"사용자들은 다들 대상 레포에 짓지 않을 거야. **FH 내부에 상주시키겠지.** 필요하다면 개인용 레포로 분리해서 관리할 거고."* · *"로컬에서 작업하기 위한 거니까 **어댑터는 내장되어 있어야지.**"* ⇒ **어댑터 선언 = 기본 경로**(FH 안 `.claude/capabilities/adapters/` + FH 소유 스크립트, **유지 책임은 FH**, peer 는 **이름으로 해석**해 tracked 파일에 홈 절대경로를 안 싣는다). **소유 선언 = 특권적 경우** — 그 하네스를 소유하고 **동시에** 「외부 하네스에 인터페이스를 노출한다」를 **그 하네스 자신의 정본에 적었을 때만**(pmh-dev 가 그 유일한 사례다). 🟥 **이 뒤집기는 실측이 강제했다**: qasp 입장리뷰가 남의 레포 안 선언을 REJECT 했고(정본 근거 0건 · 소비자 0곳 · n=3 규칙 위반 · 조직 미러 노출), gstack 은 **애초에 남의 공개 레포(READ 권한)라 푸시 자체가 불가능**했다 — 즉 소유 선언은 «드문 경우»가 아니라 **대부분의 경우 성립조차 하지 않는다.** 어댑터가 허용되는 근거는 dominance-2 가 잰 것이다 — 복사 vs 호출이 **safety 동률**이었고 차이는 «정보와 유지 책임»뿐이었다. 라벨과 FH 소유가 그 차이를 닫는다. ⚠️ **residency 경계**: `company` peer 의 어댑터는 **tracked 로 두지 않는다** — 커밋 시점 공개표면 스캔이 floor 이지만, 판단이 먼저다. ⚠️ **미결 — 운영자 결정 대기**: *"운영자 환경에서는 상시 제안 가능. 사실 제안도 자동으로 반영 가능"*. 제안의 **자동 반영**은 자율성 확장이라 §Operational Adaptation Loop 의 action-class floor 를 그대로 통과해야 한다 — 흡수 커밋 자체는 가역이지만 **그것이 publish 를 먹이면 taint 가 전파**되고, 그 경우 registry floor 가 `promotion_eligible` 을 금한다. 바운드된 형태(운영자 환경 한정 · 가역 표면 한정 · typed 기록 필수 · 게이트는 그대로)로 좁히기 전엔 자동화하지 않는다. **미구축이며, 미구축이라고 적는다.**
|
|
291
|
-
| ② | 프로젝트 인큐베이터 (
|
|
337
|
+
| ② | 프로젝트 인큐베이터 (**🟢 2026-08-21**) | context-continuity + judgment-circuit | 🟢 GREEN | **정식 흐름이 배출했고, 배출물이 대상 하네스에서 돌았다.** (a) 구현 `chamber_run.sh` 6단계 게이트 (b) known-pair 러너 18 레인 + 순서 증인 16 레인 (c) self-test 초록 — RC 세 다리는 2026-08-09 에 섰다. **🟢 로 올린 근거는 그 위의 넷이다**: ⓐ **런 #15 `interslide-dependency-graph` = EMIT + 순서 증인 `WITNESSED`**(게이트 아티팩트 3건이 verdict 보다 먼저 커밋 고정; `chamber_witness.sh verify` 재실행 확인) ⓑ 배출물이 **대상 하네스에 배선되어 실물 발화**(2026-08-21, `preprep` L8 — 절 29 · HARD 의존 4 · 깨짐 0 · UNRESOLVED 2) ⓒ **배출물의 미해소를 재서 줄였고 정답쌍이 안 깨졌다**(표기 정규화 수리 → `S20 → S9 [OK]`; arm A rc=1 BROKEN 유지 · arm B rc=0 불변; 진짜 모호한 1건은 안 풀림 = 새 오탐 0) ⓓ advisory 되돌림 컨트롤 통과(HEAD 판 대비 rc·USE 불변). 🟥 **정직 조건 셋, 지우지 마라**: (1) **n=1** — 런 #14 도 EMIT 이나 순서 증인 `VOID(TAMPERED)` 라 근거로 못 쓰고 **그 문서가 스스로 그렇게 적었다** (2) L8 은 **advisory 고정**이라 아직 «사람이 못 본 결함을 잡은» 적은 없다 — 잡은 것은 자기 미해소다 (3) 옛 서술 *"formal chamber EMIT 아직 0"* 은 **2026-08-20 부로 stale** 이었다(#14·#15). 그 stale 이 12일간 안 잡힌 것 자체가 `[[feedback_rule_misdescribes_its_own_machine]]` 사례다. 아래 옛 판정 줄은 이력으로 남긴다 |
|
|
292
338
|
| ②-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 → 🟡 |
|
|
293
339
|
|
|
340
|
+
### §digest-routine — 옛 ④ 행의 측정 내용 (삭제 아님, 이관)
|
|
341
|
+
|
|
342
|
+
`scripts/digest_landing_check.sh` 는 **기계화된 일상작업(frontier-digest)의 스크리너**다.
|
|
343
|
+
원문의 측정을 그대로 보존한다: 두 축 분리(git추적 → `git log --since` 커밋시각 / gitignored
|
|
344
|
+
`tracks/**` → mtime / dirty-tracked → `UNMEASURED`)를 **두 레인이 고정**하고, 두 번째 레인이
|
|
345
|
+
없으면 «추적 파일을 전부 버려 negative 만 통과»로 퇴화한다(cross-family 지목). self-test
|
|
346
|
+
**20 레인** 초록. 명시 잔여: `file-change ≠ token-introduction`. 행이 스스로
|
|
347
|
+
*"screener, not an adjudicator — 히트는 열어야 한다"* 라고 선언한다.
|
|
348
|
+
|
|
349
|
+
**2026-08-21 추가 실측 — 그 선언이 실제로 물었다**:
|
|
350
|
+
```
|
|
351
|
+
frontier_digest_2026_08_20.md 계기 rc=0 «3건 전부 착지» → 손검증 0/3 착지
|
|
352
|
+
후보 1·2·3 이 각자 착지 지점을 지정해뒀고, 세 자리 모두 비어 있다(컨트롤 동반)
|
|
353
|
+
비공개 companion store 도 확인 — 거기도 없다(스코프 밖 착지 아님)
|
|
354
|
+
같은 후보(2608.09096·2608.06301)가 08-17 digest 에도 앵커검증까지 돼서 올라갔고 그때도 미착지
|
|
355
|
+
```
|
|
356
|
+
🟥 **이것을 «계기 결함»으로 적지 마라** — 행이 이미 스크리너라고 선언했고 «히트를 열어라»고
|
|
357
|
+
지시한다. 새로운 것은 결함이 아니라 **비율(1개 digest 3/3)과 반복(같은 후보 2회 미착지)**이다.
|
|
358
|
+
⇒ 일상작업 쪽 잔여로 기록: **표면화는 되는데 닫히지 않는다.** 그리고 이 결과는 **④ 의 판정에
|
|
359
|
+
안 걸린다** — 재정의로 대상이 갈렸기 때문이다.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
294
363
|
### <a name="b-layering"></a>§Ⓑ-layering — **프로젝트 부스터**는 여섯 번째 행이 아니라 **다른 층**이다 (운영자, 2026-08-16)
|
|
295
364
|
|
|
296
365
|
> 🟥 **먼저 — 이 절을 위계도로 읽지 마라. 이 표는 분류학이 아니라 재고 목록이다.**
|
|
@@ -635,7 +704,7 @@ incubator entry absorbed into deep-clarify) — the identity-② weakness surfac
|
|
|
635
704
|
**Verdict (2026-08-09 — supersedes the 2026-07-14 line)**: FH is tagged **`v0.1.0` = honest baseline**,
|
|
636
705
|
not all-green. ~~③⑤ are 🟢, **①②④ are 🔵 RC**~~ → **2026-08-16: ①③⑤ are 🟢, ②④ are 🔵 RC**,
|
|
637
706
|
**none 🔴** — the `v0.1.0` notes state this and make no
|
|
638
|
-
all-green claim (per the refined 0.x↔1.0 mapping above). **`v1.0.0` remains the all-green target.**
|
|
707
|
+
all-green claim (per the refined 0.x↔1.0 mapping above). **`identity-v1.0.0` remains the all-green target.**
|
|
639
708
|
🟥 **①의 🟢 은 기준이 바뀐 결과다** — 옛 dominance 절로 재면 오늘도 🔵 이고, 두 번 쟀고 둘 다
|
|
640
709
|
미성립이었다. 무엇이 왜 바뀌었는지는 [§①-2026-08-16](#id1-20260816) 을 읽어라. **그 행이 명시
|
|
641
710
|
잔여 셋(외부 소유 선언 n=1 · qasp 보류 · (d) 미해결)을 함께 지고 있고, 그걸 빼고 인용하지 마라.**
|
|
@@ -2292,6 +2292,24 @@
|
|
|
2292
2292
|
finding: "6건 중 확정 2 · 기각 2 · 반쪽 1 · 자기모순 1. 🟥 **초판이 이 팔을 `partial` 로 채점했는데 운영자가 정정했다 — 발견기를 정밀도로 채점한 오류다.** 탈상관은 오라클이 아니라 **값싼 발견기**이고(다른 사고방식을 그대로 써서 다른 각도로 묻는 것이 가장 싸고 빠르다), **발견이 어렵고 채점이 싸다.** 그러면 오탐 4건은 실패가 아니라 정상 작동이고, 채점 기준은 «거버너가 혼자서는 못 낸 것을 표면화했는가» 다. 그 기준으로는 통과한다 — 아래 ⓐ가 정확히 그것이다. ✅ 확정: ⓐ 「15만 토큰 압축 임계」가 **근거 없는 하드코딩 예시값**(발표자가 슬라이드 코드의 >150000 을 읽은 것) — 🟥 거버너가 이미 자기 보고에 기준선처럼 적어 넣은 뒤였고 대조 없이는 카드까지 갔다 ⓑ cron 기반 문서 갱신이 커밋-시점 게이트 결속을 깬다. ❌ 기각: OpenWiki 자기모순 주장은 agents.md(포인터)와 log.md(변경로그)를 합친 것 · compact 가 frontmatter/[[link]] 그래프를 파손한다는 주장은 컨텍스트 압축이 디스크 파일을 안 고친다는 점에서 기전 오류(인접 위험은 실재)."
|
|
2293
2293
|
note: "채점 기준 정정의 함의: 이 원장에서 `partial`/`rejected` 는 **발견기의 정밀도**를 뜻하지 않는다 — 그건 정상 비용이다. 🟥 사이드카가 자기 자신과 모순했다 — §1 에서 「툴 4~5개는 화자 자체 모순」이라 적고 §3 에서 같은 숫자를 「공식 규격에서 기인, 근거 있음」으로 승격. 원문에 그 근거가 없고 Anthropic 실제 스펙 대조도 안 했다(미검증을 검증으로 렌더). 인용 6개는 기계 대조로 5/6 원문 확인 + 1건은 표기 변형(슬랙↔슬렉)뿐. ⇒ 값은 「많이 잡는다」가 아니라 **「거버너가 이미 쓴 것 중 틀린 걸 잡는다」** 쪽에서 나왔다."
|
|
2294
2294
|
cost: 미측정 (agy 토큰 미보고 — 0 으로 렌더하지 말 것)
|
|
2295
|
+
- date: 2026-08-18
|
|
2296
|
+
agent: general-purpose (입장/standpoint 리뷰어, qasp 유지보수자 입장)
|
|
2297
|
+
model: opus (orchestrator)
|
|
2298
|
+
purpose: "qasp-dev PR #183 — 저자(거버너)가 쓴 §B4-후속2 조사 문서를 «대상 하네스의 입장» 에서 검증. 계열 축이 아니라 **그라운드 트루스 출처를 바꾸는 축**"
|
|
2299
|
+
prompt_summary: "tier2 요건을 프롬프트에 못 박았다 — «읽기만 하면 tier1b». 실행 4건을 명시 지시: 토큰 158종 수확 재현 · payment/insurance 가 VALUE 인지 · p6 오버라이드 부재를 grep 컨트롤과 함께 재현 · 스위트 완주. 「발견 없으면 없다고 적어라, 다만 위 4개를 안 돌리고 없다고 적으면 그건 리뷰가 아니다」"
|
|
2300
|
+
outcome: accepted
|
|
2301
|
+
finding: "VERDICT=REQUEST-CHANGES. **S 2건이 PR 제목이 내건 두 주장을 정면으로 반증했고 자력 적발 0.** ⓐ 귀속 교란 — 「후보 1→3」을 계기 오염 탓으로 돌렸으나 재주행은 (a)토큰 158→45 수리와 (b)검출면 확대(분기조건→+딕트키)를 **동시에** 바꿨다. 2x2 로 갈라보니 1→3 은 전적으로 (b) 이고 (a) 의 효과는 **반대 방향**(오탐 7→1). ⓑ p6_menu_tree 를 「이식성 약결합」으로 적었으나 RiskCategory 6멤버 × 표 키 실행 대조 = **0/6 히트 = 현재 도메인 100% 라이브 결함**. A 4건(인용금지 라벨이 숫자에서 178~410줄 떨어져 구조적으로 못 만남 · 절 순서 역전 + 「B4 상태」 중복 모순 · ⓑ 재현 갭 126 미기재 · 면책이 미검토 2행을 안 덮음)도 전부 타당. 부수로 라이브 버그 2건 추가 발견(auditor_v2 의 없는 enum 멤버 참조 → AttributeError · html 렌디션이 정반대 상태 표기)."
|
|
2302
|
+
note: "🟥 **이 축의 값은 «실행» 에서 나왔다.** S·A 6건 중 정적 읽기로 나올 수 있는 것은 거의 없었다 — enum 대조·import 그래프·git log --follow·pytest 완주가 각각 근거였다. `field_verdict_crossfamily_gate.md §7` 의 «execution is the load-bearing half» 가 이 케이스로 지지된다. 반대로 **저자(나)는 같은 파일을 몇 시간 들여다보고도 6건 중 0건을 자력 적발했다** — 「읽는 자가 저자가 아니어야 닫힌다」의 재현."
|
|
2303
|
+
cost: 165,326 subagent tokens · 34 tool_uses · 807s
|
|
2304
|
+
- date: 2026-08-18
|
|
2305
|
+
agent: general-purpose (입장/standpoint 리뷰어, qasp 유지보수자 입장)
|
|
2306
|
+
model: opus (orchestrator)
|
|
2307
|
+
purpose: "qasp-dev PR #184 — **실제 코드 변경**의 입장 리뷰. #183(문서)에서 같은 축이 값을 냈으므로 코드에도 붙였다"
|
|
2308
|
+
prompt_summary: "실행 5건 명시 지시(스위트 완주+skip 목록 · fail-before 를 **코드 경로로도** 재현 · 「동작 무변화」 주장 검증 · 리포트 실물 확인 · caller-zero 기준선 미갱신 확인). 🟥 «저자는 주석 한 줄로만 증명했다 — 실제 import/호출로 심었을 때도 잡히나» 를 콕 집어 물었다. 작업은 **워크트리**에서, 본체 체크아웃은 다른 세션 것이라 switch 금지를 명시"
|
|
2309
|
+
outcome: accepted
|
|
2310
|
+
finding: "VERDICT=REQUEST-CHANGES. **S 2건이 또 헤드라인(「동작은 안 바꾼다」)을 반증했고 자력 적발 0.** ⓐ `_UNMAPPED_SEEN` 이 프로세스 전역이고 `run()` 이 초기화를 안 해서, p6.run 2회 실행 시 **강등 0건인 2회차 리포트가 1회차 강등을 자기 것으로 신고** — PR 이 스스로 명시한 컨트롤(「강등 0건이면 절이 안 나온다」)이 fresh process 에서만 참이었다. 이 PR 이 없애려는 병과 **같은 얼굴**. ⓑ `SERVICE_ORG_MAP` 별칭 전환이 문서화된 확장 경로(`docs/GHE_INTEGRATION.md`)를 **무음 no-op** 으로 바꿨다 — main 판/PR 판 대조 실행으로 `['new-org']` vs `[]`, 예외도 로그도 없음. A 5건: `profile.available` 분기 누락으로 absent/unparseable 을 한 값으로 접음(같은 PR 안에서 p6 와 ghe_mapper 두 소비처가 갈림) · 새 관측 채널에 읽는 코드·committed 테스트 0 · **레인 docstring 이 권한 우회법이 그대로 저차단 구멍**(`getattr(m,\"exit_code_\"+\"for_verdict\")` 로 실제 교차 호출이 통과) · 죽은 포인터 · 리포트 배너의 프로덕션 소비처 0. B 4건 중 하나는 **안내 문구가 사용자를 회귀로 인도**(「추가한다」인데 구현은 replace 라 한 키만 적으면 내장 12키 소멸)."
|
|
2311
|
+
note: "🟥 **탈상관 축이 서로 다른 것을 잡는다는 실증.** #183 과 #184 는 같은 형식·같은 축인데 잡은 결함의 종류가 겹치지 않았다(문서=귀속/라벨, 코드=상태누적/무음 no-op). 그리고 이 리뷰가 요구한 «코드 경로로도 심어봐라» 한 줄이 저차단 구멍을 열었다 — **저자의 fail-before 는 주석으로만 증명돼 있었다.** 짝: 수리 중 `ast.literal_eval` 이 문자열 덧셈을 지원 안 하는데 `except Exception: pass` 로 삼켜 우회가 통과했고, 같은 커밋에 넣은 판별력 테스트가 **자기 수리 안에서 재발한 무음 강등**을 잡았다."
|
|
2312
|
+
cost: 194,462 subagent tokens · 62 tool_uses · 976s
|
|
2295
2313
|
|
|
2296
2314
|
- date: 2026-08-18
|
|
2297
2315
|
agent: general-purpose (isolated)
|
|
@@ -2352,3 +2370,75 @@
|
|
|
2352
2370
|
finding: "🟥 **cross-family 지적 3건 전부 실재·전부 채택·자력 적발 0.** codex(diff 축)가 내 수리의 반쪽을 잡았다 — L13c 라벨을 유도로 바꿨는데 **생산자는 리터럴을 낸다**, 즉 수리가 divergent-normalizer 를 새로 만들고 있었다(되돌림 + known-pair 재현: 상수 20/0 · 유도 19/1). agy(주장 축)가 둘 — ③문 자기모순, 그리고 **detail 파일의 신규사용자 문이 안 따라온 반쪽-픽스**(내 확인 grep 이 따옴표 탓에 거짓 「없음」을 냈다). 🟥 **두 계열 지적이 하나도 안 겹쳤다(코드 1 / 주장 2)** — 축 분리의 값이 실측으로 나온 자리다. harness-doctor: FAIL(M-tier 1 = 상주 140,217자) · S 9 · R 4, «못 잰 것» 8항 명시. pmh-dev: 흡수 후보 3(Wave 1-D · HEAVY 분류기 레인 · Step 0.35), 그중 **A1 은 PMH 문서가 없는 기계를 있다고 적었다**(`axis2-defense` 훅 히트 0, 컨트롤 `crossfamily` 21) — 산문만 옮기면 팬텀 기계-주장을 들여온다. 블라인드 sim ARM 3/3 vs CONTROL 3/3 완전 분리."
|
|
2353
2371
|
note: "🟥 **계기가 못 보는 자리를 탈상관이 봤다.** 소비자-완주 계기는 「돌아가나」를 재지 「고친 게 옳은가」를 못 잰다 — SKIP 으로 빠지는 팔은 그 계기가 **구조적으로 안 보는** 자리이고 codex 지적이 정확히 거기 있었다. ⚠️ codex 세션이 **최종 산문 판정 없이 끝났다**(4턴, 마지막이 도구 출력) — 지적은 중간 턴에서 건졌다. 「지적 없음」이 아니라 **부분 산출**로 계상한다. ⚠️ 훅 tally 는 67 인데 이 엔트리 포함 소수다 — tally 는 재시도·내부 스폰까지 세므로 1:1 대응이 아니다(클래스 집계)."
|
|
2354
2372
|
cost: "harness-doctor 196,158 · pmh 답습 186,940 tokens (subagent_tokens) · codex/agy/sim 은 CLI 라 토큰 미노출 = UNMEASURED"
|
|
2373
|
+
|
|
2374
|
+
- date: 2026-08-20
|
|
2375
|
+
agent: general-purpose ×2 (Pre-Publish 코드 보안 · CLAUDE.md 상주 원장) · codex sidecar ×3 (재출하 diff · Wave 1-D 훅 레그 · standpoint 정정문)
|
|
2376
|
+
model: opus (orchestrator) / gpt-5.5 (codex)
|
|
2377
|
+
purpose: "2.6.0 배포 후속 — 비가역 표면 보안 패스 · M-1 레버 탐색 · 신설 훅 레그와 문서 정정의 적대검증. 앞 엔트리(같은 날)와 분리한 이유는 **성격이 다르기 때문**이다: 그쪽은 조사, 이쪽은 **내 산출물에 대한 반증 발주**다"
|
|
2378
|
+
prompt_summary: "① 출하 실행코드가 소비자 머신에서 임의실행·삭제·송신·자격증명 접근을 하나(비가역 표면이니 확신 없으면 UNMEASURED) ② CLAUDE.md 절마다 트리거 클래스 × 백스톱 배선을 grep 으로 확인해 등급표를 채워라, 크기로 등급 매기지 마라 ③ 내 수리를 반증해라 — fail-open 인가, 과차단인가, 결박이 남았나 ④ 내 훅 레그를 반증해라 — 파싱 구멍, 호출되지 않는 경로, 레인이 주장하는 것을 실제로 재나 ⑤ 내 정정문을 반증해라 — 과교정인가, 놓친 전파 자리가 있나"
|
|
2379
|
+
outcome: accepted
|
|
2380
|
+
finding: "🟥 **cross-family 지적 8건, 전부 실재, 전부 채택, 자력 적발 0.** ③ 「L13c 라벨 유도는 반쪽 — 생산자가 리터럴을 낸다」 → 내 수리가 divergent-normalizer 를 새로 만들고 있었다(되돌림 known-pair 20/0 vs 19/1). ④ 3건 — 호출을 LOADBEARING 블록에 둬서 문서가 말한 «floor tiers only» 와 실제 조건이 달랐다 · **레인이 호출부를 안 쟀다**(함수를 추출해 직접 부르므로 훅의 호출을 지워도 초록인데 문서는 «pre-commit runs this» 라 주장 — **내가 sibling 을 비판한 그 결함을 한 층 위에서 재생산**) · presence 가드가 rc 기준 장식. ⑤ 4건 — **내 정정이 과교정**(`tier2(qasp)` 는 근거 없이도 rc=0 경고로 통과하는데 «근거 필수」라 적었다; 내 known-pair 가 **두 변수를 섞어** rc=1 을 틀린 원인에 귀속) · 전파 자리가 3곳이 아니라 **6곳** · AGENTS.md 의 «one line» 이 훅보다 좁다 · **내가 적은 줄번호가 내 직전 커밋 때문에 이미 밀려 있었다**. ① 보안 PASS(MED 2 명시) — `bypassPermissions` 경로가 실물 tarball 에서 도달 불가임을 **실행으로** 확인, 단 «의존성 부재라는 우연이지 명시 게이트가 아니다」. ② **M·S·R 전부 0** — 절 단위 레버 부재가 실측 결론이고 capability-level merge 만 남는다."
|
|
2381
|
+
note: "🟥 **오늘 값을 낸 축은 계기가 아니라 탈상관과 되돌림이다.** 소비자 완주(계기)는 «돌아가나」를 재지 «고친 게 옳은가」를 못 쟀다 — SKIP 으로 빠지는 팔이 그 계기의 구조적 사각이었고 codex 지적이 정확히 거기 있었다. 되돌림 프로브는 별도로 4건을 자력 적발했다(장식 가드 2 · 내 픽스처 순서 버그 1 · 앵커 격리 확인). ⚠️ codex 세션 하나가 **최종 산문 판정 없이** 끝나 중간 턴에서 지적을 건졌다 — 「지적 없음」이 아니라 **부분 산출**로 계상한다. ⚠️ 훅 tally 124 vs 엔트리 2 는 1:1 이 아니다(재시도·내부 스폰 포함) — 클래스 집계다."
|
|
2382
|
+
cost: "보안 183,520 · 상주원장 144,614 tokens (subagent_tokens) · codex ×3 는 CLI 라 미노출 = UNMEASURED"
|
|
2383
|
+
|
|
2384
|
+
- date: 2026-08-20
|
|
2385
|
+
agent: fh-meta:beginner ×2 · fh-meta:main-player ×2 · fh-meta:challenger ×2 · fh-meta:expert ×2 (챔버 런 #14 · #15, 각 런 4개)
|
|
2386
|
+
model: opus (전부)
|
|
2387
|
+
purpose: "인큐베이터 챔버 두 런의 step-4 블라인드 페르소나 + ⓓ3자대면 큐레이션. 런 #14 `multisurface-reading-harness` → EMIT(발표 준비 하네스), 런 #15 `interslide-dependency-graph` → EMIT ∧ **WITNESSED**"
|
|
2388
|
+
prompt_summary: "① 후보 정본을 냉독하고 어디서 이해가 깨지는지(경로·줄번호) ② 실사용 가치 + **명시 배정된 반대편 변호**(#14 는 「도구로 선다」 쪽, #15 는 「기계로 못 선다」 쪽 — 역할과 페르소나를 탈상관) ③ 적대검증: known-negative 가 만들어지나·미탐 방향·상위 하네스와의 중복 ④ 외부 선행 조사(URL 인용 필수, 확인 못 한 것은 미확인 표기). 🟥 **INTENT 는 주지 않았다** — #15 부터는 사전 봉인 예측을 워크스페이스 **밖**(비공개 컴패니언 스토어)에 두고 INTENT 엔 sha256 만"
|
|
2389
|
+
outcome: accepted
|
|
2390
|
+
finding: "🟥 **설계를 준 것이 검증보다 컸다 — 이게 오늘의 net-new 관측이다.** #15 에서 거버너의 계기가 known-positive 를 **미탐**하고 있었는데, 블라인드 냉독이 실물 8건을 손분류해 **판별자 자체를 줬다**(«트리거는 회고 부사가 아니라 «이 어구가 이 장에서 처음 정의되는가»»). 그 규칙으로 갈아끼우자 known-pair 통과. ★ **이미 배출한 하네스의 결함 2건을 페르소나가 잡았다**: L1 이 `>` 를 무조건 주석으로 떨궈 **원고 낭독을 통째로 안 보면서 초록**이었다(판정 0건→12건) · 은퇴 선언을 헤딩에서만 찾아 죽은 장 4개를 live 로 계상. **거버너 자력 적발 0**, 둘 다 실행으로 확정. ★ #14: 「인스턴스 1개」가 실물 대조로 **반증**(덱 밖 5개, 소급 귀속 아님 — 그 코드 저자가 렌즈 이전에 자기 언어로 같은 메커니즘을 적었다) · ⓓ3자대면 첫 실행이 §3 을 «거의 전량 선행»(RTE·BX/lens·XLIFF·Jupytext·pandoc·token-drift)으로 뒤집었고, 그 결과가 **출구가 아니라 재료**가 됐다(운영자 결정). ★ #15 expert: 정밀도 선행이 설계를 바꿨다 — bridging 자동해소 **F1 26~30**, discourse deixis **21.5** ⇒ 자동 «판정»으로 설계하면 미검출이 지배한다(`not_found_is_not_zero_family`). 추출=재현율 · 판정=사람으로 범위 재조정."
|
|
2391
|
+
note: "🟥 **#14 에서 challenger 가 INTENT.md 를 읽고 자진 신고했다** — 워크스페이스가 페르소나와 같은 레포에 있으니 «주지 마라» 라는 산문은 격리를 못 만든다. **격리는 산문이 아니라 경로다.** #15 에서 봉인을 워크스페이스 밖으로 빼자 아무도 못 읽었다(처방 닫힘). ⚠️ 그리고 그 신고가 없었으면 «독립 수렴 3건» 으로 오계상됐을 것이다 — 자진 신고에 의존하는 구조라 다음에도 잡힌다는 보장이 없다. ⚠️ K2(도구/판단)에서 두 페르소나가 **반대 결론**을 냈고, 그 갈림 자체를 «안 닫힌 축» 으로 기록했다(한쪽으로 접지 않았다)."
|
|
2392
|
+
cost: "런 #14: 508,284 · 런 #15: 620,426 tokens (subagent_tokens, 기계 출처) · 거버너 = **UNMEASURED**(세션이 자기 소비를 못 읽는다) · 🟥 **합계 안 적는다** — 미측정 칸을 0 으로 접는 것이다. #15 는 추정 450k 대비 +38%(CAP 700k 이내), #14 는 추정 단위가 달라 UNCALIBRATED 였고 그 교훈이 #15 의 단위 정정으로 갔다"
|
|
2393
|
+
|
|
2394
|
+
- date: 2026-08-20
|
|
2395
|
+
agent: codex/gpt-5.6-terra (cross-family sidecar, headless)
|
|
2396
|
+
caller: FH hub session (air node)
|
|
2397
|
+
purpose: adversarial refutation of the sync-to-be.sh destination-newer abort-message fix (load-bearing data-loss guard)
|
|
2398
|
+
reps: 1
|
|
2399
|
+
outcome: accepted
|
|
2400
|
+
evidence: "4 findings, all reproduced and all fixed. 1 HIGH (the fix planted a fresh dead pointer at the file-level guard site: sync_file's only call site is CLAUDE.local.md, which sync-from-be.sh refuses by name), 2 MED (unquoted printed command; overclaimed 'discriminator'), 1 LOW (exactly-two-causes overclaim). Governor source-grounded each by grep before accepting. Self-catch on these: 0/4."
|
|
2401
|
+
note: "Recorded per CLAUDE.md §Agent Dispatch invocation-log obligation. Sidecar leg, not an Agent-tool subagent, so the SubagentStop tally does not see it."
|
|
2402
|
+
|
|
2403
|
+
- date: 2026-08-20
|
|
2404
|
+
agent: Explore ×1 (ship_readiness_gate 발췌) · codex/gpt-5.6-terra ×2 (착지계기 REFUTE 레그 · 캘리브레이션 컨트롤)
|
|
2405
|
+
model: opus (orchestrator) / gpt-5.6-terra (codex)
|
|
2406
|
+
caller: FH hub session 08d6fe75 (air node) — peer 로부터 훅 수정 인계받은 축
|
|
2407
|
+
purpose: "정체성 ④ 등급 판정 + 착지 계기 결함 수리. Explore 는 등급표 ④행·§Gate consequence·등급 정의를 **원문 인용으로** 발췌(요약 금지 — 조건을 무르게 만들지 말라고 명시). codex 는 내 수리를 반증"
|
|
2408
|
+
prompt_summary: "① ship_readiness_gate.md 에서 ④행·압도성 절·🟢/🔵 정의·screener 잔여 처리를 파일:줄 붙여 원문 발췌, 못 찾으면 「못 찾음」이라 하고 추정 금지 ② 내 DLC_EXCLUDE_TARGETS 수리를 REFUTE — 비인용 확장/경로매칭/과잉제외/러너배선/레인품질/대안설계 6축, 각 항목에 성립·불성립과 근거 줄"
|
|
2409
|
+
reps: 1
|
|
2410
|
+
outcome: accepted
|
|
2411
|
+
finding: "🟥 **codex HIGH 3 · MED 1 성립, LOW 2 정당 기각 — 자력 적발 0.** HIGH#1 비인용 확장의 글로빙·단어분리로 공백 경로면 제외가 빗나감 = **fail-open, 옛 거짓 양성 재발**. HIGH#2 `./` 접두가 git 경로와 불일치하는데 러너 `-f` 게이트는 실재만 보므로 **무신호로** 실패. LOW#4·#5 는 불성립이나 **하위지적 둘이 유효**했다(조건부 export 가 부모 환경을 상속 · 레인 b 가 `not10` 만 요구해 «안 죽었다» 만 보증). HIGH#6 은 채택 안 함(판정 의미론 변경이라 분리). ★ Explore 는 **카드가 물려준 미결을 무효화**했다 — 「screener 잔여가 명시 잔여냐 보류 사유냐」는 §④ promotion criteria(08-17)가 이미 **재분류**해 뒀다(계기가 재는 것은 «조직 전파»가 아니라 «허브 내부 착지»라 그 조건을 100% 닫아도 ④ 명제는 한 글자도 안 재진다). 즉 결정할 것이 아니라 틀린 이지선다였다."
|
|
2412
|
+
note: "🟥 **사이드카 캘리브레이션이 필요했다.** 첫 두 codex 런이 exit 0 인데 출력이 프롬프트 에코에서 끊겼다(바이트 동일 2,123 = 비결정 아님). 「지적 없음」으로 읽지 않고 known-answer 컨트롤(2+2)을 돌려 **사이드카는 살아 있음**을 확인, 변수 하나씩 갈라 원인이 **긴 프롬프트의 2분 초과**임을 특정했다. exit 0 을 통과로 읽었으면 crossfamily 를 거짓으로 적었을 자리다. ⚠️ Explore 는 요청 밖 항목(P4-1 선행조건 미충족·프로덕션 호출부 0개·§Gate consequence 6행 중 4행 비일관)까지 냈고 그게 판정의 하중이 됐다."
|
|
2413
|
+
cost: "Explore 60,857 tokens (subagent_tokens) · codex ×2 는 CLI 라 미노출 = UNMEASURED · 거버너 = UNMEASURED. 🟥 합계 안 적는다"
|
|
2414
|
+
|
|
2415
|
+
- date: 2026-08-21
|
|
2416
|
+
agent: general-purpose ×4 (L3 drift · L4 connection · L5 pattern · residency ledger)
|
|
2417
|
+
model: opus (orchestrator + all four legs)
|
|
2418
|
+
caller: FH hub session 27a9ba28 — /harness-doctor 정기 진단 (직전 실행 2026-07-20, 캐던스 30일 초과)
|
|
2419
|
+
purpose: "harness-doctor L3~L5 + 메타하네스 residency ledger 를 네 렌즈로 병렬 분해. 거버너는 L1·L1-E·푸터프린트·pointer-illusion·SKILL 크기를 직접 측정하고, 렌즈끼리 파일이 안 겹치게 스코프를 갈랐다."
|
|
2420
|
+
prompt_summary: "각 레그에 계기 규율을 명시 주입 — ① known-positive/known-negative 쌍으로 계기 판별력 먼저 검정하고 못 가르면 UNCALIBRATED ② 카운트마다 손검증 1건 ③ not found = UNMEASURED, 0 아님 ④ tier 확정 금지, 후보만. L5 에는 「기록하지 않는 소스를 grep 해서 0회를 내면 그건 측정이 아니라 생성」을 명시."
|
|
2421
|
+
reps: 1
|
|
2422
|
+
outcome: pending
|
|
2423
|
+
finding: "미착지 — 네 레그 진행 중. 거버너 자체 측정분은 확정: always-loaded 144,205자(M-tier, 임계 80k) · memory-index 25,472자(S-tier, 임계 10k)이며 **로더 하드리밋 초과로 엔트리 5건이 이 세션에 실제로 미로드**(손검증). ★ pointer-illusion 「2건」은 **둘 다 오탐**이었고 원인은 harness-doctor SKILL.md 가 들고 있는 정규식 자신 — `templates/` 접두를 떨어뜨리고 `{project}/{domain}/` 자리표시자를 실경로로 읽는다. 손검증 안 했으면 M-tier 두 건을 지어낼 자리였다."
|
|
2424
|
+
note: "운영자 상시 요청(CLAUDE.local.md, lease→2026-11-09, scope=서브에이전트 디스패치)에 따라 건별 승인 없이 디스패치. 워크플로/deep-research 는 범위 밖이라 안 씀. 단위는 문자(chars)로 통일 — 로더 경고 24.9KB 가 25,472자/1024 와 정확히 일치해 로더도 문자 기준임을 확인(바이트로 쟀으면 40,657 로 과대계상)."
|
|
2425
|
+
cost: "UNMEASURED (완료 알림의 subagent_tokens 로 마감 시 갱신) · 거버너 = UNMEASURED. 합계 안 적는다"
|
|
2426
|
+
|
|
2427
|
+
- date: 2026-08-21
|
|
2428
|
+
agent: general-purpose (×10, consolidated)
|
|
2429
|
+
model: inherited (session default)
|
|
2430
|
+
purpose: "개입규칙 41개 정밀도 프로브 — 블라인드 라벨 2팔 + 창 평가 7배치 + 미판정 1건 재실행"
|
|
2431
|
+
prompt_summary: "라벨팔은 사람 발화만(key), 평가팔은 세션기록만(win) — 블라인드를 프롬프트가 아니라 파일 경계로 걸었다. 서브에이전트가 프로젝트 지시를 상속하므로 프롬프트 블라인드는 안 먹는다"
|
|
2432
|
+
outcome: accepted
|
|
2433
|
+
finding: "라벨 두 팔 완전일치 122/140(87%) — 같은 급 과제의 공개 벤치마크 Cohen κ 0.70~0.74 와 동급. 평가 44창에서 41개 규칙 중 12개만 발화, 판별력(POS−NEG≥3) 2개. 사전등록 중단조건 「무분리」 HIT"
|
|
2434
|
+
note: "🟥 평가팔 하나가 «창 하나를 안 읽고 빈 배열을 냈다»고 자진 신고 — 0으로 안 세고 격리 후 재실행(미판정≠0). 라벨 손검증 6건에서 오탐 1건 확인되어 «애매하면 약한 쪽» 지시가 INTERVENE 을 부풀린 것을 발견, 평가 집합을 «양팔 합치 ∧ 불확실 표시 없음»으로 좁혔다. 위임 자체는 값을 했으나 **판정 축의 결함은 위임이 아니라 운영자가 잡았다**(자력 적발 0)"
|
|
2435
|
+
- date: 2026-08-21
|
|
2436
|
+
agent: 워크플로 5판 (146 에이전트) · fh-meta:{beginner,main-player,challenger} 3 · codex/gpt-5.6-terra REFUTE 2 · Explore 1
|
|
2437
|
+
model: opus (오케스트레이터·페르소나) / gpt-5.6-terra (codex) / sonnet (sim 에이전트)
|
|
2438
|
+
caller: FH hub session 08d6fe75 (air node) — 정체성 ④ 판정 → 재정의 → 챔버 런 → T2 훅
|
|
2439
|
+
purpose: "«세션이 쎄함을 알아채고 확인을 제안하는» 능력의 인큐베이션. 5판 = ① 맥락발화 sim v2(39) ② 되게만들기 3실험(34) ③ tracks 개입 코퍼스 전수(46) ④ 대화원본 개입 전수(9) ⑤ 타이밍 sim(18)"
|
|
2440
|
+
reps: 3 (모든 sim 팔)
|
|
2441
|
+
outcome: accepted
|
|
2442
|
+
finding: "🟥 **자력 적발 0. 열 건 넘게 전부 남이 잡았다** — 운영자 6 · codex(HIGH 7·MED 5, BLOCK 판정) · challenger(S 4, «이미 지어져 배선된 novelty_claim_check.sh 재발명») · beginner(HARD 6, «배치 vs 인터럽트») · 레인 2 · CI 2. ★ 측정으로 확정된 계단: **명시 지시 3/3 · advisory 0/3 · 프레이밍 0/3**(3프로브 18판, 독립 판정자). ★ 개입 코퍼스 전수(대화원본 433발화): 개입 54주장/~43추정, **ⓒ판단결함 32(59%) · ⓑ내부미조회 9 · ⓐ외부미조회 6(11%)** — 초판 설계가 겨눈 «세계에 물어봐» 는 소수 클래스였다. ★ 타이밍 sim 이 **봉인 예측 5중 4를 반증**했고 전부 내 제안에 불리한 방향. 교란(과제가 검색을 이름으로 부름)을 스스로 지목. 교란 안 된 대비 하나가 값을 냈다 — 양팔 다 검색, **힌트 쥔 쪽만 정답 도달(2/3 vs 0/3)** ⇒ 기전은 «찾게 함» 이 아니라 **«이름 붙이게 함»**."
|
|
2443
|
+
note: "🟥 **오케스트레이션의 값은 산출이 아니라 «내가 못 보는 것을 봤다» 였다.** 특히 challenger 가 12일 전 같은 결함·같은 운영자 발화로 지어진 `novelty_claim_check.sh` 를 찾아냈다 — 재발명 방지 능력을 제안하면서 이미 있는 더 엄격한 기계를 못 찾은 것이 이 런의 진짜 산출이다. ⚠️ 「독립 수렴」 을 두 번 썼다가 두 번 다 철회했다(같은 저자·캐논·모델 계열 ⇒ 상호보강이되 상관됨) — 오늘 스스로 인용한 규칙을 몇 시간 뒤 위반한 형태."
|
|
2444
|
+
cost: "39판 4,001,378 · 34판 3,794,737 · 46판 5,660,769 · 9판 1,045,403 · 18판 2,077,707 = **subagent_tokens 16,580,000 (기계 출처)** · codex ×2 = UNMEASURED(CLI) · 거버너 = **UNMEASURED**(세션이 자기 소비를 못 읽는다). 🟥 미측정 칸을 0 으로 접지 않는다."
|
|
@@ -23,7 +23,7 @@ provenance: pmh-dev@cbe3932 knowledge/shared/rules/knowledge_layer_seam.md 역
|
|
|
23
23
|
| 소비자 | 무엇을 읽나 | 언제 | 상태 |
|
|
24
24
|
|---|---|---|---|
|
|
25
25
|
| `phantom-quench` **Step 2-O** | 진입 인덱스(`INDEX.md`/`index.md`/`README.md`/`readme.md` — 판정기와 동일 후보) → 후보 페이지 | **도메인 주장**(조직 고유 사실·용어·정책)이 Step 2 에서 **미선언**일 때 | ✅ **배선됨** (2026-08-10 역수확, FH 1호) |
|
|
26
|
-
| `steel-quench` Step 0.35 | 진입 인덱스(위와 동일 후보) → 관련 정책·용어·도메인 사실 | 공격 각도를 정하기 전 |
|
|
26
|
+
| `steel-quench` Step 0.35 | 진입 인덱스(위와 동일 후보) → 관련 정책·용어·도메인 사실 | 공격 각도를 정하기 전 | ✅ **배선됨** (2026-08-20 역수확, FH 2호) — 🟥 단 **살리언스 층이지 기계 바닥이 아니다.** 훅도 레인도 이 절을 강제하지 않는다. 원 필드 문서에는 강제 취지의 서술이 딸려 있었으나 실측하니 그 훅 레인이 **부재**해서(팬텀 기계-주장) **가져오지 않았다.** 「배선됨」은 «절차가 스킬에 존재한다» 는 뜻이고 «기계가 강제한다» 는 뜻이 아니다 |
|
|
27
27
|
|
|
28
28
|
**1호 소비자 배선의 의미**: 그전까지 도메인 주장은 로컬 선언 파일에도 외부 인용에도 안 걸려
|
|
29
29
|
**전부 🔴 Source-Missing 으로 떨어졌다** — 조직 지식층이 정확히 그 근거인데 탐색 경로에 없었다.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrono-meta/fh-gate",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.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": [
|
|
@@ -118,10 +118,15 @@
|
|
|
118
118
|
"scripts/substrate_jump_detector.sh",
|
|
119
119
|
"scripts/tier_census_grep.sh",
|
|
120
120
|
"scripts/test_marker_floor_lanes.sh",
|
|
121
|
+
"scripts/test_marker_defense_lanes.sh",
|
|
121
122
|
"scripts/test_marker_crossfamily_lanes.sh",
|
|
122
123
|
"scripts/test_marker_standpoint_lanes.sh",
|
|
123
124
|
"scripts/test_marker_thirdparty_lanes.sh",
|
|
124
125
|
"scripts/test_marker_axes_run_lanes.sh",
|
|
126
|
+
"scripts/test_marker_soul_check_lanes.sh",
|
|
127
|
+
"scripts/test_heavy_classifier_lanes.sh",
|
|
128
|
+
"scripts/residency_admission_check.sh",
|
|
129
|
+
"scripts/test_residency_admission_lanes.sh",
|
|
125
130
|
"scripts/test_env_purity_lanes.sh",
|
|
126
131
|
"scripts/.env_purity_tokens.defaults",
|
|
127
132
|
"scripts/env_purity_scan.sh",
|
|
@@ -215,6 +220,9 @@
|
|
|
215
220
|
"scripts/judgment_circuit_lint.sh",
|
|
216
221
|
"scripts/novelty_claim_check.sh",
|
|
217
222
|
"templates/settings.Compaction.snippet.json",
|
|
223
|
+
"scripts/fh_hub_identity.sh",
|
|
224
|
+
"scripts/fh_track_resolve.sh",
|
|
225
|
+
"scripts/test_track_resolve_lanes.sh",
|
|
218
226
|
"scripts/field_canon_preload.sh",
|
|
219
227
|
"scripts/test_field_canon_lanes.sh",
|
|
220
228
|
"templates/settings.FieldCanon.snippet.json",
|
|
@@ -225,6 +233,9 @@
|
|
|
225
233
|
"scripts/gate_anchor_check.sh",
|
|
226
234
|
"scripts/portability_lint.sh",
|
|
227
235
|
"scripts/rtk_gross_ablation.sh",
|
|
228
|
-
".claude/capabilities"
|
|
236
|
+
".claude/capabilities",
|
|
237
|
+
"scripts/prior_art_prompt.sh",
|
|
238
|
+
"scripts/test_prior_art_prompt_lanes.sh",
|
|
239
|
+
"templates/settings.PriorArt.snippet.json"
|
|
229
240
|
]
|
|
230
241
|
}
|
|
@@ -10,6 +10,117 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
|
|
10
10
|
|
|
11
11
|
## Plugin Level
|
|
12
12
|
|
|
13
|
+
### [2.7.0] — 2026-08-21
|
|
14
|
+
|
|
15
|
+
### 🟥 BREAKING (gate): 2026-08-21 이후 날짜의 마커는 `①영혼` 줄이 없으면 커밋이 막힌다 — 없으면 `soul: 없음` 한 줄로 통과한다
|
|
16
|
+
|
|
17
|
+
이 필드는 `CLAUDE.md §자기 대조` 가 **2026-08-09 부터 의무**로 정한 것이고, 이 릴리스는 그것을
|
|
18
|
+
새로 요구하는 게 아니라 **처음으로 읽는다.** 소급 안 한다(그 날짜 이전 마커는 그대로).
|
|
19
|
+
**선언된 부재는 1급 값이다** — `없음`/`none`/`n/a` 는 통과하고, 통과가 아니라 **기록**으로 찍힌다
|
|
20
|
+
(`⚠️ ①영혼: 없음 — declared absent. Recorded, not silent.`). 빈 필드만 막힌다.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
**마커의 `①영혼` 은 6주째 의무였는데, 읽는 코드가 0줄이었다.**
|
|
25
|
+
|
|
26
|
+
컨트롤 동반 실측: 훅에서 `crossfamily` 는 **21곳**에서 검사되는데 `①영혼`/`soul` 을 읽는 코드는
|
|
27
|
+
**0줄**이었고, 게이트 명세(`fh_4axis_gate.md`)는 그 필드 이름조차 안 적는다. 실물 코퍼스에서
|
|
28
|
+
**2026-08-10 이후 마커 98건 중 37건(37.8%)** 이 어떤 표기로도 그 줄을 안 갖고 있었다 — 그중
|
|
29
|
+
손검증한 하나는 **codex+agy 패널 · 28레인 · controls alive · 나머지 필드 전부 채운** 마커다.
|
|
30
|
+
**시킨 축은 다 돌렸고, 아무 기계도 안 읽는 그 한 줄만 없었다.**
|
|
31
|
+
|
|
32
|
+
- **새 축이 아니다 — ⓒ 격리 그라운딩의 확장이다.** `fh_three_layer_canon.md §1-a-2` 의 판별자는
|
|
33
|
+
«무엇을 받았는가»이고, ⓒ 는 이미 «저자가 쓴 문장 + 지금의 트리» 를 받는다 — 사전 선언 검사의
|
|
34
|
+
입력과 한 글자도 다르지 않다. 시제(사전 선언 ↔ 사후 주장)는 적대성과 같은 **자세**지 축이 아니다.
|
|
35
|
+
🟥 초안은 ⓖ 로 뽑으려 했고 **운영자가 기존 카테고리 검토를 지시해 정정했다** — 그대로 갔으면
|
|
36
|
+
정본 6축·`axes-run` enum·덱 표·마커 190건 재해석이 전부 따라왔을 것이고, 그건 정본 안에 이미
|
|
37
|
+
기록된 오류(저자가 ⓓ에 귀속한 5건 중 3건이 다른 축으로 재분류)의 반복이었다.
|
|
38
|
+
- **검사하는 것은 채널뿐이다.** 선언이 있는가(줄머리 키) · 공허하지 않은가 · `soul-check:` 가 닫힌
|
|
39
|
+
enum 인가 · **같은 레코드 안에서 정합적인가**(`reflected` 를 적으려면 그 마커에 실제로 선언이
|
|
40
|
+
있어야 한다). **검사하지 않는 것**: 사전에 썼는가(파일에서 안 갈린다) · 그 판단이 옳은가.
|
|
41
|
+
날조된 `reflected` 는 통과한다 — §4-b(cross-family 가 마커를 읽는다)의 몫이고 여기서 안 닫혔다.
|
|
42
|
+
- **검증**: 레인 44개(BLOCK/PASS 양방향 · 실물 코퍼스 known-pair 2쌍) · 되돌림에서 **정확히 대응
|
|
43
|
+
7레인만** 적색 · 격리 클론 실 커밋 2팔(선언 없음 `rc=1` / 있음 `rc=0 ALL AXES PASSED`).
|
|
44
|
+
- 🟥 **자력 적발 0 이 14건.** cross-family 2계열 분리 발주(codex=diff 축 / agy=주장 축) 10건 +
|
|
45
|
+
첫실사용 4건, **겹친 지적 0**. 그중 하나는 **사이드카의 수리가 새 fail-open 을 만든 것**이다 —
|
|
46
|
+
넓힌 탐지기가 `soul-check:` 줄 자신의 텍스트를 증거로 잡아 BLOCK 레인이 PASS 로 뒤집혔고
|
|
47
|
+
**레인 41개가 전부 초록이었다.** 잡은 것은 격리 클론 첫실사용이다.
|
|
48
|
+
|
|
49
|
+
**유출 스캐너가 zsh 에서 죽었고, 그 죽음이 「깨끗함」과 바이트 동일이었다.** (PR #480)
|
|
50
|
+
|
|
51
|
+
`psa_scan_tagged` 가 `local path` 를 선언하는데 **zsh 에서 `path` 는 `PATH` 와 tied 된 특수
|
|
52
|
+
배열**이라 그 스코프의 `PATH` 가 비고 첫 실행문(`input=$(cat)`)부터 죽는다. 계약이
|
|
53
|
+
「빈 입력 = `return 0`」이라 **출력이 깨끗한 스캔과 구별되지 않았다.** `/public-surface-audit` 가
|
|
54
|
+
한 줄도 안 스캔하고 「유출 없음」을 냈고, 그 스킬은 **Pre-Publish Gate 가 publish 직전에 1번으로
|
|
55
|
+
체이닝하는 렌즈**다.
|
|
56
|
+
|
|
57
|
+
- 훅 경로(`pre-commit`·`pre-push`)는 bash 로 `execve` 되어 **원래 안전했다.** 뚫린 것은
|
|
58
|
+
**에이전트가 Bash 툴로 치는 스킬 본문**이고, macOS 기본 셸이 zsh 라서 난다.
|
|
59
|
+
- 수리는 둘이다: **A** 식별자 개명 · **E** `psa_scan_tagged` 진입에 생존성 가드 배선
|
|
60
|
+
(실패 → `rc=3 NOT SCANNED`). 🟥 **A 만으로는 계열이 안 닫힌다** — 같은 형태가 7곳 더 있고 그중
|
|
61
|
+
6곳은 «오늘 안전한데 그건 호출부가 bash 라서»지 코드가 이식성 있어서가 아니다.
|
|
62
|
+
**A 는 이 실례를, E 는 다음 실례를 막는다.**
|
|
63
|
+
- ⚠️ **소비자에게 보이는 변화**: 패턴 파일이 **부분만 로드되는** 설치본은 이제 `rc=3`
|
|
64
|
+
(NOT SCANNED)를 받는다 — 전에는 `rc=0`(깨끗)이었다. 방향은 옳지만 **막히는 경우가 늘었다**.
|
|
65
|
+
잘못된 패턴 파일을 쓰던 소비자는 그 사실을 이제 통보받는다.
|
|
66
|
+
- **rc 계약 `0 깨끗 · 1 유출 · 3 미측정` 을 1과 3으로 접지 않는다** — 합치면 `PUBLIC_SURFACE_OK=1`
|
|
67
|
+
이 **계기 사망까지 «승인된 유출»로 통과**시킨다. 비가역 표면에서 가장 나쁜 조합이다.
|
|
68
|
+
- **소비자 설치본 실측**(리뷰에서 추가): 깨끗한 클론 → `npm pack` → `node_modules` 경로 추출 →
|
|
69
|
+
**스킬 본문 호출 형태 그대로** known-pair. 수리 전 `zsh` 양성 **rc=0 무보고**(유일한 흔적은
|
|
70
|
+
stderr 한 줄) → 수리 후 **rc=1 보고**. bash 팔은 양쪽 불변(컨트롤).
|
|
71
|
+
|
|
72
|
+
**릴리스 표면 — 두 계보가 한 이름공간을 쓰고 있었다.**
|
|
73
|
+
|
|
74
|
+
GitHub Releases 가 **v0.3.0(8/16)을 「Latest」로** 보여주는 동안 배포물은 **2.6.0** 이었다. 둘 다
|
|
75
|
+
`vX.Y.Z` 를 쓰고 정체성 계보에만 Release 객체가 있었기 때문이다. 🟥 **이건 이 저장소가 자기
|
|
76
|
+
게이트에서 반복해 찾아낸 그 결함(두 층·한 이름)이 자기 버전 번호에 난 것이다.**
|
|
77
|
+
|
|
78
|
+
- **통일하지 않는다** — 두 숫자가 다른 것을 잰다(무엇을 설치하는가 ↔ 얼마나 익었는가). 합치면
|
|
79
|
+
성숙도 신호가 사라지고, **`identity-v1.0.0` = 전정체성 🟢** 라는 마일스톤이 죽는다.
|
|
80
|
+
- 이름공간만 가른다: 정체성 계보는 **`identity-v0.4.0` 부터** 접두어를 갖는다. 기존
|
|
81
|
+
`v0.1.0`·`v0.2.0`·`v0.3.0` 은 **개명하지 않는다** — 공개 ref 재작성은 비가역이라
|
|
82
|
+
Destructive-Op 게이트가 우리 자신의 태그에도 적용된다.
|
|
83
|
+
- `README §Two version numbers` 신설 ·
|
|
84
|
+
🟥 `v2.6.0` Release 객체를 만들었다가 **같은 시각에 되돌렸다**(운영자 지적) — GitHub 의 «Latest»
|
|
85
|
+
배지는 **슬롯이 하나**라 두 계보가 한 페이지에 있으면 경쟁하고, 배지를 쥔 쪽이 «이 저장소가
|
|
86
|
+
뭐라고 말하는가»를 정한다. 패키지 번호가 표제를 가져가면서 **성숙도 주장이 그 아래로 밀렸다.**
|
|
87
|
+
오독은 더 싼 절반(기존 본문 맨 위 한 줄)이 이미 닫았다. ⇒ **Releases 는 정체성 계보만** 나른다 ·
|
|
88
|
+
`v0.3.0` 본문 **맨 위**에 계보 한 줄(본문 4문단 아래엔 이미 있었다 — **gate-locality**: 읽는
|
|
89
|
+
자리에 없으면 없는 것이다).
|
|
90
|
+
- ⚠️ 정본의 stale 하나 같이 정정: `ship_readiness_gate.md` 가 npm 을 *"`1.4.x` range"* 로 적고
|
|
91
|
+
있었다(실제 2.6.0). **산문에 박힌 버전 숫자는 조용히 낡고 사실처럼 읽힌다.**
|
|
92
|
+
|
|
93
|
+
**사이드카는 감사하지 쓰지 않는다.** (`multi_model_sidecar_strategy.md §Runtime Authority`)
|
|
94
|
+
|
|
95
|
+
기존 교리는 «사이드카 finding 은 증거 후보이지 판정이 아니다»를 **판정 축**에서만 말했고 **쓰기
|
|
96
|
+
축이 비어 있었다.** 실측: 적대 감사자로 발주된 사이드카가 워킹트리를 **직접 편집**했고(`mtime`
|
|
97
|
+
으로 적발 — 어떤 게이트도 못 잡았다), 그 수리가 **자기참조 fail-open** 을 새로 만들었다.
|
|
98
|
+
🟥 **금지 근거는 「월권」이 아니라 「고친 쪽과 검사하는 쪽이 같아진다」다.**
|
|
99
|
+
프로세스 판도 같이 적었다 — 폭주 사이드카를 죽일 때 **자기 프로세스 판별자**(모델 핀·PID·
|
|
100
|
+
`pgrep` 선열거)를 갖고 쓰고, **죽인 뒤 무엇이 죽었는지 확인한다**.
|
|
101
|
+
|
|
102
|
+
**규칙은 세 자리 중 하나에 산다.** (`README §Where a rule lives`)
|
|
103
|
+
|
|
104
|
+
상주 층이 무한히 자라야만 하는가라는 질문에 대한 답이다. 🟥 **가운데 자리가 보통 비어 있고,
|
|
105
|
+
그게 공짜다** — **게이트 자신의 오류 메시지**는 행위자가 **행동하는 순간에** 읽는 자리라 상주
|
|
106
|
+
예산을 한 글자도 안 쓴다. 한계도 같이 적었다: **막힐 때만 읽힌다.** 그래서 대체가 아니라 3층이고,
|
|
107
|
+
실측이 그 증거다 — 이번 게이트에서 **기계 +480줄, 상주 산문 ±0**.
|
|
108
|
+
|
|
109
|
+
### 명시 잔여 — 안 닫은 것
|
|
110
|
+
|
|
111
|
+
- **날조된 `reflected(…)` 는 통과한다.** provenance 는 파일에서 안 갈린다. §4-b 의 몫이다.
|
|
112
|
+
- **`①영혼` 소급 안 함** — grace `2026-08-21`, 기존 37건 유지.
|
|
113
|
+
- **형제 축 문법 분열**: `standpoint:` 는 근거를 em-dash 로만 받고 `thirdparty:`·`soul-check:` 는
|
|
114
|
+
괄호로 받는다. 같은 훅 안에서 갈리고, 괄호로 쓰면 *"is not a member of the enum"* 이라는
|
|
115
|
+
**오진**을 낸다(값은 멤버가 맞고 문법만 틀렸다).
|
|
116
|
+
- **psa 계열 7건이 호출부에 의존해 잠들어 있다** — 「남은 7건」이 아니라 **조건부 활성**이다.
|
|
117
|
+
- **`M-1`(상주) · `M-2`(memory) · `M-3`(스킬 활동도)은 안 건드렸다.** 🟥 셋 다 **계기가 미검증**
|
|
118
|
+
이다: 임계 40k·80k·10k **어느 것도 절단점 근거가 없고**(도입 커밋이 축은 20줄 논증하고
|
|
119
|
+
절단점은 한 줄도 안 함, 그리고 도입 당일 대상이 이미 초과였다) · 출하 스캔이 `wc -c`(바이트)를
|
|
120
|
+
**«chars» 라고 라벨**하며(163,456 vs 실제 문자 144,471) · 스킬 활동도 계기가 **언급을 사용으로**
|
|
121
|
+
센다(실행 0인데 «활발» 로 오분류 27종). **재정초 전에 감량하면 근거 없는 목표를 향해 깎는 것**
|
|
122
|
+
이고, 그 절약으로 fail-open 을 산다.
|
|
123
|
+
|
|
13
124
|
### [2.6.0] — 2026-08-20
|
|
14
125
|
|
|
15
126
|
**배포본이 소비자 설치에서 `SELFCHECK: FAIL` 이었다 — 그리고 원인 넷이 전부 «계기가 저자의 머신에 결박» 이었다.** 이 릴리스의 중심은 새 기능이 아니라 그 복구다. 발견 경로는 재출하 준비 중의 손 실행이다: `npm pack` → 추출 → **`node_modules/@chrono-meta/fh-gate` 실경로에서 완주**. 레지스트리에서 받은 **실물 2.5.1** 로도 재현했다(컨트롤).
|