@chrono-meta/fh-gate 2.15.1 → 3.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/regression/probes_live.yaml +137 -0
- package/.claude/rules/.residency-patterns.defaults +7 -0
- package/.claude/rules/fh_4axis_gate.md +88 -1
- package/.claude-plugin/marketplace.json +8 -2
- package/AGENTS.md +27 -0
- package/CATALOG.md +17 -0
- package/CLAUDE.md +13 -3
- package/README.ja.md +51 -7
- package/README.ko.md +48 -7
- package/README.md +43 -6
- package/README.zh.md +45 -8
- package/docs/STANDARDS_ALIGNMENT.md +61 -0
- package/docs/USER_GUIDE.md +3 -0
- package/docs/USE_CASES.md +50 -0
- package/docs/model_tier_expectations.md +60 -0
- package/knowledge/shared/harness-core/fh_three_layer_canon.md +77 -10
- package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +18 -0
- package/knowledge/shared/harness-core/harness_incubator_doctrine.md +9 -0
- package/knowledge/shared/harness-core/iso_ai_standards_crosswalk.md +139 -0
- package/knowledge/shared/harness-core/measurement-integrity-checklist.md +35 -1
- package/knowledge/shared/harness-core/ship_readiness_gate.md +19 -2
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +489 -3
- package/package.json +48 -2
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-commons/skills/preprep/README.md +4 -1
- package/plugins/fh-commons/skills/preprep/SKILL.md +99 -3
- package/plugins/fh-commons/skills/preprep/diagram_from_json.py +154 -0
- package/plugins/fh-commons/skills/preprep/fixtures/fixture_R3_negative.pptx +0 -0
- package/plugins/fh-commons/skills/preprep/fixtures/fixture_R3_positive.pptx +0 -0
- package/plugins/fh-commons/skills/preprep/fixtures/mk_slide_fixtures.py +179 -0
- package/plugins/fh-commons/skills/preprep/interslide_deps.py +98 -9
- package/plugins/fh-commons/skills/preprep/lane_adjacent_dup.py +4 -1
- package/plugins/fh-commons/skills/preprep/lane_diagram.py +95 -0
- package/plugins/fh-commons/skills/preprep/lane_geometry.py +181 -0
- package/plugins/fh-commons/skills/preprep/lane_promise.py +4 -1
- package/plugins/fh-commons/skills/preprep/lane_slide_refs.py +134 -0
- package/plugins/fh-commons/skills/preprep/lane_slide_relations.py +300 -0
- package/plugins/fh-commons/skills/preprep/preprep.py +129 -8
- package/plugins/fh-commons/skills/preprep/preprep_wire.py +210 -0
- package/plugins/fh-commons/skills/preprep/presentation_checklist.md +4 -0
- package/plugins/fh-commons/skills/preprep/surfaces.example.yaml +18 -0
- package/plugins/fh-commons/skills/preprep/test_preprep_lanes_rp.py +184 -0
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/CHANGELOG.md +67 -0
- package/plugins/fh-meta/skills/auto-decorrelation/SKILL.md +87 -2
- package/plugins/fh-meta/skills/frontier-digest/SKILL.md +2 -2
- package/plugins/fh-meta/skills/frontier-digest/SKILL_detail.md +25 -5
- package/plugins/fh-meta/skills/hub-cc-pr-reviewer/SKILL.md +11 -0
- package/plugins/fh-meta/skills/hub-cc-pr-reviewer/SKILL_detail.md +3 -0
- package/plugins/fh-qp/.claude-plugin/plugin.json +22 -0
- package/plugins/fh-qp/README.md +71 -0
- package/plugins/fh-qp/fixtures/evidence_known_clean.txt +3 -0
- package/plugins/fh-qp/fixtures/evidence_known_dirty.txt +6 -0
- package/plugins/fh-qp/fixtures/reach_known_partial.tsv +4 -0
- package/plugins/fh-qp/fixtures/reach_known_reached.tsv +4 -0
- package/plugins/fh-qp/fixtures/reach_known_wall.tsv +3 -0
- package/plugins/fh-qp/fixtures/verdicts_known_bad_branch.tsv +2 -0
- package/plugins/fh-qp/fixtures/verdicts_known_bad_vacuous_machine.tsv +2 -0
- package/plugins/fh-qp/fixtures/verdicts_known_good.tsv +4 -0
- package/plugins/fh-qp/fixtures/verdicts_verify_only.tsv +3 -0
- package/plugins/fh-qp/qp_profile.example.yaml +29 -0
- package/plugins/fh-qp/scripts/qp_tools.sh +216 -0
- package/plugins/fh-qp/skills/qp/SKILL.md +65 -0
- package/plugins/fh-qp/skills/qp-plan/SKILL.md +42 -0
- package/plugins/fh-qp/skills/qp-regress/SKILL.md +45 -0
- package/plugins/fh-qp/skills/qp-run/SKILL.md +49 -0
- package/scripts/backtick_guard.sh +194 -0
- package/scripts/chamber_run.sh +14 -5
- package/scripts/com.forge-harness.live-eval.plist +84 -0
- package/scripts/compaction_probe.sh +9 -35
- package/scripts/context_continuity_score.sh +49 -7
- package/scripts/directional_diff_gate.sh +14 -2
- package/scripts/fh-gate.sh +3 -3
- package/scripts/files_manifest_shipping_check.sh +19 -0
- package/scripts/frontier_digest_autopilot.sh +4 -1
- package/scripts/gate_pathspec_check.sh +1 -1
- package/scripts/map_postprocess.py +90 -0
- package/scripts/outbound_query_guard.sh +131 -0
- package/scripts/outbound_query_hook.sh +373 -0
- package/scripts/package_coverage_check.sh +79 -18
- package/scripts/pipe_verdict_guard.sh +41 -1
- package/scripts/probe_live_eval.sh +240 -0
- package/scripts/probe_live_eval_lib.py +579 -0
- package/scripts/proposal_hook.sh +192 -0
- package/scripts/public_surface_scan_files.sh +11 -2
- package/scripts/push_zone_check.sh +78 -0
- package/scripts/residency_closure_scan.py +252 -0
- package/scripts/revert_probe.sh +250 -0
- package/scripts/selfcheck.sh +106 -3
- package/scripts/session_close_check.sh +100 -0
- package/scripts/sim_isolated_run.sh +195 -9
- package/scripts/test_action_yml_lanes.sh +97 -0
- package/scripts/test_backtick_guard_lanes.sh +115 -0
- package/scripts/test_degrade_scan_shell_probes.sh +7 -7
- package/scripts/test_fh_qp_lanes.sh +105 -0
- package/scripts/test_files_manifest_shipping_lanes.sh +5 -5
- package/scripts/test_gate_two_verdicts_lanes.sh +139 -0
- package/scripts/test_heavy_classifier_lanes.sh +1 -1
- package/scripts/test_lane_runner_lanes.sh +59 -33
- package/scripts/test_map_postprocess_lanes.sh +143 -0
- package/scripts/test_mapped_tracks_lanes.sh +1 -1
- package/scripts/test_marker_affected_lanes.sh +93 -0
- package/scripts/test_marker_crossfamily_lanes.sh +90 -6
- package/scripts/test_marker_oracle_lanes.sh +136 -0
- package/scripts/test_marker_soul_check_lanes.sh +24 -0
- package/scripts/test_node_check_lanes.sh +34 -34
- package/scripts/test_outbound_query_hook_lanes.sh +433 -0
- package/scripts/test_outbound_query_lanes.sh +87 -0
- package/scripts/test_package_coverage_lanes.sh +53 -27
- package/scripts/test_pipe_verdict_guard_lanes.sh +31 -5
- package/scripts/test_precommit_pointer_index_lanes.sh +33 -0
- package/scripts/test_preprep_diagram_lanes.sh +87 -0
- package/scripts/test_preprep_drift_anchor.sh +16 -7
- package/scripts/test_preprep_drift_anchor_lanes.sh +23 -0
- package/scripts/test_preprep_slide_refs_lanes.sh +169 -0
- package/scripts/test_probe_live_eval_lanes.sh +437 -0
- package/scripts/test_proposal_hook_lanes.sh +57 -0
- package/scripts/test_push_zone_lanes.sh +304 -0
- package/scripts/test_residency_closure_lanes.sh +70 -0
- package/scripts/test_revert_probe_lanes.sh +146 -0
- package/scripts/test_session_close_lanes.sh +3 -5
- package/scripts/test_sim_isolated_run_lanes.sh +136 -0
- package/scripts/test_utterance_intake_lanes.sh +414 -0
- package/scripts/test_worktree_reclaim_lanes.sh +70 -0
- package/scripts/transcript_utterances.py +222 -0
- package/scripts/utterance_intake.sh +424 -0
- package/scripts/utterance_landing_check.sh +2 -2
- package/scripts/validate_yaml.sh +27 -0
- package/scripts/worktree_reclaim.sh +95 -0
- package/templates/.git-hooks/pre-commit +380 -5
- package/templates/.git-hooks/pre-push +91 -0
- package/templates/RED_TEAM_REPORT.md +49 -0
- package/templates/settings.PreToolUse.snippet.json +101 -1
- package/plugins/fh-commons/README.md +0 -38
package/README.ko.md
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="https://github.com/walkinglabs/awesome-harness-engineering#coding-agent-harnesses"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Harness Engineering"></a>
|
|
7
7
|
<a href="https://github.com/VoltAgent/awesome-agent-skills#community-skills"><img src="https://img.shields.io/badge/listed_in-awesome--agent--skills-0ea5e9.svg" alt="Listed in awesome-agent-skills"></a>
|
|
8
|
-
<img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
|
|
8
|
+
<a href="https://github.com/anthropics/claude-code"><img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code compatible — official Claude Code repository"></a>
|
|
9
|
+
<a href="https://chrono-meta.github.io/forge-harness/"><img src="https://img.shields.io/badge/whole_map-interactive-6366f1.svg" alt="FH whole map — interactive diagrams on GitHub Pages"></a>
|
|
9
10
|
<a href="https://www.npmjs.com/package/@chrono-meta/fh-gate"><img src="https://img.shields.io/npm/v/@chrono-meta/fh-gate.svg?color=cb3837" alt="npm"></a>
|
|
10
11
|
<a href="https://github.com/chrono-meta/homebrew-forge-harness"><img src="https://img.shields.io/badge/homebrew-tap-FBB040.svg" alt="Homebrew tap"></a>
|
|
11
12
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22c55e.svg" alt="MIT License"></a>
|
|
@@ -41,18 +42,45 @@ npx --package @chrono-meta/fh-gate fh-gate # 설치할 것 없음
|
|
|
41
42
|
brew tap chrono-meta/forge-harness && brew install forge-harness # 또는 이쪽
|
|
42
43
|
```
|
|
43
44
|
|
|
45
|
+
**GitHub Actions 에서** — 같은 게이트를 스텝 하나로, 판정은 타입을 유지한 채:
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
- uses: chrono-meta/forge-harness@v3.1.0
|
|
49
|
+
with:
|
|
50
|
+
files: ${{ steps.changed.outputs.files }}
|
|
51
|
+
env:
|
|
52
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
이 스텝은 `verdict`(PASS · PENDING · BLOCKED · ESCALATE · HARNESS_ERROR · ARG_ERROR · DRY_RUN ·
|
|
56
|
+
UNKNOWN)와 `reviewed` 를 내놓습니다. **`reviewed: false` 는 통과가 아닙니다** — 백엔드가 끝내 답을
|
|
57
|
+
주지 않은 경우, dry run, 이 래퍼가 모르는 종료 코드가 전부 여기로 떨어지고, 기본값에서는 전부 스텝을
|
|
58
|
+
실패시킵니다. 그 기본값이 바로 요점입니다: 돌지 않은 검사가 초록으로 읽혀서는 절대 안 됩니다. 더
|
|
59
|
+
느슨한 정책을 원하면 `fail-on:` 으로 바꾸되, 무엇과 바꾸는 것인지는 알고 하세요.
|
|
60
|
+
|
|
61
|
+
|
|
44
62
|
**얻는 것**
|
|
45
63
|
|
|
46
64
|
- 변경이 머지되기 **전에** 판정이 나오고, 그 판정은 이 변경이 **무엇을 잃었는지**를 이름으로
|
|
47
65
|
말합니다. '뭔가 이상하다'가 아닙니다. 위 GIF가 실제 diff에 대한 그 판정입니다.
|
|
48
66
|
- 판정은 grep 할 텍스트가 아니라 **타입이 있는 값**입니다: `PASS · PENDING · BLOCKED · ESCALATE`.
|
|
49
67
|
- 셸이 도는 곳이면 어디서나 돕니다. CI, pre-commit 훅, 다른 코딩 에이전트. Claude Code는 선택입니다.
|
|
68
|
+
- **에이전트의 코드만이 아니라, 당신이 쓴 코드도 봅니다.** diff 를 가리키면 약한 자리를 이름으로
|
|
69
|
+
말합니다 — 조용히 PASS 쪽으로 열화되는 판정, 존재하지 않는 참조, 새어 나간 비밀, 근거 없는 주장 —
|
|
70
|
+
그래서 머지 *전에* 고치고 다시 돌립니다. 각 FH 엔진이 어디에 걸리는지(하네스 짓기 · 스킬/에이전트
|
|
71
|
+
작성 · 코드 리뷰 · 비가역 표면 게이트 · 맥락 연속성), 그리고 모델 티어와 노력 수준에 따라 무엇이
|
|
72
|
+
달라지는지: [`docs/USE_CASES.md`](docs/USE_CASES.md) ·
|
|
73
|
+
[`docs/model_tier_expectations.md`](docs/model_tier_expectations.md).
|
|
74
|
+
이 게이트들이 ISO/IEC 의 AI 시험 · AI 품질 표준(42119 · 29119-11 · 25059 · 42001)과 어떻게
|
|
75
|
+
맞물리는지를, 증거 포인터를 붙인 자기평가로:
|
|
76
|
+
[`docs/STANDARDS_ALIGNMENT.md`](docs/STANDARDS_ALIGNMENT.md).
|
|
50
77
|
|
|
51
78
|
### ② 하네스 전체: Claude Code 안에서
|
|
52
79
|
|
|
53
80
|
```bash
|
|
54
81
|
claude plugin marketplace add https://github.com/chrono-meta/forge-harness.git
|
|
55
82
|
claude plugin install -s user fh-meta@forge-harness
|
|
83
|
+
claude plugin install -s user fh-qp@forge-harness # 선택: QP(Quality Platform) — 세션의 Playwright / computer-use MCP 로 웹·데스크톱 앱을 계획→실행→회귀
|
|
56
84
|
git clone https://github.com/chrono-meta/forge-harness.git ~/projects/forge-harness
|
|
57
85
|
cd ~/projects/forge-harness && claude # 그다음 인사 한마디: 안녕 · hi · こんにちは · 你好
|
|
58
86
|
```
|
|
@@ -69,7 +97,7 @@ cd ~/projects/forge-harness && claude # 그다음 인사 한마디: 안
|
|
|
69
97
|
- 어떤 검사를 걸지 고르지 않아도 됩니다. 지금 무엇을 하려는지 — 공개, 삭제, 이력 재작성, PR —
|
|
70
98
|
를 읽고 그 자리에 맞는 게이트를 이름으로 불러 줍니다. ①이 기억해서 치는 명령 하나라면,
|
|
71
99
|
②는 대신 기억해 주는 층입니다.
|
|
72
|
-
- **스킬
|
|
100
|
+
- **스킬 41종 · 에이전트 8종**을 평범한 말로 부릅니다. 프로젝트를 진단하고, 가속하고, 새로 배선합니다.
|
|
73
101
|
- `tracks/` 가 각 세션이 알아낸 것을 남겨서 **두 번째 세션이 첫 세션이 멈춘 자리에서 시작**합니다.
|
|
74
102
|
복리가 붙는 곳이 여기이고, 첫날에는 판단할 수 없는 것도 여기입니다.
|
|
75
103
|
- 같은 것을 세 번 부탁하면 답하기를 그만둡니다. 대신 그 답을 하는 하네스를 만들어 줍니다.
|
|
@@ -175,10 +203,15 @@ FH 의 보상은 **복리**이고 **2번째 세션부터** 드러납니다. 첫
|
|
|
175
203
|
> 걸쳐 복리로 만드는 `tracks/` 기억도.
|
|
176
204
|
>
|
|
177
205
|
> 🟥 **버전 번호가 둘이고, 서로 다른 것을 잽니다.** **패키지 버전**(위쪽 npm 배지)은 설치되는
|
|
178
|
-
> 것이고, **정체성 성숙도 릴리스**(`identity-
|
|
206
|
+
> 것이고, **정체성 성숙도 릴리스**(`identity-v1.0.0`, Releases 페이지)는 하네스가 어디까지
|
|
179
207
|
> 왔는지입니다. 후자가 `0.x` 인 것은 설계입니다 — 다섯 정체성이 다 초록이 아닌데 초록이라고
|
|
180
208
|
> 부르기를 거부하기 때문입니다. 둘은 한 척도가 아니고, 패키지 번호가 높다고 성숙한 것이
|
|
181
209
|
> 아닙니다: [`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md).
|
|
210
|
+
> 🟢 **2026-09-04 — 두 카운터가 합쳐집니다.** `identity-v1.0.0`(정체성 전부 🟢)은 정체성 트랙의
|
|
211
|
+
> **마지막** 태그이자 *Latest* 배지를 다는 첫 태그입니다. 이후로 릴리스는 **둘을 한 번호로** 냅니다
|
|
212
|
+
> — 다음은 정체성 1.0 을 실어 나르는 패키지 메이저입니다 — 그리고 릴리스 노트는 영문으로 쓰고
|
|
213
|
+
> 한국어 요약을 붙입니다. 위 문단은 전부 초록이 아니던 동안 트랙을 왜 나눠 두었는지의 근거로
|
|
214
|
+
> 남깁니다. 지금의 규칙이 아니라 이력입니다.
|
|
182
215
|
|
|
183
216
|
---
|
|
184
217
|
|
|
@@ -241,10 +274,18 @@ forge-harness/ ← 허브 (영속 두뇌) Project A ──→ CLAUDE.
|
|
|
241
274
|
|
|
242
275
|
## 어떻게 만들어졌나 — 셋 · 넷 · 다섯 · 여섯
|
|
243
276
|
|
|
244
|
-
**3단 공정 · 4대 엔진 · 5대 정체성 · 6축 검증.** 위의 정체성은
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
277
|
+
**3단 공정 · 4대 엔진 · 5대 정체성 · 6축 검증.** 위의 정체성은 공정과 엔진이 맞물리는 자리에서
|
|
278
|
+
나타나는 것입니다 — 다섯은 단련되고 등급이 매겨진, 안정된 것들이고, 그 밖의 정체성은 어느 방향으로
|
|
279
|
+
몰고 얼마나 밀어붙이느냐에 따라 나타났다 사라집니다(운영자 정식화, 2026-09-05). **4대 엔진**
|
|
280
|
+
(`judgment-circuit` · `ship-gate` · `context-continuity` · `external-grounding`)은 FH 다운 산출이
|
|
281
|
+
전부 거기서 나오는 코어이고, **3단 공정** — ① 설계 *전에* 판단 회로를 심고 → ② 중간은 병렬 탈상관 →
|
|
282
|
+
③ 마무리로 6축을 태운다 — 은 엔진을 벼릴 때를 포함해 FH 의 모든 작업이 밟는 순서입니다. 속도는 맨
|
|
283
|
+
끝의 화살표지 네 번째 상자가 아닙니다. **전체 지도** — FH 가 무엇인지, 어떻게 구현돼 있는지(모든
|
|
284
|
+
노드가 실재하는 경로), 왜 믿을 만한지(게이트 · 레인 · 등급을 파일 경로와 함께), 무엇이 운영자
|
|
285
|
+
로컬이고 무엇이 일반적인지 — 는 한 페이지에 있습니다: [`docs/map/FH_MAP.md`](docs/map/FH_MAP.md).
|
|
286
|
+
그 옆에 인터랙티브 다이어그램 세 장이 있고, **[chrono-meta.github.io/forge-harness](https://chrono-meta.github.io/forge-harness/)** 에서 바로 볼 수 있습니다.
|
|
287
|
+
|
|
288
|
+
[](https://chrono-meta.github.io/forge-harness/map/fh_process.workflow.html)
|
|
248
289
|
⚠️ **6축은 네 번째 층이 아닙니다** — 3단 공정 *③단계가 무엇으로 이루어지는지*입니다. 전체 정본과,
|
|
249
290
|
왜 이것이 의도적으로 깔끔한 스택이 *아닌지*:
|
|
250
291
|
[`fh_three_layer_canon.md`](knowledge/shared/harness-core/fh_three_layer_canon.md) — 같은 셋을
|
package/README.md
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="https://github.com/walkinglabs/awesome-harness-engineering#coding-agent-harnesses"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Harness Engineering"></a>
|
|
7
7
|
<a href="https://github.com/VoltAgent/awesome-agent-skills#community-skills"><img src="https://img.shields.io/badge/listed_in-awesome--agent--skills-0ea5e9.svg" alt="Listed in awesome-agent-skills"></a>
|
|
8
|
-
<img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
|
|
8
|
+
<a href="https://github.com/anthropics/claude-code"><img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code compatible — official Claude Code repository"></a>
|
|
9
|
+
<a href="https://chrono-meta.github.io/forge-harness/"><img src="https://img.shields.io/badge/whole_map-interactive-6366f1.svg" alt="FH whole map — interactive diagrams on GitHub Pages"></a>
|
|
9
10
|
<a href="https://www.npmjs.com/package/@chrono-meta/fh-gate"><img src="https://img.shields.io/npm/v/@chrono-meta/fh-gate.svg?color=cb3837" alt="npm"></a>
|
|
10
11
|
<a href="https://github.com/chrono-meta/homebrew-forge-harness"><img src="https://img.shields.io/badge/homebrew-tap-FBB040.svg" alt="Homebrew tap"></a>
|
|
11
12
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22c55e.svg" alt="MIT License"></a>
|
|
@@ -43,18 +44,44 @@ npx --package @chrono-meta/fh-gate fh-gate # nothing to install
|
|
|
43
44
|
brew tap chrono-meta/forge-harness && brew install forge-harness # or this
|
|
44
45
|
```
|
|
45
46
|
|
|
47
|
+
**In GitHub Actions** — the same gate as a step, with the verdict kept typed:
|
|
48
|
+
|
|
49
|
+
```yaml
|
|
50
|
+
- uses: chrono-meta/forge-harness@v3.1.0
|
|
51
|
+
with:
|
|
52
|
+
files: ${{ steps.changed.outputs.files }}
|
|
53
|
+
env:
|
|
54
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The step exposes `verdict` (PASS · PENDING · BLOCKED · ESCALATE · HARNESS_ERROR · ARG_ERROR · DRY_RUN · UNKNOWN)
|
|
58
|
+
and `reviewed`. **`reviewed: false` is not a pass** — a backend that never answered, a dry run, or an exit
|
|
59
|
+
code this wrapper does not know all land there, and all of them fail the step by default. That default is
|
|
60
|
+
the point: a check that did not run must never read green. Change it with `fail-on:` if you want a softer
|
|
61
|
+
policy, and know what you are trading.
|
|
62
|
+
|
|
63
|
+
|
|
46
64
|
**What you get**
|
|
47
65
|
|
|
48
66
|
- A change is judged **before** it merges, and the verdict names what the change **lost** — not that
|
|
49
67
|
something is "off". The GIF above is that verdict on a real diff.
|
|
50
68
|
- The verdict is a **typed value**, not text you grep: `PASS · PENDING · BLOCKED · ESCALATE`.
|
|
51
69
|
- Runs anywhere a shell runs — CI, a pre-commit hook, a different coding agent. Claude Code optional.
|
|
70
|
+
- **It reviews your own code, not just an agent's.** Point it at a diff and it names the weakness — a verdict
|
|
71
|
+
that quietly degrades toward PASS, a reference that does not exist, a secret, a claim with no grounds —
|
|
72
|
+
so you fix it and re-run *before* merge. Where each FH engine applies (harness building · skill/agent
|
|
73
|
+
authoring · code review · irreversible-surface gates · context continuity), and what changes by model
|
|
74
|
+
tier and effort level: [`docs/USE_CASES.md`](docs/USE_CASES.md) ·
|
|
75
|
+
[`docs/model_tier_expectations.md`](docs/model_tier_expectations.md).
|
|
76
|
+
How the gates line up with ISO/IEC AI-testing and AI-quality standards (42119 · 29119-11 · 25059 · 42001), as a
|
|
77
|
+
self-assessment with evidence pointers: [`docs/STANDARDS_ALIGNMENT.md`](docs/STANDARDS_ALIGNMENT.md).
|
|
52
78
|
|
|
53
79
|
### ② The whole harness — inside Claude Code
|
|
54
80
|
|
|
55
81
|
```bash
|
|
56
82
|
claude plugin marketplace add https://github.com/chrono-meta/forge-harness.git
|
|
57
83
|
claude plugin install -s user fh-meta@forge-harness
|
|
84
|
+
claude plugin install -s user fh-qp@forge-harness # optional: QP (Quality Platform) — plan→run→regress a web/desktop app through the session's Playwright / computer-use MCP
|
|
58
85
|
git clone https://github.com/chrono-meta/forge-harness.git ~/projects/forge-harness
|
|
59
86
|
cd ~/projects/forge-harness && claude # then type a greeting: hi · 안녕 · こんにちは · 你好
|
|
60
87
|
```
|
|
@@ -176,10 +203,15 @@ cloned elsewhere? That path *is* your hub. Unfamiliar words →
|
|
|
176
203
|
> compounding `tracks/` memory that makes them compound across sessions.
|
|
177
204
|
>
|
|
178
205
|
> 🟥 **Two version numbers, and they measure different things.** The **package version** (npm badge,
|
|
179
|
-
> top of page) is what you install; the **identity-maturity release** (`identity-
|
|
206
|
+
> top of page) is what you install; the **identity-maturity release** (`identity-v1.0.0`, on the
|
|
180
207
|
> Releases page) is how far along the harness is — `0.x` by design, because it refuses to call all five
|
|
181
208
|
> identities green when they are not. They are not on one scale, and a high package number is not
|
|
182
209
|
> maturity: [`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md).
|
|
210
|
+
> 🟢 **2026-09-04 — the two counters merge.** `identity-v1.0.0` (every identity 🟢) is the **last**
|
|
211
|
+
> identity-track tag and the first to carry the *Latest* badge. From here on a release is **one number for
|
|
212
|
+
> both** — the next is the package major that carries identity 1.0 — and release notes are written in
|
|
213
|
+
> English with a Korean summary. The paragraph above stays as the reason the tracks were split while
|
|
214
|
+
> not everything was green; it is history, not the current rule.
|
|
183
215
|
|
|
184
216
|
---
|
|
185
217
|
|
|
@@ -242,10 +274,15 @@ itself.
|
|
|
242
274
|
## How it is built — three · four · five · six
|
|
243
275
|
|
|
244
276
|
**Three-stage process · four engines · five identities · six-axis verification.** The identities above
|
|
245
|
-
are the
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
277
|
+
are what appears where the process and the engines interlock — the five are the forged, graded, stable
|
|
278
|
+
ones; other identities surface and recede with how you steer and how far you push (operator's formulation,
|
|
279
|
+
2026-09-05); **four engines** (`judgment-circuit` · `ship-gate` · `context-continuity` ·
|
|
280
|
+
`external-grounding`) are the core every FH-specific output comes from; the **three-stage process** —
|
|
281
|
+
① plant the judgment circuit *before* design → ② parallel decorrelation in the middle → ③ burn it down on
|
|
282
|
+
six axes — is the order every piece of FH work runs in, forging an engine included, with speed as the arrow
|
|
283
|
+
at the end, not a fourth box. **The whole map** — what FH is, how it is implemented (every node a real path), why it is trustworthy (gates · lanes · grades with file paths), and what is operator-local vs generic — is one page: [`docs/map/FH_MAP.md`](docs/map/FH_MAP.md), with three interactive diagrams beside it — live at **[chrono-meta.github.io/forge-harness](https://chrono-meta.github.io/forge-harness/)**.
|
|
284
|
+
|
|
285
|
+
[](https://chrono-meta.github.io/forge-harness/map/fh_process.workflow.html) ⚠️ **The six
|
|
249
286
|
axes are not a fourth layer**; they are *what stage ③ consists of*. Full canon, and why this is
|
|
250
287
|
deliberately *not* a clean stack:
|
|
251
288
|
[`fh_three_layer_canon.md`](knowledge/shared/harness-core/fh_three_layer_canon.md) — the same three in
|
package/README.zh.md
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="https://github.com/walkinglabs/awesome-harness-engineering#coding-agent-harnesses"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Harness Engineering"></a>
|
|
7
7
|
<a href="https://github.com/VoltAgent/awesome-agent-skills#community-skills"><img src="https://img.shields.io/badge/listed_in-awesome--agent--skills-0ea5e9.svg" alt="Listed in awesome-agent-skills"></a>
|
|
8
|
-
<img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
|
|
8
|
+
<a href="https://github.com/anthropics/claude-code"><img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code compatible — official Claude Code repository"></a>
|
|
9
|
+
<a href="https://chrono-meta.github.io/forge-harness/"><img src="https://img.shields.io/badge/whole_map-interactive-6366f1.svg" alt="FH whole map — interactive diagrams on GitHub Pages"></a>
|
|
9
10
|
<a href="https://www.npmjs.com/package/@chrono-meta/fh-gate"><img src="https://img.shields.io/npm/v/@chrono-meta/fh-gate.svg?color=cb3837" alt="npm"></a>
|
|
10
11
|
<a href="https://github.com/chrono-meta/homebrew-forge-harness"><img src="https://img.shields.io/badge/homebrew-tap-FBB040.svg" alt="Homebrew tap"></a>
|
|
11
12
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22c55e.svg" alt="MIT License"></a>
|
|
@@ -53,18 +54,43 @@ npx --package @chrono-meta/fh-gate fh-gate # 无需安装
|
|
|
53
54
|
brew tap chrono-meta/forge-harness && brew install forge-harness # 或者用这个
|
|
54
55
|
```
|
|
55
56
|
|
|
57
|
+
**在 GitHub Actions 里** —— 同一道门禁作为一个 step,判定依然是带类型的:
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
- uses: chrono-meta/forge-harness@v3.1.0
|
|
61
|
+
with:
|
|
62
|
+
files: ${{ steps.changed.outputs.files }}
|
|
63
|
+
env:
|
|
64
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
这个 step 会输出 `verdict`(PASS · PENDING · BLOCKED · ESCALATE · HARNESS_ERROR · ARG_ERROR ·
|
|
68
|
+
DRY_RUN · UNKNOWN)和 `reviewed`。**`reviewed: false` 不是通过** —— 后端始终没有回答、一次 dry
|
|
69
|
+
run、这层封装不认识的退出码,全都落在这里,而且默认全部让这个 step 失败。这个默认值正是重点:
|
|
70
|
+
一道根本没跑过的检查,绝不能读起来是绿的。想要更宽松的策略就用 `fail-on:` 改,但要清楚你换掉的
|
|
71
|
+
是什么。
|
|
72
|
+
|
|
73
|
+
|
|
56
74
|
**你会拿到**
|
|
57
75
|
|
|
58
76
|
- 变更在合并**之前**就有判定,而且这个判定会指名这次变更**丢了什么**,不是"好像哪里不对"。
|
|
59
77
|
上面那个 GIF 就是对一个真实 diff 的这种判定。
|
|
60
78
|
- 判定是**带类型的值**,不是需要你 grep 的文本:`PASS · PENDING · BLOCKED · ESCALATE`。
|
|
61
79
|
- 只要有 shell 就能跑 —— CI、pre-commit 钩子、别的编码 agent。Claude Code 是可选的。
|
|
80
|
+
- **它审的不只是 agent 的代码,也包括你自己的。** 把一份 diff 指给它,它会点名那处薄弱 —— 悄悄
|
|
81
|
+
往 PASS 方向降级的判定、根本不存在的引用、泄漏的密钥、没有依据的主张 —— 好让你在合并*之前*改掉
|
|
82
|
+
再跑一遍。每个 FH 引擎各自落在哪里(造框架 · 写技能/agent · 代码评审 · 不可逆面的门禁 ·
|
|
83
|
+
上下文延续),以及模型层级与投入程度会改变什么:[`docs/USE_CASES.md`](docs/USE_CASES.md) ·
|
|
84
|
+
[`docs/model_tier_expectations.md`](docs/model_tier_expectations.md)。
|
|
85
|
+
这些门禁与 ISO/IEC 的 AI 测试及 AI 质量标准(42119 · 29119-11 · 25059 · 42001)如何对齐 ——
|
|
86
|
+
以带证据指针的自评形式:[`docs/STANDARDS_ALIGNMENT.md`](docs/STANDARDS_ALIGNMENT.md)。
|
|
62
87
|
|
|
63
88
|
### ② 整套框架 —— 在 Claude Code 里
|
|
64
89
|
|
|
65
90
|
```bash
|
|
66
91
|
claude plugin marketplace add https://github.com/chrono-meta/forge-harness.git
|
|
67
92
|
claude plugin install -s user fh-meta@forge-harness
|
|
93
|
+
claude plugin install -s user fh-qp@forge-harness # 可选:QP(Quality Platform)—— 通过本会话的 Playwright / computer-use MCP,对 Web/桌面应用做 计划→执行→回归
|
|
68
94
|
git clone https://github.com/chrono-meta/forge-harness.git ~/projects/forge-harness
|
|
69
95
|
cd ~/projects/forge-harness && claude # 然后打个招呼:你好 · hi · 안녕 · こんにちは
|
|
70
96
|
```
|
|
@@ -80,7 +106,7 @@ cd ~/projects/forge-harness && claude # 然后打个招呼:你好 · hi
|
|
|
80
106
|
|
|
81
107
|
- 你不必再自己挑该跑哪一道检查。它读出你正要做什么 —— 公开、删除、改写历史、开 PR ——
|
|
82
108
|
然后叫出那一刻该用的门禁。①是一条你要记住的命令,②是替你记住的那一层。
|
|
83
|
-
- **
|
|
109
|
+
- **41 种技能 · 8 个 agent**,用平常话就能叫:诊断一个项目、加速一个项目、给新项目接线。
|
|
84
110
|
- `tracks/` 留住每次会话学到的东西,于是**第二次会话从第一次停下的地方开始**。
|
|
85
111
|
复利长在这里,第一天也判断不了的同样在这里。
|
|
86
112
|
- 同一件事请求三次,它就不再回答了,而是给你造一个专门回答它的框架。
|
|
@@ -178,9 +204,13 @@ sentinel,以及一处分隔符取反的解析。同样的输入,同样的盲
|
|
|
178
204
|
> `tracks/` 记忆。
|
|
179
205
|
>
|
|
180
206
|
> 🟥 **有两个版本号,它们量的不是同一件事。** **包版本**(页首的 npm 徽章)是你装到的东西;
|
|
181
|
-
> **身份成熟度发布**(`identity-
|
|
207
|
+
> **身份成熟度发布**(`identity-v1.0.0`,在 Releases 页上)是这个框架走到了哪一步 —— 刻意停在
|
|
182
208
|
> `0.x`,因为它拒绝在五重身份还没全绿时就声称全绿。两者不在同一把尺子上,一个高的包版本号并不
|
|
183
209
|
> 等于成熟:[`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)。
|
|
210
|
+
> 🟢 **2026-09-04 —— 两个计数器合并了。** `identity-v1.0.0`(每一重身份都 🟢)是身份轨道上的
|
|
211
|
+
> **最后**一个标签,也是第一个带 *Latest* 徽章的标签。从此以后,一次发布就是**两者共用的一个
|
|
212
|
+
> 号码** —— 下一个是承载身份 1.0 的那个包主版本 —— 发布说明用英文写,并附一份韩文摘要。上面那段
|
|
213
|
+
> 保留下来,是作为"当年还没全绿时为何要把两条轨道分开"的理由;它是历史,不是当下的规则。
|
|
184
214
|
|
|
185
215
|
---
|
|
186
216
|
|
|
@@ -238,11 +268,18 @@ Gemini、本地)是为了共同演化,不是为了糊住弱点。**去相关
|
|
|
238
268
|
|
|
239
269
|
## 它是怎么被造出来的 —— 三 · 四 · 五 · 六
|
|
240
270
|
|
|
241
|
-
**三段工序 · 四大引擎 · 五重身份 · 六轴验证。**
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
271
|
+
**三段工序 · 四大引擎 · 五重身份 · 六轴验证。** 上面那五重身份,是工序与引擎彼此咬合的地方浮现
|
|
272
|
+
出来的东西 —— 这五重是已经锻打过、评过级、稳定下来的那些;其余的身份则随着你往哪个方向驾驭、
|
|
273
|
+
推到多远而浮现又退去(操作者的表述,2026-09-05)。**四大引擎**(`judgment-circuit` · `ship-gate` ·
|
|
274
|
+
`context-continuity` · `external-grounding`)是所有带 FH 特征的产出共同的那个内核;而 **三段工序**
|
|
275
|
+
—— ① 在设计 *之前* 先立判断回路 → ② 中段并行去相关 → ③ 在六条轴上烧一遍 —— 是 FH 每一件活计都要
|
|
276
|
+
走的顺序,锻造一台引擎本身也不例外,速度是末尾那支箭,不是第四个方框。**整张地图** —— FH 是什么、
|
|
277
|
+
它是怎么实现的(每个节点都是一条真实路径)、为什么可信(门禁 · 检查通道 · 等级,都带文件路径),
|
|
278
|
+
以及哪些是操作者本地的、哪些是通用的 —— 都在一页里:[`docs/map/FH_MAP.md`](docs/map/FH_MAP.md),
|
|
279
|
+
旁边还有三张可交互的图 —— 可在 **[chrono-meta.github.io/forge-harness](https://chrono-meta.github.io/forge-harness/)** 上直接看。
|
|
280
|
+
|
|
281
|
+
[](https://chrono-meta.github.io/forge-harness/map/fh_process.workflow.html)
|
|
282
|
+
⚠️ **六条轴不是第四层**,它们是 *③ 段究竟由什么构成*。完整正典,以及为什么这刻意 *不是* 一个干净的分层:
|
|
246
283
|
[`fh_three_layer_canon.md`](knowledge/shared/harness-core/fh_three_layer_canon.md) —— 同样这三段
|
|
247
284
|
用铁匠的用词(锻造 · 淬火 · 回火)讲一遍,在 [`ETHOS.md`](docs/ETHOS.md#the-forge) 里。
|
|
248
285
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Standards alignment — what in FH maps to which ISO/IEC clause (self-assessment, 2026-09-05)
|
|
2
|
+
|
|
3
|
+
> **What this is**: a traceable self-assessment — for each clause of the AI-testing / AI-quality standards and each ISO/IEC 42001
|
|
4
|
+
> Annex A control *considered* here (Annex A controls are reference controls chosen through applicability and risk treatment, the
|
|
5
|
+
> way a Statement of Applicability would — they are not automatic requirements), the FH mechanism that answers it and the file
|
|
6
|
+
> where the evidence lives. **What it is not**: a conformity assessment or a
|
|
7
|
+
> certification. Half of the ISO/IEC 42119 series is still a draft Technical Specification (DTS / AWI), so the word used here is
|
|
8
|
+
> *alignment*, never *compliance*. Full crosswalk with sources: `knowledge/shared/harness-core/iso_ai_standards_crosswalk.md`.
|
|
9
|
+
|
|
10
|
+
## Why the harness is the right unit
|
|
11
|
+
The standards' "AI system" is the model **plus what runs it** — prompts, gates, logs, intervention points, risk records. The clauses a
|
|
12
|
+
model vendor cannot answer for you (42001 A.6.2.4 verification & validation, A.6.2.8 event logs, 25059 intervenability, TS 8200
|
|
13
|
+
controllability, 42119-2 §6 risk identification) live exactly in the harness layer. FH is a meta-harness, so the same table applies
|
|
14
|
+
to FH itself and to the field harnesses it emits.
|
|
15
|
+
|
|
16
|
+
## Summary table
|
|
17
|
+
|
|
18
|
+
| Standard · clause | Requirement (gist) | FH mechanism | Evidence | Status |
|
|
19
|
+
|---|---|---|---|---|
|
|
20
|
+
| ISO/IEC TS 42119-2:2025 §5.4/§6 | risk-based testing, risk identification | 6-axis verification chosen **by failure mode**; marker `defeater:` / `affected:` | `.axes_23_passed_*.marker` | 🟡 spread over commit-level fields, no risk register |
|
|
21
|
+
| 42119-2 §5.5 (29119-2 **dynamic** test process) | design → implement → execute → report | lane suites → `selfcheck.sh` → CI `validate` · 4-axis pre-commit gate | `templates/.git-hooks/pre-commit`, `scripts/selfcheck.sh` | ✅ |
|
|
22
|
+
| 42119-2 §5.5 (29119-2 **organizational / management** processes) | policy · strategy · planning · monitoring & control · completion | policy = CLAUDE.md gate sections · plan = pre-registration seal · completion = marker — no written monitoring/control or completion-criteria process | `CLAUDE.md`, `PREREG_*.md` | 🟡 activities exist, process documents do not |
|
|
23
|
+
| 42119-2 §5.6 (29119-3 documentation) | plan · case/procedure spec · completion report · incident report | pre-registration seal · lane files · marker + PR body · `fh_signal_*` | `scripts/test_*_lanes.sh`, markers | 🟡 1:1 but not named by 29119-3 template names — this page is the name tag |
|
|
24
|
+
| 42119-2 §7.2 | test levels unit → integration → system → acceptance | lanes → selfcheck → isolated-clone sim; **first real use** is a field trial, not acceptance testing (no acceptance criteria or sign-off evidence) | `scripts/sim_isolated_run.sh` | 🟡 unit–system ✅ · acceptance ❌ |
|
|
25
|
+
| 42119-2 §7.3.4 / TR 29119-11 §8 | black-box model-testing techniques: A/B, back-to-back, adversarial, metamorphic (drift is a monitoring / model-update concern in TR 29119-11; "drift testing" as a technique name comes from the ISTQB CT-AI v2 syllabus) | ARM/CTRL one-variable sim (A/B) · cross-family review (back-to-back) · challenger / steel-quench (adversarial) · nightly live-eval (drift monitoring) · revert probes (mutation) | `probes_live.yaml`, `probe_live_eval.sh` | 🟡 metamorphic relations not written as such |
|
|
26
|
+
| TR 29119-11 test-oracle problem | expected results when none exist | known-pair controls in the same run · scorer fixed before results · "not found ≠ 0" · `UNCALIBRATED` | `measurement-integrity-checklist.md` | ✅ mechanism · ✅ oracle *type* recorded — marker field `oracle:` (closed enum: known-pair · metamorphic · back-to-back · a-b · human · none; `none` needs its reason; form-checked by the pre-commit hook, 2026-09-05) |
|
|
27
|
+
| TR 29119-11 non-determinism | statistical treatment | `reps>=3` bar · 3/3 or 0/3 or no separation · controls | `probe_scope_check.sh` | ✅ |
|
|
28
|
+
| DTS 42119-3.2 (stage 50.20) | V&V analysis: simulation, evaluation, formal methods | isolated-clone simulation · live-eval thresholds · **no formal methods** | — | 🟡 |
|
|
29
|
+
| AWI TS 42119-7 red teaming (public scope only — the topics it *covers*, not normative requirements) | terms · risks · applicability · objectives & attack vectors · method · reporting · life-cycle integration | cross-family adversarial panel (a reviewer that never saw the author's reasoning) · attack-angle registry · findings typed S/A/B · mandatory before commit on load-bearing changes | `auto-decorrelation` SKILL, `field_verdict_crossfamily_gate.md`, **`templates/RED_TEAM_REPORT.md`** | 🟡 → report template added 2026-09-05 |
|
|
30
|
+
| AWI TS 42119-8 (stage 20.00) | quality assessment of prompt-based text-to-text GenAI | live probes with expectation/control regex and polarity · nightly isolated run · tier × effort expectation doc | `.claude/regression/probes_live.yaml`, `docs/model_tier_expectations.md` | 🟡 |
|
|
31
|
+
| ISO/IEC 25059 robustness | keep working under adversarial / invalid input | e.g. padding-bypass fix on the outbound hook (10 KB: 47 s → 0.23 s) with truncation / string / key fail-closed | `scripts/test_outbound_query_hook_lanes.sh` H23–H30 | ✅ by case |
|
|
32
|
+
| 25059 user controllability · intervenability · TS 8200 | timely human intervention, control points | HITL gates · consent **leases** (quoted words · dated · scoped) · autonomy floor · explicit, logged override channels (`DESTRUCTIVE_OP_OK`, `PUBLIC_SURFACE_OK`, `PUSH_ZONE_OK`) | `CLAUDE.md §Agent Dispatch`, `templates/.git-hooks/pre-push` | ✅ strong — every control point is a **logged channel** |
|
|
33
|
+
| 25059 transparency | appropriate information to stakeholders | marker "axes run and control liveness" · PR body "residuals named" · wiki status board "what proved it" | `docs/OUTPUT_EVIDENCE.md` | ✅ |
|
|
34
|
+
| 25059 (DIS) service traceability | definition differs between public secondary sources (logging of models / datasets / requests / outcomes vs. traceability of service outcomes to user needs) — both readings kept until the text is read | logging reading: governance log · hook event files (counts and labels, never values) · sub-agent ledger · sim header (`corpus_head_date`, `sim_model`, `sim_model_cutoff`) · user-need reading: marker `soul:` ↔ `defeater:` ↔ lanes | `tracks/_meta/governance_log_*.yaml`, `knowledge/shared/learnings/subagent_invocations_log.yaml` | 🟡 strong on the logging reading (which is also the 42001 A.6.2.8 evidence) |
|
|
35
|
+
| ISO/IEC 42001 A.6.2.4 V&V | verify against defined criteria | 4-axis gate: required fields, closed enums, non-vacuous grounds | `pre-commit` `validate_*_leg()` | ✅ |
|
|
36
|
+
| 42001 A.6.2.6 operation & monitoring | monitoring with criteria, review, response, ownership | mechanisms: nightly live-eval · daily digest · daily report (launchd) · "verification env ≠ runtime env" discipline; thresholds decided after a calibration week | `scripts/com.forge-harness.*.plist` | 🟡 mechanisms exist, no written monitoring procedure |
|
|
37
|
+
| 42001 A.6.2.7 / A.8 | technical documentation · stakeholder information | `knowledge/`, `docs/USER_GUIDE.md`, `docs/USE_CASES.md`, this page | — | ✅ |
|
|
38
|
+
| 42001 A.9 (A.9.2 responsible-use processes · A.9.3 objectives · A.9.4 intended use) | responsible use | intended use is *communicated* (guides); use processes = consent leases, autonomy floor, irreversible-surface gates; no written responsible-use objectives | `CLAUDE.md §Agent Dispatch` | 🟡 |
|
|
39
|
+
| 42001 A.6.2.8 event logs | log events | see traceability row | — | ✅ |
|
|
40
|
+
| 42001 A.5 impact assessment | assess impacts | chamber §3-SCREEN screens KILL / NOT-APPLICABLE / CURATED / EMIT — does not ask "impact on whom" | `harness_incubator_doctrine.md` | 🟡 |
|
|
41
|
+
| 42001 A.7 data (A.7.2–A.7.6) | acquisition, quality, provenance, preparation | FH holds no training data but does hold **evaluation data** (probes, corpora, transcripts, logs): provenance = sim header `corpus_head_date` · quality = known-pair calibration · preparation = residency strip · **company residency is absolute** | `probes_live.yaml`, `scripts/residency_closure_scan.py` | 🟡 provenance/preparation present; no written acquisition or quality criteria for evaluation data |
|
|
42
|
+
| ISO/IEC 5338 life cycle | define · control · execute · improve | incubator (chamber) → EMIT → field → harvest-loop compounding | `harness_incubator_doctrine.md`, `hub_compounding_loop.md` | ✅ |
|
|
43
|
+
| ISO/IEC 23894 risk management | identify · analyse · evaluate · treat | ship-readiness grades · Surface-Class Degrade Invariant (irreversible = fail-closed) | `ship_readiness_gate.md`, `CLAUDE.md §Irreversibility Gates` | ✅ partial |
|
|
44
|
+
| ISO/IEC 20246 reviews | work-product reviews | cross-family review · `/apex-review` · `hub-cc-pr-reviewer` · cold read (`beginner`) | `plugins/fh-meta/agents/` | ✅ |
|
|
45
|
+
|
|
46
|
+
## What a field harness inherits
|
|
47
|
+
A harness FH emits gets the same rows for free where it adopts the templates (`templates/.git-hooks/*`, the marker schema, the
|
|
48
|
+
red-team report). For a QA harness the primary target is ISO/IEC/IEEE 29119 itself: test design & implementation (act 1), work-product
|
|
49
|
+
review (act 1.5, ISO/IEC 20246), execution & incident reporting (act 2), completion & regression (act 3). That mapping lives in
|
|
50
|
+
the crosswalk §3.
|
|
51
|
+
|
|
52
|
+
## Honest boundaries
|
|
53
|
+
- Read from public material: the 42119-2 sample (table of contents, foreword), scope statements of 42119-3.2/7/8, secondary summaries,
|
|
54
|
+
and the ISTQB CT-AI v2.0 syllabus as a public training syllabus that covers the same AI-testing topics (it is **not** a mirror of
|
|
55
|
+
TR 29119-11 — v2 extends into GenAI and red teaming). Clause *bodies* of the paid texts were not read; the DIS 25059 definition of
|
|
56
|
+
service traceability differs between the two secondary sources consulted and is kept as two readings.
|
|
57
|
+
- Not covered here (named so the map is not read as complete): ISO/IEC TS 25058, TS 6254 / 12792, 24029-2/3, TS 24970 (AI logging —
|
|
58
|
+
the first candidate for the next revision), NIST AI RMF, IEEE 7001, EU AI Act Art. 9/15.
|
|
59
|
+
- Self-assessment, so gameable in the same way every self-declared field is (`CLAUDE.md §자기 대조`). The cross-family review on
|
|
60
|
+
the commit that added this page is the only independent check applied so far.
|
|
61
|
+
- One author, one repository, one day.
|
package/docs/USER_GUIDE.md
CHANGED
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
## 0. 먼저 — 지금 내 상태가 무엇인가
|
|
10
10
|
|
|
11
|
+
> 🗺️ FH 가 **무엇이고 · 어떻게 구현돼 있고 · 왜 믿을 만한지**를 한 장으로 먼저 보려면 [`docs/map/FH_MAP.md`](map/FH_MAP.md)
|
|
12
|
+
> (인터랙티브 그림: https://chrono-meta.github.io/forge-harness/). 이 가이드는 그 다음 «첫 세션 완주」다.
|
|
13
|
+
|
|
11
14
|
FH 는 세 가지 상태로 쓸 수 있고, **되는 일이 다르다.** 아래를 그대로 실행해서 확인해라.
|
|
12
15
|
|
|
13
16
|
```bash
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# FH 는 어디에 쓰나 — 엔진별·대상별 사용처 지도
|
|
2
|
+
|
|
3
|
+
> **읽는 사람**: «하네스를 짓는 플랫폼」이라는 말은 들었는데 *내 레포·내 코드*에 무엇을 해 주는지 모르는 사람.
|
|
4
|
+
> **한 줄**: 하네스 제작·가속은 **최대 레버**일 뿐이다. 아래로 내려가면 스킬/에이전트 제작, **코드 리뷰로 약점을 찾아 고친 채로 반영**, 비가역 표면(푸시·삭제·공개)의 게이트, 세션 간 맥락 유지가 있고, 각각은 Claude Code 없이도 쓰이는 것이 있다.
|
|
5
|
+
|
|
6
|
+
## 0. 먼저 — 무엇이 «FH 가 하는 일」이고 무엇이 아닌가
|
|
7
|
+
| FH 가 한다 | FH 가 하지 않는다(그 일은 어디로) |
|
|
8
|
+
|---|---|
|
|
9
|
+
| **변경(diff)과 과정**을 본다 — 이 변경이 판정을 낙관 쪽으로 접지 않나, 참조가 실재하나, 비밀이 새지 않나, 주장이 근거에 묶였나 | **제품 동작**을 검증하지 않는다 — 앱이 기획대로 도는지는 QA 하네스(qasp 류)의 일. FH 는 그 하네스를 짓고 가속한다 |
|
|
10
|
+
| 비가역 표면 앞에 **기계로** 선다(커밋·푸시·삭제·공개) | 사람의 «취향」 리뷰를 대신하지 않는다 — 기계가 끝낸 뒤 사람에게 남는 것이 취향이다 |
|
|
11
|
+
| 강한 모델의 판단을 **기록의 속성**으로 남긴다(마커·매니페스트·원장) | 판단 자체를 코드로 굳히지 않는다(§Mechanization Boundary) |
|
|
12
|
+
|
|
13
|
+
## 1. 엔진별 사용처 — 위에서 아래로(레버 큰 순)
|
|
14
|
+
| 레버 | 무엇을 얻나 | 엔진 | 진입 |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| **하네스 제작·가속**(최대) | 남의 레포에 게이트·규칙·세션 규율을 심고, 챔버에서 새 하네스/스킬을 낳는다 | 넷 다 | 온보딩 문 ①②③, `auto_project_mapping.md §6`, 인큐베이터 |
|
|
17
|
+
| **스킬/에이전트 제작** | 트리거·Done When·check-class·독립실행성을 갖춘 스킬을 게이트 통과 형태로 | 품질게이트 · 영혼 | §New Skill Creation Pre-Commit Gate · `fh-meta:asset-placement-gate` |
|
|
18
|
+
| **코드 리뷰 → 약점 발견 → 고친 채로 반영** | diff 를 놓고 «낙관 방향 degrade · 팬텀 참조 · 비밀 · 주장-근거」를 찾고, 머지 전에 수리·재검까지 | 품질게이트 · 질문하기(cross-family) · 영혼(defeater) | `npx --package @chrono-meta/fh-gate fh-gate`(CI/훅, Claude Code 불요) · 세션 안 `/steel-quench` `/phantom-quench` · §Field-Harness Load-Bearing Change Gate |
|
|
19
|
+
| **비가역 표면 게이트** | 브랜치 삭제·force-push·직접 main 푸시·공개·npm publish 앞의 fail-closed | 품질게이트 | `templates/.git-hooks/pre-push` · Pre-Publish 체크리스트 · `PUBLIC_SURFACE_OK`/`DESTRUCTIVE_OP_OK` 로그된 오버라이드 |
|
|
20
|
+
| **세션 간 맥락 유지** | 압축·세션·기계 경계를 넘어 실 붙잡기 — 카드·봉인 원장·착지 검사 | 맥락유지 | §Session Wrap-up · compaction seal · `session_close_check.sh` |
|
|
21
|
+
| **측정 규율** | 숫자를 내기 전에 계기부터(known-pair·컨트롤·«not found ≠ 0») | (전 엔진의 재료) | §Instrument Calibration · `sim_isolated_run.sh` · `probe_live_eval.sh` |
|
|
22
|
+
|
|
23
|
+
## 2. «내 코드 리뷰에 FH 를 쓴다」 — 정확히 무엇이 일어나나
|
|
24
|
+
1. `fh-gate` 가 diff 를 읽고 **typed 판정**을 낸다: `0 PASS · 1 PENDING(B) · 2 BLOCKED(A) · 3 ESCALATE · 10 하네스 오류(fail-closed) · 12 dry-run`. 판정이 산문이 아니라 exit code 라 CI 가 읽는다.
|
|
25
|
+
2. 찾는 것: 검증 게이트가 실패를 통과로 접는 분기(degrade direction), 존재하지 않는 경로·버전·인용(phantom), 비밀·내부 식별자, 테스트가 실물이 아니라 더블을 재는 자리, 근거 없는 주장.
|
|
26
|
+
3. **실측 한 건(2026-05-31)**: 남이 쓴 AI 생성 코드 163줄(CI 초록)에 BLOCKED — CI 가 놓친 A급 2건. 같은 입력에 일반 리뷰는 5/8, 그중 2건은 «틀린 버그」. 🟥 한 건이다 — 일반화 근거가 아니라 형태의 예시다.
|
|
27
|
+
4. 고치고 다시 돌린다 — «수렴 = 라운드가 아니라 변경으로」(새 S/A 0 ∧ 그 라운드에 안 고침). 사람에게 가는 것은 그 뒤의 취향.
|
|
28
|
+
|
|
29
|
+
## 3. 서비스 개발 레포에 품질게이트를 얹으면 — 기대와 실측을 갈라서
|
|
30
|
+
| 얹는 것 | 효과(근거 등급) | 비용 |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| pre-push: 직접 main 금지·force/삭제 fail-closed·공개 전 비밀 스캔 | **기대(구조적)**: 사고가 조용히 나지 않는다. FH 자기 레포 실측 = 실차단 2회(2026-08-13) | 낮음 — 오버라이드는 로그된다 |
|
|
33
|
+
| PreToolUse advisory 훅(파이프 뒤 `$?`·백틱·파괴 명령·실행 중 스크립트) | **실측(FH)**: 같은 부류 재발 6~7회를 훅이 잡았다 | 거의 0 |
|
|
34
|
+
| diff 게이트(`fh-gate`) — 판정/게이트/비가역 코드에 | **실측(다른 하네스 3곳, n=7)**: default-toward-PASS 구멍 9건 | 리뷰 1회 ≈ 모델 호출 1~2 |
|
|
35
|
+
| 4축 마커 규율(soul·defeater·crossfamily) | 🟥 **FH 자산 전용** — 서비스 레포에 그대로 얹으면 커밋을 막는다(`auto_project_mapping §6` «Not installed (deliberately)»). 서비스용 경량 프로필은 **미출하** | — |
|
|
36
|
+
| 세션 카드·마감 체인 | **기대**: 다세션 팀에서 «누가 무엇을 열어뒀나」가 보인다. 실측은 FH 자기 운용뿐 | 세션당 마감 1회 |
|
|
37
|
+
**정직한 경계**: 위 «실측」은 전부 하네스 레포(FH·QA 하네스·메타하네스)에서 잰 것이다. 프로덕션 서비스 레포에서의 효과는 **미측정**이고, 첫 측정은 «게이트가 실제로 막은 것 1건」이면 된다(n≥1 규율).
|
|
38
|
+
|
|
39
|
+
## 4. QA 하네스와의 경계 — 무엇을 검증하나로 가른다
|
|
40
|
+
```
|
|
41
|
+
FH : 변경과 과정 — 이 diff 가 판정을 접나 · 참조가 실재하나 · 비밀이 새나 · 주장이 근거에 묶였나
|
|
42
|
+
→ 레포에 얹는 것(훅·게이트·리뷰)까지 FH 가 맡는다
|
|
43
|
+
QA 하네스: 제품 동작 — 기획대로 도나 · TC 설계 · 실행(웹/앱) · 회귀 · 버그 초안
|
|
44
|
+
→ 인앱에서 «맞물려 도는가」는 여기
|
|
45
|
+
경계의 이음매: FH 의 diff 리뷰 산출(«어디가 약한가」) → QA 하네스 1막 입력(«그 약한 곳을 도는 시나리오」)
|
|
46
|
+
typed capability 로 잇는다(`capability_composition_contract.md`) — 제약은 strictest-wins
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 5. 같이 읽을 것
|
|
50
|
+
`README.md §① Just the gate` · `CHEATSHEET.md` · `docs/USER_GUIDE.md` · `knowledge/shared/harness-core/field_verdict_crossfamily_gate.md` · `knowledge/shared/rules/auto_project_mapping.md §6`
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 모델 등급 × 이폴트별 FH 기대 역량 — 무엇을 얻고, 무엇은 등급과 무관한가
|
|
2
|
+
|
|
3
|
+
> **읽는 사람**: FH 를 어느 모델·어느 이폴트(effort)로 돌릴지 정하려는 사용자.
|
|
4
|
+
> **한 줄**: FH 의 **기계 층**(훅·레인·게이트·마커 요구)은 등급과 무관하게 같은 것을 막고 같은 것을 요구한다. 등급이 바꾸는 것은 **판단 층** — 정체성을 «조합·응용»하는 폭과 스스로 결함을 잡는 깊이다. 그래서 base op 는 Sonnet 에서 100% 돌아야 하고(`sonnet_floor_doctrine.md`), 강한 모델은 그 위에서 **레버**를 더 얻는다.
|
|
5
|
+
> **정직성 규칙**: 아래 표의 모든 칸은 근거 등급을 단다 — **실측**(파일 인용) · **관측**(N=1, 주관 포함) · **기대**(미측정). 기대 칸을 실측처럼 인용하지 마라.
|
|
6
|
+
|
|
7
|
+
## 1. 등급별로 얻는 것
|
|
8
|
+
|
|
9
|
+
| 얻는 것 | Sonnet | Opus | Fable |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| **base op — 정체성 하나를 단독으로 쓰기**(감사·게이트·디스패치 한 건·마감 체인) | **100% 목표이자 규율** — 티어로만 발화하는 base op 는 결함이다 [실측: 야간 live-eval 프로브가 Sonnet 으로 돈다 · `sonnet_floor_doctrine.md`] | 동일 | 동일 |
|
|
12
|
+
| **지시된 조합 수행** — 거버너가 짜 준 브리프(정본·설계·known-pair·회신 경로)대로 패치·레인·보고 | 잘 한다 [실측 2026-09-05: 워크트리 패치 3건 accepted, 레인 fail-before/after 원문 첨부] — 단 **자기 패치의 구멍은 못 본다**(같은 날 거버너가 2건 적발: 워치독 고아 · 레인의 라이브 기록 덮어쓰기) | 한다 + 설계 밖의 것도 잡는다 [실측 2026-09-05: qasp 수리에서 설계가 못 본 셋째 채널 발견·수리, 스냅샷 노출 실측] | 한다 |
|
|
13
|
+
| **조합 설계** — 여러 정체성(계기·게이트·입장 축·디스패치·마감)을 한 임무에 **엮는 것**, 리턴을 독립 컨트롤로 재검하는 것 | 기대: 낮음 — 질문형·보고형이 정직한 형태(«산출은 보고, 결정은 거버너») | 메인 세션 기본값 [운영자 정책 2026-09-05] — 표준 4축·디스패치·마감 체인 운영 | 거버너/오케스트레이터 온디맨드 [관측 N=1 세션 2026-09-05: 디스패치 8 병렬, 리턴마다 grep·ps·mtime·실 launchd 컨트롤, 운영자 정정 0] |
|
|
14
|
+
| **자율 판단의 형태** — 차단 질문 수, 대안 선택, «묻지 않고 하는 것»의 범위 | 기대: 질문 많음(옳은 방향 — 낮은 티어의 자기억제는 약하므로 기계 counterweight 가 있다, `destructive_pre_gate.sh` 헤더) | 실측(Opus 4.8, N=12): 역량 안쪽 단발 판단은 medium≈high | 관측 N=1(운영자): «질문 횟수가 많이 줄었다», 결정 질문을 체크포인트 1회에 묶음 |
|
|
15
|
+
| **비용·한도** | 낮음 | 중 | 높음 — 세션 한도 429 실측(2026-09-04 Fable 디스패치 2건 사망 → Sonnet 재시도) |
|
|
16
|
+
|
|
17
|
+
**등급과 무관한 것**(표에 없는 이유): 커밋 게이트·마커 필드·pre-push 차단·레인·«미실행 ≠ 0» 분류·residency 스캔. 이것들은 **모델이 아니라 파일**이 하는 일이고, 강한 모델도 여기서 면제되지 않는다(`CLAUDE.md §Mechanization Boundary`). 2026-09-05 에 무인 잡 둘이 «첫 실사용»에서 깨진 것을 잡은 것은 산문이 아니라 이 층이었다.
|
|
18
|
+
|
|
19
|
+
## 2. 이폴트(effort)는 다른 축이다 — 그리고 등급마다 추천이 다르다
|
|
20
|
+
|
|
21
|
+
이폴트 = **숙고 깊이**, 모델 = **천장**. 둘은 직교한다(`feedback_workflow_stage_effort_routing`). 같은 이폴트라도 모델이 다르면 산출 차이가 크다 — Sonnet-max 와 Fable-max 는 «같은 max» 가 아니다(운영자 2026-09-05). 그래서 추천 이폴트는 등급별 **기대값**에서 나온다:
|
|
22
|
+
|
|
23
|
+
| 등급 | 추천 기본 | 올리는 조건 | 근거 등급 |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| **Sonnet** | **high** | 항상 — 싸고, 한 번 더 자기검증하는 값이 base op 의 «미실행 ≠ 0» 분류에 직접 닿는다 | 기대 + 운영자 정책(effort high 기본, 2026-07-18) |
|
|
26
|
+
| **Opus** | **medium**(역량 안쪽 단발 판단이 실측된 작업) / **high**(그 밖의 기본) | 설계 확정·교리·경계 판단·장호흡 에이전트 작업은 **high → xhigh**(문서: 코딩·에이전트는 xhigh 시작). max 는 «frontier problems» 에만 · 깊이는 cross-family 디스패치로도 산다 | 실측 N=12(Opus 4.8): 역량 안쪽 단발 판단은 tie · 장호흡 미측정 · 운영자 정책 2026-09-05 «메인 기본 = 오퍼스-미디엄» |
|
|
27
|
+
| **Fable** | **max — 거버너/오케스트레이터 세션에만** (문서 기준 다음 후보 = **xhigh**, 미측정) | 여러 정체성을 병렬로 엮고 리턴을 재검하는 «메인» 세션. 그 외 세션은 Opus 가 기본이다 | 운영자 정책 2026-09-05 + 관측 N=1(«medium → max 3단 올리니 답이 체감상 다르다, 메인에서」) |
|
|
28
|
+
| **무인 런(launchd/CI)** | plist·워크플로에 **명시 핀** | `/model` 로 저장한 기본값이 `claude -p` 에도 적용된다 — 핀 없으면 무인 잡이 조용히 최상위 모델로 돈다 | 실측 2026-09-05(`~/.claude/settings.json` model 키 · digest plist `FD_MODEL`) |
|
|
29
|
+
|
|
30
|
+
## 2-b. 세계가 말하는 것 — 공식 문서와 대조 (2026-09-05 열람)
|
|
31
|
+
|
|
32
|
+
Anthropic 플랫폼 문서 «Effort»(platform.claude.com/docs/en/build-with-claude/effort)와 헬프센터 «Change the model, effort, and thinking settings»를 열어 이 문서의 추천과 맞췄다. 인용은 축자다.
|
|
33
|
+
|
|
34
|
+
| 문서가 말하는 것 | 이 문서의 추천과의 관계 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| 이폴트는 5단(low·medium·high·**xhigh**·max), 기본 = high. «Effort is a behavioral signal, not a strict token budget» — 낮은 이폴트에서도 어려운 문제엔 생각한다, 덜 할 뿐 | 이 문서의 «이폴트 = 숙고 깊이» 와 일치. 🟥 **xhigh 라는 중간 단이 있다** — 이 문서 초판은 max 만 봤다 |
|
|
37
|
+
| 이폴트는 **모든 출력 토큰**에 걸린다 — 낮으면 «fewer and terser tool calls», 전문 없이 바로 행동; 높으면 도구 호출이 늘고 계획을 먼저 설명한다 | 오늘 관측(«리턴을 끝까지 읽고 컨트롤을 하나씩 붙인다»)과 같은 방향 — 문서는 그것을 도구 호출 수·설명 길이로 기술한다 |
|
|
38
|
+
| **Fable 5.1**: «Start with high, the default. Step up to xhigh or max for the most capability-sensitive agentic and coding work, and step down to medium or low for routine … once your evals show quality holds» | «거버너 세션만 max» 와 일치. 단 문서는 그 위 단으로 **xhigh 를 먼저** 든다 — 미측정 대안 |
|
|
39
|
+
| **Opus 5**: high 에서 시작, xhigh 는 «demanding coding and agentic work», max 는 «when a task justifies unconstrained token spending», low/medium 은 «liberally as your primary control for token cost … wherever your evals show quality holds» | «Opus = medium 기본」은 운영자 실측(N=12, 역량 안쪽 단발 판단 tie)이 뒷받침하는 «evals show quality holds» 케이스다. 장호흡 오케스트레이션은 그 실측 밖 → 문서대로 high/xhigh |
|
|
40
|
+
| **Opus 4.7/4.8**: 코딩·에이전트 작업은 **xhigh 에서 시작**; max 는 «Reserve for frontier problems. On most workloads max adds significant cost for relatively small quality gains … can lead to overthinking» | max 를 «거버너 세션만」으로 제한하는 근거가 문서에도 있다 — 대부분 작업에서 비용 대비 이득이 작다 |
|
|
41
|
+
| **Sonnet 5**: 기본 high, medium 은 «Comparable to Claude Sonnet 4.6 at high effort», xhigh 는 가장 어려운 코딩·에이전트, max 도 가능 | «Sonnet = high 기본」 일치 |
|
|
42
|
+
| 헬프센터: 앱/CC 의 Extra high 는 «for long-running coding and agentic tasks, offering deeper reasoning than high without the full token cost of max» · «for complex coding and agentic tasks on Opus 4.7 or newer, try Extra high first» | 다음 측정 팔 = **Fable xhigh**. max 체감의 얼마가 xhigh 로 확보되는지가 비용 결정의 핵심이고 미측정이다 |
|
|
43
|
+
|
|
44
|
+
**대조 결론**: 문서와 체감이 **방향에서 일치**한다(기본 high · 조합·에이전트 작업일수록 위로 · 대부분 작업에서 max 는 비용 대비 작다). 어긋나는 점 하나 = 이 문서 초판이 **xhigh 를 빠뜨렸다**. 추천 표를 그에 맞춰 고쳤다(아래). 「같은 이폴트라도 모델에 따라 산출이 크게 다르다」는 운영자 관측은 문서의 «medium(Sonnet 5) ≈ high(Sonnet 4.6)» 같은 교차 등급 등가 서술과 같은 축이다 — 이폴트 눈금은 모델마다 다른 절대값을 가리킨다.
|
|
45
|
+
|
|
46
|
+
## 3. 기본을 max 로 두면 무엇이 달라지나 (그리고 무엇은 안 달라지나)
|
|
47
|
+
|
|
48
|
+
- **달라지는 것 [관측 N=1 · 기대]**: 병렬 디스패치 폭 · 리턴 재검 깊이(에이전트 패치의 구멍을 거버너가 잡는 비율) · 차단 질문 감소 · 토큰·시간 비용 · 세션 한도 도달 확률.
|
|
49
|
+
- **안 달라지는 것 [규율]**: 훅·레인·게이트·마커 요구 · Sonnet-floor(base op 는 여전히 Sonnet 에서 돌아야 한다 — max 가 그것을 대신 지면 «근육≠뼈대」 결함) · 비가역 표면의 HITL.
|
|
50
|
+
- **최대 레버**: 이폴트의 최대는 max 다(문서의 5단 중 꼭대기; 멀티에이전트 워크플로 «ultracode」는 이폴트가 아니라 별도 오케스트레이션이고 명시 옵트인이다). max 바로 아래 **xhigh** 가 «long-horizon agentic» 용으로 따로 있다.
|
|
51
|
+
|
|
52
|
+
## 4. 정직한 한계 — 인용하기 전에 읽어라
|
|
53
|
+
|
|
54
|
+
- 표의 Fable 칸은 **한 세션(2026-09-05)** 의 관측과 운영자 체감이다. 같은 작업 분포에서 medium 팔과 대조한 적이 없다.
|
|
55
|
+
- Opus 의 «medium≈high» 는 **Opus 4.8 세대, 역량 안쪽 단발 판단** 에 한정된 실측이다(N=12). Opus 5·장호흡 조합은 미측정.
|
|
56
|
+
- Sonnet 칸의 «조합 설계 낮음» 은 기대다 — 반증되면 이 표를 고친다.
|
|
57
|
+
- **측정 계획(사전등록 후 실행, reps≥3)**: 같은 임무를 «의도 한 줄 프롬프트」로 Sonnet/Opus/Fable × medium/**xhigh**/max 에 주고 — 엮은 정체성 수 · 차단 질문 수 · 게이트 통과율 · 리턴에서 스스로 잡은 결함 수 — 를 센다. 실행부는 `scripts/sim_isolated_run.sh`(라이브 레포 금지).
|
|
58
|
+
|
|
59
|
+
## 5. 같이 읽을 것
|
|
60
|
+
외부: Anthropic «Effort» 문서 · Claude 헬프센터 «Change the model, effort, and thinking settings» (2026-09-05 열람 — 모델별 권고는 갱신되므로 인용 전 재열람) · 내부: `knowledge/shared/harness-core/sonnet_floor_doctrine.md` · `knowledge/shared/harness-core/multi_model_sidecar_strategy.md §Tier-floor resolution` · `CLAUDE.md §Mechanization Boundary` · `CLAUDE.md §Skeleton, Not Muscle` · (운영자 로컬) `tracks/_meta/user_adaptation_profile.md §Effort A/B`
|