@chrono-meta/fh-gate 2.5.0 → 2.5.1
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/AGENTS.md +11 -0
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +30 -0
- package/package.json +1 -1
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/CHANGELOG.md +12 -0
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "fh-meta",
|
|
14
|
-
"version": "2.5.
|
|
14
|
+
"version": "2.5.1",
|
|
15
15
|
"description": "New in 2.2.0: BREAKING (gate): chamber step 6 now reads ACTUAL.md, not BUDGET.md — an in-flight chamber run whose actual cost sits in BUDGET.md blocks until the ACTUAL: line moves to tracks/_chamber/<slug>/ACTUAL.md (the runner prints the path). Why: BUDGET.md's pre-verdict hash IS the ordering witness, and step 6 hard-blocked until that same file changed, so every run that reached COMPLETE necessarily mutated a witnessed artifact and verify returned TAMPERED — the chamber's promotion condition was unsatisfiable by construction, not by strictness. Two roles (immutable witness / post-verdict calibration sink) had collided in one file; each was correct alone, so neither side's code showed the conflict. Also: ko-tech-writer Step 2/4-b scans are now calibration-backed (known-pair fixtures + reproducible command, shipped) — discrimination is proven, 'zero residue' is explicitly NOT; chamber lane suite 12 -> 33 including the runner x witness seam no test covered; chamber_run.sh now teaches the two-commit discipline (gate hashes and verdict hash must land in separate commits/PRs — it previously advised the opposite). New in 2.1.0: BREAKING (gate): `crossfamily: declined` in an Axes 2-3 marker now requires grounds naming a record path that RESOLVES on disk — bare `declined`, and `declined` justified by author judgment, are blocked at commit. Remedy: cite where the operator decision lives (e.g. `.. — operator declined sidecars, per knowledge/shared/rules/operational_adaptation.md`), or use `DEGRADED_PANEL_UNUSED` if a panel was reachable and you chose not to recruit it — which is what author judgment actually is. `declined` was the only enum value with no grounds requirement; a cross-family review then broke the first (vocabulary-grep) fix three ways — self-validating on the value's own token, vacuous keyword passes, and over-blocking real declinations in natural prose — so the check asserts a resolvable record instead of words. Also: standpoint axis gains `tier1b` (a STATIC read of a target repo, executed nothing) plus a decide-in-order procedure, after blind floor-tier sims graded pure cold-reads as `tier2` three rounds running; steel-quench Wave 1's sixth angle (gate-locality) gains the output-template row it never had, so a mandatory angle stops being structurally unreportable; verify-bidirectional gains category 5 (prescriptive doctrine statement); Sister Asset Protocol gains an active-adoption trigger; new resident doctrine — Mechanization Boundary, Local Execution First, Skeleton-not-Muscle, Expedition track, and this package's versioning policy. Hub meta-operations toolkit — 35 skills + 7 agents. New in 2.0.1: harness-doctor cadence hook, portability lint wired into pre-commit, branch_claim.sh claim-count-vs-tree-count warning, louder confidentiality-scan fail-open notice, fh-gate.sh missing-package.json survival, identity ① reclassified 🟢 (cross-harness adapters + relay argument channel). New in 1.4.53: `fh-codex-doctor` (npm bin) — Codex adapter drift scanner; reads the documented M1/M2/M3 skill tier map + skill/agent source and reports codex-native/adapter-required/claude-native/unclassified per unit, wired into `npm test`/`prepublishOnly` (fail-closed on unclassified Claude-native primitives). New in 1.4.49: steel-quench gains Step 0.6 Verdict-Invariance Probe (groundedness axis — a load-bearing judged gate's verdict must track behavior, not rubric phrasing; measured flip-count over cross-family paraphrases; arXiv:2605.06161 Policy Invariance anchor); multi_model_sidecar_strategy §Vendor-native harness (a model is strongest in its own vendor CLI — Claude/CC, GPT/codex, Gemini/Antigravity; a universal router degrades all of them, so it stays an autocomplete/QA sidecar, never orchestration); predelete_check.sh fail-closed rewrite; memory-hygiene A-TMA anchor. New in 1.4.48: phantom-quench + steel-quench gain external frontier anchors (arXiv:2607.02052 package-hallucination; arXiv:2607.02057 prompt-coverage-adequacy); README model-flat claim reframed from a per-release point-curve to structural invariants (operation flattens across tiers; depth tier-order fixed within a generation). New in 1.4.47: onboarding step ① surfaces the Mode D companion-store session-start load in the auto-read salience anchor (previously only in the local binding + rules, so a greeting could skip the load). New in 1.4.46: context-doctor command-output axis (route to rtk/proxy for verbose CLI stdout, complementing .claudeignore; risk-gated to token-scarce envs). New in 1.4.41: context-doctor 2026 trigger vocab (context engineering/rot/collapse) + phantom-citation hardening; hub measurement-integrity-checklist (cross-model measurement pre-flight: display-name pin/reps≥3/discriminating probe). New in 1.4.40: install-wizard queryable-wiki scaffold (INDEX + session-start read + R/W/C ingest). New in 1.4.39: auto-decorrelation (cross-family verifier sidecar recruitment) + video-ingest (capability-routed video ingestion). New in 1.4.x: verify-axis check-class taxonomy (mandatory-pass/measured/judged), no-reinvention Tier-0 inventory, 7-class failure taxonomy, Destructive-Op Gate, Wave-T (Temper), tier-floor governance, Mode D Model Notice, FC consent lane, default-Sonnet guidance. New in 1.3.0: public-surface-audit, field-harvest Mode B auto-trigger, 4-axis gate scope ext. Validated cross-CLI: Claude Code, Codex, Gemini.",
|
|
16
16
|
"source": "./plugins/fh-meta"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"name": "fh-commons",
|
|
20
|
-
"version": "2.5.
|
|
20
|
+
"version": "2.5.1",
|
|
21
21
|
"description": "Project-agnostic utility skills — 5 skills (convergence-loop · deliberation · mcp-circuit-breaker · token-budget-gate · ko-tech-writer) + 1 agent (quench-challenger). Domain-independent utilities transplantable into any project.",
|
|
22
22
|
"source": "./plugins/fh-commons"
|
|
23
23
|
}
|
package/AGENTS.md
CHANGED
|
@@ -152,6 +152,17 @@ Because non-Claude runtimes do not auto-load Claude path rules, apply these rule
|
|
|
152
152
|
misjudged the force-push surface three times; the symmetric single-endpoint case is untested,
|
|
153
153
|
but the same failure shape applies.
|
|
154
154
|
|
|
155
|
+
9. **Shared checkout:** when more than one session works in one clone, the working tree and `HEAD`
|
|
156
|
+
are shared, so a branch switch moves the other session's ground. Before `git switch`, read the
|
|
157
|
+
live head with `git branch --show-current`; immediately after cutting a branch, run
|
|
158
|
+
`git log main..HEAD --oneline` — a non-empty result means the branch was cut on top of someone
|
|
159
|
+
else's commits, and a later squash of the parent closes the child PR. The claim files under
|
|
160
|
+
`.git/fh-claims/` are a snapshot written at claim time, not a lock: they do not update when
|
|
161
|
+
somebody moves a branch, so they answer a different question than the two commands above.
|
|
162
|
+
Record a switch with `scripts/branch_claim.sh claim`; the pre-commit hook blocks a commit whose
|
|
163
|
+
claim does not match the live head. In a shared checkout `git add -A` and `git stash` both reach
|
|
164
|
+
the whole tree, including another session's uncommitted work — stage by explicit path instead.
|
|
165
|
+
|
|
155
166
|
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Mandatory-checklist-procedures`
|
|
156
167
|
> — exact supporting procedures and canonical doctrine links — read when any checklist trigger fires.
|
|
157
168
|
|
|
@@ -2302,3 +2302,33 @@
|
|
|
2302
2302
|
finding: "OpenWiki(2026-08-17 발표, MIT) — 우리가 같은 날 지은 위성과 **정면으로 겹치는 선행자산**. 자막 원본 영어 트랙으로 음성 100% 흡수, 🟥 슬라이드 0%(그래서 토큰 감소 수치는 **미확보** — 발표자 본인이 'I don't have it here'). 채택 1건: **PR 로 낸다, 직접 쓰지 않는다**(우리 «AI 는 PR 을 제안한다» 규칙을 위성에 적용하는 걸 남이 먼저 검증해 준 형태). 기각 3건을 사유와 함께: 델타게이트=정의역 불일치(저쪽 델타는 레포 안, 위성은 바깥을 긁는다) · log.md 사람용 분리=닫는 결함 미확정 · quickstart/OKF=이미 있음. 🟥 반증 1건: 저쪽이 «에이전트만 읽을 거라 생각했다»가 현장에서 즉시 깨졌다 — 위성 노드를 에이전트용으로만 최적화하지 말라는 실측 반례."
|
|
2303
2303
|
note: "🟥 이 arm 은 «막히면 안 지어낸다» 지시를 지켰고 인용마다 «영상 발화 ✅ / 슬라이드 추정 ❌» 를 갈랐다 — 그 덕에 eval 수치(20개 중 7~8 → 9~10)에 발표자 본인의 'about' 단서가 보존됐고, 벤치마크명은 자동캡션 전사가 불안정해 «DeepSWE 추정, 미확인» 으로 남았다. 인용 전 확인이 필요한 항목이 그대로 표시된 채 왔다는 것이 이 위임의 실제 값이다."
|
|
2304
2304
|
cost: 138,973 tokens (subagent_tokens · tool_uses 5 · 105s)
|
|
2305
|
+
|
|
2306
|
+
- date: 2026-08-19
|
|
2307
|
+
agent: general-purpose (isolated)
|
|
2308
|
+
model: opus (orchestrator) / 위임 기본 티어
|
|
2309
|
+
purpose: "v2.5.0 게시 직전 Pre-Publish 게이트 3항(코드 보안 패스) — 출하되는 diff 만 대상으로, 토큰 스캔이 아니라 «코드 거동»"
|
|
2310
|
+
prompt_summary: "출하 파일 목록을 명시해 범위를 못 박고(마크다운·JSON 제외) · 위협모델을 «소비자가 훅과 셸을 자기 레포에서 실행한다» 로 고정 · 확신도 8 미만 폐기 · 이미 방어가 있으면 결함 아님(주장 전에 그 줄 주변을 읽어라) · 없으면 «없다» 한 줄"
|
|
2311
|
+
outcome: accepted
|
|
2312
|
+
finding: "🟥 **실 결함 2건, 둘 다 재현했다** — 내가 이번 릴리스에서 **새로 출하하는** 레인 2개가 고정 `/tmp` 경로(`/tmp/.r4out` · `/tmp/.lw_*` · `/tmp/.lg_*`)라 공유 `/tmp` 에서 **심볼릭 링크 선점으로 임의 파일 truncate+overwrite**(CWE-377). 게다가 `selfcheck.sh` 에 배선돼 있어 소비자가 셀프체크만 돌려도 발동한다. 나머지 5개 파일은 «없다» 로 냈고, 그 판단마다 근거를 댔다(EVIDENCE_ROOT 폴백은 fail-closed 유지 · `DLC_*` 비인용은 사용자 소유 env · selfcheck 판정이 종료코드)."
|
|
2313
|
+
note: "🟥 이 축은 **레인·되돌림·타계열 diff 리뷰 셋이 다 못 잡은 것**을 잡았다. 그 셋은 «게이트가 옳게 판정하나» 를 봤고 이건 «스크립트가 자기 실행 중 무엇을 쓰나» 다 — 같은 diff 를 봐도 **묻는 것이 다르면 다른 사각을 본다**. 값은 «많이 잡는다» 가 아니라 «내가 방금 만든 것을 다른 질문으로 본다» 쪽에서 나왔다."
|
|
2314
|
+
cost: 153,401 tokens (subagent_tokens · tool_uses 12 · 205s)
|
|
2315
|
+
|
|
2316
|
+
- date: 2026-08-19
|
|
2317
|
+
agent: codex/gpt-5.5 + agy(gemini) 사이드카 (cross-family 패널)
|
|
2318
|
+
model: gpt-5.5 · gemini
|
|
2319
|
+
purpose: "R1~R4 델타의 cross-family 적대 리뷰 — 축을 갈라서 보냈다"
|
|
2320
|
+
prompt_summary: "🟥 **받는 것을 다르게** 했다: codex=diff 전문(fail-open·리댁션 누수·셸 함정·장식 앵커) · agy=**주장 목록**(코드 아님, C1~C8 을 참/거짓/미검증으로) · 둘 다 «미검증을 0 이나 통과로 접지 마라» · 공유 체크아웃이라 git stash/checkout 금지"
|
|
2321
|
+
outcome: accepted
|
|
2322
|
+
finding: "codex 4건 중 **3 채택**(파일명에 든 토큰이 로그에 남음 · 유도 컨트롤이 ERE 로 쓰여 레포명 메타문자면 오탐 — 실측은 더 나빴다, 글로빙까지 타서 컨트롤 4개로 확장 · pathspec 공백 분리) **1 실측 기각**(빈/손상 오버라이드는 기존 기계가 이미 «게이트 INACTIVE» 로 시끄럽게 막는다 — 레인 E3/E3b 로 고정). agy 는 경로 잔존을 독립 재현했고 **`git log --all` 로 «실제 유출 0»** 을 확인해 줬다."
|
|
2323
|
+
note: "🟥 **자력 적발 0 인 항목이 2건**(F2 파일명 토큰 · F3 정규식 컨트롤) — 둘 다 내가 «닫았다» 고 적은 **뒤에** 나왔다. ⚠️ 첫 agy 런은 타임아웃(부분 출력)이라 **좁혀서 재발주**했고 그 값을 썼다 — 죽은 팔의 침묵을 «없다» 로 읽지 않았다."
|
|
2324
|
+
cost: codex 88,598 tokens · agy 미보고(0 으로 렌더하지 말 것)
|
|
2325
|
+
|
|
2326
|
+
- date: 2026-08-19
|
|
2327
|
+
agent: general-purpose (isolated)
|
|
2328
|
+
model: opus (orchestrator) / 위임 기본 티어
|
|
2329
|
+
purpose: "6축 중 **ⓓ 3자대면**만 UNKNOWN 이라 실제로 돌렸다 — 두 절반(선행자산 · 남의 하네스 의자)"
|
|
2330
|
+
prompt_summary: "🟥 두 절반을 명시적으로 갈랐다. ① 「새롭다」는 주장을 **넷으로 쪼개** 각 조각의 선행자산을 찾고 겹침/비겹침을 갈라라 · «없다» 는 찾아보고 없을 때만, 못 찾아본 건 blocked · ② **gstack 의 자기 규율을 먼저 읽고**(FH 어휘로 정규화 금지) 그 운영자 입장에서 위성 도입을 판정 · 🟥 «FH 가 이미 아는 잔여를 다시 말하는 것은 값이 없다 — 그 레포 규율에서만 나오는 것을 대라»"
|
|
2331
|
+
outcome: accepted
|
|
2332
|
+
finding: "🟥 **FH 가 몰랐던 것 넷, 그중 둘은 설계 결함이다.** ⓐ **위성이 미등록 redaction sink** — gstack 은 「타 모델 dispatch」를 이미 sink 로 분류·스캔하는데 위성 경로는 그 스캐너를 한 줄도 안 탄다. 🟥 FH 의 publish_gate 는 **산출물**을 스캔하고 **입력**은 아무도 안 본다(방향이 반대다) ⓑ 무인 acceptEdits 의 폭발반경이 **레포 밖** — 그쪽 `.claude/skills/gstack` 심링크가 라이브 글로벌 설치본이라 동시 실행 중인 남의 CC 세션을 깬다 ⓒ **AI 에게 period 로 닫힌 파일**(ETHOS.md)이 있고 제안조차 위반 — 프로필 스키마에 「금지 파일」이 필수여야 한다 ⓓ 산출 자리를 발명할 필요 없음(`~/.gstack-dev/plans/` 가 이미 의미론이 같다) + 그 레포는 «git status 오염 = 사건». 절반 ① 은 `checked(겹침 있음)` — Renovate(구조) · Sourcegraph Agentic Batch Changes(«repository specific instructions», 2026-06 상용) · gh-aw(착지 형태) 가 각 조각을 선행한다. **net-new 가 아니라 조합**이고 그 사실이 「새롭다」의 강도를 깎는다."
|
|
2333
|
+
note: "🟥 **회수분이 따로 있다**: gstack 의 «짓기 전에 검색» 규율은 절반 ①(선행자산)을 절반 ②의 **입력**으로 요구한다 — FH 는 둘을 따로 돌렸는데 대상의 의자에 앉으면 한 문서다. ⓓ 의 두 질문이 «둘»이라는 것이 FH 쪽 구성이지 보편이 아니라는 뜻이고, 이건 6축 정의 자체에 닿는다. ⚠️ 절반 ① 은 스니펫 기반이고 1차 문서 전수 직독이 아니다 — Sourcegraph 의 그 문구가 「레포가 쓴 것」인지 「code graph 생성」인지 안 갈렸고, 그 한 줄이 갈리면 겹침이 «부분»에서 «전면»으로 바뀐다. **미확인으로 남겼다.** 신호 = tracks/_meta/fh_signal_2026-08-19_satellite-thirdparty-axis.md"
|
|
2334
|
+
cost: 157,378 tokens (subagent_tokens · tool_uses 20 · 313s)
|
package/package.json
CHANGED
|
@@ -10,6 +10,18 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
|
|
10
10
|
|
|
11
11
|
## Plugin Level
|
|
12
12
|
|
|
13
|
+
### [2.5.1] — 2026-08-19
|
|
14
|
+
|
|
15
|
+
**진입점 패리티 — 규칙이 출하돼야 발화한다.** 2.5.0 직후 `④-b` 드리프트 검사가 **AGENTS.md 에 공유 체크아웃 규율이 없다**를 냈다. CLAUDE.md 에는 있고 Codex 진입점에는 없는 상태였고, 그 상태에서는 비-Claude 런타임에 그 규칙이 **보이지 않는다**(gate-locality). 이 릴리스는 그 한 항목을 소비자에게 실제로 보내기 위한 것이다.
|
|
16
|
+
|
|
17
|
+
- **`AGENTS.md` 항목 9 — 공유 체크아웃**: 스위치 전 `git branch --show-current` · 자른 직후 `git log main..HEAD` · **claim 파일은 lock 이 아니라 스냅샷**(남이 브랜치를 옮겨도 안 바뀐다) · 공유 체크아웃에서 `git add -A`/`git stash` 는 트리 전체에 닿는다. 🟥 이 레포에서 두 세션이 오늘 실제로 그걸로 부딪혔다. 기계층(`pre-commit` 의 `branch_claim` 게이트)은 **커밋 시점**이라 그 앞의 `git switch` 사고는 못 막는다
|
|
18
|
+
- 검증: 플로어 티어 블라인드 sim(무엇을 시험하는지 안 알림, reps=3) **arm 3/3 vs control 0/3**. 🟥 control 한 런이 죽어 있어(stdin 경고만) 재실행해 유효 3수를 채웠다 — 죽은 팔을 0 으로 계상하면 n 을 부풀린다
|
|
19
|
+
- 🟥 **잔여: 비-Claude 런타임에서 실제로 안 돌렸다.** sim 은 Claude 로 돌렸다 — 「따라와지는가」는 쟀고 「Codex 가 실제로 그렇게 하는가」는 못 쟀다
|
|
20
|
+
|
|
21
|
+
**함께 나가는 것 (데이터)**: `subagent_invocations_log.yaml` 3건 — 게시 전 보안 패스 · cross-family 패널 · **ⓓ 3자대면**. 마지막 것이 위성 설계에서 **미등록 redaction sink**(입력 무검사)와 **레포 밖 폭발반경**을 찾았고, 처방 5건은 **전부 미착수**다(`tracks/` 신호에 기록, 출하 대상 아님).
|
|
22
|
+
|
|
23
|
+
**BREAKING 없음.** 문서·데이터만이고 게이트 수용은 안 바뀐다.
|
|
24
|
+
|
|
13
25
|
### [2.5.0] — 2026-08-18
|
|
14
26
|
|
|
15
27
|
**정체성 ④(프런티어→조직 전파)의 «조직 = 레포» 축.** 다이제스트 러너가 FH 한 곳만 대상으로 지어져 있어 ④ 가 «자기 소비» 에 머물렀다. 대상 축을 열고, 그 산출이 **복제가 아니라 응용**이 되도록 프로필을 싣고, 공개 표면과 착지를 각각 기계로 잰다.
|