@chrono-meta/fh-gate 1.4.90 → 1.4.91
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-plugin/marketplace.json +2 -2
- package/CLAUDE.md +23 -0
- package/knowledge/shared/harness-core/fh_three_layer_canon.md +142 -0
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +112 -0
- package/knowledge/shared/rules/multi_session_close_protocol.md +118 -0
- package/package.json +8 -1
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/scripts/branch_claim.sh +266 -0
- package/scripts/fh_env_delta_scan.sh +15 -0
- package/scripts/fh_session_load.sh +34 -1
- package/scripts/field_canon_preload.sh +129 -0
- package/scripts/hook_source_lib.sh +41 -0
- package/scripts/selfcheck.sh +40 -0
- package/scripts/session_close_check.sh +134 -1
- package/scripts/test_branch_claim_lanes.sh +231 -0
- package/scripts/test_dispatch_log_lanes.sh +35 -1
- package/scripts/test_field_canon_lanes.sh +142 -0
- package/scripts/test_hook_source_gate_lanes.sh +81 -0
- package/templates/.git-hooks/pre-commit +44 -0
- package/templates/settings.FieldCanon.snippet.json +51 -0
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "fh-meta",
|
|
14
|
-
"version": "1.4.
|
|
14
|
+
"version": "1.4.91",
|
|
15
15
|
"description": "Hub meta-operations toolkit — 35 skills + 7 agents. New in 1.4.53: `fh-codex-doctor` (npm bin) — Codex adapter drift scanner; reads the documented M1/M2/M3 skill tier map + skill/agent source and reports codex-native/adapter-required/claude-native/unclassified per unit, wired into `npm test`/`prepublishOnly` (fail-closed on unclassified Claude-native primitives). New in 1.4.49: steel-quench gains Step 0.6 Verdict-Invariance Probe (groundedness axis — a load-bearing judged gate's verdict must track behavior, not rubric phrasing; measured flip-count over cross-family paraphrases; arXiv:2605.06161 Policy Invariance anchor); multi_model_sidecar_strategy §Vendor-native harness (a model is strongest in its own vendor CLI — Claude/CC, GPT/codex, Gemini/Antigravity; a universal router degrades all of them, so it stays an autocomplete/QA sidecar, never orchestration); predelete_check.sh fail-closed rewrite; memory-hygiene A-TMA anchor. New in 1.4.48: phantom-quench + steel-quench gain external frontier anchors (arXiv:2607.02052 package-hallucination; arXiv:2607.02057 prompt-coverage-adequacy); README model-flat claim reframed from a per-release point-curve to structural invariants (operation flattens across tiers; depth tier-order fixed within a generation). New in 1.4.47: onboarding step ① surfaces the Mode D companion-store session-start load in the auto-read salience anchor (previously only in the local binding + rules, so a greeting could skip the load). New in 1.4.46: context-doctor command-output axis (route to rtk/proxy for verbose CLI stdout, complementing .claudeignore; risk-gated to token-scarce envs). New in 1.4.41: context-doctor 2026 trigger vocab (context engineering/rot/collapse) + phantom-citation hardening; hub measurement-integrity-checklist (cross-model measurement pre-flight: display-name pin/reps≥3/discriminating probe). New in 1.4.40: install-wizard queryable-wiki scaffold (INDEX + session-start read + R/W/C ingest). New in 1.4.39: auto-decorrelation (cross-family verifier sidecar recruitment) + video-ingest (capability-routed video ingestion). New in 1.4.x: verify-axis check-class taxonomy (mandatory-pass/measured/judged), no-reinvention Tier-0 inventory, 7-class failure taxonomy, Destructive-Op Gate, Wave-T (Temper), tier-floor governance, Mode D Model Notice, FC consent lane, default-Sonnet guidance. New in 1.3.0: public-surface-audit, field-harvest Mode B auto-trigger, 4-axis gate scope ext. Validated cross-CLI: Claude Code, Codex, Gemini.",
|
|
16
16
|
"source": "./plugins/fh-meta"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"name": "fh-commons",
|
|
20
|
-
"version": "1.4.
|
|
20
|
+
"version": "1.4.91",
|
|
21
21
|
"description": "Project-agnostic utility skills — 4 skills (convergence-loop · deliberation · mcp-circuit-breaker · token-budget-gate) + 1 agent (quench-challenger). Domain-independent utilities transplantable into any project.",
|
|
22
22
|
"source": "./plugins/fh-commons"
|
|
23
23
|
}
|
package/CLAUDE.md
CHANGED
|
@@ -45,6 +45,21 @@ core invariants never melt). The nursery also **verifies what it births**: harne
|
|
|
45
45
|
|
|
46
46
|
> **3층 정본 — 공정 · 엔진 · 정체성**: FH 를 설명하는 뼈대는 세 층이고 셋의 관계가 정본으로 적혀 있다 — **3단 공정**(엔진을 벼리는 순서: 초기 영혼 → 중간 탈상관 가속화 → **마무리 4축 태우기**) → **4대 엔진**(영혼·품질게이트·질문하기·맥락유지) → **5대 정체성**(사람이 실제로 쓰는 기능). **Read `knowledge/shared/harness-core/fh_three_layer_canon.md`** before naming, re-scoping, or citing any of the three — it also defines the **4 verification axes** (ⓐ구현 · ⓑ재는 방식 · ⓒ주장 · ⓓ앵커) that the third stage actually consists of, and states why the three are *not* a clean stack. Grade table stays canonical in `ship_readiness_gate.md`; this pointer never carries grades.
|
|
47
47
|
|
|
48
|
+
> **자기 대조는 상시 의무 — 트리거는 발화가 아니라 «지금 FH/PMH 자산을 건드리고 있다»**
|
|
49
|
+
> (운영자 결정 2026-08-09; 이 저장소든 **다른 사용자의 install 이든** 동일). §FH Improvement
|
|
50
|
+
> 4-Axis Auto-Gate 와 **같은 트리거**이므로 새 트리거도 새 파일도 만들지 않는다 — 기록 자리는
|
|
51
|
+
> **4축 마커의 기존 필드**(`axis2-*` · `axis3-*` · `residual`)다.
|
|
52
|
+
> **마커에 반드시 남는 3줄** ① **①영혼** — 설계 *전에* 쓴 «성공 정의 / 절대 안 함»(없으면 `없음`)
|
|
53
|
+
> · ② **돌린 축과 안 돌린 축을 각각 이름으로**(ⓐ구현 · ⓑ재는 방식 · ⓒ주장 · ⓓ앵커)
|
|
54
|
+
> · ③ **각 축의 컨트롤과 그 생사**. 축을 «돌렸다»의 **최소 증거 = 컨트롤이 살아 있는 실행 출력**
|
|
55
|
+
> 이다 — 안 고른 이유만 적은 것은 준수가 아니다.
|
|
56
|
+
> **비용 경계**: 넷을 매번 다 돌리지 않는다. 실패 모드에 맞춰 **고른다**.
|
|
57
|
+
> 🟥 **자평이다 · 게임 가능하다 · 훅이 없다 — 셋 다 안 닫혔다.** 지금 기계 앵커가 붙은 축은 ⓓ
|
|
58
|
+
> 하나뿐이나 그건 **현 상태이지 원리적 한계가 아니다**(ⓐⓒ 도 기계화할 수 있다 — cross-family
|
|
59
|
+
> 지목). 닫는 방향은 **cross-family 가 그 마커를 읽는 것**이지 자기 채점을 더 성실히 하는 게 아니다.
|
|
60
|
+
> **근거·사례·표본 한계는 `fh_three_layer_canon.md` §1-c — 인용하기 전에 읽어라.** 이 규칙은
|
|
61
|
+
> **n=1 세션 표본**에서 모든 install 로 일반화한 것이고, 그 절이 그 사실을 명시한다.
|
|
62
|
+
|
|
48
63
|
## Core Reference Documents (Consult First)
|
|
49
64
|
|
|
50
65
|
Four foundational assets for hub operations. **Mandatory pre-reference** before new design, protocol proposals, or framework extensions.
|
|
@@ -955,6 +970,14 @@ Closing phrase detected ("wrap up", "done", "good work", "end session", etc.)
|
|
|
955
970
|
> (④-c: why-its-own-step origin, ownership split, salience/backstops) · `§Open-PR-Sweep-Origin` (①-b) — read
|
|
956
971
|
> when executing that close step.
|
|
957
972
|
|
|
973
|
+
> **다축 마감 (같은 하네스에 세션이 둘 이상일 때)**: 순서·판별·쓰기 규율은
|
|
974
|
+
> `knowledge/shared/rules/multi_session_close_protocol.md` 가 정본이다. **접기 전에 살아있는
|
|
975
|
+
> peer 에게 「더 있나」를 묻는 단계가 있고, 그 질문은 `gh pr list` 재대조로 대체되지 않는다**
|
|
976
|
+
> (PR 이 없는 델타를 구조적으로 못 잡는다 — 2026-08-09 실측 8건). 세 가지를 각각 못 믿는다:
|
|
977
|
+
> **보냈다≠닿았다 · 살아있다≠일하는중 · 닫혔다≠안열렸다.** 기계 표면화는
|
|
978
|
+
> `session_close_check.sh` ①-c·①-d, 내용 착지는 `scripts/utterance_landing_check.sh`.
|
|
979
|
+
> **읽어라 — 이 요약에는 판별 규칙도 쓰기 규율도 없다.**
|
|
980
|
+
|
|
958
981
|
**Card-last guard**: ①–④-c (incl. ①-b open-PR sweep, ④-c handoff lifecycle) must ALL complete before
|
|
959
982
|
⑤ runs. **Mechanical floor**: `scripts/session_close_check.sh` is **wired into `templates/.git-hooks/pre-push`** (2026-07-20) — it runs on *every* push, so it is no longer prose-invoked. Enforcement is surface-matched: an ordinary push **surfaces** ❌ violations (advisory — a branch push is reversible), and the **close push blocks** on them: run step ⑥ as **`FH_SESSION_CLOSE=1 git push`** → exit 1 (card-last violated / required close artifact missing) stops the push until fixed. *Why not block always*: ⑤ card-last is a close-time invariant, while ④ mandates writing `fh_completed_*` **during** the session — an unconditional block would pit the two rules against each other and train `--no-verify`, disarming the Destructive-Op gate in the same hook. Any new information produced during ①–④ (new commits from a merged self-PR, model changes,
|
|
960
983
|
new findings, a carry item flipped to DONE) feeds INTO ⑤ — card is never written mid-sequence and
|
|
@@ -65,6 +65,82 @@ tags: [canon, three-layer, engines, identity, verification-axes]
|
|
|
65
65
|
선례: `dominance_benchmark_2026-07-14` 가 *"Sonnet floor 고정, method 만 변화"* 로
|
|
66
66
|
5/8 → 6/8 → **8/8** 계단을 냈다.
|
|
67
67
|
|
|
68
|
+
### §1-b — 스코프 (2026-08-09 운영자 정식화 + 같은 날 3스코프 실측)
|
|
69
|
+
|
|
70
|
+
> **운영자**: *"3단은 스코프가 자유자재다. 작은 스코프는 세션, 큰 스코프는 필드 하네스 개발,
|
|
71
|
+
> 그 위가 메타하네스 자기 자신."*
|
|
72
|
+
|
|
73
|
+
**대체로 맞다. 다만 실측하면 세 가지가 더 붙는다.**
|
|
74
|
+
|
|
75
|
+
#### ⓐ 자유자재가 아니라 — **하한이 있다**
|
|
76
|
+
|
|
77
|
+
판별 기준은 **크기가 아니라 «성공 정의가 설계를 바꾸는가»** 다.
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
gitignore 한 줄 수리 ① 영혼 불요 답이 하나다. 심으면 오버헤드
|
|
81
|
+
branch-claim 게이트 ① 영혼 필수 «무엇을 성공으로 볼 것인가»가 설계를 결정한다
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**실측(2026-08-09)**: 후자에서 ①을 건너뛴 대가가 나왔다 — *"성공 = 오늘 그 사고가
|
|
85
|
+
재현될 때 차단된다"* 를 검증 가능한 문장으로 안 썼고, 그래서 **트리 단위 설계가
|
|
86
|
+
자기 성공 기준을 즉시 실패한다는 것**(A가 switch 후 claim 하면 B가 통과)을
|
|
87
|
+
**적대검증 4라운드 뒤에** 알았다. 심지 한 줄이 짓기 전에 잡았을 것이다.
|
|
88
|
+
|
|
89
|
+
#### ⓑ 스코프는 나란하지 않다 — **중첩되고, 서로를 먹인다**
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
안쪽 ③ ◀──빌린다── 바깥 기계 게이트를 검증한 4축 훅은 **세션/저장소 스코프의 것**이다.
|
|
93
|
+
게이트가 자기 힘으로 자기를 검증한 게 아니다 [강한 증거]
|
|
94
|
+
바깥 ② ──먹인다──▶ 안쪽 ② 두 축이 서로를 검증했다(각자 상대 주장을 반증) [약한 증거]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**강한 쪽부터**: 안쪽 스코프는 **자기보다 바깥의 기계에 의존해서** ③을 완수한다.
|
|
98
|
+
오늘 branch-claim 게이트를 통과시킨 4축 훅·마커·앵커는 전부 저장소 스코프 자산이다.
|
|
99
|
+
즉 «메타하네스 자기 스코프» 는 독립 실행 단위가 아니다 — **바깥이 없으면 ③이 성립하지 않는다.**
|
|
100
|
+
|
|
101
|
+
⚠️ **약한 쪽은 약하다고 적는다.** 초판은 *"세션 축 분리로 **예산**이 생겨 3렌즈를 띄웠다"*
|
|
102
|
+
라고 썼는데 **과장이다** — 두 세션은 예산이 독립이고, 축 분리가 준 것은 예산이 아니라
|
|
103
|
+
**컨텍스트 집중**이다. 게다가 그 분리는 *계획된 탈상관*이 아니라 **원래 다른 두 작업**이었고,
|
|
104
|
+
상호 검증은 계획이 아니라 **창발**이었다. 「바깥 ②가 안쪽 ②를 먹인다」는 **가설이지 실측이 아니다.**
|
|
105
|
+
|
|
106
|
+
즉 «작은/큰»의 병렬 배열은 아니되, **확인된 의존은 아래→위 한 방향뿐**이다.
|
|
107
|
+
|
|
108
|
+
#### ⓒ ②의 효과는 둘이고, **둘째가 더 크다**
|
|
109
|
+
|
|
110
|
+
> **운영자**: *"병렬 탈상관 가속화를 하여 개발을 빠르게 해낸다(**뒷단의 부담을 덜어낼 수도 있다**)."*
|
|
111
|
+
|
|
112
|
+
실측: 3렌즈가 잡은 **M급 9건 + 콜드리드 HARD 5건**이 없었다면 그 14건은 **직렬이고
|
|
113
|
+
시간이 정해진 리허설**로 몰렸을 것이다. 거기서 나오면 못 고친다.
|
|
114
|
+
`fh_signal_2026-08-07_shift-left-governance` §④ 의 *"뒷단 부하는 앞단 부재의 함수다"* 와
|
|
115
|
+
같은 명제이고, 이 괄호가 그것을 ②의 정의 안으로 넣는다.
|
|
116
|
+
|
|
117
|
+
⚠️ **가속화 ≠ shift-left.** 앞당기는 것과 탈상관하는 것은 다른 축이다. 오늘은 둘이 같이
|
|
118
|
+
갔을 뿐이고, 한 문장으로 묶으면 *"병렬로 돌렸으니 앞당긴 것"* 이라는 오독이 나온다.
|
|
119
|
+
|
|
120
|
+
#### 🟥 ⓓ 실측 — **자기 스코프가 가장 나빴다**
|
|
121
|
+
|
|
122
|
+
같은 날 한 세션에서 세 스코프가 다 돌았고, 품질이 이렇게 갈렸다:
|
|
123
|
+
|
|
124
|
+
| 스코프 | ① 영혼 | ② 탈상관 | ③ 4축 |
|
|
125
|
+
|---|---|---|---|
|
|
126
|
+
| **A 세션** (두 축 병렬) | 🟡 프레임은 있고 «절대 안 함» 없음 | 🟡 **창발이지 설계가 아니다** — 원래 다른 두 작업이었고 상호검증이 결과로 생겼다 | ✅ peer 상호검증 · 마감 스윕이 미착지 결정 1건 적발 |
|
|
127
|
+
| **B 산출물** (발표 원고) | ✅✅ 인용금지 원장 = «절대 안 함» | ✅✅ 3렌즈를 **실패 모드로** 골랐다 | ✅ ⓐ 다른계열 · ⓑ 첫실사용 · ⓒ 격리감사 4건 반증 |
|
|
128
|
+
| **C 메타하네스 자기** (게이트·배선) | 🟥 **안 심었다** | 🟡 사후 검증으로 씀(«중간»이 아니다) | 🟡 ⓐⓑⓓ 함 · **ⓒ 안 함** |
|
|
129
|
+
|
|
130
|
+
**FH 가 남의 것엔 3단을 잘 쓰고 자기 것엔 못 썼다.** §0 이 *"재료가 겹친다는 것은
|
|
131
|
+
도그푸딩의 지문"* 이라고 적었는데, 실측은 한 겹 더 말한다 — **겹치면 건너뛰기도 쉽다.**
|
|
132
|
+
자기 코드는 *"내가 아니까"* 라는 감각이 ①을 먼저 지운다.
|
|
133
|
+
|
|
134
|
+
> **운영자(2026-08-09)**: *"아직 RC 이긴 한데, RC 인 만큼 스스로가 잘 굴려야 초록으로도
|
|
135
|
+
> 갈 수 있겠지."* → **C 스코프의 품질이 승급 경로다.** 남에게 잘 쓰는 것으로는 안 오른다.
|
|
136
|
+
> ⚠️ 등급 어휘(🔵/🟢)는 **§3 정체성 층에 붙지 이 공정 층에 붙지 않는다**(정본 =
|
|
137
|
+
> `ship_readiness_gate.md`). 위 문장은 «공정을 자기에게 적용한 품질이 정체성 승급을
|
|
138
|
+
> 좌우한다» 로 읽어라 — 공정 자체에 등급을 매기는 것이 아니다.
|
|
139
|
+
|
|
140
|
+
**근거 등급 (정직하게)**: 위 표는 **한 세션 n=1** 이다. 하한 판별 기준(ⓐ)의 근거는
|
|
141
|
+
**사례 2개**(gitignore vs 게이트)뿐이다. ⓓ 의 «자기 스코프가 가장 나쁘다» 가 구조적인지
|
|
142
|
+
그날 우연인지는 **미측정** — 다음 세션들에서 같은 표를 채워 봐야 안다.
|
|
143
|
+
|
|
68
144
|
### §1-a — 마무리 «4축» (2026-08-09 실측으로 정의)
|
|
69
145
|
|
|
70
146
|
3단계를 오래 «적대검증» 이라고 불렀으나, 그건 **넷 중 하나**다. 각 축은 **다른 것이 틀린
|
|
@@ -86,6 +162,72 @@ tags: [canon, three-layer, engines, identity, verification-axes]
|
|
|
86
162
|
비용 경계: 넷을 매번 다 돌리는 축이 아니다. **곱하지 말고 실패 모드에 맞춰 골라라**
|
|
87
163
|
(`[[feedback_decorrelation_not_fanout_cost_boundary]]`).
|
|
88
164
|
|
|
165
|
+
|
|
166
|
+
### §1-c — 자기 대조를 **상시 의무**로 만든 근거 (그리고 그 표본의 한계)
|
|
167
|
+
|
|
168
|
+
`CLAUDE.md` 가 «3층 자기 대조는 상시 의무 · 트리거는 발화가 아니라 자산 접촉» 을 상주로 싣는다.
|
|
169
|
+
그 규칙은 여기서 근거를 가져간다. **인용 전에 이 절의 «표본 한계» 를 같이 읽어라** — 규칙 본문은
|
|
170
|
+
짧고, 짧은 만큼 근거보다 세게 들린다.
|
|
171
|
+
|
|
172
|
+
**왜 트리거를 옮겼나**: §1-b ⓓ 의 A/B/C 표가 «자기 스코프가 가장 나빴다» 를 보였고, 그 미스는
|
|
173
|
+
**규칙을 몰라서 난 것이 아니다** — 같은 세션이 아침에 규칙을 읽고 저녁에 어겼다. 살리언스는 이미
|
|
174
|
+
최대였다. 그러면 처방이 「더 세게 읽어라」가 될 수 없고, 남는 지렛대는 **트리거를 «누가 물었나»
|
|
175
|
+
에서 «지금 자산을 건드리고 있다» 로 옮기는 것**이다. 후자는 4축 게이트가 이미 쓰는 트리거라
|
|
176
|
+
새 기계층이 필요 없다.
|
|
177
|
+
|
|
178
|
+
**축보다 컨트롤이 먼저다 (실측 n=4, 2026-08-09 병렬 세션)**:
|
|
179
|
+
| | |
|
|
180
|
+
|---|---|
|
|
181
|
+
| 측정 시도 | 4 |
|
|
182
|
+
| **컨트롤 없이 죽은 측정** | **2** |
|
|
183
|
+
| 최악 사례 | 컨트롤이 없었으면 *"운영자 발화 **30건** 전건 미착지"* 로 보고할 뻔했다 — **실제는 전건 착지** |
|
|
184
|
+
|
|
185
|
+
> 🟥 **이 표의 「30」은 정정본이다 — 초판은 `39` 였고 그것도 계기 결함이었다** (2026-08-09,
|
|
186
|
+
> 원 측정 세션이 격리 재측정으로 자진 철회). `type=user` 442건을 `origin.kind` 로 완전 분할하니
|
|
187
|
+
> **human 30 · peer 메시지 6 · task-notification 3** 이었다 — 파서가 `type=user` 를 사람 발화로
|
|
188
|
+
>읽었는데 **다른 AI 세션이 보낸 메시지와 시스템 알림이 같은 타입·같은 문자열 content** 라 섞여
|
|
189
|
+
> 들어왔다. **랜덤 오차가 아니라 범주 오류**이고, 나쁜 쪽은 커버리지가 30% 부풀려지는 것보다
|
|
190
|
+
> **AI 발화와 사람 의도가 한 통에 섞이는 것**이다.
|
|
191
|
+
> **방향은 살아남았다** — 30건도 전건 착지다. 죽은 것은 **분모**다.
|
|
192
|
+
> ★ **이 정정 자체가 이 절의 논거다.** 「컨트롤이 잡았다」던 사례의 분모를 잡은 것은 컨트롤이
|
|
193
|
+
> 아니라 **격리 재측정**(ⓒ 기록 그라운딩)이었다 — 축이 서로를 대체하지 못한다는 §1-a 의 주장이
|
|
194
|
+
> 자기 근거 위에서 한 번 더 성립했다.
|
|
195
|
+
> ⚠️ **전파 경계**: 이 값은 `CLAUDE.md` 상주 블록에는 **실려 있지 않다** — cross-family 지적으로
|
|
196
|
+
> 상주를 31줄→14줄로 줄일 때 사례가 빠졌기 때문이다. 축약이 오염 범위를 좁혔다(의도한 효과는
|
|
197
|
+
> 아니었다). 원장·PR 본문 등 다른 표면에 `39` 가 남았는지는 **표면별로 확인해야 한다**
|
|
198
|
+
> (`[[feedback_half_fix_propagation_boundary]]`).
|
|
199
|
+
> 🟡 **`n=4` 는 그 시점 값이다.** 원 측정 세션이 이후 더 늘었다고 보고했으나 **이 문서는 그
|
|
200
|
+
> 수치를 검증하지 않았고, 그래서 싣지 않는다** — 검증 전 인용이 방금 정정한 그 경로다
|
|
201
|
+
> (Instrument-Calibration §publish-order: *"publish = 어떤 형태로든 처음 말한 순간"*).
|
|
202
|
+
|
|
203
|
+
죽은 것은 대상이 아니라 **세는 줄**이었다(`[[feedback_absence_measurement_needs_control]]`).
|
|
204
|
+
그래서 규칙은 「4축을 돌려라」가 아니라 **「축을 돌렸다의 최소 증거 = 컨트롤이 살아 있는 실행
|
|
205
|
+
출력」** 을 요구한다. 축을 늘리는 것보다 각 축이 살아 있는지 보는 것이 먼저다.
|
|
206
|
+
|
|
207
|
+
**🟥 표본 한계 — 규칙이 이 표본보다 넓게 적용된다**
|
|
208
|
+
|
|
209
|
+
| 주장 | 표본 | 적용 범위 |
|
|
210
|
+
|---|---|---|
|
|
211
|
+
| 자기 스코프가 가장 나쁘다 | **세션 1개** (§1-b ⓓ) | 모든 FH/PMH 자산 변경 |
|
|
212
|
+
| 컨트롤 없는 측정이 절반 죽는다 | **n=4**, 한 세션 | 모든 축, 모든 install |
|
|
213
|
+
| 자평은 자력 적발률 0 | **분모 없는 관측** | 규칙 전체의 최약점 판정 |
|
|
214
|
+
|
|
215
|
+
이 비대칭은 cross-family 리뷰(2026-08-09, codex)가 지목한 것이고 **닫히지 않았다.** 규칙을 유지하는
|
|
216
|
+
근거는 표본 크기가 아니라 **비용 비대칭**이다 — 대조를 한 번 더 도는 비용은 작고, 안 돌아서
|
|
217
|
+
설계가 4라운드 뒤에 반증되는 비용은 크다. 표본이 커지면 이 절을 갱신하라.
|
|
218
|
+
|
|
219
|
+
**🟥 안 닫힌 것 셋** — 규칙 본문에도 그대로 적혀 있다.
|
|
220
|
+
- **자평이다.** 지금 기계 앵커가 붙는 축은 **ⓓ 뿐**이다(되돌려서 적색인지는 실행 결과다).
|
|
221
|
+
⚠️ 다만 이것은 **현 상태이지 원리적 한계가 아니다** — ⓐ(구현)는 테스트로, ⓒ(주장)는 출처
|
|
222
|
+
검사로 기계화할 수 있다(codex 지목). 「ⓓ만 가능」으로 읽지 마라.
|
|
223
|
+
- **게임 가능하다.** 축을 임의로 고르고 「안 고른 이유」만 적으면 형식은 충족된다. 최소 증거
|
|
224
|
+
요구가 그 폭을 좁히지만 없애지 못한다.
|
|
225
|
+
- **훅이 없다.** 트리거가 *의도*라 커밋 훅이 못 잡는다. 재발 실측이 기계화 임계 미만이라
|
|
226
|
+
**일부러 안 지었다**(`[[feedback_mechanize_at_repetition_prose_before]]`).
|
|
227
|
+
|
|
228
|
+
닫는 방향은 **cross-family 가 그 마커를 읽는 것**이다. 세션이 자기 채점을 더 성실히 하는 것은
|
|
229
|
+
같은 축이라 구조적으로 못 잡는다(`[[feedback_citing_a_rule_is_not_obeying_it]]`).
|
|
230
|
+
|
|
89
231
|
---
|
|
90
232
|
|
|
91
233
|
## §2 — 4대 엔진 (그 능력)
|
|
@@ -1597,3 +1597,115 @@
|
|
|
1597
1597
|
★ **블라인드 분리의 값어치가 다시 숫자로**: 내가 자력 적발한 결함 0건, 격리 넷이 합쳐
|
|
1598
1598
|
S 14건. 특히 *"막혔다"* 는 내 판정을 뒤집은 건 **같은 도구를 그냥 써 본** 리뷰어였다
|
|
1599
1599
|
([[feedback_impossible_verdict_may_be_unread_half]]).
|
|
1600
|
+
|
|
1601
|
+
- date: 2026-08-09
|
|
1602
|
+
session: if(kakao) 병렬 세션 — 덱 §2 재료 반영 + 테크니컬라이터 갭 확정
|
|
1603
|
+
agents: [general-purpose 증거추출(opus), general-purpose 외부생태계 스캔(opus), general-purpose 낭독렌즈(opus), fh-meta:beginner 콜드리드, fh-meta:hub-persona-auditor]
|
|
1604
|
+
purpose: >-
|
|
1605
|
+
축을 실패모드에 맞춰 골랐다 — ⓐ증거추출=내 카드 진술 vs 원문(내가 틀렸을 축) ·
|
|
1606
|
+
ⓑ외부 스캔=「없다」를 기억이 아니라 실물로(재발명 방지) · ⓒ낭독렌즈=문서 린터가
|
|
1607
|
+
구조적으로 못 보는 축 · ⓓ콜드리드=저자가 절대 못 느끼는 첫-접촉 · ⓔ페르소나 감사=
|
|
1608
|
+
조직 대표로 나갈 때의 노출. 다섯이 서로 대체 불가.
|
|
1609
|
+
dispatch_count: 5
|
|
1610
|
+
outcome: accepted
|
|
1611
|
+
evidence: >-
|
|
1612
|
+
**증거추출** — 카드 진술 4건 중 **3건 반증**. ①「로컬 초록인데 CI 적색」은 원문 반증
|
|
1613
|
+
(PR #290 본문: 로컬에서도 FAIL) ②「15런 연속 적색」 실측 적색14+복구1 ③「계기가 자기
|
|
1614
|
+
정규식을 잡음」 기전 오기(실제=타깃에 출처문서 혼입). 발표 자료로 갈 뻔한 것들이고
|
|
1615
|
+
**자력 적발 0**. 부수로 제조율 분모가 S건수가 아니라 전체 발견수임을 원문에서 확정.
|
|
1616
|
+
**외부 스캔** — Anthropic 스킬17·플러그인284 전수 0건, textlint/LanguageTool/proselint
|
|
1617
|
+
한국어 룰셋 0. 검색 요약의 "LanguageTool 한국어 지원"은 **공식 목록 직독으로 거짓 확인**.
|
|
1618
|
+
→ 「없다」가 실물로 확정돼 net-new 판정이 섰다.
|
|
1619
|
+
**콜드리드** — HARD 5건. 최대치는 S7 「검증자」를 사람으로 오독 → §2 앞 5분 소실,
|
|
1620
|
+
수리는 **두 글자**("다른 AI"). S8 은 ①②가 없어 논지가 정반대로 착지.
|
|
1621
|
+
**페르소나 감사** — SHIP_AFTER_필수. 필수 3건 중 M1(원장 🚫 값 생존)은 **내가 독립적으로
|
|
1622
|
+
이미 같은 방향으로 고친 뒤였다**(세 계기 수렴). M2 S6 근거 비대칭 = 저자 기준 실패 판정.
|
|
1623
|
+
note: >-
|
|
1624
|
+
★ **세 계기가 겹치지 않는 것을 잡았다** — 원장(전파 1) · 격리 원문대조(최초진입 4) ·
|
|
1625
|
+
전수스캔(미열람 파일 1). 하나로 대체하려 했으면 나머지 둘의 몫을 놓친다.
|
|
1626
|
+
★ **에이전트가 내 프레이밍을 반증한 게 최대 소득.** 「로컬 초록 vs CI 적색」은 내 카드가
|
|
1627
|
+
들고 있던 서사고, 그대로 태웠으면 발표에서 원문이 반증하는 말을 했다.
|
|
1628
|
+
★ **낭독렌즈 디스패치 자체가 net-new 자산의 첫 필드런**이다 — 산출물이 덱 결함 목록이자
|
|
1629
|
+
"이 축들이 실제로 결함을 잡는가"의 실측이 된다.
|
|
1630
|
+
⚠️ 계기 자기점검: 내가 쓴 자수 측정 스크립트가 **두 번 틀렸다**(1차 주석에서 끊김 →
|
|
1631
|
+
규율2·3 누락 / 2차 주석 이어짐줄을 발화로 셈 → 340자). 출력 본문을 눈으로 읽고서야 맞았다.
|
|
1632
|
+
에이전트 수치든 내 수치든 **손검증 전엔 발행 금지**가 같은 축으로 또 걸렸다.
|
|
1633
|
+
|
|
1634
|
+
- date: 2026-08-09
|
|
1635
|
+
session: qasp 병렬축 (홈, 저녁 후반) — 「끝까지」 연장
|
|
1636
|
+
agent: Explore ×2 (병렬, 읽기전용)
|
|
1637
|
+
purpose: >-
|
|
1638
|
+
①SPEC_MISMATCH 팔이 0회 발화한 경로 추적 ②RANK_TIE/NO_CANDIDATE 35건 기전.
|
|
1639
|
+
앞 라운드 3건과 합쳐 이 세션 총 Explore 5 + codex 1.
|
|
1640
|
+
outcome: accepted
|
|
1641
|
+
evidence: >-
|
|
1642
|
+
①이 언어축 게이트(`triage.py:157-172`)를 지목했고 내가 반사실+컨트롤로 재현했다 —
|
|
1643
|
+
관측 화면 언어만 바꾸면 12건 중 8건이 SPEC_MISMATCH 로 뒤집힌다(현 조건 12/12 문의).
|
|
1644
|
+
②가 **이 세션 최대 소득**을 냈다: `step*_before.xml` 161개 중 158개 동일 해시 =
|
|
1645
|
+
51개 TC 전량이 로그인 화면 위에서 판정됨. 내가 재현해 확정(TC 디렉토리 56/56 전건).
|
|
1646
|
+
그 결과 처방 순서가 통째로 재배치됐고, 도달 지표(`surface_reach`)를 신설해 커밋했다.
|
|
1647
|
+
note: >-
|
|
1648
|
+
★ **에이전트가 없었으면 못 찾았을 축이다.** 나는 산출물 JSON 만 보고 있었고, 158/161 은
|
|
1649
|
+
아티팩트 디렉토리를 해시로 훑어야 나온다 — 내 탐색 경로에 없었다.
|
|
1650
|
+
★ 반대로 ①의 「8건 차단」은 내가 재현하며 「12/12 전건에 게이트 문구, 그중 8이 act1=False」로
|
|
1651
|
+
더 정확해졌다. 사이드카는 축을 열고, 숫자는 내가 다시 잰다.
|
|
1652
|
+
★ 이 라운드에서 내가 낸 계기 결함 2건도 기록: 도달 지표 초판이 `distinct_screens>1` 로
|
|
1653
|
+
판정해 54/56 이 막힌 배치를 REACHED 로 찍었고(교정에서 즉시 발각), grep 을
|
|
1654
|
+
`categor[a-z]*` 로 써서 대문자 `Categories` 를 놓칠 뻔했다.
|
|
1655
|
+
|
|
1656
|
+
- date: 2026-08-09
|
|
1657
|
+
session: qasp 병렬축 (홈, 저녁) — AX-레디 판별력 실측
|
|
1658
|
+
agent: Explore ×3 (병렬, 읽기전용) + codex(gpt-5.5) cross-family 1
|
|
1659
|
+
purpose: >-
|
|
1660
|
+
①앱트랙 needs_human_setup 정본 분석 ②1막 사전조건 품질·신호어 매칭 ③NO_MATCH 34 원인
|
|
1661
|
+
— 셋 다 트리 무변경 조사. 이후 precondition 수리에 cross-family 적대검증 1회.
|
|
1662
|
+
outcome: accepted
|
|
1663
|
+
evidence: >-
|
|
1664
|
+
**Explore 3건** — 셋 다 파일:라인 인용으로 회수. 최대 소득은 ③축 이식 설계가 뒤집힌 것:
|
|
1665
|
+
앱 폴라리티(`!= self_drivable`)를 그대로 옮기면 웹 TC 51건에 `autonomy` 가 0건이라
|
|
1666
|
+
**전건 deferred → exit 6**, 그리고 생산자 코드가 아예 없어 `built_but_not_wired` 가 된다.
|
|
1667
|
+
1막 `자동화` 컬럼은 전부 하드코딩 "X" 인 디코이라는 것도 이쪽 소득.
|
|
1668
|
+
**codex(gpt-5.5)** — REFUTED 9건. 전건 기계 재현해 **4건 반증 · 3건 확정 · 2건 무해**.
|
|
1669
|
+
확정분으로 실제 수리: `_ROUTE_LIKE_RE` 되돌림(경로=상태요구 표기를 무음 통과시킴) ·
|
|
1670
|
+
URL 제외 문자류를 한글→CJK 전역. 잔여 2건은 테스트로 현 동작 못박음. 699 passed.
|
|
1671
|
+
note: >-
|
|
1672
|
+
★ **에이전트 수치를 그대로 인용할 뻔했다.** ②축이 「신호어 오탐 8건」으로 보고했고
|
|
1673
|
+
손으로 재니 **3건**이었다 — 나머지는 백틱 경로·한국어 신호어 공존이라는 다른 원인.
|
|
1674
|
+
수치는 인용 전에 직접 잰다([[feedback_sim_measures_followable_not_true]] 와 같은 축).
|
|
1675
|
+
★ **적대검증 finding 도 동의 대상이 아니다.** 반증된 4건 중 F6a 는 **내가 이미 갖고 있던
|
|
1676
|
+
통과 테스트가 반증하고 있었다** — 동의했으면 멀쩡한 코드를 고쳤다.
|
|
1677
|
+
★ 컨트롤이 실제로 일했다: `korean_state_requirement_survives` 가 없었으면
|
|
1678
|
+
"unexec 를 통째로 비우는" 과교정 구현도 통과했다.
|
|
1679
|
+
|
|
1680
|
+
- date: 2026-08-09
|
|
1681
|
+
session: FH 메인 (if(kakao) 축 후속 — PR 대조·출하·CI 수리)
|
|
1682
|
+
agents: [general-purpose (발화 착지 검증 실행), codex gpt-5.6-sol (cross-family diff 적대)]
|
|
1683
|
+
why: >-
|
|
1684
|
+
① 착지 검증은 선행 세션이 프로브 포맷으로 **3회 실패**한 작업이라 시행착오가 넓고,
|
|
1685
|
+
그 노이즈를 이 컨텍스트에 담으면 PR 출하 축을 밀어낸다 — 격리 위임이 맞다.
|
|
1686
|
+
② selfcheck 의 `fail=1` 은 **verdict 표면**이라 Field-Harness Load-Bearing Change Gate
|
|
1687
|
+
대상이고, 저자(=나)가 방금 그 블록을 짜서 「잘 짜였다」로 기운 상태였다 —
|
|
1688
|
+
출제자=응시자. 반증을 사는 게 목적.
|
|
1689
|
+
dispatch_count: 2
|
|
1690
|
+
outcome: accepted
|
|
1691
|
+
evidence: >-
|
|
1692
|
+
★ **② 가 초판을 뚫었다.** codex 가 SKIP 팔 악용을 지목 — subject(`branch_claim.sh`)를
|
|
1693
|
+
지우면 앵커 유무와 무관하게 CI 가 SKIP 으로 초록이 된다. 동의로 받지 않고 기계로 확인:
|
|
1694
|
+
`package.json files[]` 에 **존재하지 않는 경로**를 넣고 `package_coverage_check.sh` 를
|
|
1695
|
+
돌렸더니 **PASS** — files[]→실재 방향을 보는 검사가 어디에도 없어 지워진 subject 가
|
|
1696
|
+
모든 표면에서 초록이 된다. 지적이 소스-그라운딩으로 성립해 SKIP→FAIL 로 닫았다(bdba1b8).
|
|
1697
|
+
codex 는 fail-open 경로는 0건으로 판정.
|
|
1698
|
+
★ **① 이 미착지 1건을 잡았다.** 운영자 발화 15건 프로브 · 컨트롤 2/2 생존.
|
|
1699
|
+
U05b(⑥「한 호흡」 상수 = 22자/38자 답변)의 **내용이 어느 기록에도 없다**. 흔적은
|
|
1700
|
+
`fh_completed:1384` 의 낱말 하나 «⑥쉼표» 뿐이고, 반대 방향으로 `timing_dryrun_v1.md:139`
|
|
1701
|
+
가 여전히 *"상수는 아직 안 닫혔다"* 라고 적는다 — 기록이 **답변과 반대 상태**를 들고 있다.
|
|
1702
|
+
22 는 deck:51 에 「편함 경계 22」로 쓰이긴 했다 = 전형적 「대응은 했는데 기록 안 함」.
|
|
1703
|
+
note: >-
|
|
1704
|
+
★ **에이전트가 계기 입력 자체를 정정했다.** 카드가 지목한 seal 파일은 08-08 봉인이라
|
|
1705
|
+
08-09 발화가 없다 — 실제 트랜스크립트 jsonl 을 찾아 프로브를 구성해 «기록에서 발화를
|
|
1706
|
+
역추출하는 순환»을 끊었다. 발주자(나)가 준 소스가 틀렸고 수행자가 잡은 경우다.
|
|
1707
|
+
★ 명명된 잔여(에이전트 자기보고): 커밋 메시지 미스캔 · 체크아웃 브랜치 의존(다른
|
|
1708
|
+
브랜치에만 있는 착지는 미착지로 뜬다) · 이미지 발화 2건 텍스트 추출 불가 ·
|
|
1709
|
+
계기는 **문자열 착지만** 재고 기록의 정확성·실행 여부는 안 본다.
|
|
1710
|
+
★ 오라벨 1건 발견: `fh_completed:1384` 의 `⑨PR 선제흡수` 는 틀렸다 — ⑨ 답변은 `ⓑ`이고
|
|
1711
|
+
「PR 선제흡수」는 별개 지적(:1301)이다. 한 줄에 두 결정이 뭉개졌다.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Multi-Session Close Protocol — 같은 하네스에서 둘 이상이 돌 때의 마감
|
|
2
|
+
|
|
3
|
+
> **왜 여기 있나.** 이 프로토콜은 2026-08-09 까지 **세션 카드에만** 있었다. 카드는 gitignored 이고
|
|
4
|
+
> **세대마다 통째로 덮인다** — 그날 실제로 이월 8건이 그렇게 사라졌고, 하필 그중 하나가
|
|
5
|
+
> *"⑤-c 발화 착지 검증"*(카드가 내용 착지를 안 본다는 걸 고치려던 항목)이었다. 규율을 담은 곳이
|
|
6
|
+
> 규율이 막으려던 방식으로 유실됐다. **그래서 tracked 로 옮겼다.** 이건 승격이 아니라 이사다.
|
|
7
|
+
>
|
|
8
|
+
> **범위**: FH 자신의 다축 마감. `templates/` 로 전파하지 않는다 — 필드 하네스는 대개 단일
|
|
9
|
+
> 세션이라 아직 필요가 없고, 전파는 그쪽에서 병렬이 실제로 돌기 시작할 때다.
|
|
10
|
+
|
|
11
|
+
## 0. 전제 — 두 가지 형상을 구분한다
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
거버너 + 위임 한 세션이 카드를 쥐고 나머지는 그 세션이 띄운 에이전트
|
|
15
|
+
→ 카드 소유가 명확하고 last-writer 경쟁이 없다. **기본형**
|
|
16
|
+
대등 peer 독립 세션 둘 이상이 각자 마감한다
|
|
17
|
+
→ 아래 전부가 필요해진다. **다른 레포일 때만 권장**
|
|
18
|
+
```
|
|
19
|
+
2026-08-09 의 2축이 안전했던 이유는 모델이 좋아서가 아니라 **두 축이 다른 레포**였기 때문이다
|
|
20
|
+
(`forge-harness` / `qasp-dev`). 같은 워킹트리를 공유하는 대등 peer 는
|
|
21
|
+
`[[feedback_shared_checkout_ops_touch_others_work]]` 를 정면으로 부른다.
|
|
22
|
+
|
|
23
|
+
## 1. 순서 — 질문이 재대조보다 **앞이고 더 넓다**
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
① peer 가 자기 델타를 append (자기 소유 파일에만. 아래 §4)
|
|
27
|
+
② 핑
|
|
28
|
+
③ ★ 접기 전에 「지금부터 마감이다, 더 있나」를 **묻는다**
|
|
29
|
+
④ 접는다 (⑤ 원자 실행: 로그 → 카드)
|
|
30
|
+
⑤ `gh pr list --merged` 재대조
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**③이 ⑤로 대체되지 않는다.** 재대조는 *내가 아는 축*만 훑고, 질문은 *상대가 아는 축*을 가져온다.
|
|
34
|
+
2026-08-09 실측: 그 질문이 델타 8건을 꺼냈고 **PR 이 없어 `gh pr list` 로 구조적으로 안 잡히는
|
|
35
|
+
것들**이 다수였다(스펙/설계만 바뀐 것 · PR 이전 브랜치 커밋 · 외부 승인 대기 · 이월 누락).
|
|
36
|
+
|
|
37
|
+
## 2. 세 가지를 각각 못 믿는다
|
|
38
|
+
|
|
39
|
+
### 2-a. 보냈다 ≠ 닿았다
|
|
40
|
+
크로스세션 메시지는 **수신자 사용자 승인 대기로 보류**될 수 있고, 그래도 발신 호출은 성공을
|
|
41
|
+
반환한다. 같은 날 카드는 이미 「5곳 전부 통지」라고 적고 있었다.
|
|
42
|
+
|
|
43
|
+
⚠️ **만료 통지는 계기끼리 어긋났다 — 한쪽으로 단정하지 않는다.** 보류 2건 중 하나에 대해
|
|
44
|
+
「승인 없이 만료 — 전달되지 않음」 통지가 왔는데, **운영자 확인으로는 도달해 있었다.**
|
|
45
|
+
어느 쪽이 맞는지 이 세션은 못 가른다. 그러니 **«만료 = 영구 미도달» 로 적지 마라**(초안이 그렇게
|
|
46
|
+
적었다가 반증됐다). 확실한 것은 하나뿐이다 — **발신 성공은 도달의 증거가 아니고, 통지도 아니다.**
|
|
47
|
+
도달을 확인하는 유일한 방법은 **답이 오는 것**이다.
|
|
48
|
+
→ **보낸 수가 아니라 답 온 수를 적고, 미회신 수를 카드에 명시한다.** 기계화 불가(스크립트는 회신을
|
|
49
|
+
못 본다) — `session_close_check.sh` ①-c 가 이 문장을 살리언스로 띄운다.
|
|
50
|
+
|
|
51
|
+
### 2-a-2. 탐지는 넓게, **통지는 좁게** — 둘을 같은 목록으로 쓰지 마라
|
|
52
|
+
2026-08-09 의 오발신은 탐지가 넓어서가 아니라 **탐지 목록을 그대로 수신자 목록으로 썼기** 때문이다
|
|
53
|
+
(원래 알려야 할 상대는 1곳이었다). 두 목록은 목적이 다르다:
|
|
54
|
+
```
|
|
55
|
+
탐지 넓게 — 살아있는 것 전부. 여분이 «마감 미완» 이라는 신호다 (§2-b)
|
|
56
|
+
통지 좁게 — **지금 돌아가는(working/busy) 세션에만.** 끝난 세션에 보내는 건 소음이고,
|
|
57
|
+
수신자 승인을 태우며, 상대 기록에 남지도 않는다
|
|
58
|
+
```
|
|
59
|
+
**운영자 지시(2026-08-09)**: 「지금 돌아가는 동일 하네스 세션에만 보내라」.
|
|
60
|
+
|
|
61
|
+
### 2-b. 살아있다 ≠ 일하는 중이다 · 그리고 그 여분이 신호다
|
|
62
|
+
소켓이 살아있으면 **프로세스**가 살아있는 것이지 세션이 활성인 게 아니다. **판별 기준을 정확히
|
|
63
|
+
적는다**: 소켓 파일명의 PID 에 프로세스가 살아있고 그 cwd 가 이 하네스면 잡힌다 — 그게 전부다.
|
|
64
|
+
|
|
65
|
+
그래서 **세 가지가 섞여 들어오고, 통지가 필요한 건 첫째뿐이다**(2026-08-09 실측):
|
|
66
|
+
```
|
|
67
|
+
working 세션 → 접기 전에 물어라
|
|
68
|
+
놀고 있는 터미널 → 진짜 세션이지만 프롬프트에서 대기 중. 보통 건너뛴다
|
|
69
|
+
남은 프로세스 → 마감이 안 끝난 것 (1회 관측, 손으로 죽여야 했다)
|
|
70
|
+
예열 워커(bg-spare) → **세션이 아예 아니다.** args 로 기계 제외 — 안 걸러내면 순수 오탐
|
|
71
|
+
```
|
|
72
|
+
⚠️ **초판은 여분 전체를 «마감 미완» 이라고 적었다. 한 사례에서 과일반화한 것이고 틀렸다** —
|
|
73
|
+
실제 다수는 예열 워커와 놀고 있는 터미널이었다. **셋을 가르는 건 fleet 뷰뿐이고, 이 스캔은 못 한다.**
|
|
74
|
+
⚠️ **job 상태파일로 좁히지 마라 — 반대로 틀린다.** 같은 날 실측: 상태파일이 **돌고 있는 세션을
|
|
75
|
+
`done` + `firstTerminalAt` 로 표시**했다. 소켓이 넓은 만큼 상태파일은 좁다. **교차 판독.**
|
|
76
|
+
|
|
77
|
+
### 2-c. 닫혔다 ≠ 안 열렸다
|
|
78
|
+
「한 번도 안 닫힘」과 「닫고 또 일함」은 **밖에서 동일하게 Completed** 로 보이는데 처방이 반대다
|
|
79
|
+
(전자는 마저 닫기, 후자는 다시 접기). `session_close_check.sh` ①-d 가 마감 게이트 통과를 세서
|
|
80
|
+
2회 이상이면 알린다. **자기신고다** — 패턴을 감지하지 증명하지 않는다.
|
|
81
|
+
|
|
82
|
+
## 3. 세대 간 승계 — 동료-질문으로는 구조적으로 안 잡힌다
|
|
83
|
+
|
|
84
|
+
§1의 질문은 **동료 세션**을 향한다. **직전 세대 카드 자신의 이월분**은 그 질문의 사정거리 밖이다.
|
|
85
|
+
2026-08-09 실측: 그렇게 사라진 이월이 8건이었고 파일은 전부 살아 있었다 — 소실이 아니라
|
|
86
|
+
**카드에서만 안 잡히던 상태**.
|
|
87
|
+
|
|
88
|
+
→ **카드를 재작성할 때 이전 카드의 이월 블록을 grep 대조한다.** 새로 쓰는 게 아니라 **덜어낸 것을
|
|
89
|
+
확인하는** 절차다.
|
|
90
|
+
|
|
91
|
+
## 4. 쓰기 규율 — 공유 자원은 append 도 충돌한다
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
✅ 자기 소유 파일 · 자기 섹션에만 append → **즉시 커밋**
|
|
95
|
+
❌ `git add -A` (남의 미커밋 append 를 삼킨다)
|
|
96
|
+
❌ 남의 카드 직접 편집 — 내용을 넘기고 소유자가 싣는다
|
|
97
|
+
❌ `reset --hard` — Destructive-Op 게이트 대상
|
|
98
|
+
```
|
|
99
|
+
**메모리 인덱스도 같은 자원이다.** 2026-08-09: 한쪽이 항목을 archive 로 내리는 동안 다른 쪽이
|
|
100
|
+
hot 에 재색인해 **양 tier 동시 등재**가 됐다. 적용 직후 검사는 0이었고 **나중에 겹쳤다** — 즉
|
|
101
|
+
한 번의 검사로는 못 잡는다.
|
|
102
|
+
|
|
103
|
+
## 5. 마감 전 마지막 — 내용 착지를 따로 검증한다
|
|
104
|
+
|
|
105
|
+
close check 는 **형식**만 본다(카드가 로그보다 새로운가, 필수 아티팩트가 있는가). **내용이
|
|
106
|
+
착지했는지는 안 본다.** 2026-08-09 에 `CONSISTENT` 를 열세 번 내고도 발화 2건이 미기록이었고,
|
|
107
|
+
`scripts/utterance_landing_check.sh`(컨트롤 동반 grep)가 처음 잡았다.
|
|
108
|
+
|
|
109
|
+
**가장 잘 빠지는 것은 잊은 발화가 아니라 «행동으로 대응한 발화»다** — 답장에서 조사·판단까지
|
|
110
|
+
하고 나면 처리된 느낌이 남고, 그 판단이 어디에도 안 적힌 채 세션이 끝난다.
|
|
111
|
+
|
|
112
|
+
## 명명된 잔여
|
|
113
|
+
|
|
114
|
+
- ①-c 의 peer 판별은 **cwd 매칭**이라 **다른 worktree 의 peer 를 못 잡는다**(Orca 류 격리 사용 시).
|
|
115
|
+
- ①-d 스탬프와 §5 검사 결과는 **자기신고**다. 형식은 잡고 위조는 못 잡는다.
|
|
116
|
+
- §1 의 질문은 **사람/세션이 해야 한다** — 기계 트리거가 없다. ①-c 는 «물어라» 를 띄울 뿐이다.
|
|
117
|
+
- 이 문서 자체가 n=1(2026-08-09 2축 마감 1회) 위에 서 있다. **두 번째 사례가 나오면 다시 봐라** —
|
|
118
|
+
특히 §0 의 「거버너+위임이 기본형」은 그 한 번에서 나온 판단이다.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrono-meta/fh-gate",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.91",
|
|
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": [
|
|
@@ -102,6 +102,10 @@
|
|
|
102
102
|
"scripts/relay_channel.sh",
|
|
103
103
|
"scripts/test_relay_channel_lanes.sh",
|
|
104
104
|
"scripts/fh_session_load.sh",
|
|
105
|
+
"scripts/branch_claim.sh",
|
|
106
|
+
"scripts/test_branch_claim_lanes.sh",
|
|
107
|
+
"scripts/hook_source_lib.sh",
|
|
108
|
+
"scripts/test_hook_source_gate_lanes.sh",
|
|
105
109
|
"templates/.claude/rules/mcp_tool_gating.md",
|
|
106
110
|
".claude/rules/fh_4axis_gate.md",
|
|
107
111
|
"templates/degrade_direction_scan.sh",
|
|
@@ -168,6 +172,9 @@
|
|
|
168
172
|
"scripts/judgment_circuit_lint.sh",
|
|
169
173
|
"scripts/novelty_claim_check.sh",
|
|
170
174
|
"templates/settings.Compaction.snippet.json",
|
|
175
|
+
"scripts/field_canon_preload.sh",
|
|
176
|
+
"scripts/test_field_canon_lanes.sh",
|
|
177
|
+
"templates/settings.FieldCanon.snippet.json",
|
|
171
178
|
".claude/judgment_circuits.txt"
|
|
172
179
|
]
|
|
173
180
|
}
|